Jump to content

Module:Signpost/index: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add a sortKey field
add table of tag aliases
Line 5: Line 5:
local INDEX_START_YEAR = 2005
local INDEX_START_YEAR = 2005
local INDEX_BASE = 'Module:Signpost/index/'
local INDEX_BASE = 'Module:Signpost/index/'
local ALIASES_MODULE = 'Module:Signpost/aliases'
local insert = table.insert
local insert = table.insert
local format = string.format
local format = string.format
Line 29: Line 30:
local module = maybeRequire(INDEX_BASE .. tostring(i))
local module = maybeRequire(INDEX_BASE .. tostring(i))
insert(ret, module)
insert(ret, module)
end
return ret
end

local function makeAliases()
local aliasData = require(ALIASES_MODULE)
local ret = {}
for key, aliases in pairs(aliasData) do
for i, alias in ipairs(aliases) do
ret[alias] = key
end
end
end
return ret
return ret
Line 55: Line 67:
dates = dates,
dates = dates,
tags = tags,
tags = tags,
pages = pages
pages = pages,
aliases = makeAliases()
}
}
end
end

Revision as of 23:43, 13 May 2015

-- This module processes data from [[Module:Signpost/index]], to be loaded from
-- [[Module:Signpost]] with mw.loadData.

local PAGE_FORMAT = 'Wikipedia:Wikipedia Signpost/%s/%s'
local INDEX_START_YEAR = 2005
local INDEX_BASE = 'Module:Signpost/index/'
local ALIASES_MODULE = 'Module:Signpost/aliases'
local insert = table.insert
local format = string.format

local function makePageName(date, subpage)
	return format(PAGE_FORMAT, date, subpage)
end

local function addSubtable(tIn, tOut, key)
	tOut[key] = tOut[key] or {}
	insert(tOut[key], tIn)
end

local function maybeRequire(page)
	local success, module = pcall(require, page)
	if success then
		return module
	end
end

local function getYearIndexes()
	local ret = {}
	for i = INDEX_START_YEAR, os.date('*t').year + 1 do
		local module = maybeRequire(INDEX_BASE .. tostring(i))
		insert(ret, module)
	end
	return ret
end

local function makeAliases()
	local aliasData = require(ALIASES_MODULE)
	local ret = {}
	for key, aliases in pairs(aliasData) do
		for i, alias in ipairs(aliases) do
			ret[alias] = key
		end
	end
	return ret
end

local function main()
	local list, dates, tags, pages = {}, {}, {}, {}
	local i = 0
	for j, index in ipairs(getYearIndexes()) do
		for k, t in ipairs(index) do
			i = i + 1
			t.sortKey = i
			local date = t.date
			local page = makePageName(date, t.subpage)
			t.page = page
			list[i] = t
			addSubtable(t, dates, date)
			for l, tag in ipairs(t.tags) do
				addSubtable(t, tags, tag)
			end
			pages[page] = t
		end
	end
	return {
		list = list,
		dates = dates,
		tags = tags,
		pages = pages,
		aliases = makeAliases()
	}
end

return main()