diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 17:14:58 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 17:14:58 +0700 |
| commit | 1ca3b3df3421961caec3b747a364071c80f5c7da (patch) | |
| tree | 6778a1f0f3f9b4c6e26d6d87ccde16e24da6c9d6 /muk_web_theme/static/src/js/chrome | |
| parent | b57188be371d36d96caac4b8d65a40745c0e972c (diff) | |
initial commit
Diffstat (limited to 'muk_web_theme/static/src/js/chrome')
| -rw-r--r-- | muk_web_theme/static/src/js/chrome/actions.js | 39 | ||||
| -rw-r--r-- | muk_web_theme/static/src/js/chrome/apps.js | 96 | ||||
| -rw-r--r-- | muk_web_theme/static/src/js/chrome/appsbar.js | 69 | ||||
| -rw-r--r-- | muk_web_theme/static/src/js/chrome/menu.js | 101 |
4 files changed, 305 insertions, 0 deletions
diff --git a/muk_web_theme/static/src/js/chrome/actions.js b/muk_web_theme/static/src/js/chrome/actions.js new file mode 100644 index 0000000..37b3c45 --- /dev/null +++ b/muk_web_theme/static/src/js/chrome/actions.js @@ -0,0 +1,39 @@ +/********************************************************************************** +* +* Copyright (c) 2017-today MuK IT GmbH. +* +* This file is part of MuK Grid Snippets +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_theme.ActionManager', function (require) { +"use strict"; + +const ActionManager = require('web.ActionManager'); + +ActionManager.include({ + _handleAction(action) { + return this._super(...arguments).then($.proxy(this, '_hideMenusByAction', action)); + }, + _hideMenusByAction(action) { + const unique_selection = '[data-action-id=' + action.id + ']'; + $(_.str.sprintf('.o_menu_apps .dropdown:has(.dropdown-menu.show:has(%s)) > a', unique_selection)).dropdown('toggle'); + $(_.str.sprintf('.o_menu_sections.show:has(%s)', unique_selection)).collapse('hide'); + }, +}); + +}); diff --git a/muk_web_theme/static/src/js/chrome/apps.js b/muk_web_theme/static/src/js/chrome/apps.js new file mode 100644 index 0000000..8423aa9 --- /dev/null +++ b/muk_web_theme/static/src/js/chrome/apps.js @@ -0,0 +1,96 @@ +/********************************************************************************** +* +* Copyright (c) 2017-today MuK IT GmbH. +* +* This file is part of MuK Grid Snippets +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_theme.AppsMenu', function (require) { +"use strict"; + +const core = require('web.core'); +const session = require("web.session"); + +const AppsMenu = require("web.AppsMenu"); +const MenuSearchMixin = require("muk_web_theme.MenuSearchMixin"); + +AppsMenu.include(_.extend({}, MenuSearchMixin, { + events: _.extend({}, AppsMenu.prototype.events, { + "keydown .mk_search_input input": "_onSearchResultsNavigate", + "click .mk_menu_search_result": "_onSearchResultChosen", + "shown.bs.dropdown": "_onMenuShown", + "hidden.bs.dropdown": "_onMenuHidden", + "hide.bs.dropdown": "_onMenuHide", + }), + init(parent, menuData) { + this._super(...arguments); + for (let n in this._apps) { + this._apps[n].web_icon_data = menuData.children[n].web_icon_data; + } + this._searchableMenus = _.reduce( + menuData.children, this._findNames.bind(this), {} + ); + this._search_def = $.Deferred(); + }, + start() { + this._setBackgroundImage(); + this.$search_container = this.$(".mk_search_container"); + this.$search_input = this.$(".mk_search_input input"); + this.$search_results = this.$(".mk_search_results"); + return this._super(...arguments); + }, + _onSearchResultChosen(event) { + event.preventDefault(); + const $result = $(event.currentTarget), + text = $result.text().trim(), + data = $result.data(), + suffix = ~text.indexOf("/") ? "/" : ""; + this.trigger_up("menu_clicked", { + action_id: data.actionId, + id: data.menuId, + previous_menu_id: data.parentId, + }); + const app = _.find(this._apps, (_app) => text.indexOf(_app.name + suffix) === 0); + core.bus.trigger("change_menu_section", app.menuID); + }, + _onAppsMenuItemClicked(event) { + this._super(...arguments); + event.preventDefault(); + }, + _setBackgroundImage() { + const url = session.url('/web/image', { + model: 'res.company', + id: session.company_id, + field: 'background_image', + }); + this.$('.dropdown-menu').css({ + "background-size": "cover", + "background-image": "url(" + url + ")" + }); + if (session.muk_web_theme_background_blend_mode) { + this.$('.o-app-name').css({ + "mix-blend-mode": session.muk_web_theme_background_blend_mode, + }); + } + }, + _onMenuHide(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/chrome/appsbar.js b/muk_web_theme/static/src/js/chrome/appsbar.js new file mode 100644 index 0000000..eaa91d3 --- /dev/null +++ b/muk_web_theme/static/src/js/chrome/appsbar.js @@ -0,0 +1,69 @@ +/********************************************************************************** +* +* Copyright (c) 2017-today MuK IT GmbH. +* +* This file is part of MuK Grid Snippets +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_theme.AppsBar', function (require) { +"use strict"; + +const Widget = require('web.Widget'); + +const AppsBar = Widget.extend({ + events: _.extend({}, Widget.prototype.events, { + 'click .nav-link': '_onAppsMenuItemClicked', + }), + template: "muk_web_theme.AppsBarMenu", + init(parent, menu) { + this._super(...arguments); + this._apps = _.map(menu.children, (app) => ({ + actionID: parseInt(app.action.split(',')[1]), + web_icon_data: app.web_icon_data, + menuID: app.id, + name: app.name, + xmlID: app.xmlid, + }) + ); + }, + getApps() { + return this._apps; + }, + _openApp(app) { + this.trigger_up('app_clicked', { + action_id: app.actionID, + menu_id: app.menuID, + }); + }, + _onAppsMenuItemClicked(ev) { + const $target = $(ev.currentTarget); + const actionID = $target.data('action-id'); + const menuID = $target.data('menu-id'); + const app = _.findWhere(this._apps, { + actionID: actionID, + menuID: menuID + }); + this._openApp(app); + ev.preventDefault(); + $target.blur(); + }, +}); + +return AppsBar; + +});
\ No newline at end of file diff --git a/muk_web_theme/static/src/js/chrome/menu.js b/muk_web_theme/static/src/js/chrome/menu.js new file mode 100644 index 0000000..c1e522f --- /dev/null +++ b/muk_web_theme/static/src/js/chrome/menu.js @@ -0,0 +1,101 @@ +/********************************************************************************** +* +* Copyright (c) 2017-today MuK IT GmbH. +* +* This file is part of MuK Grid Snippets +* (see https://mukit.at). +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser 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 Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +**********************************************************************************/ + +odoo.define('muk_web_theme.Menu', function (require) { +"use strict"; + +const config = require("web.config"); + +const Menu = require("web.Menu"); +const AppsBar = require("muk_web_theme.AppsBar"); + +Menu.include({ + events: _.extend({}, Menu.prototype.events, { + "click .o_menu_apps a[data-toggle=dropdown]": "_onAppsMenuClick", + "click .mk_menu_mobile_section": "_onMobileSectionClick", + "click .o_menu_sections [role=menuitem]": "_hideMobileSubmenus", + "show.bs.dropdown .o_menu_systray, .o_menu_apps": "_hideMobileSubmenus", + }), + menusTemplate: config.device.isMobile ? + 'muk_web_theme.MobileMenu.sections' : Menu.prototype.menusTemplate, + start() { + const res = this._super(...arguments); + this.$menu_toggle = this.$(".mk_menu_sections_toggle"); + this.$menu_apps_sidebar = this.$('.mk_apps_sidebar_panel'); + this._appsBar = new AppsBar(this, this.menu_data); + const appsBarProm = this._appsBar.appendTo(this.$menu_apps_sidebar); + appsBarProm.then(() => { + this.$menu_apps_sidebar.renderScrollBar(); + }); + if (config.device.isMobile) { + const menu_ids = _.keys(this.$menu_sections); + for (let i = 0; i < menu_ids.length; i++) { + const $section = this.$menu_sections[menu_ids[i]]; + $section.on('click', 'a[data-menu]', this, (ev) => { + ev.stopPropagation(); + }); + } + } + return Promise.all([ + res, appsBarProm + ]); + }, + _hideMobileSubmenus() { + if (this.$menu_toggle.is(":visible") && $('.oe_wait').length === 0 && + this.$section_placeholder.is(":visible")) { + this.$section_placeholder.collapse("hide"); + } + }, + _updateMenuBrand() { + return !config.device.isMobile ? this._super(...arguments) : null; + }, + _onAppsMenuClick(event, checkedCanBeRemoved) { + const action_manager = this.getParent().action_manager; + const controller = action_manager.getCurrentController(); + if (controller && !checkedCanBeRemoved) { + controller.widget.canBeRemoved().then(() => { + $(event.currentTarget).trigger('click', [true]); + $(event.currentTarget).off('.bs.dropdown'); + }); + event.stopPropagation(); + event.preventDefault(); + } + }, + _onMobileSectionClick(event) { + event.preventDefault(); + event.stopPropagation(); + const $section = $(event.currentTarget); + if ($section.hasClass('show')) { + $section.removeClass('show'); + $section.find('.show').removeClass('show'); + $section.find('.fa-chevron-down').hide(); + $section.find('.fa-chevron-right').show(); + } else { + $section.addClass('show'); + $section.find('ul:first').addClass('show'); + $section.find('.fa-chevron-down:first').show(); + $section.find('.fa-chevron-right:first').hide(); + } + }, +}); + +});
\ No newline at end of file |
