'use strict'; window.addEventListener("paste", e => { let data = e.clipboardData; let html = data.getData("text/html"); let t = e.target; if (t.nodeType !== 1) t = t.parentElement; try { let node = t.cloneNode(); node.innerHTML = html; if (sanitizeExtras(node)) { let sanitized = node.innerHTML; setTimeout(function() { try { if (sanitizeExtras(t)) { console.log(`[NoScript] Sanitized\n\n${html}\nto\n\n${t.innerHTML}\n`, t); } } catch(ex) { console.log(ex); }}, 0); } } catch(ex) { console.log(ex); } function removeAttribute(node, name, value = node.getAttribute(name)) { node.setAttribute(`data-noscript-removed-${name}`, value); node.removeAttribute(name); } function sanitizeExtras(el) { let ret = false; // remove attributes from forms for (let f of el.getElementsByTagName("form")) { for (let a of f.attributes) { f.removeAttribute(a.name); ret = true; } } let urlAttributes = ['href', 'to', 'from', 'by', 'values']; let selector = urlAttributes.map(a => `[${a}]`).join(','); for (let node of el.querySelectorAll(selector)) { for (let name of urlAttributes) { let value = node.getAttribute(name); if (/^\W*(?:(?:javascript|data):|https?:[\s\S]+[[(<])/i.test(unescape(value))) { node.setAttribute(`data-noscript-removed-${name}`, value); node.removeAttribute(name); ret = true; } } } return ret; } }, true);