diff --git a/core/js/compatibility.js b/core/js/compatibility.js index 0cfeefab87..cc37949409 100644 --- a/core/js/compatibility.js +++ b/core/js/compatibility.js @@ -1,3 +1,107 @@ +/** + * implement Object.create for browsers without native support + */ +if (typeof Object.create !== 'function') { + Object.create = function (o) { + function F() {} + F.prototype = o; + return new F(); + }; +} + +/** + * implement Object.keys for browsers without native support + */ +if (typeof Object.keys !== 'function') { + Object.keys = function(o) { + if (o !== Object(o)) { + throw new TypeError('Object.keys called on a non-object'); + } + var k=[],p; + for (p in o) { + if (Object.prototype.hasOwnProperty.call(o,p)) { + k.push(p); + } + } + return k; + } +} + +/** + * implement Array.filter for browsers without native support + */ +if (!Array.prototype.filter) { + Array.prototype.filter = function(fun /*, thisp*/) { + var len = this.length >>> 0; + if (typeof fun !== "function"){ + throw new TypeError(); + } + + var res = []; + var thisp = arguments[1]; + for (var i = 0; i < len; i++) { + if (i in this) { + var val = this[i]; // in case fun mutates this + if (fun.call(thisp, val, i, this)) + res.push(val); + } + } + return res; + }; +} + +/** + * implement Array.indexOf for browsers without native support + */ +if (!Array.prototype.indexOf){ + Array.prototype.indexOf = function(elt /*, from*/) + { + var len = this.length; + + var from = Number(arguments[1]) || 0; + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + if (from < 0){ + from += len; + } + + for (; from < len; from++) + { + if (from in this && this[from] === elt){ + return from; + } + } + return -1; + }; +} + +/** + * implement Array.map for browsers without native support + */ +if (!Array.prototype.map){ + Array.prototype.map = function(fun /*, thisp */){ + "use strict"; + + if (this === void 0 || this === null){ + throw new TypeError(); + } + + var t = Object(this); + var len = t.length >>> 0; + if (typeof fun !== "function"){ + throw new TypeError(); + } + + var res = new Array(len); + var thisp = arguments[1]; + for (var i = 0; i < len; i++){ + if (i in t){ + res[i] = fun.call(thisp, t[i], i, t); + } + } + + return res; + }; +} //https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind if (!Function.prototype.bind) { diff --git a/core/js/js.js b/core/js/js.js index b237c6fcf5..e1fbd04a8d 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -439,52 +439,6 @@ if(typeof localStorage !=='undefined' && localStorage !== null){ }; } -/** - * implement Array.filter for browsers without native support - */ -if (!Array.prototype.filter) { - Array.prototype.filter = function(fun /*, thisp*/) { - var len = this.length >>> 0; - if (typeof fun !== "function"){ - throw new TypeError(); - } - - var res = []; - var thisp = arguments[1]; - for (var i = 0; i < len; i++) { - if (i in this) { - var val = this[i]; // in case fun mutates this - if (fun.call(thisp, val, i, this)) - res.push(val); - } - } - return res; - }; -} -/** - * implement Array.indexOf for browsers without native support - */ -if (!Array.prototype.indexOf){ - Array.prototype.indexOf = function(elt /*, from*/) - { - var len = this.length; - - var from = Number(arguments[1]) || 0; - from = (from < 0) ? Math.ceil(from) : Math.floor(from); - if (from < 0){ - from += len; - } - - for (; from < len; from++) - { - if (from in this && this[from] === elt){ - return from; - } - } - return -1; - }; -} - /** * check if the browser support svg images */ @@ -704,32 +658,6 @@ $(document).ready(function(){ }); }); -if (!Array.prototype.map){ - Array.prototype.map = function(fun /*, thisp */){ - "use strict"; - - if (this === void 0 || this === null){ - throw new TypeError(); - } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fun !== "function"){ - throw new TypeError(); - } - - var res = new Array(len); - var thisp = arguments[1]; - for (var i = 0; i < len; i++){ - if (i in t){ - res[i] = fun.call(thisp, t[i], i, t); - } - } - - return res; - }; -} - /** * Filter Jquery selector by attribute value */