[REF] website, *: stop using 'animation' confusing name

* web, website_blog, website_sale, website_twitter

Before this PR, all website widgets were named 'Animation'. Now that
they are 'Public Widgets', we can at last stop using the confusing
'animation' name.

Part of https://github.com/odoo/odoo/pull/29442
task-1932066
This commit is contained in:
qsm-odoo
2019-02-26 17:09:23 +00:00
parent d946b7a85d
commit a80775ce3c
10 changed files with 96 additions and 99 deletions
+46 -46
View File
@@ -30,10 +30,10 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
'click .js_disable_on_click': '_onDisableOnClick',
}),
custom_events: _.extend({}, publicWidget.RootWidget.prototype.custom_events || {}, {
'animation_start_demand': '_onAnimationStartDemand',
'animation_stop_demand': '_onAnimationStopDemand',
'context_get': '_onContextGet',
'main_object_request': '_onMainObjectRequest',
'widgets_start_request': '_onWidgetsStartRequest',
'widgets_stop_request': '_onWidgetsStopRequest',
}),
/**
@@ -42,7 +42,7 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
init: function () {
this._super.apply(this, arguments);
ServiceProviderMixin.init.call(this);
this.animations = [];
this.publicWidgets = [];
},
/**
* @override
@@ -59,10 +59,10 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
* @override
*/
start: function () {
var defs = [this._super.apply(this, arguments)];
// Animations
defs.push(this._startAnimations());
var defs = [
this._super.apply(this, arguments),
this._startWidgets()
];
// Display image thumbnail
this.$(".o_image[data-mimetype^='image']").each(function () {
@@ -161,12 +161,12 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
*
* @private
* @param {jQuery} [$from]
* only initialize the animations whose `selector` matches the
* only initialize the public widgets whose `selector` matches the
* element or one of its descendant (default to the wrapwrap element)
* @param {Object} [options]
* @returns {Deferred}
*/
_startAnimations: function ($from, options) {
_startWidgets: function ($from, options) {
var self = this;
if ($from === undefined) {
@@ -182,16 +182,16 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
options = {};
}
this._stopAnimations($from);
this._stopWidgets($from);
var defs = _.map(this._getPublicWidgetsRegistry(options), function (WebsiteWidget) {
var selector = WebsiteWidget.prototype.selector || '';
var defs = _.map(this._getPublicWidgetsRegistry(options), function (PublicWidget) {
var selector = PublicWidget.prototype.selector || '';
var $target = $from.find(selector).addBack(selector);
var defs = _.map($target, function (el) {
var animation = new WebsiteWidget(self, options);
self.animations.push(animation);
return animation.attachTo($(el));
var widget = new PublicWidget(self, options);
self.publicWidgets.push(widget);
return widget.attachTo($(el));
});
return $.when.apply($, defs);
});
@@ -203,48 +203,26 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
*
* @private
* @param {jQuery} [$from]
* only stop the animations linked to the given element(s) or one of
* its descendants
* only stop the public widgets linked to the given element(s) or one
* of its descendants
*/
_stopAnimations: function ($from) {
var removedAnimations = _.map(this.animations, function (animation) {
_stopWidgets: function ($from) {
var removedWidgets = _.map(this.publicWidgets, function (widget) {
if (!$from
|| $from.filter(animation.el).length
|| $from.find(animation.el).length) {
animation.destroy();
return animation;
|| $from.filter(widget.el).length
|| $from.find(widget.el).length) {
widget.destroy();
return widget;
}
return null;
});
this.animations = _.difference(this.animations, removedAnimations);
this.publicWidgets = _.difference(this.publicWidgets, removedWidgets);
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* Called when the root is notified that the animations have to be
* (re)started.
*
* @private
* @param {OdooEvent} ev
*/
_onAnimationStartDemand: function (ev) {
this._startAnimations(ev.data.$target, ev.data.options)
.done(ev.data.onSuccess)
.fail(ev.data.onFailure);
},
/**
* Called when the root is notified that the animations have to be
* stopped.
*
* @private
* @param {OdooEvent} ev
*/
_onAnimationStopDemand: function (ev) {
this._stopAnimations(ev.data.$target);
},
/**
* Called when someone asked for the global public context.
*
@@ -272,6 +250,28 @@ var PublicRoot = publicWidget.RootWidget.extend(ServiceProviderMixin, {
id: m[2] | 0,
});
},
/**
* Called when the root is notified that the public widgets have to be
* (re)started.
*
* @private
* @param {OdooEvent} ev
*/
_onWidgetsStartRequest: function (ev) {
this._startWidgets(ev.data.$target, ev.data.options)
.done(ev.data.onSuccess)
.fail(ev.data.onFailure);
},
/**
* Called when the root is notified that the public widgets have to be
* stopped.
*
* @private
* @param {OdooEvent} ev
*/
_onWidgetsStopRequest: function (ev) {
this._stopWidgets(ev.data.$target);
},
/**
* @todo review
* @private
@@ -2,7 +2,7 @@ odoo.define('web.public.widget', function (require) {
'use strict';
/**
* Provides a way to start JS code for snippets' initialization and animations.
* Provides a way to start JS code for public contents.
*/
var Class = require('web.Class');
@@ -175,10 +175,10 @@ var RootWidgetRegistry = Class.extend(mixins.EventDispatcherMixin, {
var PublicWidget = Widget.extend({
/**
* The selector attribute, if defined, allows to automatically create an
* instance of this animation on page load for each DOM element which
* matches this selector. The `Animation.$target` element will then be that
* particular DOM element. This should be the main way of instantiating
* `Animation` elements.
* instance of this widget on page load for each DOM element which
* matches this selector. The `PublicWidget.$target` element will then be
* that particular DOM element. This should be the main way of instantiating
* `PublicWidget` elements.
*
* @todo do not make this part of the Widget but rather an info to give when
* registering the widget.
@@ -218,11 +218,10 @@ var PublicWidget = Widget.extend({
this.options = options || {};
},
/**
* Destroys the animation and basically restores the target to the state it
* Destroys the widget and basically restores the target to the state it
* was before the start method was called (unlike standard widget, the
* associated $el DOM is not removed).
*
* Also stops animation effects and destroys them if any.
* associated $el DOM is not removed, if this was instantiated thanks to the
* selector property).
*/
destroy: function () {
if (this.selector) {
@@ -330,17 +329,16 @@ var PublicWidget = Widget.extend({
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
/**
* The registry object contains the list of available animations.
* The registry object contains the list of widgets that should be instantiated
* thanks to their selector property if any.
*/
var registry = {};
/**
* This is a fix for apple device (<= IPhone 4, IPad 2)
* Standard bootstrap requires data-toggle='collapse' element to be <a/> tags.
* Unfortunatly one snippet uses a <div/> tag instead. The fix forces an empty
* Unfortunatly some layouts use a <div/> tag instead. The fix forces an empty
* click handler on these div, which allows standard bootstrap to work.
*
* This should be removed in a future odoo snippets refactoring.
*/
registry._fixAppleCollapse = PublicWidget.extend({
selector: 'div[data-toggle="collapse"]',
@@ -48,13 +48,13 @@ publicWidget.Widget.include({
disabledInEditableMode: true,
/**
* Acts as @see Widget.events except that the events are only binded if the
* Animation instance is instanciated in edit mode. The property is not
* Widget instance is instanciated in edit mode. The property is not
* considered if @see disabledInEditableMode is false.
*/
edit_events: null,
/**
* Acts as @see Widget.events except that the events are only binded if the
* Animation instance is instanciated in readonly mode. The property only
* Widget instance is instanciated in readonly mode. The property only
* makes sense if @see disabledInEditableMode is false, you should simply
* use @see Widget.events otherwise.
*/
@@ -779,7 +779,7 @@ registry.gallery = publicWidget.Widget.extend({
$modal.appendTo(document.body);
$modal.one('shown.bs.modal', function () {
self.trigger_up('animation_start_demand', {
self.trigger_up('widgets_start_request', {
editableMode: false,
$target: $modal.find('.modal-body.o_slideshow'),
});
@@ -19,7 +19,7 @@ var WebsiteRoot = publicRootData.PublicRoot.extend({
'shown.bs.modal': '_onModalShown',
}),
custom_events: _.extend({}, publicRootData.PublicRoot.prototype.custom_events || {}, {
'ready_to_clean_for_save': '_onAnimationStopDemand',
'ready_to_clean_for_save': '_onWidgetsStopRequest',
}),
/**
@@ -90,7 +90,7 @@ var WebsiteRoot = publicRootData.PublicRoot.extend({
/**
* @override
*/
_onAnimationStartDemand: function (ev) {
_onWidgetsStartRequest: function (ev) {
ev.data.options = _.clone(ev.data.options || {});
ev.data.options.editableMode = ev.data.editableMode;
this._super.apply(this, arguments);
@@ -16,13 +16,13 @@ options.Class.include({
//--------------------------------------------------------------------------
/**
* Refreshes all animations related to the given element.
* Refreshes all public widgets related to the given element.
*
* @private
* @param {jQuery} [$el=this.$target]
*/
_refreshAnimations: function ($el) {
this.trigger_up('animation_start_demand', {
_refreshPublicWidgets: function ($el) {
this.trigger_up('widgets_start_request', {
editableMode: true,
$target: $el || this.$target,
});
@@ -246,7 +246,7 @@ options.registry.carousel = options.Class.extend({
}
});
_.defer(function () {
self._refreshAnimations();
self._refreshPublicWidgets();
self.$target.carousel(index > 0 ? --index : cycle);
});
}
@@ -544,7 +544,7 @@ options.registry.parallax = options.Class.extend({
start: function () {
var self = this;
this.$target.on('snippet-option-change snippet-option-preview', function () {
self._refreshAnimations();
self._refreshPublicWidgets();
});
return this._super.apply(this, arguments);
},
@@ -561,13 +561,13 @@ options.registry.parallax = options.Class.extend({
// there may have been changes in the page that influenced the parallax
// rendering (new snippets, ...).
// TODO make this automatic.
this._refreshAnimations();
this._refreshPublicWidgets();
},
/**
* @override
*/
onMove: function () {
this._refreshAnimations();
this._refreshPublicWidgets();
},
//--------------------------------------------------------------------------
@@ -581,7 +581,7 @@ options.registry.parallax = options.Class.extend({
*/
scroll: function (previewMode, value) {
this.$target.attr('data-scroll-background-ratio', value);
this._refreshAnimations();
this._refreshPublicWidgets();
},
//--------------------------------------------------------------------------
@@ -674,7 +674,7 @@ var FacebookPageDialog = weWidgets.Dialog.extend({
* @param {boolean} toggle
*/
_toggleWarning: function (toggle) {
this.trigger_up('animation_stop_demand', {
this.trigger_up('widgets_stop_request', {
$target: this.$previewPage,
});
this.$('.facebook_page_warning').toggleClass('d-none', toggle);
@@ -704,8 +704,7 @@ var FacebookPageDialog = weWidgets.Dialog.extend({
});
options.registry.facebookPage = options.Class.extend({
/**
* Initializes the required facebook page data to create the animation
* iframe.
* Initializes the required facebook page data to create the iframe.
*
* @override
*/
@@ -789,7 +788,7 @@ options.registry.facebookPage = options.Class.extend({
$el.attr('data-' + key, value);
$el.data(key, value);
});
self._refreshAnimations($el);
self._refreshPublicWidgets($el);
},
});
@@ -825,7 +824,7 @@ options.registry.ul = options.Class.extend({
toggleClass: function () {
this._super.apply(this, arguments);
this.trigger_up('animation_stop_demand', {
this.trigger_up('widgets_stop_request', {
$target: this.$target,
});
@@ -846,7 +845,7 @@ options.registry.ul = options.Class.extend({
.prepend('<a href="#" class="o_ul_toggle_next fa" />');
$li.removeClass('o_open').next().addClass('o_close');
this.$target.find('li').removeClass('o_open');
this._refreshAnimations();
this._refreshPublicWidgets();
},
});
@@ -1188,7 +1187,7 @@ options.registry.gallery = options.Class.extend({
// Apply layout animation
this.$target.off('slide.bs.carousel').off('slid.bs.carousel');
this.$('li.fa').off('click');
this._refreshAnimations();
this._refreshPublicWidgets();
},
/**
* Allows to change the style of the individual images.
+14 -14
View File
@@ -92,7 +92,7 @@ var EditPageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
if (this.editModeEnable) {
return;
}
this.trigger_up('animation_stop_demand', {
this.trigger_up('widgets_stop_request', {
$target: this._targetForEdition(),
});
var $welcomeMessageParent = null;
@@ -112,7 +112,7 @@ var EditPageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
.not('[data-editor-message]')
.attr('data-editor-message', _t('DRAG BUILDING BLOCKS HERE'));
var def = $.Deferred();
self.trigger_up('animation_start_demand', {
self.trigger_up('widgets_start_request', {
editableMode: true,
onSuccess: def.resolve.bind(def),
onFailure: def.reject.bind(def),
@@ -154,77 +154,77 @@ var EditPageMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({
/**
* Called when content will be destroyed in the page. Notifies the
* WebsiteRoot that is should stop the animations.
* WebsiteRoot that is should stop the public widgets.
*
* @private
* @param {OdooEvent} ev
*/
_onContentWillBeDestroyed: function (ev) {
this.trigger_up('animation_stop_demand', {
this.trigger_up('widgets_stop_request', {
$target: ev.data.$target,
});
},
/**
* Called when content was recreated in the page. Notifies the
* WebsiteRoot that is should start the animations.
* WebsiteRoot that is should start the public widgets.
*
* @private
* @param {OdooEvent} ev
*/
_onContentWasRecreated: function (ev) {
this.trigger_up('animation_start_demand', {
this.trigger_up('widgets_start_request', {
editableMode: true,
$target: ev.data.$target,
});
},
/**
* Called when edition will stop. Notifies the
* WebsiteRoot that is should stop the animations.
* WebsiteRoot that is should stop the public widgets.
*
* @private
* @param {OdooEvent} ev
*/
_onEditionWillStop: function (ev) {
this.$editorMessageElements.removeAttr('data-editor-message');
this.trigger_up('animation_stop_demand', {
this.trigger_up('widgets_stop_request', {
$target: this._targetForEdition(),
});
},
/**
* Called when edition was stopped. Notifies the
* WebsiteRoot that is should start the animations.
* WebsiteRoot that is should start the public widgets.
*
* @private
* @param {OdooEvent} ev
*/
_onEditionWasStopped: function (ev) {
this.trigger_up('animation_start_demand', {
this.trigger_up('widgets_start_request', {
$target: this._targetForEdition(),
});
this.editModeEnable = false;
},
/**
* Called when a snippet is cloned in the page. Notifies the WebsiteRoot
* that is should start the animations for this snippet.
* that is should start the public widgets for this snippet.
*
* @private
* @param {OdooEvent} ev
*/
_onSnippetCloned: function (ev) {
this.trigger_up('animation_start_demand', {
this.trigger_up('widgets_start_request', {
editableMode: true,
$target: ev.data.$target,
});
},
/**
* Called when a snippet is dropped in the page. Notifies the WebsiteRoot
* that is should start the animations for this snippet.
* that is should start the public widgets for this snippet.
*
* @private
* @param {OdooEvent} ev
*/
_onSnippetDropped: function (ev) {
this.trigger_up('animation_start_demand', {
this.trigger_up('widgets_start_request', {
editableMode: true,
$target: ev.data.$target,
});
@@ -619,9 +619,9 @@ var ThemeCustomizeDialog = Dialog.extend({
$allLinks.remove();
});
}).then(function () {
// Some animations may depend on the variables that were
// Some public widgets may depend on the variables that were
// customized, so we have to restart them.
self.trigger_up('animation_start_demand');
self.trigger_up('widgets_start_request');
});
},
/**
@@ -18,7 +18,7 @@ sOptions.registry.js_get_posts_limit = sOptions.Class.extend({
postsLimit: function (previewMode, value, $opt) {
value = parseInt(value);
this.$target.attr('data-posts-limit', value).data('postsLimit', value);
this.trigger_up('animation_start_demand', {
this.trigger_up('widgets_start_request', {
editableMode: true,
$target: this.$target,
});
@@ -79,7 +79,7 @@ sOptions.registry.js_get_posts_selectBlog = sOptions.Class.extend({
filterByBlogId: function (previewMode, value, $opt) {
value = parseInt(value);
this.$target.attr('data-filter-by-blog-id', value).data('filterByBlogId', value);
this.trigger_up('animation_start_demand', {
this.trigger_up('widgets_start_request', {
editableMode: true,
$target: this.$target,
});
@@ -400,7 +400,7 @@ publicWidget.registry.WebsiteSale = publicWidget.Widget.extend(ProductConfigurat
$carousel.carousel(0);
this._startZoom();
// fix issue with carousel height
this.trigger_up('animation_start_demand', {$target: $carousel});
this.trigger_up('widgets_start_request', {$target: $carousel});
}
}
else { // compatibility 12.0
@@ -46,7 +46,7 @@ sOptions.registry.twitter = sOptions.Class.extend({
this.$target.on('click.website_twitter', '.lnk_configure', function (e) {
window.location = e.currentTarget.href;
});
this.trigger_up('animation_stop_demand', {
this.trigger_up('widgets_stop_request', {
$target: this.$target,
});
return this._super.apply(this, arguments);