diff options
Diffstat (limited to 'content_scripts/cs.js')
-rw-r--r-- | content_scripts/cs.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/content_scripts/cs.js b/content_scripts/cs.js new file mode 100644 index 0000000..e57176b --- /dev/null +++ b/content_scripts/cs.js @@ -0,0 +1,86 @@ +var base_url = undefined +let formats = ["Atom", "Mrss", "Html"] +let types = { + 'application/rss+xml': "rss", + 'application/atom+xml': "atom", + 'application/rdf+xml': "rdf", + 'application/rss': "rss", + 'application/atom': "atom", + 'application/rdf': "rdf", + 'text/rss+xml': "rss", + 'text/atom+xml': "atom", + 'text/rdf+xml': "rdf", + 'text/rss': "rss", + 'text/atom': "atom", + 'text/rdf': "rdf" +} + + +function find_links_in_page() { + let links = document.querySelectorAll('link[type]'); + let feeds = []; + for (let i = 0; i < links.length; i++) { + if (links[i].hasAttribute('type') && links[i].getAttribute('type') in types) { + let title = links[i].getAttribute('title') + let href = links[i].getAttribute('href') + let feed_url = new URL(href, window.location.href).href + let type = types[links[i].getAttribute('type')] + let feed = { + type: `native: ${title || type}`, + url: feed_url, + }; + feeds.push(feed); + } + } + return feeds +} + +function get_all_types(feed_url, note) { + let feeds = []; + formats.forEach(el => { + if(note){ + feeds.push({ + type: `rss-bridge (${note}): ${el}`, + url: feed_url + el + }); + } else { + feeds.push({ + type: `rss-bridge: ${el}`, + url: feed_url + el + }); + } + }) + return feeds; +} + +let objs = [] + +async function get_feed_urls() { + let settings = await browser.storage.sync.get("rb"); + base_url = settings.rb; + let all_feed_urls = [] + let host = window.location.host; + for (const obj of objs) { + for (const obj_host of obj.hosts) { + if (host.includes(obj_host)) { + result = await obj.callback() + all_feed_urls = all_feed_urls.concat(result) + break + } + } + } + all_feed_urls = all_feed_urls.concat(find_links_in_page()) + return all_feed_urls +} + +function register(hosts, callback) { + objs.push({hosts, callback}) +} + +register(["instagram"], get_insta) +register(["twitter"], get_twitter) +register(["youtube"], get_youtube) + +browser.runtime.onMessage.addListener(function (msg, sender) { + return Promise.resolve(get_feed_urls()); +}) |