Permanently protected module
From Wikipedia, the free encyclopedia


-- 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)

	tOutkey = tOutkey or {}

	insert(tOutkey], 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

			retalias = key

		end

	end

	return ret

end



local function addArticleToIndex(index, article, sortKey)

	article.sortKey = sortKey

	index.listsortKey = article



	local date = article.date

	addSubtable(article, index.dates, date)



	local page = makePageName(date, article.subpage)

	article.page = page

	index.pagespage = 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()