Created
November 17, 2009 17:17
-
-
Save kurumigi/237073 to your computer and use it in GitHub Desktop.
[GM Script]AutoPagerize for Haiku (repatched ver)
This file contains 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/ | |
// @include http://h.hatena.ne.jp/* | |
// @include http://h.hatena.com/* | |
// | |
// patched by Constellation | |
// repatched by kurumigi | |
// | |
// ==/UserScript== | |
var THRESHOLD = 800; | |
var w = typeof(unsafeWindow) == 'undefined'? window : unsafeWindow; | |
var p = w.Hatena.Haiku.Pager; | |
var Ten = w.Ten; | |
var enable = true; | |
var appending = false; | |
var lastMaxScrollY = 0; | |
var now = function() { | |
return Number(new Date); | |
}; | |
var pageURL = location.href; | |
p.addEventListener('loadedEntries', function(div) { | |
// calculate next page URL | |
pageURL = function() { | |
if (/\?page=\d+$/.exec(pageURL)) { | |
return pageURL.replace(/(\?page=)(\d+)$/, function(d0, d1, d2) { | |
// ?page=2 -> ?page=3 | |
return d1 + (Number(d2) + 1); | |
}); | |
} else { | |
return pageURL += '?page=2'; | |
} | |
}(); | |
// apply document filters | |
appending = false; | |
dfilters.forEach(function(f){ f(div, pageURL, {}) }); | |
// dispatch 'AutoPagerize_DOMNodeInserted' event | |
var ev1 = document.createEvent('MutationEvent'); | |
ev1.initMutationEvent('AutoPagerize_DOMNodeInserted', true, false, div.parentNode, null, pageURL, null, null); | |
div.dispatchEvent(ev1); | |
// apply filters | |
var page = [div]; | |
filters.forEach(function(f){ f(page) }); | |
// dispatch 'GM_AutoPagerizeNextPageLoaded' event | |
var ev2 = document.createEvent('Event'); | |
ev2.initEvent('GM_AutoPagerizeNextPageLoaded', true, false); | |
document.dispatchEvent(ev2); | |
}); | |
w.addEventListener('scroll', function(ev) { | |
if (!enable) return; | |
if (!appending) { | |
if (((w.scrollMaxY || Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)) - w.scrollY) < THRESHOLD) { | |
lastMaxScrollY = w.scrollMaxY; | |
appending = true; | |
var anchor = Ten.Selector.getElementsBySelector('div.pager:first-child > a:first-child')[0]; | |
var mEv = e = w.document.createEvent('MouseEvents'); | |
mEv.initEvent('click',true,true); | |
anchor.dispatchEvent(mEv); | |
} | |
} | |
}, false); | |
w.addEventListener('dblclick', function(ev) { | |
enable = !enable; | |
}, false); | |
document.addEventListener('AutoPagerizeToggleRequest', function(ev) { | |
enable = !enable; | |
}, false) | |
// AutoPagerize API | |
var filters = []; | |
var dfilters = []; | |
if(typeof(window.AutoPagerize) == 'undefined'){ | |
window.AutoPagerize = {} | |
window.AutoPagerize.addFilter = function(f) { | |
filters.push(f) | |
} | |
window.AutoPagerize.addDocumentFilter = function(f) { | |
dfilters.push(f) | |
} | |
var ev = document.createEvent('Events') | |
ev.initEvent('GM_AutoPagerizeLoaded', false, true) | |
window.dispatchEvent(ev) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment