\Pro Plan/

つい最近、Feedlyが月額$5の有料プランを先着5000人だったかで$99払えば生涯使えるというのをやってたので申し込んだのだけど、このプレミアム感のなさに驚愕してゴミみたいなユーザースクリプトを作った。
userscripts.org に絶対ありそうな広告エントリーやら必要なさそうなのを非表示にするやつの簡易版。
好んで使ってたDOMNodeInsertedが廃止予定らしく、MutationObserverというのを使ってるので古いブラウザだと全く動かないしエラーでます。
正直、MutationObserverが使いたかっただけ。
ダウンロード: feedly_filter.user.js
// ==UserScript==
// @name Feedly Filter
// @description 広告エントリーを非表示にするしか能がない
// @include http://cloud.feedly.com/*
// @include https://cloud.feedly.com/*
// ==/UserScript==
(function() {
var feedly = {
titles: [
/^(PR:|AD:|INFO:|【PR】)/i,
/管理人のブックマーク/,
/^ダイジェストニュース/,
/bokete/
],
urls: [
],
observer: new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
var elm = mutation.addedNodes[0];
if (elm && elm.nodeName == 'DIV') {
feedly.filterEntry(elm);
}
});
}),
init: function() {
// this.debug(' init()');
this.observer.observe(document.body, {childList: true, subtree: true});
window.addEventListener('beforeunload', this, true);
},
handleEvent: function(event) {
if (event.type == 'beforeunload') {
// this.debug(' disconnect()');
this.observer.disconnect();
window.removeEventListener('beforeunload', this, true);
}
},
debug: function() {
var i, l = arguments[0];
for (i = 1; i < arguments.length; i++) {
if (arguments[i]) l += ', ' + arguments[i];
}
unsafeWindow.console.log('[userscript][feedly_filter]' + l);
},
filterEntry: function(elm) {
var a, i, title, read = false;
if (!elm.className || !elm.className.contains('u0Entry')) return;
a = elm.getElementsByClassName('title')[0];
if (a.className == 'title read') {
read = true;
}
title = elm.getAttribute('data-title');
for (i = 0; i < this.titles.length; i++) {
if (!this.titles[i].test(title)) continue;
// this.debug('[hide] ' + title);
this.hide(elm, read);
break;
}
},
hide: function(elm, read) {
var div = elm.getElementsByClassName('condensedTools')[0],
img, e;
if (read) {
elm.style.display = 'none';
return;
}
if (!div) return;
img = div.getElementsByTagName('img')[1];
if (img.getAttribute('title') == 'Mark as read and hide') {
e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
img.dispatchEvent(e);
}
}
};
feedly.init();
})();