summaryrefslogtreecommitdiff
path: root/muk_web_theme/static/src/js/chrome/menu.js
blob: c1e522ff60a597d484288eb74afd5180ed4633ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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();
    	}
    },
});

});