欢迎来到奇葩栖息地!欢迎加入Discord服务器:XfrfHCzfbW请先至特殊:参数设置验证邮箱后再进行编辑。特殊:参数设置挑选自己想要使用的小工具!不会编辑?请至这里学习Wikitext语法。

距离淮安市2022年中考还有139天。

模块:Documentation

来自奇葩栖息地
Minecraft Wiki.png
此模块搬运自中文Minecraft Wiki

这些内容依据CC BY-NC-SA 3.0协议引入。经过双方编辑者的修改,此页内容与原页面内容可能有一定出入。

该模块依赖于{{Documentation}}

依赖项

  1local p = {}
  2local defaultDocPage = 'doc'
  3
  4local getType = function( namespace, page )
  5	local pageType = 'template'
  6	if namespace == '模块' then
  7		pageType = 'module'
  8	elseif namespace == 'Widget' then
  9		pageType = 'widget'
 10	elseif page.fullText:gsub( '/' .. defaultDocPage .. '$', '' ):find( '%.css$' ) then
 11		pageType = 'stylesheet'
 12	elseif page.fullText:gsub( '/' .. defaultDocPage .. '$', '' ):find( '%.js$' ) then
 13		pageType = 'script'
 14	elseif namespace == 'MediaWiki' then
 15		pageType = 'message'
 16	end
 17	
 18	return pageType
 19end
 20
 21local getTypeDisplay = function( pageType )
 22	local pageTypeDisplay = '模板'
 23	if pageType == 'module' then
 24		pageTypeDisplay = '模块'
 25	elseif pageType == 'widget' then
 26		pageTypeDisplay = '小工具'
 27	elseif pageType == 'stylesheet' then
 28		pageTypeDisplay = '样式表'
 29	elseif pageType == 'script' then
 30		pageTypeDisplay = '脚本'
 31	elseif pageType == 'message' then
 32		pageTypeDisplay = '界面信息'
 33	end
 34	
 35	return pageTypeDisplay
 36end
 37
 38-- Creating a documentation page or transclution through {{subst:doc}}
 39function p.create( f )
 40	local args = require( 'Module:ProcessArgs' ).norm()
 41	local page = mw.title.getCurrentTitle()
 42	local docPage = args.page or page.nsText .. ':' .. page.baseText .. '/' .. defaultDocPage
 43	
 44	local out
 45	if not args.content and tostring( page ) == docPage then
 46		out = f:preprocess( '{{subst:模板:Documentation/preload}}' )
 47	else
 48		local templateArgs = {}
 49		for _, key in ipairs{ 'type', 'page', 'content' } do
 50			local val = args[key]
 51			if val then
 52				if key == 'content' then val = '\n' .. val .. '\n' end
 53				table.insert( templateArgs, key .. '=' .. val )
 54			end
 55		end
 56		
 57		out = '{{documentation|' .. table.concat( templateArgs, '|' ) .. '}}'
 58		out = out:gsub( '|}}', '}}' )
 59		
 60		if not args.content then
 61			out = out .. '\n<!-- 请将分类/语言链接放在文档页面 -->'
 62		end
 63		out = '<noinclude>'..out..'</noinclude>'
 64	end
 65	
 66	if not mw.isSubsting() then
 67		out = f:preprocess( out )
 68		if not args.nocat then
 69			out = out .. '[[分类:需要替换模板的页面]]'
 70		end
 71	end
 72	
 73	return out
 74end
 75
 76-- Header on the documentation page
 77function p.docPage( f )
 78	local args = require( 'Module:ProcessArgs' ).merge( true )
 79	local badDoc = args.baddoc
 80	if f:callParserFunction( '#dplvar', '$doc noheader' ) == '1' then
 81		if badDoc then
 82			f:callParserFunction( '#dplvar:set', '$doc bad', '1' )
 83		end
 84		return
 85	end
 86	
 87	local page = mw.title.getCurrentTitle()
 88	local namespace = page.nsText
 89	local pageType = mw.ustring.lower( args.type or getType( namespace, page ) )
 90	local pageTypeDisplay = getTypeDisplay( pageType )
 91	
 92	local body = mw.html.create( 'div' )
 93	body
 94		:css{
 95			['margin-bottom'] = '0.8em',
 96			padding = '0.8em 1em 0.7em',
 97		}
 98		:attr( 'class', 'documentation-header documentation-docpage' .. ( badDoc and ' documentation-baddoc' or '' ) )
 99		:tag( 'div' )
100			:css( 'float', 'right' )
101			:wikitext( '[[', page:fullUrl( 'action=purge' ), ' 清除缓存]]' )
102		:done()
103		:wikitext(
104			'这是文档页面,它',
105			pageType == 'module' and '将' or '应该',
106			'被放置到[[', namespace, ':',page.baseText,
107			']],查看[[模板:Documentation]]以获取更多信息。'
108		)
109	if badDoc then
110		body:wikitext( "<br>'''此", pageTypeDisplay, "的文档页面需要改进或添加附加的信息。'''" )
111	end
112	if not ( args.nocat or namespace == 'User' ) then
113		body:wikitext( '[[分类:文档页面]]' )
114	end
115	
116	return body
117end
118
119-- Wrapper around the documentation on the main page
120function p.page( f )
121	-- mw.text.trim uses mw.ustring.gsub, which silently fails on large strings
122	local function trim( s )
123		return string.gsub( s, '^[\t\r\n\f ]*(.-)[\t\r\n\f ]*$', '%1' )
124	end
125	local args = require( 'Module:ProcessArgs' ).merge( true )
126	local page = mw.title.getCurrentTitle()
127	local namespace = page.nsText
128	local docText = trim( args.content or '' )
129	if docText == '' then docText = nil end
130	
131	local docPage
132	local noDoc
133	if docText then
134		docPage = page
135	else
136		docPage = mw.title.new( args.page or namespace .. ':' .. page.text .. '/' .. defaultDocPage )
137		noDoc = args.nodoc or not docPage.exists
138	end
139	local badDoc = args.baddoc
140	local pageType = mw.ustring.lower( args.type or getType( namespace, page ) )
141	local pageTypeDisplay = getTypeDisplay( pageType )
142	
143	if not docText and not noDoc then
144		f:callParserFunction( '#dplvar:set', '$doc noheader', '1' )
145		docText = trim( f:expandTemplate{ title = ':' .. docPage.fullText }  )
146		if f:callParserFunction( '#dplvar', '$doc bad' ) == '1' then
147			badDoc = 1
148		end
149		
150		if docText == '' then
151			docText = nil
152			noDoc = 1
153		end
154	end
155	if docText then
156		docText = '\n' .. docText .. '\n'
157	end
158	
159	local action = '编辑'
160	local preload = ''
161	local classes = ''
162	local message
163	local category
164	if noDoc then
165		action = '创建'
166		preload = '&preload=模板:Documentation/preload'
167		classes = ' documentation-nodoc'
168		message = "'''此" .. pageTypeDisplay .. "没有文档页面。" ..
169			"如果你知道如何使用" .. pageTypeDisplay .. ",请创建它。'''"
170		if not ( args.nocat or namespace == 'User' ) then
171			category = '没有文档的' .. pageTypeDisplay
172			if not mw.title.new( '分类:' .. category ).exists then
173				category = '没有文档的页面'
174			end
175		end
176	elseif badDoc then
177		classes = ' documentation-baddoc'
178		message = "'''此" .. pageTypeDisplay .. "的文档页面需要改进或添加附加信息。'''\n"
179		if not ( args.nocat or namespace == 'User' ) then
180			category = '文档质量较低的' .. pageTypeDisplay
181			if not mw.title.new( '分类:' .. category ).exists then
182				category = '文档质量较低的页面'
183			end
184		end
185	end
186	
187	local links = {
188		'[' .. docPage:fullUrl( 'action=edit' .. preload ) .. ' ' .. action .. ']',
189		'[' .. docPage:fullUrl( 'action=history' ) .. ' 历史]',
190		'[' .. page:fullUrl( 'action=purge' ) .. ' 清除缓存]'
191	}
192	if not noDoc and page ~= docPage then
193		table.insert( links, 1, '[[' .. docPage.fullText .. '|查看]]' )
194	end
195	links = mw.html.create( 'span' )
196		:css( 'float', 'right' )
197		:wikitext( mw.text.nowiki( '[' ), table.concat( links, ' | ' ), mw.text.nowiki( ']' ) )
198	
199	local body = mw.html.create( 'div' )
200	body:css{
201		padding = '0.8em 1em 0.7em',
202		['margin-top'] = '1em'
203	}
204	:attr( 'class', 'documentation' .. classes )
205	
206	local header = mw.html.create( 'div' ):addClass( 'documentation-header' )
207	header:css{
208			margin = '-0.8em -1em 0.8em',
209			padding = '0.8em 1em 0.7em',
210			['border-bottom'] = 'inherit'
211		}
212	
213	header
214		:node( links )
215		:tag( 'span' )
216			:css{
217				['font-weight'] = 'bold',
218				['font-size'] = '130%',
219				['margin-right'] = '1em',
220				['line-height'] = '1'
221			}
222			:wikitext( '文档页面' )
223	
224	if not noDoc and pageType ~= 'template' and pageType ~= 'message' then
225		header
226			:tag( 'span' )
227				:css( 'white-space', 'nowrap' )
228				:wikitext( '[[#the-code|跳转至代码 ↴]]' )
229	end
230	
231	body
232		:node( header ):done()
233		:wikitext( message )
234		:wikitext( docText )
235	
236	if not noDoc and page ~= docPage then
237		body
238			:tag( 'div' )
239				:addClass( 'documentation-footer' )
240				:css{
241					margin = '0.7em -1em -0.7em',
242					['border-top'] = 'inherit',
243					padding = '0.8em 1em 0.7em',
244					clear = 'both'
245				}
246				:node( links )
247				:wikitext( '上述文档是从[[', docPage.fullText, ']]引用的。' )
248	end
249	
250	if category then
251		body:wikitext( '[[分类:', category, ']]' )
252	end
253	
254	local anchor = ''
255	if not noDoc and pageType ~= 'template' and pageType ~= 'message' then
256		anchor = mw.html.create( 'div' ):attr( 'id', 'the-code' )
257	end
258	
259	return tostring( body ) .. tostring( anchor )
260end
261
262return p