Module:TimeAgo/sandbox
ई Module:TimeAgo (अंतर) खातिर module sandbox page हवे। |
मॉड्यूल बिबरनलेख[देखीं] [संपादन करीं] [इतिहास देखीं] [रिफ्रेश करीं]
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This Lua module is used on many pages, so changes to it will be widely noticed. Please test any changes in the module's /sandbox or /testcases subpages. Please consider discussing changes on the talk page before implementing them. |
The module “TimeAgo” implements {{Time ago}}. See the template's page for documentation. Test cases can be found at Module talk:TimeAgo/testcases and Template:Time ago/testcases.
परिचय खातिर ऊपर दिहल गइल बिबरनलेख के Module:TimeAgo/doc से ट्रांसक्लूड क के इहाँ देखावल जा रहल बाटे। (संपादन करीं | इतिहास देखीं) संपादक लोग एह मॉड्यूल के अभ्यासपन्ना (सैंडबाक्स) (संपादित करीं | अंतर) आ टेस्टकेस (बनाईं) पन्ना पर अभ्यास भा प्रयोग (टेस्टिंग) क सकत बाटे। अनुरोध बा कि अगर श्रेणी जोड़े के होखे तब /doc उपपन्ना (सबपेज) पर जोड़ल जाय। एह मॉड्यूल के उपपन्ना (सबपेज) देखीं। |
-- [[टेम्पलेट:Time ago]] में प्रयोग खातिर
local getArgs = require('Module:Arguments').getArgs
local numberSpell = require('Module:NumberSpell')._main
local convertString = require("Module:Numeral converter").convert
local yesno = require('Module:Yesno')
local p = {}
function p.main( frame )
local args = getArgs( frame, {
valueFunc = function( k, v )
if v then
v = v:match( '^%s*(.-)%s*$' ) -- Trim whitespace.
if k == 'पहिले' or v ~= '' then
return v
end
end
return nil
end
})
return p._main( args )
end
function p._main( args )
-- Initialize variables
local lang = mw.language.getContentLanguage()
local ago
local auto_magnitude_num
local min_magnitude_num
local result
local result_unit
local magnitude = args.magnitude
local min_magnitude = args.min_magnitude
local purge = args.purge
local spell_out = args.spellout
local spell_out_max = args.spelloutmax
-- Generate the "ago" string. If ago is the blank string, do nothing - this allows overriding of args.ago
-- in cases where the module is used to generate something like "where he has worked for the past 20 years."
ago = args.ago
if ago and ago ~= '' then
ago = ' ' .. ago
elseif not ago then
ago = ' पहिले'
end
-- Add a purge link if something (usually "yes") is entered into the purge parameter
if purge then
purge = ' <span class="plainlinks">([' .. mw.title.getCurrentTitle():fullUrl('action=purge') .. ' শোধন])</span>'
else
purge = ''
end
-- Check that the entered timestamp is valid. If it isn't, then give an error message.
local noError, inputTime = pcall( lang.formatDate, lang, 'xnU', args[1], true )
if not noError then
return '<strong class="error">Error: first parameter cannot be parsed as a date or time.</strong>'
end
-- Store the difference between the current time and the inputted time, as well as its absolute value.
local timeDiff = lang:formatDate( 'xnU', nil, true ) - inputTime
local absTimeDiff = math.abs( timeDiff )
if magnitude then
auto_magnitude_num = 0
min_magnitude_num = timeText[magnitude]
else
-- Calculate the appropriate unit of time if it was not specified as an argument.
local autoMagnitudeData = {
{ denom = 63115200, amn = 31557600 },
{ denom = 5356800, amn = 2678400 },
{ denom = 172800, amn = 86400 },
{ denom = 7200, amn = 3600 },
{ denom = 120, amn = 60 }
}
for i, t in ipairs( autoMagnitudeData ) do
if absTimeDiff / t.denom >= 1 then
auto_magnitude_num = t.amn
break
end
end
auto_magnitude_num = auto_magnitude_num or 1
if min_magnitude then
min_magnitude_num = timeText[min_magnitude]
else
min_magnitude_num = -1
end
end
if not min_magnitude_num then
-- Default to seconds if an invalid magnitude is entered.
min_magnitude_num = 1
end
local magnitude_num = math.max( min_magnitude_num, auto_magnitude_num )
local result_num = math.floor ( absTimeDiff / magnitude_num )
local punctuation_key, suffix
if timeDiff >= 0 then -- Past
if result_num == 1 then
punctuation_key = 1
else
punctuation_key = 2
end
suffix = ago
else -- Future
if result_num == 1 then
punctuation_key = 3
else
punctuation_key = 4
end
suffix = ' समय'
end
result_unit = timeUnits[ magnitude_num ][ punctuation_key ]
-- Convert numerals to words if appropriate.
spell_out_max = tonumber( spell_out_max ) -- Would cause script errors if not a number.
local result_num_text
if ( spell_out == 'auto' and 1 <= result_num and result_num <= 9 and result_num <= ( spell_out_max or 9 ) )
or ( yesno( spell_out ) and 1 <= result_num and result_num <= 100 and result_num <= ( spell_out_max or 100 ) )
then
result_num_text = numberSpell( result_num )
else
result_num_text = tostring( result_num )
end
result = convertString("bh",result_num_text) .. ' ' .. result_unit .. suffix -- Spaces for suffix have been added in earlier.
return result .. purge
end
-- Table to convert entered text values to numeric values.
timeText = {
['सेकेंड'] = 1,
['मिनट'] = 60,
['घंटा'] = 3600,
['दिन'] = 86400,
['हप्ता'] = 604800,
['महीना'] = 2678400,
['साल'] = 31557600,
['seconds'] = 1,
['minutes'] = 60,
['hours'] = 3600,
['days'] = 86400,
['weeks'] = 604800,
['months'] = 2678400,
['years'] = 31557600
}
-- Table containing tables of possible units to use in output.
timeUnits = {
[1] = { 'सेकेंड', 'सेकेंड', "सेकेंड", "सेकेंड" },
[60] = { 'मिनट', 'मिनट', "मिनट", "मिनट" },
[3600] = { 'घंटा', 'घंटा', "घंटा", "घंटा" },
[86400] = { 'दिन', 'दिन', "दिन", "दिन" },
[604800] = { 'हप्ता', 'हप्ता', "हप्ता", "हप्ता" },
[2678400] = { 'महीना', 'महीना', "महीना", "महीना" },
[31557600] = { 'साल', 'साल', "साल", "साल" }
}
return p