Sətir 1: |
Sətir 1: |
− | -- Implement [[Template:Time ago]] | + | -- Replacement for [[Template:Time ago]] |
− | | + | local numberSpell = require('Module:NumberSpell')._main |
− | local numberSpell, yesno -- lazy load | + | local yesno = require('Module:Yesno') |
− | | |
− | function numberSpell(arg)
| |
− | numberSpell = require('Module:NumberSpell')._main
| |
− | return numberSpell(arg)
| |
− | end
| |
− | | |
− | function yesno(arg)
| |
− | yesno = require('Module:Yesno')
| |
− | return yesno(arg)
| |
− | end
| |
| | | |
| local p = {} | | local p = {} |
| | | |
| -- Table to convert entered text values to numeric values. | | -- Table to convert entered text values to numeric values. |
− | local timeText = {
| + | timeText = { |
| ['saniyə'] = 1, | | ['saniyə'] = 1, |
| ['dəqiqə'] = 60, | | ['dəqiqə'] = 60, |
Sətir 22: |
Sətir 12: |
| ['gün'] = 86400, | | ['gün'] = 86400, |
| ['həftə'] = 604800, | | ['həftə'] = 604800, |
− | ['ay'] = 2629800, -- 365.25 * 24 * 60 * 60 / 12 | + | ['ay'] = 2678400, |
| ['il'] = 31557600 | | ['il'] = 31557600 |
| } | | } |
| | | |
| -- Table containing tables of possible units to use in output. | | -- Table containing tables of possible units to use in output. |
− | local timeUnits = {
| + | timeUnits = { |
| [1] = { 'saniyə', 'saniyə', "second's", "seconds'" }, | | [1] = { 'saniyə', 'saniyə', "second's", "seconds'" }, |
| [60] = { 'dəqiqə', 'dəqiqə', "minutes'", "minutes'" }, | | [60] = { 'dəqiqə', 'dəqiqə', "minutes'", "minutes'" }, |
| [3600] = { 'saat', 'saat', "hour's", "hours'" }, | | [3600] = { 'saat', 'saat', "hour's", "hours'" }, |
| [86400] = { 'gün', 'gün', "day's", "days'" }, | | [86400] = { 'gün', 'gün', "day's", "days'" }, |
− | [604800] = { 'həftə', 'həftə', "week's", "weeks'", unit = 'w' }, | + | [604800] = { 'həftə', 'həftə', "week's", "weeks'" }, |
− | [2629800] = { 'ay', 'ay', "month's", "months'", unit = 'm' }, | + | [2678400] = { 'ay', 'ay', "month's", "months'" }, |
− | [31557600] = { 'il', 'il', "year's", "years'", unit = 'y' } | + | [31557600] = { 'il', 'il', "year's", "years'" } |
| } | | } |
| | | |
Sətir 42: |
Sətir 32: |
| local auto_magnitude_num | | local auto_magnitude_num |
| local min_magnitude_num | | local min_magnitude_num |
| + | local result |
| + | local result_unit |
| local magnitude = args.magnitude | | local magnitude = args.magnitude |
| local min_magnitude = args.min_magnitude | | local min_magnitude = args.min_magnitude |
| local purge = args.purge | | local purge = args.purge |
− | | + | local spell_out = args.spellout |
| + | local spell_out_max = args.spelloutmax |
| + | |
| -- Add a purge link if something (usually "yes") is entered into the purge parameter | | -- Add a purge link if something (usually "yes") is entered into the purge parameter |
| if purge then | | if purge then |
Sətir 54: |
Sətir 48: |
| | | |
| -- Check that the entered timestamp is valid. If it isn't, then give an error message. | | -- Check that the entered timestamp is valid. If it isn't, then give an error message. |
− | local success, inputTime = pcall( lang.formatDate, lang, 'xnU', args[1] ) | + | local noError, inputTime = pcall( lang.formatDate, lang, 'U', args[1], true ) |
− | if not success then | + | if not noError then |
| return '<strong class="error">Error: first parameter cannot be parsed as a date or time.</strong>' | | return '<strong class="error">Error: first parameter cannot be parsed as a date or time.</strong>' |
| end | | end |
| | | |
| -- Store the difference between the current time and the inputted time, as well as its absolute value. | | -- Store the difference between the current time and the inputted time, as well as its absolute value. |
− | local timeDiff = lang:formatDate( 'xnU' ) - inputTime | + | local timeDiff = lang:formatDate( 'U', nil, true ) - inputTime |
| local absTimeDiff = math.abs( timeDiff ) | | local absTimeDiff = math.abs( timeDiff ) |
| | | |
Sətir 69: |
Sətir 63: |
| -- Calculate the appropriate unit of time if it was not specified as an argument. | | -- Calculate the appropriate unit of time if it was not specified as an argument. |
| local autoMagnitudeData = { | | local autoMagnitudeData = { |
− | { factor = 2, amn = 31557600 }, | + | { denom = 63115200, amn = 31557600 }, |
− | { factor = 2, amn = 2629800 }, | + | { denom = 5356800, amn = 2678400 }, |
− | { factor = 2, amn = 86400 }, | + | { denom = 172800, amn = 86400 }, |
− | { factor = 2, amn = 3600 }, | + | { denom = 7200, amn = 3600 }, |
− | { factor = 2, amn = 60 } | + | { denom = 120, amn = 60 } |
| } | | } |
− | for _, t in ipairs( autoMagnitudeData ) do | + | for i, t in ipairs( autoMagnitudeData ) do |
− | if absTimeDiff / t.amn >= t.factor then | + | if absTimeDiff / t.denom >= 1 then |
| auto_magnitude_num = t.amn | | auto_magnitude_num = t.amn |
− | | + | break |
| end | | end |
| end | | end |
Sətir 94: |
Sətir 88: |
| end | | end |
| | | |
− | local result_num
| |
| local magnitude_num = math.max( min_magnitude_num, auto_magnitude_num ) | | local magnitude_num = math.max( min_magnitude_num, auto_magnitude_num ) |
− | local unit = timeUnits[magnitude_num].unit | + | local result_num = math.floor ( absTimeDiff / magnitude_num ) |
− | if unit and absTimeDiff >= 864000 then
| |
− | local Date = require('Module:Date')._Date
| |
− | local input = lang:formatDate('Y-m-d H:i:s', args[1]) -- Date needs a clean date
| |
− | input = Date(input)
| |
− | if input then
| |
− | local id
| |
− | if input.hour == 0 and input.minute == 0 then
| |
− | id = 'currentdate'
| |
− | else
| |
− | id = 'currentdatetime'
| |
− | end
| |
− | result_num = (Date(id) - input):age(unit)
| |
− | end
| |
− | end
| |
− | result_num = result_num or math.floor ( absTimeDiff / magnitude_num )
| |
| | | |
| local punctuation_key, suffix | | local punctuation_key, suffix |
Sətir 142: |
Sətir 120: |
| end | | end |
| end | | end |
− | local result_unit = timeUnits[ magnitude_num ][ punctuation_key ] | + | result_unit = timeUnits[ magnitude_num ][ punctuation_key ] |
| | | |
| -- Convert numerals to words if appropriate. | | -- Convert numerals to words if appropriate. |
− | local spell_out = args.spellout | + | spell_out_max = tonumber( spell_out_max ) -- Would cause script errors if not a number. |
− | local spell_out_max = tonumber(args.spelloutmax)
| |
| local result_num_text | | local result_num_text |
− | if spell_out and ( | + | if ( spell_out == 'auto' and 1 <= result_num and result_num <= 9 and result_num <= ( spell_out_max or 9 ) ) |
− | ( spell_out == 'auto' and 1 <= result_num and result_num <= 9 and result_num <= ( spell_out_max or 9 ) ) or
| + | or ( yesno( spell_out ) and 1 <= result_num and result_num <= 100 and result_num <= ( spell_out_max or 100 ) ) |
− | ( yesno( spell_out ) and 1 <= result_num and result_num <= 100 and result_num <= ( spell_out_max or 100 ) ) | |
− | )
| |
| then | | then |
| result_num_text = numberSpell( result_num ) | | result_num_text = numberSpell( result_num ) |
Sətir 158: |
Sətir 133: |
| end | | end |
| | | |
− | local result = result_num_text .. ' ' .. result_unit .. suffix -- Spaces for suffix have been added in earlier. | + | result = result_num_text .. ' ' .. result_unit .. suffix -- Spaces for suffix have been added in earlier. |
| return result .. purge | | return result .. purge |
| end | | end |