Module:Pagetype Explained

---------------------------------------------------------------------------------- ---- This meta-module which automatically detects namespaces, and allows ---- for a great deal of customisation. It can easily be ported to other ---- wikis by changing the values in the . ---- ------------------------------------------------------------------------------------ Load config.local cfg = mw.loadData('Module:Pagetype/config')

-- Load required modules.local yesno = require('Module:Yesno')local p =

-- Look up a namespace argument in the args table.local function lookUpNamespaceArg(args, key) local arg = args[key] -- Convert "yes", "1" etc. to true, "no", "0" etc. to false, and leave -- other values the same. return yesno(arg, arg)end

-- Append multiple values to an arraylocal function appendMultiple(target, source) for _, value in ipairs(source) do table.insert(target, value) endend

-- Get argument keys for a title's namespacelocal function getNamespaceArgKeys(title) local nsInfo = mw.site.namespaces[title.namespace] local customAliases = cfg.customNamespaceAliases[title.namespace] or local keys = if nsInfo.name ~= then table.insert(keys, nsInfo.name) end if nsInfo.canonicalName ~= nsInfo.name and nsInfo.canonicalName ~= then table.insert(keys, nsInfo.canonicalName) end appendMultiple(keys, nsInfo.aliases) appendMultiple(keys, customAliases) return keysend

-- Get the argument for a title's namespace, if it was specified in the args table.local function getNamespaceArg(title, args) if title.isTalkPage then return lookUpNamespaceArg(args, cfg.talk) end for _, key in ipairs(getNamespaceArgKeys(title)) do local arg = lookUpNamespaceArg(args, mw.ustring.lower(key)) if arg ~= nil then return arg end end return nilend

-- Look up a page type specific to the title's namespacelocal function getExplicitPageType(title) if title.isTalkPage then return cfg.talkDefault else return cfg.pagetypes[title.namespace] endend

-- Get a default page type that is not specific to the title's namespacelocal function getDefaultPageType(args) local other = lookUpNamespaceArg(args, cfg.other) if type(other)

'string' then return other else return cfg.otherDefault endend

local function detectRedirects(title, args) local redirect = lookUpNamespaceArg(args, cfg.redirect) if redirect

false then -- Don't detect redirects if they have been specifically disallowed. return nil end

-- Allow custom values for redirects. if not title.isRedirect then return nil elseif type(redirect)

'string' then return redirect else return cfg.redirectDefault endend

local function capitalize(pageType) local first = mw.ustring.sub(pageType, 1, 1) local rest = mw.ustring.sub(pageType, 2) return mw.ustring.upper(first) .. restend

local function pluralize(pageType) if cfg.irregularPlurals[pageType] then return cfg.irregularPlurals[pageType] else return pageType .. cfg.plural -- often 's' endend

local function parseContent(title, args, optionsList) if title.namespace

828 and title.subpageText~='doc' -- don't detect modules or not title.exists -- can't check unless page exists then return nil end local content = title:getContent if content

nil then return nil end local templates -- lazily evaluated for _, options in next, optionsList do local list, parameter, default, articleOnly = unpack(options, 1, 4) if not articleOnly or title.namespace

0 then -- only check for templates if we should... local out = lookUpNamespaceArg(args, parameter) if type(out)

"string" or (out ~= false and default) then -- ...and if we actually have anything to say about them if not templates then templates = -- do our delayed evaluation now that we are required to content = require('Module:Wikitext Parsing').PrepareText(content) -- disregard templates which do not have any affect for template in string.gmatch(content, "