Modul:Infookvir tracking
Modul služi za praćenje potpunosti predložaka (obično infookvira).
Način korištenja (umjesto param1, param2 i param3 navedite parametre koje želite pratiti odvojene znakom | ):
{{#invoke:Infookvir tracking|tracking|okvir={{subst:#titleparts:{{subst:PAGENAME}}|1}}|param1|param2|param3}}
Parametar |smjer=
(prihvaća vrijednosti nema, ima ili oba) može se koristiti za kategorizaciju parametara kojih ima, nema ili oba. Zadana vrijednost je "nema".
Ako parametar ima sinonime (primjerice ako predložak prihvaća |koordinate=
ili |coord=
), u modulu je potrebno navesti koordinate@coord
. Modul će provjeriti postoji li bilo koja navedena vrijednost, a kategorija će nositi ime po prvoj vrijednosti.
Ako se želi izbjeći kategorizacija pojedinačnog članka u kojem je infookvir koji prati određene parametre, u poziv infookvira u članku dodaje se |ne pratiti parametre=@param1@param5@
. Taj parametar ne pripada infookviru, ali će modul učitati njegovu vrijednost. Svako ime parametra treba biti okruženo znakovima @.
Primjer
[uredi kôd]Infookvir otok ima sljedeći kod:
{{#invoke:Infookvir tracking|tracking|okvir=Infookvir otok|koordinate|država|površina}}
U člancima u kojima se koristi infookvir otok a parametar "država" nije naveden, modul će automatski dodati Kategorija:Stranice koje koriste infookvir otok bez parametra država. Slične će kategorije biti dodane za sve praćene parametre koji nisu navedeni ili popunjeni.
Na dokumentacijskoj podstranici uputno je dodati automatski popis kategorija:
== Kategorije za praćenje == {{Posebno:Prefiks_indeks/Kategorija:Stranice koje koriste {{subst:lc:{{subst:#titleparts:{{subst:PAGENAME}}|1}}}}}}
Ako se u članku o otoku Atlantidi želi izbjeći kategorizacija u Kategorija:Stranice koje koriste infookvir otok bez parametra država, u članak se u pozivu predloška {{Infookvir otok}} dodaje |ne pratiti parametre=@država@
.
local p = {}
local function isblank(val) return (val == nil) or val:match('^[%s]*$') end
local function nema(args, extArgs, maincats)
local extSkip = extArgs['ne pratiti parametre'] or ''
for k, v in pairs(args) do
if k ~= "okvir" and k ~= "smjer" then
local sinonimi = mw.text.split(v, "@", true)
local sinonimiSize = 0
local countNema = 0
local skip
for tk, tv in pairs(sinonimi) do
if mw.ustring.match(extSkip, "@"..tv.."@") then
skip = true
end
sinonimiSize = sinonimiSize + 1
if (isblank(extArgs[tv])) then
countNema = countNema + 1
end
end
if sinonimiSize == countNema and not skip then
maincats = maincats .. '[[Kategorija:Stranice koje koriste ' ..
args['okvir']:lower() .. ' bez parametra ' ..
sinonimi[1] .. ']]'
end
end
end
return maincats
end
local function ima(args, extArgs, maincats)
local extSkip = extArgs['ne pratiti parametre'] or ''
for k, v in pairs(args) do
if k ~= "okvir" and k ~= "smjer" then
local sinonimi = mw.text.split(v, "@", true)
local skip
for tk, tv in pairs(sinonimi) do
if mw.ustring.match(extSkip, "@"..tv.."@") then
skip = true
end
end
if not skip then
for tk, tv in pairs(sinonimi) do
if (not isblank(extArgs[tv])) then
maincats =
maincats .. '[[Kategorija:Stranice koje koriste ' ..
args['okvir']:lower() .. ' s parametrom ' ..
sinonimi[1] .. ']]'
break
end
end
end
end
end
return maincats
end
function p.tracking(frame)
local cats = ''
local maincats = ''
local extArgs = frame:getParent().args
local args = frame.args
local warnmsg = {}
-- smjer: ima, nema ili oba
if args["smjer"] == "nema" or isblank(args["smjer"]) then
maincats = nema(args, extArgs, maincats)
else
if args["smjer"] == "ima" then
maincats = ima(args, extArgs, maincats)
else
if args["smjer"] == "oba" then
maincats = ima(args, extArgs, maincats)
maincats = nema(args, extArgs, maincats)
end
end
end
if #warnmsg > 0 then
cats = require('Module:If preview')._warning({
table.concat(warnmsg, '<br>') .. '<br>(' .. args['okvir']:lower() ..
').'
}) .. cats
end
if maincats ~= '' and mw.title.getCurrentTitle().namespace == 0 then
cats = cats .. maincats
end
mw.log(maincats)
return cats
end
return p