Mô đun:Tiến độ giải thưởng phục vụ

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 = ..
'Hoàn thành ' .. percentDone .. '%' ..
..
'&nbsp;' ..
'&nbsp;' ..


return progBarText
end
local levelNames = {
'Sagacious Editor',
'Ultimate Vanguard Editor',
'Senior Vanguard Editor',
'BTV Tiên Khởi',
'BTV Bô lão Thượng cấp',
'BTV Bô lão',
'BTV Thượng cấp IV',
'BTV Thượng cấp III',
'BTV Thượng cấp II',
'BTV Thượng cấp',
'BTV Thâm niên III',
'BTV Thâm niên II',
'BTV Thâm niên',
'Veteran Editor IV',
'BTV Kỳ cựu III',
'BTV Kỳ cựu II',
'BTV Kỳ cựu',
'BTV Kinh nghiệm',
'BTV trung cấp, cấp độ 4',
'BTV trung cấp, cấp độ 3',
'BTV trung cấp, cấp độ 2',
'BTV trung cấp',
'BTV nghiệp dư, cấp độ 4',
'BTV nghiệp dư, cấp độ 3',
'BTV nghiệp dư, cấp độ 2',
'BTV nghiệp dư',
'BTV sơ cấp, cấp độ 4',
'BTV sơ cấp, cấp độ 3',
'BTV sơ cấp, cấp độ 2',
'BTV sơ cấp',
'BTV mới vào nghề, cấp độ 4',
'BTV mới vào nghề, cấp độ 3',
'BTV mới vào nghề, cấp độ 2',
'BTV mới vào nghề',
'BTV đã đăng kí, cấp độ 4',
'BTV đã đăng kí, cấp độ 3',
'BTV đã đăng kí, cấp độ 2',
'BTV đã đăng kí',
'Wikipedian',
}
local levelTime = {
8035.5, 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 = {
205000, 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 = '= levelTime[x] then
timeLevel = x
break
end
end
-- Fine "level" of editor based on edits
for y = 1, 39, 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 ' ..
navbar({"Bản mẫu:Tiến độ giải thưởng phục vụ",style="float:right",mini=1}) ..
'Hiện tại, biên tập viên này đã giành được giải thưởng ' .. userLevel .. ' .'
if topLevel then
fullMessage = fullMessage .. 'Đây là cấp độ cao nhất mà một biên tập viên có thể đạt được!'
else
fullMessage = fullMessage .. 'Để đạt đến cấp độ tiếp theo, ' .. nextLevel .. ', ' .. genderoverride .. ' phải đáp ứng '
if needsBoth then
fullMessage = fullMessage .. 'yêu cầu chỉnh sửa và thời gian.'
elseif needsEdits then
fullMessage = fullMessage .. 'yêu cầu chỉnh sửa.'
else
fullMessage = fullMessage .. 'yêu cầu thời gian.'
end

-- Second paragra / progress bars
if displayall or needsBoth or needsEdits then
fullMessage = fullMessage .. 'Tiến tới cấp độ tiếp theo (bằng cách chỉnh sửa): [&nbsp;' ..
'[' .. url .. ' ' ..
(edits - lowEdits) .. ']&nbsp;/&nbsp;' ..
(highEdits - lowEdits) .. '&nbsp;]'
fullMessage = fullMessage .. progressBar(edits - lowEdits, highEdits - lowEdits)
end
if displayall or needsBoth or needsTime then
fullMessage = fullMessage .. 'Tiến tới cấp độ tiếp theo (theo thời gian): [&nbsp;' ..
(editorTime - lowTime) .. '&nbsp;ngày&nbsp;/&nbsp;' ..
(highTime - lowTime) .. '&nbsp;ngày&nbsp;]'
fullMessage = fullMessage .. progressBar(editorTime - lowTime, highTime - lowTime)
end
fullMessage = fullMessage ..
end
return fullMessage
end

function p.main(frame)
return p.serviceLevel(frame.args)
end

return p