Homeunstuck

adds homestuck navigation and pages remaining

目前为 2016-04-17 提交的版本。查看 最新版本

// ==UserScript==
// @name        Homeunstuck
// @namespace   abrad45
// @description adds homestuck navigation and pages remaining
// @include     http://www.mspaintadventures.com/*
// @include     http://mspaintadventures.com/*
// @require     https://code.jquery.com/jquery-2.2.3.min.js
// @require     https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.1.1/js.cookie.js
// @version     1.3.0
// @grant       none
// @history     1.0     20121125 - Initial Release
// @history     1.0.1   20121202 - Modified `endings` to include page 7411, End of A6I4
// @history     1.0.2   20121204 - Changed erroneous ending page number of A6I4 from 7441 to 7411
// @history     1.0.3   20130113 - Modified `endings` to include page 7613, End of A6A5A1
// @history     1.0.4   20130414 - Modified `endings` to remove page 7613, and add 7826 and 8135
// @history     1.1     20130415 - Formatting Changes; Enabled Keyboard Navigation with Left/Right Arrows
// @history     1.2     20130421 - Includes "You've not saved since comic ##" notification
// @history     1.3     20160416 - We're back! Formatting, final update to `endings`, jquery version bump and switch from jquery-cookie to js-cookie.

// ==/UserScript==

$(function () {
    if (/s=6/.test(window.location.search)) {
        var URL = window.location.search;
        var root = URL.substr(0,URL.length-4);
        var comic = +URL.substr(-4);
        var firstPage = 1901;
        var lastPage = 10028;

        if (!comic) {
            root = "?s=6&p=00";
            comic = 1901;
        }

        var nextURL = '/' + root + (+comic+1);
        var prevURL = '/' + root + (+comic-1);

        // starting from the top so I can display nothing if there is no end to the current act
        var endings = [
            2147,       // End of Act I
            2658,       // End of Act II
            3053,       // End of Act III
            3257,       // End of Intermission 1
            3888,       // End of Act IV
            4525,       // End of Act V Act I
            6010,       // End of Act V
            6012,       // End of Intermission 2
            6184,       // End of Act VI Act I
            6290,       // End of Act VI Intermission 1
            6566,       // End of Act VI Act II
            6716,       // End of Act VI Intermission 2
            7162,       // End of Act VI Act III
            7337,       // End of Act VI Intermission 3
            7339,       // End of Act VI Act IV
            7411,       // End of Act VI Intermission 4
            7826,       // End of Act VI Act V
            8135,       // End of Act VI Intermission 5
            8177,       // End of Act VI Act VI Act I
            8374,       // End of Act VI Act VI Intermission 1
            8430,       // End of Act VI Act VI Act II
            8752,       // End of Act VI Act VI Intermission 2
            8801,       // End of Act VI Act VI Act III
            8820,       // End of Act VI Act VI Intermission 3
            8843,       // End of Act VI Act VI Act IV
            9308,       // End of Act VI Act VI Intermission 4
            9348,       // End of Act VI Act VI Act V
            9986,       // End of Act VI Act VI Intermission 5
            10026,      // End of Act VI Act VI Act VI
            10028       // End of Act VI
        ];

        // Find out which part of the story we're in
        var currentStorySection = endings.length;
        while(comic < endings[--currentStorySection]) {}
        // We've gone too far. Course correct!
        currentStorySection++;

        $('table[width=600]')
            .first()
            .parent()
                .css('position', 'relative')
                .prepend(
                    $('<div />', {
                        'id': 'homeunstuck',
                        'css': {
                            'position': 'absolute',
                            'left': '35px',
                            'width': '100px',
                        }
                    })
                );

        $('#homeunstuck')
            .append(
                $('<a />', {
                    'id': 'homeunstuck-prev',
                    'href': prevURL,
                    'html': '&#8592;',
                    'css': { 'margin-right': '10px' }
                })
            ).append(
                $('<a />', {
                    'id': 'homeunstuck-next',
                    'href': nextURL,
                    'html': '&#8594;',
                })
            );

        if (comic === firstPage) {
            $('#homeunstuck-prev').remove();
        } else if(comic === lastPage) {
            $('#homeunstuck-next').remove();
        }

        if (!isNaN(endings[currentStorySection] - comic)) {
            $('#homeunstuck')
                .append($('<div />', {
                    'text': endings[currentStorySection] - comic + ' left',
                    'id': 'homeunstuck_pages_left'
                })
            );
        }

        var story = Cookies.get('s_cookie');
        var page = Cookies.get('p_cookie');

        if (
            !!story &&
            !!page &&
            Number(story) === 6 &&
            (comic - page.substr(-4) > 24)
        ) {
            $('#homeunstuck').append(
                $('<div />',
                    {
                        'text': "You've not saved since comic " + Cookies.get('p_cookie').substr(-4),
                        'css': {
                            'color': '#900',
                            'font-weight': 'bold'
                        }
                    }
                )
            );
        }

        $(window).keyup(function (e) {
            if (e.which === 37) {
                window.location = prevURL;
            } else if (e.which === 39) {
                window.location = nextURL;
            }
        });
    }
});