Module:Weekly site information: Difference between revisions

From Our World of Text Wiki
Jump to navigation Jump to search
Dat Hack3r (talk | contribs)
Test successful, deploying new version.
Dat Hack3r (talk | contribs)
Refactor completely and add the ability to specify a specific release number
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


local function release(prev)
local mw_error = require('Module:Error').error
    local first_date = os.time{year=2024, month=9, day=8}
    local curr_date = os.date("*t", os.time())
    if prev == true then
    curr_date.day = curr_date.day - 7
    end
    curr_date = os.time(curr_date)


    local diff = os.difftime(curr_date, first_date) / (24 * 60 * 60)
local first = os.time{year=2024, month=9, day=8}
    local release_num = math.floor(diff / 7)
local diff = math.floor(os.difftime(os.time(), first) / 60 / 60 / 24 / 7)


    local end_date = os.date("*t", curr_date - (diff % 7) * 24 * 60 * 60)
function p._release(offset, number)
    end_date.day = end_date.day - (end_date.wday - 1)
offset = offset or 0
number = (number or diff) + offset


    local start_date = os.time{year=end_date.year, month=end_date.month, day=end_date.day - 7}
local end_date = os.date('*t', first)
end_date.day = end_date.day + number * 7
local start_date = {
year = end_date.year,
month = end_date.month,
day = end_date.day - 7,
}


    return release_num .. " " .. os.date("%b %d", start_date) .. " - " .. os.date("%b %d", os.time(end_date))
return string.format('Weekly Briefing Release %d %s - %s',
number,
os.date('%b %d', os.time(start_date)):gsub(' 0', ' '),
os.date('%b %d', os.time(end_date)):gsub(' 0', ' ')
)
end
end


function p.most_recent()
function p._main(link_text, offset, number)
return release(false)
link_text = link_text or ''
 
if number then
return '[[' .. p._release(offset, number) .. '|' .. link_text .. ']]'
elseif offset then
return '[[' .. p._release(offset) .. '|' .. link_text .. ']]'
end
 
-- Use the following code when mw.title.newBatch() becomes available
-- local releases = {}
-- for i = 1, -diff, -1 do
-- table.insert(releases, p._release(i))
-- end
-- for _, release in ipairs(mw.title.newBatch(releases):lookupExistence():getTitles()) do
-- if release.exists then
-- return '[[' .. release.fullText .. '|' .. link_text .. ']]'
-- end
-- end
 
for i = 1, -diff, -1 do
release = p._release(i)
mw.log(release)
if mw.title.new(release).exists then
return '[[' .. release .. '|' .. link_text .. ']]'
end
end
 
return mw_error{'No Releases found. Something has gone very, very wrong.'}
end
end


function p.previous()
function p.main(frame)
return release(true)
local link_text = frame:getParent().args[1] or 'Weekly Site Information'
local offset = tonumber(frame:getParent().args['offset'])
local number = tonumber(frame:getParent().args['number'])
return p._main(link_text, offset, number)
end
end


return p
return p

Latest revision as of 02:22, 1 February 2026

local p = {}

local mw_error = require('Module:Error').error

local first = os.time{year=2024, month=9, day=8}
local diff = math.floor(os.difftime(os.time(), first) / 60 / 60 / 24 / 7)

function p._release(offset, number)
	offset = offset or 0
	number = (number or diff) + offset

	local end_date = os.date('*t', first)
	end_date.day = end_date.day + number * 7
	local start_date = {
		year = end_date.year,
		month = end_date.month,
		day = end_date.day - 7,
	}

	return string.format('Weekly Briefing Release %d %s - %s',
		number,
		os.date('%b %d', os.time(start_date)):gsub(' 0', ' '),
		os.date('%b %d', os.time(end_date)):gsub(' 0', ' ')
	)
end

function p._main(link_text, offset, number)
	link_text = link_text or ''

	if number then
		return '[[' .. p._release(offset, number) .. '|' .. link_text .. ']]'
	elseif offset then
		return '[[' .. p._release(offset) .. '|' .. link_text .. ']]'
	end

	-- Use the following code when mw.title.newBatch() becomes available
	-- local releases = {}
	-- for i = 1, -diff, -1 do
	-- 	table.insert(releases, p._release(i))
	-- end
	-- for _, release in ipairs(mw.title.newBatch(releases):lookupExistence():getTitles()) do
	-- 	if release.exists then
	-- 		return '[[' .. release.fullText .. '|' .. link_text .. ']]'
	-- 	end
	-- end

	for i = 1, -diff, -1 do
		release = p._release(i)
		mw.log(release)
		if mw.title.new(release).exists then
			return '[[' .. release .. '|' .. link_text .. ']]'
		end
	end

	return mw_error{'No Releases found. Something has gone very, very wrong.'}
end

function p.main(frame)
	local link_text = frame:getParent().args[1] or 'Weekly Site Information'
	local offset = tonumber(frame:getParent().args['offset'])
	local number = tonumber(frame:getParent().args['number'])
	return p._main(link_text, offset, number)
end

return p