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 @@
+
+
+