Module:Period
From The Goon Show Depository
local p = {}
function p._periodSpan(item, lang)
-- get the time span of the period given by "item"from the Wikidata values
-- for P580/P582 or P571/P576
local getDate = require('Module:Wikidata date')._date
local start = getDate(item, 'P580' , lang).str or getDate(item, 'P571' , lang).str
local stop = getDate(item, 'P582' , lang).str or getDate(item, 'P576' , lang).str
-- TODO: [[Module:Wikidata label]] has issues with RTL text when falling back
-- to some LTR text, see the example at [[Template:Period/testcases]],
-- has to get fixed there probably
local spantext = nil
if start or stop then
spantext = string.format('(%s–%s)', start or '', stop or '')
end
return spantext
end
function p._period(period, dates, lang)
local wikitext = ''
local LookupTable = mw.loadData('Module:Period/data')
local item = LookupTable[string.lower(period)]
-- try to find an item in the dictionary
if item then
-- if an item was found use it
local wikidata_label = require('Module:Wikidata label')._getLabel
wikitext = wikidata_label(item, lang)
-- now get the time span if requested and append it to the wikitext string
if dates == 'date' or dates == 'yes' then
local spantext = p._periodSpan(item, lang)
if spantext then
wikitext = wikitext .. ' ' .. spantext
end
elseif dates and dates ~= '' then
wikitext = string.format('%s (%s)', wikitext, dates)
end
-- create and append non-visible language independent marking
-- in QuickStatements-like format
-- using property "time period" (P2348)
local qsText = '<div style="display: none;">era QS:P2348,' .. item .. '</div>'
wikitext = wikitext .. qsText
elseif period and period ~= '' then
wikitext = '[[Category:Unsupported period|' .. period .. ']]' .. period
if dates and dates ~= '' then
wikitext = string.format('%s (%s)', wikitext, dates)
end
end
return wikitext
end
function p.period(frame)
local args = frame.args
return p._period(args.period, args.dates, args.lang)
end
return p