Module:Hms
local p = {}
function p._error( error_str )
return '[[Category:Duration with input error]]<strong class="error">Error in Module:Hms: ' .. error_str .. '</strong>'
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:Duration', 'Template:Duration/sandbox'}})
local tmp = args.duration or args[1] or ''
local duration = {}
if tonumber(args[1]) or args[2] or args[3] then
if args[4] then return p._error('Parameter number 4 should not be specified') end
if not args[1] or args[1] == '' then
duration = {args[2] or 0, args[3] or 0}
else
duration = {args[1], args[2] or 0, args[3] or 0}
end
tmp = nil
for k, v in ipairs(duration) do
duration[k] = tonumber(v)
if not duration[k] then return p._error('Invalid values') end
end
elseif args.h or args.m or args.s then
if not args.h or args.h == '' then
duration = {args.m or 0, args.s or 0}
else
duration = {args.h, args.m or 0, args.s or 0}
end
tmp = nil
for k, v in ipairs(duration) do
duration[k] = tonumber(v)
if not duration[k] then return p._error('Invalid values') end
end
else
if mw.ustring.find(tmp, 'class="duration"', 1, yes) then return tmp end -- if there is already a microformat, don't do anything
duration = mw.text.split(mw.ustring.match(tmp, '%d*:?%d+:%d+%.?%d*') or '', ':') -- split into table
if duration[4] then return p._error('Maximum of two colons allowed') end
for k, v in ipairs(duration) do duration[k] = tonumber(v) or 0 end -- convert values to numbers
end
if duration[3] then
if (duration[1] + duration[2] + duration[3]) == 0 then return nil end
if (duration[1] ~= math.ceil(duration[1])) or (duration[2] ~= math.ceil(duration[2])) then return p._error('Hours and minutes values must be integers') end
if duration[3] >= 60 then return p._error('Seconds value must be less than 60') end
if duration[2] >= 60 then return p._error('Minutes value must be less than 60 if hours value is specified') end
if duration[2] < 10 then duration[2] = '0'..duration[2] end -- zero padding
if duration[3] < 10 then duration[3] = '0'..duration[3] end
duration = '<span class="duration"><span class="h">' .. duration[1] .. '</span>:<span class="min">' .. duration[2] .. '</span>:<span class="s">' .. duration[3] .. '</span></span>'
elseif duration[2] then
if (duration[1] + duration[2]) == 0 then return nil end
if duration[1] ~= math.ceil(duration[1]) then return p._error('Hours and minutes values must be integers') end
if duration[2] >= 60 then return p._error('Seconds value must be less than 60') end
if duration[2] < 10 then duration[2] = '0'..duration[2] end -- zero padding
duration = '<span class="duration"><span class="min">' .. duration[1] .. '</span>:<span class="s">' .. duration[2] .. '</span></span>'
else
duration = ''
end
if tmp and tmp ~= '' then
if duration ~= '' then tmp = mw.ustring.gsub(tmp, '%d*:?%d+:%d+%.?%d*', duration, 1) else tmp = tmp .. ' [[Category:Duration without hAudio microformat]]' end
else
if duration ~= '' then tmp = duration end
end
return tmp
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.