feat: display page rss in popup
This commit is contained in:
parent
60e2d90a9c
commit
4ad1efe18e
|
|
@ -35,6 +35,7 @@
|
|||
"mini-css-extract-plugin": "0.8.0",
|
||||
"postcss-loader": "3.0.0",
|
||||
"svg-inline-loader": "0.8.0",
|
||||
"template-string-optimize-loader": "^3.0.0",
|
||||
"url-loader": "2.0.1",
|
||||
"webpack": "4.36.1",
|
||||
"webpack-cli": "3.3.6"
|
||||
|
|
|
|||
|
|
@ -1,10 +1,22 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>RSSHub radar</title>
|
||||
<style href="./popup.css"></style>
|
||||
<link rel="stylesheet" href="./popup.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>RSSHub radar</h1>
|
||||
<div class="page-rss">
|
||||
<h2>当前页面 RSS</h2>
|
||||
<ul></ul>
|
||||
</div>
|
||||
<div class="page-rsshub">
|
||||
<h2>当前页面 RSSHub</h2>
|
||||
<ul></ul>
|
||||
</div>
|
||||
<div class="website-rsshub">
|
||||
<h2>当前网站 RSSHub</h2>
|
||||
<ul></ul>
|
||||
</div>
|
||||
<script src="./popup.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
body {
|
||||
width: 300px;
|
||||
}
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
window.pageRSS = [];
|
||||
window.RSSHub = [];
|
||||
let currentTab = null;
|
||||
|
||||
function handlePageRSS (feeds) {
|
||||
if (feeds && feeds.length) {
|
||||
chrome.browserAction.setBadgeText({
|
||||
text: feeds.length + '',
|
||||
});
|
||||
} else {
|
||||
chrome.browserAction.setBadgeText({
|
||||
text: '',
|
||||
});
|
||||
}
|
||||
chrome.browserAction.setBadgeText({
|
||||
text: feeds.length ? (feeds.length + '') : '',
|
||||
tabId: currentTab.tabId,
|
||||
});
|
||||
window.pageRSS = feeds;
|
||||
}
|
||||
|
||||
chrome.browserAction.setBadgeBackgroundColor({
|
||||
|
|
@ -15,7 +15,8 @@ chrome.browserAction.setBadgeBackgroundColor({
|
|||
});
|
||||
|
||||
chrome.tabs.onActivated.addListener(function (tab) {
|
||||
chrome.tabs.sendMessage(tab.tabId, {
|
||||
currentTab = tab;
|
||||
chrome.tabs.sendMessage(currentTab.tabId, {
|
||||
text: 'getPageRSS',
|
||||
}, handlePageRSS);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,40 +1,50 @@
|
|||
let pageRSS = null;
|
||||
|
||||
function getPageRSS () {
|
||||
let types = [
|
||||
'application/rss+xml',
|
||||
'application/atom+xml',
|
||||
'application/rdf+xml',
|
||||
'application/rss',
|
||||
'application/atom',
|
||||
'application/rdf',
|
||||
'text/rss+xml',
|
||||
'text/atom+xml',
|
||||
'text/rdf+xml',
|
||||
'text/rss',
|
||||
'text/atom',
|
||||
'text/rdf'
|
||||
];
|
||||
let links = document.querySelectorAll('link[type]');
|
||||
let feeds = [];
|
||||
for (let i = 0; i < links.length; i++) {
|
||||
if (links[i].hasAttribute('type') && types.indexOf(links[i].getAttribute('type')) !== -1) {
|
||||
let feed_url = links[i].getAttribute('href');
|
||||
if (!pageRSS) {
|
||||
pageRSS = [];
|
||||
let types = [
|
||||
'application/rss+xml',
|
||||
'application/atom+xml',
|
||||
'application/rdf+xml',
|
||||
'application/rss',
|
||||
'application/atom',
|
||||
'application/rdf',
|
||||
'text/rss+xml',
|
||||
'text/atom+xml',
|
||||
'text/rdf+xml',
|
||||
'text/rss',
|
||||
'text/atom',
|
||||
'text/rdf'
|
||||
];
|
||||
let links = document.querySelectorAll('link[type]');
|
||||
for (let i = 0; i < links.length; i++) {
|
||||
if (links[i].hasAttribute('type') && types.indexOf(links[i].getAttribute('type')) !== -1) {
|
||||
let feed_url = links[i].getAttribute('href');
|
||||
|
||||
if (feed_url.startsWith('//')) {
|
||||
feed_url = document.location.protocol + feed_url;
|
||||
} else if (feed_url.startsWith('/')) {
|
||||
feed_url = document.location.origin + feed_url;
|
||||
} else if (!(/^(http|https):\/\//i.test(feed_url))) {
|
||||
feed_url = document.location.href + '/' + feed_url.replace(/^\//g, '');
|
||||
if (feed_url) {
|
||||
let feed = {
|
||||
url: handleUrl(feed_url),
|
||||
title: links[i].getAttribute('title') || document.querySelector('title') && document.querySelector('title').innerHTML,
|
||||
image: document.querySelector('link[rel="icon"]') && handleUrl(document.querySelector('link[rel="icon"]').getAttribute('href')) || document.location.origin + '/favicon.ico',
|
||||
};
|
||||
pageRSS.push(feed);
|
||||
}
|
||||
}
|
||||
|
||||
let feed = {
|
||||
url: feed_url,
|
||||
title: links[i].getAttribute('title') || feed_url
|
||||
};
|
||||
feeds.push(feed);
|
||||
}
|
||||
}
|
||||
return feeds;
|
||||
return pageRSS;
|
||||
}
|
||||
|
||||
function handleUrl (url) {
|
||||
if (url.startsWith('//')) {
|
||||
url = document.location.protocol + url;
|
||||
} else if (url.startsWith('/')) {
|
||||
url = document.location.origin + url;
|
||||
} else if (!(/^(http|https):\/\//i.test(url))) {
|
||||
url = document.location.href + '/' + url.replace(/^\//g, '');
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
chrome.runtime.sendMessage(null, {
|
||||
|
|
@ -44,12 +54,6 @@ chrome.runtime.sendMessage(null, {
|
|||
|
||||
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||
if (msg.text === 'getPageRSS') {
|
||||
if (document.readyState === 'interactive' || document.readyState === 'complete') {
|
||||
sendResponse(getPageRSS());
|
||||
} else {
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
sendResponse(getPageRSS());
|
||||
});
|
||||
}
|
||||
sendResponse(getPageRSS());
|
||||
}
|
||||
});
|
||||
|
|
@ -1,2 +1,21 @@
|
|||
import '../css/index.less';
|
||||
import '../css/popup.less';
|
||||
|
||||
const background = chrome.extension.getBackgroundPage();
|
||||
|
||||
function generateList (list) {
|
||||
let result = '';
|
||||
if (list && list.length) {
|
||||
list.forEach((item) => {
|
||||
result += `
|
||||
<li>
|
||||
<img src="${item.image}">
|
||||
<div class="title">${item.title}</div>
|
||||
<a class="url" href="${item.url}">${item.url}</a>
|
||||
</li>
|
||||
`
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
document.querySelector('.page-rss ul').innerHTML = generateList(background.pageRSS);
|
||||
|
|
@ -39,6 +39,7 @@ module.exports = {
|
|||
{
|
||||
test: /\.js$/,
|
||||
use: [
|
||||
'template-string-optimize-loader',
|
||||
{
|
||||
loader: 'babel-loader',
|
||||
options: {
|
||||
|
|
|
|||
79
yarn.lock
79
yarn.lock
|
|
@ -851,6 +851,11 @@ abbrev@1:
|
|||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
acorn@5.7.1:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
|
||||
integrity sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==
|
||||
|
||||
acorn@^6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3"
|
||||
|
|
@ -1843,6 +1848,11 @@ deep-extend@^0.6.0:
|
|||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
|
||||
|
||||
deep-is@~0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
||||
|
||||
define-properties@^1.1.2, define-properties@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||
|
|
@ -2056,6 +2066,18 @@ escape-string-regexp@^1.0.5:
|
|||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
escodegen@1.11.0:
|
||||
version "1.11.0"
|
||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589"
|
||||
integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==
|
||||
dependencies:
|
||||
esprima "^3.1.3"
|
||||
estraverse "^4.2.0"
|
||||
esutils "^2.0.2"
|
||||
optionator "^0.8.1"
|
||||
optionalDependencies:
|
||||
source-map "~0.6.1"
|
||||
|
||||
eslint-loader@2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337"
|
||||
|
|
@ -2075,6 +2097,11 @@ eslint-scope@^4.0.0:
|
|||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
esprima@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
|
||||
integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
|
||||
|
||||
esprima@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||
|
|
@ -2087,7 +2114,7 @@ esrecurse@^4.1.0:
|
|||
dependencies:
|
||||
estraverse "^4.1.0"
|
||||
|
||||
estraverse@^4.1.0, estraverse@^4.1.1:
|
||||
estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
|
||||
integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
|
||||
|
|
@ -2197,6 +2224,11 @@ fast-json-stable-stringify@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
||||
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
||||
|
||||
fast-levenshtein@~2.0.4:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
|
||||
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
|
||||
|
||||
figgy-pudding@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
|
||||
|
|
@ -3084,6 +3116,14 @@ less@3.9.0:
|
|||
request "^2.83.0"
|
||||
source-map "~0.6.0"
|
||||
|
||||
levn@~0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||
integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
|
||||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
type-check "~0.3.2"
|
||||
|
||||
loader-fs-cache@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086"
|
||||
|
|
@ -3638,6 +3678,18 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
|||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
optionator@^0.8.1:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
|
||||
integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
|
||||
dependencies:
|
||||
deep-is "~0.1.3"
|
||||
fast-levenshtein "~2.0.4"
|
||||
levn "~0.3.0"
|
||||
prelude-ls "~1.1.2"
|
||||
type-check "~0.3.2"
|
||||
wordwrap "~1.0.0"
|
||||
|
||||
os-browserify@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
|
||||
|
|
@ -4194,6 +4246,11 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.1
|
|||
source-map "^0.6.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
prelude-ls@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||
integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
|
||||
|
||||
prepend-http@^1.0.0:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
|
||||
|
|
@ -4952,6 +5009,14 @@ tar@^4:
|
|||
safe-buffer "^5.1.2"
|
||||
yallist "^3.0.3"
|
||||
|
||||
template-string-optimize-loader@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/template-string-optimize-loader/-/template-string-optimize-loader-3.0.0.tgz#bd14db05dff4b6fa24d78641aced386176ce30e1"
|
||||
integrity sha512-1QOrBwIYHJSRZ9stM0f/YtT/Yivh2pHo+IfHD98qwn95A84gu5+OfpFgtquGryg3qVnz+Tg7eeGtmEK9vb8Zjw==
|
||||
dependencies:
|
||||
acorn "5.7.1"
|
||||
escodegen "1.11.0"
|
||||
|
||||
terser-webpack-plugin@^1.1.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4"
|
||||
|
|
@ -5067,6 +5132,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
|||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
||||
|
||||
type-check@~0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
|
||||
integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
|
||||
dependencies:
|
||||
prelude-ls "~1.1.2"
|
||||
|
||||
typedarray@^0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
|
|
@ -5327,6 +5399,11 @@ wide-align@^1.1.0:
|
|||
dependencies:
|
||||
string-width "^1.0.2 || 2"
|
||||
|
||||
wordwrap@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
|
||||
integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
|
||||
|
||||
worker-farm@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
|
||||
|
|
|
|||
Loading…
Reference in New Issue