Difference between revisions of "Module:Documentation"

From Minetest Wiki
Jump to navigation Jump to search
m
m
Line 8: Line 8:
 
     local contentParam = args['content']
 
     local contentParam = args['content']
 
     local linkBoxParam = args['link box']
 
     local linkBoxParam = args['link box']
     local currentTitle, docPageName, docPageTitle
+
     local currentTitle = mw.title.getCurrentTitle()
    if not contentParam then
+
    local docPageName = args[1] or ((args['page'] or currentTitle.fullText) .. '/doc')
        currentTitle = mw.title.getCurrentTitle()
+
    local docPageTitle = mw.title.new(docPageName)
        docPageName = args[1] or ((args['page'] or currentTitle.fullText) .. '/doc')
 
        docPageTitle = mw.title.new(docPageName) -- Expensive
 
    end
 
  
 
     local root = HtmlBuilder.create()
 
     local root = HtmlBuilder.create()
Line 46: Line 43:
 
             end
 
             end
  
             if docPageTitle and docPageTitle.exists then
+
             if docPageTitle.exists then
 
                 format = '[%s] [%s] [%s] [%s]'
 
                 format = '[%s] [%s] [%s] [%s]'
 
                 local viewLink = '[[:' .. docPageName .. '|' .. args['view-link-display'] .. ']]'
 
                 local viewLink = '[[:' .. docPageName .. '|' .. args['view-link-display'] .. ']]'
Line 62: Line 59:
 
     -- Transclude doc contents
 
     -- Transclude doc contents
 
     local content = contentParam
 
     local content = contentParam
     if not content and docPageTitle and docPageTitle.exists then
+
     if not content and docPageTitle.exists then
 
         content = frame:expandTemplate{title = ':' .. docPageName}
 
         content = frame:expandTemplate{title = ':' .. docPageName}
 
     end
 
     end
Line 74: Line 71:
 
     clear:css('clear', 'both')
 
     clear:css('clear', 'both')
  
     if not contentParam and linkBoxParam ~= 'off' and docPageTitle and docPageTitle.exists then
+
     if not contentParam and linkBoxParam ~= 'off' and docPageTitle.exists then
 
         local endBox = root:tag('div')
 
         local endBox = root:tag('div')
 
         endBox:addClass('plainlinks')
 
         endBox:addClass('plainlinks')

Revision as of 05:47, 10 May 2017

local p = {}

local HtmlBuilder = require('Module:HtmlBuilder') local makeInvokeFunc = require('Module:Arguments').makeInvokeFunc

function p._main(frame, args)

   local headingParam = args['heading']
   local contentParam = args['content']
   local linkBoxParam = args['link box']
   local currentTitle = mw.title.getCurrentTitle()
   local docPageName = args[1] or ((args['page'] or currentTitle.fullText) .. '/doc')
   local docPageTitle = mw.title.new(docPageName)
   local root = HtmlBuilder.create()
   local startBox = root:tag('div')
   startBox:cssText('clear: both; margin: 1em 0 0 0; border: 1px solid #aaa; background-color: #ecfcf4; padding: 12px')
   -- Add heading if non-empty
   if headingParam ~=  then
       local headingDiv = startBox:tag('div')
       headingDiv:cssText('padding-bottom: 3px; border-bottom: 1px solid #aaa; margin-bottom: 1ex')
       local headingSpan = headingDiv:tag('span')
       headingSpan:cssText('font-weight: bold; font-size: 125%')
       if headingParam then
           headingSpan:wikitext(headingParam)
       else
           headingSpan:wikitext('Documentation icon.png ' .. args['default-heading'])
       end
       -- Add action links if doc is not on template page
       if not contentParam then
           local actionsSpan = headingDiv:tag('span')
           actionsSpan:addClass('plainlinks')
           actionsSpan:cssText('font-size: small; font-weight: 400; margin-left: 1em; vertical-align: baseline; line-height: 1em; display: inline-block')
           local function escapeBrackets(s)
               -- Replace brackets with HTML entities
               s = s:gsub('%[', '[')
               s = s:gsub('%]', ']')
               return s
           end
           if docPageTitle.exists then
               format = '[%s] [%s] [%s] [%s]'
               local viewLink = '' .. args['view-link-display'] .. ''
               local editLink = '[' .. docPageTitle:fullUrl{action = 'edit'} .. ' ' .. args['edit-link-display'] .. ']'
               local historyLink = '[' .. docPageTitle:fullUrl{action = 'history'} .. ' ' .. args['history-link-display'] .. ']'
               local purgeLink = '[' .. currentTitle:fullUrl{action = 'purge'} .. ' ' .. args['purge-link-display'] .. ']'
               actionsSpan:wikitext(mw.ustring.format(escapeBrackets('[%s] [%s] [%s] [%s]'), viewLink, editLink, historyLink, purgeLink))
           else
               local createLink = '[' .. docPageTitle:fullUrl{action = 'edit'} .. ' ' .. args['create-link-display'] .. ']'
               actionsSpan:wikitext(mw.ustring.format(escapeBrackets('[%s]'), createLink))
           end
       end
   end
   -- Transclude doc contents
   local content = contentParam
   if not content and docPageTitle.exists then
       content = frame:expandTemplate{title = ':' .. docPageName}
   end
   if content then
       -- Add line breaks so headings at start and end are interpreted correctly
       startBox:wikitext('\n' .. content .. '\n')
   end
   -- Prevent floating items from sticking out of doc box
   local clear = startBox:tag('div')
   clear:css('clear', 'both')
   if not contentParam and linkBoxParam ~= 'off' and docPageTitle.exists then
       local endBox = root:tag('div')
       endBox:addClass('plainlinks')
       endBox:cssText('clear: both; width: 100%; border: 1px solid #aaa; margin: .2em 0; background-color: #ecfcf4')
       local endBoxNode = endBox:tag('div')
       endBoxNode:cssText('border: none; width: 100%; padding: .25em .9em; font-style: italic')
       if linkBoxParam then
           endBoxNode:wikitext(linkBoxParam)
       else
           endBoxNode:wikitext(mw.ustring.format(args['transcluded-from-blurb'], '' .. docPageName .. ''), ' ')
           local editUrl = docPageTitle:fullUrl{action = 'edit'}
           local historyUrl = docPageTitle:fullUrl{action = 'history'}
           local actionsNode = endBoxNode:tag('small')
           actionsNode:cssText('font-style: normal')
           actionsNode:wikitext('([', editUrl, ' ' .. args['edit-link-display'] .. '] | [', historyUrl, ' ' .. args['history-link-display'] .. '])')
       end
   end
   return tostring(root)

end

p.main = makeInvokeFunc(p._main, {passFrameParam = true, inherited = true})

return p