|
|
Line 1: |
Line 1: |
| --------------------------------------------------------------------------------
| | |
| -- 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 addKey(t, key, defaultKey)
| |
| if key ~= defaultKey then
| |
| t[#t + 1] = key
| |
| end
| |
| end
| |
|
| |
| -- Get a table of parameters to query for each default parameter name.
| |
| -- This allows wikis to customise parameter names in the cfg table while
| |
| -- ensuring that default parameter names will always work. The cfg table
| |
| -- values can be added as a string, or as an array of strings.
| |
|
| |
| local defaultKeys = {
| |
| 'main',
| |
| 'talk',
| |
| 'other',
| |
| 'subjectns',
| |
| 'demospace',
| |
| 'demopage'
| |
| }
| |
|
| |
| local argKeys = {}
| |
| for i, defaultKey in ipairs(defaultKeys) do
| |
| argKeys[defaultKey] = {defaultKey}
| |
| end
| |
|
| |
| for defaultKey, t in pairs(argKeys) do
| |
| local cfgValue = cfg[defaultKey]
| |
| local cfgValueType = type(cfgValue)
| |
| if cfgValueType == 'string' then
| |
| addKey(t, cfgValue, defaultKey)
| |
| elseif cfgValueType == 'table' then
| |
| for i, key in ipairs(cfgValue) do
| |
| addKey(t, key, defaultKey)
| |
| end
| |
| end
| |
| cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more.
| |
| end
| |
|
| |
| 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 mappings = {}
| |
| local mainNsName = mw.site.subjectNamespaces[0].name
| |
| mainNsName = mw.ustring.lower(mainNsName)
| |
| mappings[mainNsName] = mw.clone(argKeys.main)
| |
| mappings['talk'] = mw.clone(argKeys.talk)
| |
| for nsid, ns in pairs(mw.site.subjectNamespaces) do
| |
| if nsid ~= 0 then -- Exclude main namespace.
| |
| local nsname = mw.ustring.lower(ns.name)
| |
| local canonicalName = mw.ustring.lower(ns.canonicalName)
| |
| mappings[nsname] = {nsname}
| |
| if canonicalName ~= nsname then
| |
| table.insert(mappings[nsname], canonicalName)
| |
| end
| |
| for _, alias in ipairs(ns.aliases) do
| |
| table.insert(mappings[nsname], mw.ustring.lower(alias))
| |
| end
| |
| end
| |
| end
| |
| return mappings
| |
| end
| |
|
| |
| return {
| |
| argKeys = argKeys,
| |
| cfg = cfg,
| |
| mappings = getParamMappings()
| |
| }
| |