From 4b242db03eaa9dc329b2469ac2b6b285320063ab Mon Sep 17 00:00:00 2001 From: MuK IT GmbH Date: Tue, 2 Jul 2019 21:34:48 +0000 Subject: [PATCH] publish muk_web_theme - 12.0 --- muk_web_theme/__manifest__.py | 2 +- muk_web_theme/static/src/js/chrome/apps.js | 103 +--------------- muk_web_theme/static/src/js/core/search.js | 133 +++++++++++++++++++++ muk_web_theme/template/assets.xml | 3 + 4 files changed, 140 insertions(+), 101 deletions(-) create mode 100644 muk_web_theme/static/src/js/core/search.js diff --git a/muk_web_theme/__manifest__.py b/muk_web_theme/__manifest__.py index b5605c9..3bb4991 100644 --- a/muk_web_theme/__manifest__.py +++ b/muk_web_theme/__manifest__.py @@ -19,7 +19,7 @@ { "name": "MuK Backend Theme", "summary": "Odoo Community Backend Theme", - "version": "12.0.1.6.2", + "version": "12.0.1.6.3", "category": "Themes/Backend", "license": "AGPL-3", "author": "MuK IT", diff --git a/muk_web_theme/static/src/js/chrome/apps.js b/muk_web_theme/static/src/js/chrome/apps.js index 5d06921..6852716 100644 --- a/muk_web_theme/static/src/js/chrome/apps.js +++ b/muk_web_theme/static/src/js/chrome/apps.js @@ -25,11 +25,12 @@ var config = require("web.config"); var session = require("web.session"); var AppsMenu = require("web.AppsMenu"); +var MenuSearchMixin = require("muk_web_theme.MenuSearchMixin"); var _t = core._t; var QWeb = core.qweb; -AppsMenu.include({ +AppsMenu.include(_.extend({}, MenuSearchMixin, { events: _.extend({}, AppsMenu.prototype.events, { "keydown .mk_search_input input": "_onSearchResultsNavigate", "click .mk_menu_search_result": "_onSearchResultChosen", @@ -54,47 +55,6 @@ AppsMenu.include({ this.$search_results = this.$(".mk_search_results"); return this._super.apply(this, arguments); }, - _menuInfo: function (key) { - var original = this._searchableMenus[key]; - return _.extend({ - action_id: parseInt(original.action.split(',')[1], 10), - }, original); - }, - _searchFocus: function () { - if (!config.device.isMobile) { - this.$search_input.focus(); - } else { - this.$search_input.blur(); - } - }, - _searchReset: function () { - this.$search_container.removeClass("has-results"); - this.$search_results.empty(); - this.$search_input.val(""); - }, - _searchMenusSchedule: function () { - this._search_def.reject(); - this._search_def = $.Deferred(); - setTimeout(this._search_def.resolve.bind(this._search_def), 50); - this._search_def.done(this._searchMenus.bind(this)); - }, - _searchMenus: function () { - var query = this.$search_input.val(); - if (query === "") { - this.$search_container.removeClass("has-results"); - this.$search_results.empty(); - return; - } - var results = fuzzy.filter(query, _.keys(this._searchableMenus), { - pre: "", - post: "", - }); - this.$search_container.toggleClass("has-results", Boolean(results.length)); - this.$search_results.html(QWeb.render("muk_web_theme.MenuSearchResults", { - results: results, - widget: this, - })); - }, _onSearchResultChosen: function (event) { event.preventDefault(); var $result = $(event.currentTarget), @@ -111,61 +71,10 @@ AppsMenu.include({ }); core.bus.trigger("change_menu_section", app.menuID); }, - _onSearchResultsNavigate: function (event) { - if (this.$search_results.html().trim() === "") { - this._searchMenusSchedule(); - return; - } - var all = this.$search_results.find(".mk_menu_search_result"); - var key = event.key || String.fromCharCode(event.which); - var pre_focused = all.filter(".active") || $(all[0]); - var offset = all.index(pre_focused); - if (key === "Tab") { - event.preventDefault(); - key = event.shiftKey ? "ArrowUp" : "ArrowDown"; - } - switch (key) { - case "Enter": - pre_focused.click(); - break; - case "ArrowUp": - offset--; - break; - case "ArrowDown": - offset++; - break; - default: - this._searchMenusSchedule(); - return; - } - if (offset < 0) { - offset = all.length + offset; - } else if (offset >= all.length) { - offset -= all.length; - } - var new_focused = $(all[offset]); - pre_focused.removeClass("active"); - new_focused.addClass("active"); - this.$search_results.scrollTo(new_focused, { - offset: { - top: this.$search_results.height() * -0.5, - }, - }); - }, _onAppsMenuItemClicked: function (event) { this._super.apply(this, arguments); event.preventDefault(); }, - _findNames: function (memo, menu) { - if (menu.action) { - var key = menu.parent_id ? menu.parent_id[1] + "/" : ""; - memo[key + menu.name] = menu; - } - if (menu.children.length) { - _.reduce(menu.children, this._findNames.bind(this), memo); - } - return memo; - }, _setBackgroundImage: function () { var url = session.url('/web/image', { model: 'res.company', @@ -182,15 +91,9 @@ AppsMenu.include({ }); } }, - _onMenuShown: function(event) { - this._searchFocus(); - }, - _onMenuHidden: function(event) { - this._searchReset(); - }, _onMenuHide: function(event) { return $('.oe_wait').length === 0 && !this.$('input').is(':focus'); }, -}); +})); }); \ No newline at end of file diff --git a/muk_web_theme/static/src/js/core/search.js b/muk_web_theme/static/src/js/core/search.js new file mode 100644 index 0000000..c428357 --- /dev/null +++ b/muk_web_theme/static/src/js/core/search.js @@ -0,0 +1,133 @@ +/********************************************************************************** +* +* Copyright (C) 2017 MuK IT GmbH +* +* 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 . +* +**********************************************************************************/ + +odoo.define('muk_web_theme.MenuSearchMixin', function (require) { +"use strict"; + +var core = require('web.core'); +var config = require("web.config"); +var session = require("web.session"); + +var _t = core._t; +var QWeb = core.qweb; + +var MenuSearchMixin = { + _findNames: function (memo, menu) { + if (menu.action) { + var key = menu.parent_id ? menu.parent_id[1] + "/" : ""; + memo[key + menu.name] = menu; + } + if (menu.children.length) { + _.reduce(menu.children, this._findNames.bind(this), memo); + } + return memo; + }, + _menuInfo: function (key) { + var original = this._searchableMenus[key]; + return _.extend({ + action_id: parseInt(original.action.split(',')[1], 10), + }, original); + }, + _searchFocus: function () { + if (!config.device.isMobile) { + this.$search_input.focus(); + } else { + this.$search_input.blur(); + } + }, + _searchReset: function () { + this.$search_container.removeClass("has-results"); + this.$search_results.empty(); + this.$search_input.val(""); + }, + _searchMenusSchedule: function () { + this._search_def.reject(); + this._search_def = $.Deferred(); + setTimeout(this._search_def.resolve.bind(this._search_def), 50); + this._search_def.done(this._searchMenus.bind(this)); + }, + _searchMenus: function () { + var query = this.$search_input.val(); + if (query === "") { + this.$search_container.removeClass("has-results"); + this.$search_results.empty(); + return; + } + var results = fuzzy.filter(query, _.keys(this._searchableMenus), { + pre: "", + post: "", + }); + this.$search_container.toggleClass("has-results", Boolean(results.length)); + this.$search_results.html(QWeb.render("muk_web_theme.MenuSearchResults", { + results: results, + widget: this, + })); + }, + _onSearchResultsNavigate: function (event) { + if (this.$search_results.html().trim() === "") { + this._searchMenusSchedule(); + return; + } + var all = this.$search_results.find(".mk_menu_search_result"); + var key = event.key || String.fromCharCode(event.which); + var pre_focused = all.filter(".active") || $(all[0]); + var offset = all.index(pre_focused); + if (key === "Tab") { + event.preventDefault(); + key = event.shiftKey ? "ArrowUp" : "ArrowDown"; + } + switch (key) { + case "Enter": + pre_focused.click(); + break; + case "ArrowUp": + offset--; + break; + case "ArrowDown": + offset++; + break; + default: + this._searchMenusSchedule(); + return; + } + if (offset < 0) { + offset = all.length + offset; + } else if (offset >= all.length) { + offset -= all.length; + } + var new_focused = $(all[offset]); + pre_focused.removeClass("active"); + new_focused.addClass("active"); + this.$search_results.scrollTo(new_focused, { + offset: { + top: this.$search_results.height() * -0.5, + }, + }); + }, + _onMenuShown: function(event) { + this._searchFocus(); + }, + _onMenuHidden: function(event) { + this._searchReset(); + }, +}; + +return MenuSearchMixin; + +}); \ No newline at end of file diff --git a/muk_web_theme/template/assets.xml b/muk_web_theme/template/assets.xml index 39e08c7..2a07197 100644 --- a/muk_web_theme/template/assets.xml +++ b/muk_web_theme/template/assets.xml @@ -41,6 +41,9 @@ + +