您需要先安装一个扩展,例如 篡改猴、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;
- }