Created
February 22, 2009 13:24
-
-
Save Griever/68466 to your computer and use it in GitHub Desktop.
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== | |
// @name ScrollFunctions.uc.js | |
// @namespace http://d.hatena.ne.jp/Griever/ | |
// @include main | |
// ==/UserScript== | |
/* | |
引数で指定したピクセルだけウインドウをスクロールする。 | |
キャレットブラウズモードの時はスクロール量が1行に固定される | |
keyconfig 等で pixelScroll.up(200); を実行する | |
要素にスクロールバーがあってもウインドウしかスクロールしない問題あり | |
*/ | |
var pixelScroll = { | |
isCaret : function(){ | |
return Cc["@mozilla.org/preferences-service;1"] | |
.getService(Components.interfaces.nsIPrefBranch) | |
.getBoolPref('accessibility.browsewithcaret') | |
}, | |
up : function (num){ | |
if (this.isCaret() || !num){ | |
goDoCommand('cmd_scrollLineUp'); | |
return; | |
} | |
var aWindow = document.commandDispatcher.focusedWindow; | |
aWindow.scrollBy(0, -num); | |
}, | |
down : function (num){ | |
if (this.isCaret() || !num){ | |
goDoCommand('cmd_scrollLineDown'); | |
return; | |
} | |
var aWindow = document.commandDispatcher.focusedWindow; | |
aWindow.scrollBy(0, num); | |
}, | |
left : function (num){ | |
if (this.isCaret() || !num){ | |
goDoCommand('cmd_scrollLeft'); | |
return; | |
} | |
var aWindow = document.commandDispatcher.focusedWindow; | |
aWindow.scrollBy(-num, 0); | |
}, | |
right : function (num){ | |
if (this.isCaret() || !num){ | |
goDoCommand('cmd_scrollRight'); | |
return; | |
} | |
var aWindow = document.commandDispatcher.focusedWindow; | |
aWindow.scrollBy(num, 0); | |
}, | |
}; | |
/* | |
半画面スクロールを再現する | |
キャレットブラウズモードの時は PageUp/PageDown が実行される(キャレットが付いてこないため) | |
keyconfig 等で halfScroll.up(); を実行する | |
要素にスクロールバーがあってもウインドウしかスクロールしない問題あり | |
*/ | |
var halfScroll = { | |
isCaret : function(){ | |
return Cc["@mozilla.org/preferences-service;1"] | |
.getService(Components.interfaces.nsIPrefBranch) | |
.getBoolPref('accessibility.browsewithcaret') | |
}, | |
up : function (){ | |
if (this.isCaret()){ | |
goDoCommand('cmd_scrollPageDown'); | |
return; | |
} | |
var aWindow = document.commandDispatcher.focusedWindow; | |
aWindow.scrollBy(0, parseInt(aWindow.innerHeight/-2)); | |
}, | |
down : function (){ | |
if (this.isCaret()){ | |
goDoCommand('cmd_scrollPageDown'); | |
return; | |
} | |
var aWindow = document.commandDispatcher.focusedWindow; | |
aWindow.scrollBy(0, parseInt(aWindow.innerHeight/2)); | |
}, | |
}; | |
/* | |
引数で指定した回数だけスクロールコマンドを実行する。 | |
キャレットブラウズモードの時はスクロール量が 1 に固定される | |
keyconfig 等で repeatScroll.up(5); を実行する | |
*/ | |
var repeatScroll = { | |
isCaret : function(){ | |
return Cc["@mozilla.org/preferences-service;1"] | |
.getService(Components.interfaces.nsIPrefBranch) | |
.getBoolPref('accessibility.browsewithcaret') | |
}, | |
up : function (num){ | |
if (this.isCaret() || !num) num = 1; | |
for (var i = 0; i < num; i++) | |
goDoCommand('cmd_scrollLineUp'); | |
}, | |
down : function (num){ | |
if (this.isCaret() || !num) num = 1; | |
for (var i = 0; i < num; i++) | |
goDoCommand('cmd_scrollLineDown'); | |
}, | |
left : function (num){ | |
if (this.isCaret() || !num) num = 1; | |
for (var i = 0; i < num; i++) | |
goDoCommand('cmd_scrollLeft'); | |
}, | |
right : function (num){ | |
if (this.isCaret() || !num) num = 1; | |
for (var i = 0; i < num; i++) | |
goDoCommand('cmd_scrollRight'); | |
} | |
}; | |
/* | |
引数で指定した回数だけスクロールコマンドを実行する | |
キャレットブラウズモードの時はリンクにフォーカスが合った時にスクロールを止める | |
keyconfig 等で caretNavigation.up(8); を実行する | |
高速スクロール&空間ナビゲーションをイメージしたもの | |
*/ | |
var caretNavigation = { | |
defaultScrollNums : 8, | |
isCaret : function(){ | |
return Cc["@mozilla.org/preferences-service;1"] | |
.getService(Components.interfaces.nsIPrefBranch) | |
.getBoolPref('accessibility.browsewithcaret') | |
}, | |
up : function (num){ | |
var caretMode = this.isCaret() | |
if (!num) num = this.defaultScrollNums; | |
for (var i = 0; i < num; i++){ | |
goDoCommand('cmd_scrollLineUp'); | |
if (caretMode && content.document.activeElement.localName == 'A') | |
break; | |
} | |
}, | |
down : function (num){ | |
var caretMode = this.isCaret() | |
if (!num) num = this.defaultScrollNums; | |
for (var i = 0; i < num; i++){ | |
goDoCommand('cmd_scrollLineDown'); | |
if (caretMode && content.document.activeElement.localName == 'A') | |
break; | |
} | |
}, | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment