66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
/* eslint-disable func-names, no-extend-native */
|
|
|
|
"use strict";
|
|
|
|
// fix iterating over NodeList in Chrome and Opera
|
|
NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
|
|
|
|
NodeList.prototype.querySelector = function (...args) {
|
|
for (let node of this) {
|
|
if (node.nodeType === 3) {
|
|
continue;
|
|
}
|
|
const result = node.querySelector(...args);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
|
|
NodeList.prototype.querySelectorAll = function (...args) {
|
|
let result = [];
|
|
for (let node of this) {
|
|
if (node.nodeType === 3) {
|
|
continue;
|
|
}
|
|
for (let childNode of node.querySelectorAll(...args)) {
|
|
result.push(childNode);
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
|
|
// non standard
|
|
Node.prototype.prependChild = function (child) {
|
|
if (this.firstChild) {
|
|
this.insertBefore(child, this.firstChild);
|
|
} else {
|
|
this.appendChild(child);
|
|
}
|
|
};
|
|
|
|
// non standard
|
|
Promise.prototype.always = function (onResolveOrReject) {
|
|
return this.then(onResolveOrReject, (reason) => {
|
|
onResolveOrReject(reason);
|
|
throw reason;
|
|
});
|
|
};
|
|
|
|
// non standard
|
|
Number.prototype.between = function (a, b, inclusive) {
|
|
const min = Math.min(a, b);
|
|
const max = Math.max(a, b);
|
|
return inclusive ? this >= min && this <= max : this > min && this < max;
|
|
};
|
|
|
|
// non standard
|
|
Promise.prototype.abort = () => {};
|
|
|
|
// non standard
|
|
Date.prototype.addDays = function (days) {
|
|
let dat = new Date(this.valueOf());
|
|
dat.setDate(dat.getDate() + days);
|
|
return dat;
|
|
};
|