(function() { function injectScript(src, where) { var elm = document.createElement('script'); elm.src = src; document[where || 'head'].appendChild(elm); } function generateScriptDataUrl(script) { var b64 = 'data:text/javascript'; // base64 may be smaller, but does not handle unicode characters // attempt base64 first, fall back to escaped text try { b64 += (';base64,' + btoa(script)); } catch (e) { b64 += (';charset=utf-8,' + encodeURIComponent(script)); } return b64; } function addEnabledBadge() { var parser = new DOMParser(); var warningSVGString = ''; var svg = parser.parseFromString(warningSVGString, "image/svg+xml").children[0]; var div = document.createElement("div"); var title = document.createElement("div"); Object.assign(div.style, { all: "unset", position: "absolute", top: 20 + "px", right: 20 + "px", zIndex: 100000 }); Object.assign(svg.style, { all: "unset", width: 20 + "px", height: 20 + "px", display: "block", marginLeft: "auto", marginRight: 0, marginBottom: 10 + "px" }); Object.assign(title.style, { all: "unset", display: "none", background: "white", padding: 5 + "px" }); title.innerText = chrome.i18n.getMessage("enabled_badge_title"); div.appendChild(svg); div.appendChild(title); div.addEventListener("mouseover", function() { title.style.display = "block"; }); div.addEventListener("mouseout", function() { title.style.display = "none"; }); document.body.appendChild(div); } var website = location.protocol + '//' + location.host; chrome.storage.sync.get(website, function(obj) { var customjs = obj[website]; if (customjs && customjs.config.enable) { // Script if (customjs.source) { setTimeout(function() { addEnabledBadge(); injectScript(generateScriptDataUrl(customjs.source), 'body'); }, 250); } } }); chrome.storage.sync.get("global", function(items) { if (items && Object.keys(items).length !== 0) { var global = items.global; if (global.enabled) { setTimeout(function() { addEnabledBadge(); injectScript(generateScriptDataUrl(global.js), 'body'); }, 250); } } }); })();