くずはスクリプト用キーショートカット追加スクリプ㌧

del.icio.us のヤツのオリジナル。
バックアップ用に貼っとく。暫定は見に行ってないから動かなくても知らないです。

// ==UserScript==
// @name           Qwerty Shortcut Key Appender
// @namespace      http://qwerty.on.arena.ne.jp
// @include        http://qwerty.on.arena.ne.jp/*, http://533.pr.arena.ne.jp/*
// ==/UserScript==

(function () {
	var posts;
	var form;
	var keyMap;
	var marginTop;
	var w = unsafeWindow;
	var _onload = w.onload;
	
	w.onload = function() {
		if (_onload) _onload();
		onload();
	}

	var onload = function () {
		InitTags();
		InitShortCuts();
	}
		
	function InitTags() {
		posts = document.anchors;
		marginTop = document.getElementsByTagName("body")[0].childNodes[1].offsetTop;
		
		var tags = document.getElementsByTagName("form");
		form = tags[0];
	}

	function InitShortCuts() {
		keyMap = new Array();
		keyMap["k".charCodeAt(0)] = FindPrevious;
		keyMap["j".charCodeAt(0)] = FindNext;
		keyMap["r".charCodeAt(0)] = Reload;
		
		document.addEventListener("keypress", HandleKeyEvent, false); 
	}
		
	function HandleKeyEvent(event) {
		var charCode = event.which;
		var handler = keyMap[charCode];
		if (handler) handler(event);
	}
	
	function GetOffsetTop(source) {	
		return (source.offsetParent) ? GetOffsetTop(source.offsetParent) + source.offsetTop : source.offsetTop;
	}
	
	function FindPrevious(event) {
		var pos = pageYOffset + 20;
		var post = posts[0];
		for (var i=0; i<posts.length; i++) {
			if (GetOffsetTop(posts[i]) >= pos) {
				break;
			}
			post = posts[i];
		}
		
		w.scrollTo(0, GetOffsetTop(post) - 20);
	}

	function FindNext(event) {
		var pos = pageYOffset + 20;
		var post = posts[0];
		for (var i=0; i<posts.length; i++) {
			post = posts[i];
			if (GetOffsetTop(posts[i]) > pos) {
				break;
			}
		}
		
		w.scrollTo(0, GetOffsetTop(post) - 20);
	}
	
	function Reload(event) {
		form.submit();
	}

})();