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> పూర్తైంది</p>' ..
'<p style="border:1px solid #c8ccd1; padding:1px; overflow:hidden;">' ..
'<span style="width: ' .. leftBar .. '%; height: 10px; background:#00af32; float:left;"> </span>' ..
'<span style="width: ' .. rightBar .. '%; height: 10px; background:#eaecf0; float:left;"> </span>' ..
'</p></div>'
return progBarText
end
local levelNames = {
'[[వికీపీడియా:సేవా పురస్కారాలు#Ultimate Vanguard Editor (or Cardinal Gom, the August Togneme of the Encyclopedia)|Ultimate Vanguard Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Senior Vanguard Editor (or Supreme Gom, the Most Exalted Togneme of the Encyclopedia)|Senior Vanguard Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Vanguard Editor (or Lord Gom, the Highest Togneme of the Encyclopedia)|Vanguard Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Grandmaster Editor First-Class (or Lord High Togneme Laureate)|Grandmaster Editor First-Class]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Grandmaster Editor (or Lord High Togneme Vicarus)|Grandmaster Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Master Editor IV (or Looshpah Laureate of the Encyclopedia)|Master Editor IV]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Master Editor III (or Most Plusquamperfect Looshpah Laureate)|Master Editor III]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Master Editor II (or Auspicious Looshpah)|Master Editor II]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Master Editor (or Illustrious Looshpah)|Master Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Senior Editor III (or Labutnum of the Encyclopedia)|Senior Editor III]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Senior Editor II (or Most Pluperfect Labutnum)|Senior Editor II]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Senior Editor (or Labutnum)|Senior Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Veteran Editor IV (or Tutnum of the Encyclopedia)|Veteran Editor IV]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Veteran Editor III (or Most Perfect Tutnum)|Veteran Editor III]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Veteran Editor II (or Grand Tutnum)|Veteran Editor II]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Veteran Editor (or Tutnum)|Veteran Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Experienced Editor (or Grognard Mirabilaire)|Experienced Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor, level 4]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor, level 3]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor, level 2]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Yeoman Editor (or Grognard Extraordinaire)|Yeoman Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Journeyman Editor (or Grognard)|Journeyman Editor, level 4]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Journeyman Editor (or Grognard)|Journeyman Editor, level 3]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Journeyman Editor (or Grognard)|Journeyman Editor, level 2]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Journeyman Editor (or Grognard)|Journeyman Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Apprentice Editor (or Novato)|Apprentice Editor, level 4]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Apprentice Editor (or Novato)|Apprentice Editor, level 3]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Apprentice Editor (or Novato)|Apprentice Editor, level 2]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Apprentice Editor (or Novato)|Apprentice Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Novice Editor (or Burba)|Novice Editor, level 4]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Novice Editor (or Burba)|Novice Editor, level 3]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Novice Editor (or Burba)|Novice Editor, level 2]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Novice Editor (or Burba)|Novice Editor]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Registered Editor (or Signator)|Registered Editor, level 4]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Registered Editor (or Signator)|Registered Editor, level 3]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#Registered Editor (or Signator)|Registered Editor, level 2]]',
'[[వికీపీడియా:సేవా పురస్కారాలు#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}) ..
'ప్రస్తుతం ఈ సంపాదకులు <b>' .. userLevel .. '</b> అనే సేవా పురస్కార స్థాయిని చేరుకున్నారు.<br><br>'
if topLevel then
fullMessage = fullMessage .. '<div>సంపాదకులు సాధించగలిగే అత్యున్నత పురస్కార స్థాయి ఇదే!</div>'
else
fullMessage = fullMessage .. '<div>తరువాతి స్థాయి అయిన ' .. nextLevel .. ' కు చేరాలంటే, ' .. genderoverride .. ' '
if needsBoth then
fullMessage = fullMessage .. '<b>మరిన్ని దిద్దుబాట్లు</b>, <b>మరింత సమయం</b> రెండూ అవసరం.</div>'
elseif needsEdits then
fullMessage = fullMessage .. '<b>మరిన్ని దిద్దుబాట్లు</b> సాధించాలి.</div>'
else
fullMessage = fullMessage .. '<b>మరి కొన్నాళ్ళు</b> కృషి చెయ్యాలి.</div>'
end
-- Second paragra / progress bars
if displayall or needsBoth or needsEdits then
fullMessage = fullMessage .. 'తరువాతి స్థాయికి వెళ్ళే దిశలో ప్రగతి (దిద్దుబాట్ల పరంగా): [ ' ..
'<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 .. 'తరువాతి స్థాయికి వెళ్ళే దిశలో ప్రగతి (సమయం పరంగా): [ ' ..
(editorTime - lowTime) .. ' రోజులు / ' ..
(highTime - lowTime) .. ' రోజులు ]'
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