summaryrefslogtreecommitdiff
path: root/addons/note/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/note/static/src')
-rw-r--r--addons/note/static/src/js/systray.js138
-rw-r--r--addons/note/static/src/less/note.less38
-rw-r--r--addons/note/static/src/xml/systray.xml32
3 files changed, 208 insertions, 0 deletions
diff --git a/addons/note/static/src/js/systray.js b/addons/note/static/src/js/systray.js
new file mode 100644
index 00000000000..54a2fe6bdd1
--- /dev/null
+++ b/addons/note/static/src/js/systray.js
@@ -0,0 +1,138 @@
+odoo.define('note.systray', function (require) {
+"use strict";
+
+var core = require('web.core');
+var ActivityMenu = require('mail.systray').ActivityMenu;
+var datepicker = require('web.datepicker');
+
+var _t = core._t;
+
+ActivityMenu.include({
+ events: _.extend({}, ActivityMenu.prototype.events, {
+ 'click .o_note_show': '_onAddNoteClick',
+ 'click .o_note_save': '_onNoteSaveClick',
+ 'click .o_note_set_datetime': '_onNoteDateTimeSetClick',
+ 'keydown input.o_note_input': '_onNoteInputKeyDown',
+ 'click .o_note': '_onNewNoteClick',
+ }),
+ //--------------------------------------------------
+ // Private
+ //--------------------------------------------------
+ /**
+ * Moving notes at first place
+ * @override
+ */
+ _getActivityData: function () {
+ var self = this;
+ return this._super.apply(this, arguments).then(function() {
+ var reminderIndex = _.findIndex(self.activities, function (val) { return val.model == 'note.note'; });
+ if (reminderIndex > 0) {
+ self.activities.splice(0, 0, self.activities.splice(reminderIndex, 1)[0]);
+ }
+ });
+ },
+ /**
+ * Save the note to database using datepicker date and field as note
+ * @private
+ */
+ _saveNote: function () {
+ var note = this.$('.o_note_input').val().trim();
+ if (! note) {
+ return;
+ }
+ var params = {'note': note};
+ var noteDateTime = this.noteDateTimeWidget.getValue();
+ if (noteDateTime) {
+ params = _.extend(params, {'date_deadline': noteDateTime});
+ }
+ this.$('.o_note_show').removeClass('hidden');
+ this.$('.o_note').addClass('hidden');
+ this._rpc({
+ route: '/note/new',
+ params: params,
+ }).then(this._updateActivityPreview.bind(this));
+ },
+ //-----------------------------------------
+ // Handlers
+ //-----------------------------------------
+ /**
+ * @override
+ */
+ _onActivityFilterClick: function (ev) {
+ var $el = $(ev.currentTarget);
+ if(!$el.hasClass("o_note")) {
+ var data = _.extend({}, $el.data(), $(ev.target).data());
+ if (data.res_model === "note.note" && data.filter === "my") {
+ this.do_action({
+ type: 'ir.actions.act_window',
+ name: data.model_name,
+ res_model: data.res_model,
+ views: [[false, 'kanban'], [false, 'form'], [false, 'list']]
+ });
+ } else {
+ this._super.apply(this, arguments);
+ }
+ }
+ },
+ /**
+ * When add new note button clicked, toggling quick note create view inside
+ * Systray activity view
+ *
+ * @private
+ * @param {MouseEvent} ev
+ */
+ _onAddNoteClick: function (ev) {
+ ev.stopPropagation();
+ if (!this.noteDateTimeWidget){
+ this.noteDateTimeWidget = new datepicker.DateWidget(this, {useCurrent: true});
+ }
+ this.noteDateTimeWidget.appendTo(this.$('.o_note_datetime'));
+ this.noteDateTimeWidget.$input.attr('placeholder', _t("Today"));
+ this.$('.o_note_show, .o_note').toggleClass('hidden');
+ this.$('.o_note_input').val('').focus();
+
+ },
+ /**
+ * When focusing on input for new quick note systerm tray must be open.
+ * Preventing to close
+ *
+ * @private
+ * @param {MouseEvent} ev
+ */
+ _onNewNoteClick: function (ev) {
+ ev.stopPropagation();
+ },
+ /**
+ * Opens datetime picker for note.
+ * Quick FIX due to no option for set custom icon instead of caret in datepicker.
+ *
+ * @private
+ * @param {MouseEvent} ev
+ */
+ _onNoteDateTimeSetClick: function (ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ this.noteDateTimeWidget.$input.click();
+ },
+ /**
+ * Saving note (quick create) and updating activity preview
+ *
+ * @private
+ * @param {MouseEvent} ev
+ */
+ _onNoteSaveClick: function (ev) {
+ this._saveNote();
+ },
+ /**
+ * Handling Enter key for quick create note.
+ *
+ * @private
+ * @param {KeyboardEvent} ev
+ */
+ _onNoteInputKeyDown: function (ev) {
+ if (ev.which === $.ui.keyCode.ENTER) {
+ this._saveNote();
+ }
+ },
+});
+});
diff --git a/addons/note/static/src/less/note.less b/addons/note/static/src/less/note.less
index c92c5cd0500..926e7ddb913 100644
--- a/addons/note/static/src/less/note.less
+++ b/addons/note/static/src/less/note.less
@@ -23,3 +23,41 @@
}
}
}
+
+// Quick create notes from systray
+.o_note.o_mail_channel_preview {
+ background-color: white;
+ .o_channel_info {
+ .o_channel_title {
+ .o_channel_name {
+ .o-flex(1, 1, 100%);
+ }
+ }
+ .o_note_input_box {
+ .o-flex-display();
+ p {
+ .o-flex(1, 1, auto);
+ }
+ }
+ .o_note_save {
+ font-size: 11px;
+ font-weight: bold;
+ }
+ }
+ .o_note_input {
+ border: none;
+ }
+ .o_note_datetime {
+ .o_datepicker {
+ .o_datepicker_input {
+ float: right;
+ text-align: right;
+ border: none;
+ font-size: 11px;
+ }
+ .o_datepicker_button {
+ display: none;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/addons/note/static/src/xml/systray.xml b/addons/note/static/src/xml/systray.xml
new file mode 100644
index 00000000000..4b2052c3b85
--- /dev/null
+++ b/addons/note/static/src/xml/systray.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates>
+ <t t-extend="mail.chat.ActivityMenuPreview">
+ <t t-jquery="t[t-foreach*='activities'][t-as*='activity']" t-operation="after">
+ <div class="o_note_show">
+ <a class="btn btn-block text-center">Add new note</a>
+ </div>
+ <div class="o_note o_mail_channel_preview hidden">
+ <div class="o_mail_channel_image o_mail_channel_app">
+ <img src="/note/static/description/icon.png"/>
+ </div>
+ <div class="o_channel_info">
+ <div class="o_channel_title">
+ <span class="o_channel_name"><strong>Add a note</strong></span>
+ <div class="o_note_datetime"/>
+ <span class="ml4">
+ <a class="o_note_set_datetime text-muted">
+ <span class="fa fa-clock-o"/>
+ </a>
+ </span>
+ </div>
+ <div class="o_note_input_box">
+ <p><input class="o_note_input" type="text" placeholder="Remember..." /></p>
+ <span class="ml8 mr4">
+ <a class="o_note_save">SAVE</a>
+ </span>
+ </div>
+ </div>
+ </div>
+ </t>
+ </t>
+</templates> \ No newline at end of file