Модуль:Дадатковыя інтэрвікі/зьвесткі

Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Дадатковыя інтэрвікі/зьвесткі/Дакумэнтацыя

-- Гэты модуль апрацоўвае зьвесткі з mw.site.interwikiMap для выкарыстаньня з
-- [[Модуль:Дадатковыя інтэрвікі]]. Загружаючы зьвесткі з дапамогай mw.loadData,
-- мы пераконваемся, што гэта робіцца толькі адзін раз за разбор старонкі.

local prefixes, urls, hosts = {}, {}, {}

local function makeCountedData(t, storeKey, counterKey, itemKey, item)
	t = t or {}
	t[storeKey] = t[storeKey] or {}
	t[storeKey][itemKey] = item
	t[counterKey] = t[counterKey] and t[counterKey] + 1 or 1
	return t
end

for prefix, data in pairs(mw.site.interwikiMap()) do
	local prefixData = {}
	for k, v in pairs(data) do
		prefixData[k] = v
	end
	prefixes[prefix] = prefixData

	local urlData = makeCountedData(
		urls[urlText],
		'prefixes',
		'nPrefixes',
		prefix,
		prefixData
	)
	urlData.url = prefixData.url
	urls[urlData.url] = urlData
end

for url, urlData in pairs(urls) do
	local urlObj = mw.uri.new(url) -- We can't output URI objects as they have metatables
	if not urlObj or not urlObj.host then
		error(string.format(
			"немагчыма знайсьці гаспадара ў URL '%s'; " ..
			"калі ласка, праверце зьвесткі інтэрвікаў вашай вікі",
			tostring(url)
		))
	end
	local hostData = makeCountedData(
		hosts[urlObj.host],
		'urls',
		'nUrls',
		url,
		urlData
	)
	hostData.host = urlObj.host
	hosts[urlObj.host] = hostData
end

return {
	prefixes = prefixes,
	urls = urls,
	hosts = hosts
}