summaryrefslogtreecommitdiff
path: root/addons/website/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website/static/src')
-rw-r--r--addons/website/static/src/js/content/context.js25
-rw-r--r--addons/website/static/src/js/content/snippets.animation.js17
-rw-r--r--addons/website/static/src/js/content/website_root.js55
-rw-r--r--addons/website/static/src/js/editor/editor_menu.js11
-rw-r--r--addons/website/static/src/js/editor/editor_menu_translate.js15
-rw-r--r--addons/website/static/src/js/menu/content.js22
-rw-r--r--addons/website/static/src/js/menu/edit.js10
-rw-r--r--addons/website/static/src/js/menu/seo.js19
-rw-r--r--addons/website/static/src/js/menu/translate.js20
-rw-r--r--addons/website/static/src/js/widgets/ace.js8
10 files changed, 142 insertions, 60 deletions
diff --git a/addons/website/static/src/js/content/context.js b/addons/website/static/src/js/content/context.js
deleted file mode 100644
index 671ad345e65..00000000000
--- a/addons/website/static/src/js/content/context.js
+++ /dev/null
@@ -1,25 +0,0 @@
-odoo.define('website.context', function (require) {
-'use strict';
-
-function getContext(context) {
- var html = document.documentElement;
- return _.extend({
- lang: (html.getAttribute('lang') || 'en_US').replace('-', '_'),
- website_id: html.getAttribute('data-website-id') | 0,
- }, context || {});
-}
-
-function getExtraContext(context) {
- var html = document.documentElement;
- return _.extend(getContext(), {
- editable: !!(html.dataset.editable || $('[data-oe-model]').length), // temporary hack, this should be done in python
- translatable: !!html.dataset.translatable,
- edit_translations: !!html.dataset.edit_translations,
- }, context || {});
-}
-
-return {
- get: getContext,
- getExtra: getExtraContext,
-};
-});
diff --git a/addons/website/static/src/js/content/snippets.animation.js b/addons/website/static/src/js/content/snippets.animation.js
index d2a653b0837..2c322012d1c 100644
--- a/addons/website/static/src/js/content/snippets.animation.js
+++ b/addons/website/static/src/js/content/snippets.animation.js
@@ -487,6 +487,23 @@ var Animation = Widget.extend({
new AnimationEffect(this, updateCallback, startEvents, $startTarget, options)
);
},
+ /**
+ * @private
+ * @param {boolean} [extra=false]
+ * @param {Object} [extraContext]
+ * @returns {Object}
+ */
+ _getContext: function (extra, extraContext) {
+ var context;
+ this.trigger_up('context_get', {
+ extra: extra || false,
+ context: extraContext,
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
+ return context;
+ },
});
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
diff --git a/addons/website/static/src/js/content/website_root.js b/addons/website/static/src/js/content/website_root.js
index 0d89ae528a9..a665d4eba99 100644
--- a/addons/website/static/src/js/content/website_root.js
+++ b/addons/website/static/src/js/content/website_root.js
@@ -22,7 +22,6 @@ var ServiceProviderMixin = require('web.ServiceProviderMixin');
var session = require('web.session');
var utils = require('web.utils');
var rootWidget = require('web_editor.root_widget');
-var wContext = require('website.context');
var sAnimation = require('website.content.snippets.animation');
require("website.content.zoomodoo");
@@ -32,7 +31,11 @@ var websiteRootRegistry = new rootWidget.RootWidgetRegistry();
// Load localizations outside the WebsiteRoot to not wait for DOM ready (but
// wait for them in WebsiteRoot)
-var lang = utils.get_cookie('frontend_lang') || wContext.get().lang; // FIXME the cookie value should maybe be in the ctx?
+function getLang() {
+ var html = document.documentElement;
+ return (html.getAttribute('lang') || 'en_US').replace('-', '_');
+}
+var lang = utils.get_cookie('frontend_lang') || getLang(); // FIXME the cookie value should maybe be in the ctx?
var localeDef = ajax.loadJS('/web/webclient/locale/' + lang.replace('-', '_'));
/**
@@ -53,6 +56,7 @@ var WebsiteRoot = rootWidget.RootWidget.extend(ServiceProviderMixin, {
custom_events: _.extend({}, rootWidget.RootWidget.prototype.custom_events || {}, {
animation_start_demand: '_onAnimationStartDemand',
animation_stop_demand: '_onAnimationStopDemand',
+ context_get: '_onContextGet',
main_object_request: '_onMainObjectRequest',
ready_to_clean_for_save: '_onAnimationStopDemand',
}),
@@ -138,7 +142,7 @@ var WebsiteRoot = rootWidget.RootWidget.extend(ServiceProviderMixin, {
if (_.str.startsWith(route, '/web/dataset/call_kw/')) {
var params = ev.data.args[1];
var options = ev.data.args[2];
- params.kwargs.context = _.extend({}, wContext.get(), params.kwargs.context || {});
+ params.kwargs.context = _.extend({}, this._getContext(), params.kwargs.context || {});
if (options) {
params.kwargs.context = _.omit(params.kwargs.context, options.noContextKeys);
ev.data.args[2] = _.omit(options, 'noContextKeys');
@@ -149,6 +153,38 @@ var WebsiteRoot = rootWidget.RootWidget.extend(ServiceProviderMixin, {
return ServiceProviderMixin._call_service.apply(this, arguments);
},
/**
+ * Retrieves the global context of the public environment. This is the
+ * context which is automatically added to each RPC.
+ *
+ * @private
+ * @param {Object} [context]
+ * @returns {Object}
+ */
+ _getContext: function (context) {
+ var html = document.documentElement;
+ return _.extend({
+ 'lang': getLang(),
+ 'website_id': html.getAttribute('data-website-id') | 0,
+ }, context || {});
+ },
+ /**
+ * Retrieves the global context of the public environment (as
+ * @see _getContext) but with extra informations that would be useless to
+ * send with each RPC.
+ *
+ * @private
+ * @param {Object} [context]
+ * @returns {Object}
+ */
+ _getExtraContext: function (context) {
+ var html = document.documentElement;
+ return _.extend(this._getContext(), {
+ 'editable': !!(html.dataset.editable || $('[data-oe-model]').length), // temporary hack, this should be done in python
+ 'translatable': !!html.dataset.translatable,
+ 'edit_translations': !!html.dataset.edit_translations,
+ }, context || {});
+ },
+ /**
* As the WebsiteRoot instance is designed to be unique, the associated
* registry has been instantiated outside of the class and is simply
* returned here.
@@ -243,6 +279,19 @@ var WebsiteRoot = rootWidget.RootWidget.extend(ServiceProviderMixin, {
this._stopAnimations(ev.data.$target);
},
/**
+ * Called when someone asked for the global public context.
+ *
+ * @private
+ * @param {OdooEvent} ev
+ */
+ _onContextGet: function (ev) {
+ if (ev.data.extra) {
+ ev.data.callback(this._getExtraContext(ev.data.context));
+ } else {
+ ev.data.callback(this._getContext(ev.data.context));
+ }
+ },
+ /**
* @todo review
* @private
*/
diff --git a/addons/website/static/src/js/editor/editor_menu.js b/addons/website/static/src/js/editor/editor_menu.js
index e1020b1d444..5d7621b91e3 100644
--- a/addons/website/static/src/js/editor/editor_menu.js
+++ b/addons/website/static/src/js/editor/editor_menu.js
@@ -4,7 +4,6 @@ odoo.define('website.editor.menu', function (require) {
var Dialog = require('web.Dialog');
var Widget = require('web.Widget');
var core = require('web.core');
-var wContext = require('website.context');
var WysiwygMultizone = require('web_editor.wysiwyg.multizone');
var _t = core._t;
@@ -147,12 +146,18 @@ var EditorMenu = Widget.extend({
* @private
*/
_wysiwygInstance: function () {
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
return new WysiwygMultizone(this, {
snippets: 'website.snippets',
recordInfo: {
- context: wContext.get(),
+ context: context,
data_res_model: 'website',
- data_res_id: wContext.get().website_id,
+ data_res_id: context.website_id,
}
});
},
diff --git a/addons/website/static/src/js/editor/editor_menu_translate.js b/addons/website/static/src/js/editor/editor_menu_translate.js
index 3009feab0d0..c52c5e140fc 100644
--- a/addons/website/static/src/js/editor/editor_menu_translate.js
+++ b/addons/website/static/src/js/editor/editor_menu_translate.js
@@ -5,15 +5,9 @@ require('web.dom_ready');
var core = require('web.core');
var Dialog = require('web.Dialog');
var localStorage = require('web.local_storage');
-var wContext = require('website.context');
var WysiwygTranslate = require('web_editor.wysiwyg.multizone.translate');
var EditorMenu = require('website.editor.menu');
-var lang = $('html').attr('lang').replace('-', '_');
-if ($('.js_change_lang[data-lang="' + lang + '"]').data('default-lang')) {
- return $.Deferred().reject("It's the default language");
-}
-
var _t = core._t;
var localStorageNoDialogKey = 'website_translator_nodialog';
@@ -95,10 +89,15 @@ var TranslatorMenu = EditorMenu.extend({
* @private
*/
_wysiwygInstance: function () {
- return new WysiwygTranslate(this, {lang: lang || wContext.get().lang});
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
+ return new WysiwygTranslate(this, {lang: context.lang});
},
});
return TranslatorMenu;
-
});
diff --git a/addons/website/static/src/js/menu/content.js b/addons/website/static/src/js/menu/content.js
index a75ec82ba87..d3aa045920c 100644
--- a/addons/website/static/src/js/menu/content.js
+++ b/addons/website/static/src/js/menu/content.js
@@ -5,7 +5,6 @@ var Class = require('web.Class');
var core = require('web.core');
var Dialog = require('web.Dialog');
var time = require('web.time');
-var wContext = require('website.context');
var weWidgets = require('wysiwyg.widgets');
var websiteNavbarData = require('website.navbar');
var websiteRootData = require('website.WebsiteRoot');
@@ -195,7 +194,12 @@ var PagePropertiesDialog = weWidgets.Dialog.extend({
*/
save: function (data) {
var self = this;
- var context = wContext.get();
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
var url = this.$('#page_url').val();
var $date_publish = this.$("#date_publish");
@@ -469,7 +473,12 @@ var EditMenuDialog = weWidgets.Dialog.extend({
willStart: function () {
var defs = [this._super.apply(this, arguments)];
var self = this;
- var context = wContext.get();
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
defs.push(this._rpc({
model: 'website.menu',
method: 'get_tree',
@@ -516,7 +525,12 @@ var EditMenuDialog = weWidgets.Dialog.extend({
var new_menu = this.$('.oe_menu_editor').nestedSortable('toArray', {startDepthCount: 0});
var levels = [];
var data = [];
- var context = wContext.get();
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
// Resequence, re-tree and remove useless data
new_menu.forEach(function (menu) {
if (menu.id) {
diff --git a/addons/website/static/src/js/menu/edit.js b/addons/website/static/src/js/menu/edit.js
index 4f49e55c2f5..c4b89b33abe 100644
--- a/addons/website/static/src/js/menu/edit.js
+++ b/addons/website/static/src/js/menu/edit.js
@@ -2,7 +2,6 @@ odoo.define('website.editMenu', function (require) {
'use strict';
var core = require('web.core');
-var wContext = require('website.context');
var EditorMenu = require('website.editor.menu');
var websiteNavbarData = require('website.navbar');
@@ -31,7 +30,14 @@ var EditPageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
*/
init: function () {
this._super.apply(this, arguments);
- this._editorAutoStart = (wContext.getExtra().editable && window.location.search.indexOf('enable_editor') >= 0);
+ var context;
+ this.trigger_up('context_get', {
+ extra: true,
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
+ this._editorAutoStart = (context.editable && window.location.search.indexOf('enable_editor') >= 0);
},
/**
* Auto-starts the editor if necessary or add the welcome message otherwise.
diff --git a/addons/website/static/src/js/menu/seo.js b/addons/website/static/src/js/menu/seo.js
index 981d8e1ad75..425024539ec 100644
--- a/addons/website/static/src/js/menu/seo.js
+++ b/addons/website/static/src/js/menu/seo.js
@@ -7,7 +7,6 @@ var Dialog = require('web.Dialog');
var mixins = require('web.mixins');
var rpc = require('web.rpc');
var Widget = require('web.Widget');
-var wContext = require('website.context');
var weWidgets = require('wysiwyg.widgets');
var websiteNavbarData = require('website.navbar');
@@ -49,7 +48,13 @@ var SuggestionList = Widget.extend({
refresh: function () {
var self = this;
self.$el.append(_t("Loading..."));
- var language = self.language || wContext.get().lang.toLowerCase();
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
+ var language = self.language || context.lang.toLowerCase();
this._rpc({
route: '/website/seo_suggest',
params: {
@@ -475,14 +480,20 @@ var MetaKeywords = Widget.extend({
},
_getLanguages: function () {
var self = this;
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
this._rpc({
model: 'website',
method: 'get_languages',
- args: [[wContext.get().website_id]],
+ args: [[context.website_id]],
}).then( function (data) {
self.$('#language-box').html(core.qweb.render('Configurator.language_promote', {
'language': data,
- 'def_lang': wContext.get().lang
+ 'def_lang': context.lang
}));
});
},
diff --git a/addons/website/static/src/js/menu/translate.js b/addons/website/static/src/js/menu/translate.js
index 90a60250355..a94d93d1d75 100644
--- a/addons/website/static/src/js/menu/translate.js
+++ b/addons/website/static/src/js/menu/translate.js
@@ -2,15 +2,9 @@ odoo.define('website.translateMenu', function (require) {
'use strict';
var utils = require('web.utils');
-var wContext = require('website.context');
var TranslatorMenu = require('website.editor.menu.translate');
var websiteNavbarData = require('website.navbar');
-var ctx = wContext.getExtra();
-if (!ctx.translatable) {
- return;
-}
-
var TranslatePageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
actions: _.extend({}, websiteNavbarData.WebsiteNavbar.prototype.actions || {}, {
edit_master: '_goToMasterPage',
@@ -21,7 +15,15 @@ var TranslatePageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
* @override
*/
start: function () {
- if (ctx.edit_translations) {
+ var context;
+ this.trigger_up('context_get', {
+ extra: true,
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
+ this._mustEditTranslations = context.edit_translations;
+ if (this._mustEditTranslations) {
this._startTranslateMode();
}
return this._super.apply(this, arguments);
@@ -63,7 +65,7 @@ var TranslatePageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
* @returns {Deferred}
*/
_startTranslateMode: function () {
- if (!ctx.edit_translations) {
+ if (!this._mustEditTranslations) {
window.location.search += '&edit_translations';
return $.Deferred();
}
@@ -72,5 +74,5 @@ var TranslatePageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
},
});
-websiteNavbarData.websiteNavbarRegistry.add(TranslatePageMenu, '.o_menu_systray');
+websiteNavbarData.websiteNavbarRegistry.add(TranslatePageMenu, '.o_menu_systray:has([data-action="translate"])');
});
diff --git a/addons/website/static/src/js/widgets/ace.js b/addons/website/static/src/js/widgets/ace.js
index d3fde57d033..15df55e0c71 100644
--- a/addons/website/static/src/js/widgets/ace.js
+++ b/addons/website/static/src/js/widgets/ace.js
@@ -2,7 +2,6 @@ odoo.define("website.ace", function (require) {
"use strict";
var AceEditor = require('web_editor.ace');
-var weContext = require('website.context');
/**
* Extends the default view editor so that the URL hash is updated with view ID
@@ -45,7 +44,12 @@ var WebsiteAceEditor = AceEditor.extend({
// When saving a generic view, the view will be COW'd and
// replace by the specific view after the reload. Thus the id in
// URL won't exist anymore. We need to find the specific ID.
- var context = weContext.get();
+ var context;
+ this.trigger_up('context_get', {
+ callback: function (ctx) {
+ context = ctx;
+ },
+ });
defs.push(this._rpc({
model: 'ir.ui.view',
method: 'search_read',