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()); })