Module:Service award progress
Documentation for this module may be created at Module:Service award progress/doc
Documentation for this module may be created at Module:Service award progress/doc
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 Editor|Ultimate Editor]]',
'[[Wikipedia:Service awards#Grand Master Editor|Grand Master Editor]]',
'[[Wikipedia:Service awards#Master Editor III|Master Editor III]]',
'[[Wikipedia:Service awards#Master Editor II|Master Editor II]]',
'[[Wikipedia:Service awards#Master Editor I|Master Editor I]]',
'[[Wikipedia:Service awards#Senior Editor III|Senior Editor III]]',
'[[Wikipedia:Service awards#Senior Editor II|Senior Editor II]]',
'[[Wikipedia:Service awards#Senior Editor I|Senior Editor I]]',
'[[Wikipedia:Service_awards#Experienced_Editor|Experienced Editor]]',
'[[Wikipedia:Service_awards#Yeoman_Editor|Yeoman Editor]]',
'[[Wikipedia:Service_awards#Journeyman_Editor|Journeyman Editor]]',
'[[Wikipedia:Service_awards#Apprentice_Editor|Apprentice Editor]]',
'[[Wikipedia:Service_awards#Novice_Editor|Novice Editor]]',
'Wikipedian',
}
local levelTime = {
2555, 1826.25, 1643.6, 1460, 1278.38, 1095, 913.1, 730.5, 547.8, 365.25, 182.5, 91.25, 30.4, 0,
}
local levelEdits = {
50000, 40000, 30000, 20000, 10000, 7500, 6250, 5000, 3750, 2500, 1200, 600, 200, 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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.