| Modul Lua ini digunakan pada 9.300+ halaman dan perubahannya kemungkinan memicu perubahan massal pada semua halaman yang menggunakannya. Uji cobalah di subhalaman /bak pasir atau /kasus uji Modul:Namespace detect, atau bak pasir modul Anda. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
This module allows you to output different text depending on the namespace that a given page is in. It is a Lua implementation of the {{namespace detect}} template, with a few improvements: all namespaces and all namespace aliases are supported, and namespace names are detected automatically for the local wiki.
UsageUsage
{{#invoke: Namespace detect | main
| page = <!-- page to detect namespace for, if not the current page -->
| main = <!-- text to return for the main namespace -->
| talk = <!-- text to return for talk namespaces -->
<!-- text to return for specific subject namespaces -->
| portal =
| category =
| user =
| wikipedia =
| education program =
| mediawiki =
| book =
| timedtext =
| template =
| special =
| media =
| file =
| image =
| help =
| module =
| other = <!-- text to return for unspecified namespaces -->
| demospace = <!-- namespace to display text for -->
| subjectns = <!-- set to "yes" to treat talk pages as the corresponding subject page -->
}}
ParametersParameters
- main - text to return if the page is in the main namespace.
- talk - text to return if the page is in a talk namespace. This can be any talk namespace - it will match any of "Talk:", "Wikipedia talk:", "User talk:", etc.
- Subject namespace parameters, e.g. wikipedia, user, file... - the text to return if the page is in the corresponding namespace. This module accepts all subject namespaces as parameters, including namespace aliases and virtual namespaces. See below for a list of supported values.
- other - text to return if no parameters for the page's namespace were specified. This text is also returned if
|demospace=is set to an invalid namespace value. - subjectns - if on a talk page, use the corresponding subject page. Can be set with values of "yes", "y", "true" or "1".
- demopage - specifies a page to detect the namespace of. If not specified, and if the
|demospace=parameter is not set, then the module uses the current page. - demospace - force the module to behave as if the page was in the specified namespace. Often used for demonstrations.
Namespace parametersNamespace parameters
Possible values for subject namespace parameters are as follows:
| Namespace | Aliases |
|---|---|
main
|
|
pengguna
|
user
|
wikipedia
|
project, wp
|
berkas
|
file, gambar, image
|
mediawiki
|
|
templat
|
template
|
bantuan
|
help
|
kategori
|
category
|
portal
|
|
mos
|
|
timedtext
|
|
modul
|
module
|
story
|
|
acara
|
event
|
topik
|
topic
|
Table functionTable function
Use the following to display a table with the different possible namespace parameters:
{{#invoke:Namespace detect|table|talk=yes}}
To include the parameter for talk namespaces, use |talk=yes.
Porting to different wikisPorting to different wikis
This module is designed to be portable. To use it on a different wiki, all you need to do is to change the values in Module:Namespace detect/config. Instructions are available on that page.
Technical detailsTechnical details
The module uses a data page at Module:Namespace detect/data. This page is loaded with mw.loadData, which means it is processed once per page rather than once per #invoke. This was done for performance reasons.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
--[[ -------------------------------------------------------------------------------- -- -- -- NAMESPACE DETECT -- -- -- -- This module implements the {{namespace detect}} template in Lua, with a -- -- few improvements: all namespaces and all namespace aliases are supported, -- -- and namespace names are detected automatically for the local wiki. The -- -- module can also use the corresponding subject namespace value if it is -- -- used on a talk page. Parameter names can be configured for different wikis -- -- by altering the values in the "cfg" table in -- -- Module:Namespace detect/config. -- -- -- -------------------------------------------------------------------------------- --]] localdata=mw.loadData('Module:Namespace detect/data') localargKeys=data.argKeys localcfg=data.cfg localmappings=data.mappings localyesno=require('Module:Yesno') localmArguments-- Lazily initialise Module:Arguments localmTableTools-- Lazily initilalise Module:TableTools localustringLower=mw.ustring.lower localp={} localfunctionfetchValue(t1,t2) -- Fetches a value from the table t1 for the first key in array t2 where -- a non-nil value of t1 exists. fori,keyinipairs(t2)do localvalue=t1[key] ifvalue~=nilthen returnvalue end end returnnil end localfunctionequalsArrayValue(t,value) -- Returns true if value equals a value in the array t. Otherwise -- returns false. fori,arrayValueinipairs(t)do ifvalue==arrayValuethen returntrue end end returnfalse end functionp.getPageObject(page) -- Get the page object, passing the function through pcall in case of -- errors, e.g. being over the expensive function count limit. ifpagethen localsuccess,pageObject=pcall(mw.title.new,page) ifsuccessthen returnpageObject else returnnil end else returnmw.title.getCurrentTitle() end end -- Provided for backward compatibility with other modules functionp.getParamMappings() returnmappings end localfunctiongetNamespace(args) -- This function gets the namespace name from the page object. localpage=fetchValue(args,argKeys.demopage) ifpage==''then page=nil end localdemospace=fetchValue(args,argKeys.demospace) ifdemospace==''then demospace=nil end localsubjectns=fetchValue(args,argKeys.subjectns) localret ifdemospacethen -- Handle "demospace = main" properly. ifequalsArrayValue(argKeys.main,ustringLower(demospace))then ret=mw.site.namespaces[0].name else ret=demospace end else localpageObject=p.getPageObject(page) ifpageObjectthen ifpageObject.isTalkPagethen -- Get the subject namespace if the option is set, -- otherwise use "talk". ifyesno(subjectns)then ret=mw.site.namespaces[pageObject.namespace].subject.name else ret='talk' end else ret=pageObject.nsText end else returnnil-- return nil if the page object doesn't exist. end end ret=ret:gsub('_',' ') returnustringLower(ret) end functionp._main(args) -- Check the parameters stored in the mappings table for any matches. localnamespace=getNamespace(args)or'other'-- "other" avoids nil table keys localparams=mappings[namespace]or{} localret=fetchValue(args,params) --[[ -- If there were no matches, return parameters for other namespaces. -- This happens if there was no text specified for the namespace that -- was detected or if the demospace parameter is not a valid -- namespace. Note that the parameter for the detected namespace must be -- completely absent for this to happen, not merely blank. --]] ifret==nilthen ret=fetchValue(args,argKeys.other) end returnret end functionp.main(frame) mArguments=require('Module:Arguments') localargs=mArguments.getArgs(frame,{removeBlanks=false}) localret=p._main(args) returnretor'' end functionp.table(frame) --[[ -- Create a wikitable of all subject namespace parameters, for -- documentation purposes. The talk parameter is optional, in case it -- needs to be excluded in the documentation. --]] -- Load modules and initialise variables. mTableTools=require('Module:TableTools') localnamespaces=mw.site.namespaces localcfg=data.cfg localuseTalk=type(frame)=='table' andtype(frame.args)=='table' andyesno(frame.args.talk)-- Whether to use the talk parameter. -- Get the header names. localfunctioncheckValue(value,default) iftype(value)=='string'then returnvalue else returndefault end end localnsHeader=checkValue(cfg.wikitableNamespaceHeader,'Namespace') localaliasesHeader=checkValue(cfg.wikitableAliasesHeader,'Aliases') -- Put the namespaces in order. localmappingsOrdered={} fornsname,paramsinpairs(mappings)do ifuseTalkornsname~='talk'then localnsid=namespaces[nsname].id -- Add 1, as the array must start with 1; nsid 0 would be lost otherwise. nsid=nsid+1 mappingsOrdered[nsid]=params end end mappingsOrdered=mTableTools.compressSparseArray(mappingsOrdered) -- Build the table. localret='{| class="wikitable"' ..'\n|-' ..'\n! '..nsHeader ..'\n! '..aliasesHeader fori,paramsinipairs(mappingsOrdered)do forj,paraminipairs(params)do ifj==1then ret=ret..'\n|-' ..'\n| <code>'..param..'</code>' ..'\n| ' elseifj==2then ret=ret..'<code>'..param..'</code>' else ret=ret..', <code>'..param..'</code>' end end end ret=ret..'\n|-' ..'\n|}' returnret end returnp