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