SoM'25 Userscript

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

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==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)
})();