FANDOM


local p = {}
 
local getType = function( namespace, page )
	local pageType = 'template'
	if namespace == 'Module' then
		pageType = 'module'
	elseif page.fullText:find( '%.css$' ) then
		pageType = 'stylesheet'
	elseif page.fullText:find( '%.js$' ) then
		pageType = 'script'
	elseif namespace == 'MediaWiki' then
		pageType = 'message'
	end
 
	return pageType
end
 
-- Creating a documentation page or transclution through {{doc/start}}
To use, create a sub-page from the template called '''doc''', put {{tl|doc/start}} at the start of your documentation, and {{tl|doc/end}} at the end.
 
Go back to your main template page and put <noinclude>{{tl|/doc}}</noinclude> on a newline after the end of the template. /doc pages will automatically be added to [[:Category:Documentation templates]].
 
== Optional parameters ==
=== clear ===
If your main template page has floating content and you would like to stop it going over the documentation, put {{tl|doc/start|clear}} instead of {{tl|doc/start}} on your documentation page.<br />
This is also useful for templates not using &lt;includeonly&gt;, as it will put some space between the template and the documentation box.
 
=== nodoc=1 ===
If a template has no documentation and you don't know how to use it, put {{tl|doc/start|nodoc{{=}}1}} (or if the template needs clear as well, {{tl|doc/start|clear|nodoc{{=}}1}}) instead of {{tl|doc/start}} on your documentation page.<br />
The documentation's background will become red to make it more noticeable, and the page will be added to [[:Category:Templates with no documentation]].
 
=== baddoc=1 ===
Similar to nodoc, this is used to mark templates that '''do''' have documentation, but it isn't very good. This can mean it doesn't have enough examples, doesn't explain all the functions properly, or doesn't explain the point of the template properly.<br />
The documentation's background will become yellow to make it more noticeable, and the page will be added to [[:Category:Templates with bad documentation]].
 
If nodoc and baddoc are specified, baddoc will be ignored.
</div>
 
[[Category:Documentation templates|*]]
function p.create( f )
	local args = require( 'Module:ProcessArgs' ).norm()
	page = mw.title.getCurrentTitle()
	namespace = args.type or page.nsText
	docPage = args.page or namespace .. ':' .. page.baseText .. '/doc'
 
	local out
	if page.fullText == docPage then
		out = f:preprocess( '{{subst:Template:Documentation/preload}}' )
	else
		local templateArgs = {}
		if args.type then
			table.insert( templateArgs, 'type=' .. args.type )
		end
		if args.page then
			table.insert( templateArgs, 'page=' .. args.page )
		end
 
		out = '{{documentation|' .. table.concat( templateArgs, '|' ) .. '}}' ..
			'<!-- Put categories/interwiki on the documentation page -->'
		out = out:gsub( '|}}', '}}' )
	end
 
	if not mw.isSubsting() then
		out = f:preprocess( out )
		if not args.nocat then
			out = out .. '[[Category:Pages with templates requiring substitution]]'
		end
	end
 
	return out
end
 
-- Header on the documentation page
function p.docPage( f )
	local args = require( 'Module:ProcessArgs' ).merge( true )
	local badDoc = args.baddoc
	if f:callParserFunction( '#dplvar', '$doc noheader' ) == '1' then
		if badDoc then
			f:callParserFunction( '#dplvar:set', '$doc bad', '1' )
		end
		return
	end
 
	local page = mw.title.getCurrentTitle()
	local namespace = args.type or page.nsText
	local pageType = getType( namespace, page )
 
	local body = mw.html.create( 'div' )
	body
		:css{
			['margin-bottom'] = '0.8em',
			padding = '0.8em 1em 0.7em',
			['background-color'] = '#' .. ( badDoc and 'F9F2EA' or 'EAF4F9' ),
			border = '1px solid #AAA'
		}
		:tag( 'div' )
			:css( 'float', 'right' )
			:wikitext( '[[', page:fullUrl( 'action=purge' ), ' purge]]' )
		:done()
		:wikitext(
			'This is the documentation page, it ',
			pageType == 'module' and 'will' or 'should',
			' be transcluded into the main ', pageType, ' page. ',
			'See [[Template:Documentation]] for more information'
		)
	if badDoc then
		body:wikitext( "'''This ", pageType, "'s documentation needs improving or additional information.'''" )
	end
	if not args.nocat then
		body:wikitext( '[[Category:Documentation pages]]' )
	end
 
	return body
end
 
-- Wrapper around the documentation on the main page
function p.page( f )
	local args = require( 'Module:ProcessArgs' ).merge( true )
	local page = mw.title.getCurrentTitle()
	local namespace = args.type or page.nsText
	local docPage = mw.title.new( args.page or namespace .. ':' .. page.text .. '/doc' )
	local noDoc = args.nodoc or not docPage.exists
	local badDoc = args.baddoc
	local pageType = getType( namespace, page )
 
	local docText
	if not noDoc then
		f:callParserFunction( '#dplvar:set', '$doc noheader', '1' )
		docText = mw.text.trim( f:expandTemplate{ title = ':' .. docPage.fullText }  )
		if f:callParserFunction( '#dplvar', '$doc bad' ) == '1' then
			badDoc = 1
		end
 
		if docText == '' then
			docText = nil
			noDoc = 1
		else
			docText = '\n' .. docText .. '\n'
		end
	end
 
	local action = 'edit'
	local preload = ''
	local colour = 'EAF4F9'
	local message
	local category
	if noDoc then
		action = 'create'
		preload = '&preload=Template:Documentation/preload'
		colour = 'F9EAEA'
		message = "'''This " .. pageType .. " has no documentation. " ..
			"If you know how to use this " .. pageType .. ", please create it.'''"
		if not args.nocat then
			category = 'Category:' .. pageType .. 's with no documentation'
			if not mw.title.new( category ).exists then
				category = 'Category:Pages with no documentation'
			end
		end
	elseif badDoc then
		colour = 'F9F2EA'
		message = "'''This " .. pageType .. "'s documentation needs improving or additional information.'''\n"
		if not args.nocat then
			category = 'Category:' .. pageType .. 's with bad documentation'
			if not mw.title.new( category ).exists then
				category = 'Category:Pages with bad documentation'
			end
		end
	end
 
	local links = {
		'[' .. docPage:fullUrl( 'action=edit' .. preload ) .. ' ' .. action .. ']',
		'[' .. page:fullUrl( 'action=purge' ) .. ' purge]'
	}
	if not noDoc then
		table.insert( links, 1, '[[' .. docPage.fullText .. '|view]]' )
	end
	links = mw.html.create( 'span' )
		:css( 'float', 'right' )
		:wikitext( mw.text.nowiki( '[' ), table.concat( links, ' | ' ), mw.text.nowiki( ']' ) )
 
	local body = mw.html.create( 'div' )
	body:css{
		['background-color'] = '#' .. colour,
		border = '1px solid #AAA',
		padding = '0.8em 1em 0.7em',
		['margin-top'] = '1em',
		clear = 'both'
	}
 
	local header = mw.html.create( 'div' )
		:css{
			margin = '-0.8em -1em 0.8em',
			padding = '0.8em 1em 0.7em',
			['background-color'] = '#EAF4F9',
			['border-bottom'] = 'inherit'
		}
 
	header
		:node( links )
		:tag( 'span' )
			:css{
				['font-weight'] = 'bold',
				['font-size'] = '130%',
				['margin-right'] = '1em',
				['line-height'] = '1'
			}
			:wikitext( 'Documentation' )
 
	if not noDoc and pageType ~= 'template' and pageType ~= 'message' then
		header
			:tag( 'span' )
				:css( 'white-space', 'nowrap' )
				:wikitext( '[[#the-code|Jump to code ↴]]' )
	end
 
	body
		:node( header ):done()
		:wikitext( message )
		:wikitext( docText )
 
	if not noDoc then
		body
			:tag( 'div' )
				:css{
					margin = '0.7em -1em -0.7em',
					['background-color'] = '#EAF4F9',
					['border-top'] = 'inherit',
					padding = '0.8em 1em 0.7em',
					clear = 'both'
				}
				:node( links )
				:wikitext( 'The above documentation is transcluded from [[', docPage.fullText, ']].' )
	end
 
	if category then
		body:wikitext( '[[', category, ']]' )
	end
 
	local anchor = ''
	if not noDoc and pageType ~= 'template' and pageType ~= 'message' then
		anchor = mw.html.create( 'div' ):attr( 'id', 'the-code' )
	end
 
	return tostring( body ) .. tostring( anchor )
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.