imgur scroll to gallery images keyboard shortcuts

use ↑/↓ to scroll to the next/previous image within an imgur gallery

// ==UserScript==
// @name         imgur scroll to gallery images keyboard shortcuts
// @namespace    http://porath.org/
// @version      0.13
// @description  use ↑/↓ to scroll to the next/previous image within an imgur gallery
// @author       porath
// @match        http://imgur.com/*
// @grant        none
// ==/UserScript==

// thanks to moiph and CBenni and Brybry

var current = 0;
var elems = $('.album-image');
var numElems = elems.length;

$(document).on('keydown', function (key) {
    if (key.which == 40) {
        key.preventDefault();
        
        if (current + 1 == numElems) {
            if ($('#album-truncated')) {
                $('#album-truncated > a').click();
                
                window.setTimeout(function() { // wait 200 ms then update the album size
                    elems = $('.album-image');
                    numElems = elems.length;
                }, 200);
            }
            
            return;
        }
        
        elems[current + 1].scrollIntoView();
        $('body').scrollTop($('body').scrollTop() - 28);
        current = current + 1;
    }
    
    if (key.which == 38) {
        key.preventDefault();
        
        if (current == 0) {
            return;
        }
        
        elems[current - 1].scrollIntoView();
        $('body').scrollTop($('body').scrollTop() - 28);
        current = current - 1;
    }
    
    if (key.which == 36) { // "home" puts you at the top of the gallery
        current = 0;
    }
    
    if (key.which == 35) { // "end" puts you at the bottom of the gallery
        current = numElems;
    }
    
    if (key.which == 37 || key.which == 39) { // when a user presses left or right to go to the prev/next page
        current = 0;
        elems = $('.album-image');
        numElems = elems.length;
    }
});