RSS feed list
by
rikuba
2019-01-06 [2019/01/06 14:32:17]
RSSフィードのリンクを一覧表示する
-
/*
* @title RSS feed list
* @description RSSフィードのリンクを一覧表示する
* @include http://*
* @include https://*
* @license Unlicense
*/
(() => {
const selectors = ['atom+xml', 'rdf+xml', 'rss+xml', 'xml'].map((type) => {
return `link[rel="alternate"][href][type="application/${type}"]`;
});
const links = [...document.querySelectorAll(selectors.join(','))];
const feeds = links.map((link) => ({
title: link.title || 'Feed',
href: link.href,
}));
const container = document.createElement('div');
container.style.cssText = `
z-index: 5999999;
position: fixed;
top: 0;
right: 0;
border-radius: 0 0 0 5px;
padding: 10px 20px;
background-color: rgba(0, 0, 0, 0.75);
line-height: 1.5;
text-align: left;
`;
const list = container.appendChild(document.createElement('ul'));
list.style.cssText = `
list-style: none;
max-width: 50vw;
margin: 0;
padding: 0;
`;
if (feeds.length > 0) {
for (let feed of feeds) {
const item = list.appendChild(document.createElement('li'));
const anchor = item.appendChild(document.createElement('a'));
anchor.style.cssText = `
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: #fff;
`;
anchor.target = '_blank';
anchor.href = feed.href;
anchor.textContent = anchor.title = feed.title;
}
} else {
const item = list.appendChild(document.createElement('li'));
item.style.cssText = `
color: #fff;
`;
item.textContent = `No feeds found`;
}
document.body.appendChild(container);
if (feeds.length > 0) {
container.querySelector('a').focus();
}
document.addEventListener('click', function handleClick(e) {
if (!container.contains(e.target)) {
container.remove();
document.removeEventListener('click', handleClick);
}
});
})();
-
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。