Editing Module:Age

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. Read the Privacy Policy to learn what information we collect about you and how we use it.

If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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.
-- Also need to localize text in table names in function dateDifference.
['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-or'] =                    ' or ',
['txt-category'] =              'Category:Age error',
['txt-comma-and'] =            ', and ',
['txt-comma-and'] =            ', and ',
['txt-error'] =                'Error: ',
['txt-error'] =                'Error: ',
['txt-format-default'] =        'mf',  -- 'df' (day first = dmy) or 'mf' (month first = mdy)
['txt-or'] =                   ' or ',
['txt-module-convertnumeric'] = 'Module:ConvertNumeric',
['txt-module-date'] =          'Module:Date',
['txt-sandbox'] =              'sandbox',
['txt-bda'] = '<span style="display:none"> (<span class="bday">$1</span>) </span>$2<span class="noprint ForceAgeToShow"> (age&nbsp;$3)</span>',
['txt-dda'] = '$2<span style="display:none">($1)</span> (aged&nbsp;$3)',
['txt-bda-disp'] = 'disp_raw',  -- disp_raw → age is a number only; disp_age → age is a number and unit (normally years but months or days if very young)
['txt-dda-disp'] = 'disp_raw',
['txt-dmy'] = '%-d %B %-Y',
['txt-mdy'] = '%B %-d, %-Y',
}
 
local isWarning = {
['mt-bad-param1'] = true,
}
}


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(mtext['txt-sandbox'], 1, true) and ('/' .. mtext['txt-sandbox']) or ''
local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or ''
local datemod = require(mtext['txt-module-date'] .. sandbox)
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
local function dateFormat(args)
-- Return string for wanted date format.
local default = mtext['txt-format-default']
local other = default == 'df' and 'mf' or 'df'
local wanted = stripToNil(args[other]) and other or default
return wanted == 'df' and mtext['txt-dmy'] or mtext['txt-mdy']
end
local function substituteParameters(text, ...)
-- Return text after substituting any given parameters for $1, $2, etc.
return mw.message.newRawMessage(text, ...):plain()
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 = mtext['txt-category'],
error = '[[Category:Age error]]',
warning = mtext['txt-category'],
warning = '[[Category:Age error]]',  -- same as error until determine whether 'Age warning' would be worthwhile
}
}
local a, b, k, category
local a, b, category
local text = substituteParameters(getText(msg), ...)
if id == 'warning' then
if isWarning[msg] then
a = '<sup>[<i>'
a = '<sup>[<i>'
b = '</i>]</sup>'
b = '</i>]</sup>'
k = 'warning'
else
else
a = '<strong class="error">' .. getText('txt-error')
a = '<strong class="error">' .. getText('txt-error')
b = '</strong>'
b = '</strong>'
k = 'error'
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 = '[[' .. categories[k] .. ']]'
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(mtext['txt-module-convertnumeric']).spell_number(
return require('Module:ConvertNumeric').spell_number(
number,
number,
nil,                      -- fraction numerator
nil,                      -- fraction numerator
Line 247: Line 230:
result = '<span data-sort-value="_SORTKEY_♠"></span>'
result = '<span data-sort-value="_SORTKEY_♠"></span>'
end
end
return (result:gsub('_SORTKEY_', sortKey))
return result:gsub('_SORTKEY_', sortKey)
end
end
end
end
Line 350: Line 333:
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 407: Line 390:
local name = names[components[i]]
local name = names[components[i]]
if name then
if name then
if type(name) == 'table' then
local plural = names.plural
name = mw.getContentLanguage():plural(islist and v[2] or v, name)
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 442:
-- which have been validated.
-- which have been validated.
local names = {
local names = {
-- Each name is:
-- * a string if no plural form of the name is used; or
-- * a table of strings, one of which is selected using the rules at
--  https://translatewiki.net/wiki/Plural/Mediawiki_plural_rules
abbr_off = {
abbr_off = {
plural = 's',
sep = '&nbsp;',
sep = '&nbsp;',
y = {'year', 'years'},
y = 'year',
m = {'month', 'months'},
m = 'month',
w = {'week', 'weeks'},
w = 'week',
d = {'day', 'days'},
d = 'day',
H = {'hour', 'hours'},
H = 'hour',
M = {'minute', 'minutes'},
M = 'minute',
S = {'second', 'seconds'},
S = 'second',
},
},
abbr_on = {
abbr_on = {
Line 482: Line 463:
},
},
abbr_infant = {      -- for {{age for infant}}
abbr_infant = {      -- for {{age for infant}}
plural = 's',
sep = '&nbsp;',
sep = '&nbsp;',
y = {'yr', 'yrs'},
y = 'yr',
m = {'mo', 'mos'},
m = 'mo',
w = {'wk', 'wks'},
w = 'wk',
d = {'day', 'days'},
d = 'day',
H = {'hr', 'hrs'},
H = 'hr',
M = {'min', 'mins'},
M = 'min',
S = {'sec', 'secs'},
S = 'sec',
},
},
abbr_raw = {},
abbr_raw = {},
Line 570: Line 552:
(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 881: Line 863:
return message('mt-invalid-bd-age')
return message('mt-invalid-bd-age')
end
end
local disp = mtext['txt-bda-disp']
local disp, show = 'disp_raw', 'y'
local show = 'y'
if diff.years < 2 then
if diff.years < 2 then
disp = 'disp_age'
disp = 'disp_age'
Line 891: Line 872:
end
end
end
end
local result = substituteParameters(
local df = stripToNil(args.df)  -- day first (dmy); default is month first (mdy)
mtext['txt-bda'],
local result = '(<span class="bday">%-Y-%m-%d</span>) </span>' ..
date:text('%-Y-%m-%d'),
(df and '%-d %B %-Y' or '%B %-d, %-Y')
from_en(date:text(dateFormat(args))),
result = from_en('<span style="display:none"> ' ..
from_en(dateDifference({
date:text(result) ..
'<span class="noprint ForceAgeToShow"> ' ..
mtext['txt-age'] ..
dateDifference({
diff = diff,
diff = diff,
show = show,
show = show,
Line 901: Line 885:
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 915:
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 953:
return message('mt-invalid-dates-age')
return message('mt-invalid-dates-age')
end
end
local fmt_date, fmt_ymd
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
fmt_date = dateFormat(args)
result = (df and
fmt_ymd = '%-Y-%m-%d'
'%-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
fmt_date = '%B %-Y'
result =
fmt_ymd = '%-Y-%m-00'
'%B %-Y' ..
'<span style="display:none">(%-Y-%m-00)</span>'
else  -- y known; m, d unknown
else  -- y known; m, d unknown
fmt_date = '%-Y'
result =
fmt_ymd = '%-Y-00-00'
'%-Y' ..
'<span style="display:none">(%-Y-00-00)</span>'
end
end
local result = substituteParameters(
result = from_en(date1:text(result) ..
mtext['txt-dda'],
mtext['txt-aged'] ..
date1:text(fmt_ymd),
dateDifference({
from_en(date1:text(fmt_date)),
from_en(dateDifference({
diff = diff,
diff = diff,
show = 'y',
show = 'y',
abbr = 'abbr_off',
abbr = 'abbr_off',
disp = mtext['txt-dda-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 1,002:
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,074:
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,085:
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
Please note that all contributions to Nonbinary Wiki are considered to be released under the Creative Commons Attribution-ShareAlike (see Nonbinary Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: