Modul:Archives
Archives může být použit k vygenerování seznamu archivů.
Použití
editovatModul zkusí podle zadaných parametrů najít existující podstránky s archivovanými diskusemi a vypíše je v seznamu.
{{#invoke:Archives|list}}
:
* [[Diskuse:Homosexualita/Archiv 1|Archiv 1]]
{{#invoke:Archives|list|Diskuse s wikipedistou:Patriccck/Archiv/%|number|, }}
:
[[Diskuse s wikipedistou:Patriccck/Archiv/2017|2017]], [[Diskuse s wikipedistou:Patriccck/Archiv/2018|2018]], [[Diskuse s wikipedistou:Patriccck/Archiv/2019|2019]]
- pattern
{{#invoke:Archives|list|pattern = Diskuse s wikipedistou:Ján Kepler/Archiv/%}}
:
* [[Diskuse s wikipedistou:Ján Kepler/Archiv/1|1]]
- title
{{#invoke:Archives|list|title = subpage}}
nebo {{#invoke:Archives|list}}
:
* [[Diskuse s wikipedistou:Janbery/Archiv1|Archiv1]]
{{#invoke:Archives|list|title = number}}
:
* [[Diskuse s wikipedistou:Janbery/Archiv1|1]]
{{#invoke:Archives|list|title = Archiv %}}
:
* [[Diskuse s wikipedistou:Janbery/Archiv1|Archiv 1]]
- delimiter
{{#invoke:Archives|list|delimiter = ,}}
:
[[Diskuse s wikipedistou:Patriccck/Archiv/2017|2017]],[[Diskuse s wikipedistou:Patriccck/Archiv/2018|2018]],[[Diskuse s wikipedistou:Patriccck/Archiv/2019|2019]]
local p = {}
function p.list(frame)
local a = require('Modul:Arguments')
local params = a.getArgs(frame)
local numbers = {}
for i=1,9 do
numbers['0' .. i] = 0
end
for i=2002,os.date('%Y') do
numbers[i] = 0
end
for i=0,98 do
numbers[i] = 0
if #numbers == 99 then break end
end
local pattern = params['pattern'] or params[1] or mw.title.getCurrentTitle().prefixedText .. '/Archiv %'
local _, count = string.gsub(pattern, '%%', '')
local page_title = pattern
local page_title2 = pattern
local page_title3 = pattern
local page = ''
local pages = {}
if count >= 1 then
for i, _ in pairs(numbers) do
page_title2 = string.gsub(page_title, '%%', i, 1)
if count >= 2 then
-- not working currently
-- exceeds the limit of 99 page.exists checks
-- requires implementing binary search algorithm to make it work
for j, _ in pairs(numbers) do
page_title3 = string.gsub(page_title2, '%%', j, 1)
page = mw.title.new(page_title3)
pages[page] = j
end
else
page = mw.title.new(page_title2)
pages[page] = i
end
end
else
page = mw.title.new(page_title)
pages[page] = -1
end
local link_type = params['title'] or params[2] or 'subpage'
local link_title = ''
local link = ''
local archives = {}
local archivesort = {}
for page, id in pairs(pages) do
if page.exists then
if link_type == 'subpage' then
link_title = '|' .. page.subpageText
elseif link_type == 'number' then
link_title = '|' .. string.match(tostring(id), '0?(%d+)')
else
link_title = '|' .. string.gsub(link_type, '%%', string.match(tostring(id), '0?(%d+)'))
end
link = '[[' .. page.prefixedText .. link_title .. ']]'
table.insert(archives, link)
archivesort[link] = id
end
end
function order (first, second)
if tonumber(archivesort[first]) < tonumber(archivesort[second]) then
return true
else
return false
end
end
table.sort(archives, order)
local delimiter = params['delimiter'] or params[3] or '\n* '
local result = table.concat(archives, delimiter)
if string.sub(delimiter, 1, 1) == '\n' then
result = mw.text.trim(delimiter .. result)
end
return result
end
return p