summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/framework/misc.js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2015-07-13 14:46:54 +0200
committerAaron Bohy <aab@odoo.com>2015-07-15 13:32:58 +0200
commita0ddaf8b84b6c04508d9c114b4c06469d06a47f0 (patch)
tree3fd322b6dcc8c307fa78839ebab275f58d13731d /addons/web/static/src/js/framework/misc.js
parent27df65c8782f998319374cddeead77ce8e994352 (diff)
[IMP] web: trigger an event when webclient is ready
The main purpose of this commit is to be consistent with the enterprise edition, in which the event 'DOM_updated' is triggered when new content is inserted in the DOM. This way, addons that need to know when a view has been attached in the DOM (e.g. web_tip) can listen to this event and will work fine with both editions of the web addon. With the actual structure of the webclient (action_manager, view_manager), there is no easy way to decide whether or not a view is attached in the DOM, because every rendering is performed in a detached element. For instance, when a view_manager instantiates a new view, it appends it in its $el once the view is ready, but it can't know if its $el is attached in the DOM (it is only the case if the view_manager is the current action of the action manager). This rev. introduces utility functions to centralize the appending/prepending of content, so that an event can be triggered (at a unique place) when the content is really in the DOM. These functions are used by the the action_manager and the view_manager. Another change is that the action_manager keeps the view_manager informed when they are attached in/detached from the DOM, through the variable is_in_DOM.
Diffstat (limited to 'addons/web/static/src/js/framework/misc.js')
-rw-r--r--addons/web/static/src/js/framework/misc.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/addons/web/static/src/js/framework/misc.js b/addons/web/static/src/js/framework/misc.js
index 7a87c05350b..ef073d1ab0d 100644
--- a/addons/web/static/src/js/framework/misc.js
+++ b/addons/web/static/src/js/framework/misc.js
@@ -322,10 +322,47 @@ $.extend( proto, {
}
});
+/**
+ * Private function that triggers an event on core.bus
+ * @param {htmlString or Element or Array or jQuery} [content] the content that
+ * has been attached in the DOM
+ */
+function _notify (content) {
+ core.bus.trigger('DOM_updated', content);
+}
+/**
+ * Appends content in a jQuery object and optionnally triggers an event
+ * @param {jQuery} [$target] the node where content will be appended
+ * @param {htmlString or Element or Array or jQuery} [content] DOM element,
+ * array of elements, HTML string or jQuery object to append to $target
+ * @param {jQuery} [trigger] true to trigger an event, false otherwise
+ */
+function append ($target, content, trigger) {
+ $target.append(content);
+ if (trigger) {
+ _notify(content);
+ }
+}
+/**
+ * Prepends content in a jQuery object and optionnally triggers an event
+ * @param {jQuery} [$target] the node where content will be prepended
+ * @param {htmlString or Element or Array or jQuery} [content] DOM element,
+ * array of elements, HTML string or jQuery object to prepend to $target
+ * @param {jQuery} [trigger] true to trigger an event, false otherwise
+ */
+function prepend ($target, content, trigger) {
+ $target.prepend(content);
+ if (trigger) {
+ _notify(content);
+ }
+}
+
return {
blockUI: blockUI,
unblockUI: unblockUI,
redirect: redirect,
+ append: append,
+ prepend: prepend,
};
});