您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a suite of color customization to the SHKOLO school site
// ==UserScript== // @name SHKOLO dark mode // @namespace Violentmonkey Scripts // @match https://app.shkolo.bg/* // @description Adds a suite of color customization to the SHKOLO school site // @grant GM_setValue // @grant GM_getValue // @version 1.52 // @author RedTTG // @run-at document-body // @license MIT // @description 12/3/2021, 10:31:05 AM // ==/UserScript== var version = "1.52" var head = document.getElementsByTagName('head')[0]; var link = document.createElement('link'); // DEFAULT COLOR VALUES var dc_dark = "#202040"; var dc_light = "#404080"; var dc_blind = "#6060A0"; var dc_blinding = "#A0A0FA"; var dc_red = "#F02F2F"; var dc_text = "#ADFEFF"; var dc_text_dark = "#003C3D"; var dc_text_hover = "#00FF44"; var dc_gold = "#B0B000"; var dc_enable_profile_pick = false; var dc_image_url = "https://app.shkolo.bg/favicon.ico"; // INIT MOD function initSettingElements() { initGMStorage(); } document.addEventListener("DOMContentLoaded", function(){ initMenu(); customProfile(); if (url.indexOf("customize") > -1){ initCustomize(); } }); // INIT VALUES function initGMStorage(reset = false) { if (!GM_getValue("colorVeryDark") || reset) { GM_setValue("colorVeryDark", dc_dark); } if (!GM_getValue("colorDark") || reset) { GM_setValue("colorDark", dc_light); } if (!GM_getValue("colorLight") || reset) { GM_setValue("colorLight", dc_blind); } if (!GM_getValue("colorVeryLight") || reset) { GM_setValue("colorVeryLight", dc_blinding); } if (!GM_getValue("colorRed") || reset) { GM_setValue("colorRed", dc_red); } if (!GM_getValue("colorText") || reset) { GM_setValue("colorText", dc_text); } if (!GM_getValue("colorTextDark") || reset) { GM_setValue("colorTextDark", dc_text_dark); } if (!GM_getValue("colorTextHover") || reset) { GM_setValue("colorTextHover", dc_text_hover); } if (!GM_getValue("colorGold") || reset) { GM_setValue("colorGold", dc_gold); } if (!GM_getValue("enableProfilePick") || reset) { GM_setValue("enableProfilePick", dc_enable_profile_pick); } if (!GM_getValue("imageURL") || reset) { GM_setValue("imageURL", dc_image_url); } } function initMenu() { x = document.getElementsByClassName('sub-menu'); for(i = 0; i < x.length; i++){ if (x[i].parentNode.children[0].children[1].textContent != "Администрация"){ console.log(x[i].parentNode.children[0].children[1].textContent); continue; } var tag = document.createElement('h5'); var text = document.createTextNode("Черен режим :)"); tag.appendChild(text); tag.classList.add('menu-title'); x[i].appendChild(tag); tag = document.createElement('li'); var tag2 = document.createElement('a'); tag2.href = '/customize'; tag2.id = 'settingsDarkId'; tag2.classList.add('nav-link'); var tag3 = document.createElement('i'); tag3.classList.add('far'); tag3.classList.add('fa-solid'); tag3.classList.add('fa-brush'); text = document.createTextNode(' Опций'); tag2.appendChild(tag3); tag2.appendChild(text); tag.appendChild(tag2); x[i].appendChild(tag); } } function initCustomize(reset = false){ if (reset){ x = document.getElementsByClassName('customizeMenu'); } else { x = document.getElementsByClassName('page-404'); } var parent; for(i = 0; i < x.length; i++){ parent = x[i].parentNode; x[i].parentNode.removeChild(x[i]); } var tag = document.createElement('div'); // ADD COLORS var index = 0 tag.appendChild(generateColorPicker(c_dark, 'h3', 'Най-тъмен цвят....', 'c_dark', index));index++; tag.appendChild(generateColorPicker(c_light, 'h3', 'Тъмен цвят....', 'c_light', index));index++; tag.appendChild(generateColorPicker(c_blind, 'h3', 'Светъл цвят....', 'c_blind', index));index++; tag.appendChild(generateColorPicker(c_blinding, 'h3', 'Най-светъл цвят....', 'c_blinding', index));index++; tag.appendChild(generateColorPicker(c_red, 'h3', 'Червен цвят....', 'c_red', index));index++; tag.appendChild(generateColorPicker(c_gold, 'h3', 'Жълт цвят....', 'c_gold', index));index++; tag.appendChild(generateColorPicker(c_text, 'h3', 'Текст (бял)....', 'c_text', index));index++; tag.appendChild(generateColorPicker(c_text_dark, 'h3', 'Текст (тъмен)....', 'c_text_dark', index));index++; tag.appendChild(generateColorPicker(c_text_hover, 'h3', 'Текст (подчертан)....', 'c_text_hover', index));index++; tag.appendChild(generateBooleanPicker(enable_profile_pick, 'h3', 'Профилна снимка....', 'enable_profile_pick', index, function(x){enable_profile_pick = x.srcElement.checked;initCustomize(true);customProfile();}));index++; if (enable_profile_pick){ tag.appendChild(generateTextPicker(image_url, 'h3', 'Линк за снимка....', 'image_url', index, function(x){image_url = x.srcElement.value;customProfile();}));index++; } // ADD SUBMIT BUTTONS var button_1 = document.createElement('button'); var button_2 = document.createElement('button'); // Make buttons button_1.style.position = 'absolute'; button_2.style.position = 'absolute'; var max = (20+index*46-(index/3.5)); var topv = max-index*30; var lowv = max-index*15; button_1.style.top = topv+'px'; button_2.style.top = lowv+'px'; button_1.style.left = '350px'; button_2.style.left = '350px'; var text = document.createTextNode('Save Changes'); button_1.appendChild(text); text = document.createTextNode('Reset'); button_2.appendChild(text); button_1.classList.add('darkButton'); button_2.classList.add('darkButton'); // Add class to buttons tag.appendChild(button_1); tag.appendChild(button_2); // Apply buttons to customization menu // BUTTON ACTION button_1.onclick = function(){customizeSave();refreshPage();}; button_2.onclick = function(){initGMStorage(true);refreshPage();}; // FINISH OFF tag.classList.add('customizeMenu'); parent.appendChild(tag); } function generateColorPicker(color = "#000000", tag = "h1", text = "Color Picker", id = null, index = 0){ var input = document.createElement('input'); var textTag = document.createElement(tag); var textNode = document.createTextNode(text); textTag.appendChild(textNode); input.type = 'color'; input.value = color; input.style.position = 'absolute'; var y = 40+46.451*index input.style.top = y+'px'; input.style.left = '250px'; if (id != null){ input.id = id; } textTag.appendChild(input); textTag.classList.add('colorPicker'); return textTag } function generateBooleanPicker(boolean = false, tag = "h1", text = "Color Picker", id = null, index = 0, onclick = function(){}){ var input = document.createElement('input'); var textTag = document.createElement(tag); var checkboxTag = document.createElement('label'); var sliderTag = document.createElement('div'); var textNode = document.createTextNode(text); textTag.appendChild(textNode); input.type = 'checkbox'; input.checked = boolean; input.onclick = onclick; checkboxTag.style.position = 'absolute'; var y = 40+46.451*index; checkboxTag.style.top = y+'px'; checkboxTag.style.left = '272px'; if (id != null){ input.id = id; } checkboxTag.appendChild(input); checkboxTag.appendChild(sliderTag); textTag.appendChild(checkboxTag); checkboxTag.classList.add('booleanPickerCheckbox'); checkboxTag.setAttribute('for', id); textTag.classList.add('booleanPicker'); sliderTag.classList.add('booleanPickerSlider'); sliderTag.classList.add('booleanPickerSliderRound'); return textTag } function generateTextPicker(value = "holdup", tag = "h1", text = "Color Picker", id = null, index = 0, onchange = function(){}){ var input = document.createElement('input'); var textTag = document.createElement(tag); var textNode = document.createTextNode(text); textTag.appendChild(textNode); input.type = 'text'; input.value = value; input.onchange = onchange; input.style.position = 'absolute'; var y = 40+46.451*index input.style.top = y+'px'; input.style.left = '253px'; if (id != null){ input.id = id; } textTag.appendChild(input); textTag.classList.add('textPicker'); return textTag } function customizeSave(){ dc_dark = document.getElementById('c_dark').value; dc_light = document.getElementById('c_light').value; dc_blind = document.getElementById('c_blind').value; dc_blinding = document.getElementById('c_blinding').value; dc_red = document.getElementById('c_red').value; dc_gold = document.getElementById('c_gold').value; dc_text = document.getElementById('c_text').value; dc_text_dark = document.getElementById('c_text_dark').value; dc_text_hover = document.getElementById('c_text_hover').value; dc_enable_profile_pick = document.getElementById('enable_profile_pick').checked; if (enable_profile_pick){ dc_image_url = document.getElementById('image_url').value;} else { dc_image_url = image_url; } initGMStorage(true); } function refreshPage(){ window.location.reload(); } // LOAD VALUES initSettingElements() var c_dark = GM_getValue("colorVeryDark"); var c_light = GM_getValue("colorDark"); var c_blind = GM_getValue("colorLight"); var c_blinding = GM_getValue("colorVeryLight"); var c_red = GM_getValue("colorRed"); var c_text = GM_getValue("colorText"); var c_text_dark = GM_getValue("colorTextDark"); var c_text_hover = GM_getValue("colorTextHover"); var c_gold = GM_getValue("colorGold"); var enable_profile_pick = GM_getValue("enableProfilePick"); var image_url = GM_getValue("imageURL"); // LOAD CSS link.rel = 'stylesheet'; link.type = 'text/css'; link.href = 'https://www.redttg.com/shkolo_dark/'+ argument(c_dark)+ //01 argument(c_light)+ //02 argument(c_blind)+ //03 argument(c_blinding)+ //04 argument(c_red)+ //05 argument(c_text)+ //06 argument(c_text_dark)+ //07 argument(c_text_hover)+ //08 argument(c_gold)+ //09 'dashboard.css'; function argument(color = '#000000'){ return color.replace('#','')+'/' } link.media = 'all'; head.appendChild(link); // var url = window.location.href; // CHECK AND HACK PAGE if(url.indexOf("dashboard") > -1){ var x = document.getElementsByClassName("page-header"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_dark; } x = document.getElementsByClassName("page-footer"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_dark; } x = document.getElementsByClassName("col-md-12"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_dark; } x = document.getElementsByClassName("col-sm-6"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_dark; } } else if(url.indexOf("diary") > -1){ var x = document.getElementsByClassName("page-header"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_dark; } x = document.getElementsByClassName("page-footer"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_dark; } x = document.getElementsByClassName("portlet light gradesBody"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_light; x[i].style.color = c_blind; } } else if (url.indexOf("test/result") > -1){ } else if (url.indexOf("app.shkolo.bg") > -1){ var x = document.getElementsByClassName("tab-content"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_blind; } x = document.getElementsByClassName("auth-tabs"); for(i = 0; i < x.length; i++){ x[i].style.backgroundColor = c_light; } x = document.getElementsByClassName("or-login-text"); for(i = 0; i < x.length; i++){ if (x[i].firstElementChild.nodeName == "H4") { x[i].firstElementChild.firstElementChild.style.backgroundColor = c_blind; } } x = document.getElementsByClassName("auth-tabs"); for(i = 0; i < x.length; i++){ for(kid = 0; kid < x[i].children.length; kid++) { if (x[i].children[kid].nodeName == "LI") { x[i].children[kid].firstElementChild.style.backgroundColor = c_light; } } } x = document.getElementsByClassName("phone-label"); for(i = 0; i < x.length; i++){ x[i].style.setProperty("background-color", c_light, "important"); } //btn btn-xs btn-custom-primary x = document.getElementsByClassName("btn-custom-primary"); for(i = 0; i < x.length; i++){ x[i].style.setProperty("background-color", c_light, "important"); } } else { console.log("Couldn't find dark mode mod for this page of shkolo, anything besides the background and side menus might be broken."); console.log("Or it could be it doesn't need javascript, and css is enough, in which case enjoy!"); } function customProfile() { if (enable_profile_pick == '1') { var x = document.getElementsByClassName("img-circle avatar small"); if (!x[0]) { return; } original = x[0].src; images = document.getElementsByTagName("img"); for (const img of images) { if (img.src === original) { img.src = image_url; } } } } // console.log("Shkolo dark mode, checking for updates...") var urls = "https://greasyfork.org/en/scripts/436501-shkolo-dark-mode"; function popup(url) { return window.open(url, '', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=1, height=1, top=0, left=0, visible=none'); } fetch(urls) .then(function(response) { return response.text(); }).then(function(data) { if (data.includes("<dd class=\"script-show-version\"><span>"+version+"</span></dd>")){ console.log("no update found!"); } else { console.log("update avaliable!"); w = popup("https://greasyfork.org/scripts/436501-shkolo-dark-mode/code/SHKOLO dark mode.user.js") setTimeout(function () {w.close();console.log('closed?');}, 1000); } }); console.log("Shkolo Dark Mode finished running for this page."); console.log("Thanks for download!");