模块:Main

维基百科,自由的百科全书
跳转至: 导航搜索
文档图示 模块文档[查看] [编辑] [历史] [清除缓存]

This module produces a link to a main article or articles. It implements the {{main}} template. Normally, it produces a link like "Main article: A". If used in the Help:分类 namespace, it produces a link like "The main article for this category is A". It is possible to specify multiple articles, and in this case plural wording is used automatically. If the first link is not an article, the module uses the wording "Main page" instead of "Main article".

Usage from wikitext[编辑]

This module cannot be accessed directly from #invoke. Instead, it can only be used through the {{main}} template. Please see the template page for documentation.

Usage from other Lua modules[编辑]

Load the module:

local mMain = require('Module:Main')

You can then use the _main function like this:

mMain._main(args, options)

The args parameter following options are a list of page link strings; if they use custom display values, each string should be preprocessed into a single piped string (e.g. page|display value). Category or file links are automatically escaped using the Help:冒號技法. If a link includes a section name, and no display value is set, links are automatically formatted as page § section, rather than the MediaWiki default of page#section.

The optional options table can be used to configure the function's output. At present, the only option available is "selfref", which is used when the output is a self-reference to Wikipedia. to set this option, use {selfref = true}. (See the {{selfref}} template for more details on self-references.)

Example 1[编辑]

mMain._main({'A'})

Produces:

<div role="note" class="hatnote relarticle mainarticle">Main article: [[A]]</div>

Displays as:

Example 2[编辑]

mMain._main({'Wikipedia:Categorization', 'Help:Category', 'Category:Wikipedia categories'})

Produces:

<div role="note" class="hatnote relarticle mainarticle">Main pages: [[Wikipedia:頁面分類]], [[Help:分类]] and [[:Category:Wikipedia categories]]</div>

Displays as:

Example 3[编辑]

mMain._main({'A|the letter "A"', 'B|the letter "B"', 'C|the letter "C"'})

Produces:

<div role="note" class="hatnote relarticle mainarticle">Main articles: [[A]], [[B]] and [[C]]</div>

Displays as:

Example 4[编辑]

mMain._main({'Wikipedia:Verifiability#Burden'}, {selfref = true})

Produces:

<div role="note" class="hatnote relarticle mainarticle selfref">Main article: [[Wikipedia:可供查證]]</div>

Displays as:

Example 5 (if used in the category namespace)[编辑]

mMain._main({'A'})

Produces:

<div role="note" class="hatnote relarticle mainarticle">The main article for this [[Wikipedia:頁面分類]] is [[A]]</div>

Displays as:

The main article for this Wikipedia:頁面分類 is A

Technical details[编辑]

This module uses 模块:Hatnote to format the hatnote text, 模块:Hatnote list to process the list of links, and 模块:Arguments to fetch the arguments from wikitext.

--[[
-- This module produces a link to a main article or articles. It implements the
-- template {{main}}.
-- 
-- If the module is used in category or category talk space, it produces "The
-- main article for this category is xxx". Otherwise, it produces
-- "Main article: xxx".
--]]

local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments -- lazily initialise
local p = {}

function p.main(frame)
	mArguments = require('Module:Arguments')
	local args = mArguments.getArgs(frame, {parentOnly = true})
	local pages = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			local display = args['label ' .. k] or args['l' .. k]
			local page = display and
				string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
			pages[#pages + 1] = page
		end
	end
	if #pages == 0 and mw.title.getCurrentTitle().namespace == 0 then
		-- 本地化注意
		return mHatnote.makeWikitextError(
			'没有指定条目名',
			'Template:Main#错误',
			args.category
		)
	end
	local options = {
		selfref = args.selfref
	}
	return p._main(pages, options, frame)
end

function p._main(args, options, frame)
	-- Get the list of pages. If no first page was specified we use the current
	-- page name.
	local currentTitle = mw.title.getCurrentTitle()
	if #args == 0 then args = {currentTitle.text} end
	local firstPage = string.gsub(args[1], '|.*$', '')
	-- Find the pagetype.
	-- 本地化注意
	local pageType = mHatnote.findNamespaceId(firstPage) == 0 and '条目' or '页面'
	-- Make the formatted link text
	list = mHatlist.andList(args, true)
	-- Build the text.
	local isPlural = #args > 1
	local mainForm
	local curNs = currentTitle.namespace
	-- 本地化注意
	if (curNs == 14) or (curNs == 15) then --category/talk namespaces
		mainForm = '此[[Wikipedia:頁面分類|分类]]的主%s是%s'
	else
		mainForm = '主%s:%s'
	end
	local text = string.format(mainForm, pageType, list)
	-- Process the options and pass the text to the _rellink function in
	-- [[Module:Hatnote]].
	--[[options = options or {}
	-- 本地化注意
	local hnOptions = {
		extraclasses = 'noprint relarticle mainarticle', --追加noprint的css类
		selfref = options.selfref
	}
	return mHatnote._hatnote(text, hnOptions)]]
    return frame:expandTemplate{
    	title="rellink",
    	args={text,extraclasses='noprint relarticle mainarticle'}
    } --没想到Hatnote与{{rellink}}实现不同,替代品
end

return p