keydownイベント
キーの押し下げでカレンダの表示/非表示を切り替える からkeydownイベント処理の関数を引用。
/** * documentに対するkeydownイベントの処理設定をする。 * 第1引数でキーを指定し、 * 第2引数で指定されたキーが押し下げられたときに実行する関数を指定する。 * ただし、INPUT要素、TEXTAREA要素に対するキーイベントの場合は何もしない。 */ var keybind = (function(){ function add (phrase, func){ if(phrase instanceof Array){ phrase.forEach(function(p){ add(p, func); }); } else { document.addEventListener("keydown", function(event){ var tagName = event.target.tagName; if(phrase == code(event) && !tagName.match(/(INPUT|TEXTAREA)/i)){ func(); event.preventDefault(); event.stopPropagation(); } }, true); } } function code(event){ var code = []; if(event.shiftKey){ code.push("S"); } else if(event.ctrlKey){ code.push("C"); } else if(event.altKey || event.metaKey){ code.push("M"); } code.push(kc2char(event.keyCode)); return code.join("-"); function kc2char(kc){ function between(a,b){ return a <= kc && kc <= b; } var _32_40 = "space pageup pagedown end home left up right down".split(" "); var kt = { 8 : "backspace", 9 : "tab" , 13 : "enter", 16 : "shift", 17 : "control", 27 : "escape", 46 : "delete", }; return (between(65,90) ? String.fromCharCode(kc+32) : // a-z between(48,57) ? String.fromCharCode(kc) : // 0-9 between(96,105) ? String.fromCharCode(kc-48) : // num 0-9 between(32,40) ? _32_40[kc-32] : kt.hasOwnProperty(kc) ? kt[kc] : kc); } } return add; })();
JavaScript 初心者な私とってこれは便利。ありがたく拝借させていただこう。
#なんで何やってるか不明な部分が多いけどそれはキチンと調べておこう
で、さっそく Web Diff+GreaseMonkey で作成したスクリプトに、Shift+c でボタン「Web Diff」クリックを割り当てたらみごとに動作したした!うぉー、すげぇ!
ソース
// ==UserScript== // @name webdiff_clean // @description clean diff word and result // @include http://labs.ceek.jp/diff/diff.cgi // ==/UserScript== // clean ボタンの定義 var button_clean = document.createElement("input"); button_clean.setAttribute("type", "button"); button_clean.setAttribute("name", "clean"); button_clean.setAttribute("value", "clean"); button_clean.addEventListener('click', function(){ reset(); }, true); var div_button_clean = document.createElement("div"); div_button_clean.appendChild(button_clean); document.body.insertBefore(div_button_clean, document.body.lastChild); /** * documentに対するkeydownイベントの処理設定をする。 * 第1引数でキーを指定し、 * 第2引数で指定されたキーが押し下げられたときに実行する関数を指定する。 * ただし、INPUT要素、TEXTAREA要素に対するキーイベントの場合は何もしない。 */ var keybind = (function(){ function add (phrase, func){ if(phrase instanceof Array){ phrase.forEach(function(p){ add(p, func); }); } else { document.addEventListener("keydown", function(event){ var tagName = event.target.tagName; if(phrase == code(event) && !tagName.match(/(INPUT|TEXTAREA)/i)){ func(); event.preventDefault(); event.stopPropagation(); } }, true); } } function code(event){ var code = []; if(event.shiftKey){ code.push("S"); } else if(event.ctrlKey){ code.push("C"); } else if(event.altKey || event.metaKey){ code.push("M"); } code.push(kc2char(event.keyCode)); return code.join("-"); function kc2char(kc){ function between(a,b){ return a <= kc && kc <= b; } var _32_40 = "space pageup pagedown end home left up right down".split(" "); var kt = { 8 : "backspace", 9 : "tab" , 13 : "enter", 16 : "shift", 17 : "control", 27 : "escape", 46 : "delete", }; return (between(65,90) ? String.fromCharCode(kc+32) : // a-z between(48,57) ? String.fromCharCode(kc) : // 0-9 between(96,105) ? String.fromCharCode(kc-48) : // num 0-9 between(32,40) ? _32_40[kc-32] : kt.hasOwnProperty(kc) ? kt[kc] : kc); } } return add; })(); /** * 文字列をクリアし、Web Diffボタンをクリックする。 */ function reset(){ document.getElementsByName("input_1").item(0).value = ""; document.getElementsByName("input_2").item(0).value = ""; document.getElementsByTagName('form').item(0).submit(); } keybind("S-c", reset);