chieNG

Yahoo! 知恵袋の邪魔な質問を非表示にします (Alt + N キーで設定画面)

  1. // ==UserScript==
  2. // @name chieNG
  3. // @namespace http://chiebukuro.yahoo.co.jp/my/gbjyn273
  4. // @author Syakku
  5. // @description Yahoo! 知恵袋の邪魔な質問を非表示にします (Alt + N キーで設定画面)
  6. // @match *://chiebukuro.yahoo.co.jp/dir/list*
  7. // @version 2.2
  8. // @grant GM_getValue
  9. // @grant GM_setValue
  10. // @grant GM_deleteValue
  11. // @run-at document-end
  12. // ==/UserScript==
  13.  
  14. var _NG = "";
  15. var _shoki = "意外と知らない; http://note; 大喜利; クイズ"
  16.  
  17. main();
  18.  
  19. // ================≪ メイン処理 ≫================
  20. function main(){
  21. _NG = GM_getValue("chieNG");
  22. if (typeof _NG == "undefined" || _NG == "") firstRun();
  23. if (_NG == " ") return;
  24. var _list =_NG.split("; ");
  25. var _qalst = document.getElementById("qalst");
  26. var _li = _qalst.getElementsByTagName("li");
  27.  
  28. list: for (l=0; l<_li.length; l++){
  29. var _a = _li[l].getElementsByTagName("a");
  30. for (m=0; m<_a.length; m++){
  31. for (n=0; n<_NG.length; n++){
  32. if (_a[m].text.indexOf(_list[n]) != -1){
  33. _li[l].style.display = "none";
  34. continue list;
  35. }
  36. }
  37. }
  38. }
  39. }
  40.  
  41.  
  42. // ================≪ ホットキー ≫================
  43. document.addEventListener("keydown", function(event){
  44. if (event.altKey && event.keyCode == 78) { // code78 : n
  45. _NG = GM_getValue("chieNG");
  46. if (typeof _NG == "undefined" || _NG == " ") _NG = "";
  47. switch (prompt("1 : NGをリストに追加\n2 : NGをリストから削除\n3 : NGリストを直接編集", 1)){
  48. case "1":
  49. while (true){
  50. var _add = prompt ("【" +_NG + "】\n\n追加するNGワード :");
  51. if (_add != "" && _add != null) {
  52. if (_NG != "") _NG += "; ";
  53. _NG += _add;
  54. GM_setValue("chieNG", _NG);
  55. alert("【" + _add + "】 を追加しました");
  56. } else {break;}
  57. }
  58. break;
  59. case "2":
  60. var _list =_NG.split("; ");
  61.  
  62. while(true) {
  63. var _del = prompt ("【" + addNum(_list) + "】\n\n削除するNGワードの番号 :");
  64. if (_del == null) {
  65. break;
  66. } else if (_del.match(/[^0-9]+/)){
  67. alert("数値を入力してください");
  68. } else if (_del > _list.length - 1){
  69. alert("存在しない番号です");
  70. } else {
  71. var _t = _list[_del];
  72. if (confirm("【" + _t + "】 を削除しますか?")) {
  73. _list.splice(_del, 1);
  74. _NG = _list.join("; ");
  75. GM_setValue("chieNG", _NG);
  76. alert("【" + _t + "】 を削除しました");
  77.  
  78. } else {
  79. alert("キャンセルされました");
  80. }
  81. }
  82. }
  83.  
  84. break;
  85. case "3":
  86. while (true){
  87. var _direct = prompt("* 区切り文字はセミコロン ( ; ) + 半角スペース ( ) です", _NG);
  88. if (_direct == null) break;
  89. if (_direct != "") {
  90. var _da = _direct.split("; ");
  91. if (confirm("【" + addNum(_da) + "】\n\nこの内容で上書きしますか?")){
  92. _NG = _direct;
  93. GM_setValue("chieNG", _NG);
  94. alert("上書きしました");
  95. break;
  96. }
  97. } else {
  98. if (confirm("空白の文字列が入力されました\nNGリストを初期化しますか?")){
  99. _NG = "";
  100. GM_deleteValue("chieNG");
  101. alert("初期化しました");
  102. break;
  103. }
  104. }
  105. }
  106. break;
  107. }
  108. }
  109. }, true);
  110.  
  111.  
  112. // ================≪ 引数の配列に先頭数字を付けて繋げて返す関数 ≫================
  113. function addNum(_ar){
  114. var _view = "";
  115. var _k = (_ar.length - 1 + "").length * -1;
  116. for (l=0; l<_ar.length; l++){
  117. _view += "["+ l + "] " + _ar[l] + " ";
  118. }
  119. _view = _view.trimRight();
  120. return(_view);
  121. }
  122.  
  123. // ================≪ 初回起動 ≫================
  124. function firstRun(){
  125. if (confirm("保存されたNGリストが見つかりませんでした\n初期リストを読み込みますか?\n\n【" + _shoki + "】")){
  126. _NG = _shoki;
  127. alert("初期リストを読み込みました");
  128. } else {
  129. _NG = " ";
  130. }
  131. GM_setValue("chieNG", _NG);
  132. }