Module:Signpost/index/sandbox
-- 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 addArticleToIndex(index, article, sortKey)
article.sortKey = sortKey
index.list[sortKey] = article
local date = article.date
addSubtable(article, index.dates, date)
local page = makePageName(date, article.subpage)
article.page = page
index.pages[page] = article
article.tags = article.tags or {}
for l, tag in ipairs(article.tags) do
addSubtable(article, index.tags, tag)
end
article.authors = article.authors or {}
for l, author in ipairs(article.authors) do
addSubtable(article, index.authors, author)
end
end
local function main()
local index = {
aliases = makeAliases(),
authors = {},
dates = {},
list = {},
pages = {},
tags = {},
}
local sortKey = 0
for j, yearIndex in ipairs(getYearIndexes()) do
for k, article in ipairs(yearIndex) do
sortKey = sortKey + 1
addArticleToIndex(index, article, sortKey)
end
end
return index
end
return main()