Greasy Fork is available in English.

Kahoot! QOL

Improves the Quality of Life on Kahoot!

// ==UserScript==
// @name         Kahoot! QOL
// @namespace    https://flawcra.cc/
// @version      1.0.3-GitHub
// @description  Improves the Quality of Life on Kahoot!
// @author       FlawCra
// @license      Apache License 2.0
// @match        https://kahoot.it/*
// @icon         https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://kahoot.it&size=256
// @grant        none
// ==/UserScript==
const rainbow_anim_text = `
        .rainbow_bg {
          height: 100% !important;
          width: 100% !important;
          left:0 !important;
          right: 0 !important;
          top: 0 !important;
          bottom: 0 !important;
          position: absolute !important;
          background: linear-gradient(124deg, #ff2400, #e81d1d, #e8b71d, #e3e81d, #1de840, #1ddde8, #2b1de8, #dd00f3, #dd00f3) !important;
          background-size: 1800% 1800% !important;

          animation: rainbow_bg 18s ease infinite !important;
        }`;
const rainbow_keyframes_text = `
        @keyframes rainbow_bg {
            0%{background-position:0% 82%}
            50%{background-position:100% 19%}
            100%{background-position:0% 82%}
        } !important;`;
const cube_anim_text = `
        .cube_animation {
          animation: 8s ease-in-out 0s infinite alternate none running cube_animation !important;
        }`;
const cube_keyframes_text = `
        @keyframes cube_animation {
            0% {
              translate: -5vw 2vh 0px;
            }
            50% {
              translate: 0px 0px 0px;
            }
            100% {
              translate: -5vw -2vh 0px;
            }
        }`;
const circle_anim_text = `
        .circle_animation {
          animation: 6s ease-in-out 0s infinite alternate none running circle_animation !important;
        }`;
const circle_keyframes_text = `
        @keyframes circle_animation {
            0% {
              translate: 0px 0px 0px;
            }
            50% {
              translate: -5vw -2vh 0px;
            }
            100% {
              translate: 0px 0px 0px;
            }
        }`;

(function() {
    'use strict';
    setTimeout(function() {
        var wrppr = document.createElement("div");
        wrppr.setAttribute("id","rainbow-bg");
        var rainbow_anim = document.createElement("style");
        rainbow_anim.innerHTML = rainbow_anim_text;

        var rainbow_keyframes = document.createElement("style");
        rainbow_keyframes.innerHTML = rainbow_keyframes_text;

        var cube_anim = document.createElement("style");
        cube_anim.innerHTML = cube_anim_text;

        var cube_keyframes = document.createElement("style");
        cube_keyframes.innerHTML = cube_keyframes_text;

        var circle_anim = document.createElement("style");
        circle_anim.innerHTML = circle_anim_text;

        var circle_keyframes = document.createElement("style");
        circle_keyframes.innerHTML = circle_keyframes_text;


        document.head.appendChild(rainbow_anim);
        document.head.appendChild(rainbow_keyframes);
        document.head.appendChild(cube_anim);
        document.head.appendChild(cube_keyframes);
        document.head.appendChild(circle_anim);
        document.head.appendChild(circle_keyframes);
        document.querySelector(`#root > div:nth-of-type(1) > div:nth-of-type(1)`).classList.add("rainbow_bg")
        document.querySelector(`#root > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1)`).classList.add("rainbow_bg");
        document.querySelector(`#root > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1)`).classList.add("cube_animation");
        document.querySelector(`#root > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(2)`).classList.add("circle_animation");
    }, 0);

    setInterval(() => {
      if(document.getElementById("nickname")) document.getElementById("nickname").focus();
      if(document.querySelector(`[data-functional-selector='game-pin-input']`)) document.querySelector(`[data-functional-selector='game-pin-input']`).focus();
    }, 250);

    document.addEventListener("keydown", (ev) => {
      var el = document.querySelector(`[data-functional-selector='answer-${ev.keyCode-49}']`);
      if(el) el.click();
      if(ev.keyCode===13) document.querySelector(`[data-functional-selector='multi-select-submit-button']`).click();
    });
})();