141 lines
3.7 KiB
JavaScript
141 lines
3.7 KiB
JavaScript
/*!
|
|
* KUTE.js Polyfill v2.1.1-alpha1 (http://thednp.github.io/kute.js)
|
|
* Copyright 2015-2021 © thednp
|
|
* Licensed under MIT (https://github.com/thednp/bootstrap.native/blob/master/LICENSE)
|
|
*/
|
|
"use strict";
|
|
if (!Array.from) {
|
|
Array.from = (function () {
|
|
var toStr = Object.prototype.toString;
|
|
var isCallable = function (fn) {
|
|
return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
|
|
};
|
|
var toInteger = function (value) {
|
|
var number = Number(value);
|
|
if (isNaN(number)) { return 0; }
|
|
if (number === 0 || !isFinite(number)) { return number; }
|
|
return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
|
|
};
|
|
var maxSafeInteger = Math.pow(2, 53) - 1;
|
|
var toLength = function (value) {
|
|
var len = toInteger(value);
|
|
return Math.min(Math.max(len, 0), maxSafeInteger);
|
|
};
|
|
|
|
return function from(arrayLike/*, mapFn, thisArg */) {
|
|
var C = this, items = Object(arrayLike);
|
|
if (arrayLike == null) {
|
|
throw new TypeError('Array.from requires an array-like object - not null or undefined');
|
|
}
|
|
var mapFn = arguments.length > 1 ? arguments[1] : void undefined, T;
|
|
if (typeof mapFn !== 'undefined') {
|
|
if (!isCallable(mapFn)) {
|
|
throw new TypeError('Array.from: when provided, the second argument must be a function');
|
|
}
|
|
|
|
if (arguments.length > 2) {
|
|
T = arguments[2];
|
|
}
|
|
}
|
|
var len = toLength(items.length);
|
|
var A = isCallable(C) ? Object(new C(len)) : new Array(len);
|
|
|
|
var k = 0;
|
|
var kValue;
|
|
while (k < len) {
|
|
kValue = items[k];
|
|
if (mapFn) {
|
|
A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
|
|
} else {
|
|
A[k] = kValue;
|
|
}
|
|
k += 1;
|
|
}
|
|
A.length = len;
|
|
return A;
|
|
}
|
|
}());
|
|
}
|
|
|
|
// https://github.com/jonathantneal/array-flat-polyfill/blob/master/src/polyfill-flat.js
|
|
|
|
if (!Array.prototype.flat) {
|
|
Object.defineProperty(Array.prototype, 'flat', {
|
|
configurable: true,
|
|
value: function flat () {
|
|
var depth = isNaN(arguments[0]) ? 1 : Number(arguments[0]);
|
|
|
|
return depth ? Array.prototype.reduce.call(this, function (acc, cur) {
|
|
if (Array.isArray(cur)) {
|
|
acc.push.apply(acc, flat.call(cur, depth - 1));
|
|
} else {
|
|
acc.push(cur);
|
|
}
|
|
|
|
return acc;
|
|
}, []) : Array.prototype.slice.call(this);
|
|
},
|
|
writable: true
|
|
});
|
|
}
|
|
|
|
if (!Array.prototype.includes) {
|
|
Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
|
|
var O = Object(this);
|
|
var len = parseInt(O.length) || 0;
|
|
if (len === 0) {
|
|
return false;
|
|
}
|
|
var n = parseInt(arguments[1]) || 0;
|
|
var k;
|
|
if (n >= 0) {
|
|
k = n;
|
|
} else {
|
|
k = len + n;
|
|
if (k < 0) {k = 0;}
|
|
}
|
|
var currentElement;
|
|
while (k < len) {
|
|
currentElement = O[k];
|
|
if (searchElement === currentElement ||
|
|
(searchElement !== searchElement && currentElement !== currentElement)) {
|
|
return true;
|
|
}
|
|
k++;
|
|
}
|
|
return false;
|
|
};
|
|
}
|
|
|
|
if (!String.prototype.includes) {
|
|
String.prototype.includes = function(search, start) {
|
|
if (search instanceof RegExp) {
|
|
throw TypeError('first argument must not be a RegExp');
|
|
}
|
|
if (start === undefined) { start = 0; }
|
|
return this.indexOf(search, start) !== -1;
|
|
};
|
|
}
|
|
|
|
if (!Number.isFinite) {
|
|
Number.isFinite = function(value) {
|
|
return typeof value === 'number'
|
|
&& isFinite(value);
|
|
};
|
|
}
|
|
|
|
if (!Number.isInteger) {
|
|
Number.isInteger = function(value) {
|
|
return typeof value === 'number'
|
|
&& isFinite(value)
|
|
&& Math.floor(value) === value;
|
|
};
|
|
}
|
|
|
|
if (!Number.isNaN) {
|
|
Number.isNaN = function(value) {
|
|
return typeof value === 'number'
|
|
&& value !== value;
|
|
};
|
|
}
|