[REF] web, website: convert public widget registry to core registry
With the introduction of the new webclient, we introduced a new way to create and interact with registry using categories. This alleviates the need to explicitly export and import registries. This commit converts the public root widget's custom registry to use the new registry to avoid code duplication and having multiple diverging implementations Part of #72675
This commit is contained in:
@@ -198,6 +198,8 @@ This module provides the core of the Odoo Web Client.
|
||||
|
||||
('include', 'web._assets_bootstrap'),
|
||||
|
||||
'web/static/src/core/registry.js',
|
||||
|
||||
'web/static/src/legacy/scss/base_frontend.scss',
|
||||
'web/static/src/legacy/scss/lazyloader.scss',
|
||||
'web/static/src/legacy/scss/navbar_mobile.scss',
|
||||
|
||||
@@ -6,8 +6,7 @@ import env from 'web.public_env';
|
||||
import session from 'web.session';
|
||||
import utils from 'web.utils';
|
||||
import publicWidget from 'web.public.widget';
|
||||
|
||||
var publicRootRegistry = new publicWidget.RootWidgetRegistry();
|
||||
import { registry } from '@web/core/registry';
|
||||
|
||||
// Load localizations outside the PublicRoot to not wait for DOM ready (but
|
||||
// wait for them in PublicRoot)
|
||||
@@ -134,7 +133,7 @@ var PublicRoot = publicWidget.RootWidget.extend({
|
||||
* @override
|
||||
*/
|
||||
_getRegistry: function () {
|
||||
return publicRootRegistry;
|
||||
return registry.category("public_root_widgets");
|
||||
},
|
||||
/**
|
||||
* Creates an PublicWidget instance for each DOM element which matches the
|
||||
@@ -331,5 +330,4 @@ var PublicRoot = publicWidget.RootWidget.extend({
|
||||
|
||||
export default {
|
||||
PublicRoot: PublicRoot,
|
||||
publicRootRegistry: publicRootRegistry,
|
||||
};
|
||||
|
||||
@@ -4,9 +4,7 @@
|
||||
* Provides a way to start JS code for public contents.
|
||||
*/
|
||||
|
||||
import Class from 'web.Class';
|
||||
import dom from 'web.dom';
|
||||
import mixins from 'web.mixins';
|
||||
import session from 'web.session';
|
||||
import Widget from 'web.Widget';
|
||||
|
||||
@@ -19,18 +17,12 @@ import Widget from 'web.Widget';
|
||||
* @todo Merge with 'PublicWidget' ?
|
||||
*/
|
||||
var RootWidget = Widget.extend({
|
||||
custom_events: _.extend({}, Widget.prototype.custom_events || {}, {
|
||||
'registry_update': '_onRegistryUpdate',
|
||||
'get_session': '_onGetSession',
|
||||
}),
|
||||
/**
|
||||
* @constructor
|
||||
*/
|
||||
init: function () {
|
||||
this._super.apply(this, arguments);
|
||||
this._widgets = [];
|
||||
this._listenToUpdates = false;
|
||||
this._getRegistry().setParent(this);
|
||||
},
|
||||
/**
|
||||
* @override
|
||||
@@ -40,7 +32,11 @@ var RootWidget = Widget.extend({
|
||||
var defs = [this._super.apply(this, arguments)];
|
||||
|
||||
defs.push(this._attachComponents());
|
||||
this._listenToUpdates = true;
|
||||
this._getRegistry().on("UPDATE", this, ({ operation, value }) => {
|
||||
if (operation === "add") {
|
||||
this._attachComponent(value);
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.all(defs);
|
||||
},
|
||||
@@ -83,7 +79,7 @@ var RootWidget = Widget.extend({
|
||||
*/
|
||||
_attachComponents: function ($from) {
|
||||
var self = this;
|
||||
var childInfos = this._getRegistry().get();
|
||||
var childInfos = this._getRegistry().getAll();
|
||||
var defs = _.map(childInfos, function (childInfo) {
|
||||
return self._attachComponent(childInfo, $from);
|
||||
});
|
||||
@@ -98,71 +94,6 @@ var RootWidget = Widget.extend({
|
||||
* @returns {RootWidgetRegistry}
|
||||
*/
|
||||
_getRegistry: function () {},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Handlers
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the curuent session module.
|
||||
*
|
||||
* @private
|
||||
* @param {OdooEvent} ev
|
||||
*/
|
||||
_onGetSession: function (event) {
|
||||
if (event.data.callback) {
|
||||
event.data.callback(session);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Called when the linked registry is updated after this `RootWidget`
|
||||
*
|
||||
* @private
|
||||
* @param {OdooEvent} ev
|
||||
*/
|
||||
_onRegistryUpdate: function (ev) {
|
||||
ev.stopPropagation();
|
||||
if (this._listenToUpdates) {
|
||||
this._attachComponent(ev.data);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
var RootWidgetRegistry = Class.extend(mixins.EventDispatcherMixin, {
|
||||
/**
|
||||
* @constructor
|
||||
*/
|
||||
init: function () {
|
||||
mixins.EventDispatcherMixin.init.call(this);
|
||||
this._registry = [];
|
||||
},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Public
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Adds an element to the registry (info of what and how to instantiate).
|
||||
*
|
||||
* @param {function} Widget - the widget class to instantiate
|
||||
* @param {string} selector
|
||||
* the jQuery selector to use to find the internal DOM element which
|
||||
* needs to be attached to the instantiated widget
|
||||
*/
|
||||
add: function (Widget, selector) {
|
||||
var registryInfo = {
|
||||
Widget: Widget,
|
||||
selector: selector,
|
||||
};
|
||||
this._registry.push(registryInfo);
|
||||
this.trigger_up('registry_update', registryInfo);
|
||||
},
|
||||
/**
|
||||
* Retrieves all the registry elements.
|
||||
*/
|
||||
get: function () {
|
||||
return this._registry;
|
||||
},
|
||||
});
|
||||
|
||||
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
@@ -348,7 +279,6 @@ registry._fixAppleCollapse = PublicWidget.extend({
|
||||
|
||||
export default {
|
||||
RootWidget: RootWidget,
|
||||
RootWidgetRegistry: RootWidgetRegistry,
|
||||
Widget: PublicWidget,
|
||||
registry: registry,
|
||||
};
|
||||
|
||||
@@ -7,7 +7,6 @@ import session from 'web.session';
|
||||
import publicRootData from 'web.public.root';
|
||||
import "web.zoomodoo";
|
||||
import { FullscreenIndication } from '@website/js/widgets/fullscreen_indication';
|
||||
var websiteRootRegistry = publicRootData.publicRootRegistry;
|
||||
|
||||
var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
|
||||
events: _.extend({}, KeyboardNavigationMixin.events, publicRootData.PublicRoot.prototype.events || {}, {
|
||||
@@ -359,5 +358,4 @@ var WebsiteRoot = publicRootData.PublicRoot.extend(KeyboardNavigationMixin, {
|
||||
|
||||
export default {
|
||||
WebsiteRoot: WebsiteRoot,
|
||||
websiteRootRegistry: websiteRootRegistry,
|
||||
};
|
||||
|
||||
@@ -6,9 +6,10 @@ import Dialog from 'web.Dialog';
|
||||
import time from 'web.time';
|
||||
import weWidgets from 'wysiwyg.widgets';
|
||||
import websiteNavbarData from 'website.navbar';
|
||||
import websiteRootData from 'website.root';
|
||||
import Widget from 'web.Widget';
|
||||
|
||||
import { registry } from "@web/core/registry";
|
||||
|
||||
var _t = core._t;
|
||||
var qweb = core.qweb;
|
||||
|
||||
@@ -1112,8 +1113,14 @@ function _clonePage(pageId) {
|
||||
});
|
||||
}
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(ContentMenu, '#content-menu');
|
||||
websiteRootData.websiteRootRegistry.add(PageManagement, '#list_website_pages');
|
||||
registry.category("website_navbar_widgets").add("ContentMenu", {
|
||||
Widget: ContentMenu,
|
||||
selector: '#content-menu',
|
||||
});
|
||||
registry.category("public_root_widgets").add("PageManagement", {
|
||||
Widget: PageManagement,
|
||||
selector: '#list_website_pages',
|
||||
});
|
||||
|
||||
export default {
|
||||
PagePropertiesDialog: PagePropertiesDialog,
|
||||
|
||||
@@ -6,6 +6,8 @@ var Widget = require('web.Widget');
|
||||
var websiteNavbarData = require('website.navbar');
|
||||
var WebsiteAceEditor = require('website.ace');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
var qweb = core.qweb;
|
||||
|
||||
var CustomizeMenu = Widget.extend({
|
||||
@@ -212,8 +214,14 @@ var AceEditorMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(CustomizeMenu, '#customize-menu');
|
||||
websiteNavbarData.websiteNavbarRegistry.add(AceEditorMenu, '#html_editor');
|
||||
registry.category("website_navbar_widgets").add("CustomizeMenu", {
|
||||
Widget: CustomizeMenu,
|
||||
selector: '#customize-menu',
|
||||
});
|
||||
registry.category("website_navbar_widgets").add("AceEditorMenu", {
|
||||
Widget: AceEditorMenu,
|
||||
selector: '#html_editor',
|
||||
});
|
||||
|
||||
return CustomizeMenu;
|
||||
});
|
||||
|
||||
@@ -7,6 +7,8 @@ var wysiwygLoader = require('web_editor.loader');
|
||||
var websiteNavbarData = require('website.navbar');
|
||||
var Dialog = require('web.Dialog');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
/**
|
||||
@@ -540,7 +542,10 @@ var EditPageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(EditPageMenu, '#edit-page-menu');
|
||||
registry.category("website_navbar_widgets").add("EditPageMenu", {
|
||||
Widget: EditPageMenu,
|
||||
selector: '#edit-page-menu',
|
||||
});
|
||||
|
||||
return EditPageMenu;
|
||||
});
|
||||
|
||||
@@ -5,6 +5,8 @@ var core = require('web.core');
|
||||
var Dialog = require('web.Dialog');
|
||||
var websiteNavbarData = require('website.navbar');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
var MobilePreviewDialog = Dialog.extend({
|
||||
@@ -59,7 +61,10 @@ var MobileMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(MobileMenu, '#mobile-menu');
|
||||
registry.category("website_navbar_widgets").add("MobileMenu", {
|
||||
Widget: MobileMenu,
|
||||
selector: '#mobile-menu',
|
||||
});
|
||||
|
||||
return {
|
||||
MobileMenu: MobileMenu,
|
||||
|
||||
@@ -5,9 +5,8 @@ import dom from 'web.dom';
|
||||
import publicWidget from 'web.public.widget';
|
||||
import concurrency from 'web.concurrency';
|
||||
import Widget from 'web.Widget';
|
||||
import websiteRootData from 'website.root';
|
||||
|
||||
var websiteNavbarRegistry = new publicWidget.RootWidgetRegistry();
|
||||
import { registry } from "@web/core/registry";
|
||||
|
||||
var WebsiteNavbar = publicWidget.RootWidget.extend({
|
||||
xmlDependencies: ['/website/static/src/xml/website.xml'],
|
||||
@@ -77,7 +76,7 @@ var WebsiteNavbar = publicWidget.RootWidget.extend({
|
||||
* @override
|
||||
*/
|
||||
_getRegistry: function () {
|
||||
return websiteNavbarRegistry;
|
||||
return registry.category("website_navbar_widgets");
|
||||
},
|
||||
/**
|
||||
* Searches for the automatic widget {@see RootWidget} which can handle that
|
||||
@@ -281,10 +280,12 @@ var WebsiteNavbarActionWidget = Widget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteRootData.websiteRootRegistry.add(WebsiteNavbar, '#oe_main_menu_navbar');
|
||||
registry.category("public_root_widgets").add("WebsiteNavbar", {
|
||||
Widget: WebsiteNavbar,
|
||||
selector: '#oe_main_menu_navbar',
|
||||
});
|
||||
|
||||
export default {
|
||||
WebsiteNavbar: WebsiteNavbar,
|
||||
websiteNavbarRegistry: websiteNavbarRegistry,
|
||||
WebsiteNavbarActionWidget: WebsiteNavbarActionWidget,
|
||||
};
|
||||
|
||||
@@ -7,6 +7,8 @@ var websiteNavbarData = require('website.navbar');
|
||||
var wUtils = require('website.utils');
|
||||
var tour = require('web_tour.tour');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
const {qweb, _t} = core;
|
||||
|
||||
var enableFlag = 'enable_new_content';
|
||||
@@ -342,7 +344,10 @@ var NewContentMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(NewContentMenu, '.o_new_content_menu');
|
||||
registry.category("website_navbar_widgets").add("NewContentMenu", {
|
||||
Widget: NewContentMenu,
|
||||
selector: '.o_new_content_menu',
|
||||
});
|
||||
|
||||
return NewContentMenu;
|
||||
});
|
||||
|
||||
@@ -11,6 +11,8 @@ var weWidgets = require('wysiwyg.widgets');
|
||||
var websiteNavbarData = require('website.navbar');
|
||||
const { session } = require('@web/session');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
// This replaces \b, because accents(e.g. à, é) are not seen as word boundaries.
|
||||
@@ -894,7 +896,10 @@ var SeoMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(SeoMenu, '#promote-menu');
|
||||
registry.category("website_navbar_widgets").add("SeoMenu", {
|
||||
Widget: SeoMenu,
|
||||
selector: '#promote-menu',
|
||||
});
|
||||
|
||||
return {
|
||||
SeoConfigurator: SeoConfigurator,
|
||||
|
||||
@@ -9,6 +9,8 @@ var EditorMenu = require('website.editMenu');
|
||||
var localStorage = require('web.local_storage');
|
||||
var websiteNavbarData = require('website.navbar');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
var _t = core._t;
|
||||
|
||||
var localStorageNoDialogKey = 'website_translator_nodialog';
|
||||
@@ -347,5 +349,8 @@ var TranslatePageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(TranslatePageMenu, '.o_menu_systray:has([data-action="translate"])');
|
||||
registry.category("website_navbar_widgets").add("TranslatePageMenu", {
|
||||
Widget: TranslatePageMenu,
|
||||
selector: '.o_menu_systray:has([data-action="translate"])',
|
||||
});
|
||||
});
|
||||
|
||||
@@ -10,6 +10,8 @@ odoo.define('website_links.website_links_menu', function (require) {
|
||||
var publicWidget = require('web.public.widget');
|
||||
var websiteNavbarData = require('website.navbar');
|
||||
|
||||
const { registry } = require("@web/core/registry");
|
||||
|
||||
var WebsiteLinksMenu = publicWidget.Widget.extend({
|
||||
|
||||
/**
|
||||
@@ -21,6 +23,9 @@ var WebsiteLinksMenu = publicWidget.Widget.extend({
|
||||
},
|
||||
});
|
||||
|
||||
websiteNavbarData.websiteNavbarRegistry.add(WebsiteLinksMenu, '#o_website_links_share_page');
|
||||
registry.category("website_navbar_widgets").add("WebsiteLinksMenu", {
|
||||
Widget: WebsiteLinksMenu,
|
||||
selector: '#o_website_links_share_page',
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user