突然胃疼是什么原因| 抗链球菌溶血素o偏高是什么原因| 劲旅是什么意思| 青蟹什么季节吃最好| 胆囊炎吃什么药效果最好| nlp是什么| 心脏疼是什么原因| 宜夫痣是什么意思| 乌鸡白凤丸男性吃治疗什么| 红楼梦主要讲了什么| 口腔溃疡吃什么食物| 低血压是什么意思| 下午4点多是什么时辰| 多吃菠萝有什么好处| 什么园| 便秘吃什么| 刺激什么意思| 鼻子旁边有痣代表什么| 天亮是什么时辰| 1945年属什么| 扪是什么意思| lsa是什么胎位| 心衰应该注意什么| 病理科是干什么的| eob是什么意思| 朱元璋为什么不传位给朱棣| 蜱虫咬人后有什么症状| 囊肿是什么原因造成的| 权志龙的团队叫什么| 肝不好挂什么科| 什么是干燥综合症| 做造影对身体有什么伤害| 五行金代表什么| 婴儿什么时候会说话| 子宫内膜薄吃什么| 快照是什么意思| 梦见抱小女孩是什么意思| 春占生女是什么意思| 乙肝表面抗体定量偏高什么意思| 什么的柳枝| 5月2号是什么星座| 看牙挂什么科| 偏印代表什么| 脾虚吃什么中药| 流鼻血是什么病| 热射病是什么| 04年的猴是什么命| 病机是什么意思| t是什么火车| eur是什么意思| 一 什么云| 小狗不能吃什么| 帕金森是什么| 脂肪肝是什么病| a和ab型生的孩子是什么血型| 一个虫一个夫念什么| 肌酐高吃什么药好| 搞基是什么意思| 骁字五行属什么| 咬牙齿是什么原因| 红枣和什么不能一起吃| 月全食是什么意思| 首级是什么意思| 金益什么字| 鸽子不能和什么一起吃| 手指甲没有月牙是什么原因| 有什么好吃的| 从容面对是什么意思| 肚脐眼上面痛是什么原因引起的| 肌肉拉伤挂什么科| 血透是什么意思| 冯巩什么军衔| 淋巴结节吃什么药最好| 老年人手抖是什么原因| 心里想的话用什么标点符号| a02是什么牌子| 抽血后头晕是什么原因| 行尸走肉是什么意思| 测智力去医院挂什么科| 202年属什么生肖| 看腋臭挂什么科| 压疮用什么药最快能好| 什么是三级片| 梅花开在什么季节| 红花跟藏红花有什么区别| 冢字的意思是什么| 肝早期硬化身体有什么症状| 八月初十是什么星座| 鞭炮笋学名叫什么| 射频消融术是什么手术| 肠子疼是什么原因| 排尿困难是什么原因| 惹上官司是犯了什么煞| 小猫踩奶是什么意思| 腰椎间盘突出什么症状| 相亲第一次见面送什么礼物好| 无事不登三宝殿什么意思| lcc是什么意思| 脚疼挂什么科| 碘酊和碘伏有什么区别| 草字头的字和什么有关| 胸闷气短呼吸困难心慌是什么原因| 依山傍水是什么意思| 上梁山是什么意思| 什么是结缔组织病| 胸痛是什么原因导致的| 左下眼皮跳是什么预兆| 肝郁脾虚吃什么药效果最好| w3是什么意思| 浅表性胃炎吃什么药| 牛剖层皮革是什么意思| 肥皂是什么做的| 痣为什么会越来越多| 985大学是什么意思| 水瓶座的幸运色是什么颜色| 巨蟹什么象星座| 打嗝医学术语是什么| 食物中毒吃什么| 什么菜降血压| 痛包是什么| 新生儿头发稀少是什么原因| 他叫什么名字| 女生安全期是什么时候| 间接是什么意思| 神昏谵语是什么意思| 脚气用什么| 承欢膝下是什么意思| 马跟什么相冲| 肾结石吃什么水果| 头皮结痂抠掉又结痂是什么病| 吃什么让月经量增多| 何辅堂是什么电视剧| bambi什么意思| 咳嗽属于什么科室| 牛肉和什么蔬菜搭配好| 虎女配什么生肖最好| 肝实质回声欠均匀是什么意思| 毛囊长什么样子| 什么人不能吃海带| 春天的花开秋天的风是什么歌| 吃什么能安神助睡眠| 太虚幻境是什么意思| 伏案什么意思| 高粱是什么粮食| 怀孕前三个月忌吃什么| 雾化后为什么要漱口| 2000年属什么的| 硅胶是什么材料| al是什么| 阳虚吃什么中成药| 沙和尚是什么动物变的| 咳嗽痰中带血是什么原因| 眼睛充血用什么眼药水最好| 生蛇是什么原因引起的| 为什么人要喝水| 肝郁化火是什么意思| alike是什么意思| 手抖是什么原因导致的| 33朵玫瑰花代表什么意思| 什么节吃饺子| ms什么意思| 房颤吃什么药效果最好| 阿司匹林治什么病| 避孕套玻尿酸的作用是什么| 为什么睡觉流口水很臭| style什么意思| 肠胃不好吃什么药效果好| 五月初五是什么星座| 血脂高可以吃什么水果| 什么炖鸡好吃| hbv是什么病毒| 专科医院是什么意思| 法国铁塔叫什么名字| 酚咖片是什么药| 代沟是什么意思| 喝酒拉肚子是什么原因| 豁出去了什么意思| 标准偏差是什么意思| 千里走单骑是什么意思| 子宫内膜增厚是什么原因| 女人小便带血是什么原因引起的| 大姨妈是黑色是什么原因| 肋骨骨折什么症状| 雌二醇是什么意思| 孙悟空姓什么| 经常干咳嗽是什么原因| 前列腺特异性抗原是什么意思| 什么东西吃了壮阳| 6月5日是什么日| 男士脸黑用什么能美白| 爱慕内衣什么档次| 16588a是什么尺码女装| 什么牌子的山地车好骑又不贵| 尿粘液丝高是什么原因| 81是什么意思| 大便干硬是什么原因| 337是什么意思| boy是什么牌子| 银杏叶像什么| 赤小豆和红豆有什么区别| 降压药什么时候吃比较好| invent是什么意思| cpk是什么意思| 腱鞘炎用什么药最好| c是什么单位| 现代是什么时候| 蓝莓有什么功效与作用| 甜菜根是什么| 两毛四是什么军衔| 手脱皮吃什么维生素| 怀孕什么时候有反应| 男女更年期分别在什么年龄| cea检查是什么意思| 玉五行属性是什么| 总是很困想睡觉是什么原因| 霉菌感染男性什么症状| 阴霾是什么意思| 小米什么时候成熟| 碎片化是什么意思| 牙刷属于什么垃圾| 欧巴桑是什么意思| 偏光镜片是什么意思| 涤纶是什么布料| 六度万行 是什么意思| 宫腔积液吃什么药效果最好| 人流后可以吃什么水果| 什么贵人能治孤辰寡宿| 磁共振平扫检查什么| 袋鼠属于什么类动物| 吃什么可以增加免疫力| 剑桥英语和新概念英语有什么区别| loreal是什么品牌| 家里进黄鼠狼是什么预兆| score是什么意思| 肝囊肿是什么原因引起的| 河豚吃什么| b型血阳性是什么意思| 经常腰酸是什么原因女性| 癫痫是什么原因引起的| 青龙男是什么意思| 女人肾虚吃什么好得快| 随意是什么意思| 什么的温度| 飞机不能带什么东西| 俄罗斯是什么国家| 梦到生儿子有什么预兆| msms筛查是什么意思| 什么叫红颜知己| 鸡粉是什么| 烤冷面的面皮是什么面| 拿的起放的下是什么意思| 门前的小树已成年是什么歌| 不时之需是什么意思| 血脂高吃什么食物最好| 嗓子发干是什么原因| 8岁属什么| 酸汤鱼用什么鱼| 车加昆念什么| 什么药可以降尿酸| 集分宝是什么意思| 心脏下面是什么器官| 拉肚子吃什么药最有效| hepes缓冲液是什么| 头爱出汗是什么原因| 百度Saltar para o conteúdo

非洲向共同市场迈出关键一步

Wikisource, a biblioteca livre
Documenta??o do módulo[ver] [editar] [histórico] [purgar]
百度 最新例证是,地球上仅存的一头雄性北方白犀牛19日在肯尼亚离世。

This module implements the {{category handler}} template. The category handler template helps other templates to automate both categorization and category suppression. For information about using the category handler template in other templates, please see the template documentation. Keep reading for information about using the category handler module in other Lua modules, or for information on exporting this module to other wikis.

Use from other Lua modules

[editar]

When not to use this module

[editar]

For cases where a module only needs to categorise in one of the namespaces main (articles), file (images) or category, then using this module is overkill. Instead, you can simply get a title object using mw.title.getCurrentTitle and check the nsText field. For example:

local title = mw.title.getCurrentTitle()
if title.nsText == 'File' then
    -- do something
end

However, if your module needs to categorize in any other namespace, then we recommend you use this module, since it provides proper category suppression and makes it easy to select how to categorize in the different namespaces.

Namespaces

[editar]

This module detects and groups all the different namespaces used on Wikipedia into several types. These types are used as parameter names in this module.

List of possible namespace parameters

(excluding talk and other)

Namespace Aliases
main
utilizador user, usuário, usuária, usuário(a), utilizador(a), utilizadora
wikisource project, ws
ficheiro file, imagem, arquivo, image
mediawiki
predefini??o template
ajuda help
categoria category
portal
autor author
galeria index
página page
em tradu??o em_tradu??o
anexo
timedtext
módulo module
translations

Basic usage

[editar]

This module takes two or more parameters. Here's an example using a hello world program:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local result = 'Hello world!'
    local category = categoryHandler{
        '[[Category:Somecat]]',
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end
 
return p

The above example uses the default settings for the category handler module. That means the example module will categorize on pages in the following namespaces:

main, file, help, category, portal and book

But it will not categorize in any other namespaces, e.g.:

talk, user, wikipedia, mediawiki, template ...

And it will not categorize on blacklisted pages. (See section blacklist below.)

The reason the category handler module does not categorize in some of the namespaces is that in those namespaces most modules and templates are just demonstrated or listed, not used. Thus most modules and templates should not categorize in those namespaces.

Any module or template that is meant for one or more of the namespaces where this module categorizes can use the basic syntax as shown above.

Advanced usage

[editar]

This module takes one or more parameters named after the different page types as listed in section namespaces above. By using those parameters you can specify exactly in which namespaces your template should categorize. Like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local result = 'This is a module meant for articles and talk pages.'
    local category = categoryHandler{
        main = '[[Category:Somecat1]]', -- Categorize in main (article) space
        talk = '[[Category:Somecat2]]', -- Categorize in talk space
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end
 
return p

The above module will only categorize in main and talk space. But it will not categorize on /archive pages since they are blacklisted. (See section blacklist below.) And if you need to demonstrate (discuss) the module on a talkpage, then you can feed "nocat='true'" to prevent that template from categorizing. (See section nocat below.) Like this:

== My new module ==
Hey guys, have you seen my new module?
{{#invoke:mymodule|main|nocat=true}}
Nice, isn't it?
--~~~~

Sometimes we want to use the same category in several namespaces, then do like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local result = 'This is a module used in several namespaces.'
    local category = categoryHandler{
        main = '[[Category:Somecat1]]',
        [ 1 ] = '[[Category:Somecat2]]', -- For help and user space
        help = 1,
        user = 1,
        talk = '', -- No categories on talk pages
        other = '[[Category:Somecat3]]', -- For all other namespaces
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end
 
return p

In the above example we use a numbered parameter to feed one of the categories, and then we tell this module to use that numbered parameter for both the help and user space.

The category handler module understands an unlimited number of numbered parameters.

The other parameter defines what should be used in the remaining namespaces that have not explicitly been fed data.

Note the empty but defined talk parameter. That stops this module from showing what has been fed to the other parameter, when in talk space.

The category handler module also has a parameter called all. It works like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local result = 'This is a module used in all namespaces.'
    local category = categoryHandler{
        all = '[[Category:Somecat1]]', -- Categorize in all namespaces
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end
 
return p

The above example will categorize in all namespaces, but not on blacklisted pages. If you want to demonstrate that module on a page, then use "nocat=true" to prevent the template from categorizing.

We suggest avoiding the all parameter, since modules and templates should preferably only categorize in the namespaces they need to.

The all parameter can also be combined with the rest of the parameters. Like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local result = 'This is a module used in all namespaces.'
    local category = categoryHandler{
        all = '[[Category:Somecat1]]', -- Categorize in all namespaces
        main = '[[Category:Somecat2]]', -- And add this in main space
        other = '[[Category:Somecat3]]', -- And add this in all other namespaces
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end
 
return p

If the above module is placed on an article, then it will add the categories "Somecat1" and "Somecat2". But on all other types of pages it will instead add "Somecat1" and "Somecat3". As the example shows, the all parameter works independently of the rest of the parameters.

Subpages

[editar]

The category handler module understands the subpage parameter. Like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local result = 'This is a module used in all namespaces.'
    local category = categoryHandler{
        subpage = 'no' -- Don't categorize on subpages
        wikipedia = '[[Category:Somecat]]',
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end
 
return p

If "subpage='no'" then this template will not categorize on subpages. For the rare occasion you only want to categorize on subpages, then use "subpage='only'". If subpage is empty or undefined then this template categorizes both on basepages and on subpages.

Blacklist

[editar]

This module has a blacklist of the pages and page types where templates should not auto-categorize. Thus modules that use this meta-template will for instance not categorize on /archive pages and on the subpages of w:en:Wikipedia:Template messages.

If you want a template to categorize on a blacklisted page, then feed "nocat = false" to the module when you place it on the page, thus skipping the blacklist check. Note that this module only categorizes if it has data for the namespace. For instance, if the basic syntax is used (see basic usage above), then even if you set "nocat = false" the template will not categorize on a talk page, since it has no data for talk pages. But it has data for help space, so on a blacklisted help page it will categorize.

The blacklist is located in the configuration table cfg.blacklist near the top of the module code.

The "nocat" parameter

[editar]

This module understands the nocat parameter:

  • If "nocat = true" then this template does not categorize.
  • If nocat is nil then this template categorizes as usual.
  • If "nocat = false" this template categorizes even when on blacklisted pages. (See section blacklist above.)
  • The nocat parameter also accepts aliases for true and false as defined by Module:Yesno, e.g. "yes", "y", "true", and 1 for true, and "no", "n", "false", and 0 for false.

Modules and templates that use {{category handler}} should forward nocat, so they too understand nocat. The code "nocat = frame.args.nocat" shown in the examples on this page does that.

The "categories" parameter

[editar]

For backwards compatibility this module also understands the categories parameter. It works the same as nocat. Like this:

  • If "categories = false" then this template does not categorize.
  • If categories is empty or undefined then this template categorizes as usual.
  • If "categories = true" this template categorizes even when on blacklisted pages.
  • The categories parameter also accepts aliases for true and false as defined by Module:Yesno, e.g. "yes", "y", "true", and 1 for true, and "no", "n", "false", and 0 for false.

The "category2" parameter

[editar]

For backwards compatibility this template kind of supports the old "category =" parameter. But the parameter name "category" is already used in this module to feed category data for when in category space. So instead this template uses category2 for the usage similar to nocat. Like this:

  • If "category2 = "" (empty but defined), or "category2 = 'no'", or if category2 is fed any other data (except as described in the next two points), then this template does not categorize.
  • If category2 is undefined or if "category2 = '?'", then this template categorizes as usual.
  • If "category2 = 'yes'" this template categorizes even when on blacklisted pages.

Categories and text

[editar]

Besides from categories, you can feed anything else to this module, for instance some text. Like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main

function p.main( frame )
    local result = 'This is a module used on talk pages.'
    local category = categoryHandler{
        talk = '[[Category:Somecat]]',
        other = '<p class="error">This module should only be used on talk pages.</p>',
        nocat = frame.args.nocat -- So "nocat=true/false" works
    }
    category = category or '' -- Check that we don't have a nil value for the category variable.
    return result .. category
end

return p

When the module code above is used on anything other than a talk page, it will look like this:

This is a module used on talk pages.

This module should only be used on talk pages.

That text will not show on blacklisted pages, so don't use this method to show any important information. Feeding "nocat = 'true'" to the template hides the text, just as it suppresses any categories.

The "page" parameter

[editar]

For testing and demonstration purposes this module can take a parameter named page. Like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main
 
function p.main( frame )
    local category = categoryHandler{
        main = 'Category:Some cat',
        talk = 'Category:Talk cat',
        nocat = frame.args.nocat, -- So "nocat=true/false" works
        page = 'User talk:Example'
    }
    return category
end
 
return p

In the above code we on purpose left out the brackets around the category names so we see the output on the page. No matter on what kind of page the code above is used it will return this:

Category:Talk cat

The page parameter makes this module behave exactly as if on that page. Even the blacklist works. The pagename doesn't have to be an existing page.

If the page parameter is empty or undefined, the name of the current page determines the result.

You can make it so your module also understands the page parameter. That means you can test how your template will categorize on different pages, without having to actually edit those pages. Then do like this:

p = {}
local categoryHandler = require( 'Module:Category handler' ).main

function p.main( frame )
    local category = categoryHandler{
        main = 'Category:Some cat',
        talk = 'Category:Talk cat',
        nocat = frame.args.nocat, -- So "nocat=true/false" works
        page = frame.args.page -- For testing
    }
    return category
end

return p

Parameters

[editar]

List of all parameters:

  • First positional parameter - for default settings
  • subpage = 'no' / 'only'
  • 1, 2, 3 ...
  • all = '[[Category:Somecat]]' / 'Text'
  • main = 1, 2, 3 ... / '[[Category:Somecat]]' / 'Text'
  • ...
  • other = 1, 2, 3 ... / '[[Category:Somecat]]' / 'Text'
  • nocat = frame.args.nocat / true / false / 'yes' / 'no' / 'y' / 'n' / 'true' / 'false' / 1 / 0
  • categories = frame.args.categories / false / true / 'no' / 'yes' / 'n' / 'y' / 'false' / 'true' / 0 / 1
  • category2 = frame.args.category or '?' / 'no' / 'not defined' / '?' / 'yes'
  • page = frame.args.page / 'User:Example'

Note that empty values to the "main" ... "other" parameters have special meaning (see examples above). The "all" parameter doesn't understand numbered parameters, since there should never be a need for that.

Exporting to other wikis

[editar]

This module can be exported to other wikis by changing the configuration values in the cfg table. All the variable values are configurable, so after the configuration values have been set there should be no need to alter the main module code. Details of each configuration value are included in the module code comments. In addition, this module requires Module:Namespace detect to be available on the local wiki.

--------------------------------------------------------------------------------
--                                                                            --
--                              CATEGORY HANDLER                              --
--                                                                            --
--      This module implements the {{category handler}} 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. This module requires [[Module:Namespace detect]]      --
--      and [[Module:Yesno]] to be available on the local wiki. It can be     --
--      configured for different wikis by altering the values in              --
--      [[Module:Category handler/config]], and pages can be blacklisted      --
--      from categorisation by using [[Module:Category handler/blacklist]].   --
--                                                                            --
--------------------------------------------------------------------------------

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

-- Lazily load things we don't always need
local mShared, mappings

local p = {}

--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------

local function trimWhitespace(s, removeBlanks)
	if type(s) ~= 'string' then
		return s
	end
	s = s:match('^%s*(.-)%s*$')
	if removeBlanks then
		if s ~= '' then
			return s
		else
			return nil
		end
	else
		return s
	end
end

--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------

local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler

function CategoryHandler.new(data, args)
	local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
	
	-- Set the title object
	do
		local pagename = obj:parameter('demopage')
		local success, titleObj
		if pagename then
			success, titleObj = pcall(mw.title.new, pagename)
		end
		if success and titleObj then
			obj.title = titleObj
			if titleObj == mw.title.getCurrentTitle() then
				obj._usesCurrentTitle = true
			end
		else
			obj.title = mw.title.getCurrentTitle()
			obj._usesCurrentTitle = true
		end
	end

	-- Set suppression parameter values
	for _, key in ipairs{'nocat', 'categories'} do
		local value = obj:parameter(key)
		value = trimWhitespace(value, true)
		obj['_' .. key] = yesno(value)
	end
	do
		local subpage = obj:parameter('subpage')
		local category2 = obj:parameter('category2')
		if type(subpage) == 'string' then
			subpage = mw.ustring.lower(subpage)
		end
		if type(category2) == 'string' then
			subpage = mw.ustring.lower(category2)
		end
		obj._subpage = trimWhitespace(subpage, true)
		obj._category2 = trimWhitespace(category2) -- don't remove blank values
	end
	return obj
end

function CategoryHandler:parameter(key)
	local parameterNames = self._data.parameters[key]
	local pntype = type(parameterNames)
	if pntype == 'string' or pntype == 'number' then
		return self._args[parameterNames]
	elseif pntype == 'table' then
		for _, name in ipairs(parameterNames) do
			local value = self._args[name]
			if value ~= nil then
				return value
			end
		end
		return nil
	else
		error(string.format(
			'invalid config key "%s"',
			tostring(key)
		), 2)
	end
end

function CategoryHandler:isSuppressedByArguments()
	return
		-- See if a category suppression argument has been set.
		self._nocat == true
		or self._categories == false
		or (
			self._category2
			and self._category2 ~= self._data.category2Yes
			and self._category2 ~= self._data.category2Negative
		)

		-- Check whether we are on a subpage, and see if categories are
		-- suppressed based on our subpage status.
		or self._subpage == self._data.subpageNo and self.title.isSubpage
		or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end

function CategoryHandler:shouldSkipBlacklistCheck()
	-- Check whether the category suppression arguments indicate we
	-- should skip the blacklist check.
	return self._nocat == false
		or self._categories == true
		or self._category2 == self._data.category2Yes
end

function CategoryHandler:matchesBlacklist()
	if self._usesCurrentTitle then
		return self._data.currentTitleMatchesBlacklist
	else
		mShared = mShared or require('Module:Category handler/shared')
		return mShared.matchesBlacklist(
			self.title.prefixedText,
			mw.loadData('Module:Category handler/blacklist')
		)
	end
end

function CategoryHandler:isSuppressed()
	-- Find if categories are suppressed by either the arguments or by
	-- matching the blacklist.
	return self:isSuppressedByArguments()
		or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end

function CategoryHandler:getNamespaceParameters()
	if self._usesCurrentTitle then
		return self._data.currentTitleNamespaceParameters
	else
		if not mappings then
			mShared = mShared or require('Module:Category handler/shared')
			mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
		end
		return mShared.getNamespaceParameters(
			self.title,
			mappings
		)
	end
end

function CategoryHandler:namespaceParametersExist()
	-- Find whether any namespace parameters have been specified.
	-- We use the order "all" --> namespace params --> "other" as this is what
	-- the old template did.
	if self:parameter('all') then
		return true
	end
	if not mappings then
		mShared = mShared or require('Module:Category handler/shared')
		mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
	end
	for ns, params in pairs(mappings) do
		for i, param in ipairs(params) do
			if self._args[param] then
				return true
			end
		end
	end
	if self:parameter('other') then
		return true
	end
	return false
end

function CategoryHandler:getCategories()
	local params = self:getNamespaceParameters()
	local nsCategory
	for i, param in ipairs(params) do
		local value = self._args[param]
		if value ~= nil then
			nsCategory = value
			break
		end
	end
	if nsCategory ~= nil or self:namespaceParametersExist() then
		-- Namespace parameters exist - advanced usage.
		if nsCategory == nil then
			nsCategory = self:parameter('other')
		end
		local ret = {self:parameter('all')}
		local numParam = tonumber(nsCategory)
		if numParam and numParam >= 1 and math.floor(numParam) == numParam then
			-- nsCategory is an integer
			ret[#ret + 1] = self._args[numParam]
		else
			ret[#ret + 1] = nsCategory
		end
		if #ret < 1 then
			return nil
		else
			return table.concat(ret)
		end
	elseif self._data.defaultNamespaces[self.title.namespace] then
		-- Namespace parameters don't exist, simple usage.
		return self._args[1]
	end
	return nil
end

--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------

local p = {}

function p._exportClasses()
	-- Used for testing purposes.
	return {
		CategoryHandler = CategoryHandler
	}
end

function p._main(args, data)
	data = data or mw.loadData('Module:Category handler/data')
	local handler = CategoryHandler.new(data, args)
	if handler:isSuppressed() then
		return nil
	end
	return handler:getCategories()
end

function p.main(frame, data)
	data = data or mw.loadData('Module:Category handler/data')
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = data.wrappers,
		valueFunc = function (k, v)
			v = trimWhitespace(v)
			if type(k) == 'number' then
				if v ~= '' then
					return v
				else
					return nil
				end
			else
				return v
			end
		end
	})
	return p._main(args, data)
end

return p
白细胞弱阳性是什么意思 世界7大奇迹是什么 血压什么时候最高 沙漠有什么动物 神经衰弱吃什么药效果最好
nba下个赛季什么时候开始 数不胜数的胜是什么意思 猴和什么相冲 omega什么牌子手表 百香果是什么季节的水果
广西属于什么地区 黄龙玉产地在什么地方 痔疮吃什么药好的快 ds什么意思 声音的传播需要什么
梵高属于什么画派 涅盘是什么意思 什么牌子的燕麦片最好 孕妇什么情况容易早产 推介会是什么意思
感冒鼻塞吃什么药hcv7jop6ns6r.cn 神经是什么东西hcv8jop4ns2r.cn 什么钙片补钙效果最好hcv9jop3ns4r.cn lp是什么意思hcv8jop7ns3r.cn ab面是什么意思hcv9jop5ns5r.cn
五行火生什么克什么hcv7jop9ns2r.cn 打豆豆什么意思hcv9jop2ns3r.cn 甲减是一种什么病hcv8jop5ns7r.cn johnson是什么品牌hcv9jop4ns1r.cn 黑皮肤适合穿什么颜色的衣服hcv8jop0ns4r.cn
journey是什么意思bysq.com 眩晕挂什么科室zhongyiyatai.com 打马虎眼是什么意思hcv9jop2ns7r.cn 宫颈常大是什么意思hcv8jop3ns4r.cn 清华校长什么级别hcv8jop1ns7r.cn
吃什么对胰腺有好处hcv7jop7ns0r.cn 红花跟藏红花有什么区别hcv8jop5ns2r.cn 皮肤黄是什么原因引起的hcv7jop9ns9r.cn 海绵体是什么hcv8jop8ns0r.cn 梦到自己长白头发是什么意思hcv8jop5ns8r.cn
百度