diff --git a/npm/packs/jquery/src/abp.dom.js b/npm/packs/jquery/src/abp.dom.js index 5a578054cd..9cf66a6eb4 100644 --- a/npm/packs/jquery/src/abp.dom.js +++ b/npm/packs/jquery/src/abp.dom.js @@ -7,24 +7,53 @@ var abp = abp || {}; abp.dom = abp.dom || {}; - abp.dom.onElementLoaded = function (callback) { - abp.event.on('abp.dom.elementLoaded', callback); + abp.dom.onNodeAdded = function (callback) { + abp.event.on('abp.dom.nodeAdded', callback); }; - abp.dom.elementLoaded = function(args) { - abp.event.trigger('abp.dom.elementLoaded', args); - } - - abp.dom.onElementUnloaded = function (callback) { - abp.event.on('abp.dom.elementUnloaded', callback); + abp.dom.onNodeRemoved = function (callback) { + abp.event.on('abp.dom.nodeRemoved', callback); }; - abp.dom.elementUnloaded = function (args) { - abp.event.trigger('abp.dom.elementUnloaded', args); - } - $.fn.findWithSelf = function (selector) { return this.filter(selector).add(this.find(selector)); }; + var mutationObserverCallback = function(mutationsList) { + for (var i = 0; i < mutationsList.length; i++) { + var mutation = mutationsList[i]; + if (mutation.type === 'childList') { + if (mutation.addedNodes && mutation.removedNodes.length) { + for (var k = 0; k < mutation.removedNodes.length; k++) { + abp.event.trigger( + 'abp.dom.nodeRemoved', + { + $el: $(mutation.removedNodes[k]) + } + ); + } + } + + if (mutation.addedNodes && mutation.addedNodes.length) { + for (var j = 0; j < mutation.addedNodes.length; j++) { + abp.event.trigger( + 'abp.dom.nodeAdded', + { + $el: $(mutation.addedNodes[j]) + } + ); + } + } + } + } + }; + + new MutationObserver(mutationObserverCallback).observe( + $('body')[0], + { + subtree: true, + childList: true + } + ); + })(jQuery); \ No newline at end of file