Difference between revisions of "Module:Namespace detect/data"

Jump to navigation Jump to search
(name return values)
(use a dedicated config page - Module:Namespace detect/config - for configuration data, and try and reduce unnecessary table lookups in the getParamMappings function)
Line 1: Line 1:
----------------------------------------------------------------------------------------------------
+
--------------------------------------------------------------------------------
-- Configuration data --
+
-- Namespace detect data --
  +
-- This module holds data for [[Module:Namespace detect]] to be loaded per --
-- Language-specific parameter names can be set here. --
 
  +
-- page, rather than per #invoke, for performance reasons. --
----------------------------------------------------------------------------------------------------
+
--------------------------------------------------------------------------------
   
local cfg = {}
+
local cfg = require('Module:Namespace detect/config')
 
-- This parameter displays content for the main namespace:
 
cfg.main = 'main'
 
 
-- This parameter displays in talk namespaces:
 
cfg.talk = 'talk'
 
 
-- This parameter displays content for "other" namespaces (namespaces for which
 
-- parameters have not been specified, or for when cfg.demospace is set to cfg.other):
 
cfg.other = 'other'
 
 
-- This parameter makes talk pages behave as though they are the corresponding subject namespace.
 
-- Note that this parameter is used with [[Module:Yesno]]. Edit that module to change
 
-- the default values of "yes", "no", etc.
 
cfg.subjectns = 'subjectns'
 
 
-- This parameter sets a demonstration namespace:
 
cfg.demospace = 'demospace'
 
 
-- This parameter sets a specific page to compare:
 
cfg.page = 'page'
 
 
-- The header for the namespace column in the wikitable containing the list of possible subject-space parameters.
 
cfg.wikitableNamespaceHeader = 'Namespace'
 
 
-- The header for the wikitable containing the list of possible subject-space parameters.
 
cfg.wikitableAliasesHeader = 'Aliases'
 
 
----------------------------------------------------------------------------------------------------
 
-- End configuration data --
 
----------------------------------------------------------------------------------------------------
 
   
 
local function getParamMappings()
 
local function getParamMappings()
  +
--[[
--[[ Returns a table of how parameter names map to namespace names. The keys are the actual namespace
 
names, in lower case, and the values are the possible parameter names for that namespace, also in
+
-- Returns a table of how parameter names map to namespace names. The keys
lower case. The table entries are structured like this:
+
-- are the actual namespace names, in lower case, and the values are the
  +
-- possible parameter names for that namespace, also in lower case. The
{
 
  +
-- table entries are structured like this:
[''] = {'main'},
 
  +
-- {
['wikipedia'] = {'wikipedia', 'project', 'wp'},
 
 
-- [''] = {'main'},
...
 
 
-- ['wikipedia'] = {'wikipedia', 'project', 'wp'},
}
 
]]
+
-- ...
  +
-- }
  +
--]]
  +
local ustringLower = mw.ustring.lower
  +
local tinsert = table.insert
  +
local subjectNamespaces = mw.site.subjectNamespaces
 
local talk = cfg.talk
 
local mappings = {}
 
local mappings = {}
mappings[mw.ustring.lower(mw.site.namespaces[0].name)] = {cfg.main}
+
mappings[ustringLower(subjectNamespaces[0].name)] = {cfg.main}
mappings[cfg.talk] = {cfg.talk}
+
mappings[talk] = {talk}
for nsid, ns in pairs(mw.site.subjectNamespaces) do
+
for nsid, ns in pairs(subjectNamespaces) do
 
if nsid ~= 0 then -- Exclude main namespace.
 
if nsid ~= 0 then -- Exclude main namespace.
local nsname = mw.ustring.lower(ns.name)
+
local nsname = ustringLower(ns.name)
local canonicalName = mw.ustring.lower(ns.canonicalName)
+
local canonicalName = ustringLower(ns.canonicalName)
 
mappings[nsname] = {nsname}
 
mappings[nsname] = {nsname}
 
if canonicalName ~= nsname then
 
if canonicalName ~= nsname then
table.insert(mappings[nsname], canonicalName)
+
tinsert(mappings[nsname], canonicalName)
 
end
 
end
 
for _, alias in ipairs(ns.aliases) do
 
for _, alias in ipairs(ns.aliases) do
table.insert(mappings[nsname], mw.ustring.lower(alias))
+
tinsert(mappings[nsname], ustringLower(alias))
 
end
 
end
 
end
 
end
Line 66: Line 42:
 
end
 
end
   
return { cfg = cfg, mappings = getParamMappings() }
+
return {cfg = cfg, mappings = getParamMappings()}

Revision as of 03:13, 21 March 2014

Documentation for this module may be created at Module:Namespace detect/data/doc

--------------------------------------------------------------------------------
--                          Namespace detect data                             --
-- This module holds data for [[Module:Namespace detect]] to be loaded per    --
-- page, rather than per #invoke, for performance reasons.                    --
--------------------------------------------------------------------------------

local cfg = require('Module:Namespace detect/config')

local function getParamMappings()
	--[[
	-- Returns a table of how parameter names map to namespace names. The keys
	-- are the actual namespace names, in lower case, and the values are the
	-- possible parameter names for that namespace, also in lower case. The
	-- table entries are structured like this:
	-- {
	--   [''] = {'main'},
	--   ['wikipedia'] = {'wikipedia', 'project', 'wp'},
	--   ...
	-- }
	--]]
	local ustringLower = mw.ustring.lower
	local tinsert = table.insert
	local subjectNamespaces = mw.site.subjectNamespaces
	local talk = cfg.talk
	local mappings = {}
	mappings[ustringLower(subjectNamespaces[0].name)] = {cfg.main}
	mappings[talk] = {talk}
	for nsid, ns in pairs(subjectNamespaces) do
		if nsid ~= 0 then -- Exclude main namespace.
			local nsname = ustringLower(ns.name)
			local canonicalName = ustringLower(ns.canonicalName)
			mappings[nsname] = {nsname}
			if canonicalName ~= nsname then
				tinsert(mappings[nsname], canonicalName)
			end
			for _, alias in ipairs(ns.aliases) do
				tinsert(mappings[nsname], ustringLower(alias))
			end
		end
	end
	return mappings
end

return {cfg = cfg, mappings = getParamMappings()}