diff options
| author | qsm-odoo <qsm@odoo.com> | 2019-02-04 14:45:16 +0000 |
|---|---|---|
| committer | qsm-odoo <qsm@odoo.com> | 2019-02-05 11:39:11 +0000 |
| commit | b6db6b878c5d329c19262d829e13726c3a3a1d25 (patch) | |
| tree | fd49fff13e186b91f88b287a99e114adaa8a406d /addons/website/static/src | |
| parent | 99499589eafb9c05236eb47553c1d723573c1b70 (diff) | |
[REF] website, *: remove 'website.context' module
* website_forum, website_gengo, website_mail_channel, website_sale
Retrieving the global context is now the root's job, this will prevent
problems when trying to extend the values the context has.
See upcoming improvements with https://github.com/odoo/odoo/pull/29442
closes odoo/odoo#30816
Diffstat (limited to 'addons/website/static/src')
| -rw-r--r-- | addons/website/static/src/js/content/context.js | 25 | ||||
| -rw-r--r-- | addons/website/static/src/js/content/snippets.animation.js | 17 | ||||
| -rw-r--r-- | addons/website/static/src/js/content/website_root.js | 55 | ||||
| -rw-r--r-- | addons/website/static/src/js/editor/editor_menu.js | 11 | ||||
| -rw-r--r-- | addons/website/static/src/js/editor/editor_menu_translate.js | 15 | ||||
| -rw-r--r-- | addons/website/static/src/js/menu/content.js | 22 | ||||
| -rw-r--r-- | addons/website/static/src/js/menu/edit.js | 10 | ||||
| -rw-r--r-- | addons/website/static/src/js/menu/seo.js | 19 | ||||
| -rw-r--r-- | addons/website/static/src/js/menu/translate.js | 20 | ||||
| -rw-r--r-- | addons/website/static/src/js/widgets/ace.js | 8 |
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', |
