Module:Service award progress
MyWikiBiz, Author Your Legacy — Friday November 15, 2024
Jump to navigationJump to searchThis template implements Template:T, and shows a set of progress bars based on a user's Service award level and their progression up the scale. Check the template for usage documenation.
local navbar = require('Module:Navbar')._navbar local mm = require('Module:Math') local p = {} local function stripToNil(text) -- If text is a string, return its trimmed content, or nil if empty. -- Otherwise return text (which may, for example, be nil). if type(text) == 'string' then text = text:match('(%S.-)%s*$') end return text end local function progressBar(current, total) local percentDone = mm._round(current / total * 100, 1) local leftBar = '' local rightBar = '' if percentDone >= 100 then leftBar = 100 rightBar = 0 else leftBar = current / total * 100 rightBar = (100-current) / total * 100 end local progBarText = '<div style="width:75%; margin:auto; text-align:center;">' .. '<p><span style="font-size: 120%;"><b>' .. percentDone .. '%</b></span> completed</p>' .. '<p style="border:1px solid #c8ccd1; padding:1px; overflow:hidden;">' .. '<span style="width: ' .. leftBar .. '%; height: 2px; background:#00af32; float:left;"> </span>' .. '<span style="width: ' .. rightBar .. '%; height: 2px; background:#eaecf0; float:left;"> </span>' .. '</p></div>' return progBarText end local levelNames = { '[[Wikipedia:Service awards#Ultimate Vanguard Editor (or Cardinal Gom, the August Togneme of the Encyclopedia)|Ultimate Vanguard Editor]]', '[[Wikipedia:Service awards#Senior Vanguard Editor (or Supreme Gom, the Most Exalted Togneme of the Encyclopedia)|Senior Vanguard Editor]]', '[[Wikipedia:Service awards#Vanguard Editor (or Lord Gom, the Highest Togneme of the Encyclopedia)|Vanguard Editor]]', '[[Wikipedia:Service awards#Grandmaster Editor First-Class (or Lord High Togneme Laureate)|Grandmaster Editor First-Class]]', '[[Wikipedia:Service awards#Grandmaster Editor (or Lord High Togneme Vicarus)|Grandmaster Editor]]', '[[Wikipedia:Service awards#Master Editor IV (or Looshpah Laureate of the Encyclopedia)|Master Editor IV]]', '[[Wikipedia:Service awards#Master Editor III (or Most Plusquamperfect Looshpah Laureate)|Master Editor III]]', '[[Wikipedia:Service awards#Master Editor II (or Auspicious Looshpah)|Master Editor II]]', '[[Wikipedia:Service awards#Master Editor (or Illustrious Looshpah)|Master Editor]]', '[[Wikipedia:Service awards#Senior Editor III (or Labutnum of the Encyclopedia)|Senior Editor III]]', '[[Wikipedia:Service awards#Senior Editor II (or Most Pluperfect Labutnum)|Senior Editor II]]', '[[Wikipedia:Service awards#Senior Editor (or Labutnum)|Senior Editor]]', '[[Wikipedia:Service awards#Veteran Editor IV (or Tutnum of the Encyclopedia)|Veteran Editor IV]]', '[[Wikipedia:Service awards#Veteran Editor III (or Most Perfect Tutnum)|Veteran Editor III]]', '[[Wikipedia:Service awards#Veteran Editor II (or Grand Tutnum)|Veteran Editor II]]', '[[Wikipedia:Service awards#Veteran Editor (or Tutnum)|Veteran Editor]]', '[[Wikipedia:Service awards#Experienced Editor (or Grognard Mirabilaire)|Experienced Editor]]', '[[Wikipedia:Service awards#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor, level 4]]', '[[Wikipedia:Service awards#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor, level 3]]', '[[Wikipedia:Service awards#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor, level 2]]', '[[Wikipedia:Service awards#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor]]', '[[Wikipedia:Service awards#Journeyman Editor (or Grognard)|Journeyman Editor, level 4]]', '[[Wikipedia:Service awards#Journeyman Editor (or Grognard)|Journeyman Editor, level 3]]', '[[Wikipedia:Service awards#Journeyman Editor (or Grognard)|Journeyman Editor, level 2]]', '[[Wikipedia:Service awards#Journeyman Editor (or Grognard)|Journeyman Editor]]', '[[Wikipedia:Service awards#Apprentice Editor (or Novato)|Apprentice Editor, level 4]]', '[[Wikipedia:Service awards#Apprentice Editor (or Novato)|Apprentice Editor, level 3]]', '[[Wikipedia:Service awards#Apprentice Editor (or Novato)|Apprentice Editor, level 2]]', '[[Wikipedia:Service awards#Apprentice Editor (or Novato)|Apprentice Editor]]', '[[Wikipedia:Service awards#Novice Editor (or Burba)|Novice Editor, level 4]]', '[[Wikipedia:Service awards#Novice Editor (or Burba)|Novice Editor, level 3]]', '[[Wikipedia:Service awards#Novice Editor (or Burba)|Novice Editor, level 2]]', '[[Wikipedia:Service awards#Novice Editor (or Burba)|Novice Editor]]', '[[Wikipedia:Service awards#Registered Editor (or Signator)|Registered Editor, level 4]]', '[[Wikipedia:Service awards#Registered Editor (or Signator)|Registered Editor, level 3]]', '[[Wikipedia:Service awards#Registered Editor (or Signator)|Registered Editor, level 2]]', '[[Wikipedia:Service awards#Registered Editor (or Signator)|Registered Editor]]', 'Wikipedian', } local levelTime = { 7305, 6574.5, 5844, 5113.5, 4383, 3652.4, 2922, 2556.7, 2191.5, 1826.2, 1643.6, 1461, 1278.4, 1095.7, 913.1, 730.5, 547.9, 501.75, 456.25, 410.75, 365.25, 319.1, 273.6, 228.1, 182.6, 160.3, 137.3, 114.3, 91.3, 75.5, 60.5, 45.5, 30.5, 24, 16, 8, 1, 0, } local levelEdits = { 175000, 150000, 132000, 114000, 96000, 78000, 60000, 51000, 42000, 33000, 28500, 24000, 20000, 16000, 12000, 8000, 6000, 5500, 5000, 4500, 4000, 3500, 3000, 2500, 2000, 1750, 1500, 1250, 1000, 800, 600, 400, 200, 150, 100, 50, 1, 0, } function p.serviceLevel(args) --Inputs local editorTime = tonumber(stripToNil(args.editorTime)) local edits = tonumber(stripToNil(args.edits)) local styleoverride = stripToNil(args.styleoverride) local genderoverride = stripToNil(args.genderoverride) local url = stripToNil(args.url) -- Other Variables local timeLevel = '' -- Level associated with time local editLevel = '' -- Level associated with edits local userLevel = '' -- Full name of current user level local lowEdits = '' -- Minimum number of edits for current user level local lowTime = '' -- Minimum amount of time for current user level local highEdits = '' -- Max number of edits for current user level local highTime = '' -- Max amount of time for current user level local nextLevel = '' -- Full name of next user level local fullMessage = '<div style="' -- Output seed local topLevel = false local needsEdits = false local needsTime = false local needsBoth = false local displayall = false if stripToNil(args.displayall) == 'yes' then displayall = true end -- Find "level" of editor based on time for x = 1, 38, 1 do if editorTime >= levelTime[x] then timeLevel = x break end end -- Fine "level" of editor based on edits for y = 1, 38, 1 do if edits >= levelEdits[y] then editLevel = y break end end -- Set user level and the next level up if timeLevel == editLevel then if timeLevel == 1 then userLevel = levelNames[1] topLevel = true else userLevel = levelNames[editLevel] nextLevel = levelNames[editLevel-1] lowEdits = levelEdits[editLevel] highEdits = levelEdits[editLevel-1] lowTime = levelTime[editLevel] highTime = levelTime[editLevel-1] needsBoth = true end elseif timeLevel < editLevel then userLevel = levelNames[editLevel] nextLevel = levelNames[editLevel-1] lowEdits = levelEdits[editLevel] highEdits = levelEdits[editLevel-1] lowTime = levelTime[editLevel] highTime = levelTime[editLevel-1] needsEdits = true else userLevel = levelNames[timeLevel] nextLevel = levelNames[timeLevel-1] lowEdits = levelEdits[timeLevel] highEdits = levelEdits[timeLevel-1] lowTime = levelTime[timeLevel] highTime = levelTime[timeLevel-1] needsTime = true end -- Build notice -- First paragraph fullMessage = fullMessage .. styleoverride .. '">' .. navbar({"Template:Service award progress",style="float:right",mini=1}) .. 'Currently, this editor has earned the <b>' .. userLevel .. '</b> service award.<br><br>' if topLevel then fullMessage = fullMessage .. '<div>This is the highest level achievable by an editor!</div>' else fullMessage = fullMessage .. '<div>To get to the next level, ' .. nextLevel .. ', ' .. genderoverride .. ' to meet the ' if needsBoth then fullMessage = fullMessage .. '<b>editing</b> and the <b>time</b> requirement.</div>' elseif needsEdits then fullMessage = fullMessage .. '<b>editing</b> requirement.</div>' else fullMessage = fullMessage .. '<b>time</b> requirement.</div>' end -- Second paragra / progress bars if displayall or needsBoth or needsEdits then fullMessage = fullMessage .. 'Progress towards the next level (by edits): [ ' .. '<span class="plainlinks">[' .. url .. ' ' .. (edits - lowEdits) .. ']</span> / ' .. (highEdits - lowEdits) .. ' ]' fullMessage = fullMessage .. progressBar(edits - lowEdits, highEdits - lowEdits) end if displayall or needsBoth or needsTime then fullMessage = fullMessage .. 'Progress towards the next level (by time): [ ' .. (editorTime - lowTime) .. ' days / ' .. (highTime - lowTime) .. ' days ]' fullMessage = fullMessage .. progressBar(editorTime - lowTime, highTime - lowTime) end fullMessage = fullMessage .. '</div>' end return fullMessage end function p.main(frame) return p.serviceLevel(frame.args) end return p