Userscript to add some features to SoM'25 (edit the config in the file!)
// ==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)
})();