diff --git a/addons/iap/static/src/js/dashboard.js b/addons/iap/static/src/js/dashboard.js index b3490da2eda..995cc444e24 100644 --- a/addons/iap/static/src/js/dashboard.js +++ b/addons/iap/static/src/js/dashboard.js @@ -1,20 +1,15 @@ odoo.define('iap.Dashboard', function (require) { "use strict"; -var ajax = require('web.ajax'); -var core = require('web.core'); var Dashboard = require('web_settings_dashboard'); -var _t = core._t; -var QWeb = core.qweb; - Dashboard.Dashboard.include({ /** * @override */ load_apps: function (data) { var _super = this._super.bind(this); - return ajax.jsonRpc('/web/dataset/call_kw', 'call', { + return this._rpc({ model: 'iap.account', method: 'get_account_url', args: [], diff --git a/addons/web/static/src/js/chrome/menu.js b/addons/web/static/src/js/chrome/menu.js index 7f60e2ea44f..589b9cb2c06 100644 --- a/addons/web/static/src/js/chrome/menu.js +++ b/addons/web/static/src/js/chrome/menu.js @@ -79,6 +79,32 @@ var Menu = Widget.extend({ return this._super.apply(this, arguments); }, + change_menu_section: function (primary_menu_id) { + if (!this.$menu_sections[primary_menu_id]) { + return; // unknown menu_id + } + + if (this.current_primary_menu === primary_menu_id) { + return; // already in that menu + } + + if (this.current_primary_menu) { + this.$menu_sections[this.current_primary_menu].detach(); + } + + // Get back the application name + for (var i = 0; i < this.menu_data.children.length; i++) { + if (this.menu_data.children[i].id === primary_menu_id) { + this.$menu_brand_placeholder.text(this.menu_data.children[i].name); + break; + } + } + + this.$menu_sections[primary_menu_id].appendTo(this.$section_placeholder); + this.current_primary_menu = primary_menu_id; + + core.bus.trigger('resize'); + }, _trigger_menu_clicked: function (menu_id, action_id) { this.trigger_up('menu_clicked', { id: menu_id, diff --git a/addons/web_settings_dashboard/static/src/js/dashboard.js b/addons/web_settings_dashboard/static/src/js/dashboard.js index 4eaf10aab53..01af7071c09 100644 --- a/addons/web_settings_dashboard/static/src/js/dashboard.js +++ b/addons/web_settings_dashboard/static/src/js/dashboard.js @@ -248,7 +248,7 @@ var DashboardApps = Widget.extend({ template: 'DashboardApps', events: { - 'click .o_browse_apps': 'on_new_apps', + 'click .o_browse_apps': '_onClickBrowseApps', 'click .o_confirm_upgrade': 'confirm_upgrade', }, @@ -265,7 +265,18 @@ var DashboardApps = Widget.extend({ } }, - on_new_apps: function(){ + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Called when clicking on 'Browse Apps' button. + * + * @private + * @param {MouseEvent} ev + */ + _onClickBrowseApps: function (ev) { + ev.preventDefault(); this.do_action('base.open_module_tree'); }, @@ -346,10 +357,22 @@ var DashboardTranslations = Widget.extend({ template: 'DashboardTranslations', events: { - 'click .o_load_translations': 'on_load_translations' + 'click .o_load_translations': '_onLoadTranslations' }, - on_load_translations: function () { + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Called when clicking on "Load a translation" button. It prompts a dialog + * to load a translation. + * + * @private + * @param {MouseEvent} ev + */ + _onLoadTranslations: function (ev) { + ev.preventDefault(); this.do_action('base.action_view_base_language_install'); } @@ -359,7 +382,7 @@ var DashboardCompany = Widget.extend({ template: 'DashboardCompany', events: { - 'click .o_setup_company': 'on_setup_company' + 'click .o_setup_company': '_onSetupCompany' }, init: function (parent, data) { @@ -368,7 +391,16 @@ var DashboardCompany = Widget.extend({ this._super.apply(this, arguments); }, - on_setup_company: function () { + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * @private + * @param {MouseEvent} ev + */ + _onSetupCompany: function (ev) { + ev.preventDefault(); var self = this; var action = { type: 'ir.actions.act_window', diff --git a/addons/web_settings_dashboard/static/tests/dashboard_tests.js b/addons/web_settings_dashboard/static/tests/dashboard_tests.js index 7b593969967..f638d20e748 100644 --- a/addons/web_settings_dashboard/static/tests/dashboard_tests.js +++ b/addons/web_settings_dashboard/static/tests/dashboard_tests.js @@ -21,7 +21,11 @@ function createDashboard(params) { widget.destroy(); }; - dashboard.appendTo($('#qunit-fixture')); + if (params.debug) { + dashboard.appendTo($('body')); + } else { + dashboard.appendTo($('#qunit-fixture')); + } return dashboard; } @@ -191,6 +195,122 @@ QUnit.module('settings_dashboard', function () { dashboard.destroy(); }); + + QUnit.test('Prevent default behaviour when clicking on load translation', function (assert) { + assert.expect(3); + + var dashboard = createDashboard({ + dashboards: ['translations'], + mockRPC: function (route, args) { + if (route === '/web_settings_dashboard/data') { + return $.when(); + } + return this._super.apply(this, arguments); + }, + }); + + var $loadTranslation = dashboard.$('.o_load_translations'); + + assert.strictEqual($loadTranslation.length, 1, + "should have button to load translations"); + + // Prevent the browser default behaviour when clicking on anything. + // This includes clicking on a `` with `href`, so that it does not + // change the URL in the address bar. + $(document.body).on('click.o_test', function (ev) { + assert.ok(ev.isDefaultPrevented(), + "should have prevented browser default behaviour"); + assert.strictEqual(ev.target, $loadTranslation[0], + "should have clicked on 'load a translation' button"); + ev.preventDefault(); + }); + + $loadTranslation.click(); + + $(document.body).off('click.o_test'); + + dashboard.destroy(); + }); + + QUnit.test('Prevent default behaviour when clicking on set up company', function (assert) { + assert.expect(3); + + var dashboard = createDashboard({ + dashboards: ['company'], + mockRPC: function (route, args) { + if (route === '/web_settings_dashboard/data') { + return $.when({ + company: { + company_name: 'MyCompany' + } + }); + } + return this._super.apply(this, arguments); + }, + }); + + var $setupCompany = dashboard.$('.o_setup_company'); + + assert.strictEqual($setupCompany.length, 1, + "should have button to set up company"); + + // Prevent the browser default behaviour when clicking on anything. + // This includes clicking on a `` with `href`, so that it does not + // change the URL in the address bar. + $(document.body).on('click.o_test', function (ev) { + assert.ok(ev.isDefaultPrevented(), + "should have prevented browser default behaviour"); + assert.strictEqual(ev.target, $setupCompany[0], + "should have clicked on 'setup company' button"); + ev.preventDefault(); + }); + + $setupCompany.click(); + + $(document.body).off('click.o_test'); + + dashboard.destroy(); + }); + + QUnit.test('Prevent default behaviour when clicking on browse apps', function (assert) { + assert.expect(3); + + var dashboard = createDashboard({ + dashboards: ['apps'], + mockRPC: function (route, args) { + if (route === '/web_settings_dashboard/data') { + return $.when({ + apps: {}, + }); + } + if (args.method === 'get_account_url') { + return $.when('fakeURL'); + } + return this._super.apply(this, arguments); + }, + }); + + var $browseAppsButton = dashboard.$('.btn.o_browse_apps'); + + // Prevent the browser default behaviour when clicking on anything. + // This includes clicking on a `` with `href`, so that it does not + // change the URL in the address bar. + $(document.body).on('click.o_test', function (ev) { + assert.ok(ev.isDefaultPrevented(), + "should have prevented browser default behaviour"); + assert.strictEqual(ev.target, $browseAppsButton[0], + "should have clicked on 'browse apps' button"); + ev.preventDefault(); + }); + + assert.strictEqual($browseAppsButton.length, 1, + "should have button to browse apps"); + + $browseAppsButton.click(); + + $(document.body).off('click.o_test'); + dashboard.destroy(); + }); }); });