summaryrefslogtreecommitdiff
path: root/addons/web_shortcuts/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web_shortcuts/static/src')
-rw-r--r--addons/web_shortcuts/static/src/css/web_shortcuts.css57
-rw-r--r--addons/web_shortcuts/static/src/img/icon.pngbin0 -> 5369 bytes
-rw-r--r--addons/web_shortcuts/static/src/js/web_shortcuts.js145
-rw-r--r--addons/web_shortcuts/static/src/xml/web_shortcuts.xml24
4 files changed, 226 insertions, 0 deletions
diff --git a/addons/web_shortcuts/static/src/css/web_shortcuts.css b/addons/web_shortcuts/static/src/css/web_shortcuts.css
new file mode 100644
index 00000000000..e2deff8d406
--- /dev/null
+++ b/addons/web_shortcuts/static/src/css/web_shortcuts.css
@@ -0,0 +1,57 @@
+/* Shortcuts*/
+.oe_systray_shortcuts {
+ margin: 3px;
+}
+.oe-shortcut-toggle {
+ height: 20px;
+ margin-top: 3px;
+ padding: 0;
+ width: 24px;
+ cursor: pointer;
+ display: block;
+ background: url(/web/static/src/img/add-shortcut.png) no-repeat center center;
+ float: left;
+}
+.oe-shortcut-remove{
+ background: url(/web/static/src/img/remove-shortcut.png) no-repeat center center;
+}
+.oe-shortcuts {
+ position: absolute;
+ margin: 0;
+ padding: 6px 15px;
+ top: 37px;
+ left: 197px;
+ right: 0;
+ height: 17px;
+ line-height: 1.2;
+}
+.oe-shortcuts ul {
+ display: block;
+ overflow: hidden;
+ list-style: none;
+ white-space: nowrap;
+ padding: 0;
+ margin: 0;
+}
+.oe-shortcuts li {
+ cursor: pointer;
+ display: -moz-inline-stack;
+ display: inline-block;
+ display: inline; /*IE7 */
+ color: #fff;
+ text-align: center;
+ border-left: 1px solid #909090;
+ padding: 0 4px;
+ font-size: 80%;
+ font-weight: normal;
+ vertical-align: top;
+}
+
+.oe-shortcuts li:hover {
+ background-color: #666;
+}
+.oe-shortcuts li:first-child {
+ border-left: none;
+ padding-left: 0;
+}
+
diff --git a/addons/web_shortcuts/static/src/img/icon.png b/addons/web_shortcuts/static/src/img/icon.png
new file mode 100644
index 00000000000..44347e95f45
--- /dev/null
+++ b/addons/web_shortcuts/static/src/img/icon.png
Binary files differ
diff --git a/addons/web_shortcuts/static/src/js/web_shortcuts.js b/addons/web_shortcuts/static/src/js/web_shortcuts.js
new file mode 100644
index 00000000000..948e6ab3d82
--- /dev/null
+++ b/addons/web_shortcuts/static/src/js/web_shortcuts.js
@@ -0,0 +1,145 @@
+/*############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011-2012 OpenERP SA (<http://openerp.com>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################*/
+
+openerp.web_shortcuts = function (instance) {
+
+var QWeb = instance.web.qweb,
+ _t = instance.web._t;
+
+instance.web_shortcuts.Shortcuts = instance.web.Widget.extend({
+ template: 'Systray.Shortcuts',
+
+ init: function() {
+ this._super();
+ this.on('load', this, this.load);
+ this.on('add', this, this.add);
+ this.on('display', this, this.display);
+ this.on('remove', this, this.remove);
+ this.on('click', this, this.click);
+ this.dataset = new instance.web.DataSet(this, 'ir.ui.view_sc');
+ },
+ start: function() {
+ var self = this;
+ this._super();
+ this.trigger('load');
+ this.$element.on('click', '.oe_systray_shortcuts_items a', function() {
+ self.trigger('click', $(this));
+ });
+ },
+ load: function() {
+ var self = this;
+ this.$element.find('.oe_systray_shortcuts_items').empty();
+ return this.rpc('/web/shortcuts/list', {}, function(shortcuts) {
+ _.each(shortcuts, function(sc) {
+ self.trigger('display', sc);
+ });
+ });
+ },
+ add: function (sc) {
+ var self = this;
+ this.dataset.create(sc, function (out) {
+ self.trigger('display', {
+ name : sc.name,
+ id : out.result,
+ res_id : sc.res_id
+ });
+ });
+ },
+ display: function(sc) {
+ var self = this;
+ this.$element.find('.oe_systray_shortcuts_items').append()
+ var $sc = $(QWeb.render('Systray.Shortcuts.Item', {'shortcut': sc}));
+ $sc.appendTo(self.$element.find('.oe_systray_shortcuts_items'));
+ },
+ remove: function (menu_id) {
+ var menu_id = this.session.active_id;
+ var $shortcut = this.$element.find('.oe_systray_shortcuts_items li a[data-id=' + menu_id + ']');
+ var shortcut_id = $shortcut.data('shortcut-id');
+ $shortcut.remove();
+ this.dataset.unlink([shortcut_id]);
+ },
+ click: function($link) {
+ var self = this,
+ id = $link.data('id');
+ self.session.active_id = id;
+ self.rpc('/web/menu/action', {'menu_id': id}, function(ir_menu_data) {
+ if (ir_menu_data.action.length){
+ instance.webclient.menu.on_action(ir_menu_data.action[0][2]);
+ }
+ });
+ this.$element.find('.oe_systray_shortcuts').trigger('mouseout');
+ },
+ has: function(menu_id) {
+ return !!this.$element.find('a[data-id=' + menu_id + ']').length;
+ }
+});
+
+instance.web.UserMenu.include({
+ do_update: function() {
+ var self = this;
+ this._super.apply(this, arguments);
+ this.update_promise.then(function() {
+ if (self.shortcuts) {
+ self.shortcuts.trigger('load');
+ } else {
+ self.shortcuts = new instance.web_shortcuts.Shortcuts(self);
+ self.shortcuts.appendTo(instance.webclient.$element.find('.oe_systray'));
+ }
+ });
+ },
+});
+
+instance.web.ViewManagerAction.include({
+ on_mode_switch: function (view_type, no_store) {
+ var self = this;
+ this._super.apply(this, arguments).then(function() {
+ self.shortcut_check(self.views[view_type]);
+ });
+ },
+ shortcut_check : function(view) {
+ var self = this;
+ var shortcuts_menu = instance.webclient.user_menu.shortcuts;
+ var grandparent = this.getParent() && this.getParent().getParent();
+ // display shortcuts if on the first view for the action
+ var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
+ if (!this.action.name ||
+ !(view.view_type === this.views_src[0].view_type
+ && view.view_id === this.views_src[0].view_id)) {
+ $shortcut_toggle.hide();
+ return;
+ }
+ $shortcut_toggle.toggleClass('oe-shortcut-remove', shortcuts_menu.has(self.session.active_id));
+ $shortcut_toggle.unbind("click").click(function() {
+ if ($shortcut_toggle.hasClass("oe-shortcut-remove")) {
+ shortcuts_menu.trigger('remove', self.session.active_id);
+ } else {
+ shortcuts_menu.trigger('add', {
+ 'user_id': self.session.uid,
+ 'res_id': self.session.active_id,
+ 'resource': 'ir.ui.menu',
+ 'name': self.action.name
+ });
+ }
+ $shortcut_toggle.toggleClass("oe-shortcut-remove");
+ });
+ }
+});
+
+};
diff --git a/addons/web_shortcuts/static/src/xml/web_shortcuts.xml b/addons/web_shortcuts/static/src/xml/web_shortcuts.xml
new file mode 100644
index 00000000000..656fded1d75
--- /dev/null
+++ b/addons/web_shortcuts/static/src/xml/web_shortcuts.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vim:fdl=1:
+-->
+<templates id="template" xml:space="preserve">
+<t t-name="Systray.Shortcuts">
+ <div class="oe_systray_shortcuts oe_systray_dropdown">
+ <a href="#"><img src="/web_shortcuts/static/src/img/icon.png" width="22" height="22" border="0"/></a>
+ <ul class="oe_systray_shortcuts_items oe_systray_dropdown_options"/>
+ </div>
+</t>
+<t t-name="Systray.Shortcuts.Item">
+ <li>
+ <a href="#" t-att-data-id="shortcut.res_id" t-att-data-shortcut-id="shortcut.id">
+ <t t-esc="shortcut.name"/>
+ </a>
+ </li>
+</t>
+<t t-extend="ViewManagerAction">
+ <t t-jquery="h2.oe_view_title" t-operation="prepend">
+ <a t-if="widget.flags.display_title !== false" class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
+ href="javascript: void(0)"> </a>
+ </t>
+</t>
+</templates>