mirror of
https://github.com/aureliendavid/rsspreview.git
synced 2025-08-27 13:55:35 +00:00
Format using Prettier
This commit is contained in:
parent
9074531a07
commit
be95517491
@ -3,8 +3,11 @@ function detectFeed(event) {
|
|||||||
let isfeed = false;
|
let isfeed = false;
|
||||||
|
|
||||||
for (let header of event.responseHeaders) {
|
for (let header of event.responseHeaders) {
|
||||||
if (header.name.toLowerCase() == "content-type") {
|
if (header.name.toLowerCase() == 'content-type') {
|
||||||
header.value = header.value.replace(/application\/(rss|atom)\+xml/,'text/xml');
|
header.value = header.value.replace(
|
||||||
|
/application\/(rss|atom)\+xml/,
|
||||||
|
'text/xml'
|
||||||
|
);
|
||||||
isfeed = true;
|
isfeed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -12,7 +15,7 @@ function detectFeed(event) {
|
|||||||
|
|
||||||
if (isfeed) {
|
if (isfeed) {
|
||||||
for (let i = 0; i < event.responseHeaders.length; i++) {
|
for (let i = 0; i < event.responseHeaders.length; i++) {
|
||||||
if (event.responseHeaders[i].name.toLowerCase() == "cache-control") {
|
if (event.responseHeaders[i].name.toLowerCase() == 'cache-control') {
|
||||||
event.responseHeaders.splice(i, 1);
|
event.responseHeaders.splice(i, 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -20,7 +23,10 @@ function detectFeed(event) {
|
|||||||
|
|
||||||
// don't cache requests we modified
|
// don't cache requests we modified
|
||||||
// otherwise on reload the content-type won't be modified again
|
// otherwise on reload the content-type won't be modified again
|
||||||
event.responseHeaders.push({ name : "Cache-Control", value : "no-cache, no-store, must-revalidate" });
|
event.responseHeaders.push({
|
||||||
|
name: 'Cache-Control',
|
||||||
|
value: 'no-cache, no-store, must-revalidate',
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return { responseHeaders: event.responseHeaders };
|
return { responseHeaders: event.responseHeaders };
|
||||||
@ -30,6 +36,6 @@ const browser = window.browser || window.chrome;
|
|||||||
|
|
||||||
browser.webRequest.onHeadersReceived.addListener(
|
browser.webRequest.onHeadersReceived.addListener(
|
||||||
detectFeed,
|
detectFeed,
|
||||||
{ urls: ["<all_urls>"], types: ["main_frame"] },
|
{ urls: ['<all_urls>'], types: ['main_frame'] },
|
||||||
["blocking", "responseHeaders"]
|
['blocking', 'responseHeaders']
|
||||||
)
|
);
|
||||||
|
184
rsspreview.js
184
rsspreview.js
@ -1,11 +1,11 @@
|
|||||||
(function() {
|
(function() {
|
||||||
/**
|
/**
|
||||||
* Check and set a global guard letiable.
|
* Check and set a global guard variable.
|
||||||
* If this content script is injected into the same page again,
|
* If this content script is injected into the same page again,
|
||||||
* it will do nothing next time.
|
* it will do nothing next time.
|
||||||
*/
|
*/
|
||||||
if (window.hasRun) {
|
if (window.hasRun) {
|
||||||
console.log("already run");
|
console.log('already run');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,7 +15,6 @@
|
|||||||
let html_parser = new DOMParser();
|
let html_parser = new DOMParser();
|
||||||
|
|
||||||
function xhrdoc(url, type, cb) {
|
function xhrdoc(url, type, cb) {
|
||||||
|
|
||||||
let xhr = new XMLHttpRequest();
|
let xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
|
|
||||||
@ -25,7 +24,7 @@
|
|||||||
xhr.onload = () => {
|
xhr.onload = () => {
|
||||||
if (xhr.readyState === xhr.DONE) {
|
if (xhr.readyState === xhr.DONE) {
|
||||||
if (xhr.status === 200) {
|
if (xhr.status === 200) {
|
||||||
let resp = (type=="xml") ? xhr.responseXML : xhr.response;
|
let resp = type == 'xml' ? xhr.responseXML : xhr.response;
|
||||||
cb(resp);
|
cb(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -34,7 +33,7 @@
|
|||||||
xhr.send(null);
|
xhr.send(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
function applyxsl(xmlin, xsl, node, doc=document) {
|
function applyxsl(xmlin, xsl, node, doc = document) {
|
||||||
let xsltProcessor = new XSLTProcessor();
|
let xsltProcessor = new XSLTProcessor();
|
||||||
xsltProcessor.importStylesheet(xsl);
|
xsltProcessor.importStylesheet(xsl);
|
||||||
|
|
||||||
@ -45,117 +44,120 @@
|
|||||||
function getlang() {
|
function getlang() {
|
||||||
if (navigator.languages && navigator.languages[0])
|
if (navigator.languages && navigator.languages[0])
|
||||||
return navigator.languages[0];
|
return navigator.languages[0];
|
||||||
else if (navigator.language)
|
else if (navigator.language) return navigator.language;
|
||||||
return navigator.language;
|
else return null;
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatsubtitle() {
|
function formatsubtitle() {
|
||||||
try {
|
try {
|
||||||
let feed_desc = document.getElementById("feedSubtitleRaw");
|
let feed_desc = document.getElementById('feedSubtitleRaw');
|
||||||
|
|
||||||
let html_desc = html_parser.parseFromString('<h2 id="feedSubtitleText">'+feed_desc.innerText+'</h2>', "text/html");
|
let html_desc = html_parser.parseFromString(
|
||||||
|
'<h2 id="feedSubtitleText">' + feed_desc.innerText + '</h2>',
|
||||||
|
'text/html'
|
||||||
|
);
|
||||||
let xml_desc = xml_parser.serializeToString(html_desc.body.firstChild);
|
let xml_desc = xml_parser.serializeToString(html_desc.body.firstChild);
|
||||||
|
|
||||||
feed_desc.insertAdjacentHTML('afterend', xml_desc);
|
feed_desc.insertAdjacentHTML('afterend', xml_desc);
|
||||||
|
|
||||||
feed_desc.parentNode.removeChild(feed_desc);
|
feed_desc.parentNode.removeChild(feed_desc);
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
console.log(feed_desc.innerText);
|
console.log(feed_desc.innerText);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatdescriptions(el=document) {
|
function formatdescriptions(el = document) {
|
||||||
// unescapes descriptions to html then to xml
|
// unescapes descriptions to html then to xml
|
||||||
let tohtml = el.getElementsByClassName("feedRawContent");
|
let tohtml = el.getElementsByClassName('feedRawContent');
|
||||||
|
|
||||||
for (let i = 0; i<tohtml.length; i++) {
|
for (let i = 0; i < tohtml.length; i++) {
|
||||||
// in case of xhtml the content is already parsed
|
// in case of xhtml the content is already parsed
|
||||||
if (tohtml[i].getAttribute("desctype") != "xhtml") {
|
if (tohtml[i].getAttribute('desctype') != 'xhtml') {
|
||||||
try {
|
try {
|
||||||
let html_desc = html_parser.parseFromString('<div class="feedEntryContent">'+tohtml[i].innerText+'</div>', "text/html");
|
let html_desc = html_parser.parseFromString(
|
||||||
let xml_desc = xml_parser.serializeToString(html_desc.body.firstChild);
|
'<div class="feedEntryContent">' + tohtml[i].innerText + '</div>',
|
||||||
|
'text/html'
|
||||||
|
);
|
||||||
|
let xml_desc = xml_parser.serializeToString(
|
||||||
|
html_desc.body.firstChild
|
||||||
|
);
|
||||||
|
|
||||||
tohtml[i].insertAdjacentHTML('afterend', xml_desc);
|
tohtml[i].insertAdjacentHTML('afterend', xml_desc);
|
||||||
tohtml[i].setAttribute("todel", 1);
|
tohtml[i].setAttribute('todel', 1);
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
console.log(tohtml[i].innerHTML);
|
console.log(tohtml[i].innerHTML);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
el.querySelectorAll('.feedRawContent').forEach((a) => {
|
el.querySelectorAll('.feedRawContent').forEach(a => {
|
||||||
if (a.getAttribute("todel") == "1") {
|
if (a.getAttribute('todel') == '1') {
|
||||||
a.remove();
|
a.remove();
|
||||||
|
} else if (a.getAttribute('desctype') == 'xhtml') {
|
||||||
|
a.classList.add('feedEntryContent');
|
||||||
|
a.classList.remove('feedRawContent');
|
||||||
}
|
}
|
||||||
else if (a.getAttribute("desctype") == "xhtml") {
|
});
|
||||||
a.classList.add("feedEntryContent");
|
|
||||||
a.classList.remove("feedRawContent");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeemptyenclosures(el=document) {
|
function removeemptyenclosures(el = document) {
|
||||||
let encs = el.getElementsByClassName("enclosures");
|
let encs = el.getElementsByClassName('enclosures');
|
||||||
|
|
||||||
for (let i = 0; i < encs.length; i++)
|
for (let i = 0; i < encs.length; i++)
|
||||||
if (!encs[i].firstChild)
|
if (!encs[i].firstChild) encs[i].style.display = 'none';
|
||||||
encs[i].style.display = "none";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatfilenames(el=document) {
|
function formatfilenames(el = document) {
|
||||||
let encfn = el.getElementsByClassName("enclosureFilename");
|
let encfn = el.getElementsByClassName('enclosureFilename');
|
||||||
|
|
||||||
for (let i = 0; i<encfn.length; i++) {
|
for (let i = 0; i < encfn.length; i++) {
|
||||||
let url = new URL(encfn[i].innerText);
|
let url = new URL(encfn[i].innerText);
|
||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
let fn = url.pathname.split("/").pop();
|
let fn = url.pathname.split('/').pop();
|
||||||
|
|
||||||
if (fn != "")
|
if (fn != '') encfn[i].innerText = fn;
|
||||||
encfn[i].innerText = fn;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatfilesizes(el=document) {
|
function formatfilesizes(el = document) {
|
||||||
function humanfilesize(size) {
|
function humanfilesize(size) {
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
|
||||||
if (size && size != "" && size > 0)
|
if (size && size != '' && size > 0)
|
||||||
i = Math.floor( Math.log(size) / Math.log(1024) );
|
i = Math.floor(Math.log(size) / Math.log(1024));
|
||||||
|
|
||||||
return ( size / Math.pow(1024, i) ).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];
|
return (
|
||||||
};
|
(size / Math.pow(1024, i)).toFixed(2) * 1 +
|
||||||
|
' ' +
|
||||||
|
['B', 'kB', 'MB', 'GB', 'TB'][i]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let encsz = el.getElementsByClassName("enclosureSize");
|
let encsz = el.getElementsByClassName('enclosureSize');
|
||||||
for (let i = 0; i<encsz.length; i++) {
|
for (let i = 0; i < encsz.length; i++) {
|
||||||
let hsize = humanfilesize(encsz[i].innerText);
|
let hsize = humanfilesize(encsz[i].innerText);
|
||||||
|
|
||||||
if (hsize)
|
if (hsize) encsz[i].innerText = hsize;
|
||||||
encsz[i].innerText = hsize;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function formattitles(el=document) {
|
function formattitles(el = document) {
|
||||||
let et = el.getElementsByClassName("entrytitle");
|
let et = el.getElementsByClassName('entrytitle');
|
||||||
|
|
||||||
for (let i = 0; i<et.length; i++) {
|
for (let i = 0; i < et.length; i++) {
|
||||||
//basically removes html content if there is some
|
//basically removes html content if there is some
|
||||||
//only do it if there's a tag to avoid doing it when text titles cointain a '&'
|
//only do it if there's a tag to avoid doing it when text titles cointain a '&'
|
||||||
//(which can be caught but still displays an error in console, which is annoying)
|
//(which can be caught but still displays an error in console, which is annoying)
|
||||||
if (et[i].innerText.indexOf('<') >= 0) {
|
if (et[i].innerText.indexOf('<') >= 0) {
|
||||||
let tmp = document.createElement("span");
|
let tmp = document.createElement('span');
|
||||||
try {
|
try {
|
||||||
tmp.innerHTML = et[i].innerText;
|
tmp.innerHTML = et[i].innerText;
|
||||||
et[i].innerText = tmp.textContent;
|
et[i].innerText = tmp.textContent;
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
console.log(et[i].innerText);
|
console.log(et[i].innerText);
|
||||||
}
|
}
|
||||||
@ -163,67 +165,74 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatdates(el=document) {
|
function formatdates(el = document) {
|
||||||
let lang = getlang();
|
let lang = getlang();
|
||||||
if (!lang)
|
if (!lang) return;
|
||||||
return;
|
|
||||||
|
|
||||||
let opts = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
|
let opts = {
|
||||||
|
weekday: 'long',
|
||||||
|
year: 'numeric',
|
||||||
|
month: 'long',
|
||||||
|
day: 'numeric',
|
||||||
|
};
|
||||||
|
|
||||||
let ed = el.getElementsByClassName("lastUpdated");
|
let ed = el.getElementsByClassName('lastUpdated');
|
||||||
for (let i = 0; i<ed.length; i++) {
|
for (let i = 0; i < ed.length; i++) {
|
||||||
let d = new Date(ed[i].innerText);
|
let d = new Date(ed[i].innerText);
|
||||||
if (isNaN(d))
|
if (isNaN(d)) continue;
|
||||||
continue;
|
|
||||||
|
|
||||||
let dstr = d.toLocaleDateString(lang, opts) + ' ' + d.toLocaleTimeString(lang);
|
let dstr =
|
||||||
|
d.toLocaleDateString(lang, opts) + ' ' + d.toLocaleTimeString(lang);
|
||||||
|
|
||||||
ed[i].innerText = dstr;
|
ed[i].innerText = dstr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function extensionimages(el=document) {
|
function extensionimages(el = document) {
|
||||||
let extimgs = el.getElementsByClassName("extImg");
|
let extimgs = el.getElementsByClassName('extImg');
|
||||||
|
|
||||||
for (let i = 0; i<extimgs.length; i++)
|
for (let i = 0; i < extimgs.length; i++)
|
||||||
extimgs[i].src = chrome.extension.getURL(extimgs[i].attributes['data-src'].nodeValue);
|
extimgs[i].src = chrome.extension.getURL(
|
||||||
|
extimgs[i].attributes['data-src'].nodeValue
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function makepreviewhtml() {
|
function makepreviewhtml() {
|
||||||
let doc = document.implementation.createHTMLDocument("");
|
let doc = document.implementation.createHTMLDocument('');
|
||||||
|
|
||||||
let feedBody = doc.createElement("div");
|
let feedBody = doc.createElement('div');
|
||||||
feedBody.id = "feedBody";
|
feedBody.id = 'feedBody';
|
||||||
doc.body.appendChild(feedBody);
|
doc.body.appendChild(feedBody);
|
||||||
|
|
||||||
let css = doc.createElement('link');
|
let css = doc.createElement('link');
|
||||||
css.setAttribute('rel', 'stylesheet');
|
css.setAttribute('rel', 'stylesheet');
|
||||||
css.setAttribute('href', chrome.extension.getURL("preview.css"));
|
css.setAttribute('href', chrome.extension.getURL('preview.css'));
|
||||||
doc.head.appendChild(css);
|
doc.head.appendChild(css);
|
||||||
|
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function detect() {
|
function detect() {
|
||||||
let rootNode = document.getRootNode().documentElement;
|
let rootNode = document.getRootNode().documentElement;
|
||||||
|
|
||||||
// for chrome
|
// for chrome
|
||||||
let d = document.getElementById("webkit-xml-viewer-source-xml");
|
let d = document.getElementById('webkit-xml-viewer-source-xml');
|
||||||
if (d && d.firstChild)
|
if (d && d.firstChild) rootNode = d.firstChild;
|
||||||
rootNode = d.firstChild;
|
|
||||||
|
|
||||||
const rootName = rootNode.nodeName.toLowerCase();
|
const rootName = rootNode.nodeName.toLowerCase();
|
||||||
|
|
||||||
let isRSS1 = false;
|
let isRSS1 = false;
|
||||||
|
|
||||||
if (rootName == "rdf" || rootName == "rdf:rdf")
|
if (rootName == 'rdf' || rootName == 'rdf:rdf')
|
||||||
if (rootNode.attributes['xmlns'])
|
if (rootNode.attributes['xmlns'])
|
||||||
isRSS1 = (rootNode.attributes['xmlns'].nodeValue.search('rss') > 0)
|
isRSS1 = rootNode.attributes['xmlns'].nodeValue.search('rss') > 0;
|
||||||
|
|
||||||
if ( rootName == "rss" || rootName == "channel" // rss2
|
if (
|
||||||
|| rootName == "feed" // atom
|
rootName == 'rss' ||
|
||||||
|| isRSS1 )
|
rootName == 'channel' || // rss2
|
||||||
|
rootName == 'feed' || // atom
|
||||||
|
isRSS1
|
||||||
|
)
|
||||||
return rootNode;
|
return rootNode;
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -233,11 +242,14 @@
|
|||||||
let feed_url = window.location.href;
|
let feed_url = window.location.href;
|
||||||
let preview = makepreviewhtml();
|
let preview = makepreviewhtml();
|
||||||
|
|
||||||
xhrdoc(chrome.extension.getURL("rss.xsl"), "xml", (xsl_xml) => {
|
xhrdoc(chrome.extension.getURL('rss.xsl'), 'xml', xsl_xml => {
|
||||||
applyxsl(feedNode, xsl_xml, preview.getElementById("feedBody"), preview);
|
applyxsl(feedNode, xsl_xml, preview.getElementById('feedBody'), preview);
|
||||||
|
|
||||||
// replace the content with the preview document
|
// replace the content with the preview document
|
||||||
document.replaceChild(document.importNode(preview.documentElement, true), document.documentElement);
|
document.replaceChild(
|
||||||
|
document.importNode(preview.documentElement, true),
|
||||||
|
document.documentElement
|
||||||
|
);
|
||||||
|
|
||||||
let t0 = performance.now();
|
let t0 = performance.now();
|
||||||
|
|
||||||
@ -254,13 +266,11 @@
|
|||||||
let t1 = performance.now();
|
let t1 = performance.now();
|
||||||
//console.log("exec in: " + (t1 - t0) + "ms");
|
//console.log("exec in: " + (t1 - t0) + "ms");
|
||||||
|
|
||||||
document.title = document.getElementById("feedTitleText").innerText;
|
document.title = document.getElementById('feedTitleText').innerText;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let feedRoot = detect();
|
let feedRoot = detect();
|
||||||
|
|
||||||
if (feedRoot)
|
if (feedRoot) main(feedRoot);
|
||||||
main(feedRoot);
|
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
Loading…
Reference in New Issue
Block a user