Module:Documentation

local p = {} -- Creating a documentation page or transclution through function p.create( f ) local args = require( 'Module:ProcessArgs' ).norm page = mw.title.getCurrentTitle namespace = args.type or page.nsText docPage = mw.title.new( args.page or namespace .. ':' .. page.baseText .. '/doc' ) local out if page == docPage then out = f:preprocess( '' ) 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 = '\n' out = out:gsub( '|}}', '}}' ) end if not mw.isSubsting then out = f:preprocess( out ) if not args.nocat then out = out .. ''		end end return out end

-- Gateway function to page or docPage functions, depending on if viewing the documentation directly local args local page local namespace local docPage local pageType = 'template' function p.doc( f ) args = require( 'Module:ProcessArgs' ).merge( true ) page = mw.title.getCurrentTitle namespace = args.type or page.nsText docPage = mw.title.new( args.page or namespace .. ':' .. page.baseText .. '/doc' ) 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 if page == docPage then return p.docPage( f ) else return p.page( f ) end end

-- Directly viewing the documentation page function p.docPage( f ) local badDoc = args.baddoc local colour = 'EAF4F9' local message = '' if badDoc then colour = 'F9F2EA' message = "'''This " .. pageType .. "'s documentation needs improving or additional information.'''" end local certainty = 'should' if pageType == 'module' then certainty = 'will' end local out = table.concat( {		'',		' ' .. page:fullUrl( 'action=purge' ) .. ' purge ',			'This is the documentation page, it ' .. certainty .. ' be transcluded into the main ' .. pageType .. ' page. See Template:Documentation for more information. ',			message,		' '	}, '\n' ) return out end

-- Viewing the documentation on the main page function p.page( f ) docPage = mw.title.new( args.page or namespace .. ':' .. page.text .. '/doc' ) local noDoc = args.nodoc or not docPage.exists local badDoc = args.baddoc local docText = '' if not noDoc then docText = docPage:getContent badDoc = docText:match( '^%s*{{[Dd]ocumentation[^}]-|%s-baddoc%s-=%s-1%s-[^}]-}}' ) docText = mw.text.trim( f:preprocess( docText:gsub( '^%s*{{[Dd]ocumentation[^}]-}}', '' ) ) ) if docText == '' then 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 if mw.title.new( 'Category:' .. pageType .. 's with no documentation' ).exists then category = '' else category = '' end end elseif badDoc then colour = 'F9F2EA' message = "'''This " .. pageType .. "'s documentation needs improving or additional information.'''\n" if not args.nocat then if mw.title.new( 'Category:' .. pageType .. 's with bad documentation' ).exists then category = '' else category = '' end end end local links = { '[' .. docPage:fullUrl( 'action=edit' .. preload ) .. ' ' .. action .. ']',		'[' .. page:fullUrl( 'action=purge' ) .. ' purge]' }	local footer = '' if not noDoc then table.insert( links, 1, 'view' ) footer = table.concat( {			'\n',				' ' .. mw.text.nowiki( '[' ) .. table.concat( links, ' | ' ) .. '] \n',				'The above documentation is transcluded from ' .. docPage.fullText .. '. \n',			' \n'		} ) end local out = { ' \n', '\n', ' ' .. mw.text.nowiki( '[' ) .. table.concat( links, ' | ' ) .. '] \n', ' Documentation ', ' \n', message, docText, footer, ' \n', category }	return mw.text.trim( table.concat( out ) ) end return p