{"ScriptPreparationCode":"\tfunction assignProps(proto, obj) {\r\n\t\tvar descriptors = Object.getOwnPropertyDescriptors(obj);\r\n\t\tfor (var desc in descriptors) {\r\n\t\t\tvar prop = descriptors[desc];\r\n\t\t\tprop.enumerable = false;\r\n\t\t\tObject.defineProperty(proto, desc, prop);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t(function StringPrototypeExtensions() {\r\n\t\tassignProps(String.prototype, {\r\n\t\t\tSubstrBefore: function substrBefore(sequence, bIncludeSequence) {\r\n\t\t\t\tvar idx = this.indexOf(sequence);\r\n\t\t\t\tif (idx \u003E= 0) {\r\n\t\t\t\t\tif (bIncludeSequence) { idx \u002B= sequence.length; }\r\n\t\t\t\t\tif (idx \u003C= this.length) { return this.substr(0, idx); }\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tSubstrAfter: function substrAfter(sequence, bIncludeSequence) {\r\n\t\t\t\tvar idx = this.indexOf(sequence);\r\n\t\t\t\tif (idx \u003E= 0) {\r\n\t\t\t\t\tif (!bIncludeSequence) { idx \u002B= sequence.length; }\r\n\t\t\t\t\tif (idx \u003C= this.length) { return this.substr(idx); }\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tSubstrBeforeLast: function substrBeforeLast(sequence, bIncludeSequence) {\r\n\t\t\t\tvar idx = this.lastIndexOf(sequence);\r\n\t\t\t\tif (idx \u003E= 0) {\r\n\t\t\t\t\tif (bIncludeSequence) { idx \u002B= sequence.length; }\r\n\t\t\t\t\tif (idx \u003C= this.length) { return this.substr(0, idx); }\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tSubstrAfterLast: function substrAfterLast(sequence, bIncludeSequence) {\r\n\t\t\t\tvar idx = this.lastIndexOf(sequence);\r\n\t\t\t\tif (idx \u003E= 0) {\r\n\t\t\t\t\tif (!bIncludeSequence) { idx \u002B= sequence.length; }\r\n\t\t\t\t\tif (idx \u003C= this.length) { return this.substr(idx); }\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t});\r\n\t}());\r\n\r\n\r\n\t(function RegexPrototypeExtensions() {\r\n\t\tassignProps(RegExp.prototype, {\r\n\t\t\tGetMatches: function GetMatches(str) {\r\n\t\t\t\tthis.lastIndex = 0;\r\n\t\t\t\tvar matches = [], match = null;\r\n\t\t\t\twhile (match = this.exec(str)) {\r\n\t\t\t\t\tmatches.push(match);\r\n\t\t\t\t}\r\n\t\t\t\treturn matches;\r\n\t\t\t},\r\n\t\t});\r\n\t}());\r\n\r\n\r\n\t(function DocumentExtensions() {\r\n\t\tassignProps(document, {\r\n\t\t\tCreateElementFromHTML: (function () {\r\n\t\t\t\tconst rgxTag = /^\\\u003C(\\w\u002B)(?:\\s\u002B|\\\u003E)/;\r\n\t\t\t\tconst rgxAttribs = /(\\S\u002B)=([\u0022\u0027])(.*?)(?:\\2)/g;\r\n\t\t\t\treturn function CreateElementFromHTML(html) {\r\n\t\t\t\t\thtml = html.trim();\r\n\t\t\t\t\tvar innerhtml = html.SubstrAfter(\u0027\u003E\u0027).SubstrBeforeLast(\u0027\u003C\u0027);\r\n\t\t\t\t\tvar strelem = html.SubstrBefore(\u0027\u003E\u0027, true);\r\n\t\t\t\t\tvar tag = rgxTag.exec(strelem)[1];\r\n\t\t\t\t\tvar attribs = rgxAttribs.GetMatches(strelem);\r\n\t\t\t\t\tvar elem = document.createElement(tag);\r\n\t\t\t\t\tfor (var i = 0, len = attribs.length; i \u003C len; i\u002B\u002B) {\r\n\t\t\t\t\t\tvar match = attribs[i];\r\n\t\t\t\t\t\telem.setAttribute(match[1], match[3]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.innerHTML = innerhtml;\r\n\t\t\t\t\treturn elem;\r\n\t\t\t\t};\r\n\t\t\t }()),\r\n\t\t});\r\n\t}());\r\n\r\n\r\n\t(function ElementExtensions() {\r\n\t\tassignProps(HTMLElement, {\r\n\t\t\tFrom: (function () {\r\n\t\t\t\tconst rgx = /(\\S\u002B)=([\u0022\u0027])(.*?)(?:\\2)|(\\w\u002B)/g;\r\n\t\t\t\treturn function CreateElementFromHTML(html) {\r\n\t\t\t\t\thtml = html.trim();\r\n\t\t\t\t\tvar idx = html.indexOf(\u0027\u003E\u0027) \u002B 1;\r\n\t\t\t\t\tvar elemStart = html.substr(0, idx);\r\n\t\t\t\t\thtml = html.substr(idx).SubstrBeforeLast(\u0027\u003C\u0027);\r\n\t\t\t\t\trgx.lastIndex = 0;\r\n\t\t\t\t\tvar elem = document.createElement(rgx.exec(elemStart)[4]);\r\n\t\t\t\t\tvar match; while ((match = rgx.exec(elemStart))) {\r\n\t\t\t\t\t\tif (match[1] === undefined) {\r\n\t\t\t\t\t\t\telem.setAttribute(match[4], \u0022\u0022);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\telem.setAttribute(match[1], match[3]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.innerHTML = html;\r\n\t\t\t\t\treturn elem;\r\n\t\t\t\t};\r\n\t\t\t}())\r\n\t\t});\r\n\t}());\r\n","TestCases":[{"Name":"Procedural Element creation","Code":"var arr = Array(2);\r\nvar el = document.createElement(\u0027link\u0027);\r\nel.id=\u0027ZInject_CSS_zinject_regexr\u0027;\r\nel.type=\u0027text/css\u0027;\r\nel.rel=\u0027stylesheet\u0027;\r\nel.dataset.srcprop=\u0027href\u0027;\r\nel.dataset.src=\u0027standalone/reddit/zinject.reddit.css\u0027;\r\nel.async = true;\r\nel.defer = true;\r\narr[0] = el;\r\nel = document.createElement(\u0027div\u0027);\r\nel.id = \u0027somevalue\u0027;\r\nel.className = \u0027sidebar\u0027;\r\nel.innerHTML = \u0060\u003Cdiv class=\u0027sb-handle\u0027\u003E\u003C/div\u003E\u003Cdiv class=\u0027sb-track\u0027\u003E\u003C/div\u003E\u0060;\r\narr[1] = el;\r\nreturn arr;","IsDeferred":false},{"Name":"jQuery Element creation","Code":"var arr = Array(2);\r\narr[0] = $(\u0060\u003Clink id=\u0022zinject_reddit_css\u0022 type=\u0022text/css\u0022 rel=\u0022stylesheet\u0022 async=\u0022\u0022 defer=\u0022\u0022 data-srcprop=\u0022href\u0022 data-src=\u0022standalone/reddit/zinject.reddit.css\u0022\u003E\u0060);\r\narr[1] = $(\u0060\u003Cdiv id=\u0027somevalue\u0027 class=\u0027sidebar\u0027\u003E\u003Cdiv class=\u0027sb-handle\u0027\u003E\u003C/div\u003E\u003Cdiv class=\u0027sb-track\u0027\u003E\u003C/div\u003E\u003C/div\u003E\u0060);\r\nreturn arr;\r\n","IsDeferred":false},{"Name":"Custom Method: document.CreateElementFromHTML()","Code":"var arr = Array(2);\r\narr[0] = document.CreateElementFromHTML(\u0060\u003Clink id=\u0022zinject_reddit_css\u0022 type=\u0022text/css\u0022 rel=\u0022stylesheet\u0022 async=\u0022\u0022 defer=\u0022\u0022 data-srcprop=\u0022href\u0022 data-src=\u0022standalone/reddit/zinject.reddit.css\u0022\u003E\u0060);\r\narr[1] = document.CreateElementFromHTML(\u0060\u003Cdiv id=\u0027somevalue\u0027 class=\u0027sidebar\u0027\u003E\u003Cdiv class=\u0027sb-handle\u0027\u003E\u003C/div\u003E\u003Cdiv class=\u0027sb-track\u0027\u003E\u003C/div\u003E\u003C/div\u003E\u0060);\r\nreturn arr;\r\n\r\n","IsDeferred":false},{"Name":"Custom Method: HTMLElement.From()","Code":"var arr = Array(2);\r\narr[0] = HTMLElement.From(\u0060\u003Clink id=\u0022zinject_reddit_css\u0022 type=\u0022text/css\u0022 rel=\u0022stylesheet\u0022 async defer data-srcprop=\u0022href\u0022 data-src=\u0022standalone/reddit/zinject.reddit.css\u0022\u003E\u0060);\r\narr[1] = HTMLElement.From(\u0060\u003Cdiv id=\u0027somevalue\u0027 class=\u0027sidebar\u0027\u003E\u003Cdiv class=\u0027sb-handle\u0027\u003E\u003C/div\u003E\u003Cdiv class=\u0027sb-track\u0027\u003E\u003C/div\u003E\u003C/div\u003E\u0060);\r\nreturn arr;\r\n","IsDeferred":false}]}