您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Customize your contester
// ==UserScript== // @name IITU Contester tools // @namespace https://greasyfork.org/ru/users/77226 // @version 0.4.3 // @description Customize your contester // @author Diasonti // @match http://contester.iitu.kz/* // @license Creative Commons; http://creativecommons.org/licenses/by/4.0/ // @require https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js // @require https://greasyfork.org/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012 // @require https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/highlight.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/languages/cpp.min.js // @resource highlightJsCss https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/styles/atom-one-light.min.css // @grant GM_addStyle // @grant GM_getResourceText // ==/UserScript== //-----------------GM_set/getValue fix------------------------------------------------------------------ if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf('not supported') > - 1)) { this.GM_getValue = function (key, def) { return localStorage[key] || def; }; this.GM_setValue = function (key, value) { localStorage[key] = value; }; this.GM_deleteValue = function (key) { return delete localStorage[key]; }; } //----------------Global Variables------------------------------------------------------------------- var defaultCompiler = '' + GM_getValue('ctdc', 'cpp'); var defaultSubmType = '' + GM_getValue('ctdsb', 'text'); var defaultStudent = '' + GM_getValue('ctdst', 'Admin'); var enableSH = GM_getValue('ctsh', 1); /* console.log("Defaults loaded"); console.log("defaultCompiler: " + defaultCompiler); console.log("defaultSubmType: " + defaultSubmType); console.log("defaultStudent: " + defaultStudent); console.log("enableSH: " + enableSH); */ //-------------------------MAIN---------------------------------------------------------------------- GM_addStyle(GM_getResourceText('highlightJsCss')); hljs.configure({ tabReplace: ' ', useBR: true, languages: [ 'cpp' ] }); $(document).ready(function () { initSettingsBlock(); initSettingsButton(); $('button#save').click(function () { saveSettings(); }); $('button#cancel').click(function () { $('div#ctsetb').show(); $('div#ctsettings').hide(); }); $('div#ctsetb').click(function () { $('div#ctsetb').hide(); $('div#ctsettings').show(); }); $('body').click(function () { setStudent(defaultStudent); setSubmType(defaultSubmType); setComp(defaultCompiler); if (defaultCompiler == 'cpp') { highlightCode(); } }); /* setTimeout(function(){ console.log("TIMER"); setSubmType(defaultSubmType); setComp(defaultCompiler); }, 200); */ }); //----------------------------FUNCTIONS------------------------------------------------------------- function setSubmType(st) { //----SET SUBMISSION TYPE if (st == 'file') { //show('m_code_as_file'); document.getElementById('m_code_as_file').style = ''; //hide('m_code_as_text'); document.getElementById('m_code_as_text').style = 'display:none;'; //obj('m_take').value = 'file'; //to file document.getElementById('m_take').value = 'file'; } else if (st == 'text') { //show('m_code_as_text'); document.getElementById('m_code_as_text').style = ''; //hide('m_code_as_file'); document.getElementById('m_code_as_file').style = 'display:none;'; //obj('m_take').value = 'text'; // to text document.getElementById('m_take').value = 'text'; } //console.log('Submtype set: ' + st); return; } function setComp(dc) { //----SET COMPILER if (dc == 'cpp') { $('#m_acompiler option:contains("C++ (C++)")').attr('selected', true); } else if (dc === 'pascal') { $('#m_acompiler option:contains("Pascal (Free Pascal 2.6.0)")').attr('selected', true); } //console.log('Compiler set: ' + dc); return; } function setStudent(ds) { //-------SET STUDENT $('#sgr_uid option:contains(' + ds + ')').attr('selected', true); $('#m_uid option:contains(' + ds + ')').attr('selected', true); //console.log('Student set: ' + ds); return; } function highlightCode() { //----------HIGHLIGHT CODE if (document.getElementsByTagName('nobr') [0] !== undefined && enableSH == 1) { for (var j = 0; j < document.getElementsByTagName('nobr').length; j++) { var pre = document.createElement('pre'); var newcode = document.createElement('code'); var code = document.getElementsByTagName('nobr') [j]; pre.appendChild(newcode); code.parentElement.appendChild(pre); newcode.appendChild(code); $('pre code nobr').each(function (i, block) { hljs.highlightBlock(block); }); $('pre').css({ 'margin': '0' }); $('code').css({ 'padding': '0' }); $('nobr').css({ 'padding': '0', 'background': 'none' }); pre.parentElement.parentElement.parentElement.parentElement.parentElement.style = pre.parentElement.parentElement.parentElement.parentElement.parentElement.style + 'width:100%;'; //console.log('Code Highlighted'); } } } function initSettingsBlock() { //----SETTINGS BLOCK var set = document.createElement('div'); document.body.appendChild(set); set.id = 'ctsettings'; $('div#ctsettings').css({ 'position': 'fixed', 'bottom': '0', 'right': '0', 'height': '350px', 'width': '300px', 'background': 'white', 'border': '1px solid black' }); var mainb = document.createElement('div'); var footb = document.createElement('div'); document.getElementById('ctsettings').appendChild(mainb); document.getElementById('ctsettings').appendChild(footb); mainb.id = 'mainb'; footb.id = 'footb'; $('div#mainb').css({ 'height': '310px', 'padding': '7px' }); $('div#footb').css({ 'height': '40px', 'padding': '2px' }); //----Main Section var header = document.createElement('p'); document.getElementById('mainb').appendChild(header); header.id = 'ctheader'; header.innerHTML = '<b>Contester Tools</b>'; $('p#ctheader').css({ 'margin': '2px' }); var compilerLabel = document.createElement('p'); document.getElementById('mainb').appendChild(compilerLabel); compilerLabel.id = 'ctclabel'; compilerLabel.innerHTML = 'Default compiler: <br>'; var compilerSelect = document.createElement('select'); document.getElementById('mainb').appendChild(compilerSelect); compilerSelect.id = 'ctcsel'; /* var defopt = document.createElement("option"); document.getElementById("ctcsel").appendChild(defopt); defopt.id = "def"; defopt.innerHTML = "def"; $("option#def").attr("value","java"); */ var cppopt = document.createElement('option'); document.getElementById('ctcsel').appendChild(cppopt); cppopt.id = 'cpp'; cppopt.innerHTML = 'C++'; $('option#cpp').attr('value', 'cpp'); var pascalopt = document.createElement('option'); document.getElementById('ctcsel').appendChild(pascalopt); pascalopt.id = 'pascal'; pascalopt.innerHTML = 'Pascal'; $('option#pascal').attr('value', 'pascal'); $('option#' + defaultCompiler).attr('selected', true); var submLabel = document.createElement('p'); document.getElementById('mainb').appendChild(submLabel); submLabel.id = 'ctsblabel'; submLabel.innerHTML = 'Default submission type: <br>'; var submSelect = document.createElement('select'); document.getElementById('mainb').appendChild(submSelect); submSelect.id = 'ctsbsel'; var textopt = document.createElement('option'); document.getElementById('ctsbsel').appendChild(textopt); textopt.id = 'textopt'; textopt.innerHTML = 'Text'; $('option#textopt').attr('value', 'text'); var fileopt = document.createElement('option'); document.getElementById('ctsbsel').appendChild(fileopt); fileopt.id = 'fileopt'; fileopt.innerHTML = 'File'; $('option#fileopt').attr('value', 'file'); $('option#' + defaultSubmType + 'opt').attr('selected', true); var studentLabel = document.createElement('p'); document.getElementById('mainb').appendChild(studentLabel); studentLabel.id = 'ctslabel'; studentLabel.innerHTML = 'Default student: <br>'; if (document.getElementById('sgr_uid') !== null) { var studentsList = document.getElementById('sgr_uid'); var studentSelect = studentsList.cloneNode(true); document.getElementById('mainb').appendChild(studentSelect); studentSelect.id = 'ctssel'; $('#ctssel').removeAttr('name class onchange'); $('#ctssel option:contains(' + defaultStudent + ')').attr('selected', true); } else { var studentl = document.createElement('select'); document.getElementById('mainb').appendChild(studentl); studentl.id = 'studentl'; var student = document.createElement('option'); document.getElementById('studentl').appendChild(student); student.innerHTML = defaultStudent; $('select#studentl').attr('disabled', 'true'); } var syntaxLabel = document.createElement('p'); document.getElementById('mainb').appendChild(syntaxLabel); syntaxLabel.id = 'ctsynlabel'; syntaxLabel.innerHTML = 'Syntax highlight: '; var syntaxCheckBox = document.createElement('input'); document.getElementById('mainb').appendChild(syntaxCheckBox); syntaxCheckBox.id = 'ctsyncb'; syntaxCheckBox.type = 'checkbox'; var a; if (enableSH == 1) { a = true; } else { a = false; } syntaxCheckBox.checked = a; //----Foot Bar var savebutton = document.createElement('button'); var cancelbutton = document.createElement('button'); document.getElementById('footb').appendChild(savebutton); document.getElementById('footb').appendChild(cancelbutton); savebutton.id = 'save'; cancelbutton.id = 'cancel'; savebutton.innerHTML = 'Save'; cancelbutton.innerHTML = 'Cancel'; $('button#save').css({ 'position': 'absolute', 'left': '7px', 'bottom': '4px' }); $('button#cancel').css({ 'position': 'absolute', 'right': '7px', 'bottom': '4px' }); //-----Hide Block by default $('div#ctsettings').hide(); return; } function initSettingsButton() { //----SETTINGS BUTTON var setB = document.createElement('div'); var setlabel = document.createElement('p'); document.body.appendChild(setB); setB.appendChild(setlabel); setlabel.innerHTML = 'CTools<br>Settings'; setB.id = 'ctsetb'; $('div#ctsetb p').css({ 'cursor': 'pointer' }); $('div#ctsetb').css({ 'position': 'fixed', 'bottom': '0', 'right': '0', 'height': '50px', 'width': '50px', 'background': 'pink', 'border': '2px solid black', 'opacity': '0.5', 'cursor': 'pointer' }); return; } function saveSettings() { defaultCompiler = document.getElementById('ctcsel').options[document.getElementById('ctcsel').selectedIndex].value; GM_setValue('ctdc', defaultCompiler); defaultSubmType = document.getElementById('ctsbsel').options[document.getElementById('ctsbsel').selectedIndex].value; GM_setValue('ctdsb', defaultSubmType); if (document.getElementById('ctsyncb').checked) { enableSH = 1; } else { enableSH = 0; } GM_setValue('ctsh', enableSH); if (document.getElementById('ctssel') !== null) { defaultStudent = document.getElementById('ctssel').options[document.getElementById('ctssel').selectedIndex].innerHTML; GM_setValue('ctdst', defaultStudent); } return; }