(function() { /** * Check and set a global guard variable. * If this content script is injected into the same page again, * it will do nothing next time. */ if (window.hasRun) { console.log("already run"); return; } window.hasRun = true; var xml_parser = new XMLSerializer(); var html_parser = new DOMParser(); function xhrdoc(url, type, cb) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'document'; xhr.overrideMimeType('text/' + type); xhr.onload = function () { if (xhr.readyState === xhr.DONE) { if (xhr.status === 200) { var resp = (type=="xml") ? xhr.responseXML : xhr.response; cb(resp); } } }; xhr.send(null); } function applyxsl(xmlin, xsl, node, doc=document) { var xsltProcessor = new XSLTProcessor(); xsltProcessor.importStylesheet(xsl); var fragment = xsltProcessor.transformToFragment(xmlin, doc); node.appendChild(fragment); } function getlang() { if (navigator.languages && navigator.languages[0]) return navigator.languages[0]; else if (navigator.language) return navigator.language; else return null; } function formatsubtitle() { try { var feed_desc = document.getElementById("feedSubtitleRaw"); var html_desc = html_parser.parseFromString('

'+feed_desc.innerText+'

', "text/html"); var xml_desc = xml_parser.serializeToString(html_desc.body.firstChild); feed_desc.insertAdjacentHTML('afterend', xml_desc); feed_desc.parentNode.removeChild(feed_desc); } catch (e) { console.error(e); console.log(feed_desc.innerText); } } function formatdescriptions(el=document) { // unescapes descriptions to html then to xml var tohtml = el.getElementsByClassName("feedRawContent"); for (var i = 0; i'+tohtml[i].innerText+'', "text/html"); var xml_desc = xml_parser.serializeToString(html_desc.body.firstChild); tohtml[i].insertAdjacentHTML('afterend', xml_desc); tohtml[i].setAttribute("todel", 1); } catch (e) { console.error(e); console.log(tohtml[i].innerHTML); } } } el.querySelectorAll('.feedRawContent').forEach(function(a){ if (a.getAttribute("todel") == "1") { a.remove(); } else if (a.getAttribute("desctype") == "xhtml") { a.classList.add("feedEntryContent"); a.classList.remove("feedRawContent"); } }) } function removeemptyenclosures(el=document) { var encs = el.getElementsByClassName("enclosures"); for (var i = 0; i 0) i = Math.floor( Math.log(size) / Math.log(1024) ); return ( size / Math.pow(1024, i) ).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; }; var encsz = el.getElementsByClassName("enclosureSize"); for (var i = 0; i= 0) { var tmp = document.createElement("span"); try { tmp.innerHTML = et[i].innerText; et[i].innerText = tmp.textContent; } catch (e) { console.error(e); console.log(et[i].innerText); } } } } function formatdates(el=document) { var lang = getlang(); if (!lang) return; var opts = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; var ed = el.getElementsByClassName("lastUpdated"); for (var i = 0; i 0) } } if ( rootName == "rss" || rootName == "channel" // rss2 || rootName == "feed" // atom || isRSS1 ) { return rootNode; } return null; } function main(feedNode) { var feed_url = window.location.href; var preview = makepreviewhtml(); xhrdoc(chrome.extension.getURL("rss.xsl"), "xml", function(xsl_xml) { applyxsl(feedNode, xsl_xml, preview.getElementById("feedBody"), preview); // replace the content with the preview document document.replaceChild(document.importNode(preview.documentElement, true), document.documentElement); var t0 = performance.now(); formatsubtitle(); formatdescriptions(); removeemptyenclosures(); formatfilenames(); formatfilesizes(); formattitles(); formatdates(); extensionimages(); var t1 = performance.now(); //console.log("exec in: " + (t1 - t0) + "ms"); document.title = document.getElementById("feedTitleText").innerText; }); } var feedRoot = detect(); if (feedRoot) main(feedRoot); })();