ほぼ完全自動アク禁ブックマークレット2

    @@ -15,12 +15,12 @@ this.mo = new MutationObserver(f); } - start(){ - this.mo.observe(this.target, this.option); + start() { + this.mo.observe(this.target, this.option); } - stop(){ - this.mo.disconnect(); + stop() { + this.mo.disconnect(); } } @@ -36,24 +36,29 @@ //function function _init() { _embedForm(); - ShowBtnEventListener(); - SaveBtnEventListener(); + _assignEventListener(); mo = new MutationListener(_execAkukin); mo.start(); } + function _assignEventListener() { + ShowBtnEventListener(); + SaveBtnEventListener(); + SpeedLimitRadioBtnEventListener(); + } + function _embedForm() { let section = document.createElement("section"); section.setAttribute("id", "autoAkuSection"); - section.innerHTML = '<hr><h2 style="color:red;">自動アク禁設定</h2><input type="button" name="b_autoAkuShow" id="b_autoAkuShow" value="閉じる">'; + section.innerHTML = '<hr><h2 style="color:red;">自動アク禁設定</h2><input type="button" name="b_autoAkuShow" id="b_autoAkuShow" value="閉じる"> <input type="button" name="b_autoAkuDelete" id="b_autoAkuDelete" value="データを全て消す">'; - let phorm = document.createElement("form"); - phorm.setAttribute("name", "fm_autoAku"); - phorm.setAttribute("id", "fm_autoAku"); - phorm.setAttribute("style", "display:block;"); - phorm.innerHTML = '<fieldset><legend>自動投稿する時の名前とメール欄と本文</legend><label>名前:<input type="text" size="40" name="autoAku_defaultName" placeholder="(省略化)自動アク禁用の名前"></label><br><label>mail:<input type="text" size="40" name="autoAku_defaultMail" placeholder="(省略化)自動アク禁用のmail"></label><br><textarea rows="5" cols="56" name="autoAku_defaultText" placeholder="ここに書いたメッセージに!aku42といったアク禁コマンドが自動で足されます。"></textarea></fieldset><fieldset><legend>自動アク禁キーワード設定</legend><label>アク禁ワード↓<br><textarea rows="5" cols="56" name="autoAku_words" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁ネーム↓<br><textarea rows="5" cols="56" name="autoAku_names" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁メール↓<br><textarea rows="5" cols="56" name="autoAku_mails" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁id↓<br><textarea rows="5" cols="56" name="autoAku_ids" placeholder="改行区切りで入力"></textarea><br></label></fieldset><fieldset><legend>その他の設定</legend>正規表現を利用する:<input type="radio" name="enableRegexp" value="OFF" checked>OFF<input type="radio" name="enableRegexp" value="ON">ON<br>アク禁を実行する :<input type="radio" name="enableAkukin" value="OFF" checked>OFF<input type="radio" name="enableAkukin" value="ON">ON</fieldset><input type="button" id="b_autoAkuSave" name="b_autoAkuSave" value="アク禁設定を保存する">'; + let form = document.createElement("form"); + form.setAttribute("name", "fm_autoAku"); + form.setAttribute("id", "fm_autoAku"); + form.setAttribute("style", "display:block;"); + form.innerHTML = '<fieldset><legend>自動アク禁投稿で使用する名前とmailと本文</legend><label>名前:<input type="text" size="40" name="autoAku_defaultName" placeholder="(省略化)自動アク禁用の名前"></label><br><label>mail:<input type="text" size="40" name="autoAku_defaultMail" placeholder="(省略化)自動アク禁用のmail"></label><br><textarea rows="5" cols="56" name="autoAku_defaultText" placeholder="(省略可)ここに書いたメッセージに!aku42といったアク禁コマンドが自動で足されます。"></textarea></fieldset><fieldset><legend>自動アク禁キーワード設定</legend><label>アク禁ワード↓<br><textarea rows="5" cols="56" name="autoAku_words" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁ネーム↓<br><textarea rows="5" cols="56" name="autoAku_names" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁メール↓<br><textarea rows="5" cols="56" name="autoAku_mails" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁id↓<br><textarea rows="5" cols="56" name="autoAku_ids" placeholder="改行区切りで入力"></textarea><br></label></fieldset><fieldset><legend>その他の設定</legend>投稿間隔でアク禁:<input type="radio" name="enableSpeedLimit" value="OFF" checked>OFF<input type="radio" name="enableSpeedLimit" value="ON">ON<span id="field_speedLimit" style="display:none;"><input type="number" size="10" min="1" max="3600" name="autoAku_speedLimit" value="1">秒未満の間隔で投稿するidをアク禁する</span><br>正規表現を利用する:<input type="radio" name="enableRegexp" value="OFF" checked>OFF<input type="radio" name="enableRegexp" value="ON">ON<br>アク禁を実行する :<input type="radio" name="enableAkukin" value="OFF" checked>OFF<input type="radio" name="enableAkukin" value="ON">ON</fieldset><input type="button" id="b_autoAkuSave" name="b_autoAkuSave" value="アク禁設定を保存する">'; document.body.appendChild(section); - section.appendChild(phorm); + section.appendChild(form); return; } @@ -83,9 +88,27 @@ }); } + function SpeedLimitRadioBtnEventListener() { + let limit_on = document.querySelector("input[type='radio'][name='enableSpeedLimit'][value='ON']"); + let limit_off = document.querySelector("input[type='radio'][name='enableSpeedLimit'][value='OFF']"); + let target = document.querySelector("#field_speedLimit"); + limit_on.addEventListener("click", function(ev) { + target.setAttribute("style", "display:inline;"); + }); + limit_off.addEventListener("click", function(ev) { + target.setAttribute("style", "display:none;"); + }); + } + function _execAkukin(record) { - let newres = record[0].addedNodes; - console.log(newres); + let dl = record[0].addedNodes[0]; + //note: dlの中にdt, ddは1組以上含まれる可能性がある + let dts = dl.querySelectorAll("dt"); + let dds = dl.querySelectorAll("dd"); + console.dir(dts); + console.dir(dds); + + return; }
  • /*
     * @title ほぼ完全自動アク禁ブックマークレット2
     * @include http://*.open2ch.net
     * @license MIT License
     */
    //作った人: Awn
    
    
    (function() {
        //class
        class MutationListener {
            constructor(f) {
                this.target = document.querySelector("div.thread");
                this.option = { childList: true };
                this.mo = new MutationObserver(f);
            }
    
            start() {
                this.mo.observe(this.target, this.option);
            }
    
            stop() {
                this.mo.disconnect();
            }
        }
    
    
        //member
        let mo;
    
    
        //initializer
        _init();
    
    
        //function
        function _init() {
            _embedForm();
            _assignEventListener();
            mo = new MutationListener(_execAkukin);
            mo.start();
        }
    
        function _assignEventListener() {
            ShowBtnEventListener();
            SaveBtnEventListener();
            SpeedLimitRadioBtnEventListener();
        }
    
        function _embedForm() {
            let section = document.createElement("section");
            section.setAttribute("id", "autoAkuSection");
            section.innerHTML = '<hr><h2 style="color:red;">自動アク禁設定</h2><input type="button" name="b_autoAkuShow" id="b_autoAkuShow" value="閉じる"> <input type="button" name="b_autoAkuDelete" id="b_autoAkuDelete" value="データを全て消す">';
    
            let form = document.createElement("form");
            form.setAttribute("name", "fm_autoAku");
            form.setAttribute("id", "fm_autoAku");
            form.setAttribute("style", "display:block;");
            form.innerHTML = '<fieldset><legend>自動アク禁投稿で使用する名前とmailと本文</legend><label>名前:<input type="text" size="40" name="autoAku_defaultName" placeholder="(省略化)自動アク禁用の名前"></label><br><label>mail:<input type="text" size="40" name="autoAku_defaultMail" placeholder="(省略化)自動アク禁用のmail"></label><br><textarea rows="5" cols="56" name="autoAku_defaultText" placeholder="(省略可)ここに書いたメッセージに!aku42といったアク禁コマンドが自動で足されます。"></textarea></fieldset><fieldset><legend>自動アク禁キーワード設定</legend><label>アク禁ワード↓<br><textarea rows="5" cols="56" name="autoAku_words" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁ネーム↓<br><textarea rows="5" cols="56" name="autoAku_names" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁メール↓<br><textarea rows="5" cols="56" name="autoAku_mails" placeholder="改行区切りで入力"></textarea><br></label><label>アク禁id↓<br><textarea rows="5" cols="56" name="autoAku_ids" placeholder="改行区切りで入力"></textarea><br></label></fieldset><fieldset><legend>その他の設定</legend>投稿間隔でアク禁:<input type="radio" name="enableSpeedLimit" value="OFF" checked>OFF<input type="radio" name="enableSpeedLimit" value="ON">ON<span id="field_speedLimit" style="display:none;"><input type="number" size="10" min="1" max="3600" name="autoAku_speedLimit" value="1">秒未満の間隔で投稿するidをアク禁する</span><br>正規表現を利用する:<input type="radio" name="enableRegexp" value="OFF" checked>OFF<input type="radio" name="enableRegexp" value="ON">ON<br>アク禁を実行する :<input type="radio" name="enableAkukin" value="OFF" checked>OFF<input type="radio" name="enableAkukin" value="ON">ON</fieldset><input type="button" id="b_autoAkuSave" name="b_autoAkuSave" value="アク禁設定を保存する">';
            document.body.appendChild(section);
            section.appendChild(form);
    
            return;
        }
    
        function ShowBtnEventListener() {
            let elm = document.querySelector("#b_autoAkuShow");
            elm.addEventListener("click", function(ev) {
                let form = document.querySelector("#fm_autoAku");
                let style = form.getAttribute("style");
                if (style.includes("none")) {
                    form.setAttribute("style", "display:block;");
                    elm.value = "開じる";
                } else {
                    form.setAttribute("style", "display:none;");
                    elm.value = "開く";
                }
            });
        }
    
        function SaveBtnEventListener() {
            let elm = document.querySelector("#b_autoAkuSave");
            elm.addEventListener("click", function(ev) {
                let fd = new FormData(ev.target.form);
                for (let value of fd) {
                    console.log(value);
                }
            });
        }
    
        function SpeedLimitRadioBtnEventListener() {
            let limit_on = document.querySelector("input[type='radio'][name='enableSpeedLimit'][value='ON']");
            let limit_off = document.querySelector("input[type='radio'][name='enableSpeedLimit'][value='OFF']");
            let target = document.querySelector("#field_speedLimit");
            limit_on.addEventListener("click", function(ev) {
                target.setAttribute("style", "display:inline;");
            });
            limit_off.addEventListener("click", function(ev) {
                target.setAttribute("style", "display:none;");
            });
        }
    
        function _execAkukin(record) {
            let dl = record[0].addedNodes[0];
            //note: dlの中にdt, ddは1組以上含まれる可能性がある
            let dts = dl.querySelectorAll("dt");
            let dds = dl.querySelectorAll("dd");
            console.dir(dts);
            console.dir(dds);
    
            return;
        }
    
    
        /* function like tool*/
    
    
        /* wrapper function */
        function _getStorage(key) {
            return localStorage.getItem(key);
        }
    
        function _setStorage(key, val) {
            localStorage.setItem(key.val);
        }
    
        function _removeStorage(key) {
            return localStorage.removeItem(key);
        }
    
        return;
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2017/01/07 19:39:10 - 2017-01-07
  2. 2017/01/07 19:36:41 - 2017-01-07
  3. 2017/01/07 19:19:23 - 2017-01-07
  4. 2017/01/07 19:05:51 - 2017-01-07
  5. 2017/01/07 18:56:24 - 2017-01-07
  6. 2017/01/07 05:45:10 - 2017-01-07
  7. 2017/01/06 03:07:29 - 2017-01-06
  8. 2017/01/06 02:55:51 - 2017-01-06
  9. 2017/01/06 00:26:19 - 2017-01-06
  10. 2017/01/05 23:46:52 - 2017-01-05
  11. 2017/01/05 00:04:58 - 2017-01-05
  12. 2017/01/04 04:07:48 - 2017-01-04
  13. 2017/01/03 23:47:17 - 2017-01-03