// ==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) }