Moduldokumentasjon

Denne modulen produserer innholdet til navigasjonsboksene for ukens konkurranse som består av lenker til konkurransene som har blitt holdt innenfor det året.

For det nåværende året viser modulen konkurranser som har blitt holdt opp til og inkludert den nåværende uken samt en boks med fremtidlige konkurranser.

Denne modulen benytter seg av underlister for å finne frem til navnene på konkurransene, disse listene er delt inn etter årstall: 2009 - 2010 - 2011 - 2012 - 2013

Eksempler:

  • {{#invoke:UK navboks|innhold|2012}} gir samtlige konkurranser i 2012  :

Eksempler:

  • {{#invoke:UK navboks|contest_name|2019|3}} gir navnet på konkurransen i mars 2019:
    Biografier
  • {{#invoke:UK navboks|contest_name|2019-03}} gir navnet på konkurransen i mars 2019:
    Biografier

local p = {}
p.lang = mw.getContentLanguage()
p.thisyear = tonumber(p.lang:formatDate( 'o', date, true))
p.thisweek = tonumber(p.lang:formatDate( 'W', date, true))
p.thismonth = tonumber(p.lang:formatDate( 'n', date, true))

function p.entry(year, week, topic)
    local pagename = string.format("Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d", year, week)
    if year == p.thisyear and week == p.thisweek then
        -- sjekk om siden eksisterer
        local page = mw.title.new(pagename)
        if not page.exists then
            local s = "'''" .. week .. "''' " .. topic
            s = s .. string.format(" ''<small>[{{fullurl:Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>", year, week)
            return s
        end
    end
    if topic == "" then
        return "'''" .. week .. "''' (ikke bestemt)"
    end
    return "'''" .. week .. "''' [[" .. pagename .. "|" .. topic .. "]]"
end

function p.lastweek(frame)
    local year = tonumber(frame.args[1])
    local week = tonumber(p.lang:formatDate('W', year ..'-12-31', true))
    if week == 1 then
        -- vi hopper litt tilbake i tid :)
        week = tonumber(p.lang:formatDate('W', year ..'-12-24', true))
    end
    return week
end

function p.innhold(frame)
    local year = tonumber(frame.args[1])
    local week = 1
    local entries = {}
    local endweek = p.lastweek(frame)
    if year == p.thisyear then
        endweek = p.thisweek
    end
    local modname = 'Module:Ukens konkurranse-liste ' .. year
    local topics = require(modname)
    for week = 1, endweek, 1
    do
        if not (topics[week] == nil) then
            table.insert(entries, p.entry(year, week, topics[week]))
        end
    end
    return "\n*" .. frame:preprocess(table.concat(entries, "\n*"))
end

function p.nesteuke(frame)
    local week = tonumber(p.lang:formatDate('W', '+1 week', true))
    local year = tonumber(p.lang:formatDate('o', '+1 week', true))
    
    -- Sjekk om konkurransen er lagt inn i [[Module:Ukens konkurranse-liste YYYY]]
    local modname = 'Module:Ukens konkurranse-liste ' .. year
    local topics = require(modname)
    local topic = topics[week]
    if topic == '' then
        return 'Mangler forslag <small>[[' .. modname .. '|(føy til forslag)]]</small>'
    end

    -- Sjekk om konkurransesiden eksisterer
    local pagename = string.format("Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d", year, week)
    local page = mw.title.new(pagename)
    if not page.exists then
        return frame:preprocess(string.format("%s ''<small>[{{fullurl:Wikipedia:Konkurranser/Ukens konkurranse %04d-%02d|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>''", topic, year, week))
    end
    
    -- Konkurransen eksisterer 
    return string.format("[[%s|%s]]", pagename, topic)

end

-- Skriver ut lenke til månedens konkurranse for en gitt måned
function p.entry_mk(year, month, topic)
    local key = string.format('%04d-%02d', year, month)
    local pagename = string.format("Wikipedia:Konkurranser/Månedens konkurranse %s", key)
    local monthName = p.lang:formatDate( 'F', key .. '-01' )
    if year == p.thisyear and month == p.thismonth then
        -- sjekk om siden eksisterer
        local page = mw.title.new(pagename)
        if not page.exists then
            local s = monthName .. ": " .. topic
            s = s .. string.format(" ''<small>[{{fullurl:Wikipedia:Konkurranser/Månedens konkurranse %s|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>", key)
            return s
        end
    end
    if topic == "" then
        return monthName .. ": (ikke bestemt)"
    end
    return monthName .. ": [[" .. pagename .. "|" .. topic .. "]]"
end

-- Skriver ut lenker til alle månedens konkurranser for et gitt år
-- Til bruk i navboks.
function p.innhold_mk(frame)
    local year = tonumber(frame.args[1])
    local key, month
    local entries = {}
    local topics = require('Modul:Månedens konkurranse')
    for month = 1, 12, 1
    do
        key = string.format('%04d-%02d', year, month)
        if not (topics[key] == nil) then
            table.insert(entries, p.entry_mk(year, month, topics[key]))
        end
    end
    return "\n*" .. frame:preprocess(table.concat(entries, "\n*"))
end

function p.nestemaaned(frame)
    local year = tonumber(p.lang:formatDate('o', '+1 month', true))
    local month = tonumber(p.lang:formatDate('n', '+1 month', true))
    local key = string.format('%04d-%02d', year, month)
    
    -- Sjekk om konkurransen er lagt inn i [[Modul:Månedens konkurranse]]
    local topics = require('Modul:Månedens konkurranse')
    local topic = topics[key]
    if topic == '' then
        return 'Mangler forslag <small>[[Module:Månedens konkurranse|(føy til forslag)]]</small>'
    end

    -- Sjekk om konkurransesiden eksisterer
    local pagename = string.format("Wikipedia:Konkurranser/Månedens konkurranse %s", key)
    local page = mw.title.new(pagename)
    if not page.exists then
        return frame:preprocess(string.format("%s ''<small>[{{fullurl:Wikipedia:Konkurranser/Månedens konkurranse %s|action=edit&preload=Mal:Ukens_konkurranse_preload}} (opprett)]</small>''", topic, key))
    end
    
    -- Konkurransen eksisterer 
    return string.format("[[%s|%s]]", pagename, topic)

end

function p.current(frame)
    local lang = mw.getContentLanguage()
    local month = tonumber(lang:formatDate('n', now, true))
    local year = tonumber(lang:formatDate('Y', now, true))
    local key = string.format('%04d-%02d', year, month)
    local topics = require( 'Modul:Månedens konkurranse')
    local topic = topics[key]
    return topic
end

function p.contest_name(frame)
    local year
    local month
    if frame.args[1] == nil then
        return p.current(frame)
    end
    if frame.args[2] == nil then
        local spl = mw.text.split(frame.args[1], '-', true)
        year = tonumber(spl[1])
        month = tonumber(spl[2])
    else
        year = tonumber(frame.args[1])
        month = tonumber(frame.args[2])
    end
    local key = string.format('%04d-%02d', year, month)
    local topics = require( 'Modul:Månedens konkurranse')
    local topic = topics[key]
    return topic
end
return p