はてブ追加時に指定したタグを隠す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);
})();