# HG changeset patch # User Guido Berhoerster # Date 1548164406 -3600 # Node ID 76e23b361e923735b41e353e702410fde40a62e4 # Parent b9dc94ce2eeb1148b07a663546caaa532c818792 Allow feed reader addons to subscribe to the currently viewed feed Add a link element to the feed preview that points to the currently viewed feed in order to allow feed reader addons to subscribe to it. diff -r b9dc94ce2eeb -r 76e23b361e92 content_scripts/feed-probe.js --- a/content_scripts/feed-probe.js Tue Jan 22 10:43:24 2019 +0100 +++ b/content_scripts/feed-probe.js Tue Jan 22 14:40:06 2019 +0100 @@ -17,6 +17,12 @@ '[type="application/rss+xml"])'); for (let element of elements) { + if (element.href === document.URL) { + // do not indicate the availability of a feed if the current + // document is already a feed preview + continue; + } + if (!element.href.match(/^https?:\/\//)) { continue; } diff -r b9dc94ce2eeb -r 76e23b361e92 js/feed-parser.js --- a/js/feed-parser.js Tue Jan 22 10:43:24 2019 +0100 +++ b/js/feed-parser.js Tue Jan 22 14:40:06 2019 +0100 @@ -184,9 +184,10 @@ } class Feed { - constructor(url, {title = browser.i18n.getMessage('defaultFeedTitle'), + constructor(url, type, {title = browser.i18n.getMessage('defaultFeedTitle'), subtitle = '', logo, entries = []} = {}) { this.url = url; + this.type = type; this.title = title; this.subtitle = subtitle; this.logo = logo; @@ -431,7 +432,8 @@ entries.push(this.parseAtom03Entry(entryElement)); } - return new Feed(this.url, {title, subtitle, logo, entries}); + return new Feed(this.url, 'application/atom+xml', + {title, subtitle, logo, entries}); } parseAtomLogo(logoElement) { @@ -595,7 +597,8 @@ entries.push(this.parseAtomEntry(entryElement)); } - return new Feed(this.url, {title, subtitle, logo, entries}); + return new Feed(this.url, 'application/atom+xml', + {title, subtitle, logo, entries}); } parseRSS1Logo(imageElement, nsPrefix) { @@ -677,7 +680,8 @@ } } - return new Feed(this.url, {title, subtitle, logo, entries}); + return new Feed(this.url, 'application/rss+xml', + {title, subtitle, logo, entries}); } parseRSS2Logo(imageElement) { @@ -805,7 +809,8 @@ } } - return new Feed(this.url, {title, subtitle, logo, entries}); + return new Feed(this.url, 'application/rss+xml', + {title, subtitle, logo, entries}); } parseFromString(xmlString, url) { diff -r b9dc94ce2eeb -r 76e23b361e92 js/feed-preview.js --- a/js/feed-preview.js Tue Jan 22 10:43:24 2019 +0100 +++ b/js/feed-preview.js Tue Jan 22 14:40:06 2019 +0100 @@ -21,6 +21,12 @@ feedPreviewDocument.querySelector('#default-stylesheet').href = browser.runtime.getURL('web_resources/style/feed-preview.css'); + // link to the currently viewed feed in order to allow feed reader addons + // to subscribe to it + let feedLinkElement = feedPreviewDocument.querySelector('#feed-link'); + feedLinkElement.href = feed.url; + feedLinkElement.type = feed.type; + feedPreviewDocument.querySelector('title').textContent = feed.title; feedPreviewDocument.querySelector('label[for="feed-reader-selection"]') diff -r b9dc94ce2eeb -r 76e23b361e92 web_resources/feed-preview.xhtml --- a/web_resources/feed-preview.xhtml Tue Jan 22 10:43:24 2019 +0100 +++ b/web_resources/feed-preview.xhtml Tue Jan 22 14:40:06 2019 +0100 @@ -12,6 +12,7 @@ --> +