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 10: | Line 9: | ||
['mt-conflicting-show'] = 'Parameter show=$1 conflicts with round=$2', | ['mt-conflicting-show'] = 'Parameter show=$1 conflicts with round=$2', | ||
['mt-date-wrong-order'] = 'The second date must be later in time than the first date', | ['mt-date-wrong-order'] = 'The second date must be later in time than the first date', | ||
['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)', | ['mt-dd-wrong-order'] = 'Death date (first date) must be later in time than the birth date (second date)', | ||
['mt-invalid-bd-age'] = 'Invalid birth date for calculating age', | ['mt-invalid-bd-age'] = 'Invalid birth date for calculating age', | ||
Line 26: | Line 24: | ||
['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 49: | ||
-- 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 101: | ||
end | end | ||
return text | return text | ||
end | end | ||
Line 138: | Line 110: | ||
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 177: | ||
-- 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 194: | ||
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 219: | ||
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 275: | ||
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 330: | ||
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 350: | ||
end | end | ||
end | end | ||
return (sortKey or '' | return (sortKey or '') .. (result or '') | ||
end | end | ||
Line 407: | Line 387: | ||
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 439: | ||
-- 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 460: | ||
}, | }, | ||
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 549: | ||
(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 623: | ||
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 849: | ||
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 858: | ||
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 871: | ||
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 901: | ||
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 953: | Line 923: | ||
if diff.isnegative then | if diff.isnegative then | ||
return message('mt-dd-wrong-order') | return message('mt-dd-wrong-order') | ||
end | end | ||
local years | local years | ||
Line 969: | Line 934: | ||
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 983: | ||
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,055: | ||
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,066: | ||
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 |