福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

はてブ追加時に指定したタグを隠すGreasemonkey

最近つけたタグ強調Greasemonkey(キャッシュする版) を使っていたんですけど、 思ったほど便利ではないので、 それを作る前に作った、指定したタグを隠すGreasemonkeyを改良することにしました。 自分で指定したタグを覚えておいて、それを隠します。

インストールすると、はてブの追加ページに、 テキストフィールドが出ます。 ここに無視するタグを半角カンマ区切りで入力して、 保存ボタンを押すと、そのタグが登録されて、 選択のところには表示されなくなります。

登録はこちらから。

最初の版はスクリプト内で無視リストを指定していたんですね。 これはこれでアリだとは思うんですが、 今回編集機能をつけたことで、 「何を指定しようが俺は知らんよ」感が強化されていい感じです。

ただ「最近つけたタグ強調」とは違って、 結局自分で無視タグを管理しなければならなくて、 やっぱり「手がかかる」感は残るので、それは嫌ですね。

// ==UserScript==
 // @name        Hanena Bookmark Ignore Tags Filter
 // @namespace   http://fuktommy.com/js/
 // @description Ignore tags user set.
 // @include     http://b.hatena.ne.jp/add?mode=confirm&*
 // ==/UserScript==
 
 // Copyright (c) 2008 Satoshi Fukutomi <info@fuktommy.com>.
 // http://fuktommy.com/js/hatebu_ignore_tags.user.js
 // Distributed under new BSD license
 // http://fuktommy.com/bsdl
 
 (function() {
     var button = document.createElement('button');
 
     var saveForm = document.createElement('form');
     var saveText = document.createElement('input');
     var saveButton = document.createElement('button');
 
     var ignoreTable = {};
     var ignoreTagsString = '';
 
     function loadIgnoreTags() {
         var tags = GM_getValue('tags', '').split('[]');
         for (var i=tags.length-1; i>=0; i--) {
             var tag = decodeURIComponent(tags[i]);
             ignoreTable[tag] = true;
             if (ignoreTagsString == '') {
                 ignoreTagsString = tag;
             } else {
                 ignoreTagsString += ', ' + tag;
             }
         }
     }
 
     function saveIgnoreTags() {
         ignoreTable = {};
         var tags = saveText.value.split(/, */);
         var data = '';
         for (var i=tags.length-1; i>=0; i--) {
             if (data == '') {
                 data = encodeURIComponent(tags[i]);
             } else {
                 data += '[]' + encodeURIComponent(tags[i]);
             }
             ignoreTable[tags[i]] = true;
         }
         GM_setValue('tags', data);
         hideTags();
         saveForm.appendChild(document.createTextNode('保存しました。'));
     }
 
     function displayTags() {
         var span = document.getElementById('tags_list').getElementsByTagName('span');
         for (var i=span.length-1; i>=0; i--) {
              span[i].style.display = 'inline';
         }
         button.innerHTML = 'タグを隠す';
         button.removeEventListener('click', displayTags, false);
         button.addEventListener('click', hideTags, false);
     }
 
     function hideTags() {
         var span = document.getElementById('tags_list').getElementsByTagName('span');
         for (var i=span.length-1; i>=0; i--) {
             var tag = span[i].innerHTML;
             if (ignoreTable[tag]) {
                 span[i].style.display = 'none';
             } else {
                 span[i].style.display = 'inline';
             }
         }
         button.innerHTML = '全タグを表示';
         button.removeEventListener('click', hideTags, false);
         button.addEventListener('click', displayTags, false);
     }
 
     function init() {
         document.getElementById('tags_list').appendChild(button);
         document.getElementById('tags_list').appendChild(saveForm);
 
         button.innerHTML = '全タグを表示';
         button.type = 'button';
 
         saveText.size = 100;
         saveButton.innerHTML = '無視タグを保存';
         saveButton.type = 'button';
         saveForm.appendChild(saveText);
         saveForm.appendChild(saveButton);
 
         loadIgnoreTags();
         hideTags();
 
         saveText.value = ignoreTagsString;
         saveButton.addEventListener('click', saveIgnoreTags, false);
     }
 
     window.addEventListener('load', init, false);
 })();

Original Article: http://blog.fuktommy.com/1214104782