Skin Manager (gota.io)

Just a simple script that helps you manage your skins.

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

You will need to install an extension such as Tampermonkey to install this 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         Skin Manager (gota.io)
// @namespace    http://tampermonkey.net/
// @version      0.63
// @description  Just a simple script that helps you manage your skins.
// @author       Amy
// @match        https://skins.gota.io/skins
// @downloadUrl
// @icon         https://skin-data.gota.io/e6e200b3-5e6d-406f-8ab6-0338f4ba09cf.png
// @resource     IMPORTED_CSS https://raw.githubusercontent.com/Aymayy/css-files/main/style.css
// @grant        GM_getResourceText
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    'use strict';
    const my_css = GM_getResourceText("IMPORTED_CSS");
    GM_addStyle(my_css);
    const local__storage = window.localStorage;
    const default__skin__size = 250;
    const default__cols = 5;
    const container__of__container = document.querySelector('.px-8.py-3.border-t.border-gray-700');
    const submit__button = document.querySelector('.button.is-primary');
    let gallery__skins__data = {};
    let gallery__skins = {};
    let searched__gallery__skins = {};
    let skin__data = {};
    let skin__elements = {};
    let searched__skins = {};
    let gallery__state = false;
    let skin__code = '';
    let bottom__scrolls = 1;
    let skins__each__scroll = 50;
    let is__sorted = false;
    let randomized__skins = {};
    let randomized__gallery__skins = {};


    //Create and Add and Remove DOM elements
    const container__header = document.querySelector('.flex.justify-between')
    const navbar = document.querySelector('nav');


    const remove__element = container__header.querySelector('.flex.items-center');
    remove__element.remove();

    const submit__button__parent = submit__button.parentElement;
    submit__button__parent.classList.add('submit__button__parent');

    const myskins__container = document.querySelector('.grid.grid-cols-4.gap-4');
    myskins__container.classList.add('myskins__container');


    const skinSliderString = `<div class="slider-container" style="display: flex; justify-content: space-between; align-items: center; width: 15rem;"><label>Size</label><input type="range" min="50" max="1000" value="${default__skin__size}" class="slider skinSlider" id="myRange"><span class="skinSpan">${default__skin__size}</span></div>`;
    const columsSliderString = `<div class="slider-container" style="display: flex; justify-content: space-between; align-items: center; width: 15rem;"><label>Cols</label><input type="range" min="1" max="25" value="${default__cols}" class="slider colSlider" id="myRange"><span class="colSpan">${default__cols}</span></div>`;
    const searchInputString = `<div class="form__group field"><input type="input" class="search__input form__field" autocapitalize="off" spellcheck="false" placeholder="Search" name="name" id='name' required /><label for="name" class="form__label">Search</label></div>`;
    const sortButtonString = `<button class="corner-button"><span>Sort</span></button>`;
    const galleryString = `<a class="gallery__icon__container flex items-center"><svg class="gallery__icon" height="30pt" viewBox="1 -47 511.999 511" width="30pt" xmlns="http://www.w3.org/2000/svg"><path d="m469.488281 84.417969h-4.390625c-2.570312-22.023438-20.292968-39.484375-42.441406-41.621094-2.542969-23.742187-22.683594-42.296875-47.085938-42.296875h-302.21875c-40.445312 0-73.351562 32.90625-73.351562 73.347656v211.902344c0 24.574219 18.804688 44.828125 42.773438 47.144531 2.515624 23.488281 22.261718 41.886719 46.3125 42.273438.0625 4.167969.714843 8.191406 1.898437 11.988281 5.386719 17.292969 21.550781 29.882812 40.59375 29.882812h337.910156c23.441407 0 42.511719-19.070312 42.511719-42.507812v-247.601562c0-23.441407-19.070312-42.511719-42.511719-42.511719zm22.511719 42.511719v163.738281l-43.5-32.859375c-11.886719-8.976563-27.960938-9.117188-40-.347656l-55.027344 40.09375-104.9375-108.1875c-12.5-12.890626-32.839844-13.683594-46.304687-1.800782l-93.160157 82.191406v-142.828124c0-12.414063 10.097657-22.511719 22.507813-22.511719h337.910156c12.414063 0 22.511719 10.097656 22.511719 22.511719zm0 247.597656c0 12.414062-10.097656 22.511718-22.507812 22.511718h-337.914063c-10.082031 0-18.640625-6.667968-21.492187-15.824218-.660157-2.113282-1.015626-4.359375-1.015626-6.683594v-78.105469l106.394532-93.863281c5.441406-4.804688 13.660156-4.484375 18.714844.726562l47.359374 48.828126c0 .003906 0 .003906.003907.003906l94.261719 97.183594c1.960937 2.023437 4.566406 3.039062 7.179687 3.039062 2.507813 0 5.019531-.9375 6.960937-2.820312 3.960938-3.847657 4.058594-10.175782.214844-14.140626l-22.625-23.328124 52.742188-38.425782c4.867187-3.546875 11.363281-3.492187 16.167968.136719l55.554688 41.964844zm-429.5-46.707032v-236.109374c0-1.003907.050781-2 .152344-2.976563 1.492187-14.675781 13.925781-26.164063 28.988281-26.164063h122.320313c5.523437 0 10-4.476562 10-10 0-5.523437-4.476563-10-10-10h-122.320313c-27.097656 0-49.140625 22.042969-49.140625 49.140626v220.976562c-12.777344-2.300781-22.5-13.503906-22.5-26.9375v-211.902344c0-29.414062 23.933594-53.347656 53.351562-53.347656h302.21875c13.273438 0 24.371094 9.503906 26.84375 22.070312h-108.453124c-5.523438 0-10 4.476563-10 10 0 5.523438 4.476562 10 10 10h118.96875.011718 5.128906c13.195313 0 24.242188 9.394532 26.800782 21.847657h-313.292969c-23.4375 0-42.507813 19.070312-42.507813 42.511719v164.976562.007812 63.253907c-14.722656-.417969-26.570312-12.523438-26.570312-27.347657zm0 0"></path><path d="m388.515625 145.117188c-23.601563 0-42.796875 19.199218-42.796875 42.792968 0 23.597656 19.199219 42.796875 42.796875 42.796875 23.59375 0 42.792969-19.199219 42.792969-42.796875 0-23.59375-19.199219-42.792968-42.792969-42.792968zm0 65.589843c-12.570313 0-22.796875-10.226562-22.796875-22.792969 0-12.570312 10.226562-22.796874 22.796875-22.796874 12.566406 0 22.792969 10.226562 22.792969 22.796874 0 12.566407-10.226563 22.792969-22.792969 22.792969zm0 0"></path><path d="m244.730469 56.398438c.25.601562.558593 1.179687.917969 1.722656.363281.546875.78125 1.058594 1.242187 1.519531.460937.457031.96875.878906 1.519531 1.25.539063.359375 1.128906.667969 1.730469.917969.597656.25 1.230469.441406 1.871094.570312.636719.128906 1.296875.191406 1.949219.191406.660156 0 1.308593-.0625 1.960937-.191406.636719-.128906 1.257813-.320312 1.867187-.570312.601563-.25 1.179688-.558594 1.722657-.917969.546875-.371094 1.058593-.792969 1.519531-1.25.46875-.460937.878906-.972656 1.25-1.519531.359375-.542969.667969-1.121094.917969-1.722656.25-.609376.441406-1.238282.570312-1.867188.128907-.652344.191407-1.3125.191407-1.960938 0-.652343-.0625-1.3125-.191407-1.949218-.128906-.640625-.320312-1.273438-.570312-1.871094-.25-.609375-.558594-1.191406-.917969-1.730469-.371094-.550781-.78125-1.058593-1.25-1.519531-.460938-.460938-.972656-.878906-1.519531-1.242188-.542969-.359374-1.121094-.667968-1.722657-.917968-.609374-.25-1.230468-.441406-1.867187-.570313-1.292969-.261719-2.621094-.261719-3.910156 0-.640625.128907-1.273438.320313-1.871094.570313-.601563.25-1.191406.558594-1.730469.917968-.550781.363282-1.058594.78125-1.519531 1.242188s-.878906.96875-1.242187 1.519531c-.359376.539063-.667969 1.121094-.917969 1.730469-.25.597656-.441407 1.230469-.570313 1.871094-.128906.636718-.199218 1.296875-.199218 1.949218 0 .648438.070312 1.308594.199218 1.960938.128906.628906.320313 1.257812.570313 1.867188zm0 0"></path></svg><h3 class="gallery__label text-lg leading-6 font-medium text-gray-200">My Skins</h3></a>`;
    const empty__gallery__container__string = `<div class="gallery__container grid grid-cols-4 gap-4"></div>`;
    const empty__myskins__container__string = `<div class="myskins__container grid grid-cols-4 gap-4"></div>`;
    const gallery__navbar__string = `<div class="gallery__navbar__container px-4 py-5 sm:px-6 flex justify-between "></div>`;
    const add__skin__button__string = `<div class="add__skin__button__container"><a class="add__skin__button button is-primary">Add Skin By Code</a></div>`;
    const dice__string = `<svg id="Layer_9" enable-background="new 100 100 412 412" height="40" viewBox="0 0 512 512" width="40"><path class="path_one" d="m491 128.984v254.034c0 12.6-7.252 24.078-18.638 29.498l-202.286 96.303c-4.448 2.124-9.268 3.181-14.076 3.181s-9.617-1.057-14.065-3.181l-202.296-96.303c-11.387-5.42-18.639-16.898-18.639-29.498v-254.034c0-6.546 1.952-12.788 5.441-18.038 3.206-4.858 7.731-8.866 13.204-11.459l202.29-96.31c8.897-4.237 19.234-4.237 28.142 0l202.29 96.31c5.473 2.592 9.987 6.601 13.193 11.459 3.488 5.25 5.44 11.491 5.44 18.038z" fill="#e53935"/><path class="path_two" d="m485.559 110.946c-3.206-4.858-7.72-8.866-13.193-11.459l-202.29-96.31c-8.908-4.237-19.244-4.237-28.142 0l-1.39.662 200.9 95.648c5.473 2.592 9.988 6.601 13.193 11.459 3.489 5.25 5.441 11.491 5.441 18.038v254.034c0 12.6-7.252 24.078-18.638 29.498l-200.896 95.641 1.39.662c4.449 2.124 9.258 3.181 14.066 3.181s9.628-1.057 14.076-3.181l202.286-96.303c11.386-5.42 18.638-16.898 18.638-29.498v-254.034c0-6.547-1.952-12.788-5.441-18.038z" fill="#d32f2f"/><path class="path_three" d="m256 220.239v291.761c-4.808 0-9.617-1.057-14.065-3.181l-202.296-96.303c-11.387-5.42-18.639-16.898-18.639-29.498v-254.034c0-6.546 1.952-12.788 5.441-18.038z" fill="#f44336"/><path class="path_four" d="m491 128.984v254.041c0 12.461-7.109 23.843-18.296 29.333-.109.054-.229.109-.338.163l-202.29 96.299c-4.448 2.123-9.268 3.18-14.076 3.18v-291.761l229.559-109.293c3.489 5.25 5.441 11.491 5.441 18.038z" fill="#d32f2f"/><path class="path_five" d="m485.559 110.946-25.994 12.376c.326 1.851.513 3.741.513 5.662v254.041c0 12.461-7.109 23.843-18.296 29.333-.109.054-.229.109-.338.163l-185.444 88.28v11.199c4.808 0 9.628-1.057 14.076-3.181l202.29-96.299c.109-.054.229-.109.338-.163 11.187-5.49 18.296-16.872 18.296-29.333v-254.04c0-6.547-1.952-12.788-5.441-18.038z" fill="#c62828"/><g fill="#f1f1f1"><ellipse cx="389.64" cy="306.507" rx="26.736" ry="19.708" transform="matrix(.134 -.991 .991 .134 33.735 651.612)"/><ellipse cx="190.492" cy="263.252" rx="19.607" ry="26.736" transform="matrix(.999 -.055 .055 .999 -14.066 10.775)"/><ellipse cx="78.302" cy="360.193" rx="19.607" ry="26.736" transform="matrix(.999 -.055 .055 .999 -19.517 4.803)"/><ellipse cx="161.083" cy="104.225" rx="26.736" ry="19.607" transform="matrix(.999 -.055 .055 .999 -5.442 8.935)"/><ellipse cx="253.668" cy="58.477" rx="26.736" ry="19.607" transform="matrix(.999 -.055 .055 .999 -2.81 13.914)"/><ellipse cx="350.609" cy="107.492" rx="26.736" ry="19.607" transform="matrix(.999 -.055 .055 .999 -5.338 19.27)"/><ellipse cx="260.203" cy="149.972" rx="26.736" ry="19.607" transform="matrix(.999 -.055 .055 .999 -7.788 14.406)"/></g></svg>`;
    const star__string = `<svg class='star' width="35" height="35" viewBox="0 -10 511.98685 511"><path class='star_path' d="m510.652344 185.902344c-3.351563-10.367188-12.546875-17.730469-23.425782-18.710938l-147.773437-13.417968-58.433594-136.769532c-4.308593-10.023437-14.121093-16.511718-25.023437-16.511718s-20.714844 6.488281-25.023438 16.535156l-58.433594 136.746094-147.796874 13.417968c-10.859376 1.003906-20.03125 8.34375-23.402344 18.710938-3.371094 10.367187-.257813 21.738281 7.957031 28.90625l111.699219 97.960937-32.9375 145.089844c-2.410156 10.667969 1.730468 21.695313 10.582031 28.09375 4.757813 3.4375 10.324219 5.1875 15.9375 5.1875 4.839844 0 9.640625-1.304687 13.949219-3.882813l127.46875-76.183593 127.421875 76.183593c9.324219 5.609376 21.078125 5.097657 29.910156-1.304687 8.855469-6.417969 12.992187-17.449219 10.582031-28.09375l-32.9375-145.089844 111.699219-97.941406c8.214844-7.1875 11.351563-18.539063 7.980469-28.925781zm0 0" fill="#ffc107"/></svg>`;
    const spacer_string = `<div class='spacer'></div>`;

    const skinSlider = document.createRange().createContextualFragment(skinSliderString);
    const columnSlider = document.createRange().createContextualFragment(columsSliderString);
    const searchInput = document.createRange().createContextualFragment(searchInputString);
    const sortButton = document.createRange().createContextualFragment(sortButtonString);
    const gallery = document.createRange().createContextualFragment(galleryString);
    const dice = document.createRange().createContextualFragment(dice__string);
    const star = document.createRange().createContextualFragment(star__string);
    const spacer = document.createRange().createContextualFragment(spacer_string);

    const slidersContainer = document.createElement('div');
    slidersContainer.classList.add('sliders-container');
    slidersContainer.style = 'display: flex; justify-content: space-around; align-items: center; width: 40%';
    slidersContainer.appendChild(skinSlider);
    slidersContainer.appendChild(spacer.cloneNode(true));
    slidersContainer.appendChild(columnSlider);
    slidersContainer.appendChild(spacer.cloneNode(true));

    container__header.insertBefore(slidersContainer, container__header.children[0]);
    container__header.insertBefore(searchInput, container__header.children[0]);
    container__header.insertBefore(sortButton, container__header.children[0]);
    container__header.insertBefore(gallery, container__header.children[0]);
    container__header.insertBefore(dice, container__header.children[2]);
    container__header.insertBefore(star, container__header.children[1]);
    container__header.insertBefore(spacer.cloneNode(true), container__header.children[1]);
    container__header.insertBefore(spacer.cloneNode(true), container__header.children[3]);

    //Initialize defaults
    (function() {
        const container = document.querySelector('.myskins__container');
        const skins = container.querySelectorAll('.flex.flex-col');
        const slider1 = document.querySelector('.skinSlider');
        const slider2 = document.querySelector('.colSlider');
        const searchInput = document.querySelector('.search__input');

        get__myskins();
        fetch__skins();
        update__skins();

        slider1.value = default__skin__size;
        slider2.value = default__cols;
        const grid = document.querySelector('.grid.grid-cols-4.gap-4');
        grid.style.gridTemplateColumns = `repeat(${default__cols},minmax(0,1fr))`;
        //Fix/custom some styling
        skins.forEach(skin => {
            const img = skin.querySelector('img');
            img.style.maxWidth = 'none';
            img.style.width = `${default__skin__size}px`;
            skin.style.justifyContent = 'center'
            skin.style.alignItems = 'center';
        });
    })();


    //Event Listeners
    document.querySelector('.gallery__icon__container').addEventListener('click', function (e) {
        gallery__state = !gallery__state;
        searched__skins = {};
        searched__gallery__skins = {};

        if(gallery__state) {
            const container = document.querySelector('.myskins__container');
            const empty__container = document.createRange().createContextualFragment(empty__gallery__container__string);
            const add__skin__button = document.createRange().createContextualFragment(add__skin__button__string);
            const gallery__text = document.querySelector('.gallery__label');
            const search__bar = document.querySelector('.search__input');
            search__bar.value = '';

            gallery__text.innerText = 'Gallery';

            container.remove();

            container__of__container.appendChild(empty__container);
            submit__button__parent.remove();
            container__header.appendChild(add__skin__button);

            randomized__gallery__skins = {};
            randomized__skins = {};
            sort__handler(undefined, false);
            //Add skins here
            update__skins();

            document.querySelector('.add__skin__button').addEventListener('click', handle__click);
        }else {
            const gallery__text = document.querySelector('.gallery__label');
            const container = document.createRange().createContextualFragment(empty__myskins__container__string);
            const search__bar = document.querySelector('.search__input');
            search__bar.value = '';

            gallery__text.innerText = 'My Skins';

            document.querySelector('.add__skin__button').removeEventListener("click", handle__click, false);
            document.querySelector('.add__skin__button__container').remove();
            container__header.appendChild(submit__button__parent);
            document.querySelector('.gallery__container').remove();
            container__of__container.appendChild(container);
            randomized__gallery__skins = {};
            randomized__skins = {};
            sort__handler(undefined, false);

            //Add skins here
            update__skins();
        }
    });

    document.querySelector('.corner-button').addEventListener('click', sort__handler);

    document.querySelector('#Layer_9').addEventListener('click', randomize__skins);

    document.querySelector('.star').addEventListener('click', get__favorite__skins);

    document.querySelector('.search__input').addEventListener('input', input__search, false);

    document.querySelector('.skinSlider').addEventListener('input', update__skin__size, false);

    document.querySelector('.colSlider').addEventListener('input', update__skin__col, false);

    document.querySelector('.skinSlider').addEventListener('change', scroll__event__onchange, false);

    document.querySelector('.colSlider').addEventListener('change', scroll__event__onchange, false);

    window.onscroll = scroll__event;

    //Remove the annoying logo
    const containerSize = document.querySelector('.container.flex.flex-col.items-center.justify-center.mx-auto');
    containerSize.firstElementChild.remove();

    containerSize.firstElementChild.style.width = '100%';



    //                        ⬇------⬇ Functions ⬇------⬇
    //Remove skins from DOM
    function remove__skins() {
        const container = document.querySelector('.myskins__container');
        if(gallery__state) {
            const gal__container = document.querySelector('.gallery__container');
            gal__container.innerHTML = '';
        }else {
            container.innerHTML = '';
        }
    };
    function update__skin__size() {
        const span = document.querySelector('.skinSpan');
        const e = document.querySelector('.skinSlider');
        span.innerText = e.value;
        if(gallery__state) {
            const container = document.querySelector('.gallery__container');
            const gallery__skins = container.querySelectorAll('.flex.flex-col');
            gallery__skins.forEach(skin => {
                const img = skin.querySelector('img');
                img.style.width = `${e.value}px`;
            });
        }else {
            const container = document.querySelector('.myskins__container');
            const skins = container.querySelectorAll('.flex.flex-col');
            skins.forEach(skin => {
                const img = skin.querySelector('img');
                img.style.width = `${e.value}px`;
            });
        }
    }
    function update__skin__col() {
        const span = document.querySelector('.colSpan');
        const e = document.querySelector('.colSlider');
        span.innerText = e.value;
        const grid = document.querySelector('.grid.grid-cols-4.gap-4');
        grid.style.gridTemplateColumns = `repeat(${e.value},minmax(0,1fr))`;
    }

    function sort__object(o) {
        var sorted = {},
            key, a = [];

        for (key in o) {
            if (o.hasOwnProperty(key)) {
                a.push(key);
            }
        }

        var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
        a.sort(collator.compare);

        for (key = 0; key < a.length; key++) {
            sorted[a[key]] = o[a[key]];
        }
        return sorted;
    }
    function is__empty(obj) {
        for(var prop in obj) {
            if(obj.hasOwnProperty(prop)) {
                return false;
            }
        }

        return true;
    }
    async function handle__click(e) {
        skin__code = prompt("Enter skin code:\nHere you find how to get code for a skin:\nhttps://github.com/Aymayy/css-files", "");
        if(skin__code === null || skin__code === '') {
            console.log("Cancelled");
            return 0;
        }else {
            await submit__skin__code(skin__code);
            fetch__skins();
        }
    }
    function httpGetAsync(theUrl, callback) {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                callback(xmlHttp.responseText);
            }
        }
        xmlHttp.open("GET", theUrl, true); // true for asynchronous
        xmlHttp.send(null);
    }
     async function submit__skin__code(code) {
         const url = `https://skins-data.com/skins/${code}`;
         let username = document.querySelector('.mx-2.text-base.text-semibold.text-gray-300');
         username.style.fontFamily = 'Arial, Helvetica, sans-serif';
         username = username.innerText.toString();
         console.log(username);
         const headers = {
             'Content-Type': 'application/json'
         }
         const body = {
             username
         }
         var fetch__data;
         await fetch(url, {
             method: 'POST',
             headers,
             body: JSON.stringify(body)
         })
             .then((response) => {
             return response.text();
         })
             .then((data) => {
             fetch__data = JSON.parse(data);
             if(fetch__data.message) {
                 alert(fetch__data.message);
                 update__local__storage();
                 update__skins();
             }else if(fetch__data.error) {
                 alert(fetch__data.error);
             }
         });
     }
    function update__skins() {
        if(gallery__state) {
            if(local__storage.getItem('__skins')) {
                gallery__skins = JSON.parse(local__storage.getItem('__skins'));
            }
            if(is__empty(searched__gallery__skins) && document.querySelector('.search__input').value !== ''){
                gallery__skins = {};
            }else if(!is__empty(searched__gallery__skins)) {
                gallery__skins = searched__gallery__skins;
            }
            if(is__sorted) {
                gallery__skins = sort__object(gallery__skins);
                randomized__gallery__skins = {};
            }
            if(!is__empty(randomized__gallery__skins)) {
                gallery__skins = randomized__gallery__skins;
            }
            const gal__container = document.querySelector('.gallery__container');
            gal__container.innerHTML = '';
            let i = 0;
            remove__skins();
            for(const skin in gallery__skins) {
                if(i === bottom__scrolls * skins__each__scroll) break;
                const skin__template__string = `<div class="gallery__skin flex flex-col" style="justify-content: center; align-items: center;"><a href="/skins/${gallery__skins[skin]}"><img class="rounded-full" src="https://skin-data.gota.io/${gallery__skins[skin]}.png" style="max-width: none; width: 250px;"></a><div class="inline-flex justify-center items-center"><span class="text-lg font-bold">${skin}</span></div></div>`;
                const skin__template = document.createRange().createContextualFragment(skin__template__string);
                skin__template.querySelector('img').setAttribute('loading', 'lazy');
                document.querySelector('.gallery__container').appendChild(skin__template);
                i++;
            }
        }else {
            const container = document.querySelector('.myskins__container');
            skin__elements = skin__data;
            if(is__empty(searched__skins) && document.querySelector('.search__input').value !== ''){
                skin__elements = {};
            }else if(!is__empty(searched__skins)) {
                skin__elements = searched__skins;
            }
            if(is__sorted) {
                skin__elements = sort__object(skin__elements);
                randomized__skins = {};
            }else if(!is__empty(randomized__skins)) {
                skin__elements = randomized__skins;
            }
            remove__skins();
            for(const element in skin__elements) {
                //const add_favorite__button__string = `<svg class='add_favorite' version="1.1" id="Layer_1" x="0px" y="0px" width="40" height="40" viewBox="0 0 286.054 286.054" style="enable-background:new 0 0 286.054 286.054;" xml:space="preserve"><path class="add_favorite_path" style="fill:#3DB39E;" d="M143.027,0C64.031,0,0,64.04,0,143.027c0,78.996,64.031,143.027,143.027,143.027 c78.987,0,143.027-64.031,143.027-143.027C286.045,64.04,222.014,0,143.027,0z M143.027,259.236 c-64.183,0-116.209-52.026-116.209-116.209s52.026-116.2,116.209-116.2c64.174,0,116.209,52.017,116.209,116.2 S207.201,259.236,143.027,259.236z M196.832,125.149h-35.936V89.392c0-4.934-4.005-8.939-8.939-8.939h-17.878 c-4.943,0-8.939,4.005-8.939,8.939v35.757H89.401c-4.952,0-8.957,4.005-8.957,8.939v17.878c0,4.943,4.005,8.939,8.957,8.939h35.748 v35.676c0,4.934,3.996,8.93,8.939,8.93h17.878c4.934,0,8.939-3.996,8.939-8.93v-35.676h35.936c4.952,0,8.957-3.996,8.957-8.939 v-17.878C205.789,129.162,201.775,125.149,196.832,125.149z"/></svg>`;
                const skin__template__string = `<div class="gallery__skin flex flex-col" style="justify-content: center; align-items: center;"><a href="/skins/${skin__elements[element]}"><img class="rounded-full" src="https://skin-data.gota.io/${skin__elements[element]}.png" style="max-width: none; width: 250px;"></a><div class="inline-flex justify-center items-center"><span class="text-lg font-bold">${element}</span></div></div>`;
                const skin__template = document.createRange().createContextualFragment(skin__template__string);
                //const add__favorite__button = document.createRange().createContextualFragment(add_favorite__button__string);
                //skin__template.querySelector('.gallery__skin').append(add__favorite__button);
                skin__template.querySelector('img').setAttribute('loading', 'lazy');
                container.appendChild(skin__template);

            }
        }
        update__skin__size();
        update__skin__col();
    }
    function update__local__storage() {
         local__storage.setItem('__skins', JSON.stringify(gallery__skins));
    }
    function merge__objects(obj1, obj2) {
        return Object.assign(obj1, obj2);
    }

    async function fetch__skins() {
        const url = `https://skins-data.com/skins`;
        var fetch__data;
        await fetch(url, {
            method: 'GET'
        })
            .then((response) => {
            return response.text();
        })
            .then((data) => {
            fetch__data = data;
        });
        gallery__skins__data = JSON.parse(fetch__data);
        local__storage.setItem('__skins', fetch__data);
        update__skins();
    }
    function scroll__event() {
        if(Object.keys(gallery__skins).length >= bottom__scrolls * skins__each__scroll) {
            if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                bottom__scrolls++;
                update__skins();
            }
        }
    }
    function scroll__event__onchange() {
        if(Object.keys(gallery__skins).length >= bottom__scrolls * skins__each__scroll) {
            if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                bottom__scrolls += Math.floor(window.innerHeight / 15);
                update__skins();
            }
        }
    }
    function sort__handler(ev, value) {
        const e = document.querySelector('.corner-button');
        if(value !== null && value !== undefined) {
            is__sorted = value;
        } else {
            is__sorted = !is__sorted;
        }
        if(is__sorted) {
            e.innerText = 'Unsort';
        }else {
            e.innerText = 'Sort';
        }
        update__skins();
    }
    function get__myskins() {
        const container = document.querySelector('.myskins__container');
        const skins = container.querySelectorAll('.flex.flex-col');
        const names = container.querySelectorAll('.text-lg.font-bold');
        skins.forEach(skin => {
            const img = skin.querySelector('img');
            const name = skin.querySelector('span').innerText;
            let code__url = img.src;
            code__url = code__url.replace('https://skin-data.gota.io/', '');
            code__url = code__url.replace('.png', '');
            skin__data[name] = code__url;
        });
        return skin__data;
    }
    function input__search(e) {
        if(gallery__state) {
            searched__gallery__skins = {};
            for(const element in gallery__skins__data) {
                if(element.includes(e.srcElement.value)) {
                    searched__gallery__skins[element] = gallery__skins__data[element];
                }
            }
        }else {
            update__skins();
            searched__skins = {};
            for(const element in skin__data) {
                if(element.includes(e.srcElement.value)) {
                    searched__skins[element] = skin__data[element];
                }
            }
        }
        if(e.srcElement.value === null || e.srcElement.value === '' || e.srcElement.value === undefined) {
            searched__skins = {};
            searched__gallery__skins = {};
        }
        randomized__gallery__skins = {};
        randomized__skins = {};
        update__skins();
    }
    function randomize__object(obj) {
        const randomized__object = {};
        var keys = Object.keys(obj);
        keys.sort(function(a,b) {return Math.random() - 0.5;});
        keys.forEach(function(key) {
            randomized__object[key] = obj[key];
        });
        return randomized__object;
    }
    function randomize__skins(e) {
        sort__handler(undefined, false);
        if(gallery__state) {
            if(!is__empty(searched__gallery__skins)) {
                randomized__gallery__skins = randomize__object(searched__gallery__skins);
            } else {
                randomized__gallery__skins = randomize__object(gallery__skins__data);
            }
        } else {
            if(!is__empty(searched__skins)) {
                randomized__skins = randomize__object(searched__skins);
            } else {
                randomized__skins = randomize__object(skin__data);
            }
        }
        update__skins();
    }
    function get__favorite__skins() {
        alert('Coming soon...')
    }
})();