diff options
Diffstat (limited to 'popup')
-rw-r--r-- | popup/index.js | 123 | ||||
-rw-r--r-- | popup/main.html | 22 |
2 files changed, 145 insertions, 0 deletions
diff --git a/popup/index.js b/popup/index.js new file mode 100644 index 0000000..c674f39 --- /dev/null +++ b/popup/index.js @@ -0,0 +1,123 @@ +var base_reader = undefined + +function subscribe_link(reader, feed_url){ + if(reader == "ttrss"){ + return `${base_reader}/public.php?op=subscribe&feed_url=${encodeURIComponent(feed_url)}`; + } else { + return `${base_reader}/bookmarklet?uri=${encodeURIComponent(feed_url)}`; + } +} + +window.onload = async function () { + let settings = await browser.storage.sync.get(["rb", "reader", "instance"]); + base_reader = settings.instance; + let base_rb = settings.rb; + let feeds = document.getElementById('feeds'); + feeds.innerText = "Loading..." + browser.tabs.query({ active: true, currentWindow: true }, function (tabs) { + browser.tabs.sendMessage(tabs[0].id, {}).then( + function (feed_urls) { + feeds.innerText = "" + if(!base_rb) { + let newSettingsLink = document.createElement("a") + newSettingsLink["href"] = "/options.html" + newSettingsLink.innerText = "RSS-bridge instance not set! Click here to open options."; + let newDiv = document.createElement('div'); + newDiv.append(newSettingsLink); + feeds.appendChild(newDiv); + + let newP = document.createElement('p') + newP.innerText = `Found ${feed_urls.length} feeds` + feeds.append(newP) + return; + } + + feed_urls.forEach(item => { + let newLink = document.createElement('a'); + newLink["href"] = item.url + newLink.innerText = item.type; + + + let newDiv = document.createElement('div'); + newDiv.append(newLink) + + let previewLink = document.createElement('a'); + previewLink["onclick"] = function(){ + fetch(item.url) + .then( r => r.text() ) + .then(r => new window.DOMParser().parseFromString(r, "text/xml")) + .then(p => { + let channelTitle = "Items" + let description = undefined + let items = [] + let lastBuild = undefined + console.log(p.firstChild.children) + for(const channel of p.firstChild.children) { + //p.firstChild.children.forEach(channel => { + for(const child of channel.children) { + //channel.children.forEach(child => { + if(child.tagName == "title"){ + channelTitle = child.textContent + } else if (child.tagName == "lastBuildDate") { + lastBuild = child.textContent + } else if (child.tagName == "description") { + description = child.textContent + } else if (child.tagName == "item") { + item = {} + for(const c of child.children){ + //child.children.forEach(c => { + item[c.tagName] = c.innerHTML + } + items.push(item) + } + } + } + console.log(items) + let tableEl = document.createElement("table") + items.forEach(item => { + let trEl = document.createElement("tr") + tableEl.append(trEl) + + let tdEl = document.createElement("td") + + let titleEl = document.createElement("a") + titleEl.href = item["link"] + titleEl.innerText = item["title"] + let wrapperDiv = document.createElement("div") + wrapperDiv.append(titleEl) + let wrapperDiv2 = document.createElement("div") + wrapperDiv2.innerText = item["pubDate"] + tdEl.append(wrapperDiv) + tdEl.append(wrapperDiv2) + trEl.append(tdEl) + + let td3El = document.createElement("td") + td3El.innerHTML = item["description"] + trEl.append(td3El) + + }) + feeds.append(tableEl) + }) + } + previewLink["href"] = "#" + previewLink.innerText = "preview"; + newDiv.append(previewLink) + + if(base_reader){ + let subLink = document.createElement('a'); + subLink["href"] = subscribe_link(settings.reader, item.url) + subLink.innerText = "subscribe"; + newDiv.append(subLink) + } + + feeds.append(newDiv) + }) + if(feed_urls.length == 0) { + let newP = document.createElement('p') + newP.innerText = "No feeds found" + feeds.append(newP) + } + }); + }); +} + diff --git a/popup/main.html b/popup/main.html new file mode 100644 index 0000000..81f8f06 --- /dev/null +++ b/popup/main.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8"> + <style> + div a { + margin: 1em; + } + table td a { + margin: 0em; + } + td { + border: 1px solid black; + } + </style> + </head> + <body> + <h1>RSS Feeds</h1> + <div id="feeds"></div> + <script src="index.js"></script> + </body> +</html> |