Hatena::Let spam filter
@@ -1,29 +1,46 @@
/*
- * @title Hatena::Let SPAM Filter
- * @description Hatena::Let の一覧から SPAM 投稿を消す(やっつけだけど)
+ * @title Hatena::Let spam filter
+ * @description hidden spam on Hatena::Let w/ Pager Extntion (as UserScript)
* @include http://let.hatelabo.jp/*
- * @license MIT License
+ * @contributor a-kuma3 http://let.hatelabo.jp/a-kuma3/let/hJme3Kz9g6Zc (Fork of)
+ * @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
-(function () {
- var forEach = Array.prototype.forEach;
- var re1 = /^(https?:)+\s*$/,
- re2 = /(https?:){2,}/;
- var wipeout = function(ctx) {
- forEach.call(document.body.querySelectorAll('div.codelist'), function (item) {
- var source_block = item.querySelectorAll('pre.packed-source');
- if (source_block.length == 0) {
- item.style.display = 'none';
- return;
- }
- var source = source_block[0];
- if (re1.exec(source.textContent) || re2.exec(source.textContent)) {
- item.style.display = 'none';
+
+// "SPAM" is ham, not spam
+
+// for Hatena Question c.f.
+// http://let.hatelabo.jp/noromanba/let/hLHWrvnr8Mlx
+
+// spammer report c.f.
+// http://ptech.g.hatena.ne.jp/noromanba/20141126/1417027101
+// http://ptech.g.hatena.ne.jp/noromanba/20150105/1420463835
+
+(() => {
+ // TODO join/smart RegExp pattern
+ const URL_MONKEY = /^(https?:)+\s*$/;
+ const PROTOCOL_MONKEY= /(https?:){2,}/;
+ const body = document.body;
+
+ const wipeout = (ctx) => {
+ Array.from(body.querySelectorAll('.codelist')).forEach((list) => {
+ const packed = list.querySelector('.packed-source');
+
+ if (!packed ||
+ URL_MONKEY.test(packed.textContent) ||
+ PROTOCOL_MONKEY.test(packed.textContent)) {
+ list.style.display = 'none';
return;
}
});
};
- wipeout(document.body);
-})();
+ wipeout(body);
+ // for Pager Extentions
+ new MutationObserver((records) => {
+ records.forEach((record) => {
+ wipeout(record.target);
+ });
+ }).observe(body, { childList: true, subtree: true });
+})();
/*
* @title Hatena::Let spam filter
* @description hidden spam on Hatena::Let w/ Pager Extntion (as UserScript)
* @include http://let.hatelabo.jp/*
* @contributor a-kuma3 http://let.hatelabo.jp/a-kuma3/let/hJme3Kz9g6Zc (Fork of)
* @license MIT License http://opensource.org/licenses/MIT
* @javascript_url
*/
// "SPAM" is ham, not spam
// for Hatena Question c.f.
// http://let.hatelabo.jp/noromanba/let/hLHWrvnr8Mlx
// spammer report c.f.
// http://ptech.g.hatena.ne.jp/noromanba/20141126/1417027101
// http://ptech.g.hatena.ne.jp/noromanba/20150105/1420463835
(() => {
// TODO join/smart RegExp pattern
const URL_MONKEY = /^(https?:)+\s*$/;
const PROTOCOL_MONKEY= /(https?:){2,}/;
const body = document.body;
const wipeout = (ctx) => {
Array.from(body.querySelectorAll('.codelist')).forEach((list) => {
const packed = list.querySelector('.packed-source');
if (!packed ||
URL_MONKEY.test(packed.textContent) ||
PROTOCOL_MONKEY.test(packed.textContent)) {
list.style.display = 'none';
return;
}
});
};
wipeout(body);
// for Pager Extentions
new MutationObserver((records) => {
records.forEach((record) => {
wipeout(record.target);
});
}).observe(body, { childList: true, subtree: true });
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。