Better Gallections

Do horizontal folders bother you? What about those huge titles and wasted space?

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        Better Gallections
// @version     4.0.1
// @description Do horizontal folders bother you? What about those huge titles and wasted space?
// @author      Valognir (https://www.deviantart.com/valognir)
// @namespace   https://greasyfork.org/en/scripts/404189-better-gallections
// @grant       GM_addStyle
// @run-at      document-start

// @match       https://www.deviantart.com/*
// @exclude     https://www.deviantart.com/_nsfgfb/?realEstateId=*

// ==/UserScript==

(function() {
    'use strict';

    var folderlinks;
    var folderscontainer;

    function changeLayout() {
        folderscontainer = folderlinks[0].parentNode.parentNode;
        folderscontainer.style.width = '250px';
        folderscontainer.style.height = 'calc(100vh - 140px)';
        folderscontainer.style.maxHeight = 'calc(100vh - 121px)';
        folderscontainer.style.overflow = 'hidden scroll';
        folderscontainer.style.scrollbarWidth = 'thin';
        folderscontainer.style.scrollbarColor = 'rgba(155, 155, 155, 0.5) transparent';
        folderscontainer.style.display = 'inline-block';
        folderscontainer.style.verticalAlign = 'top';

        var folderssection = folderscontainer.parentNode;
        folderssection.style.width = '250px';
        folderssection.style.margin = '-39px 0 0 -290px';
        folderssection.style.padding = '0 8px 0 0';
        folderssection.style.overflow = 'hidden';
        folderssection.style.float = 'left';
        folderssection.style.height = 'auto';
        folderssection.style.position = 'sticky';
        folderssection.style.top = '130px';

        if (folderssection.parentNode.id === 'content') {
            folderssection.parentNode.parentNode.removeAttribute("style");
        }

        var contentcontainer = folderssection.parentNode;
        contentcontainer.style.width = 'calc(100% - 290px)';
        contentcontainer.style.minHeight = '100vh';
        contentcontainer.style.marginLeft = '290px';

        var lrbuttons = folderssection.querySelectorAll('button[aria-hidden="true"]');
        lrbuttons.forEach(function(element) {
            element.style.display = 'none'
        });

        folderlinks.forEach(function(element) {

            if (element.querySelector('span:last-child')) {
                if (element.querySelector('span:last-child').textContent.trim() === "0 deviations") {
                    element.style.opacity = '0.5';
                }
            }

            var folder = element.parentNode;
            folder.style.margin = '0 0 16px';
            folder.style.overflow = 'hidden';

            if (!element.classList.contains('BGclickerAttached')) {

                element.classList.add('BGclickerAttached');
                element.addEventListener("click", function() {
                    window.scrollTo(0, 335);
                });
            }

            if (element.querySelector('img')) { // Thumbnail
                var folderimg = element.querySelector('img');
                folderimg.style.height = '227px';
            } else if (element.querySelector('section')) { // Text
                folderimg = element.querySelector('section');
                folderimg.style.height = '210px';
                folderimg.style.paddingTop = '30px';
                folderimg.style.justifyContent = 'flex-start';
            } else if (element.querySelector('div > div > div[style]')) { // Empty
                folderimg = element.querySelector('div > div > div[style]');
                folderimg.style.height = '227px';
            }
            if (folderimg) {
                folderimg.style.width = '248px';
                var folderimgcontainer = folderimg.parentNode;
                folderimgcontainer.style.width = '248px';
                folderimgcontainer.style.height = '210px';
                folderimgcontainer.style.borderRadius = '4px';
            }

            var foldertitle = element.firstElementChild.lastElementChild;
            foldertitle.style.margin = '-60px 0 0 0';
            foldertitle.style.textShadow = `0 0 5px ${bgcolor}`;
            var bgcolor = getComputedStyle(foldertitle).getPropertyValue('--g-bg-secondary');
            foldertitle.firstElementChild.style.padding = '4px 10px';
            foldertitle.firstElementChild.style.background = `linear-gradient(132deg, ${bgcolor} 0%, ${bgcolor}40 70%, transparent 88%)`;
            element.firstElementChild.style.padding = '0';

            var ughlit = element.querySelector('section[data-type="nano"]');
            if (ughlit) {
                console.log("AAAAA");
                ughlit.style.paddingTop = "0px";
                ughlit.querySelector('div:last-child>div:last-child').style.fontSize = '14px';
                ughlit.querySelector('div:last-child>div:last-child').style.marginTop = '15px';
                ughlit.querySelector('div:last-child>div:last-child').style.display = "-webkit-box";
                ughlit.querySelector('div:last-child>div:last-child').style.webkitBoxOrient = "vertical";
                ughlit.querySelector('div:last-child>div:last-child').style.webkitLineClamp = "2";
                ughlit.querySelector('div:last-child>div:last-child').style.textOverflow = 'ellipsis';
                ughlit.querySelector('div:first-child').style.flex = 'unset';
                ughlit.querySelector('div:first-child').style.height = '50px';
                ughlit.querySelector('div:first-child h3').style.fontSize = '20px';
            }
        });
    }

    function waitForFolders() {
        folderlinks = document.querySelectorAll('section>a[href*="/gallery/"], section>a[href*="/favourites/"], section>a[href*="/private-collections/"]');
        if (folderlinks.length > 0) {
            changeLayout();
        } else {
            setTimeout(waitForFolders, 100);
        }
    }

    function onmutation(mutations) {
        checkForGallection();
    }

    function checkForGallection() {
        if (window.location.pathname.includes("/gallery") || window.location.pathname.includes("/favourites") || window.location.pathname.includes("/private-collections")) {
            waitForFolders();
        }
    }

    checkForGallection();
    document.addEventListener("click", () => {
        setTimeout(() => {
            checkForGallection();
        }, 100);
    });

    document.addEventListener("keydown", (e) => {
        if (e.key === "Enter") {

            setTimeout(() => {
                checkForGallection();
            }, 100);
        }
    });

    window.addEventListener('popstate', function (event) {
        setTimeout(() => {
            checkForGallection();
        }, 100);
    });

    window.addEventListener('popstate', function (event) {
        setTimeout(() => {
            checkForGallection();
        }, 100);
    });
})();