Module:Template parameter doc

local p={};

wikitable_open = '{| class="wikitable"\n|-\n'; wikitable_caption = '|+$1\n'; wikitable_header = '! name !! description !! aliases !! type !! condition\n|-\n'; wikitable_row = '| $1 || $2 || $3 || $4 || $5\n|-\n'; wikitable_close = '|}\n';

json_open = '{\n"description": "$1",\n';				-- $1=ve-description json_params_open = '"params":\n {'; json_name_label = '\n "$1":\n {\n  "label": "$2"';		-- $1=name, $2=ve-label json_description = '\n "description": "$1"';			-- $1=ve-description json_aliases = '\n "aliases": [$1]';					-- $1= list of aliases "alias1", "alias2", "alias3"  note: no trailing comma json_type = '\n "type": "$1"';							-- $1=type json_required = '\n "required": true';					-- not included if |required= is empty, missing, or set to anything but true json_suggested = '\n "suggested": true';					-- not included if |required=true; or |suggested= is empty, missing, or set to anything but true json_params_close = '\n }';

--[[-&#x3c; I S _ S E T &#x3e;--

Whether variable is set or not

]] function is_set( var ) return not (var == nil or var == ''); end

--[[-&#x3c; S U B S T I T U T E &#x3e;--

Populates numbered arguments in a message string using an argument table. ]]

function substitute( msg, args ) return args and mw.message.newRawMessage( msg, args ):plain or msg; end

---&

function build_row (raw_row) local alias; local alias_string = '&#x3c;div class="plainlist"&#x3e;'; local i = 1; local row; local condition; if 'true' == mw.ustring.match (raw_row, '├required┼([^┤]+)┤') then condition = 'required'; elseif 'true' == mw.ustring.match (raw_row, '├suggested┼([^┤]+)┤') then condition = 'suggested'; end

while i &#x3c;= 9 do alias = mw.ustring.match (raw_row, '├alias'.. i .. '┼([^┤]+)┤') if is_set (alias) then alias_string = alias_string .. '\n*' .. alias; else alias_string = alias_string .. '&#x3c;/div&#x3e;\n'; break; end i = i + 1; end

row = substitute (wikitable_row,		{		mw.ustring.match (raw_row, '├name┼([^┤]+)┤'),		mw.ustring.match (raw_row, '├description┼([^┤]+)┤'),		alias_string,		mw.ustring.match (raw_row, '├type┼([^┤]+)┤'),		condition		}); return row; end

--[[-&#x3c; B U I L D _ W I K I T A B L E &#x3e;

]]

function build_wikitable (args) local header = wikitable_open; local row_string = ''; for k, v in pairs( args ) do		if type( k ) ~= 'string' then row_string = row_string .. build_row (v); end end

return table.concat ({header, substitute (wikitable_caption, {args['title']}), wikitable_header, row_string, wikitable_close}); end

--[[-&#x3c; B U I L D _ J S O N _ P A R A M &#x3e;--

]]

function build_json_param (raw_row) local param ={}; local alias_table = {}; local alias; local i = 1;

while i &#x3c;= 9 do alias = mw.ustring.match (raw_row, '├alias'.. i .. '┼([^┤]+)┤') if is_set (alias) then table.insert (alias_table, '"' .. alias .. '"'); else break; end i = i + 1; end

alias = table.concat (alias_table, ',');

table.insert (param, substitute (json_name_label, {mw.ustring.match (raw_row, '├name┼([^┤]+)┤'), mw.ustring.match (raw_row, '├ve%-label┼([^┤]+)┤')})); table.insert (param, substitute (json_description, {mw.ustring.match (raw_row, '├ve%-description┼([^┤]+)┤')})); if is_set (alias) then table.insert (param, substitute (json_aliases, alias)); end table.insert (param, substitute (json_type, {mw.ustring.match (raw_row, '├type┼([^┤]+)┤')}));

if 'true' == mw.ustring.match (raw_row, '├required┼([^┤]+)┤') then table.insert (param, json_required); elseif 'true' == mw.ustring.match (raw_row, '├suggested┼([^┤]+)┤') then table.insert (param, json_suggested); end

return table.concat (param, ',') .. json_params_close; end

--[[-&#x3c; B U I L D _ J S O N _ D A T A &#x3e;

]]

function build_json_data (args) local json_data ={}; local json_params ={}; table.insert (json_data, substitute (json_open, {args['ve-description']})); table.insert (json_data, json_params_open);

for k, v in pairs( args ) do		if type( k ) ~= 'string' then table.insert (json_params, build_json_param (v)); end end

return table.concat ({table.concat (json_data), table.concat (json_params, ',')}) .. '\n }\n}'; end

--[[-&#x3c; M A I N &#x3e;--

]] function p.main(frame) local pframe = frame:getParent local args = {}; local wikitable; local json_data = 'JSON data placeholder'; for k, v in pairs( pframe.args ) do		args[k] = v;	end wikitable = build_wikitable (args); json_data = build_json_data (args); return table.concat ({wikitable, '==Template data==\n&#x3c;templatedata&#x3e;', json_data, '&#x3c;/templatedata&#x3e;'}, '\n');

--	return frame:extensionTag{ name = 'templatedata', content = table.concat ({wikitable, '==Template data==\n&#x3c;templatedata&#x3e;', json_data, '&#x3c;/templatedata&#x3e;'}, '\n')}; this doesn't work -- because its a single tag thing so the table and extra tag bugger it up --	return frame:extensionTag{ name = 'templatedata', content = json_data};	-- this works to display a rendered templatedata table only --	return frame:preprocess( table.concat ({wikitable, '==Template data==\n&#x3c;templatedata&#x3e;', json_data, '&#x3c;/templatedata&#x3e;'}, '\n')); -- this works end return p;