Module:Documentation: Difference between revisions
Jump to navigation
Jump to search
m (120 revisions imported from w:Module:Documentation: Attempting, per request from User:Titodutta. I'm not sure if "w" is the right source wiki (only a few options in drop-down menu)) |
Minecraft Wiki>KnightMiner (Changed the categories "No/bad doc" and "Doc page" to not be added on user pages, as the former should only be changed by the owner (making the categoryuseless), and the latter is not very relevant to the category anyways) |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local getType = function( namespace, page ) | |||
local | local pageType = 'template' | ||
if namespace == 'Module' then | |||
pageType = 'module' | |||
elseif page.fullText:gsub( '/doc$', '' ):find( '%.css$' ) then | |||
pageType = 'stylesheet' | |||
elseif page.fullText:gsub( '/doc$', '' ):find( '%.js$' ) then | |||
pageType = 'script' | |||
elseif namespace == 'MediaWiki' then | |||
pageType = 'message' | |||
end | end | ||
return pageType | |||
return | |||
end | end | ||
p. | -- Creating a documentation page or transclution through {{subst:doc}} | ||
function p.create( f ) | |||
local | local args = require( 'Module:ProcessArgs' ).norm() | ||
if | local page = mw.title.getCurrentTitle() | ||
local docPage = args.page or page.nsText .. ':' .. page.baseText .. '/doc' | |||
local out | |||
if not args.content and tostring( page ) == docPage then | |||
out = f:preprocess( '{{subst:Template:Documentation/preload}}' ) | |||
else | else | ||
local templateArgs = {} | |||
for _, key in ipairs{ 'type', 'page', 'content' } do | |||
local val = args[key] | |||
if val then | |||
if key == 'content' then val = '\n' .. val .. '\n' end | |||
table.insert( templateArgs, key .. '=' .. val ) | |||
local | |||
end | end | ||
end | end | ||
out = '{{documentation|' .. table.concat( templateArgs, '|' ) .. '}}' | |||
out = out:gsub( '|}}', '}}' ) | |||
if not args.content then | |||
out = out .. '\n<!-- Put categories/interwiki on the documentation page -->' | |||
end | end | ||
end | 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 | ||
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' ) | |||
if | |||
end | end | ||
return | return | ||
end | end | ||
local page = mw.title.getCurrentTitle() | |||
--[[ | local namespace = page.nsText | ||
local pageType = mw.ustring.lower( args.type or 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( "<br>'''This ", pageType, "'s documentation needs improving or additional information.'''" ) | |||
end | end | ||
if not ( args.nocat or namespace == 'User' ) then | |||
body:wikitext( '[[Category:Documentation pages]]' ) | |||
end | 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 = page.nsText | |||
local docText = mw.text.trim( args.content or '' ) | |||
if docText == '' then docText = nil end | |||
local docPage | |||
local noDoc | |||
if docText then | |||
docPage = page | |||
else | |||
docPage = mw.title.new( args.page or namespace .. ':' .. page.text .. '/doc' ) | |||
noDoc = args.nodoc or not docPage.exists | |||
end | end | ||
local badDoc = args.baddoc | |||
local pageType = mw.ustring.lower( args.type or getType( namespace, page ) ) | |||
if not docText and 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 | end | ||
if docText == '' then | |||
docText = nil | |||
noDoc = 1 | |||
end | end | ||
end | end | ||
if docText then | |||
docText = '\n' .. docText .. '\n' | |||
end | end | ||
local action = 'edit' | |||
local preload = '' | |||
local colour = 'EAF4F9' | |||
local | local message | ||
local | local category | ||
if | 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 or namespace == 'User' ) then | |||
category = 'Category:' .. pageType .. 's with no documentation' | |||
if not mw.title.new( category ).exists then | |||
category = 'Category:Pages with no documentation' | |||
end | |||
end | end | ||
elseif badDoc then | |||
colour = 'F9F2EA' | |||
message = "'''This " .. pageType .. "'s documentation needs improving or additional information.'''\n" | |||
if not ( args.nocat or namespace == 'User' ) 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 | ||
end | end | ||
local | local links = { | ||
'[' .. docPage:fullUrl( 'action=edit' .. preload ) .. ' ' .. action .. ']', | |||
'[' .. page:fullUrl( 'action=purge' ) .. ' purge]' | |||
} | |||
if not noDoc and page ~= docPage then | |||
table.insert( links, 1, '[[' .. docPage.fullText .. '|view]]' ) | |||
end | 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 | end | ||
body | |||
:node( header ):done() | |||
:wikitext( message ) | |||
:wikitext( docText ) | |||
if not noDoc and page ~= docPage 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 | end | ||
if category then | |||
body:wikitext( '[[', category, ']]' ) | |||
if | |||
end | end | ||
local anchor = '' | |||
if not noDoc and pageType ~= 'template' and pageType ~= 'message' then | |||
anchor = mw.html.create( 'div' ):attr( 'id', 'the-code' ) | |||
if not | |||
end | end | ||
return tostring( body ) .. tostring( anchor ) | |||
end | end | ||
return p | return p |
Revision as of 22:17, March 8, 2015
Documentation for this module may be created at Module:Documentation/doc
Script error: Lua error: Internal error: The interpreter exited with status 127.
local p = {}
local getType = function( namespace, page )
local pageType = 'template'
if namespace == 'Module' then
pageType = 'module'
elseif page.fullText:gsub( '/doc$', '' ):find( '%.css$' ) then
pageType = 'stylesheet'
elseif page.fullText:gsub( '/doc$', '' ):find( '%.js$' ) then
pageType = 'script'
elseif namespace == 'MediaWiki' then
pageType = 'message'
end
return pageType
end
-- Creating a documentation page or transclution through {{subst:doc}}
function p.create( f )
local args = require( 'Module:ProcessArgs' ).norm()
local page = mw.title.getCurrentTitle()
local docPage = args.page or page.nsText .. ':' .. page.baseText .. '/doc'
local out
if not args.content and tostring( page ) == docPage then
out = f:preprocess( '{{subst:Template:Documentation/preload}}' )
else
local templateArgs = {}
for _, key in ipairs{ 'type', 'page', 'content' } do
local val = args[key]
if val then
if key == 'content' then val = '\n' .. val .. '\n' end
table.insert( templateArgs, key .. '=' .. val )
end
end
out = '{{documentation|' .. table.concat( templateArgs, '|' ) .. '}}'
out = out:gsub( '|}}', '}}' )
if not args.content then
out = out .. '\n<!-- Put categories/interwiki on the documentation page -->'
end
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 = page.nsText
local pageType = mw.ustring.lower( args.type or 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( "<br>'''This ", pageType, "'s documentation needs improving or additional information.'''" )
end
if not ( args.nocat or namespace == 'User' ) 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 = page.nsText
local docText = mw.text.trim( args.content or '' )
if docText == '' then docText = nil end
local docPage
local noDoc
if docText then
docPage = page
else
docPage = mw.title.new( args.page or namespace .. ':' .. page.text .. '/doc' )
noDoc = args.nodoc or not docPage.exists
end
local badDoc = args.baddoc
local pageType = mw.ustring.lower( args.type or getType( namespace, page ) )
if not docText and 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
end
end
if docText then
docText = '\n' .. docText .. '\n'
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 or namespace == 'User' ) 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 or namespace == 'User' ) 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 and page ~= docPage 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 and page ~= docPage 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