Jump to content

Module:Interwiki extra/data: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
process data to use in Module:Interwiki
 
raise an error if there is no url object or no host, and use "url" for the string and "urlObj" for the object
Line 18: Line 18:
prefixData[k] = v
prefixData[k] = v
end
end
local urlText = prefixData.url
local url = prefixData.url
local urlObj = mw.uri.new(urlText)
local urlObj = mw.uri.new(url)
prefixData.url = urlObj
if not urlObj then
error(string.format(
"could not make URI object for prefix '%s'; " ..
"please check your wiki's interwiki data",
tostring(prefix)
))
end
prefixData.url = url
prefixData.urlObj = urlObj
prefixes[prefix] = prefixData
prefixes[prefix] = prefixData


Line 30: Line 38:
prefixData
prefixData
)
)
urlData.url = urlObj
urlData.url = url
urlData.urlObj = urlObj
urls[urlText] = urlData
urls[url] = urlData
end
end


for urlText, urlData in pairs(urls) do
for url, urlData in pairs(urls) do
local host = urlData.url.host
local host = urlData.urlObj.host
if host then
if not host then
error(string.format(
local hostData = makeCountedData(
"could not find a host in URL '%s'; " ..
hosts[host],
"please check your wiki's interwiki data",
'urls',
tostring(url)
'nUrls',
))
urlText,
urlData
)
hostData.host = host
hosts[host] = hostData
end
end
local hostData = makeCountedData(
hosts[host],
'urls',
'nUrls',
url,
urlData
)
hostData.host = host
hosts[host] = hostData
end
end



Revision as of 01:34, 21 January 2015

-- This module processes data from mw.site.interwikiMap for use with
-- [[Module:Interwiki]]. By loading the data with mw.loadData we ensure that
-- this is only done once per page parse.

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
	local url = prefixData.url
	local urlObj = mw.uri.new(url)
	if not urlObj then
		error(string.format(
			"could not make URI object for prefix '%s'; " ..
			"please check your wiki's interwiki data",
			tostring(prefix)
		))
	end
	prefixData.url = url
	prefixData.urlObj = urlObj
	prefixes[prefix] = prefixData

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

for url, urlData in pairs(urls) do
	local host = urlData.urlObj.host
	if not host then
		error(string.format(
			"could not find a host in URL '%s'; " ..
			"please check your wiki's interwiki data",
			tostring(url)
		))
	end
	local hostData = makeCountedData(
		hosts[host],
		'urls',
		'nUrls',
		url,
		urlData
	)
	hostData.host = host
	hosts[host] = hostData
end

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