Modul:Infookvir tracking

Izvor: Wikipedija
Dokumentacija modula[vidi] [uredi] [povijest] [osvježi]

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