Hatena::Let spam filter Fork

    @@ -19,17 +19,13 @@ // http://ptech.g.hatena.ne.jp/noromanba/20150105/1420463835 (() => { - //*/ - const urlFirstPattern = /^(https?:)+\s*$/; - const urlIncludePattern = /(https?:){2,}/; - /*/ // valid url pattern nomaly using c.f. - // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp - // https://en.wikipedia.org/wiki/Regular_expression - // http://yut.hatenablog.com/entry/20110305/1299318337 - // FIXME WIP Strings, url(), RegExp - // TODO \cX \xhh \uhhhh \u{hhhh} x{n,m} - const invalidURLPattern = /(?:[^"'\s\(]https?:|[\/][^.\\dDwWsStrnvfbB0\[\]^\|$\(\)?:*{},=!]:https?|^https?)/; + // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp + // https://en.wikipedia.org/wiki/Regular_expression + // http://yut.hatenablog.com/entry/20110305/1299318337 + // Strings, url(), RegExp + // TBD \cX \xhh \uhhhh \u{hhhh} x{n,m} + const invalidURL = /(?:^|[^"'\s\/^.\\dwstrnvfb0\[\]^\|$\(\)?:*{},=!])(?:https?:)+/i; //*/ const wipeout = (ctx) => {
    @@ -37,10 +33,12 @@ const packed = list.querySelector('.packed-source'); if (!packed || // XXX involve @require only src - urlFirstPattern.test(packed.textContent) || - urlIncludePattern.test(packed.textContent)) { + invalidURL.test(packed.textContent)) { + //* list.style.display = 'none'; - //list.style.backgroundColor = 'red'; + /*/ + list.style.backgroundColor = 'red'; + //*/ return; } });
  • /*
     * @title Hatena::Let spam filter
     * @description hidden spam on Hatena::Let w/ Pager Extension (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
    
    // Hatena Question spam-filter
    // 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
    
    (() => {
        // valid url pattern nomaly using c.f.
        //  https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp
        //  https://en.wikipedia.org/wiki/Regular_expression
        //  http://yut.hatenablog.com/entry/20110305/1299318337
        // Strings, url(), RegExp
        // TBD \cX \xhh \uhhhh \u{hhhh} x{n,m}
        const invalidURL = /(?:^|[^"'\s\/^.\\dwstrnvfb0\[\]^\|$\(\)?:*{},=!])(?:https?:)+/i;
        //*/
    
        const wipeout = (ctx) => {
            Array.from(ctx.querySelectorAll('.codelist')).forEach((list) => {
                const packed = list.querySelector('.packed-source');
    
                if (!packed || // XXX involve @require only src
                    invalidURL.test(packed.textContent)) {
                    //*
                    list.style.display = 'none';
                    /*/
                    list.style.backgroundColor = 'red';
                    //*/
                    return;
                }
            });
        };
        wipeout(document.body);
    
        // for Pager Extensions
        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 です。

History

  1. 2016/03/06 22:39:00 - 2016-03-06
  2. 2016/03/06 22:37:57 - 2016-03-06
  3. 2016/03/04 21:16:09 - 2016-03-04
  4. 2016/03/04 21:15:41 - 2016-03-04
  5. 2016/03/04 21:12:33 - 2016-03-04
  6. 2016/03/03 21:22:33 - 2016-03-03
  7. 2016/03/02 17:33:38 - 2016-03-02
  8. 2016/01/25 19:50:53 - 2016-01-25
  9. 2016/01/25 19:49:41 - 2016-01-25
  10. 2016/01/21 19:52:50 - 2016-01-21
  11. 2016/01/17 22:21:15 - 2016-01-17
  12. 2016/01/17 22:05:42 - 2016-01-17
  13. 2016/01/17 21:18:05 - 2016-01-17
  14. 2016/01/09 18:18:07 - 2016-01-09
  15. 2016/01/04 21:58:38 - 2016-01-04
  16. 2016/01/03 18:43:02 - 2016-01-03
  17. 2016/01/03 18:28:07 - 2016-01-03
  18. 2016/01/03 18:20:18 - 2016-01-03
  19. 2016/01/03 18:19:14 - 2016-01-03