[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:
Samuel Degueldre
2021-07-14 07:08:58 +00:00
parent 13e0808b1f
commit f9cc4281b6
13 changed files with 72 additions and 98 deletions
+2
View File
@@ -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,
};
+10 -3
View File
@@ -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,
+10 -2
View File
@@ -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;
});
+6 -1
View File
@@ -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,
+6 -5
View File
@@ -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;
});
+6 -1
View File
@@ -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',
});
});