Modul:Viz
Modul Viz je užíván šablonou: Šablona:Viz. V šabloně je bližší nápověda; na diskuzní stránce šablony je odpovídající diskuze. K modulu bylo hlasování: Wikislovník:Hlasování/Zavedení modulových seznamů pro šablonu Viz.
local p = {}
local replacementTable = mw.loadData( 'Modul:Viz/Replacements' )
local function getArgNums(pargs, prefix)
-- Returns an ordered table containing the numbers (>0) of the arguments
-- that exist for the specified prefix. Includes 0 if prefix without number
-- is used as argument. For example, if the prefix was 'seznam', and
-- 'seznam1', 'seznam', and 'seznam5' exist, it would return {0, 1, 5}.
local nums = { }
if pargs[prefix] then table.insert(nums, 0) end
for k, v in pairs(pargs) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
local function canonicalizeTitle(title)
local replacementRegEx = ""
local regexBuilder = {}
local idx = 0
for key, _ in pairs( replacementTable ) do
idx = idx + 1
regexBuilder[idx] = (key == '-' or key == '%' or key == '^') and ('%' .. key) or key
end
replacementRegEx = "[" .. table.concat( regexBuilder ) .. "]"
return mw.ustring.gsub( mw.ustring.lower( title ), replacementRegEx, replacementTable )
end
local function normalizeChar(s)
-- např. "Č(…)" → c , "fi(…)" → "fi"
return mw.ustring.lower(mw.ustring.toNFKD(mw.ustring.sub(mw.ustring.toNFD(s), 1, 1)))
end
function p.viz(frame)
pargs = frame:getParent().args
local title = mw.title.getCurrentTitle()
local items = {}
local result = ""
local listnums = getArgNums(pargs, 'seznam')
if not (pargs[1] or listnums[1]) then -- no params, guess the list name
table.insert( listnums, 0 )
result = result .. "[[Kategorie:Monitoring:Šablona Viz bez parametrů]]"
end
for k, num in ipairs( listnums ) do --include lists
local adr = "Module:Viz/"
if num == 0 then --unnumberd guessed list
if pargs["seznam"] then --unnumberd
adr = adr .. pargs["seznam"]
else --guess
adr = adr .. canonicalizeTitle( title.text )
end
else
adr = adr .. pargs["seznam" .. tostring( num )]
end
local exists, list = pcall(require, adr) --read items from existing list
if exists then
for i, item in ipairs( list ) do --and add them
if item ~= title.fullText and item ~= "" then --if not empty or identical with the page
s = "[[" .. item .. "]]"
for j, link in ipairs( items ) do --or already included
if s == link then
s = nil
result = result .. "[[Kategorie:Monitoring:Šablona Viz obsahuje duplicity]]"
end
end
table.insert(items, s)
end
end
result = result .. "[[Kategorie:Monitoring:Viz/" .. #list .. "]]"
else
result = result .. "[[Kategorie:Monitoring:Šablona Viz odkazuje na neexistující seznam]]"
end
end
for i, arg in ipairs(pargs) do --include single items
if arg ~= title.fullText then
s = "[[" .. arg .. "]]"
for j, link in ipairs( items ) do
if s == link then
s = nil
result = result .. "[[Kategorie:Monitoring:Šablona Viz obsahuje duplicity]]"
end
end
table.insert(items, s)
else
result = result .. "[[Kategorie:Monitoring:Šablona Viz odkazuje na vlastní stránku]]"
end
end
if #items == 0 then
result = result .. "[[Kategorie:Monitoring:Šablona Viz bez výstupu]]"
else
result = result .. "''Možná hledáte'' " .. mw.text.listToText( items, ", ", " ''nebo'' ")
if result:sub(-3,-3) ~= "." then result = result .. "." end
end
return result
end
return p