/*
* @title endless summer on dsbd
* @description presentation version
* @include http://www.tumblr.com/*
* @license reblog commons license ( cc by 3.0 )
*/
var re = /(?:^http:\/\/www\.tumblr\.com\/dashboard|(?:\/blog\/[-\w]+)?\/show\/\w+|\/blog\/[-\w]+)/;
var now_url = location.href;
var oldest_id = 264102; // http://ku.tumblr.com/post/264102
var latest_id = get_latest_id(document);
var State = true;
var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
var BASE_REMAIN_HEIGHT = 4000;
var loading = false;
var last_element = get_next_elements(document).pop();
if (!last_element) {
return error();
}
insert_point = last_element.nextSibling;
insert_parent = last_element.parentNode;
next_page_load();
window.addEventListener('scroll', function () {
if (loading) return;
var remain = document.documentElement.scrollHeight - window.innerHeight - window.pageYOffset;
if (State && remain < BASE_REMAIN_HEIGHT) {
next_page_load();
}
}, false);
function next_page_load() {
loading = true;
var next = get_next(now_url);
console.log(next);
var x = new XMLHttpRequest();
x.onload = function () {
if (x.status <= 200 && x.status < 300) {
load(x);
} else {
error();
next_page_load();
}
};
x.open('GET', next, true);
x.send(null);
}
function load(x) {
var html = x.responseText.replace(/<script(?:[ \t\r\n][^>]*)?>[\S\s]*?<\/script[ \t\r\n]*>|<\/?(?:i?frame|html|script|object)(?:[ \t\r\n][^<>]*)?>/gi, ' ');
var htmlDoc;
if (document.implementation.createHTMLDocument) {
htmlDoc = document.implementation.createHTMLDocument('hogehoge')
} else {
htmlDoc = document.cloneNode(false);
if (htmlDoc) {
htmlDoc.appendChild(htmlDoc.importNode(document.documentElement, false));
} else {
htmlDoc = document.implementation.createDocument(null, 'html', null);
}
}
var range = document.createRange();
range.selectNodeContents(document.documentElement);
htmlDoc.documentElement.appendChild(range.createContextualFragment(html));
var docs = get_next_elements(htmlDoc);
if (!docs.length) {
error();
return next_page_load();
}
docs = docs.map(function (doc) {
return insert_parent.insertBefore(document.importNode(doc, true), insert_point);
});
loading = false;
}
function get_next_elements(doc) {
var r = doc.evaluate('id("posts")/li[starts-with(@id,"post_")]', doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0, l = r.snapshotLength, res = new Array(l); i < l; i++) res[i] = r.snapshotItem(i);
return res;
}
function error() {
return console.log('error');
State = false;
}
function terminate() {
return console.log('terminate');
State = false;
}
function get_latest_id(doc) {
return doc.evaluate('number(substring-after(id("posts")/li[starts-with(@id,"post_")]/@id,"post_"))', doc, null, XPathResult.NUMBER_TYPE, null).numberValue;
}
function get_next(url) {
var rumdom_id = getRandom();
return re.exec(url)[0] + '/2?offset=' + rumdom_id;
}
function getRandom() {
var a = [
{ 'year' : '2007'
, 'min' : 765
, 'max' : 22716604
, 'url' : 'http://kagurazakaundergroundresistance.tumblr.com/post/22716604'
},
{ 'year' : '2008'
, 'min' : 22716605
, 'max' : 67666062
, 'url' : 'http://kagurazakaundergroundresistance.tumblr.com/post/67666062'
},
{ 'year' : '2009'
, 'min' : 67666063
, 'max' : 309781568
, 'url' : 'http://kagurazakaundergroundresistance.tumblr.com/post/309781568'
},
{ 'year' : '2010'
, 'min' : 309781569
, 'max' : 2542121207
, 'url' : 'http://kagurazakaundergroundresistance.tumblr.com/post/2542121207'
},
{ 'year' : '2011'
, 'min' : 2542121208
, 'max' : 15080900593
, 'url' : 'http://kagurazakaundergroundresistance.tumblr.com/post/15080900593'
},
{ 'year' : 'now'
, 'min' : 15080900593
, 'max' : latest_id
, 'url' : 'http://kagurazakaundergroundresistance.tumblr.com/post/19893333892'
}
];
var c = Math.floor(Math.random() * a.length);
var d = Math.floor(Math.random() * (a[c].max - a[c].min + 1)) + a[c].min;
if ( d < oldest_id ) {
return choice();
}
console.log([d, a[c].year, a[c].max, a[c].min, c]);
return d;
}