Jump to content

Module:DailyFeatured

From the Vrienden Universe, a fictional wiki
Revision as of 20:01, 4 February 2026 by Per.kuskan (talk | contribs) (Created page with "local p = {} local function getPool() local content = mw.getCurrentFrame():expandTemplate{ title = "Featured pool" } local pages = {} for line in mw.text.gsplit(content or "", "\n", true) do line = mw.text.trim(line) if line ~= "" then line = line:gsub("^%*%s*", "") if line ~= "" then table.insert(pages, line) end end end return pages end local function cleanWikitext(s) if not s or s == "" then return "" end s = s:gsub("<!--.-?-->", "") s =...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

local p = {}

local function getPool()
	local content = mw.getCurrentFrame():expandTemplate{ title = "Featured pool" }
	local pages = {}

	for line in mw.text.gsplit(content or "", "\n", true) do
		line = mw.text.trim(line)
		if line ~= "" then
			line = line:gsub("^%*%s*", "")
			if line ~= "" then
				table.insert(pages, line)
			end
		end
	end

	return pages
end

local function cleanWikitext(s)
	if not s or s == "" then return "" end
	s = s:gsub("<!--.-?-->", "")
	s = s:gsub("%[%[File:.-%]%]", "")
	s = s:gsub("%{%b{}%}", "")
	s = s:gsub("<ref.->.-</ref>", "")
	s = s:gsub("<ref.->", "")
	s = s:gsub("\r", ""):gsub("[ \t]+", " ")
	return mw.text.trim(s)
end

local function extractHeadlineFromContent(wikitext)
	if not wikitext or wikitext == "" then return "" end

	for line in mw.text.gsplit(wikitext, "\n", true) do
		line = cleanWikitext(line)
		if line:match("^==+%s*[^=].-==+%s*$") then
			line = line:gsub("^=+%s*", ""):gsub("%s*=+$", "")
			line = mw.text.trim(line)
			if line ~= "" then return line end
		end
	end

	for line in mw.text.gsplit(wikitext, "\n", true) do
		line = cleanWikitext(line)
		if line ~= ""
			and not line:match("^__%u+__$")
			and not line:match("^%[%[Category:") then
			if #line > 180 then
				line = line:sub(1, 177) .. "…"
			end
			return line
		end
	end

	return ""
end

function p.main(frame)
	local pages = getPool()
	if #pages == 0 then
		return "No featured pages defined."
	end

	local day = tonumber(os.date("%j"))
	local index = (day % #pages) + 1
	local title = pages[index]

	local page = mw.title.new(title)
	local headline = ""

	if page and page.exists then
		local content = page:getContent() or ""
		headline = extractHeadlineFromContent(content)
	end

	if headline == "" then
		headline = "Featured page for " .. os.date("%d %B %Y") .. "."
	end

	return string.format(
		"'''[[%s]]'''<div style=\"margin-top:0.35em;\"><small>%s</small></div>",
		title,
		headline
	)
end

return p