Module:Pagetype

Fiji Hindi editions of Wiki, an online encyclopedia

Documentation for this module may be created at Module:Pagetype/doc

----------------------------------------------------------------------------------                                                                            ----                                PAGETYPE                                    ----                                                                            ----      This is a meta-module intended to replace {{pagetype}} and similar    ----      templates. It 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 [[Module:Pagetype/config]].       ----                                                                            ------------------------------------------------------------------------------------ Load config.local cfg = mw.loadData('Module:Pagetype/config')-- Load required modules.local getArgs = require('Module:Arguments').getArgslocal yesno = require('Module:Yesno')local nsDetectModule = require('Module:Namespace detect')local nsDetect = nsDetectModule._mainlocal getParamMappings = nsDetectModule.getParamMappingslocal getPageObject = nsDetectModule.getPageObjectlocal p = {}local function shallowCopy(t)-- Makes a shallow copy of a table.local ret = {}for k, v in pairs(t) doret[k] = vendreturn retendlocal function checkPagetypeInput(namespace, val)-- Checks to see whether we need the default value for the given namespace,-- and if so gets it from the pagetypes table.-- The yesno function returns true/false for "yes", "no", etc., and returns-- val for other input.local ret = yesno(val, val)if ret and type(ret) ~= 'string' thenret = cfg.pagetypes[namespace]endreturn retendlocal function getPagetypeFromClass(class, param, aliasTable, default)-- Gets the pagetype from a class specified from the first positional-- parameter.param = yesno(param, param)if param ~= false then -- No check if specifically disallowed.for _, alias in ipairs(aliasTable) doif class == alias thenif type(param) == 'string' thenreturn paramelsereturn defaultendendendendendlocal function getNsDetectValue(args)-- Builds the arguments to pass to [[Module:Namespace detect]] and returns-- the result.-- Get the default values.local ndArgs = {}local defaultns = args[cfg.defaultns]if defaultns == cfg.defaultnsAll thenndArgs = shallowCopy(cfg.pagetypes)elselocal defaultnsArrayif defaultns == cfg.defaultnsExtended thendefaultnsArray = cfg.extendedNamespaceselseif defaultns == cfg.defaultnsNone thendefaultnsArray = {}elsedefaultnsArray = cfg.defaultNamespacesendfor _, namespace in ipairs(defaultnsArray) dondArgs[namespace] = cfg.pagetypes[namespace]endend--[[-- Add custom values passed in from the arguments. These overwrite the-- defaults. The possible argument names are fetched from-- Module:Namespace detect automatically in case new namespaces are-- added. Although we accept namespace aliases as parameters, we only pass-- the local namespace name as a parameter to Module:Namespace detect.-- This means that the "image" parameter can overwrite defaults for the-- File: namespace, which wouldn't work if we passed the parameters through-- separately.--]]local mappings = getParamMappings()for ns, paramAliases in pairs(mappings) do-- Copy the aliases table, as # doesn't work with tables returned from-- mw.loadData.paramAliases = shallowCopy(paramAliases)local paramName = paramAliases[1]-- Iterate backwards along the array so that any values for the local-- namespace names overwrite those for namespace aliases.for i = #paramAliases, 1, -1 dolocal paramAlias = paramAliases[i]local ndArg = checkPagetypeInput(paramAlias, args[paramAlias])if ndArg == false then-- If any arguments are false, convert them to nil to protect-- against breakage by future changes to-- [[Module:Namespace detect]].ndArgs[paramName] = nilelseif ndArg thenndArgs[paramName] = ndArgendendend-- Check for disambiguation-class and N/A-class pages in mainspace.if ndArgs.main thenlocal class = args[1]if type(class) == 'string' then-- Put in lower case so e.g. "Dab" and "dab" will both match.class = mw.ustring.lower(class)endlocal dab = getPagetypeFromClass(class,args[cfg.dab],cfg.dabAliases,cfg.dabDefault)if dab thenndArgs.main = dabelselocal na = getPagetypeFromClass(class,args[cfg.na],cfg.naAliases,cfg.naDefault)if na thenndArgs.main = naendendend-- If there is no talk value specified, use the corresponding subject -- namespace for talk pages.if not ndArgs.talk thenndArgs.subjectns = trueend-- Add the fallback value. This can also be customised, but it cannot be-- disabled.local other = args[cfg.other]-- We will ignore true/false/nil results from yesno here, but using it-- anyway for consistency.other = yesno(other, other)if type(other) == 'string' thenndArgs.other = otherelsendArgs.other = cfg.otherDefaultend-- Allow custom page values.ndArgs.page = args.pagereturn nsDetect(ndArgs)endlocal function detectRedirects(args)local redirect = args[cfg.redirect]-- The yesno function returns true/false for "yes", "no", etc., and returns-- redirect for other input.redirect = yesno(redirect, redirect)if redirect == false then-- Detect redirects unless they have been explicitly disallowed with-- "redirect=no" or similar.returnendlocal pageObject = getPageObject(args.page)-- If we are using subject namespaces elsewhere, do so here as well.if pageObjectand not yesno(args.talk, true)and args[cfg.defaultns] ~= cfg.defaultnsAllthenpageObject = getPageObject(pageObject.subjectNsText .. ':' .. pageObject.text)end-- Allow custom values for redirects.if pageObject and pageObject.isRedirect thenif type(redirect) == 'string' thenreturn redirectelsereturn cfg.redirectDefaultendendendfunction p._main(args)local redirect = detectRedirects(args)local pagetype = ""if redirect thenpagetype = redirectelsepagetype = getNsDetectValue(args)endif yesno(args.plural, false) thenif cfg.irregularPlurals[pagetype] thenpagetype = cfg.irregularPlurals[pagetype]elsepagetype = pagetype .. cfg.plural -- often 's'endendif yesno(args.caps, false) thenpagetype = mw.ustring.upper(mw.ustring.sub(pagetype, 1, 1)) ..mw.ustring.sub(pagetype, 2)endreturn pagetypeendfunction p.main(frame)local args = getArgs(frame)return p._main(args)endreturn p

This article uses material from the Wikipedia article Module:Pagetype, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply. (view authors). Content is available under CC BY-SA 3.0 unless otherwise noted. Images, videos and audio are available under their respective licenses.
#Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc. Wiki (duhoctrungquoc.vn) is an independent company and has no affiliation with Wikimedia Foundation.