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();
+ });
});
});