(function() { "use strict"; function getQuery(s) { s = s === undefined ? window.location.search : s; if (s[0] === '?' ) { s = s.substring(1); } var query = {}; s.split('&').forEach(function(pair) { var parts = pair.split('=').map(decodeURIComponent); query[parts[0]] = parts[1]; }); return query; } function getSearch(url) { // yea I know this is not perfect but whatever var s = url.indexOf('?'); return s < 0 ? {} : getQuery(url.substring(s)); } const getFQUrl = (function() { const a = document.createElement("a"); return function getFQUrl(url) { a.href = url; return a.href; }; }()); function getHTML(url, callback) { var req = new XMLHttpRequest(); req.open("GET", url, true); req.addEventListener('load', function() { var success = req.status === 200 || req.status === 0; callback(success ? null : 'could not load: ' + url, req.responseText); }); req.addEventListener('timeout', function() { callback("timeout get: " + url); }); req.addEventListener('error', function() { callback("error getting: " + url); }); req.send(""); } function fixSourceLinks(url, source) { var srcRE = /(src=)"(.*?)"/g; var linkRE = /(href=)"(.*?")/g; var imageSrcRE = /((?:image|img)\.src = )"(.*?)"/g; var loaderLoadRE = /(loader\.load)\(('|")(.*?)('|")/g; var u = new URL(window.location.origin + url); var prefix = u.origin + dirname(u.pathname); function addPrefix(url) { return url.indexOf("://") < 0 ? (prefix + url) : url; } function makeLinkFQed(match, p1, url) { return p1 + '"' + addPrefix(url) + '"'; } source = source.replace(srcRE, makeLinkFQed); source = source.replace(linkRE, makeLinkFQed); source = source.replace(imageSrcRE, makeLinkFQed); source = source.replace(loaderLoadRE, function(match, fn, q1, url, q2) { return fn + '(' + q1 + addPrefix(url) + q2; }); return source; } var g = { html: '', }; var htmlParts = { js: { language: 'javascript', }, css: { language: 'css', }, html: { language: 'html', }, }; function forEachHTMLPart(fn) { Object.keys(htmlParts).forEach(function(name, ndx) { var info = htmlParts[name]; fn(info, ndx, name); }); } function getHTMLPart(re, obj, tag) { var part = ''; obj.html = obj.html.replace(re, function(p0, p1) { part = p1; return tag; }); return part.replace(/\s*/, ''); } function parseHTML(url, html) { html = fixSourceLinks(url, html); html = html.replace(/