Module:DidYouKnow: Difference between revisions
Admin Jeremy (talk | contribs) No edit summary |
Admin Jeremy (talk | contribs) No edit summary |
||
| Line 3: | Line 3: | ||
-- CONFIG | -- CONFIG | ||
local DATA_PAGE = "Template:Did you know/Data" | local DATA_PAGE = "Template:Did you know/Data" | ||
local DEFAULT_COUNT = 5 | |||
local MAX_COUNT = 15 | |||
-- Simple deterministic shuffle | |||
local function shuffle(t) | |||
for i = #t, 2, -1 do | |||
local j = math.random(i) | |||
t[i], t[j] = t[j], t[i] | |||
end | |||
end | |||
function p.main(frame) | function p.main(frame) | ||
local args = frame.args | |||
local count = tonumber(args.count) or DEFAULT_COUNT | |||
if count > MAX_COUNT then | |||
count = MAX_COUNT | |||
end | |||
local title = mw.title.new(DATA_PAGE) | local title = mw.title.new(DATA_PAGE) | ||
if not title or not title.exists then | if not title or not title.exists then | ||
| Line 29: | Line 45: | ||
end | end | ||
-- | -- Daily seed (YYYYMMDD) | ||
math.randomseed( | local today = os.date("%Y%m%d") | ||
math.random() -- | math.randomseed(tonumber(today)) | ||
math.random() -- discard first value | |||
-- Shuffle and select | |||
shuffle(items) | |||
if count > #items then | |||
count = #items | |||
end | |||
-- Build output list | |||
local out = {} | |||
table.insert(out, "<ul class='did-you-know-list'>") | |||
for i = 1, count do | |||
table.insert(out, "<li>" .. items[i] .. "</li>") | |||
end | |||
table.insert(out, "</ul>") | |||
return table.concat(out, "\n") | |||
end | end | ||
return p | return p | ||
Latest revision as of 22:30, 20 January 2026
Documentation for this module may be created at Module:DidYouKnow/doc
local p = {}
-- CONFIG
local DATA_PAGE = "Template:Did you know/Data"
local DEFAULT_COUNT = 5
local MAX_COUNT = 15
-- Simple deterministic shuffle
local function shuffle(t)
for i = #t, 2, -1 do
local j = math.random(i)
t[i], t[j] = t[j], t[i]
end
end
function p.main(frame)
local args = frame.args
local count = tonumber(args.count) or DEFAULT_COUNT
if count > MAX_COUNT then
count = MAX_COUNT
end
local title = mw.title.new(DATA_PAGE)
if not title or not title.exists then
return "<span class='error'>DidYouKnow: data page not found</span>"
end
local content = title:getContent()
if not content then
return "<span class='error'>DidYouKnow: no content</span>"
end
local items = {}
-- Parse bullet list
for line in content:gmatch("[^\r\n]+") do
local item = line:match("^%*%s*(.+)")
if item then
table.insert(items, item)
end
end
if #items == 0 then
return "<span class='error'>DidYouKnow: no items found</span>"
end
-- Daily seed (YYYYMMDD)
local today = os.date("%Y%m%d")
math.randomseed(tonumber(today))
math.random() -- discard first value
-- Shuffle and select
shuffle(items)
if count > #items then
count = #items
end
-- Build output list
local out = {}
table.insert(out, "<ul class='did-you-know-list'>")
for i = 1, count do
table.insert(out, "<li>" .. items[i] .. "</li>")
end
table.insert(out, "</ul>")
return table.concat(out, "\n")
end
return p