ほぼ完全自動アク禁ブックマークレット2
by
Awn
2017-01-07 [2017/01/07 19:39:10]
@@ -5,6 +5,8 @@
*/
//作った人: Awn
+let osirase = "【ほぼ完全自動アク禁ブックマークレット2】\n\nまだ完成していません><";
+alert(osirase);
(function() {
//class
@@ -26,7 +28,8 @@
//member
- let mo;
+ let _mo;
+ let _form = {};
//initializer
@@ -36,26 +39,28 @@
//function
function _init() {
_embedForm();
+ _setupForm();
_assignEventListener();
- mo = new MutationListener(_execAkukin);
- mo.start();
+ _mo = new MutationListener(_execAkukin);
+ _mo.start();
}
function _assignEventListener() {
ShowBtnEventListener();
SaveBtnEventListener();
+ DeleteBtnEventListener();
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="データを全て消す">';
+ 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.setAttribute("style", "display:none;");
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);
@@ -63,10 +68,51 @@
return;
}
+ /*
+ //note: この関数必要?
+ function _getForm() {
+ let fd = new FormData(document.forms["fm_autoAku"]);
+ let obj = {};
+ for (let [key, value] of fd) {
+ obj[key] = value;
+ }
+ return obj;
+ }
+ */
+
+ function _setupForm() {
+ let form = document.forms["fm_autoAku"];
+ let fd = new FormData(form);
+ let temp;
+ for (let [key, value] of fd) {
+ temp = _getStorage(key);
+ _form[key] = temp;
+ form[key].value = temp;
+ }
+
+ if (_form["enableSpeedLimit"] === "ON") {
+ let target = document.querySelector("#field_speedLimit");
+ target.setAttribute("style", "display:inline;");
+ }
+ }
+
+ 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);
+ console.dir(_form);
+ return;
+ }
+
+
+ /* Event Listener */
function ShowBtnEventListener() {
let elm = document.querySelector("#b_autoAkuShow");
elm.addEventListener("click", function(ev) {
- let form = document.querySelector("#fm_autoAku");
+ let form = document.forms["fm_autoAku"];
let style = form.getAttribute("style");
if (style.includes("none")) {
form.setAttribute("style", "display:block;");
@@ -82,8 +128,25 @@
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);
+ for (let [key, value] of fd) {
+ _form[key] = value;
+ _setStorage(key, value);
+ }
+ });
+ }
+
+ function DeleteBtnEventListener() {
+ let elm = document.querySelector("#b_autoAkuDelete");
+ elm.addEventListener("click", function(ev) {
+ if (confirm("消しますか?")) {
+ let form = document.forms["fm_autoAku"];
+ let fd = new FormData(form);
+ for (let [key, value] of fd) {
+ _removeStorage(key);
+ }
+ form.reset();
+ let target = document.querySelector("#field_speedLimit");
+ target.setAttribute("style", "display:none;");
}
});
}
@@ -100,20 +163,6 @@
});
}
- 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) {
@@ -121,7 +170,7 @@
}
function _setStorage(key, val) {
- localStorage.setItem(key.val);
+ localStorage.setItem(key, val);
}
function _removeStorage(key) {
/*
* @title ほぼ完全自動アク禁ブックマークレット2
* @include http://*.open2ch.net
* @license MIT License
*/
//作った人: Awn
let osirase = "【ほぼ完全自動アク禁ブックマークレット2】\n\nまだ完成していません><";
alert(osirase);
(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;
let _form = {};
//initializer
_init();
//function
function _init() {
_embedForm();
_setupForm();
_assignEventListener();
_mo = new MutationListener(_execAkukin);
_mo.start();
}
function _assignEventListener() {
ShowBtnEventListener();
SaveBtnEventListener();
DeleteBtnEventListener();
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:none;");
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;
}
/*
//note: この関数必要?
function _getForm() {
let fd = new FormData(document.forms["fm_autoAku"]);
let obj = {};
for (let [key, value] of fd) {
obj[key] = value;
}
return obj;
}
*/
function _setupForm() {
let form = document.forms["fm_autoAku"];
let fd = new FormData(form);
let temp;
for (let [key, value] of fd) {
temp = _getStorage(key);
_form[key] = temp;
form[key].value = temp;
}
if (_form["enableSpeedLimit"] === "ON") {
let target = document.querySelector("#field_speedLimit");
target.setAttribute("style", "display:inline;");
}
}
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);
console.dir(_form);
return;
}
/* Event Listener */
function ShowBtnEventListener() {
let elm = document.querySelector("#b_autoAkuShow");
elm.addEventListener("click", function(ev) {
let form = document.forms["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 [key, value] of fd) {
_form[key] = value;
_setStorage(key, value);
}
});
}
function DeleteBtnEventListener() {
let elm = document.querySelector("#b_autoAkuDelete");
elm.addEventListener("click", function(ev) {
if (confirm("消しますか?")) {
let form = document.forms["fm_autoAku"];
let fd = new FormData(form);
for (let [key, value] of fd) {
_removeStorage(key);
}
form.reset();
let target = document.querySelector("#field_speedLimit");
target.setAttribute("style", "display:none;");
}
});
}
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;");
});
}
/* 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 です。