Greasy Fork is available in English.

Furaffinity Handy Stuff

Helpful hotkeys and various improvements.

// ==UserScript==
// @name         Furaffinity Handy Stuff
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Helpful hotkeys and various improvements.
// @author       eron_gi
// @match        *://www.furaffinity.net/*
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
// @match        *://d.facdn.net/*
// @grant        GM.getValue
// @grant        GM.setValue
//@grant         GM.openInTab
// ==/UserScript==

( function() {
    'use strict';
    var prev, next, left, right, fav;
    //Disables info description icons on images in galleries
    var disableInfoDescriptions = true;
    //Automatically resizes imagse when opened directly(d.facdn.net)
    var resizeImagesAutomatically = true;
    if (window.location.href.includes("furaffinity.net/view/")) {
       prev = document.getElementsByClassName("prev button-link")[0];
       next = document.getElementsByClassName("next button-link")[0];
       var actions = document.getElementsByClassName("alt1 actions aligncenter")[0].childNodes;
       if (actions[3].textContent == "Download") {
           fav = actions[1].childNodes;
       }
       else fav = actions[3].childNodes;
    }

    else if (window.location.href.includes("furaffinity.net/gallery/")) {
        cloneNavBar();
        left = document.getElementsByClassName("button-link left")[0];
        right = document.getElementsByClassName("button-link right")[0];
        removeInfoDescriptions();
    }
    else if (window.location.href.includes("furaffinity.net/browse/")) {
        cloneNavBar();
        left = document.getElementsByClassName("button left")[0];
        right = document.getElementsByClassName("button right")[0];
    }
    else if (window.location.href.includes("furaffinity.net/favorites/")) {
        left = document.getElementsByClassName("button-link left")[0];
        right = document.getElementsByClassName("button-link right")[0];
        removeInfoDescriptions();
    }
    else if (window.location.href.includes("d.facdn.net")) {
        if (resizeImagesAutomatically) resizeImage(document.getElementsByTagName("img")[0])
    }

    window.setTimeout(scroll, 1);
    document.onkeydown = checkKey;


    function checkKey(e) {
        e = e || window.event;
        var e2 = window.event.location;
        //left arrow
        if (e.keyCode == '37') {
            if (next != undefined && window.location.href.includes("furaffinity.net/view/")) {
                window.location.href = next;
            }
            else if (left != undefined && window.location.href.includes("furaffinity.net/browse/")) {
                left.click();
            }
            else if (left.href != undefined) {
                if (window.location.href.includes("furaffinity.net/favorites/") || window.location.href.includes("furaffinity.net/gallery/")) {
                   window.location.href = left;
                }
            }
        }
        //right arrow
        else if (e.keyCode == '39') {
            if (prev != undefined && window.location.href.includes("furaffinity.net/view/")) {
                window.location.href = prev;
            }
            else if (right != undefined && window.location.href.includes("furaffinity.net/browse/")) {
                right.click();
            }
            else if (right.href != undefined) {
                if (window.location.href.includes("furaffinity.net/favorites/") || window.location.href.includes("furaffinity.net/gallery")) {
                    window.location.href = right;
                }
            }
        }
        //numpad zero
        else if (e.keyCode == '96' || e.keyCode == '45') {
            if (window.location.href.includes("furaffinity.net/view/")) {
                GM.setValue("currentURL", window.location.href);
                var direct = document.getElementById("submissionImg").getAttribute("data-fullview-src");
                window.location.href = direct
            }
            else if (window.location.href.includes("d.facdn.net/art/")) {
               gmLink("currentURL");
            }
        }
        //numpad one
        else if (e.keyCode == '97' || e.keyCode == '35') {
            if (window.location.href.includes("d.facdn.net")) {
                var img = document.getElementsByTagName("img")[0];
                resizeImage(img);
            }
        }
        //right shift
        else if (e.keyCode == '17' && e2 == '2') {
            if (window.location.href.includes("furaffinity.net/view/")) {
                if (fav[0].textContent.includes("Add to Favorites")) {
                   window.location.href = fav[0];
                }
            }
        }
        //right ctrl
        else if (e.keyCode == '16' && e2 == '2') {
            if (window.location.href.includes("furaffinity.net/view/")) {
                if (fav[0].textContent.includes("Remove from Favorites")) {
                   window.location.href = fav[0];
                }
            }
        }

    }

    async function gmLink(value) {
        window.location.href = await GM.getValue(value)
    }
    function scroll() {
        if (window.location.href.includes("furaffinity.net/view/")) {
            var img = document.getElementById("submissionImg")
            img.scrollIntoView();
        }
    }
    //Disables info description icons on images in galleries
    function removeInfoDescriptions() {
        if (disableInfoDescriptions = true) {
            var list = document.getElementsByTagName("i")
            for (var i = 0; i < list.length; i++) {
                list[i].remove();
            }
        }
    }
    //Automatically resizes imagse when opened directly(d.facdn.net)
    function resizeImage(img) {
        if (img.style.width != "" || img.style.height != "") {
            img.style.width = "";
            img.style.height = "";
            return;
        }
        var iHeight = img.height, iWidth = img.width;
        var wHeight = window.innerHeight, wWidth = window.innerWidth;
        if (wHeight - iHeight < wWidth - iWidth) {
            img.style.height = "100%";
        }
        else if (wWidth - iWidth < wHeight - iHeight) {
            img.style.width = "100%";
        }
        else img.style.height = "100%"
    }
     //add navbar to top of page in artist gallery
    function cloneNavBar() {
        var navbar, submissions;
        if (window.location.href.includes("furaffinity.net/browse/")) {
            navbar = document.getElementsByClassName("fancy-pagination clearfloat")[0];
            submissions = document.getElementById("gallery-browse");
            submissions.insertBefore(navbar.cloneNode(true), submissions.childNodes[0])
        }
        else if (window.location.href.includes("furaffinity.net/gallery/")) {
            navbar = document.getElementsByClassName("fancy-pagination clearfloat")[0]
            submissions = document.getElementsByClassName("submission-list")[0]
            submissions.insertBefore(navbar.cloneNode(true), submissions.childNodes[0])
        }
    }
})();