SoM'25 Userscript

Userscript to add some features to SoM'25 (edit the config in the file!)

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name        SoM'25 Userscript
// @namespace    http://saahild.com
// @version      1.0
// @description  Userscript to add some features to SoM'25 (edit the config in the file!)
// @author       Neon
// @match        https://summer.hackclub.com/*
// @license MIT
// ==/UserScript==


// Main script logic that uses the config
(function () {
  'use strict';
const config = {
hide_help: true,
hide_music: true,
fake_admin: false, 
hide_admin: true,
}

const adminButton = `<li class="flex justify-start border-2 border-dashed border-orange-500 bg-orange-500/10" style="margin-right: 10px; border-radius: 10px;">
  <form class="button_to" method="get" action="/admin"><button class="relative inline-block group py-2 cursor-pointer text-2xl" type="submit">
    <span class="relative z-10 flex items-center space-x-2">
        <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="w-8 mr-4 h-8"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE --><path fill="#4A2D24" d="M15.275 12.475L11.525 8.7L14.3 5.95l-.725-.725L8.8 10q-.3.3-.7.3t-.7-.3t-.3-.712t.3-.713l4.75-4.75q.6-.6 1.413-.6t1.412.6l.725.725l1.25-1.25q.3-.3.713-.3t.712.3L20.7 5.625q.3.3.3.713t-.3.712zM4 21q-.425 0-.712-.288T3 20v-1.925q0-.4.15-.763t.425-.637l6.525-6.55l3.775 3.75l-6.55 6.55q-.275.275-.637.425t-.763.15z"></path></svg>

      <span class="text-nowrap tracking-tight pointer-events-none text-3xl transition-opacity duration-200 opacity-0 w-[0px]" data-sidebar-target="collapseFade">
        Admin
</span></span>
    <div class="absolute transition-all duration-150 bottom-1 pr-3 box-content bg-[#C7A077] rounded-full z-0 group-hover:opacity-100 h-6 opacity-0 w-[36px]" data-kind="underline" data-sidebar-target="underline" style="transform: translateX(-10px);"></div>
</button></form>
          </li>`
const shop_admin_per_block = `<div class="p-2 border-2 border-dashed border-orange-500 bg-orange-500/10 w-fit h-fit ">    <a class="underline" target="_blank" href="/admin/shop_items/55">administrate it?</a>
</div>`

  // TODO: migrate to when new elemnt updated etc
  setInterval(() => {
    console.log("meow")
  let mconfig = {
    has_already_added_admin_btn: false,
    has_already_added_sadmin_btn: false,
  }

  if(config.hide_help) {
    let hqa = document.getElementById("tutorial-help-btn")
    if(hqa) {
        hqa.remove()
    }
    }
    if(config.hide_music) {
        let mqa = document.getElementById("music-toggle")
        if(mqa) {
            mqa.remove()
        }
    }
    if(config.fake_admin && !config.hide_admin) {
        const navqa = document.querySelector('[data-sidebar-target="links"]');
        if(navqa && !mconfig.has_already_added_admin_btn) {
            navqa.insertAdjacentHTML('beforeend', adminButton);
            mconfig.has_already_added_admin_btn = true;
        }
        if(window.location.pathname === '/shop') {
        let amount_of_shop_items = document.querySelector('[class="flex flex-col sm:grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6"]').children.length
// add top elemt
let shop_number_thing = `<div class="p-2 border-2 border-dashed border-orange-500 bg-orange-500/10 w-fit h-fit mb-4">    <p>${amount_of_shop_items} items - <a class="underline" href="/admin/shop_items">edit them?</a></p>
</div>`
if(mconfig.has_already_added_sadmin_btn) {
    let h1Under = document.querySelector('[class="text-4xl sm:text-5xl mb-0"]')
h1Under.parentElement.insertBefore(shop_number_thing, h1Under.nextSibling);
mconfig.has_already_added_sadmin_btn = true;
}
// TODO: work more on this
}
    }
    if(config.hide_admin && !config.fake_admin) {
        Array.from(document.querySelectorAll('[class*="border-orange-500 bg-orange-500/10"]')).forEach(e=>e.remove())
        if(window.location.href.includes('/admin')) {
            window.location.href = '/';
        }
    }
  
  }, 50)
})();