Mercurial > addons > firefox-addons > feed-preview
view popup/feed-selection.js @ 46:586eebf8efb7
Work around race condition in feed reader subscription script execution
browser.tabs.executeScript() should only run the script once the feed preview
page is completely loaded but there seems to be a race condition where it is
run too early resulting in disabled feed reader subscription.
author | Guido Berhoerster <guido+feed-preview@berhoerster.name> |
---|---|
date | Wed, 03 Jul 2019 15:51:36 +0200 |
parents | bc5cc170163c |
children | c8fa2430eab2 |
line wrap: on
line source
/* * Copyright (C) 2018 Guido Berhoerster <guido+feed-preview@berhoerster.name> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 'use strict'; async function buildFeedSelection() { let tabs = await browser.tabs.query({active: true, currentWindow: true}); let feeds = await browser.runtime.sendMessage(tabs[0].id); let feedListElement = document.querySelector('.panel-section-list'); feedListElement.addEventListener('click', ev => { // find selected list item element and open the feed in a new tab for (let element = ev.target; element !== ev.currentTarget; element = element.parentElement) { if (element.classList.contains('panel-list-item')) { browser.tabs.create({url: element.dataset.href}); break; } } ev.preventDefault(); }); let templateElement = document.querySelector('#feed-item-template'); for (let feed of feeds) { let feedNode = document.importNode(templateElement.content, true); feedNode.querySelector('.panel-list-item').dataset.href = feed.href; let prefix = (feed.type === 'application/atom+xml') ? 'Atom Feed' : 'RSS Feed'; let imgNode = feedNode.querySelector('.icon > img'); imgNode.src = browser.runtime.getURL('icons/feed-preview.svg'); imgNode.alt = prefix; feedNode.querySelector('.text').textContent = `${prefix}: ${feed.title}`; feedListElement.appendChild(feedNode); } } buildFeedSelection();