-
-
Save os0x/2409 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 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); |
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
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