Skip to content

Instantly share code, notes, and snippets.

@saitamanodoruji
Created June 24, 2012 05:46
Show Gist options
  • Save saitamanodoruji/2981824 to your computer and use it in GitHub Desktop.
Save saitamanodoruji/2981824 to your computer and use it in GitHub Desktop.
Modify HatenaB Keybind
// ==UserScript==
// @id Modify HatenaB Keybind
// @name Modify HatenaB Keybind
// @version 0.0.7
// @namespace http://b.hatena.ne.jp/saitamanodoruji
// @author saitamanodoruji
// @description はてなブックマークのショートカットキーを追加・変更する
// @include http://b.hatena.ne.jp/*
// @run-at document-end
// @compatibility Firefox 13.0.1 (Scriptish 0.1.7) on Windows XP SP3
// ==/UserScript==
// added keybind
// h: 「みんなのブックマーク」を開く
// m: 省略されたコメントの表示・非表示を切り替え
// c: コメント編集
// d: ブックマークを削除
// o, e はバックグラウンドで開くように変更
// o で開いたときには次のアイテムに移動する
(function executeModifyHatenaBKeybind(doc) {
var Hatena = unsafeWindow.Hatena;
var Ten = unsafeWindow.Ten;
var nav = Hatena.Bookmark.navigator;
var keypressHandlerMod = function(e) {
var aElm = doc.activeElement;
if ( (aElm.nodeName.toLowerCase() == 'input' && aElm.type == 'text')
|| aElm.nodeName.toLowerCase() == 'textarea') return;
var tag = e.target.tagName.toUpperCase();
var pos = Ten.Geometry.getScroll();
if ( tag == 'HTML' || 'BODY' || 'DIV' ) {
if ( e.altKey || e.ctrlKey || e.metaKey || e.shiftKey ) return;
var keyCode = e.charCode || e.keyCode;
var c = String.fromCharCode(e.charCode || e.keyCode);
if ( keyCode == 13 ) c = 'o'; //enter
switch( c ) {
case 'j':
if ( Hatena.y != pos.y ) {
nav.getNearElements();
nav.moveToNear();
Hatena.y = pos.y;
} else {
nav.next();
pos = Ten.Geometry.getScroll();
}
Hatena.y = pos.y
break;
case 'k':
if ( Hatena.y != pos.y ) {
nav.getNearElements();
nav.moveToNear();
Hatena.y = pos.y;
} else {
nav.prev();
pos = Ten.Geometry.getScroll();
}
Hatena.y = pos.y
break;
case 's':
nav.globalSearch();
break;
case 'b':
nav.showAppender();
break;
case 'o':
if ( Hatena.y != pos.y ) {
nav.getNearElements();
nav.moveToNear();
Hatena.y = pos.y;
} else {
GM_openInTab(nav.getURL(nav.getCurrentElement()), true);
nav.next();
pos = Ten.Geometry.getScroll();
}
Hatena.y = pos.y
break;
case 'e':
GM_openInTab('http://b.hatena.ne.jp/entry/'
+ nav.getURL(nav.getCurrentElement()), true);
break;
case 'h':
GM_openInTab('http://b.hatena.ne.jp/entry?mode=more&url='
+ encodeURIComponent(nav.getURL(nav.getCurrentElement()).replace(/\?tag=hatena-bu-22$/, '')), true);
break;
case 'm':
var currentItem = nav.getCurrentElement().parentNode;
if ( /show-all-comment/.test(currentItem.className) ) {
Ten.DOM.removeClassName(currentItem, 'show-all-comment');
} else {
Ten.DOM.addClassName(currentItem, 'show-all-comment');
}
nav.elementPositions.splice(nav.caretIndex + 1, nav.elementPositions.length);
break;
case 'c':
Hatena.Bookmark.CommentEditor.edit(
nav.getCurrentElement().parentNode.querySelector('.inplace-edit-icon'),
nav.getURL(nav.getCurrentElement())
);
break;
case 'd':
Hatena.Bookmark.CommentEditor.deleteIconClick(
nav.getCurrentElement().parentNode.querySelector('.inplace-delete-icon')
);
break;
}
}
}
doc.addEventListener('DOMNodeInserted', function modifyKeybind(e) {
if ( nav.keyboard ) {
nav.keyboard.unregisterEventListeners();
doc.addEventListener('keypress', keypressHandlerMod, false);
doc.removeEventListener('DOMNodeInserted', modifyKeybind);
}
}, false);
})(document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment