Jump to content

Module:POTD kind

From Wikihoc

Automatically parse whether the POTD is multiple pictures, a video, or, by default, a single picture. Used on the Main Page so the text "Today's featured {kind}" is accurate.

{{safesubst:#if:{{safesubst:#ifeq:POTD ki|sandbox|1}}{{safesubst:#ifeq:POTD kind|doc|1}}||

}}



require("strict")

local p = {}

local function today()
	return os.date("%Y-%m-%d")
end

local function extract(wikitext)
    local extensions = {}
    -- If there's a gallery, assume multiple pictures
    -- TODO: are there ever multiple videos?
	if wikitext:find("</gallery>") then
        return "pictures"
    end
    -- Look for [[File:Foo.ext|...]] (or Image:) and extract the extension
    for ext in wikitext:gmatch("%[%[%s*[FfIi][iIm][lLa][eEg][eE]*%s*:%s*[^%]|]+%.(%w+)[^%]]*%]%]") do
        table.insert(extensions, ext:lower())
    end
    
    local count = #extensions
    if count > 1 then
    	-- unlikely, since it should be covered by the </gallery> check
        return "pictures"
    elseif count == 1 then
    	-- XXX: we could use mw.title.file.mimeType but that's an extra expensive property
        if extensions[1] == "ogv" or extensions[1] == "webm" then
            return "video"
        else
            return "picture"
        end
    else
    	-- 0 files or anything else
        return "picture"
    end
end

function p.kind(frame)
	local date = frame.args.date or today()
	local title = mw.title.new("Template:POTD protected/" .. date)
	local content = title:getContent()
	if not content then
		return "picture"
	end
	return extract(content)
end

return p