Browse Source

publish muk_web_theme - 12.0

pull/115/head
MuK IT GmbH 6 years ago
parent
commit
4b242db03e
  1. 2
      muk_web_theme/__manifest__.py
  2. 103
      muk_web_theme/static/src/js/chrome/apps.js
  3. 133
      muk_web_theme/static/src/js/core/search.js
  4. 3
      muk_web_theme/template/assets.xml

2
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",

103
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: "<b>",
post: "</b>",
});
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');
},
});
}));
});

133
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 <http://www.gnu.org/licenses/>.
*
**********************************************************************************/
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: "<b>",
post: "</b>",
});
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;
});

3
muk_web_theme/template/assets.xml

@ -41,6 +41,9 @@
<xpath expr="//link[last()]" position="after">
<link rel="stylesheet" type="text/scss" href="/muk_web_theme/static/src/scss/fonts.scss"/>
</xpath>
<xpath expr="//script[last()]" position="after">
<script type="text/javascript" src="/muk_web_theme/static/src/js/core/search.js" />
</xpath>
</template>
<template id="assets_backend" name="Backend Assets" inherit_id="web.assets_backend">

Loading…
Cancel
Save