http://d.hatena.ne.jp/shinichiro_h/20090818#1250532101
色々足りない.けれど,これ以上サイズの大きいスクリプトが,なぜか動かないので,これ以上いじれない.
はまじさんに直してもらう(か,解決方法を聞く)
公開しちゃえば誰かが直してくれるだろうと思ったら
サイズの大きいスクリプトが"Request-URI Too Large"とでてuploadできない.
ので,はまじさんに直してもらう
しかし,はまじさんがいない
var hah=document._hah;
if(!hah){
hah=document._hah=new Object;
hah.isShown=false;
addEventHandler();
}
var digitChars = "HJKLYUIO";
toggleHitAHint();
function addEventHandler() {
document.body.addEventListener(
'keydown',
function(event) {
if (hah.isShown) {
var key = event.keyCode;
if (key==13) {
document.getElementById('_hah_' + hah.typedText)._hah_link.focus();
toggleHitAHint();
} else if (key>=65&&key<=90) {
var ch = String.fromCharCode(0x41+key-65);
if (document.getElementById('_hah_' + hah.typedText + ch)) {
setHaHColor(hah.typedText, '#dfe');
hah.typedText += ch;
setHaHColor(hah.typedText, 'red');
}
cancelEvent(event);
}
}
}
);
}
function getPos(elem) {
var rect = elem.getBoundingClientRect();
return {top:rect.top + document.body.scrollTop,
left:rect.left + document.body.scrollLeft};
}
function myDigit(d) {
var len = digitChars.length;
var retval = '';
while(d >= 0) {
retval = digitChars[d%len] + retval;
d = Math.floor(d/len)-1;
}
return retval;
}
function cancelEvent(event) {
event.returnValue = false;
event.cancelBubble= true;
}
function toggleHitAHint() {
if (hah.isShown) {
while(1) {
var elems = document.getElementsByClassName('_hah');
if (elems.length == 0) break;
var e = elems[0];
var parent = e.parentNode;
parent.removeChild(e);
}
} else {
hah.typedText = '';
var n = 0;
var nodes = document.links;
for (var i = 0; i < nodes.length; i++ ) {
var node = nodes[i];
var pos = getPos(node);
var e = document.createElement('div');
var text = myDigit(n)
e.innerHTML = text;
e.setAttribute('class', '_hah');
e._hah_link = node;
e.setAttribute('id', '_hah_' + text);
e.setAttribute('style', 'position:absolute;background-color:#cddeee;border: solid 1px #9bbdbe;z-index:100;color:black;font-weight:normal;font-size:10px;letter-spacing:0.2em;padding:0.25em 0.25em;' +
'top:' + pos.top + 'px;left:' + pos.left + 'px;');
document.body.appendChild(e);
n++;
}
}
hah.isShown ^= 1;
}
function setHaHColor(text, color) {
var e = document.getElementById('_hah_' + text);
if(e) e.style.backgroundColor = color;
}