User:Alpha3031/testing/voteSymbols.js

// Fork of User:Pythoncoder/Scripts/voteSymbols.js for me to play with

// Revised from User:Ais523/votenames.js // Code for adding icons to !votes in AfDs, RfAs, etc... // Doesn't affect the page, just shows the icons when this code is installed. // Please see Image:Votenames.js-enhanced_SfD.png and // c:Category:Norro style 1 icons for copyright info on the images that are added.

$(function {	let ns = mw.config.get('wgNamespaceNumber');	if (!(ns%2)&&ns!==2&&ns!==4||ns===-1) {		return; // Avoid all even nses (content) except WP and User	}	b = (id, filename, width = 60) => "//upload.wikimedia.org/wikipedia/commons/thumb/"                                     + id + filename + "/" + width + "px-" + filename + ".png";	const vs = {		support: b("9/94/", "Symbol_support_vote.svg"),		oppose: b("7/7f/", "Symbol_oppose_vote.svg"),		no: b("7/7f/", "Symbol_oppose_vote.svg"),		keep: b("d/d0/", "Symbol_keep_vote.svg"),		delete: b("8/89/", "Symbol_delete_vote.svg"),		speedy: b("6/6d/", "Symbol_speedy_delete_vote.svg"),		neutral: b("8/89/", "Symbol_neutral_vote.svg"),		merge: b("b/b0/", "Symbol_merge_vote.svg"),		move: b("5/50/", "Symbol_move_vote.svg"),		redirect: b("0/0c/", "Symbol_redirect_vote.svg"),		orangexc: b("b/ba/", "Symbol_opinion_vote.svg"),		note: b("e/e0/", "Symbol_comment_vote.svg"), unsupport: b("f/f6/", "Symbol_unsupport_vote.svg"), query: b("e/e0/", "Symbol_question.svg"), dab: b("2/2a/", "Symbol_dab_class.svg"), wait: b("5/54/", "Symbol_wait.svg"), rename: b("0/0a/", "Symbol_rename_vote.svg"), undelete: b("c/c5/", "Symbol_support2_vote.svg"), close: b("3/3b/", "Symbol_no_support_vote.svg"), split: b("0/0d/", "Symbol_split_vote.svg"), abstain: b("6/61/", "Symbol_abstain_vote.svg"), draft: b("0/09/", "Symbol_draft_class.svg"), user: b("1/13/", "Symbol_user_class.svg"), list: b("d/db/", "Symbol_list_class.svg"), reply: b("d/d2/", "Symbol_reply.svg"), salt: b("6/66/", "Symbol_create_protect_vote.svg"), withdraw: b("9/90/", "Cancelled_process_mini.svg", 90), info: b("8/8c/", "Symbol_information_vote.svg"), update: b("1/18/", "Symbol_version_future.svg"), snow: b("d/d3/", "Bouncing_Snowball.png"), blank: b("1/1b/", "Symbol_plain_white.svg"), ongoing: b("e/e3/", "Symbol_wait_blue.svg") };	const prefixed = { keep: vs, speedy: { delete: b("6/6d/", "Symbol_speedy_delete_vote.svg"), keep: b("b/bc/", "Symbol_speedy_keep_vote.svg"), redirect: b("2/22/", "Symbol_speedy_redirect_vote.svg"), },		strong: { support: b("8/84/", "Symbol_strong_support_vote.svg"), oppose: b("5/5e/", "Symbol_oppose_vote_oversat.svg") },		weak: { support: b("8/8c/", "GA_candidate.svg"), oppose: b("f/f5/", "BA_candidate.svg") },		partial: { support: b("b/b2/", "Symbol_conditional_support.svg") },		no: { consensus: b('6/6a/', 'Symbol_na_class.svg') }	};	let unalias={}; function a { for (let i=0; i < arguments.length; i++) unalias[arguments[i]] = arguments[0]; }	a('no', "don't", 'not', 'without'); a('support', 'accept', 'favor', 'endorse'); a('oppose', 'object', 'overturn', 'disallow', 'decline'); a('keep', 'allow', 'permit'); a('delete', 'delet', 'remove', 'pull'); a('undelete', 'restore'); a('snow', 'snowball'); a('neutral'); a('merge', 'upmerge'); a('move', 'transwiki', 'convert'); a('redirect', 'retarget', 'repost', 'redir'); a('orangexc', 'relist', 'subst', 'change', 'recuse'); // Note that the orange exclamation mark icon is often used for debate-specific !votes a('note', 'comment', 'comments'); a('split'); a('delist', 'demote', 'unsupport'); a('question', 'query', 'query'); a('user'); a('dab', 'disambiguate', 'sia'); a('list'); a('wait', 'hold'); a('rename'); a('close'); a('abstain', 'unnecessary'); a('reply'); a('draft', 'incubate'); a('salt'); a('withdraw', 'withdrawn'); a('consensus'); a('info', 'information'); a('ongoing'); a('update', 'answer'); a('blank');

// prefixes also need to be aliased a('speedy'); a('strong'); a('weak'); a('partial', 'conditional');

let bstrings=document.body.getElementsByTagName("b"); let un = (s) => unalias[s?s.replace(/(ed|i?fy|io?ng?)$/g, ""):'']; let isCompound = (cur, next) => prefixed.hasOwnProperty(cur) && next && prefixed[cur].hasOwnProperty(next); let tagify = (src) => ' '; for (let string of bstrings) { if (string.previousElementSibling &&			string.previousElementSibling.tagName.toLowerCase === 'img') continue; const words = string.textContent.toLowerCase.replace(/[^a-z']/g, " ").split(" "); if (words.length > 8) continue; let x=""; for (let i=0; i<words.length; i++) { const name = un(words[i]); if (isCompound(name, un(words[i+1]))) { while(isCompound(un(words[++i]), un(words[i+1]))) { // Skip to last possible compound }			x += tagify(prefixed[un(words[i-1])][un(words[i])]); } else if (vs.hasOwnProperty(name)) { x += tagify(vs[name]); }		}		if (x!=="") string.innerHTML=x+string.innerHTML; } }); //