queer wisdom for Twitter

The "Queer wisdom for Twitter" script adds a button with a queer flag for the LGBTQIA+ community. By clicking the flag the script will add a random wisdom. There is a list of quotes provided by a JSON file. So the script automatically gets quote-updates. Updates concerning the script are just as features or bugfixing.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

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

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name            queer wisdom for Twitter
// @namespace       stephfuchs.queer.wisdowm.for.twitter
// @version         1.1.0
// @author          Stephanie Fuchs
// @description     The "Queer wisdom for Twitter" script adds a button with a queer flag for the LGBTQIA+ community. By clicking the flag the script will add a random wisdom. There is a list of quotes provided by a JSON file. So the script automatically gets quote-updates. Updates concerning the script are just as features or bugfixing.
// @homepage        https://github.com/stephfuchs/queer-wisdom-for-twitter-userscript
// @include         https://twitter.com/home
// @include         https://twitter.com/intent/*
// @include         https://twitter.com/compose/*
// @run-at          document-body
// @supportURL      https://github.com/stephfuchs/queer-wisdom-for-twitter-userscript/issues
// @license         MIT
// ==/UserScript==

(function () {
    'use strict';

    /**
     * Start the plugin stuff to tweet queer stuff.
     */
    class Plugin {

        /**
         * Run the stuff when document body is loaded
         */
        start() {
            var twitterIsReady = setInterval(function () {
                let version = '1.1.0';
                let name = 'Queer wisdom for Twitter';
                let copyright = '(c) 2021 • Stephanie Fuchs • https://github.com/stephfuchs';
                let classes = '.css-1dbjc4n.r-1awozwy.r-18u37iz.r-156q2ks';

                if (document.querySelector(classes) !== null || document.querySelector(classes) !== undefined) {
                    let wisdom = new QueerWisdom();
                    console.info('loaded script: "' + name + '" with version: ' + version + '\n' + copyright);
                    clearInterval(twitterIsReady);
                    console.debug(wisdom.debug + 'removed interval');
                    wisdom.init();
                    console.debug(wisdom.debug + 'created new wisdom object');
                }
            }, 3000); // check every 3sec

            /**
             * Check the system every min whether the button is been missing.
             */
            setInterval(function () {
                if (document.getElementById('queer_wisdom') === null) {
                    console.debug('Button was deleted. Restarts.');
                    let wisdom = new QueerWisdom();
                    wisdom.init();
                    console.info('reloaded the queer button, because it disappeared.');
                    console.debug('Restart finished.');
                }
            }, 60000); // check every minute
        }
    }

    var plugin = new Plugin();
    plugin.start();

    /**
     * Make the queer wisdom great again.
     */
    class QueerWisdom {

        /**
         * Provide some variables for the the extra button.
         */
        constructor() {
            this.debug = '## Queer wisdom for Twitter debugger ##\n';
            this.info = '## Queer wisdom for Twitter information ##\n';
            this.queerElement = null;
            this.queerElementId = 'queer_wisdom';
            this.lesbianJesus = new HayleyKiyoko();
        }

        /**
         * Initialization of the script.
         */
        init() {
            let tweetOptionContainerElement = document.querySelector('.css-1dbjc4n.r-1awozwy.r-18u37iz.r-156q2ks');
            console.debug(this.debug + 'Initialization of the script starts.');
            console.debug(this.debug + tweetOptionContainerElement);

            this._createQueerElement();
            tweetOptionContainerElement.append(this.queerElement);
            console.debug(this.debug + 'Added lgbtqia+ flag.');
            console.debug(this.debug + tweetOptionContainerElement);
            console.debug(this.debug + 'Initialization of the script ended.');
        }

        /**
         * Creates a new div container with the queer flag.
         *
         * @returns {HTMLDivElement}
         * @private
         */
        _createQueerElement() {
            this.queerElement = document.createElement('a');
            this.queerElement.id = this.queerElementId;
            this.queerElement.style.paddingLeft = '10px';
            this.queerElement.title = 'add a random queer wisdom';
            this.queerElement.innerHTML = this._getFlagSVG();
            this.queerElement.setAttribute('href', 'https://twitter.com/intent/tweet?text=' + encodeURI(this._getJsonWisdom()));
            console.debug(this.debug + 'Created tweet: https://twitter.com/intent/tweet?text=' + encodeURI(this._getJsonWisdom()));
        }

        /**
         * Get the wisdom from the JSON.
         *
         * @returns {string}
         * @private
         */
        _getJsonWisdom() {
            console.info(this.info + 'We have to call Hayley Kiyoko for help.');
            let girlsLikeGirls = this.lesbianJesus.girlsLikeGirls().wisdoms;
            let wisdomCount = girlsLikeGirls.length;
            console.info(this.info + 'The answer from Hayley Kiyoko has arrived with ' + wisdomCount + ' wisdoms.');

            let random = Math.floor(Math.random() * wisdomCount);
            let hayleyWisdom = girlsLikeGirls[random];
            console.debug(this.debug + 'random number: ' + random);
            console.debug(this.debug + 'random wisdom: ' + hayleyWisdom.quote);

            if (hayleyWisdom.copyright === null) {
                return hayleyWisdom.quote;
            }

            return hayleyWisdom.quote + '\n-- ' + hayleyWisdom.copyright;
        }

        /**
         * Get the LGBTQIA+ flag.
         * Credits for the svg: https://commons.wikimedia.org/wiki/File:LGBTQ%2B_rainbow_flag_Quasar_%22Progress%22_variant.svg
         *
         * @returns {string}
         * @private
         */
        _getFlagSVG() {
            return '<svg style="width: 27px; height: auto;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6000 3810">\n' +
                '\t<rect fill="#750787" width="6000" height="3810"/>\n' +
                '\t<rect fill="#004dff" width="6000" height="3175"/>\n' +
                '\t<rect fill="#008026" width="6000" height="2540"/>\n' +
                '\t<rect fill="#ffed00" width="6000" height="1905"/>\n' +
                '\t<rect fill="#ff8c00" width="6000" height="1270"/>\n' +
                '\t<rect fill="#e40303" width="6000" height="635"/>\n' +
                '\n' +
                '    <polygon points="-1,960 950,1905 -1,2850" fill="#ffffff"/>\n' +
                '    <polygon points="-1,960 -1,480 1420,1905 -1,3330 -1,2850 950,1905" fill="#ffafc8"/>\n' +
                '    <polygon points="-1,480 -1,0 1912,1905 -1,3810 -1,3330 1420,1905 -1,480" fill="#74d7ee"/>\n' +
                '    <polygon points="-1,0 1912,1905 -1,3810 480,3810 2384,1905 480,0" fill="#613915"/>\n' +
                '    <polygon points="480,0 960,0 2864,1905 960,3810 480,3810 2384 1905 480,0" fill="#000000"/>\n' +
                '</svg>';
        }
    }

    /**
     * The class for the lesbian jesus to give us the queer wisdom.
     */
    class HayleyKiyoko {

        /**
         * It's obvious.
         *
         * @returns {JSON}
         */
        girlsLikeGirls() {
            return {
                "wisdoms": [
                    {
                        "quote": "I am here, I am queer.",
                        "copyright": null
                    },
                    {
                        "quote": "It's LGBTQIA\+\nL\=lesbian\nG\=gay\nB\=bi\nT\=trans\nQ\=queer\nI\=intersex\nA\=ace\/aro\n\+\=ally",
                        "copyright": null
                    },
                    {
                        "quote": "There is no man in a wlw relationship. That is the point.",
                        "copyright": null
                    },
                    {
                        "quote": "Did I hit my head and wake up in patriarchal bullshit land?",
                        "copyright": "Nicole Haught \('Wynonna Earp'\)"
                    },
                    {
                        "quote": "Others: \"How do you know, you are queer?\" - Me: \"How do you know you are not?\" ",
                        "copyright": null
                    },
                    {
                        "quote": "When someone tells you they are < insert label >, accept it. They know best, who they are.",
                        "copyright": null
                    },
                    {
                        "quote": "\"Really, I don't know why I did this. I guess it's probably because I've got a big lesbian crush on you! Suck on that! AY-YI-YI-YI-YI-YI!\"",
                        "copyright": "Janis \('Mean Girls'\)"
                    },
                    {
                        "quote": "Hetero people when they see women kissing: \"Oh, they must be good friends\" - Queer women: \"Me n who???\"",
                        "copyright": null
                    },
                    {
                        "quote": "There is no wrong or right about beeing queer. You are who you are and this should be always right.",
                        "copyright": null
                    },
                    {
                        "quote": "\"You are a lesbian, not a unicorn, right?\"",
                        "copyright": "Waverly Earp \('Wynonna Earp'\)"
                    },
                    {
                        "quote": "My religion is called Hayley Kiyoko and she is the lesbian jesus.",
                        "copyright": null
                    },
                    {
                        "quote": "This is Damian. He's almost too gay to function.",
                        "copyright": "Janis \('Mean Girls'\)"
                    },
                    {
                        "quote": "I'm beautiful in my way\n" +
                            "'Cause God makes no mistakes\n" +
                            "I'm on the right track, baby\n" +
                            "I was born this way",
                        "copyright": "'Born this way' by Lady Gaga"
                    },
                    {
                        "quote": "Oh there ain't no other way\n" +
                            "Baby I was born this way",
                        "copyright": "'Born this way' by Lady Gaga"
                    },
                    {
                        "quote": "No matter gay, straight, or bi,\n" +
                            "Lesbian, transgendered life,\n" +
                            "I'm on the right track baby,\n" +
                            "I was born to survive",
                        "copyright": "'Born this way' by Lady Gaga"
                    },
                    {
                        "quote": "No matter black, white or beige\n" +
                            "Chola or orient made,\n" +
                            "I'm on the right track baby,\n" +
                            "I was born to be brave.",
                        "copyright": "'Born this way' by Lady Gaga"
                    }
                ]
            };
        }
    }
})();