Editing Module:Age
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 3: | Line 3: | ||
local mtext = { | local mtext = { | ||
-- Message and other text that should be localized. | -- Message and other text that should be localized. | ||
['mt-bad-param1'] = 'Invalid parameter $1', | ['mt-bad-param1'] = 'Invalid parameter $1', | ||
['mt-bad-param2'] = 'Parameter $1=$2 is invalid', | ['mt-bad-param2'] = 'Parameter $1=$2 is invalid', | ||
Line 26: | Line 25: | ||
['mt-template-bad-name'] = 'The specified template name is not valid', | ['mt-template-bad-name'] = 'The specified template name is not valid', | ||
['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation', | ['mt-template-x'] = 'The template invoking this must have "|template=x" where x is the wanted operation', | ||
['txt-age'] = '(age ', | |||
['txt-aged'] = ' (aged ', | |||
['txt-and'] = ' and ', | ['txt-and'] = ' and ', | ||
['txt-comma-and'] = ', and ', | ['txt-comma-and'] = ', and ', | ||
['txt-error'] = 'Error: ', | ['txt-error'] = 'Error: ', | ||
['txt- | ['txt-or'] = ' or ', | ||
} | } | ||
Line 64: | Line 50: | ||
-- Return objects exported from the date module or its sandbox. | -- Return objects exported from the date module or its sandbox. | ||
if not _Date then | if not _Date then | ||
local sandbox = frame:getTitle():find( | local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or '' | ||
local datemod = require( | local datemod = require('Module:Date' .. sandbox) | ||
local realDate = datemod._Date | local realDate = datemod._Date | ||
_currentDate = datemod._current | _currentDate = datemod._current | ||
Line 116: | Line 102: | ||
end | end | ||
return text | return text | ||
end | end | ||
Line 138: | Line 111: | ||
end | end | ||
local function message(msg, | local function message(msg, id) | ||
-- Return formatted message text for an error or warning. | -- Return formatted message text for an error or warning. | ||
local function getText(msg) | local function getText(msg) | ||
return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined') | return mtext[msg] or error('Bug: message "' .. tostring(msg) .. '" not defined') | ||
end | |||
local text | |||
if type(msg) == 'table' then | |||
text = getText(msg[1]) | |||
local rep = {} | |||
for i, v in ipairs(msg) do | |||
if i > 1 then | |||
rep['$' .. (i - 1)] = v | |||
end | |||
end | |||
text = text:gsub('$%d+', rep) | |||
else | |||
text = getText(msg) | |||
end | end | ||
local categories = { | local categories = { | ||
error = | error = '[[Category:Age error]]', | ||
warning = | warning = '[[Category:Age error]]', -- same as error until determine whether 'Age warning' would be worthwhile | ||
} | } | ||
local a, b | local a, b, category | ||
if id == 'warning' then | |||
a = '<sup>[<i>' | a = '<sup>[<i>' | ||
b = '</i>]</sup>' | b = '</i>]</sup>' | ||
else | else | ||
a = '<strong class="error">' .. getText('txt-error') | a = '<strong class="error">' .. getText('txt-error') | ||
b = '</strong>' | b = '</strong>' | ||
end | end | ||
if mw.title.getCurrentTitle():inNamespaces(0) then | if mw.title.getCurrentTitle():inNamespaces(0) then | ||
-- Category only in namespaces: 0=article. | -- Category only in namespaces: 0=article. | ||
category = | category = categories[id or 'error'] | ||
end | end | ||
return | return | ||
Line 195: | Line 178: | ||
-- i == 1 for the first number which can optionally start with an uppercase letter. | -- i == 1 for the first number which can optionally start with an uppercase letter. | ||
number = tostring(number) | number = tostring(number) | ||
return require( | return require('Module:ConvertNumeric').spell_number( | ||
number, | number, | ||
nil, -- fraction numerator | nil, -- fraction numerator | ||
Line 212: | Line 195: | ||
if mw.ustring.len(extra) > 1 then | if mw.ustring.len(extra) > 1 then | ||
-- Parameter "~" gives "~3" whereas "over" gives "over 3". | -- Parameter "~" gives "~3" whereas "over" gives "over 3". | ||
extra = extra .. ' ' | |||
end | end | ||
if flagCurrent then | if flagCurrent then | ||
Line 239: | Line 220: | ||
sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag))) | sortKey = string.format('%d', sortKey) .. string.format('%015.0f', math.floor(value * 10^(14-mag))) | ||
end | end | ||
local | local lhs, rhs | ||
if sortable == 'sortable_table' then | if sortable == 'sortable_table' then | ||
lhs = 'data-sort-value="' | |||
rhs = '"|' | |||
else | else | ||
lhs = sortable == 'sortable_debug' and | |||
'<span style="border:1px solid;display:inline;" class="sortkey">' or | |||
'<span style="display:none" class="sortkey">' | |||
rhs = '♠</span>' | |||
end | end | ||
return | return lhs .. sortKey .. rhs | ||
end | end | ||
end | end | ||
Line 293: | Line 276: | ||
hm = { 'H', 'M', id = 'hm' }, | hm = { 'H', 'M', id = 'hm' }, | ||
hms = { 'H', 'M', 'S', id = 'hms' }, | hms = { 'H', 'M', 'S', id = 'hms' }, | ||
d = { 'd', id = 'd' }, | d = { 'd', id = 'd' }, | ||
dh = { 'd', 'H', id = 'dh' }, | dh = { 'd', 'H', id = 'dh' }, | ||
Line 350: | Line 331: | ||
date = date + item | date = date + item | ||
if not date then | if not date then | ||
return message('mt-cannot-add', item) | return message({ 'mt-cannot-add', item }) | ||
end | end | ||
end | end | ||
Line 370: | Line 351: | ||
end | end | ||
end | end | ||
return (sortKey or '' | return (sortKey or '') .. (result or '') | ||
end | end | ||
Line 407: | Line 388: | ||
local name = names[components[i]] | local name = names[components[i]] | ||
if name then | if name then | ||
local plural = names.plural | |||
if not plural or (islist and v[2] or v) == 1 then | |||
plural = '' | |||
end | end | ||
text:add(vstr .. sep .. name) | text:add(vstr .. sep .. name .. plural) | ||
else | else | ||
text:add(vstr) | text:add(vstr) | ||
Line 458: | Line 440: | ||
-- which have been validated. | -- which have been validated. | ||
local names = { | local names = { | ||
abbr_off = { | abbr_off = { | ||
plural = 's', | |||
sep = ' ', | sep = ' ', | ||
y = | y = 'year', | ||
m = | m = 'month', | ||
w = | w = 'week', | ||
d = | d = 'day', | ||
H = | H = 'hour', | ||
M = | M = 'minute', | ||
S = | S = 'second', | ||
}, | }, | ||
abbr_on = { | abbr_on = { | ||
Line 482: | Line 461: | ||
}, | }, | ||
abbr_infant = { -- for {{age for infant}} | abbr_infant = { -- for {{age for infant}} | ||
plural = 's', | |||
sep = ' ', | sep = ' ', | ||
y = | y = 'yr', | ||
m = | m = 'mo', | ||
w = | w = 'wk', | ||
d = | d = 'day', | ||
H = | H = 'hr', | ||
M = | M = 'min', | ||
S = | S = 'sec', | ||
}, | }, | ||
abbr_raw = {}, | abbr_raw = {}, | ||
Line 570: | Line 550: | ||
(textOptions.suffix or '') | (textOptions.suffix or '') | ||
end | end | ||
return message('mt-bad-show', show.id) | return message({ 'mt-bad-show', show.id }) | ||
end | end | ||
Line 644: | Line 624: | ||
for i = 1, nrDates do | for i = 1, nrDates do | ||
local index = i == 1 and 1 or 4 | local index = i == 1 and 1 or 4 | ||
dates[i] = Date(fields[index], fields[index+1], fields[index+2]) | |||
end | end | ||
else | else | ||
Line 881: | Line 850: | ||
return message('mt-invalid-bd-age') | return message('mt-invalid-bd-age') | ||
end | end | ||
local disp = | local disp, show = 'disp_raw', 'y' | ||
if diff.years < 2 then | if diff.years < 2 then | ||
disp = 'disp_age' | disp = 'disp_age' | ||
Line 891: | Line 859: | ||
end | end | ||
end | end | ||
local | local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy) | ||
local result = '(<span class="bday">%-Y-%m-%d</span>) </span>' .. | |||
(df and '%-d %B %-Y' or '%B %-d, %-Y') | |||
result = from_en('<span style="display:none"> ' .. | |||
date:text(result) .. | |||
'<span class="noprint ForceAgeToShow"> ' .. | |||
mtext['txt-age'] .. | |||
dateDifference({ | |||
diff = diff, | diff = diff, | ||
show = show, | show = show, | ||
Line 901: | Line 872: | ||
disp = disp, | disp = disp, | ||
sep = 'sep_space', | sep = 'sep_space', | ||
})) | }) .. | ||
')</span>') | |||
local warnings = tonumber(frame.args.warnings) | local warnings = tonumber(frame.args.warnings) | ||
if warnings and warnings > 0 then | if warnings and warnings > 0 then | ||
Line 931: | Line 902: | ||
end | end | ||
if invalid then | if invalid then | ||
result = result .. message('mt-bad-param1', invalid) | result = result .. message({ 'mt-bad-param1', invalid }, 'warning') | ||
end | end | ||
end | end | ||
Line 969: | Line 940: | ||
return message('mt-invalid-dates-age') | return message('mt-invalid-dates-age') | ||
end | end | ||
local | local df = stripToNil(args.df) -- day first (dmy); default is month first (mdy) | ||
local result | |||
if date1.day then -- y, m, d known | if date1.day then -- y, m, d known | ||
result = (df and | |||
'%-d %B %-Y' or | |||
'%B %-d, %-Y') .. | |||
'<span style="display:none">(%-Y-%m-%d)</span>' | |||
elseif date1.month then -- y, m known; d unknown | elseif date1.month then -- y, m known; d unknown | ||
result = | |||
'%B %-Y' .. | |||
'<span style="display:none">(%-Y-%m-00)</span>' | |||
else -- y known; m, d unknown | else -- y known; m, d unknown | ||
result = | |||
'%-Y' .. | |||
'<span style="display:none">(%-Y-00-00)</span>' | |||
end | end | ||
result = from_en(date1:text(result) .. | |||
mtext['txt- | mtext['txt-aged'] .. | ||
dateDifference({ | |||
diff = diff, | diff = diff, | ||
show = 'y', | show = 'y', | ||
abbr = 'abbr_off', | abbr = 'abbr_off', | ||
disp = | disp = 'disp_raw', | ||
range = 'dash', | range = 'dash', | ||
sep = 'sep_space', | sep = 'sep_space', | ||
})) | }) .. | ||
')') | |||
local warnings = tonumber(frame.args.warnings) | local warnings = tonumber(frame.args.warnings) | ||
if warnings and warnings > 0 then | if warnings and warnings > 0 then | ||
Line 1,015: | Line 989: | ||
end | end | ||
if invalid then | if invalid then | ||
result = result .. message('mt-bad-param1', invalid) | result = result .. message({ 'mt-bad-param1', invalid }, 'warning') | ||
end | end | ||
end | end | ||
Line 1,087: | Line 1,061: | ||
parm = translate[parm] | parm = translate[parm] | ||
if parm == nil then -- test for nil because false is a valid setting | if parm == nil then -- test for nil because false is a valid setting | ||
return message('mt-bad-param2', argname, args[argname]) | return message({ 'mt-bad-param2', argname, args[argname] }) | ||
end | end | ||
parms[argname] = parm | parms[argname] = parm | ||
Line 1,098: | Line 1,072: | ||
if show then | if show then | ||
if show.id ~= round then | if show.id ~= round then | ||
return message('mt-conflicting-show', args.show, args.round) | return message({ 'mt-conflicting-show', args.show, args.round }) | ||
end | end | ||
else | else |