diff options
author | Alessio Vanni <vannilla@firemail.cc> | 2020-10-04 18:33:13 +0200 |
---|---|---|
committer | Jesús <heckyel@hyperbola.info> | 2022-04-06 09:43:45 +0800 |
commit | 9147038defa859e42b999573b1279f90c5822c2f (patch) | |
tree | d803a6f5e9eb5c362d9e752c69597e02d8998872 /js/udom.js | |
parent | adf5b9165c0712d1bcb834e03582d22837facce9 (diff) | |
download | ematrix-9147038defa859e42b999573b1279f90c5822c2f.tar.lz ematrix-9147038defa859e42b999573b1279f90c5822c2f.tar.xz ematrix-9147038defa859e42b999573b1279f90c5822c2f.zip |
Style changes
Signed-off-by: Jesús <heckyel@hyperbola.info>
Diffstat (limited to 'js/udom.js')
-rw-r--r-- | js/udom.js | 905 |
1 files changed, 404 insertions, 501 deletions
@@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. - Home: https://libregit.spks.xyz/heckyel/ematrix + Home: https://gitlab.com/vannilla/ematrix uMatrix Home: https://github.com/gorhill/uBlock */ @@ -33,698 +33,601 @@ // Opera rules, I am not allowed to use a cut-down version of jQuery. So // the code here does *only* what I need, and nothing more, and with a lot // of assumption on passed parameters, etc. I grow it on a per-need-basis only. +// ηMatrix: well, we are not bound by these rules, but not being +// reliant on jQuery is not a bad thing. -var uDom = (function() { +var uDom = (function () { - /******************************************************************************/ - - var DOMList = function() { - this.nodes = []; + let DOMList = function () { + this.nodes = []; }; - /******************************************************************************/ - - Object.defineProperty( - DOMList.prototype, - 'length', - { - get: function() { - return this.nodes.length; - } - } - ); - - /******************************************************************************/ + Object.defineProperty(DOMList.prototype, 'length', { + get: function() { + return this.nodes.length; + } + }); - var DOMListFactory = function(selector, context) { - var r = new DOMList(); - if ( typeof selector === 'string' ) { + let DOMListFactory = function (selector, context) { + let r = new DOMList(); + if (typeof selector === 'string') { selector = selector.trim(); - if ( selector !== '' ) { - return addSelectorToList(r, selector, context); + if (selector !== '') { + return addSelectorToList(r, selector, context); } - } - if ( selector instanceof Node ) { + } + if (selector instanceof Node) { return addNodeToList(r, selector); - } - if ( selector instanceof NodeList ) { + } + if (selector instanceof NodeList) { return addNodeListToList(r, selector); - } - if ( selector instanceof DOMList ) { + } + if (selector instanceof DOMList) { return addListToList(r, selector); - } - return r; + } + return r; }; - /******************************************************************************/ - - DOMListFactory.onLoad = function(callback) { - window.addEventListener('load', callback); + DOMListFactory.onLoad = function (callback) { + window.addEventListener('load', callback); }; - /******************************************************************************/ - - DOMListFactory.nodeFromId = function(id) { - return document.getElementById(id); + DOMListFactory.nodeFromId = function (id) { + return document.getElementById(id); }; - DOMListFactory.nodeFromSelector = function(selector) { - return document.querySelector(selector); + DOMListFactory.nodeFromSelector = function (selector) { + return document.querySelector(selector); }; - /******************************************************************************/ - - var addNodeToList = function(list, node) { - if ( node ) { + let addNodeToList = function (list, node) { + if (node) { list.nodes.push(node); - } - return list; + } + return list; }; - /******************************************************************************/ - - var addNodeListToList = function(list, nodelist) { - if ( nodelist ) { - var n = nodelist.length; - for ( var i = 0; i < n; i++ ) { - list.nodes.push(nodelist[i]); + let addNodeListToList = function (list, nodelist) { + if (nodelist) { + let n = nodelist.length; + for (let i=0; i<n; ++i) { + list.nodes.push(nodelist[i]); } - } - return list; + } + return list; }; - /******************************************************************************/ - - var addListToList = function(list, other) { - list.nodes = list.nodes.concat(other.nodes); - return list; + let addListToList = function (list, other) { + list.nodes = list.nodes.concat(other.nodes); + return list; }; - /******************************************************************************/ - - var addSelectorToList = function(list, selector, context) { - var p = context || document; - var r = p.querySelectorAll(selector); - var n = r.length; - for ( var i = 0; i < n; i++ ) { + let addSelectorToList = function (list, selector, context) { + let p = context || document; + let r = p.querySelectorAll(selector); + let n = r.length; + for (let i=0; i<n; ++i) { list.nodes.push(r[i]); - } - return list; + } + return list; }; - /******************************************************************************/ - - var nodeInNodeList = function(node, nodeList) { - var i = nodeList.length; - while ( i-- ) { - if ( nodeList[i] === node ) { - return true; + let nodeInNodeList = function (node, nodeList) { + let i = nodeList.length; + while (i--) { + if (nodeList[i] === node) { + return true; } - } - return false; + } + return false; }; - /******************************************************************************/ - - var doesMatchSelector = function(node, selector) { - if ( !node ) { + let doesMatchSelector = function (node, selector) { + if (!node) { return false; - } - if ( node.nodeType !== 1 ) { + } + if (node.nodeType !== 1) { return false; - } - if ( selector === undefined ) { + } + if (selector === undefined) { return true; - } - var parentNode = node.parentNode; - if ( !parentNode || !parentNode.setAttribute ) { + } + + let parentNode = node.parentNode; + if (!parentNode || !parentNode.setAttribute) { return false; - } - var doesMatch = false; - parentNode.setAttribute('uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO', ''); - var grandpaNode = parentNode.parentNode || document; - var nl = grandpaNode.querySelectorAll('[uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO] > ' + selector); - var i = nl.length; - while ( doesMatch === false && i-- ) { - doesMatch = nl[i] === node; - } - parentNode.removeAttribute('uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO'); - return doesMatch; - }; + } - /******************************************************************************/ + let doesMatch = false; + parentNode.setAttribute('uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO', ''); - DOMList.prototype.nodeAt = function(i) { - return this.nodes[i] || null; + let grandpaNode = parentNode.parentNode || document; + let nl = grandpaNode + .querySelectorAll('[uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO] > ' + + selector); + let i = nl.length; + while (doesMatch === false && i--) { + doesMatch = nl[i] === node; + } + parentNode.removeAttribute('uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO'); + return doesMatch; }; - DOMList.prototype.at = function(i) { - return addNodeToList(new DOMList(), this.nodes[i]); + DOMList.prototype.nodeAt = function (i) { + return this.nodes[i] || null; }; - /******************************************************************************/ - - DOMList.prototype.toArray = function() { - return this.nodes.slice(); + DOMList.prototype.at = function (i) { + return addNodeToList(new DOMList(), this.nodes[i]); }; - /******************************************************************************/ - - DOMList.prototype.pop = function() { - return addNodeToList(new DOMList(), this.nodes.pop()); + DOMList.prototype.toArray = function () { + return this.nodes.slice(); }; - /******************************************************************************/ + DOMList.prototype.pop = function () { + return addNodeToList(new DOMList(), this.nodes.pop()); + }; - DOMList.prototype.forEach = function(fn) { - var n = this.nodes.length; - for ( var i = 0; i < n; i++ ) { + DOMList.prototype.forEach = function (fn) { + let n = this.nodes.length; + for (let i=0; i<n; ++i) { fn(this.at(i), i); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.subset = function(i, l) { - var r = new DOMList(); - var n = l !== undefined ? l : this.nodes.length; - var j = Math.min(i + n, this.nodes.length); - if ( i < j ) { + DOMList.prototype.subset = function (i, l) { + let r = new DOMList(); + let n = (l !== undefined) ? l : this.nodes.length; + let j = Math.min(i + n, this.nodes.length); + if (i < j) { r.nodes = this.nodes.slice(i, j); - } - return r; + } + return r; }; - /******************************************************************************/ - - DOMList.prototype.first = function() { - return this.subset(0, 1); + DOMList.prototype.first = function () { + return this.subset(0, 1); }; - /******************************************************************************/ - - DOMList.prototype.next = function(selector) { - var r = new DOMList(); - var n = this.nodes.length; - var node; - for ( var i = 0; i < n; i++ ) { - node = this.nodes[i]; - while ( node.nextSibling !== null ) { - node = node.nextSibling; - if ( node.nodeType !== 1 ) { + DOMList.prototype.next = function (selector) { + let r = new DOMList(); + let n = this.nodes.length; + for (let i=0; i<n; ++i) { + let node = this.nodes[i]; + while (node.nextSibling !== null) { + node = node.nextSibling; + if (node.nodeType !== 1) { continue; - } - if ( doesMatchSelector(node, selector) === false ) { + } + if (doesMatchSelector(node, selector) === false) { continue; - } - addNodeToList(r, node); - break; + } + addNodeToList(r, node); + break; } - } - return r; + } + return r; }; - /******************************************************************************/ - - DOMList.prototype.parent = function() { - var r = new DOMList(); - if ( this.nodes.length ) { + DOMList.prototype.parent = function () { + var r = new DOMList(); + if (this.nodes.length) { addNodeToList(r, this.nodes[0].parentNode); - } - return r; + } + return r; }; - /******************************************************************************/ + DOMList.prototype.filter = function (filter) { + let r = new DOMList(); + let filterFunc; - DOMList.prototype.filter = function(filter) { - var r = new DOMList(); - var filterFunc; - if ( typeof filter === 'string' ) { - filterFunc = function() { - return doesMatchSelector(this, filter); + if (typeof filter === 'string') { + filterFunc = function () { + return doesMatchSelector(this, filter); }; - } else if ( typeof filter === 'function' ) { + } else if (typeof filter === 'function') { filterFunc = filter; - } else { - filterFunc = function(){ - return true; + } else { + filterFunc = function (){ + return true; }; - } - var n = this.nodes.length; - var node; - for ( var i = 0; i < n; i++ ) { - node = this.nodes[i]; - if ( filterFunc.apply(node) ) { - addNodeToList(r, node); + } + + let n = this.nodes.length; + for (let i=0; i<n; ++i) { + let node = this.nodes[i]; + if (filterFunc.apply(node)) { + addNodeToList(r, node); } - } - return r; + } + return r; }; - /******************************************************************************/ - // TODO: Avoid possible duplicates - - DOMList.prototype.ancestors = function(selector) { - var r = new DOMList(); - var n = this.nodes.length; - var node; - for ( var i = 0; i < n; i++ ) { - node = this.nodes[i].parentNode; - while ( node ) { - if ( doesMatchSelector(node, selector) ) { + DOMList.prototype.ancestors = function (selector) { + let r = new DOMList(); + let n = this.nodes.length; + for (let i=0; i<n; ++i) { + let node = this.nodes[i].parentNode; + while (node) { + if (doesMatchSelector(node, selector)) { addNodeToList(r, node); - } - node = node.parentNode; + } + node = node.parentNode; } - } - return r; + } + return r; }; - /******************************************************************************/ - - DOMList.prototype.descendants = function(selector) { - var r = new DOMList(); - var n = this.nodes.length; - var nl; - for ( var i = 0; i < n; i++ ) { - nl = this.nodes[i].querySelectorAll(selector); + DOMList.prototype.descendants = function (selector) { + let r = new DOMList(); + let n = this.nodes.length; + for (let i=0; i<n; ++i) { + let nl = this.nodes[i].querySelectorAll(selector); addNodeListToList(r, nl); - } - return r; - }; - - /******************************************************************************/ - - DOMList.prototype.contents = function() { - var r = new DOMList(); - var cnodes, cn, ci; - var n = this.nodes.length; - for ( var i = 0; i < n; i++ ) { - cnodes = this.nodes[i].childNodes; - cn = cnodes.length; - for ( ci = 0; ci < cn; ci++ ) { - addNodeToList(r, cnodes.item(ci)); + } + return r; + }; + + DOMList.prototype.contents = function () { + let r = new DOMList(); + let n = this.nodes.length; + for (let i=0; i<n; ++i) { + let cnodes = this.nodes[i].childNodes; + let cn = cnodes.length; + for (let ci=0; ci<cn; ++ci) { + addNodeToList(r, cnodes.item(ci)); } - } - return r; + } + return r; }; - /******************************************************************************/ - DOMList.prototype.remove = function() { - var cn, p; - var i = this.nodes.length; - while ( i-- ) { - cn = this.nodes[i]; - if ( (p = cn.parentNode) ) { - p.removeChild(cn); + let i = this.nodes.length; + while (i--) { + let cn = this.nodes[i]; + if ((p = cn.parentNode)) { + p.removeChild(cn); } - } - return this; + } + return this; }; DOMList.prototype.detach = DOMList.prototype.remove; - /******************************************************************************/ - - DOMList.prototype.empty = function() { - var node; - var i = this.nodes.length; - while ( i-- ) { - node = this.nodes[i]; - while ( node.firstChild ) { - node.removeChild(node.firstChild); + DOMList.prototype.empty = function () { + let i = this.nodes.length; + while (i--) { + let node = this.nodes[i]; + while (node.firstChild) { + node.removeChild(node.firstChild); } - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.append = function(selector, context) { - var p = this.nodes[0]; - if ( p ) { - var c = DOMListFactory(selector, context); - var n = c.nodes.length; - for ( var i = 0; i < n; i++ ) { - p.appendChild(c.nodes[i]); + DOMList.prototype.append = function (selector, context) { + let p = this.nodes[0]; + if (p) { + let c = DOMListFactory(selector, context); + let n = c.nodes.length; + for (let i=0; i<n; ++i) { + p.appendChild(c.nodes[i]); } - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.prepend = function(selector, context) { - var p = this.nodes[0]; - if ( p ) { - var c = DOMListFactory(selector, context); - var i = c.nodes.length; - while ( i-- ) { - p.insertBefore(c.nodes[i], p.firstChild); + DOMList.prototype.prepend = function (selector, context) { + let p = this.nodes[0]; + if (p) { + let c = DOMListFactory(selector, context); + let i = c.nodes.length; + while (i--) { + p.insertBefore(c.nodes[i], p.firstChild); } - } - return this; + } + return this; }; - /******************************************************************************/ + DOMList.prototype.appendTo = function (selector, context) { + let p = (selector instanceof DOMListFactory) + ? selector + : DOMListFactory(selector, context); - DOMList.prototype.appendTo = function(selector, context) { - var p = selector instanceof DOMListFactory ? selector : DOMListFactory(selector, context); - var n = p.length; - for ( var i = 0; i < n; i++ ) { + let n = p.length; + for (let i=0; i<n; ++i) { p.nodes[0].appendChild(this.nodes[i]); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.insertAfter = function(selector, context) { - if ( this.nodes.length === 0 ) { + DOMList.prototype.insertAfter = function (selector, context) { + if (this.nodes.length === 0) { return this; - } - var p = this.nodes[0].parentNode; - if ( !p ) { + } + let p = this.nodes[0].parentNode; + if (!p) { return this; - } - var c = DOMListFactory(selector, context); - var n = c.nodes.length; - for ( var i = 0; i < n; i++ ) { + } + let c = DOMListFactory(selector, context); + let n = c.nodes.length; + for (let i=0; i<n; ++i) { p.appendChild(c.nodes[i]); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.insertBefore = function(selector, context) { - if ( this.nodes.length === 0 ) { + DOMList.prototype.insertBefore = function (selector, context) { + if (this.nodes.length === 0) { return this; - } - var referenceNodes = DOMListFactory(selector, context); - if ( referenceNodes.nodes.length === 0 ) { + } + let referenceNodes = DOMListFactory(selector, context); + if (referenceNodes.nodes.length === 0) { return this; - } - var referenceNode = referenceNodes.nodes[0]; - var parentNode = referenceNode.parentNode; - if ( !parentNode ) { + } + let referenceNode = referenceNodes.nodes[0]; + let parentNode = referenceNode.parentNode; + if (!parentNode) { return this; - } - var n = this.nodes.length; - for ( var i = 0; i < n; i++ ) { + } + let n = this.nodes.length; + for (let i=0; i<n; ++i) { parentNode.insertBefore(this.nodes[i], referenceNode); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.clone = function(notDeep) { - var r = new DOMList(); - var n = this.nodes.length; - for ( var i = 0; i < n; i++ ) { + DOMList.prototype.clone = function (notDeep) { + let r = new DOMList(); + let n = this.nodes.length; + for (let i=0; i<n; ++i) { addNodeToList(r, this.nodes[i].cloneNode(!notDeep)); - } - return r; + } + return r; }; - /******************************************************************************/ - - DOMList.prototype.nthOfType = function() { - if ( this.nodes.length === 0 ) { + DOMList.prototype.nthOfType = function () { + if (this.nodes.length === 0) { return 0; - } - var node = this.nodes[0]; - var tagName = node.tagName; - var i = 1; - while ( node.previousElementSibling !== null ) { + } + let node = this.nodes[0]; + let tagName = node.tagName; + let i = 1; + while (node.previousElementSibling !== null) { node = node.previousElementSibling; - if ( typeof node.tagName !== 'string' ) { - continue; + if (typeof node.tagName !== 'string') { + continue; } - if ( node.tagName !== tagName ) { - continue; + if (node.tagName !== tagName) { + continue; } i++; - } - return i; + } + return i; }; - /******************************************************************************/ - - DOMList.prototype.attr = function(attr, value) { - var i = this.nodes.length; - if ( value === undefined && typeof attr !== 'object' ) { + DOMList.prototype.attr = function (attr, value) { + let i = this.nodes.length; + if (value === undefined && typeof attr !== 'object') { return i ? this.nodes[0].getAttribute(attr) : undefined; - } - if ( typeof attr === 'object' ) { - var attrNames = Object.keys(attr); - var node, j, attrName; - while ( i-- ) { - node = this.nodes[i]; - j = attrNames.length; - while ( j-- ) { - attrName = attrNames[j]; - node.setAttribute(attrName, attr[attrName]); - } + } + if (typeof attr === 'object') { + let attrNames = Object.keys(attr); + while (i--) { + let node = this.nodes[i]; + let j = attrNames.length; + while (j--) { + node.setAttribute(attrNames[j], attr[attrName]); + } } - } else { - while ( i-- ) { - this.nodes[i].setAttribute(attr, value); + } else { + while (i--) { + this.nodes[i].setAttribute(attr, value); } - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.prop = function(prop, value) { - var i = this.nodes.length; - if ( value === undefined ) { + DOMList.prototype.prop = function (prop, value) { + let i = this.nodes.length; + if (value === undefined) { return i !== 0 ? this.nodes[0][prop] : undefined; - } - while ( i-- ) { + } + while (i--) { this.nodes[i][prop] = value; - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.css = function(prop, value) { - var i = this.nodes.length; - if ( value === undefined ) { + DOMList.prototype.css = function (prop, value) { + let i = this.nodes.length; + if (value === undefined) { return i ? this.nodes[0].style[prop] : undefined; - } - if ( value !== '' ) { - while ( i-- ) { - this.nodes[i].style.setProperty(prop, value); + } + if (value !== '') { + while (i--) { + this.nodes[i].style.setProperty(prop, value); } return this; - } - while ( i-- ) { + } + while (i--) { this.nodes[i].style.removeProperty(prop); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.val = function(value) { - return this.prop('value', value); + DOMList.prototype.val = function (value) { + return this.prop('value', value); }; - /******************************************************************************/ - - DOMList.prototype.html = function(html) { - var i = this.nodes.length; - if ( html === undefined ) { + DOMList.prototype.html = function (html) { + let i = this.nodes.length; + if (html === undefined) { return i ? this.nodes[0].innerHTML : ''; - } - while ( i-- ) { + } + while (i--) { vAPI.insertHTML(this.nodes[i], html); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.text = function(text) { - var i = this.nodes.length; - if ( text === undefined ) { + DOMList.prototype.text = function (text) { + let i = this.nodes.length; + if (text === undefined) { return i ? this.nodes[0].textContent : ''; - } - while ( i-- ) { + } + while (i--) { this.nodes[i].textContent = text; - } - return this; + } + return this; }; - /******************************************************************************/ - - var toggleClass = function(node, className, targetState) { - var tokenList = node.classList; - if ( tokenList instanceof DOMTokenList === false ) { + let toggleClass = function (node, className, targetState) { + let tokenList = node.classList; + if (tokenList instanceof DOMTokenList === false) { return; - } - var currentState = tokenList.contains(className); - var newState = targetState; - if ( newState === undefined ) { + } + let currentState = tokenList.contains(className); + let newState = targetState; + if (newState === undefined) { newState = !currentState; - } - if ( newState === currentState ) { + } + if (newState === currentState) { return; - } - tokenList.toggle(className, newState); + } + tokenList.toggle(className, newState); }; - /******************************************************************************/ - - DOMList.prototype.hasClass = function(className) { - if ( !this.nodes.length ) { + DOMList.prototype.hasClass = function (className) { + if (!this.nodes.length) { return false; - } - var tokenList = this.nodes[0].classList; - return tokenList instanceof DOMTokenList && - tokenList.contains(className); + } + let tokenList = this.nodes[0].classList; + return tokenList instanceof DOMTokenList + && tokenList.contains(className); }; + DOMList.prototype.hasClassName = DOMList.prototype.hasClass; - DOMList.prototype.addClass = function(className) { - return this.toggleClass(className, true); + DOMList.prototype.addClass = function (className) { + return this.toggleClass(className, true); }; - DOMList.prototype.removeClass = function(className) { - if ( className !== undefined ) { + DOMList.prototype.removeClass = function (className) { + if (className !== undefined) { return this.toggleClass(className, false); - } - var i = this.nodes.length; - while ( i-- ) { + } + let i = this.nodes.length; + while (i--) { this.nodes[i].className = ''; - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.toggleClass = function(className, targetState) { - if ( className.indexOf(' ') !== -1 ) { + DOMList.prototype.toggleClass = function (className, targetState) { + if (className.indexOf(' ') !== -1) { return this.toggleClasses(className, targetState); - } - var i = this.nodes.length; - while ( i-- ) { + } + let i = this.nodes.length; + while (i--) { toggleClass(this.nodes[i], className, targetState); - } - return this; - }; - - /******************************************************************************/ - - DOMList.prototype.toggleClasses = function(classNames, targetState) { - var tokens = classNames.split(/\s+/); - var i = this.nodes.length; - var node, j; - while ( i-- ) { - node = this.nodes[i]; - j = tokens.length; - while ( j-- ) { - toggleClass(node, tokens[j], targetState); + } + return this; + }; + + DOMList.prototype.toggleClasses = function (classNames, targetState) { + let tokens = classNames.split(/\s+/); + let i = this.nodes.length; + while (i--) { + let node = this.nodes[i]; + let j = tokens.length; + while (j--) { + toggleClass(node, tokens[j], targetState); } - } - return this; + } + return this; }; - /******************************************************************************/ + let listenerEntries = []; - var listenerEntries = []; - - var ListenerEntry = function(target, type, capture, callback) { - this.target = target; - this.type = type; - this.capture = capture; - this.callback = callback; - target.addEventListener(type, callback, capture); + let ListenerEntry = function (target, type, capture, callback) { + this.target = target; + this.type = type; + this.capture = capture; + this.callback = callback; + target.addEventListener(type, callback, capture); }; - ListenerEntry.prototype.dispose = function() { - this.target.removeEventListener(this.type, this.callback, this.capture); - this.target = null; - this.callback = null; + ListenerEntry.prototype.dispose = function () { + this.target.removeEventListener(this.type, this.callback, this.capture); + this.target = null; + this.callback = null; }; - /******************************************************************************/ - - var makeEventHandler = function(selector, callback) { - return function(event) { - var dispatcher = event.currentTarget; - if ( !dispatcher || typeof dispatcher.querySelectorAll !== 'function' ) { - return; + let makeEventHandler = function (selector, callback) { + return function (event) { + let dispatcher = event.currentTarget; + if (!dispatcher + || typeof dispatcher.querySelectorAll !== 'function') { + return; } - var receiver = event.target; - if ( nodeInNodeList(receiver, dispatcher.querySelectorAll(selector)) ) { - callback.call(receiver, event); + let receiver = event.target; + if (nodeInNodeList(receiver, dispatcher.querySelectorAll(selector))) { + callback.call(receiver, event); } - }; + }; }; - DOMList.prototype.on = function(etype, selector, callback) { - if ( typeof selector === 'function' ) { + DOMList.prototype.on = function (etype, selector, callback) { + if (typeof selector === 'function') { callback = selector; selector = undefined; - } else { + } else { callback = makeEventHandler(selector, callback); - } + } - var i = this.nodes.length; - while ( i-- ) { - listenerEntries.push(new ListenerEntry(this.nodes[i], etype, selector !== undefined, callback)); - } - return this; + let i = this.nodes.length; + while (i--) { + listenerEntries.push(new ListenerEntry(this.nodes[i], + etype, + selector !== undefined, + callback)); + } + return this; }; - /******************************************************************************/ - // TODO: Won't work for delegated handlers. Need to figure // what needs to be done. - - DOMList.prototype.off = function(evtype, callback) { - var i = this.nodes.length; - while ( i-- ) { + DOMList.prototype.off = function (evtype, callback) { + let i = this.nodes.length; + while (i--) { this.nodes[i].removeEventListener(evtype, callback); - } - return this; + } + return this; }; - /******************************************************************************/ - - DOMList.prototype.trigger = function(etype) { - var ev = new CustomEvent(etype); - var i = this.nodes.length; - while ( i-- ) { + DOMList.prototype.trigger = function (etype) { + let ev = new CustomEvent(etype); + let i = this.nodes.length; + while (i--) { this.nodes[i].dispatchEvent(ev); - } - return this; + } + return this; }; - /******************************************************************************/ - // Cleanup - - var onBeforeUnload = function() { - var entry; - while ( (entry = listenerEntries.pop()) ) { + let onBeforeUnload = function () { + let entry; + while ((entry = listenerEntries.pop())) { entry.dispose(); - } - window.removeEventListener('beforeunload', onBeforeUnload); + } + window.removeEventListener('beforeunload', onBeforeUnload); }; window.addEventListener('beforeunload', onBeforeUnload); - /******************************************************************************/ - return DOMListFactory; - })(); |