Thread Navigating by Arrow keys

Use ← or → and Ctrl to navigate to previous, next, first or last page

Versione datata 13/12/2014. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name        Thread Navigating by Arrow keys
// @version     3.1
// @author      theheroofvn
// @namespace   https://greasyfork.org/scripts/6849-next-prev-by-arrow-key
// @include     /^.*(thread|forum).*$/
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
// @run-at      document-start
// @grant       none
// @description Use ← or → and Ctrl to navigate to previous, next, first or last page
// ==/UserScript==

$(document).ready(function() {
    var detect_forum,
        prev, next, first, last,
        up, up_sub = '[itemtype="http://data-vocabulary.org/Breadcrumb"] > a';
    if ($('script[src*="vbulletin"]').length > 0) {
        detect_forum = 'v';
        prev = 'a[rel="prev"]';
        next = 'a[rel="next"]';
        first = 'a[rel="start"]';
        last = 'a[title^="Last"], a[title*="uối"]';
        up = 'span.navbar a, li.navbit a';
    } else if ($('script[src*="xenforo"]').length > 0) {
        detect_forum = 'x';
        prev = '.PageNav a.text:first-child';
        next = last = '.PageNav a.text:last-child';
        first = 'a[rel="start"]';
        up = 'a.crumb';
    } else return;
    var multi = {
            17: false,
            8: false,
            37: false,
            39: false
        },
        multi1 = {
            17: false,
            8: false
        },
        multi2 = {
            17: false,
            37: false
        },
        multi3 = {
            17: false,
            39: false
        };
    var target = {
        prev: $(prev)[0],
        next: $(next)[0],
        first: $(first)[0],
        last: function() {
            if (detect_forum == 'v') return $(last)[0];
            else if (detect_forum == 'x') return $(last).prev()[0];
        },
        up: function() {
            return ($(up).length > 0) ? $(up).last()[0] : $(up_sub).last()[0];
        }
    };
    $(window).keydown(function(event) {
        var key = event.keyCode,
            action = null,
            link;
        if (key in multi) multi[key] = true; else return;
        if (key in multi1) {
            if (multi[17] && multi[8]) action = "up";
        } else if (key in multi2) {
            if (!multi[17] && multi[37]) action = "prev";
            else if (multi[17] && multi[37]) action = "first";
        } else if (key in multi3) {
            if (!multi[17] && multi[39]) action = "next";
            else if (multi[17] && multi[39]) action = "last";
        }
        if (!action || event.target.tagName == "INPUT" || event.target.tagName == "TEXTAREA") return;
        if (typeof target[action] === "function") link = target[action](); else link = target[action];
        window.location = link.href;
    }).keyup(function(event) {
        if (event.keyCode in multi) multi[event.keyCode] = false;
    });
});