<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ATemplate_parameter_doc</id>
	<title>Module:Template parameter doc - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ATemplate_parameter_doc"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Template_parameter_doc&amp;action=history"/>
	<updated>2026-06-21T11:08:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Template_parameter_doc&amp;diff=479734&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Template_parameter_doc&amp;diff=479734&amp;oldid=prev"/>
		<updated>2021-07-16T07:35:36Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p={};&lt;br /&gt;
&lt;br /&gt;
wikitable_open = '{| class=&amp;quot;wikitable&amp;quot;\n|-\n';&lt;br /&gt;
wikitable_caption = '|+$1\n';&lt;br /&gt;
wikitable_header = '! name !! description !! aliases !! type !! condition\n|-\n';&lt;br /&gt;
wikitable_row = '| $1 || $2 || $3 || $4 || $5\n|-\n';&lt;br /&gt;
wikitable_close = '|}\n';&lt;br /&gt;
&lt;br /&gt;
json_open = '{\n&amp;quot;description&amp;quot;: &amp;quot;$1&amp;quot;,\n';				-- $1=ve-description&lt;br /&gt;
json_params_open = '&amp;quot;params&amp;quot;:\n {';&lt;br /&gt;
json_name_label = '\n &amp;quot;$1&amp;quot;:\n  {\n  &amp;quot;label&amp;quot;: &amp;quot;$2&amp;quot;';		-- $1=name, $2=ve-label&lt;br /&gt;
json_description = '\n  &amp;quot;description&amp;quot;: &amp;quot;$1&amp;quot;';			-- $1=ve-description&lt;br /&gt;
json_aliases = '\n  &amp;quot;aliases&amp;quot;: [$1]';					-- $1= list of aliases &amp;quot;alias1&amp;quot;, &amp;quot;alias2&amp;quot;, &amp;quot;alias3&amp;quot;  note: no trailing comma&lt;br /&gt;
json_type = '\n  &amp;quot;type&amp;quot;: &amp;quot;$1&amp;quot;';							-- $1=type&lt;br /&gt;
json_required = '\n  &amp;quot;required&amp;quot;: true';					-- not included if |required= is empty, missing, or set to anything but true&lt;br /&gt;
json_suggested = '\n  &amp;quot;suggested&amp;quot;: true';					-- not included if |required=true; or |suggested= is empty, missing, or set to anything but true&lt;br /&gt;
json_params_close = '\n  }';&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; I S _ S E T &amp;gt;------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Whether variable is set or not&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
function is_set( var )&lt;br /&gt;
	return not (var == nil or var == '');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; S U B S T I T U T E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Populates numbered arguments in a message string using an argument table.&lt;br /&gt;
 &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function substitute( msg, args )&lt;br /&gt;
	return args and mw.message.newRawMessage( msg, args ):plain() or msg;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; B U I L D _ R O W &amp;gt;------------------------------------------------------------&lt;br /&gt;
This function extracts information from a postional parameter (the content of {{Template parameter doc item}} after it has been rendered)&lt;br /&gt;
and creates a wikitable row from it.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function build_row (raw_row)&lt;br /&gt;
	local alias;&lt;br /&gt;
	local alias_string = '&amp;lt;div class=&amp;quot;plainlist&amp;quot;&amp;gt;';&lt;br /&gt;
	local i = 1;&lt;br /&gt;
	local row;&lt;br /&gt;
	local condition;&lt;br /&gt;
	&lt;br /&gt;
	if 'true' == mw.ustring.match (raw_row, '├required┼([^┤]+)┤') then&lt;br /&gt;
		condition = 'required';&lt;br /&gt;
	elseif 'true' == mw.ustring.match (raw_row, '├suggested┼([^┤]+)┤') then&lt;br /&gt;
		condition = 'suggested';&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	while i &amp;lt;= 9 do&lt;br /&gt;
		alias = mw.ustring.match (raw_row, '├alias'.. i .. '┼([^┤]+)┤')&lt;br /&gt;
		if is_set (alias) then&lt;br /&gt;
			alias_string = alias_string .. '\n*' .. alias;&lt;br /&gt;
		else&lt;br /&gt;
			alias_string = alias_string .. '&amp;lt;/div&amp;gt;\n';&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	row = substitute (wikitable_row,&lt;br /&gt;
		{&lt;br /&gt;
		mw.ustring.match (raw_row, '├name┼([^┤]+)┤'),&lt;br /&gt;
		mw.ustring.match (raw_row, '├description┼([^┤]+)┤'),&lt;br /&gt;
		alias_string,&lt;br /&gt;
		mw.ustring.match (raw_row, '├type┼([^┤]+)┤'),&lt;br /&gt;
		condition&lt;br /&gt;
		});&lt;br /&gt;
	&lt;br /&gt;
	return row;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; B U I L D _ W I K I T A B L E &amp;gt;------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function build_wikitable (args)&lt;br /&gt;
	local header = wikitable_open;&lt;br /&gt;
	local row_string = '';&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		if type( k ) ~= 'string' then&lt;br /&gt;
			row_string = row_string .. build_row (v);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat ({header, substitute (wikitable_caption, {args['title']}), wikitable_header, row_string, wikitable_close});&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; B U I L D _ J S O N _ P A R A M &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function build_json_param (raw_row)&lt;br /&gt;
local param ={};&lt;br /&gt;
local alias_table = {};&lt;br /&gt;
local alias;&lt;br /&gt;
local i = 1;&lt;br /&gt;
&lt;br /&gt;
	while i &amp;lt;= 9 do&lt;br /&gt;
		alias = mw.ustring.match (raw_row, '├alias'.. i .. '┼([^┤]+)┤')&lt;br /&gt;
		if is_set (alias) then&lt;br /&gt;
			table.insert (alias_table, '&amp;quot;' .. alias .. '&amp;quot;');&lt;br /&gt;
		else&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	alias = table.concat (alias_table, ',');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	table.insert (param,  substitute (json_name_label, {mw.ustring.match (raw_row, '├name┼([^┤]+)┤'), mw.ustring.match (raw_row, '├ve%-label┼([^┤]+)┤')}));&lt;br /&gt;
	table.insert (param,  substitute (json_description, {mw.ustring.match (raw_row, '├ve%-description┼([^┤]+)┤')}));&lt;br /&gt;
	if is_set (alias) then&lt;br /&gt;
		table.insert (param, substitute (json_aliases, alias));&lt;br /&gt;
	end&lt;br /&gt;
	table.insert (param,  substitute (json_type, {mw.ustring.match (raw_row, '├type┼([^┤]+)┤')}));&lt;br /&gt;
&lt;br /&gt;
	if 'true' == mw.ustring.match (raw_row, '├required┼([^┤]+)┤') then&lt;br /&gt;
		table.insert (param,  json_required);&lt;br /&gt;
	elseif 'true' == mw.ustring.match (raw_row, '├suggested┼([^┤]+)┤') then&lt;br /&gt;
		table.insert (param,  json_suggested);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat (param, ',') .. json_params_close;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; B U I L D _ J S O N _ D A T A &amp;gt;------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function build_json_data (args)&lt;br /&gt;
	local json_data ={};&lt;br /&gt;
	local json_params ={};&lt;br /&gt;
	&lt;br /&gt;
	table.insert (json_data, substitute (json_open, {args['ve-description']}));&lt;br /&gt;
	table.insert (json_data, json_params_open);&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		if type( k ) ~= 'string' then&lt;br /&gt;
			table.insert (json_params, build_json_param (v));&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat ({table.concat (json_data), table.concat (json_params, ',')}) .. '\n }\n}';&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; M A I N &amp;gt;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local pframe = frame:getParent()&lt;br /&gt;
	local args = {};&lt;br /&gt;
	local wikitable;&lt;br /&gt;
	local json_data = 'JSON data placeholder';&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs( pframe.args ) do&lt;br /&gt;
		args[k] = v;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	wikitable = build_wikitable (args);&lt;br /&gt;
	json_data = build_json_data (args);&lt;br /&gt;
	return table.concat ({wikitable, '==Template data==\n&amp;lt;templatedata&amp;gt;', json_data, '&amp;lt;/templatedata&amp;gt;'}, '\n');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--	return frame:extensionTag{ name = 'templatedata', content = table.concat ({wikitable, '==Template data==\n&amp;lt;templatedata&amp;gt;', json_data, '&amp;lt;/templatedata&amp;gt;'}, '\n')}; this doesn't work&lt;br /&gt;
-- because its a single tag thing so the table and extra tag bugger it up&lt;br /&gt;
--	return frame:extensionTag{ name = 'templatedata', content = json_data};	-- this works to display a rendered templatedata table only&lt;br /&gt;
--	return frame:preprocess( table.concat ({wikitable, '==Template data==\n&amp;lt;templatedata&amp;gt;', json_data, '&amp;lt;/templatedata&amp;gt;'}, '\n'));  -- this works&lt;br /&gt;
end&lt;br /&gt;
		&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>