endless summer on anond

    @@ -1,23 +1,10 @@ /* - * @title endless summer on anond - * @description random next link on anond - * @include http://anond.hatelabo.jp/ + * @title AutoPagerize darekagakaku + * @description 自分が書かなければおそらく誰かが書く日記 (http://darekagakaku.herokuapp.com/) 用のAutoPagerize (リンクがないので) + * @include http://darekagakaku.herokuapp.com/v/* * @license reblog commons license ( cc by 3.0 ) */ -/** - * This script is forked from taizooo's "endless summer on dsbd" - * http://let.hatelabo.jp/taizooo/let/gYC-xcz67_6bYQ - */ - -// bookmark -// autopager part from "twitter.AutoPager" : http://userscripts.org/scripts/review/47998 -// random choice part from ReblogMachine : http://reblog.machine.mamemomonga.com/ -// -> ReblogMachine.endless_summer#choice : http://reblog.machine.mamemomonga.com/js/ReblogMachine.js -// history.pushState/history.replaceState : http://d.hatena.ne.jp/javascripter/20100404/1270411268 -// show page regexp from "Tumblr Dashboard Filter by Post Type" : http://userscripts.org/scripts/review/40794 -// Exponential Endless Summer version 2013.08 by saitamanodoruji : http://tumblr.g.hatena.ne.jp/saitamanodoruji/20130831/1377961157 - (function() { var start_url = location.href; @@ -26,13 +13,13 @@ var loading = false; var last_element = (function() { - var a = get_next_elements(document); - return a[a.length - 1]; + var a = document.querySelector('.content'); + return a.childNodes[a.childElementCount - 2]; }()); - var max_page_number = get_max_page_number(document); + var origin = Date.parse('2012-02-17'); - if (!last_element || !max_page_number) { + if (!last_element || !origin) { return error(); } var insert_point = last_element.nextSibling; @@ -50,7 +37,7 @@ function next_page_load() { loading = true; - var next = get_next(start_url); + var next = get_next(location.href); history.pushState("", "", next); console.log('next: ' + next); var x = new XMLHttpRequest(); @@ -95,7 +82,9 @@ } function get_next_elements(doc) { - return Array.apply(null, doc.querySelectorAll('.section')); + var content = doc.querySelector('.content'); + content.removeChild(content.lastChild); + return Array.apply(null, content.childNodes); } function target_rewrite(docs) { @@ -119,21 +108,17 @@ State = false; } - function get_latest_id(doc) { - return doc.evaluate('number(substring-after(//*[@class="section"]/h3/a/@href, "/"))', doc, null, XPathResult.NUMBER_TYPE, null).numberValue; - } - function get_next(url) { - var random_id = Math.floor(Math.random() * max_page_number + 1); - if (isNaN(random_id)) { + var date = url.slice(-10); + time = Date.parse(date); + time -= 86400000; + if (time < origin) { return error(); } - var x = '/' + '?page=' + random_id; + var yesterday = new Date(time).toISOString().slice(0,10); + var x = '/v/' + yesterday; return x; } - function get_max_page_number(doc) { - return doc.evaluate('number(substring-before(//*[@class="pager-r"]/text(), "ページ中"))', doc, null, XPathResult.NUMBER_TYPE, null).numberValue; - } return true; -})(); +})();
  • /*
     * @title AutoPagerize darekagakaku
     * @description 自分が書かなければおそらく誰かが書く日記  (http://darekagakaku.herokuapp.com/) 用のAutoPagerize (リンクがないので)
     * @include http://darekagakaku.herokuapp.com/v/*
     * @license reblog commons license ( cc by 3.0 )
     */
    
    (function() {
        var start_url = location.href;
    
        var State = true;
        var BASE_REMAIN_HEIGHT = 10000;
        var loading = false;
    
        var last_element = (function() {
            var a = document.querySelector('.content');
            return a.childNodes[a.childElementCount - 2];
        }());
    
        var origin = Date.parse('2012-02-17');
    
        if (!last_element || !origin) {
            return error();
        }
        var insert_point = last_element.nextSibling;
        var 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(location.href);
            history.pushState("", "", next);
            console.log('next: ' + 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();
            }
            target_rewrite(docs);
            docs = docs.map(function(doc) {
                return insert_parent.appendChild(document.importNode(doc, true));
            });
            return loading = false;
        }
    
        function get_next_elements(doc) {
            var content = doc.querySelector('.content');
            content.removeChild(content.lastChild);
            return Array.apply(null, content.childNodes);
        }
    
        function target_rewrite(docs) {
            docs.forEach(function(doc) {
                var as = doc.getElementsByTagName('a');
                for (var i = 0, l = as.length; i < l; i++) {
                    var a = as[i],
                        _a = a.getAttribute('href');
                    if (_a && !/^javascript:/.test(_a) && !/^#/.test(_a)) a.setAttribute('target', '_blank');
                }
            });
        }
    
        function error() {
            return console.log('error');
            State = false;
        }
    
        function terminate() {
            return console.log('terminate');
            State = false;
        }
    
        function get_next(url) {
            var date = url.slice(-10);
            time = Date.parse(date);
            time -= 86400000;
            if (time < origin) {
                return error();
            }
            var yesterday = new Date(time).toISOString().slice(0,10);
            var x = '/v/' + yesterday;
            return x;
        }
    
    return true;
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2014/05/11 03:19:27 - 2014-05-11
  2. 2014/05/11 03:17:38 - 2014-05-11
  3. 2014/01/07 21:06:15 - 2014-01-07
  4. 2014/01/07 15:31:13 - 2014-01-07
  5. 2014/01/07 12:21:32 - 2014-01-07