Created
June 2, 2016 21:04
-
-
Save dotnetchris/9fb93f9105c9ec6638026d8f857211f8 to your computer and use it in GitHub Desktop.
jquery-observe unminified ala http://unminify.com/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function(d) { | |
| d.Observe = {} | |
| })(jQuery); | |
| (function(d, q) { | |
| var r = function(e, f) { | |
| f || (f = e, e = window.document); | |
| var m = []; | |
| d(f).each(function() { | |
| for (var l = [], g = d(this), h = g.parent(); h.length && !g.is(e); h = h.parent()) { | |
| var f = g.get(0).tagName.toLowerCase(); | |
| l.push(f + ":eq(" + h.children(f).index(g) + ")"); | |
| g = h | |
| }(h.length || g.is(e)) && m.push("> " + l.reverse().join(" > ")) | |
| }); | |
| return m.join(", ") | |
| }; | |
| q.path = { | |
| get: r, | |
| capture: function(e, f) { | |
| f || (f = e, e = window.document); | |
| var m = []; | |
| d(f).each(function() { | |
| var l = -1, | |
| g = this; | |
| if (this instanceof Text) | |
| for (var g = this.parentNode, h = g.childNodes, | |
| f = 0; f < h.length; f++) | |
| if (h[f] === this) { | |
| l = f; | |
| break | |
| } | |
| var k = r(e, g), | |
| n = d(e).is(g); | |
| m.push(function(e) { | |
| e = n ? e : d(e).find(k); | |
| return -1 === l ? e : e.contents()[l] | |
| }) | |
| }); | |
| return function(e) { | |
| e = e || window.document; | |
| return m.reduce(function(d, f) { | |
| return d.add(f(e)) | |
| }, d([])) | |
| } | |
| } | |
| } | |
| })(jQuery, jQuery.Observe); | |
| (function(d, q) { | |
| var r = function(e) { | |
| this.original = d(e); | |
| this.root = this.original.clone(!1, !0) | |
| }; | |
| r.prototype.find = function(d) { | |
| return q.path.capture(this.original, d)(this.root) | |
| }; | |
| q.Branch = r | |
| })(jQuery, jQuery.Observe); | |
| (function(d, q) { | |
| var r = function(a, b) { | |
| var c = {}; | |
| a.forEach(function(a) { | |
| (a = b(a)) && (c[a[0]] = a[1]) | |
| }); | |
| return c | |
| }, | |
| e = r("childList attributes characterData subtree attributeOldValue characterDataOldValue attributeFilter".split(" "), function(a) { | |
| return [a.toLowerCase(), a] | |
| }), | |
| f = r(Object.keys(e), function(a) { | |
| if ("attributefilter" !== a) return [e[a], !0] | |
| }), | |
| m = r(["added", "removed"], function(a) { | |
| return [a.toLowerCase(), a] | |
| }), | |
| l = d([]), | |
| g = function(a) { | |
| if ("object" === typeof a) return a; | |
| a = a.split(/\s+/); | |
| var b = {}; | |
| a.forEach(function(a) { | |
| a = | |
| a.toLowerCase(); | |
| if (!e[a] && !m[a]) throw Error("Unknown option " + a); | |
| b[e[a] || m[a]] = !0 | |
| }); | |
| return b | |
| }, | |
| h = function(a) { | |
| return "[" + Object.keys(a).sort().reduce(function(b, c) { | |
| var d = a[c] && "object" === typeof a[c] ? h(a[c]) : a[c]; | |
| return b + "[" + JSON.stringify(c) + ":" + d + "]" | |
| }, "") + "]" | |
| }, | |
| t = window.MutationObserver || window.WebKitMutationObserver, | |
| k = function(a, b, c, s) { | |
| this._originalOptions = d.extend({}, b); | |
| b = d.extend({}, b); | |
| this.attributeFilter = b.attributeFilter; | |
| delete b.attributeFilter; | |
| c && (b.subtree = !0); | |
| b.childList && (b.added = !0, b.removed = !0); | |
| if (b.added || b.removed) b.childList = !0; | |
| this.target = d(a); | |
| this.options = b; | |
| this.selector = c; | |
| this.handler = s | |
| }; | |
| k.prototype.is = function(a, b, c) { | |
| return h(this._originalOptions) === h(a) && this.selector === b && this.handler === c | |
| }; | |
| k.prototype.match = function(a) { | |
| var b = this.options, | |
| c = a.type; | |
| if (!this.options[c]) return l; | |
| if (this.selector) switch (c) { | |
| case "attributes": | |
| if (!this._matchAttributeFilter(a)) break; | |
| case "characterData": | |
| return this._matchAttributesAndCharacterData(a); | |
| case "childList": | |
| if (a.addedNodes && a.addedNodes.length && | |
| b.added && (c = this._matchAddedNodes(a), c.length)) return c; | |
| if (a.removedNodes && a.removedNodes.length && b.removed) return this._matchRemovedNodes(a) | |
| } else { | |
| var s = a.target instanceof Text ? d(a.target).parent() : d(a.target); | |
| if (!b.subtree && s.get(0) !== this.target.get(0)) return l; | |
| switch (c) { | |
| case "attributes": | |
| if (!this._matchAttributeFilter(a)) break; | |
| case "characterData": | |
| return this.target; | |
| case "childList": | |
| if (a.addedNodes && a.addedNodes.length && b.added || a.removedNodes && a.removedNodes.length && b.removed) return this.target | |
| } | |
| } | |
| return l | |
| }; | |
| k.prototype._matchAttributesAndCharacterData = function(a) { | |
| return this._matchSelector(this.target, [a.target]) | |
| }; | |
| k.prototype._matchAddedNodes = function(a) { | |
| return this._matchSelector(this.target, a.addedNodes) | |
| }; | |
| k.prototype._matchRemovedNodes = function(a) { | |
| var b = new q.Branch(this.target), | |
| c = Array.prototype.slice.call(a.removedNodes).map(function(a) { | |
| return a.cloneNode(!0) | |
| }); | |
| a.previousSibling ? b.find(a.previousSibling).after(c) : a.nextSibling ? b.find(a.nextSibling).before(c) : (this.target === a.target ? b.root : b.find(a.target)).empty().append(c); | |
| return this._matchSelector(b.root, c).length ? d(a.target) : l | |
| }; | |
| k.prototype._matchSelector = function(a, b) { | |
| var c = a.find(this.selector); | |
| b = Array.prototype.slice.call(b); | |
| return c = c.filter(function() { | |
| var a = this; | |
| return b.some(function(b) { | |
| return b instanceof Text ? b.parentNode === a : b === a || d(b).has(a).length | |
| }) | |
| }) | |
| }; | |
| k.prototype._matchAttributeFilter = function(a) { | |
| return this.attributeFilter && this.attributeFilter.length ? 0 <= this.attributeFilter.indexOf(a.attributeName) : !0 | |
| }; | |
| var n = function(a) { | |
| this.patterns = []; | |
| this._target = | |
| a; | |
| this._observer = null | |
| }; | |
| n.prototype.observe = function(a, b, c) { | |
| var d = this; | |
| this._observer ? this._observer.disconnect() : this._observer = new t(function(a) { | |
| a.forEach(function(a) { | |
| d.patterns.forEach(function(b) { | |
| var c = b.match(a); | |
| c.length && c.each(function() { | |
| b.handler.call(this, a) | |
| }) | |
| }) | |
| }) | |
| }); | |
| this.patterns.push(new k(this._target, a, b, c)); | |
| this._observer.observe(this._target, this._collapseOptions()) | |
| }; | |
| n.prototype.disconnect = function(a, b, c) { | |
| var d = this; | |
| this._observer && (this.patterns.filter(function(d) { | |
| return d.is(a, b, c) | |
| }).forEach(function(a) { | |
| a = | |
| d.patterns.indexOf(a); | |
| d.patterns.splice(a, 1) | |
| }), this.patterns.length || this._observer.disconnect()) | |
| }; | |
| n.prototype.disconnectAll = function() { | |
| this._observer && (this.patterns = [], this._observer.disconnect()) | |
| }; | |
| n.prototype.pause = function() { | |
| this._observer && this._observer.disconnect() | |
| }; | |
| n.prototype.resume = function() { | |
| this._observer && this._observer.observe(this._target, this._collapseOptions()) | |
| }; | |
| n.prototype._collapseOptions = function() { | |
| var a = {}; | |
| this.patterns.forEach(function(b) { | |
| var c = a.attributes && a.attributeFilter; | |
| if (!c && a.attributes || !b.attributeFilter) c && b.options.attributes && !b.attributeFilter && delete a.attributeFilter; | |
| else { | |
| var e = {}, | |
| f = []; | |
| (a.attributeFilter || []).concat(b.attributeFilter).forEach(function(a) { | |
| e[a] || (f.push(a), e[a] = 1) | |
| }); | |
| a.attributeFilter = f | |
| } | |
| d.extend(a, b.options) | |
| }); | |
| Object.keys(m).forEach(function(b) { | |
| delete a[m[b]] | |
| }); | |
| return a | |
| }; | |
| var p = function(a) { | |
| this.patterns = []; | |
| this._paused = !1; | |
| this._target = a; | |
| this._events = {}; | |
| this._handler = this._handler.bind(this) | |
| }; | |
| p.prototype.NS = ".jQueryObserve"; | |
| p.prototype.observe = | |
| function(a, b, c) { | |
| a = new k(this._target, a, b, c); | |
| d(this._target); | |
| a.options.childList && (this._addEvent("DOMNodeInserted"), this._addEvent("DOMNodeRemoved")); | |
| a.options.attributes && this._addEvent("DOMAttrModified"); | |
| a.options.characterData && this._addEvent("DOMCharacerDataModified"); | |
| this.patterns.push(a) | |
| }; | |
| p.prototype.disconnect = function(a, b, c) { | |
| var e = d(this._target), | |
| f = this; | |
| this.patterns.filter(function(d) { | |
| return d.is(a, b, c) | |
| }).forEach(function(a) { | |
| a = f.patterns.indexOf(a); | |
| f.patterns.splice(a, 1) | |
| }); | |
| var g = this.patterns.reduce(function(a, | |
| b) { | |
| b.options.childList && (a.DOMNodeInserted = !0, a.DOMNodeRemoved = !0); | |
| b.options.attributes && (a.DOMAttrModified = !0); | |
| b.options.characterData && (a.DOMCharacerDataModified = !0); | |
| return a | |
| }, {}); | |
| Object.keys(this._events).forEach(function(a) { | |
| g[a] || (delete f._events[a], e.off(a + f.NS, f._handler)) | |
| }) | |
| }; | |
| p.prototype.disconnectAll = function() { | |
| var a = d(this._target), | |
| b; | |
| for (b in this._events) a.off(b + this.NS, this._handler); | |
| this._events = {}; | |
| this.patterns = [] | |
| }; | |
| p.prototype.pause = function() { | |
| this._paused = !0 | |
| }; | |
| p.prototype.resume = function() { | |
| this._paused = !1 | |
| }; | |
| p.prototype._handler = function(a) { | |
| if (!this._paused) { | |
| var b = { | |
| type: null, | |
| target: null, | |
| addedNodes: null, | |
| removedNodes: null, | |
| previousSibling: null, | |
| nextSibling: null, | |
| attributeName: null, | |
| attributeNamespace: null, | |
| oldValue: null | |
| }; | |
| switch (a.type) { | |
| case "DOMAttrModified": | |
| b.type = "attributes"; | |
| b.target = a.target; | |
| b.attributeName = a.attrName; | |
| b.oldValue = a.prevValue; | |
| break; | |
| case "DOMCharacerDataModified": | |
| b.type = "characterData"; | |
| b.target = d(a.target).parent().get(0); | |
| b.attributeName = a.attrName; | |
| b.oldValue = a.prevValue; | |
| break; | |
| case "DOMNodeInserted": | |
| b.type = | |
| "childList"; | |
| b.target = a.relatedNode; | |
| b.addedNodes = [a.target]; | |
| b.removedNodes = []; | |
| break; | |
| case "DOMNodeRemoved": | |
| b.type = "childList", b.target = a.relatedNode, b.addedNodes = [], b.removedNodes = [a.target] | |
| } | |
| for (a = 0; a < this.patterns.length; a++) { | |
| var c = this.patterns[a], | |
| e = c.match(b); | |
| e.length && e.each(function() { | |
| c.handler.call(this, b) | |
| }) | |
| } | |
| } | |
| }; | |
| p.prototype._addEvent = function(a) { | |
| this._events[a] || (d(this._target).on(a + this.NS, this._handler), this._events[a] = !0) | |
| }; | |
| q.Pattern = k; | |
| q.MutationObserver = n; | |
| q.DOMEventObserver = p; | |
| d.fn.observe = | |
| function(a, b, c) { | |
| b ? c || (c = b, b = null) : (c = a, a = f); | |
| return this.each(function() { | |
| var e = d(this), | |
| f = e.data("observer"); | |
| f || (f = t ? new n(this) : new p(this), e.data("observer", f)); | |
| a = g(a); | |
| f.observe(a, b, c) | |
| }) | |
| }; | |
| d.fn.disconnect = function(a, b, c) { | |
| a && (b ? c || (c = b, b = null) : (c = a, a = f)); | |
| return this.each(function() { | |
| var e = d(this), | |
| f = e.data("observer"); | |
| f && (a ? (a = g(a), f.disconnect(a, b, c)) : (f.disconnectAll(), e.removeData("observer"))) | |
| }) | |
| } | |
| })(jQuery, jQuery.Observe); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment