|
|
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()
| |
− | }
| |