mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-23 20:18:00 +01:00
Remove JS polyfills
These are no longer needed on any browser we support.
This commit is contained in:
parent
691e7c0416
commit
1f69cee296
7 changed files with 0 additions and 455 deletions
|
@ -5,14 +5,6 @@
|
||||||
// the compiled file.
|
// the compiled file.
|
||||||
//
|
//
|
||||||
|
|
||||||
// Third-party code, polyfills
|
|
||||||
import './vendor/promise.polyfill';
|
|
||||||
import './vendor/fetch.polyfill';
|
|
||||||
import './vendor/closest.polyfill';
|
|
||||||
import './vendor/customevent.polyfill';
|
|
||||||
import './vendor/es6.polyfill';
|
|
||||||
import './vendor/values-entries.polyfill';
|
|
||||||
|
|
||||||
// Our code
|
// Our code
|
||||||
import './ujs';
|
import './ujs';
|
||||||
import './when-ready';
|
import './when-ready';
|
||||||
|
|
31
assets/js/vendor/closest.polyfill.js
vendored
31
assets/js/vendor/closest.polyfill.js
vendored
|
@ -1,31 +0,0 @@
|
||||||
// element-closest | CC0-1.0 | github.com/jonathantneal/closest
|
|
||||||
|
|
||||||
if (typeof Element.prototype.matches !== 'function') {
|
|
||||||
Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.webkitMatchesSelector || function matches(selector) {
|
|
||||||
var element = this;
|
|
||||||
var elements = (element.document || element.ownerDocument).querySelectorAll(selector);
|
|
||||||
var index = 0;
|
|
||||||
|
|
||||||
while (elements[index] && elements[index] !== element) {
|
|
||||||
++index;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Boolean(elements[index]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof Element.prototype.closest !== 'function') {
|
|
||||||
Element.prototype.closest = function closest(selector) {
|
|
||||||
var element = this;
|
|
||||||
|
|
||||||
while (element && element.nodeType === 1) {
|
|
||||||
if (element.matches(selector)) {
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
element = element.parentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
}
|
|
17
assets/js/vendor/customevent.polyfill.js
vendored
17
assets/js/vendor/customevent.polyfill.js
vendored
|
@ -1,17 +0,0 @@
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
if ( typeof window.CustomEvent === "function" ) return false;
|
|
||||||
|
|
||||||
function CustomEvent ( event, params ) {
|
|
||||||
params = params || { bubbles: false, cancelable: false, detail: undefined };
|
|
||||||
var evt = document.createEvent( 'CustomEvent' );
|
|
||||||
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
|
|
||||||
return evt;
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomEvent.prototype = window.Event.prototype;
|
|
||||||
|
|
||||||
window.CustomEvent = CustomEvent;
|
|
||||||
})();
|
|
104
assets/js/vendor/es6.polyfill.js
vendored
104
assets/js/vendor/es6.polyfill.js
vendored
|
@ -1,104 +0,0 @@
|
||||||
/**
|
|
||||||
* ES6 methods polyfill
|
|
||||||
* Sourced from their respective articles on MDN
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!Array.prototype.find) {
|
|
||||||
Array.prototype.find = function(predicate) {
|
|
||||||
'use strict';
|
|
||||||
if (this == null) {
|
|
||||||
throw new TypeError('Array.prototype.find called on null or undefined');
|
|
||||||
}
|
|
||||||
if (typeof predicate !== 'function') {
|
|
||||||
throw new TypeError('predicate must be a function');
|
|
||||||
}
|
|
||||||
var list = Object(this);
|
|
||||||
var length = list.length >>> 0;
|
|
||||||
var thisArg = arguments[1];
|
|
||||||
var value;
|
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
value = list[i];
|
|
||||||
if (predicate.call(thisArg, value, i, list)) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.prototype.findIndex) {
|
|
||||||
Array.prototype.findIndex = function(predicate) {
|
|
||||||
'use strict';
|
|
||||||
if (this == null) {
|
|
||||||
throw new TypeError('Array.prototype.findIndex called on null or undefined');
|
|
||||||
}
|
|
||||||
if (typeof predicate !== 'function') {
|
|
||||||
throw new TypeError('predicate must be a function');
|
|
||||||
}
|
|
||||||
var list = Object(this);
|
|
||||||
var length = list.length >>> 0;
|
|
||||||
var thisArg = arguments[1];
|
|
||||||
var value;
|
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
value = list[i];
|
|
||||||
if (predicate.call(thisArg, value, i, list)) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.prototype.includes) {
|
|
||||||
Array.prototype.includes = function(searchElement /*, fromIndex*/) {
|
|
||||||
'use strict';
|
|
||||||
if (this == null) {
|
|
||||||
throw new TypeError('Array.prototype.includes called on null or undefined');
|
|
||||||
}
|
|
||||||
|
|
||||||
var O = Object(this);
|
|
||||||
var len = parseInt(O.length, 10) || 0;
|
|
||||||
if (len === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var n = parseInt(arguments[1], 10) || 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)) { // NaN !== NaN
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!String.prototype.startsWith) {
|
|
||||||
String.prototype.startsWith = function(searchString, position){
|
|
||||||
position = position || 0;
|
|
||||||
return this.substr(position, searchString.length) === searchString;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!String.prototype.endsWith) {
|
|
||||||
String.prototype.endsWith = function(searchString, position) {
|
|
||||||
var subjectString = this.toString();
|
|
||||||
if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
|
|
||||||
position = subjectString.length;
|
|
||||||
}
|
|
||||||
position -= searchString.length;
|
|
||||||
var lastIndex = subjectString.lastIndexOf(searchString, position);
|
|
||||||
return lastIndex !== -1 && lastIndex === position;
|
|
||||||
};
|
|
||||||
}
|
|
53
assets/js/vendor/fetch.polyfill.js
vendored
53
assets/js/vendor/fetch.polyfill.js
vendored
|
@ -1,53 +0,0 @@
|
||||||
if (typeof window.fetch !== 'function') {
|
|
||||||
window.fetch = function fetch(url, options) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let request = new XMLHttpRequest();
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
request.open(options.method || 'GET', url);
|
|
||||||
|
|
||||||
for (const i in options.headers) {
|
|
||||||
request.setRequestHeader(i, options.headers[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
request.withCredentials = options.credentials === 'include' || options.credentials === 'same-origin';
|
|
||||||
request.onload = () => resolve(response());
|
|
||||||
request.onerror = reject;
|
|
||||||
|
|
||||||
// IE11 hack: don't send null/undefined
|
|
||||||
if (options.body != null)
|
|
||||||
request.send(options.body);
|
|
||||||
else
|
|
||||||
request.send();
|
|
||||||
|
|
||||||
function response() {
|
|
||||||
const keys = [], all = [], headers = {};
|
|
||||||
let header;
|
|
||||||
|
|
||||||
request.getAllResponseHeaders().replace(/^(.*?):\s*([\s\S]*?)$/gm, (m, key, value) => {
|
|
||||||
keys.push(key = key.toLowerCase());
|
|
||||||
all.push([key, value]);
|
|
||||||
header = headers[key];
|
|
||||||
headers[key] = header ? `${header},${value}` : value;
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
ok: (request.status/200|0) === 1,
|
|
||||||
status: request.status,
|
|
||||||
statusText: request.statusText,
|
|
||||||
url: request.responseURL,
|
|
||||||
clone: response,
|
|
||||||
text: () => Promise.resolve(request.responseText),
|
|
||||||
json: () => Promise.resolve(request.responseText).then(JSON.parse),
|
|
||||||
blob: () => Promise.resolve(new Blob([request.response])),
|
|
||||||
headers: {
|
|
||||||
keys: () => keys,
|
|
||||||
entries: () => all,
|
|
||||||
get: n => headers[n.toLowerCase()],
|
|
||||||
has: n => n.toLowerCase() in headers
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
225
assets/js/vendor/promise.polyfill.js
vendored
225
assets/js/vendor/promise.polyfill.js
vendored
|
@ -1,225 +0,0 @@
|
||||||
(function (root) {
|
|
||||||
if (root.Promise) return;
|
|
||||||
|
|
||||||
// Store setTimeout reference so promise-polyfill will be unaffected by
|
|
||||||
// other code modifying setTimeout (like sinon.useFakeTimers())
|
|
||||||
var setTimeoutFunc = setTimeout;
|
|
||||||
|
|
||||||
function noop() {
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use polyfill for setImmediate for performance gains
|
|
||||||
function asap(fn) {
|
|
||||||
setTimeoutFunc(fn, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
var onUnhandledRejection = function onUnhandledRejection(err) {
|
|
||||||
console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
|
|
||||||
};
|
|
||||||
|
|
||||||
// Polyfill for Function.prototype.bind
|
|
||||||
function bind(fn, thisArg) {
|
|
||||||
return function () {
|
|
||||||
fn.apply(thisArg, arguments);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var isArray = Array.isArray || function (value) {
|
|
||||||
return Object.prototype.toString.call(value) === '[object Array]';
|
|
||||||
};
|
|
||||||
|
|
||||||
function Promise(fn) {
|
|
||||||
if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');
|
|
||||||
if (typeof fn !== 'function') throw new TypeError('not a function');
|
|
||||||
this._state = 0;
|
|
||||||
this._handled = false;
|
|
||||||
this._value = undefined;
|
|
||||||
this._deferreds = [];
|
|
||||||
|
|
||||||
doResolve(fn, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
function handle(self, deferred) {
|
|
||||||
while (self._state === 3) {
|
|
||||||
self = self._value;
|
|
||||||
}
|
|
||||||
if (self._state === 0) {
|
|
||||||
self._deferreds.push(deferred);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self._handled = true;
|
|
||||||
asap(function () {
|
|
||||||
var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
|
|
||||||
if (cb === null) {
|
|
||||||
(self._state === 1 ? resolve : reject)(deferred.promise, self._value);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var ret;
|
|
||||||
try {
|
|
||||||
ret = cb(self._value);
|
|
||||||
} catch (e) {
|
|
||||||
reject(deferred.promise, e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
resolve(deferred.promise, ret);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function resolve(self, newValue) {
|
|
||||||
try {
|
|
||||||
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
|
|
||||||
if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');
|
|
||||||
if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
|
|
||||||
var then = newValue.then;
|
|
||||||
if (newValue instanceof Promise) {
|
|
||||||
self._state = 3;
|
|
||||||
self._value = newValue;
|
|
||||||
finale(self);
|
|
||||||
return;
|
|
||||||
} else if (typeof then === 'function') {
|
|
||||||
doResolve(bind(then, newValue), self);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
self._state = 1;
|
|
||||||
self._value = newValue;
|
|
||||||
finale(self);
|
|
||||||
} catch (e) {
|
|
||||||
reject(self, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function reject(self, newValue) {
|
|
||||||
self._state = 2;
|
|
||||||
self._value = newValue;
|
|
||||||
finale(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
function finale(self) {
|
|
||||||
if (self._state === 2 && self._deferreds.length === 0) {
|
|
||||||
setTimeout(function() {
|
|
||||||
if (!self._handled) {
|
|
||||||
onUnhandledRejection(self._value);
|
|
||||||
}
|
|
||||||
}, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0, len = self._deferreds.length; i < len; i++) {
|
|
||||||
handle(self, self._deferreds[i]);
|
|
||||||
}
|
|
||||||
self._deferreds = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function Handler(onFulfilled, onRejected, promise) {
|
|
||||||
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
|
|
||||||
this.onRejected = typeof onRejected === 'function' ? onRejected : null;
|
|
||||||
this.promise = promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Take a potentially misbehaving resolver function and make sure
|
|
||||||
* onFulfilled and onRejected are only called once.
|
|
||||||
*
|
|
||||||
* Makes no guarantees about asynchrony.
|
|
||||||
*/
|
|
||||||
function doResolve(fn, self) {
|
|
||||||
var done = false;
|
|
||||||
try {
|
|
||||||
fn(function (value) {
|
|
||||||
if (done) return;
|
|
||||||
done = true;
|
|
||||||
resolve(self, value);
|
|
||||||
}, function (reason) {
|
|
||||||
if (done) return;
|
|
||||||
done = true;
|
|
||||||
reject(self, reason);
|
|
||||||
});
|
|
||||||
} catch (ex) {
|
|
||||||
if (done) return;
|
|
||||||
done = true;
|
|
||||||
reject(self, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Promise.prototype['catch'] = function (onRejected) {
|
|
||||||
return this.then(null, onRejected);
|
|
||||||
};
|
|
||||||
|
|
||||||
Promise.prototype.then = function (onFulfilled, onRejected) {
|
|
||||||
var prom = new Promise(noop);
|
|
||||||
handle(this, new Handler(onFulfilled, onRejected, prom));
|
|
||||||
return prom;
|
|
||||||
};
|
|
||||||
|
|
||||||
Promise.all = function () {
|
|
||||||
var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
|
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
if (args.length === 0) return resolve([]);
|
|
||||||
var remaining = args.length;
|
|
||||||
|
|
||||||
function res(i, val) {
|
|
||||||
try {
|
|
||||||
if (val && (typeof val === 'object' || typeof val === 'function')) {
|
|
||||||
var then = val.then;
|
|
||||||
if (typeof then === 'function') {
|
|
||||||
then.call(val, function (val) {
|
|
||||||
res(i, val);
|
|
||||||
}, reject);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
args[i] = val;
|
|
||||||
if (--remaining === 0) {
|
|
||||||
resolve(args);
|
|
||||||
}
|
|
||||||
} catch (ex) {
|
|
||||||
reject(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < args.length; i++) {
|
|
||||||
res(i, args[i]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Promise.resolve = function (value) {
|
|
||||||
if (value && typeof value === 'object' && value.constructor === Promise) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise(function (resolve) {
|
|
||||||
resolve(value);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Promise.reject = function (value) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
reject(value);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
Promise.race = function (values) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
for (var i = 0, len = values.length; i < len; i++) {
|
|
||||||
values[i].then(resolve, reject);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the immediate function to execute callbacks
|
|
||||||
* @param fn {function} Function to execute
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Promise._setImmediateFn = function _setImmediateFn(fn) {
|
|
||||||
asap = fn;
|
|
||||||
};
|
|
||||||
|
|
||||||
Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
|
|
||||||
onUnhandledRejection = fn;
|
|
||||||
};
|
|
||||||
|
|
||||||
root.Promise = Promise;
|
|
||||||
})(window);
|
|
17
assets/js/vendor/values-entries.polyfill.js
vendored
17
assets/js/vendor/values-entries.polyfill.js
vendored
|
@ -1,17 +0,0 @@
|
||||||
// object-values | MIT | github.com/tc39/proposal-object-values-entries
|
|
||||||
|
|
||||||
const reduce = Function.bind.call(Function.call, Array.prototype.reduce);
|
|
||||||
const isEnumerable = Function.bind.call(Function.call, Object.prototype.propertyIsEnumerable);
|
|
||||||
const concat = Function.bind.call(Function.call, Array.prototype.concat);
|
|
||||||
|
|
||||||
if (!Object.values) {
|
|
||||||
Object.values = function values(O) {
|
|
||||||
return reduce(Object.keys(O), (v, k) => concat(v, typeof k === 'string' && isEnumerable(O, k) ? [O[k]] : []), []);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Object.entries) {
|
|
||||||
Object.entries = function entries(O) {
|
|
||||||
return reduce(Object.keys(O), (e, k) => concat(e, typeof k === 'string' && isEnumerable(O, k) ? [[k, O[k]]] : []), []);
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in a new issue