Hatena::Let spam filter
@@ -1,15 +1,14 @@
/*
* @title Hatena::Let spam filter
- * @description hidden spam on Hatena::Let w/ Pager Extntion (as UserScript)
+ * @description hidden spam on Hatena::Let w/ Pager Extention (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
-
// feedback to Hatena c.f.
+// http://www.hatena.ne.jp/faq/q/let
// http://let.hatelabo.jp/noromanba/let/hLHW16C50Zpx
// for Hatena Question c.f.
@@ -20,30 +19,36 @@
// http://ptech.g.hatena.ne.jp/noromanba/20150105/1420463835
(() => {
+ // double-slash "//" is line-comment in js; e.g. below URL repeat statement
+ // http://spam.example.com
+ // http://example.com/spam
+ // ...
+ // so minified in list-view like this;
+ // http:http: ...
+ //
// TODO join/smart RegExp pattern
- const URL_MONKEY = /^(https?:)+\s*$/;
- const PROTOCOL_MONKEY = /(https?:){2,}/;
- const body = document.body;
+ const urlFirstPattern = /^(https?:)+\s*$/;
+ const urlIncludePattern = /(https?:){2,}/;
const wipeout = (ctx) => {
Array.from(ctx.querySelectorAll('.codelist')).forEach((list) => {
const packed = list.querySelector('.packed-source');
- if (!packed ||
- URL_MONKEY.test(packed.textContent) ||
- PROTOCOL_MONKEY.test(packed.textContent)) {
+ if (!packed || // XXX involve @require only src
+ urlFirstPattern.test(packed.textContent) ||
+ urlIncludePattern.test(packed.textContent)) {
list.style.display = 'none';
return;
}
});
};
- wipeout(body);
+ wipeout(document.body);
// for Pager Extentions
new MutationObserver((records) => {
records.forEach((record) => {
wipeout(record.target);
});
- }).observe(body, { childList: true, subtree: true });
+ }).observe(document.body, { childList: true, subtree: true });
})();
/*
* @title Hatena::Let spam filter
* @description hidden spam on Hatena::Let w/ Pager Extention (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
*/
// feedback to Hatena c.f.
// http://www.hatena.ne.jp/faq/q/let
// http://let.hatelabo.jp/noromanba/let/hLHW16C50Zpx
// 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
(() => {
// double-slash "//" is line-comment in js; e.g. below URL repeat statement
// http://spam.example.com
// http://example.com/spam
// ...
// so minified in list-view like this;
// http:http: ...
//
// TODO join/smart RegExp pattern
const urlFirstPattern = /^(https?:)+\s*$/;
const urlIncludePattern = /(https?:){2,}/;
const wipeout = (ctx) => {
Array.from(ctx.querySelectorAll('.codelist')).forEach((list) => {
const packed = list.querySelector('.packed-source');
if (!packed || // XXX involve @require only src
urlFirstPattern.test(packed.textContent) ||
urlIncludePattern.test(packed.textContent)) {
list.style.display = 'none';
return;
}
});
};
wipeout(document.body);
// for Pager Extentions
new MutationObserver((records) => {
records.forEach((record) => {
wipeout(record.target);
});
}).observe(document.body, { childList: true, subtree: true });
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。