Last active
August 11, 2022 06:52
-
-
Save serdaraglamis/4d30196969f34e36b40cf99848790c33 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// File created by serdar.aglamis at 22 November 2017 | |
// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md | |
/******************************** | |
| | | |
| Dom Element Remove Polyfill | | |
| | | |
********************************/ | |
(function (arr) { | |
arr.forEach(function (item) { | |
if (item.hasOwnProperty('remove')) { | |
return; | |
} | |
Object.defineProperty(item, 'remove', { | |
configurable: true, | |
enumerable: true, | |
writable: true, | |
value: function remove() { | |
if (this.parentNode !== null) | |
this.parentNode.removeChild(this); | |
} | |
}); | |
}); | |
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); | |
/******************************** | |
| | | |
| Array Find Polyfill | | |
| | | |
********************************/ | |
if (!Array.prototype.find) { | |
Object.defineProperty(Array.prototype, 'find', { | |
value: function(predicate) { | |
// 1. Let O be ? ToObject(this value). | |
if (this == null) { | |
throw new TypeError('"this" is null or not defined'); | |
} | |
var o = Object(this); | |
// 2. Let len be ? ToLength(? Get(O, "length")). | |
var len = o.length >>> 0; | |
// 3. If IsCallable(predicate) is false, throw a TypeError exception. | |
if (typeof predicate !== 'function') { | |
throw new TypeError('predicate must be a function'); | |
} | |
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined. | |
var thisArg = arguments[1]; | |
// 5. Let k be 0. | |
var k = 0; | |
// 6. Repeat, while k < len | |
while (k < len) { | |
// a. Let Pk be ! ToString(k). | |
// b. Let kValue be ? Get(O, Pk). | |
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). | |
// d. If testResult is true, return kValue. | |
var kValue = o[k]; | |
if (predicate.call(thisArg, kValue, k, o)) { | |
return kValue; | |
} | |
// e. Increase k by 1. | |
k++; | |
} | |
// 7. Return undefined. | |
return undefined; | |
} | |
}); | |
} | |
/******************************** | |
| | | |
| String Includes Polyfill | | |
| | | |
********************************/ | |
if (!String.prototype.includes) { | |
String.prototype.includes = function(search, start) { | |
'use strict'; | |
if (typeof start !== 'number') { | |
start = 0; | |
} | |
if (start + search.length > this.length) { | |
return false; | |
} else { | |
return this.indexOf(search, start) !== -1; | |
} | |
}; | |
} | |
/******************************** | |
| | | |
| WeakMap Polyfill | | |
| | | |
********************************/ | |
if(typeof Window === 'undefined') { | |
Window = window; | |
} | |
if (typeof WeakMap === 'undefined') { | |
(function() { | |
var defineProperty = Object.defineProperty; | |
var counter = Date.now() % 1e9; | |
var WeakMap = function() { | |
this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__'); | |
}; | |
WeakMap.prototype = { | |
set: function(key, value) { | |
var entry = key[this.name]; | |
if (entry && entry[0] === key) | |
entry[1] = value; | |
else | |
defineProperty(key, this.name, {value: [key, value], writable: true}); | |
return this; | |
}, | |
get: function(key) { | |
var entry; | |
return (entry = key[this.name]) && entry[0] === key ? | |
entry[1] : undefined; | |
}, | |
delete: function(key) { | |
var entry = key[this.name]; | |
if (!entry) return false; | |
var hasValue = entry[0] === key; | |
entry[0] = entry[1] = undefined; | |
return hasValue; | |
}, | |
has: function(key) { | |
var entry = key[this.name]; | |
if (!entry) return false; | |
return entry[0] === key; | |
} | |
}; | |
window.WeakMap = WeakMap; | |
})(); | |
} | |
/***************************************** | |
| | | |
| URLSearchParams Polyfill | | |
| | | |
*****************************************/ | |
/*! (C) Andrea Giammarchi - Mit Style License */ | |
var URLSearchParams=URLSearchParams||function(){"use strict";function URLSearchParams(query){var index,key,value,pairs,i,length,dict=Object.create(null);this[secret]=dict;if(!query)return;if(typeof query==="string"){if(query.charAt(0)==="?"){query=query.slice(1)}for(pairs=query.split("&"),i=0,length=pairs.length;i<length;i++){value=pairs[i];index=value.indexOf("=");if(-1<index){appendTo(dict,decode(value.slice(0,index)),decode(value.slice(index+1)))}else if(value.length){appendTo(dict,decode(value),"")}}}else{if(isArray(query)){for(i=0,length=query.length;i<length;i++){value=query[i];appendTo(dict,value[0],value[1])}}else{for(key in query){appendTo(dict,key,query[key])}}}}var isArray=Array.isArray,URLSearchParamsProto=URLSearchParams.prototype,find=/[!'\(\)~]|%20|%00/g,plus=/\+/g,replace={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},replacer=function(match){return replace[match]},secret="__URLSearchParams__:"+Math.random();function appendTo(dict,name,value){if(name in dict){dict[name].push(""+value)}else{dict[name]=isArray(value)?value:[""+value]}}function decode(str){return decodeURIComponent(str.replace(plus," "))}function encode(str){return encodeURIComponent(str).replace(find,replacer)}URLSearchParamsProto.append=function append(name,value){appendTo(this[secret],name,value)};URLSearchParamsProto["delete"]=function del(name){delete this[secret][name]};URLSearchParamsProto.get=function get(name){var dict=this[secret];return name in dict?dict[name][0]:null};URLSearchParamsProto.getAll=function getAll(name){var dict=this[secret];return name in dict?dict[name].slice(0):[]};URLSearchParamsProto.has=function has(name){return name in this[secret]};URLSearchParamsProto.set=function set(name,value){this[secret][name]=[""+value]};URLSearchParamsProto.forEach=function forEach(callback,thisArg){var dict=this[secret];Object.getOwnPropertyNames(dict).forEach(function(name){dict[name].forEach(function(value){callback.call(thisArg,value,name,this)},this)},this)};URLSearchParamsProto.toJSON=function toJSON(){return{}};URLSearchParamsProto.toString=function toString(){var dict=this[secret],query=[],i,key,name,value;for(key in dict){name=encode(key);for(i=0,value=dict[key];i<value.length;i++){query.push(name+"="+encode(value[i]))}}return query.join("&")};var dP=Object.defineProperty,gOPD=Object.getOwnPropertyDescriptor,createSearchParamsPollute=function(search){function append(name,value){URLSearchParamsProto.append.call(this,name,value);name=this.toString();search.set.call(this._usp,name?"?"+name:"")}function del(name){URLSearchParamsProto["delete"].call(this,name);name=this.toString();search.set.call(this._usp,name?"?"+name:"")}function set(name,value){URLSearchParamsProto.set.call(this,name,value);name=this.toString();search.set.call(this._usp,name?"?"+name:"")}return function(sp,value){sp.append=append;sp["delete"]=del;sp.set=set;return dP(sp,"_usp",{configurable:true,writable:true,value:value})}},createSearchParamsCreate=function(polluteSearchParams){return function(obj,sp){dP(obj,"_searchParams",{configurable:true,writable:true,value:polluteSearchParams(sp,obj)});return sp}},updateSearchParams=function(sp){var append=sp.append;sp.append=URLSearchParamsProto.append;URLSearchParams.call(sp,sp._usp.search.slice(1));sp.append=append},verifySearchParams=function(obj,Class){if(!(obj instanceof Class))throw new TypeError("'searchParams' accessed on an object that "+"does not implement interface "+Class.name)},upgradeClass=function(Class){var ClassProto=Class.prototype,searchParams=gOPD(ClassProto,"searchParams"),href=gOPD(ClassProto,"href"),search=gOPD(ClassProto,"search"),createSearchParams;if(!searchParams&&search&&search.set){createSearchParams=createSearchParamsCreate(createSearchParamsPollute(search));Object.defineProperties(ClassProto,{href:{get:function(){return href.get.call(this)},set:function(value){var sp=this._searchParams;href.set.call(this,value);if(sp)updateSearchParams(sp)}},search:{get:function(){return search.get.call(this)},set:function(value){var sp=this._searchParams;search.set.call(this,value);if(sp)updateSearchParams(sp)}},searchParams:{get:function(){verifySearchParams(this,Class);return this._searchParams||createSearchParams(this,new URLSearchParams(this.search.slice(1)))},set:function(sp){verifySearchParams(this,Class);createSearchParams(this,sp)}}})}};upgradeClass(HTMLAnchorElement);if(/^function|object$/.test(typeof URL)&&URL.prototype)upgradeClass(URL);return URLSearchParams}();(function(URLSearchParamsProto){var iterable=function(){try{return!!Symbol.iterator}catch(error){return false}}();if(!("forEach"in URLSearchParamsProto)){URLSearchParamsProto.forEach=function forEach(callback,thisArg){var names=Object.create(null);this.toString().replace(/=[\s\S]*?(?:&|$)/g,"=").split("=").forEach(function(name){if(!name.length||name in names)return;(names[name]=this.getAll(name)).forEach(function(value){callback.call(thisArg,value,name,this)},this)},this)}}if(!("keys"in URLSearchParamsProto)){URLSearchParamsProto.keys=function keys(){var items=[];this.forEach(function(value,name){items.push(name)});var iterator={next:function(){var value=items.shift();return{done:value===undefined,value:value}}};if(iterable){iterator[Symbol.iterator]=function(){return iterator}}return iterator}}if(!("values"in URLSearchParamsProto)){URLSearchParamsProto.values=function values(){var items=[];this.forEach(function(value){items.push(value)});var iterator={next:function(){var value=items.shift();return{done:value===undefined,value:value}}};if(iterable){iterator[Symbol.iterator]=function(){return iterator}}return iterator}}if(!("entries"in URLSearchParamsProto)){URLSearchParamsProto.entries=function entries(){var items=[];this.forEach(function(value,name){items.push([name,value])});var iterator={next:function(){var value=items.shift();return{done:value===undefined,value:value}}};if(iterable){iterator[Symbol.iterator]=function(){return iterator}}return iterator}}if(iterable&&!(Symbol.iterator in URLSearchParamsProto)){URLSearchParamsProto[Symbol.iterator]=URLSearchParamsProto.entries}if(!("sort"in URLSearchParamsProto)){URLSearchParamsProto.sort=function sort(){var entries=this.entries(),entry=entries.next(),done=entry.done,keys=[],values=Object.create(null),i,key,value;while(!done){value=entry.value;key=value[0];keys.push(key);if(!(key in values)){values[key]=[]}values[key].push(value[1]);entry=entries.next();done=entry.done}keys.sort();for(i=0;i<keys.length;i++){this["delete"](keys[i])}for(i=0;i<keys.length;i++){key=keys[i];this.append(key,values[key].shift())}}}})(URLSearchParams.prototype); | |
/*************************************** | |
| | | |
| Array ForEach Polyfill | | |
| | | |
***************************************/ | |
// Production steps of ECMA-262, Edition 5, 15.4.4.18 | |
// Reference: http://es5.github.io/#x15.4.4.18 | |
if (!Array.prototype.forEach) { | |
Array.prototype.forEach = function(callback/*, thisArg*/) { | |
var T, k; | |
if (this == null) { | |
throw new TypeError('this is null or not defined'); | |
} | |
// 1. Let O be the result of calling toObject() passing the | |
// |this| value as the argument. | |
var O = Object(this); | |
// 2. Let lenValue be the result of calling the Get() internal | |
// method of O with the argument "length". | |
// 3. Let len be toUint32(lenValue). | |
var len = O.length >>> 0; | |
// 4. If isCallable(callback) is false, throw a TypeError exception. | |
// See: http://es5.github.com/#x9.11 | |
if (typeof callback !== 'function') { | |
throw new TypeError(callback + ' is not a function'); | |
} | |
// 5. If thisArg was supplied, let T be thisArg; else let | |
// T be undefined. | |
if (arguments.length > 1) { | |
T = arguments[1]; | |
} | |
// 6. Let k be 0. | |
k = 0; | |
// 7. Repeat while k < len. | |
while (k < len) { | |
var kValue; | |
// a. Let Pk be ToString(k). | |
// This is implicit for LHS operands of the in operator. | |
// b. Let kPresent be the result of calling the HasProperty | |
// internal method of O with argument Pk. | |
// This step can be combined with c. | |
// c. If kPresent is true, then | |
if (k in O) { | |
// i. Let kValue be the result of calling the Get internal | |
// method of O with argument Pk. | |
kValue = O[k]; | |
// ii. Call the Call internal method of callback with T as | |
// the this value and argument list containing kValue, k, and O. | |
callback.call(T, kValue, k, O); | |
} | |
// d. Increase k by 1. | |
k++; | |
} | |
// 8. return undefined. | |
}; | |
} | |
/*************************************** | |
| | | |
| NODE ForEach Polyfill | | |
| | | |
***************************************/ | |
if (window.NodeList && !NodeList.prototype.forEach) { | |
NodeList.prototype.forEach = function (callback, thisArg) { | |
thisArg = thisArg || window; | |
for (var i = 0; i < this.length; i++) { | |
callback.call(thisArg, this[i], i, this); | |
} | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment