Jump to content
Toggle menu
  • 8 articles
  • 75 files
  • 7 users
  • 37.8K edits
Neodyland Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:TemplateBox

From Neodyland Wiki
Revision as of 22:11, 23 July 2013 by commons>Rillke (tmp-auto-save)
Module documentation[ create · purge ]
This documentation is transcluded from Module:TemplateBox/doc.
local p = {}

local paraminfo = {
    description = {
        required = true,
        default = '',
        t = 'InterfaceText',
        alias = 'desc'
    },
    params = {
        required = true,
        t = 'map',
        children = {
            label = {
                required = false,
                default = '',
                t = 'InterfaceText'
            },
            required = {
                required = true,
                default = false,
                extract = function() 
                end
            },
            description = {
                required = false,
                default = '',
                t = 'InterfaceText',
                alias = 'd'
            },
            deprecated = {
                required = true,
                default = false,
                extract = function() 
                end
            },
            aliases = {
                required = false,
                default = '',
                extract = function() 
                end
            },
            default = {
                required = false,
                default = '',
                t = 'InterfaceText',
                alias = 'def'
            },
            type = {
                required = false,
                default = 'unknown',
                t = 'selection',
                selection = 'unknown|number|string|string/wiki-user-name|string/wiki-page-name'
            },
            inherits = {
                required = false,
                default = nil,
                t = 'string'
            }
            -- sets will be treated differently because we can only have a plain structure in wikitext
        },
        key = {
            t = 'string',
            alias = '$d',
            childrenpattern = '^%d'
        }
    }
}


-- =p.test({ args={a="b"} })
function p.test(frame)
    local args = frame.args
    local JSON = require('Module:JSON')
    
    return JSON:encode(args)
end

function tobool(st)
    return st == 'true'
end

function p.templatebox(frame)
    local pargs = mw.clone( ( frame:getParent() or {} ).args or {} )
    local tdata = { 
        description = '',
        params = {
        },
        sets = {
        }
    }
    local hasDesc, hasParams = false, false
    local JSON = require('Module:JSON')
    
    for k, v in pairs( pargs ) do
        if type( k ) == 'number' then
            local param = pargs[k .. '-td'] or v
            local label = pargs[k .. '-label-td'] or pargs[k .. '-label']
            local set = pargs[k .. '-set-td'] or pargs[k .. '-set']
            local required = tobool(pargs[k .. '-required-td'] or pargs[k .. '-required'] or (pargs[k .. 'stat'] == 'required'))
            local description = pargs[k .. 'd-td'] or pargs[k .. 'd']
            local deprecated = tobool(pargs[k .. '-deprecated-td'] or pargs[k .. '-deprecated'] or (pargs[k .. 'stat'] == 'deprecated'))
            local aliases = mw.text.split(pargs[k .. 'aliases-td'] or pargs[k .. 'aliases'] or '', '/', true)
            local default = pargs[k .. 'def-td'] or pargs[k .. 'def']
            local ptype = pargs[k .. 'type-td'] or pargs[k .. 'type']
            
            tdata.params[param] = {
                label = label,
                required = required,
                description = description,
                deprecated = deprecated,
                aliases = aliases,
                default = default,
                type = ptype
            }
            
            if set then
                local found = false
                for i, s in ipairs( tdata.sets ) do
                    if s.label == set then
                        table.insert(s.params, param)
                        found = true
                    end
                end
                if not found then
                    table.insert(tdata.sets, {
                        label = set, 
                        params = { param }
                    })
                end
            end
            
            pargs[k] = nil
            pargs[k .. '_td'] = nil
        elseif k:find('^desc$') then
            tdata.description = pargs[k .. '-td'] or v
        end
    end
    
    return JSON:encode(tdata)
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.