// ==UserScript== // @name PPCG Graduation Script // @namespace https://github.com/vihanb/PPCG-Design // @version 4.0.10 // @description A script to self-graduate PPCG // @match *://*.codegolf.stackexchange.com/* // @match *://codegolf.meta.stackexchange.com/* // @match *://chat.stackexchange.com/* // @author PPCG Community // @grant GM_getValue // @grant GM_setValue // @grant GM_listValues // @grant GM_deleteValue // @require https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js // @updateURL https://rawgit.com/vihanb/PPCG-Design/master/ppcg.user.js // ==/UserScript== //////////////////////////////////////////////////////////////////////// ////////////////////// ////////////////////////// ////////////////////// GLOBAL VARIABLES ////////////////////////// ////////////////////// ////////////////////////// //////////////////////////////////////////////////////////////////////// var site = window.location.hostname; // main, meta, or chat if (/meta/.test(site)) site = 'meta'; else if (/chat/.test(site)) site = 'chat'; else site = 'main'; $('[rel="shortcut icon"][href^="//cdn.sstatic.net/Sites/codegolf/img/favicon.ico"]').attr('href', 'https://i.stack.imgur.com/oHkfe.png'); $('img[src^="//cdn.sstatic.net/Sites/codegolf/img/favicon.ico"]').attr('src', 'https://i.stack.imgur.com/oHkfe.png'); var isNotPPCGChat = (site === 'chat' && !$('[rel="shortcut icon"]')[0].href.startsWith('https://i.stack.imgur.com/oHkfe.png')); function style (html) { var style = document.createElement('style'); style.innerHTML = html; document.head.appendChild(style); } // ['Propose', 'Porpoise'], // >:D var reps = [ ['Helka Homba', 'Calvin\'s Hobbies'], ['HelkaHomba', 'CalvinsHobbies'], ['Helka', 'Calvin'], ['fItaJ.png', 'qkXJy.png'], ['Aqua Tart', 'quartata'], ['Don Musolini', 'Luis Mendo'], ['DonMusolini', 'LuisMendo'], ['AandN', 'Adnan'], ['A and N', 'Adnan'], ['lirtosiast', 'Thomas Kwa'], ['I Go Best', 'Geobits'], ['IGoBest', 'Geobits'], //['Code Review', 'the evil code reviewers'] ihaichu - EasterlyIrk on behalf of CR. ]; var rReps = new RegExp(reps.map(function (arr) { return arr[0].replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); }).join(''), 'g'); var repMap = new Map(reps); /* These are the alternating tag choices for the QOD widget */ var QOD_ALTERNATING_TAGS = ['string', 'popularity-contest', 'ascii-art', 'number', 'kolmogorov-complexity', 'graphical-output', 'king-of-the-hill', 'fastest-code', 'restricted-source', 'arithmetic', 'sequence', 'game', 'tips', 'geometry', 'number-theory', 'random', 'primes', 'array-manipulation', 'date', 'image-processing', 'graphs', 'sorting', 'interpreter', 'optimization', 'parsing', 'path-finding', 'puzzle-solver', 'underhanded', 'source-layout', 'base-conversion' ]; if (site === 'chat' && (GM_getValue('main.RUN_IN_CHAT') !== true)) throw 'Not executing script'; // Fonts var HEADER_FONT = 'Lato, "Open Sans", Arial, sans-serif'; // Header text var TEXT_FONT = '"Open Sans", Lato, "Helvetica Neue", Arial, sans-serif'; // Everything else besides code var MONOSPACE_FONT = 'Inconsolata, monospace'; // Monospace font & Tag font var FONT_URL = '//fonts.googleapis.com/css?family=Lato:700|Open+Sans|Inconsolata'; // import any webfonts here // Colors var MOD_FLAIR = '#F0C800'; // Mod diamond var MOD_FLAIR_HOVER = '#FFE32E'; /** ~~~~~~~~~~~~~~~~ MAIN SITE CUSTOMIZABLE PROPERTIES ~~~~~~~~~~~~~~~~ **/ var main = { FAVICON: '//i.stack.imgur.com/oHkfe.png', DISP_ICON: '//i.stack.imgur.com/oHkfe.png', SPRITE_SHEET: '//cdn.rawgit.com/vihanb/PPCG-Design/master/assets/sprites.svg', SEARCH_TEXT: 'Search codegolf.SE', // Set to empty string for no background image BACKGROUND_IMAGE: '//i.stack.imgur.com/4Y7TE.png', PAGE404: '//i.stack.imgur.com/ToEtE.png', BG_COL: '#175D2E', BG_COL_HOVER: 'white', BG_START: 'white', BG_REV: '#329300', CTA_BG: '#3C9331', CTA_FG: 'white', GOAT_MODE: (GM_getValue('main.GOAT_MODE') === true), // default false BACKGROUND_LIGHT: (GM_getValue('main.BACKGROUND_LIGHT') === true), // Lighter shade of the background, CHANGE THROUGH OPTIONS MODE_DARK: (GM_getValue('main.MODE_DARK') === true), RUN_IN_CHAT: (GM_getValue('main.RUN_IN_CHAT') !== false), PREFER_LIGHT_FONT: (GM_getValue('main.PREFER_LIGHT_FONT') === true), USE_LEADERBOARD: (GM_getValue('main.USE_LEADERBOARD') !== false), // default is true SHOW_QOD_WIDGET: (GM_getValue('main.SHOW_QOD_WIDGET') !== false), // default is true USE_AUTOTIO: (GM_getValue('main.USE_AUTOTIO') !== false), // default is true PROPOSE: GM_getValue('main.PROPOSE') || 'Propose', REPLACE_NAMES: GM_getValue('main.REPLACE_NAMES') === true, // default is false SHOW_BYTE_COUNTS: GM_getValue('main.SHOW_BYTE_COUNTS') !== false, // default is true // You can use RGB, hex, or color names BACKGROUND_COLOR: '#FAFAFA', HEADER_BG_COLOR: 'transparent', HEADER_BG_IMAGE: '', HEADER_TEXT_COLOR: '#FFF', CURR_TAB_COLOR: '#62BA15', BULLETIN_BG_COLOR: '#fff8dc', STATS_COLOR: '#FAFAFA', LINK_COLOR: 'rgb(60, 100, 60)', VISITED_LINK_COLOR: 'rgb(30,50,30)', HOVER_LINK_COLOR: 'rgb(45,75,45)', POST_QUESTION_COLOR: 'rgba(140,180,140,0.75)', POST_QUESTION_CORNER_RADIUS: '5px', TEXT_COLOR: 'black', CODE_COLOR: 'black', CODE_BACKGROUND: '#EEE', TOPBAR: 'rgba(12, 13, 14, .86)', LABEL_KEY: '#9199A1', LABEL_KEY_B: '#3B4045', MODULE_H4: '#3B4045', HYPERLINK: '#4E82C2', HYPERLINK_VISITED: '#18529A', POST_HYPERLINK: '#4E82C2', POST_HYPERLINK_VISITED: '#18529A', QUESTION_STATUS: '#FFF7E5', OWNER: '#E1ECF9', USER_INFO: '#848D95', TAG_COLOR: '#D4F493', TAG_HOVER: '#329300', TAG_SHADOW_COLOR: '#BACD56', TAG_HOVER_SHADOW_COLOR: '#256C00', BUTTON_COLOR: '#6DAB71', BUTTON_HOVER: '#5DA261', // Specify nothing to make these default color BOUNTY_COLOR: 'rgb(72,125,75)', BOUNTY_BG_COLOR: 'rgb(172,225,175)', BOUNTY_INDICATOR: '#6DAB71', // QOD Settings QOD_NUMBER_OF_QS_SHOWN: GM_getValue('QOD_NUMBER_OF_QS_SHOWN') || 5, QOD_ALWAYS_SHOWN_TAGS: JSON.parse(GM_getValue('QOD_ALWAYS_SHOWN_TAGS') || 0) || ['code-golf', 'code-challenge', 'math'] }; /** ~~~~~~~~~~~~~~~~ META SITE CUSTOMIZABLE PROPERTIES ~~~~~~~~~~~~~~~~ **/ var meta = { FAVICON: '//i.imgur.com/xJx4Jdd.png', DISP_ICON: '//i.stack.imgur.com/dY4TQ.png', SPRITE_SHEET: '//cdn.rawgit.com/vihanb/PPCG-Design/master/assets/sprites.svg', SEARCH_TEXT: 'Search codegolf.meta.SE', // Set to empty string for no background image BACKGROUND_IMAGE: '//i.stack.imgur.com/4535h.png', PAGE404: '', BG_COL: '#474747', BG_COL_HOVER: '#474747', BG_START: 'rgba(255, 255, 255, 0.8)', BG_REV: 'white', CTA_BG: '#E4E6E8', CTA_FG: 'black', // You can use RGB, hex, or color names BACKGROUND_COLOR: '#FAFAFA', HEADER_BG_COLOR: 'transparent', HEADER_TEXT_COLOR: '#FFF', CURR_TAB_COLOR: 'rgb(72,125,75)', BULLETIN_BG_COLOR: '#fff8dc', STATS_COLOR: '#FCFCFC', // Content BG TAG_COLOR: '', TAG_BORDER_COLOR: '', BUTTON_COLOR: '#303030', POST_QUESTION_COLOR: 'rgba(255, 255, 255, 0.75)', POST_QUESTION_CORNER_RADIUS: '5px', TEXT_COLOR: 'black', CODE_COLOR: 'black', CODE_BACKGROUND: '#EEE', TOPBAR: 'rgba(12, 13, 14, .86)', LABEL_KEY: '#9199A1', LABEL_KEY_B: '#3B4045', MODULE_H4: '#3B4045', HYPERLINK: '#4E82C2', HYPERLINK_VISITED: '#18529A', POST_HYPERLINK: '#4E82C2', POST_HYPERLINK_VISITED: '#18529A', QUESTION_STATUS: '#FFF7E5', OWNER: '#E1ECF9', USER_INFO: '#848D95', // Specify nothing to make these default color BOUNTY_COLOR: 'rgb(72,125,75)', BOUNTY_BG_COLOR: 'rgb(172,225,175)', BOUNTY_INDICATOR: '#6DAB71' }; var darktheme = { BACKGROUND_COLOR: 'red', BACKGROUND_IMAGE: '//i.stack.imgur.com/vAWfF.png', STATS_COLOR: '#364', BULLETIN_TITLE: '#000000', BULLETIN_BG_COLOR: 'rgb(136,170,131)', META_LINK_COLOR: 'rgb(34,36,38)', POST_QUESTION_COLOR: 'rgba(134,180,140,0.75)', POST_QUESTION_RADIUS: '5px', LINK_COLOR: 'rgb(160, 213, 162)', VISITED_LINK_COLOR: 'rgb(110,150,110)', RIGHTBAR_BG: '#B0D4AB', RIGHTBAR_BORDER: 'none', TEXT_COLOR: '#D6ECCB', CODE_COLOR: '#BDB', CODE_BACKGROUND: '#264730', TOPBAR: 'rgba(45, 64, 46, .86)', LABEL_KEY: '#8FAF8E', LABEL_KEY_B: '#B7D4A8', MODULE_H4: '#B7D4A8', HYPERLINK: '#6EC171', HYPERLINK_VISITED: '#6EC171', POST_HYPERLINK: '#6EC171', POST_HYPERLINK_VISITED: '#6EC171', QUESTION_STATUS: '#6B7D5A', OWNER: '#609C86', USER_INFO: '#B8C4CE' }; var metadark = { STATS_COLOR: '#555', BULLETIN_TITLE: '#000000', BULLETIN_BG_COLOR: '#AAA', META_LINK_COLOR: 'rgb(34,36,38)', POST_QUESTION_COLOR: 'rgba(150,150,150,0.75)', POST_QUESTION_RADIUS: '5px', LINK_COLOR: '#DDD', VISITED_LINK_COLOR: '#BBB', HOVER_LINK_COLOR: '#CCC', RIGHTBAR_BG: '#B0D4AB', RIGHTBAR_BORDER: 'none', TEXT_COLOR: '#DDD', CODE_COLOR: '#CCC', CODE_BACKGROUND: '#222', TOPBAR: 'rgba(12, 13, 14, .86)', LABEL_KEY: '#9199A1', LABEL_KEY_B: '#C1C1C1', MODULE_H4: '#9199A1', HYPERLINK: '#4E82C2', HYPERLINK_VISITED: '#99B4D6', POST_HYPERLINK: '#4E82C2', POST_HYPERLINK_VISITED: '#18529A', QUESTION_STATUS: '#FFF7E5', OWNER: '#E1ECF9', USER_INFO: '#848D95' }; var lightbg = { BACKGROUND_COLOR: 'red', BACKGROUND_IMAGE: '//i.stack.imgur.com/t8GhU.png' }; var optionbox = { // Customizes option box BACKGROUND_TINT: 'linear-gradient(rgba(69, 174, 103, 0.57), rgba(73, 166, 83, 0.47))', BACKGROUND_COLOR: '#FAFAFA' }; var BGHEIGHT = 0; // this + 130 var PARSE_CODEBLOCKS = main.SHOW_BYTE_COUNTS; // set to false to not parse code block lengths var PARSE_HEXDUMPS = main.SHOW_BYTE_COUNTS; // set to false to not parse hexdump lengths if (GM_getValue('main.MODE_DARK') === true) { main = $.extend(main, darktheme); meta = $.extend(meta, metadark); } if (GM_getValue('main.BACKGROUND_LIGHT') === true) { main = $.extend(main, lightbg); document.body.style.backgroundRepeat = "repeat"; } /** ~~~~~~~~~~~~~~~~ END CSS PROPERTIES ~~~~~~~~~~~~~~~~ **/ // apply goat mode if (main.GOAT_MODE) { $('head').append($('