blob: 9bc8d4ecb9fb33ba610e176b4585256ea3cf7d2f [file] [log] [blame]
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* ## What is polyfill?
* - https://remysharp.com/2010/10/08/what-is-a-polyfill
* - https://en.wikipedia.org/wiki/Polyfill
*
* Polyfill is a kind of regressive enhancement, a backport of native APIs in managed code.
*/
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = (function() {
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function(obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}
/*
* From https://github.com/itsa/polyfill/blob/master/old-lib/object.defineproperty.js
*/
if (!Object.defineProperty) {
Object.defineProperty = function(object, property, descriptor) {
'use strict';
object[property] = descriptor.value;
};
}
/*
* From https://github.com/itsa/polyfill/blob/master/old-lib/object.defineproperty.js
*/
if (!Object.defineProperties) {
Object.defineProperties = function(object, descriptors) {
'use strict';
var property;
for (property in descriptors) {
Object.defineProperty(object, property, descriptors[property]);
}
return object;
};
}
if (!Date.now) { // ECMA-262 5th edition, not in IE9-
Date.now = function now() {
"use strict";
return new Date().getTime();
};
}
if (!String.prototype.includes) { // ECMAScript 6 only.
String.prototype.includes = function() {'use strict';
return String.prototype.indexOf.apply(this, arguments) !== -1;
};
}
if (!String.prototype.startsWith) { // ECMAScript 6 only.
String.prototype.startsWith = function(searchString, position) {'use strict';
position = position || 0;
return this.indexOf(searchString, position) === position;
};
}
if (!String.prototype.endsWith) { // ECMAScript 6 only.
String.prototype.endsWith = function(searchString, position) {'use strict';
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.indexOf(searchString, position);
return lastIndex !== -1 && lastIndex === position;
};
}
// Production steps of ECMA-262, Edition 5, 15.4.4.21
// Reference: http://es5.github.io/#x15.4.4.21
if (!Array.prototype.reduce) { // IE9+
Array.prototype.reduce = function(callback, initialValue) {
'use strict';
if (this == null) {
throw new TypeError('Array.prototype.reduce called on null or undefined');
}
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
var t = Object(this), len = t.length >>> 0, k = 0, value;
if (arguments.length === 2) {
value = initialValue;
} else {
while (k < len && !(k in t)) {
k++;
}
if (k >= len) {
throw new TypeError('Reduce of empty array with no initial value');
}
value = t[k++];
}
for (; k < len; k++) {
if (k in t) {
value = callback(value, t[k], k, t);
}
}
return value;
};
}
window.performance = (window.performance || {
offset: Date.now(), // Timestamp of init.
now: function now(){ // ms elapsed since offset.
return Date.now() - this.offset;
}
});
(function (global) { // console NOOP for oldff
"use strict";
var CONSOLE = {
log: function() { /* NOOP */ },
info: function() { /* NOOP */ },
warn: function() { /* NOOP */ },
error: function() { /* NOOP */ }
};
global.console || (function(GlobalPrototype) {
GlobalPrototype.console = CONSOLE;
}(global.prototype));
}(typeof global !== 'undefined' ? global : this));
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
};
//# sourceURL=Utils\Polyfill.js