Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save os0x/2409 to your computer and use it in GitHub Desktop.
Save os0x/2409 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Autopagerize for haiku
// @namespace http://rails2u.com/
// @description works on Firefox, Opera, Safari and fub.net
// @include http://h.hatena.ne.jp/*
// @include http://h.hatena.com/*
// ==/UserScript==
(function(unsafeWindow){
var getHeight = (function(){
if (window.scrollMaxY) {
return function(){return window.scrollMaxY;}
} else {
return function(){return document.documentElement.scrollHeight - document.documentElement.clientHeight;}
}
})();
var getScroll = (function(){
if (!isNaN(window.pageYOffset-0)) {
return function(){return window.pageYOffset;}
} else {
return function(){return document.documentElement.scrollTop;}
}
})();
var addEvent = (function(){
if (unsafeWindow.addEventListener) {
return function(e,t,f,c){
e.addEventListener(t,f,c);
}
} else if (unsafeWindow.attachEvent) {
return function(e,t,f,c){
e.attachEvent('on'+t,f);
}
}
})();
var THRESHOLD = 800;
var Pager = unsafeWindow.Hatena.Haiku.Pager;
var Ten = unsafeWindow.Ten;
var enable = true;
var appending = false;
setTimeout(function(){
Pager["addEventListener"]('loadedEntries', function() { appending = false;});
},100);
addEvent(window,'scroll', function(ev) {
if (!enable || appending) return;
if ((getHeight() - getScroll()) < THRESHOLD) {
appending = true;
var anchor = Ten.Selector.getElementsBySelector('div.pager:first-child > a:first-child')[0];
if (document.createEvent) {
var mEv = document.createEvent('MouseEvents');
mEv.initEvent('click',true,true);
anchor.dispatchEvent(mEv);
} else if (document.createEventObject) {
var mEv = document.createEventObject();
mEv.target=anchor;
anchor.fireEvent("onclick",mEv);
}
}
}, false);
addEvent(window,'dblclick', function(ev) {
enable = !enable;
}, false);
})(this.unsafeWindow || window.unsafeWindow || window);
window.scrollMaxY は Firefox Only 、Firefox以外は、document.documentElement.scrollHeight - document.documentElement.clientHeight
window.pageYOffset は Firefox,Opera,Safari 、IEのみdocument.documentElement.scrollTop
IE以外は addEventListener 、IEは attachEvent
<del>なぜか、Pager.addEventListener('loadedEntries', function() { appending = false;});がfub.netでこけるので、仕方なく_eventListenersに直接push。fub.netかどうかはwindowにunsafeWindowを持っているかどうかで判定。</del>
<ins>fub先生にaddEventListenerって文字列が使えない理由( http://twitter.com/fub/statuses/868066190 )を教えてもらって、["addEventListener"](..に変更。</ins>
IE以外はcreateEvent & dispatchEventで、IEのみcreateEventObject & fireEvent
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment