// ==UserScript==
// @name Hatena Bar Modoki
// @namespace http://www.asahi-net.or.jp/~hn9t-fjt/
// @exclude http://*.googlesyndication.com/*
// @exclude http://rcm-jp.amazon.co.jp/*
// @exclude http://mail.google.com/*
// ==/UserScript==
toggleHatenaBar = {};
(function () {
for (var i = 0; window.parent.frames[i]; i++)
if (window.parent.frames[i] == window.self) return;
toggleHatenaBar = togglebar;
var req, bar, visible;
var userID = 'takef'; // ユーザー名を入れる
var icon = {
'?A': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8YQc5m9pqMAAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBw87ExKAKk4AAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAADlJREFUeNpdjskRADAIAqH/pnOAMcL4wHVQAQ4Bu36xwR0LMIDdMVCrXQ84kqCuCniKAk5M0I/l6wsl3QBgRytwkwAAAABJRU5ErkJggg==',
'A!': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8YQc5m9pqMAAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBw87HII/N98AAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAAC9JREFUeNpjYGBEAQwMQIQMGCECYCkGiDxWASALzCFeAG4jA1wASRVWAVSHoTsdACYgAGCFEVqbAAAAAElFTkSuQmCC',
'?B': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8YQc5m9pqMAAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBw87OlAysiIAAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAADpJREFUeNpjYGBEAQwMQIQMGGECUGmIAJjBCMUgCOdABCCKEUYiaQEROATAWpAE4NYyIrkD4TB0pwMAKAIAZKy3nFgAAAAASUVORK5CYII=',
'B!': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8YQc5m9pqMAAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBw87NcCNr7MAAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAADJJREFUeNpjYGBEAQwMQIQMGEECUCkGiDwjlMGIXwBqHLIKEIEhgGQLhgo0M1Adhu50AChVAGRxdwrgAAAAAElFTkSuQmCC',
'?D': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8YQc5m9pqMAAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBw87JkQz7m0AAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAADZJREFUeNpjYGBEAQwMQIQMGGECUGmIAJjBCMUgCOOACEaomcgCCC14BKBaYIZiWovqMHSnAwAnAQBhel5mLAAAAABJRU5ErkJggg==',
'D!': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8YQc5m9pqMAAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBw87Lz3vVskAAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAAC5JREFUeNpjYGBEAQwMQIQMGEECUCkGiDwjlMGIJgAiyBBAsgXDUDRrUR2G7nQAJ0gAYXCyIcoAAAAASUVORK5CYII=',
'R!': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAMAAABcOc2zAAAABlBMVEVEjv8cQsyk3AC/AAAAAXRSTlMAQObYZgAAAAd0SU1FB9UHBwwsGxuemLMAAAAjdEVYdFNvZnR3YXJlAFBJWElBIHNfcG5nLmRsbCBNYXNzYSBWZXIu3Dm3yQAAACtJREFUeNpjYGBEAQwMQIQMGEECUCkGiDwjlMGIX4BYLUi2EDIU1WHoTgcAJ5QAYU60QiEAAAAASUVORK5CYII=',
width: 16, height: 12
};
var favicon = {
a: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBBEeeP0m3AAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAb0lEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFlwSOamGCOfOPo/TAIpdwITPdpjNyK6hjwsoMgDZubjYRMUCcsjTNAxY8NlMl3TAAssHkLRNOmCkNDsDAGgSI+SAiHziAAAAAElFTkSuQmCC",
b: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBBoWldJ3JQAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAcUlEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFmyCOamGmE6efR6rAXhdMGX2ebhGbIYSNIBsL+DzCllewOcNir1A3zDAFpUsuPxOXy9MWf4cmrZJB4yUZmcAthon3ODfYvwAAAAASUVORK5CYII=",
d: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBCAOoxcxCgAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAdElEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFmyCOamGmE6efR6rAXhdMGX2ebhGbIYSNADddmyGUBwGQ8QAmN+xxQQLMRrxRSMLvlCnSxiwwPIBJG2TDhgpzc4Ah9kl3Cr1vXgAAAAASUVORK5CYII=",
f: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBCAD3aZNtwAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAZklEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFlwSOamGqE6efZ40AwhphAGKvUDQgJxUQwzvDDEv0NwAFnL9Tl0XTFn+HJq2SQeMlGZnABEmHeBFYLw/AAAAAElFTkSuQmCC",
graph: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBB83pMyTPgAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAgklEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMpNqck2qIwmciRRO6ZpwGICtE1zxl9nn8BmCzDaYJXTNOF8AUYjMErwHE2orXBcgaCGnGMIAYDUR7gRg2PCmTaghOA8jxAgssH0DSNumAkdLsDAB1FDnqqNcUkAAAAABJRU5ErkJggg==",
g: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBB8df3da6AAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAh0lEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFlwSOamGmM6efR5DjAmf5imzz6NowmYoEz7N+Gwm6AVinE+0AchORzeIiRLbsRoAU4xsK7bAw+sCZEPwacYbBvicTXIYEHTBlOXPoWmbdMBIaXYGACNxMd6n+mYUAAAAAElFTkSuQmCC",
i: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBB8nuXuDWgAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAaUlEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFlwSOamGqE6efR6rOpwuQNaASzNeA4gFowbgMQA5GtGjlKh0gC/qqOoFFlg+gKRt0gEjpdkZAI/jHdzWd8ZqAAAAAElFTkSuQmCC",
map: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBBsgQ3PT/QAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAmUlEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxwA3JSDRGmzz6PVRNMDbI8Cz6FyAYii+WkGjL01EHYTAT9CrUNl6uY8GlEtxmbIUz4bM1JNcSqCVmMCZcELhvRXcWEz3SiExKhmEA2FD2GWEhOgWguZCHF/yRFI0lhMGX5c2jaJh0wUpqdAf08Q9w/YumIAAAAAElFTkSuQmCC",
r: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1QoDBBoFEWw2+wAAACN0RVh0U29mdHdhcmUAUElYSUEgc19wbmcuZGxsIE1hc3NhIFZlci7cObfJAAAAbUlEQVR42mNkYPjPQAlgYWBgYGid/YJkU6Ysf87wfJ8hIwuyACngx+MeBgaGpQxMDBQCFmyCOamGmE6efR6rAXhdMGX2ebhGbIYSNIBsL2DzyuD1wsAbwILL78SkAeq5YMry59C0TTpgpDQ7AwCV+CbYPCrWSgAAAABJRU5ErkJggg==",
width: 16, height: 16
};
init();
function init() {
var d = document.createElement('div');
bar = d;
visible = false;
with (d.style) {
fontSize = 'small';
color = 'black';
backgroundColor = '#EEE';
textAlign = 'left';
position = 'fixed';
top = left = 0
margin = 0;
width = '100%';
borderBottom = 'solid 1px black';
zIndex = 50;
}
var s = d.appendChild(document.createElement('div'));
s.innerHTML = '\u25a0';
s.onclick = togglebar;
with (s.style) {
fontSize = 'medium';
display = 'inline';
}
// 検索フォーム
var action = 'location.href="http://search.hatena.ne.jp/keyword?word="+document.getElementById("bar_input").value';
var f = document.createElement('form');
f.action = 'javascript:'+action;
with (f.style) {
display = 'inline';
padding = '0';
margin = '0';
}
var input = document.createElement('input');
with (input.style) {
padding = '0';
fontSize = '80%';
}
input.id = 'bar_input';
f.appendChild(input);
var btn = document.createElement('button');
btn.style.lineHeight = '100%';
btn.innerHTML = 'Search';
btn.onclick = new Function(action);
f.appendChild(btn);
d.appendChild(f);
d.appendChild(document.createTextNode('||'));
var a = location.href.split('/');
// はてなのユーザー名
var name;
if (location.hostname.indexOf('hatena.ne.jp') > 0) {
name = (a[4] != undefined) ? a[3] : '';
if (name.indexOf('?') > 0) name = '';
}
// アンテナ
d.appendChild(createLink({ image: [icon, '?A'], url: 'http://a.hatena.ne.jp/include?' + location.href }));
var s = document.createElement('span');
s.id = 'hatenabar-antenna';
d.appendChild(s);
d.appendChild(createLink({ image: [icon, 'A!'], url: 'http://a.hatena.ne.jp/append?' + location.href }));
d.appendChild(document.createTextNode('||'));
// ブックマーク
d.appendChild(createLink({ image: [icon, '?B'], url: 'http://b.hatena.ne.jp/entry/' + escape(location.href) }));
s = document.createElement('span');
s.id = 'hatenabar-bookmark';
d.appendChild(s);
d.appendChild(createLink({ image: [icon, 'B!'], url: 'http://b.hatena.ne.jp/add?mode=confirm&title=' + encodeURI(document.title) + '&url=' + escape(location.href) }));
var home = 'http://'+a[2]+'/';
if (name) home += a[3]+'/';
d.appendChild(createLink({ text: '[\u6ce8\u76ee\u8a18\u4e8b]', url: 'http://b.hatena.ne.jp/entrylist?url=' + home }));
d.appendChild(document.createTextNode('||'));
// ダイアリー
d.appendChild(createLink({ image: [icon, '?D'], url: 'http://d.hatena.ne.jp/' + location.href.replace(':', '?') }));
s = document.createElement('span');
s.id = 'hatenabar-diary';
d.appendChild(s);
d.appendChild(createLink({ image: [icon, 'D!'], url: 'http://d.hatena.ne.jp/'+userID+'/edit?appendbody='+escape(''+location.href+'') }));
d.appendChild(document.createTextNode('||'));
// RSS
d.appendChild(createLink({ image: [icon, 'R!'], url: 'http://r.hatena.ne.jp/append/' + location.href }));
// はてなのアイコン
if (!name) name = getHatenaID();
if (name) {
d.appendChild(document.createTextNode('||'));
var s = ['a', 'b', 'd', 'f', 'graph', 'g', 'i', 'map', 'r'];
for (var i = 0; s[i]; i++)
d.appendChild(createLink({ image: [favicon, s[i]], url: 'http://'+s[i]+'.hatena.ne.jp/'+name+'/' }));
d.appendChild(document.createTextNode(' id:'+name));
}
}
function togglebar() {
if (visible)
document.body.removeChild(bar);
else
document.body.appendChild(bar);
visible = !visible;
if (!req) ajaxRequest();
}
function createLink(arg) {
var elm;
if (arg['image']) {
var image = arg['image'];
var w = image[0]['width'];
var h = image[0]['height'];
var src = image[0][image[1]];
elm = document.createElement('img');
elm.src = src;
elm.width = w;
elm.height = h;
with (elm.style) {
margin = '2px';
verticalAlign = 'bottom';
display = 'inline';
}
} else if (arg['text']) {
elm = document.createTextNode(arg['text']);
} else
return;
var a = document.createElement('a');
a.href = arg['url'];
a.appendChild(elm);
return a;
}
function ajaxRequest() {
req = new XMLHttpRequest();
if (req && location.hostname == 'd.hatena.ne.jp') {
req.onreadystatechange = function() {
if (req.readyState == 4) {
var xml = req.responseXML;
if (xml) {
var count = xml.getElementsByTagName('count');
for (var i = 0, c; c = count[i]; i++) {
if (c.hasChildNodes()) {
document.getElementById('hatenabar-'+c.getAttribute('name')).innerHTML = c.childNodes[0].data;
}
}
}
}
};
req.open('GET', 'http://d.hatena.ne.jp/exist?mode=xml&url=' + escape(location.href), true);
req.send('');
}
}
function getHatenaID() {
return traverse(document.getElementsByTagName('head')[0]) || traverse(document.body);
function traverse(elm) {
if (!elm) return;
for (var x = elm.firstChild; x; x = x.nextSibling) {
if (x.nodeName != '#comment') continue;
if (x.nodeValue.match(//)) {
x.nodeValue.match(//);
return RegExp.$1;
}
}
}
}
})();