Module:Pagetype

local dts = require('Module:User:Anomie/deepToString').deepToString -- for debugging

local yesno = require('Module:Yesno') local nsDetect = require('Module:Namespace detect')._main

local p = {}

local pagetypes = { main                 = 'article', mediawiki            = 'interface page', help                 = 'help page', project              = 'project page', book                 = 'book', file                 = 'file', template             = 'template', category             = 'category', module               = 'module', portal               = 'portal', timedtext            = 'Timed Text page', ['education program'] = 'education program page', talk                 = 'talk page' }

local defaultNamespaces = {'main', 'file', 'template', 'category', 'module', 'book'}

local function getNamespacePagetype(namespace, v) local ret = yesno(v, v) -- Returns true/false for "yes", "no", etc., and returns v for other input. if ret and type(ret) ~= 'string' then ret = pagetypes[namespace] end return ret end

function p._main(args) local nsArgs = {} -- Get the default values. for _, namespace in ipairs(defaultNamespaces) do		nsArgs[namespace] = pagetypes[namespace] end -- Add custom values passed in from the arguments. for namespace in pairs(pagetypes) do		local nsArg = getNamespacePagetype(namespace, args[namespace]) if nsArg ~= nil then nsArgs[namespace] = nsArg end end -- If there is no talk value specified, use the corresponding subject namespace for talk pages. if not nsArgs.talk then nsArgs.subjectns = true end -- Add the fallback value. nsArgs.other = 'page' -- Allow custom page and namespace values. nsArgs.page = args.page nsArgs.demospace = args.demospace return nsDetect(nsArgs) end

function p.main(frame) -- If called via #invoke, use the args passed into the invoking template, or the args passed to #invoke if any exist. -- Otherwise assume args are being passed directly in from the debug console or from another Lua module. local origArgs if frame == mw.getCurrentFrame then origArgs = frame:getParent.args for k, v in pairs(frame.args) do			origArgs = frame.args break end else origArgs = frame end -- Trim whitespace and remove blank arguments. local args = {} for k, v in pairs(origArgs) do		if type(v) == 'string' then v = mw.text.trim(v) end if v ~= '' then args[k] = v		end end return p._main(args) end

return p