Browse Source

Initial commit

pull/564/head
tarteo 7 years ago
parent
commit
b9deeaa653
  1. 0
      web_shortcut/LICENSE
  2. 61
      web_shortcut/README.rst
  3. 2
      web_shortcut/__init__.py
  4. 21
      web_shortcut/__openerp__.py
  5. 0
      web_shortcut/i18n/ar.po
  6. 0
      web_shortcut/i18n/bs.po
  7. 0
      web_shortcut/i18n/cs.po
  8. 0
      web_shortcut/i18n/da.po
  9. 0
      web_shortcut/i18n/de.po
  10. 0
      web_shortcut/i18n/el.po
  11. 0
      web_shortcut/i18n/en_GB.po
  12. 0
      web_shortcut/i18n/es.po
  13. 0
      web_shortcut/i18n/fi.po
  14. 0
      web_shortcut/i18n/fr.po
  15. 0
      web_shortcut/i18n/gl.po
  16. 0
      web_shortcut/i18n/hr.po
  17. 0
      web_shortcut/i18n/hu.po
  18. 0
      web_shortcut/i18n/it.po
  19. 0
      web_shortcut/i18n/lt.po
  20. 0
      web_shortcut/i18n/mk.po
  21. 0
      web_shortcut/i18n/mn.po
  22. 0
      web_shortcut/i18n/nl.po
  23. 0
      web_shortcut/i18n/pl.po
  24. 0
      web_shortcut/i18n/pt.po
  25. 0
      web_shortcut/i18n/pt_BR.po
  26. 0
      web_shortcut/i18n/ro.po
  27. 0
      web_shortcut/i18n/ru.po
  28. 0
      web_shortcut/i18n/sl.po
  29. 0
      web_shortcut/i18n/sv.po
  30. 0
      web_shortcut/i18n/th.po
  31. 0
      web_shortcut/i18n/tr.po
  32. 0
      web_shortcut/i18n/vi.po
  33. 0
      web_shortcut/i18n/web_shortcuts.pot
  34. 0
      web_shortcut/i18n/zh_CN.po
  35. 0
      web_shortcut/i18n/zh_TW.po
  36. 0
      web_shortcut/models/__init__.py
  37. 0
      web_shortcut/models/web_shortcut.py
  38. 0
      web_shortcut/security/ir.model.access.csv
  39. 0
      web_shortcut/static/description/icon.png
  40. 0
      web_shortcut/static/src/css/web_shortcut.css
  41. 0
      web_shortcut/static/src/img/add-shortcut.png
  42. 159
      web_shortcut/static/src/js/web_shortcut.js
  43. 27
      web_shortcut/static/src/xml/web_shortcut.xml
  44. 13
      web_shortcut/templates/assets.xml
  45. 7
      web_shortcuts/README.rst
  46. 150
      web_shortcuts/static/src/js/web_shortcuts.js
  47. 27
      web_shortcuts/static/src/xml/web_shortcuts.xml
  48. 12
      web_shortcuts/view/web_shortcuts.xml

0
web_shortcuts/LICENSE → web_shortcut/LICENSE

61
web_shortcut/README.rst

@ -0,0 +1,61 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
=============
Shortcut Menu
=============
Adds a button to the top menu which opens a menu containing the user's shortcuts.
Configuration
=============
To configure this module, you need to:
#. Go to any view;
#. click on the star icon besides the title to add / remove a shortcut.
Usage
=====
To use this module, you need to:
#. Click on the star icon in the right corner of the top menu;
#. click the shortcut you want.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/162/9.0
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/162/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed feedback.
Credits
=======
Contributors
------------
* Adrien Peiffer
* Dennis Sluijk <d.sluijk@onestein.nl>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.

2
web_shortcuts/__init__.py → web_shortcut/__init__.py

@ -18,4 +18,4 @@
#
##############################################################################
from . import model
from . import models

21
web_shortcuts/__openerp__.py → web_shortcut/__openerp__.py

@ -19,18 +19,23 @@
#
##############################################################################
{
'name': 'Web Shortcuts',
'version': '8.0.1.0.0',
'category': 'Tools',
'name': 'Shortcut Menu',
'version': '9.0.1.0.0',
'category': 'Web',
'author': "OpenERP SA,Odoo Community Association (OCA)",
'website': 'http://openerp.com',
'depends': ['base'],
'depends': [
'base',
'web'
],
'data': [
'security/ir.model.access.csv',
'view/web_shortcuts.xml',
],
'qweb': ['static/src/xml/web_shortcuts.xml'],
'installable': False,
'templates/assets.xml',
],
'qweb': [
'static/src/xml/web_shortcut.xml'
],
'installable': True,
'auto_install': False,
}

0
web_shortcuts/i18n/ar.po → web_shortcut/i18n/ar.po

0
web_shortcuts/i18n/bs.po → web_shortcut/i18n/bs.po

0
web_shortcuts/i18n/cs.po → web_shortcut/i18n/cs.po

0
web_shortcuts/i18n/da.po → web_shortcut/i18n/da.po

0
web_shortcuts/i18n/de.po → web_shortcut/i18n/de.po

0
web_shortcuts/i18n/el.po → web_shortcut/i18n/el.po

0
web_shortcuts/i18n/en_GB.po → web_shortcut/i18n/en_GB.po

0
web_shortcuts/i18n/es.po → web_shortcut/i18n/es.po

0
web_shortcuts/i18n/fi.po → web_shortcut/i18n/fi.po

0
web_shortcuts/i18n/fr.po → web_shortcut/i18n/fr.po

0
web_shortcuts/i18n/gl.po → web_shortcut/i18n/gl.po

0
web_shortcuts/i18n/hr.po → web_shortcut/i18n/hr.po

0
web_shortcuts/i18n/hu.po → web_shortcut/i18n/hu.po

0
web_shortcuts/i18n/it.po → web_shortcut/i18n/it.po

0
web_shortcuts/i18n/lt.po → web_shortcut/i18n/lt.po

0
web_shortcuts/i18n/mk.po → web_shortcut/i18n/mk.po

0
web_shortcuts/i18n/mn.po → web_shortcut/i18n/mn.po

0
web_shortcuts/i18n/nl.po → web_shortcut/i18n/nl.po

0
web_shortcuts/i18n/pl.po → web_shortcut/i18n/pl.po

0
web_shortcuts/i18n/pt.po → web_shortcut/i18n/pt.po

0
web_shortcuts/i18n/pt_BR.po → web_shortcut/i18n/pt_BR.po

0
web_shortcuts/i18n/ro.po → web_shortcut/i18n/ro.po

0
web_shortcuts/i18n/ru.po → web_shortcut/i18n/ru.po

0
web_shortcuts/i18n/sl.po → web_shortcut/i18n/sl.po

0
web_shortcuts/i18n/sv.po → web_shortcut/i18n/sv.po

0
web_shortcuts/i18n/th.po → web_shortcut/i18n/th.po

0
web_shortcuts/i18n/tr.po → web_shortcut/i18n/tr.po

0
web_shortcuts/i18n/vi.po → web_shortcut/i18n/vi.po

0
web_shortcuts/i18n/web_shortcuts.pot → web_shortcut/i18n/web_shortcuts.pot

0
web_shortcuts/i18n/zh_CN.po → web_shortcut/i18n/zh_CN.po

0
web_shortcuts/i18n/zh_TW.po → web_shortcut/i18n/zh_TW.po

0
web_shortcuts/model/__init__.py → web_shortcut/models/__init__.py

0
web_shortcuts/model/web_shortcut.py → web_shortcut/models/web_shortcut.py

0
web_shortcuts/security/ir.model.access.csv → web_shortcut/security/ir.model.access.csv

0
web_shortcuts/static/description/icon.png → web_shortcut/static/description/icon.png

Before

Width: 80  |  Height: 80  |  Size: 5.2 KiB

After

Width: 80  |  Height: 80  |  Size: 5.2 KiB

0
web_shortcuts/static/src/css/web_shortcuts.css → web_shortcut/static/src/css/web_shortcut.css

0
web_shortcuts/static/src/img/add-shortcut.png → web_shortcut/static/src/img/add-shortcut.png

Before

Width: 16  |  Height: 16  |  Size: 337 B

After

Width: 16  |  Height: 16  |  Size: 337 B

159
web_shortcut/static/src/js/web_shortcut.js

@ -0,0 +1,159 @@
/*############################################################################
#
# 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/>.
#
############################################################################*/
odoo.define('web.shortcut', function(require) {
var widget = require('web.Widget'),
menu = require('web.UserMenu'),
client = require('web.WebClient'),
view_manager = require('web.ViewManager'),
model = require('web.DataModel');
var ShortcutMenu = widget.extend({
template: 'Systray.ShortcutMenu',
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.model = new model('web.shortcut');
},
start: function() {
var self = this;
this._super();
this.trigger('load');
this.$el.on('click', '.oe_systray_shortcut_menu a', function() {
self.click($(this));
});
},
load: function() {
var self = this;
this.$el.find('.oe_systray_shortcut_menu').empty();
return this.model.call('get_user_shortcuts', [
]).done(function(shortcuts) {
_.each(shortcuts, function(sc) {
self.trigger('display', sc);
});
});
},
add: function (sc) {
var self = this;
this.model.call('create', [sc]).then(function(out){
self.trigger('load');
});
},
display: function(sc) {
var self = this;
this.$el.find('.oe_systray_shortcut_menu').append();
var $sc = $(QWeb.render('Systray.ShortcutMenu.Item', {'shortcut': sc}));
$sc.appendTo(self.$el.find('.oe_systray_shortcut_menu'));
},
remove: function (menu_id) {
var menu_id = this.session.active_id;
var $shortcut = this.$el.find('.oe_systray_shortcut_menu li a[data-id=' + menu_id + ']');
var shortcut_id = $shortcut.data('shortcut-id');
$shortcut.remove();
this.model.call('unlink', [shortcut_id]);
},
click: function($link) {
var self = this,
action_id = $link.data('id');
new model('ir.ui.menu').query(['action']).filter([['id', '=', id]]).context(null).all().then(function(menu) {
var action_str = menu[0].action;
var action_str_parts = action_str.split(',');
action_id = parseInt(action_str_parts[1]);
self.trigger('click', action_id);
});
},
has: function(menu_id) {
return !!this.$el.find('a[data-id=' + menu_id + ']').length;
}
});
menu.include({
do_update: function() {
var self = this;
this._super.apply(this, arguments);
this.update_promise.done(function() {
if (self.shortcuts) {
self.shortcuts.trigger('load');
} else {
self.shortcuts = new ShortcutMenu(self);
self.shortcuts.prependTo(self.$el.parent());
}
});
},
});
client.include({
show_application: function() {
var self = this;
this._super.apply(this, arguments);
this.user_menu.on('click', this, function(action_id) {
self.do_action(action_id);
});
}
});
view_manager.include({
switch_mode: function (view_type, no_store) {
var self = this;
this._super.apply(this, arguments).done(function() {
self.shortcut_check(self.views[view_type]);
});
},
shortcut_check: function(view) {
var self = this;
console.log(this);
var shortcuts_menu = this.action_manager.webclient.user_menu.shortcuts;
// display shortcuts if on the first view for the action
var $shortcut_toggle = this.$el.find('.oe_shortcut_toggle');
if (!this.action.name ||
!(view.view_type === this.view_stack[0].view_type
&& view.view_id === this.view_stack[0].view_id)) {
$shortcut_toggle.hide();
return;
}
// Anonymous users don't have user_menu
if (shortcuts_menu) {
$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,
'menu_id': self.session.active_id,
'name': self.action.name
});
}
$shortcut_toggle.toggleClass("oe_shortcut_remove");
});
}
}
});
return ShortcutMenu;
});

27
web_shortcut/static/src/xml/web_shortcut.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- vim:fdl=1:
-->
<templates>
<t t-name="Systray.ShortcutMenu">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="/web_shortcut/static/src/img/add-shortcut.png"/>
</a>
<ul class="oe_systray_shortcut_menu dropdown-menu">
</ul>
</li>
</t>
<t t-name="Systray.ShortcutMenu.Item">
<li>
<a href="#" t-att-data-id="shortcut.menu_id[0]" 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>

13
web_shortcut/templates/assets.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/web_shortcut/static/src/css/web_shortcut.css"/>
<script type="text/javascript" src="/web_shortcut/static/src/js/web_shortcut.js"></script>
</xpath>
</template>
</data>
</openerp>

7
web_shortcuts/README.rst

@ -1,7 +0,0 @@
Enable shortcuts feature in the web client.
===========================================
Add a Shortcut icon in the systray in order to access the user's shortcuts
(if any).
Add a Shortcut icon besides the views title in order to add/remove a shortcut.

150
web_shortcuts/static/src/js/web_shortcuts.js

@ -1,150 +0,0 @@
/*############################################################################
#
# 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.model = new instance.web.Model('web.shortcut');
},
start: function() {
var self = this;
this._super();
this.trigger('load');
this.$el.on('click', '.oe_systray_shortcuts_items a', function() {
self.trigger('click', $(this));
});
},
load: function() {
var self = this;
this.$el.find('.oe_systray_shortcuts_items').empty();
return this.model.call('get_user_shortcuts', [
instance.session.uid,
instance.web.pyeval.eval('context', {})
]).done(function(shortcuts) {
_.each(shortcuts, function(sc) {
self.trigger('display', sc);
});
});
},
add: function (sc) {
var self = this;
this.model.call('create', [sc]).then(function(out){
self.trigger('load');
});
},
display: function(sc) {
var self = this;
this.$el.find('.oe_systray_shortcuts_items').append();
var $sc = $(QWeb.render('Systray.Shortcuts.Item', {'shortcut': sc}));
$sc.appendTo(self.$el.find('.oe_systray_shortcuts_items'));
},
remove: function (menu_id) {
var menu_id = this.session.active_id;
var $shortcut = this.$el.find('.oe_systray_shortcuts_items li a[data-id=' + menu_id + ']');
var shortcut_id = $shortcut.data('shortcut-id');
$shortcut.remove();
this.model.call('unlink', [shortcut_id]);
},
click: function($link) {
var self = this,
id = $link.data('id');
self.session.active_id = id;
// TODO: Use do_action({menu_id: id, type: 'ir.actions.menu'})
new instance.web.Model('ir.ui.menu').query(['action']).filter([['id', '=', id]]).context(null).all().then(function(menu) {
var action_str = menu[0].action;
var action_str_parts = action_str.split(',');
var action_id = parseInt(action_str_parts[1])
self.rpc('/web/action/load', {'action_id': action_id}).done(function(action) {
instance.webclient.on_menu_action({action_id: action.id});
});
});
this.$el.find('.oe_systray_shortcuts').trigger('mouseout');
},
has: function(menu_id) {
return !!this.$el.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.done(function() {
if (self.shortcuts) {
self.shortcuts.trigger('load');
} else {
self.shortcuts = new instance.web_shortcuts.Shortcuts(self);
self.shortcuts.appendTo(instance.webclient.$el.find('.oe_systray'));
}
});
},
});
instance.web.ViewManagerAction.include({
switch_mode: function (view_type, no_store) {
var self = this;
this._super.apply(this, arguments).done(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.$el.find('.oe_shortcuts_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;
}
// Anonymous users don't have user_menu
if (shortcuts_menu) {
$shortcut_toggle.toggleClass('oe_shortcuts_remove', shortcuts_menu.has(self.session.active_id));
$shortcut_toggle.unbind("click").click(function() {
if ($shortcut_toggle.hasClass("oe_shortcuts_remove")) {
shortcuts_menu.trigger('remove', self.session.active_id);
} else {
shortcuts_menu.trigger('add', {
'user_id': self.session.uid,
'menu_id': self.session.active_id,
'name': self.action.name
});
}
$shortcut_toggle.toggleClass("oe_shortcuts_remove");
});
}
}
});
};

27
web_shortcuts/static/src/xml/web_shortcuts.xml

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- vim:fdl=1:
-->
<templates id="template" xml:space="preserve">
<t t-name="Systray.Shortcuts">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="/web_shortcuts/static/src/img/add-shortcut.png"/>
</a>
<ul class="oe_systray_shortcuts_items dropdown-menu">
</ul>
</li>
</t>
<t t-name="Systray.Shortcuts.Item">
<li>
<a href="#" t-att-data-id="shortcut.menu_id[0]" 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_shortcuts_toggle" title="Add / Remove Shortcut..."
href="javascript: void(0)"> </a>
</t>
</t>
</templates>

12
web_shortcuts/view/web_shortcuts.xml

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Include JS file for the custom view to select domain from filters -->
<template id="assets_backend" name="filter_selection" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/web_shortcuts/static/src/css/web_shortcuts.css"/>
<script type="text/javascript" src="/web_shortcuts/static/src/js/web_shortcuts.js"></script>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save