Skip to content

Instantly share code, notes, and snippets.

@kurumigi
Created November 17, 2009 17:17
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 kurumigi/237073 to your computer and use it in GitHub Desktop.
Save kurumigi/237073 to your computer and use it in GitHub Desktop.
[GM Script]AutoPagerize for Haiku (repatched ver)
// ==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