Created
June 24, 2012 05:46
-
-
Save saitamanodoruji/2981824 to your computer and use it in GitHub Desktop.
Modify HatenaB Keybind
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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