<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FBartVaes%2FBananas</id>
	<title>Module:Sandbox/BartVaes/Bananas - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FBartVaes%2FBananas"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/BartVaes/Bananas&amp;action=history"/>
	<updated>2026-04-09T23:49:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/BartVaes/Bananas&amp;diff=145185&amp;oldid=prev</id>
		<title>imported&gt;BartVaes: log type</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/BartVaes/Bananas&amp;diff=145185&amp;oldid=prev"/>
		<updated>2022-10-24T13:31:21Z</updated>

		<summary type="html">&lt;p&gt;log type&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Testmodule to generate the international goals by &amp;lt;&amp;lt;player&amp;gt;&amp;gt; in football player articles.&lt;br /&gt;
-- TODO: add references (tags), incl. global ref for whole table&lt;br /&gt;
local p = {}&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p.hello( frame )&lt;br /&gt;
    -- Declare locals&lt;br /&gt;
	local Args = getArgs(frame, {parentFirst = true})&lt;br /&gt;
	local final_result = {}&lt;br /&gt;
	local index = 0&lt;br /&gt;
	local goals_count = 0&lt;br /&gt;
	local entries_list = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Temp check for testcases&lt;br /&gt;
	if (Args[&amp;quot;test&amp;quot;] ~= nil) then&lt;br /&gt;
		return &amp;quot;No parameters found.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Temp check for data groups&lt;br /&gt;
	if (Args[&amp;quot;data5&amp;quot;] ~= nil) then&lt;br /&gt;
		mw.log(&amp;quot;data group = &amp;quot; .. type(Args[&amp;quot;data5&amp;quot;]))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--Get all the entries in nested table, index start at 1&lt;br /&gt;
	while (Args[&amp;quot;date&amp;quot;..index+1] ~= nil) do&lt;br /&gt;
		index = index+1&lt;br /&gt;
		entries_list[index] = {&lt;br /&gt;
			date=Args[&amp;quot;date&amp;quot;..index],&lt;br /&gt;
			stadium=Args[&amp;quot;stadium&amp;quot;..index],&lt;br /&gt;
			city=Args[&amp;quot;city&amp;quot;..index],&lt;br /&gt;
			country=Args[&amp;quot;country&amp;quot;..index],&lt;br /&gt;
			opp=Args[&amp;quot;opp&amp;quot;..index],&lt;br /&gt;
			scores=Args[&amp;quot;scores&amp;quot;..index],&lt;br /&gt;
			result=Args[&amp;quot;result&amp;quot;..index],&lt;br /&gt;
			comp=Args[&amp;quot;comp&amp;quot;..index],&lt;br /&gt;
			comp_alt=Args[&amp;quot;comp_alt&amp;quot;..index],&lt;br /&gt;
			home=Args[&amp;quot;home&amp;quot;..index],&lt;br /&gt;
			ref=Args[&amp;quot;ref&amp;quot;..index],&lt;br /&gt;
			link=Args[&amp;quot;link&amp;quot;..index]&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	mw.logObject(entries_list)&lt;br /&gt;
	&lt;br /&gt;
	--Only 1 header&lt;br /&gt;
	local header = p.get_header(frame, Args)&lt;br /&gt;
	table.insert(final_result, string.format(&amp;quot;%s&amp;quot;, header))&lt;br /&gt;
	&lt;br /&gt;
	--Only 1 type/gender&lt;br /&gt;
	local type = string.lower(Args[&amp;quot;type&amp;quot;])&lt;br /&gt;
	&lt;br /&gt;
	index = 0&lt;br /&gt;
	while (entries_list[index+1] ~= nil) do&lt;br /&gt;
		index = index+1&lt;br /&gt;
		&lt;br /&gt;
		--increment goals&lt;br /&gt;
    	goals_count = goals_count + 1&lt;br /&gt;
		&lt;br /&gt;
		--Add date col&lt;br /&gt;
		local date_col = frame:expandTemplate{ title=&amp;quot;dts&amp;quot;, args = { format=&amp;quot;dmy&amp;quot;, entries_list[index][&amp;quot;date&amp;quot;] } }&lt;br /&gt;
		&lt;br /&gt;
		--Add venue col+check if wikilink format is needed (default yes)&lt;br /&gt;
		local venue_col = p.check_wikilink({&lt;br /&gt;
			link=entries_list[index][&amp;quot;link&amp;quot;],&lt;br /&gt;
			stadium=entries_list[index][&amp;quot;stadium&amp;quot;],&lt;br /&gt;
			city=entries_list[index][&amp;quot;city&amp;quot;],&lt;br /&gt;
			country=entries_list[index][&amp;quot;country&amp;quot;]&lt;br /&gt;
		})&lt;br /&gt;
		&lt;br /&gt;
		--Add opponent col (check type/gender)&lt;br /&gt;
		local opp_col = nil&lt;br /&gt;
		&lt;br /&gt;
		switch(type, { &lt;br /&gt;
        	[&amp;quot;m&amp;quot;] = function()	-- for male team&lt;br /&gt;
				opp_col = frame:expandTemplate{title=&amp;quot;fb&amp;quot;, args = {entries_list[index][&amp;quot;opp&amp;quot;]}}&lt;br /&gt;
			end,&lt;br /&gt;
			[&amp;quot;w&amp;quot;] = function()	-- for female team&lt;br /&gt;
				opp_col = frame:expandTemplate{title=&amp;quot;fbw&amp;quot;, args = {entries_list[index][&amp;quot;opp&amp;quot;]}}&lt;br /&gt;
			end&lt;br /&gt;
			--Possible other options (under-{age} teams if needed)&lt;br /&gt;
			--[&amp;quot;u19&amp;quot;] = function()	-- for case 3&lt;br /&gt;
			--	opp_col = frame:expandTemplate{title=&amp;quot;fb&amp;quot;, args = {19, entries_list[index][&amp;quot;opp&amp;quot;]}}&lt;br /&gt;
			--end,&lt;br /&gt;
			--[&amp;quot;wu21&amp;quot;] = function()	-- for case 3&lt;br /&gt;
			--	opp_col = frame:expandTemplate{title=&amp;quot;fbwu&amp;quot;, args = {21, entries_list[index][&amp;quot;opp&amp;quot;]}}&lt;br /&gt;
			--end&lt;br /&gt;
		})&lt;br /&gt;
		&lt;br /&gt;
		--Add scores -&amp;gt; determines if/how many rowspan is needed&lt;br /&gt;
		local scores = mw.text.split(entries_list[index][&amp;quot;scores&amp;quot;], &amp;quot;,&amp;quot;)&lt;br /&gt;
		local rowspan = #scores&lt;br /&gt;
		&lt;br /&gt;
		--check home/away for scores, default home=yes; format accordingly -&amp;gt; player goals = bold&lt;br /&gt;
		local is_home = yesno(entries_list[index][&amp;quot;home&amp;quot;] or &amp;quot;yes&amp;quot;) and true or false&lt;br /&gt;
		&lt;br /&gt;
		--Add result&lt;br /&gt;
		local result_col = p.format_score(mw.text.split(entries_list[index][&amp;quot;result&amp;quot;], &amp;quot;-&amp;quot;), is_home)&lt;br /&gt;
		&lt;br /&gt;
		--Add competition&lt;br /&gt;
    	local comp_col = nil&lt;br /&gt;
    	if (entries_list[index][&amp;quot;comp_alt&amp;quot;] ~= nil) then&lt;br /&gt;
    		comp_col = string.format(&amp;quot;[[%s|%s]]&amp;quot;, entries_list[index][&amp;quot;comp&amp;quot;], entries_list[index][&amp;quot;comp_alt&amp;quot;])&lt;br /&gt;
    	else&lt;br /&gt;
    		 comp_col = string.format(&amp;quot;[[%s]]&amp;quot;, entries_list[index][&amp;quot;comp&amp;quot;])&lt;br /&gt;
    	end&lt;br /&gt;
    	&lt;br /&gt;
    	--Add references (cite_web)&lt;br /&gt;
    	local ref_col = p.format_ref(frame, entries_list[index][&amp;quot;ref&amp;quot;], index)&lt;br /&gt;
    	&lt;br /&gt;
    	--Put all in rows. If rowspan &amp;gt; 1 means that multiple scorelines have to be &amp;#039;rowspanned&amp;#039;&lt;br /&gt;
    	if (rowspan &amp;gt; 1) then&lt;br /&gt;
    		score_col = p.format_score(mw.text.split(scores[1], &amp;quot;-&amp;quot;), is_home)&lt;br /&gt;
    		&lt;br /&gt;
    		--Treat 1st row as regular single row&lt;br /&gt;
    		local single_row = p.get_single_row({&lt;br /&gt;
    			goals=goals_count,&lt;br /&gt;
    			date=date_col,&lt;br /&gt;
    			venue=venue_col,&lt;br /&gt;
    			oppo=opp_col,&lt;br /&gt;
    			score=score_col,&lt;br /&gt;
    			result=result_col,&lt;br /&gt;
    			comp=comp_col,&lt;br /&gt;
    			ref=ref_col}, rowspan)&lt;br /&gt;
    		table.insert(final_result, string.format(&amp;quot;\n|-\n%s&amp;quot;, single_row))&lt;br /&gt;
    	&lt;br /&gt;
    		--loop over remaining scores, remove the 1st one&lt;br /&gt;
    		table.remove(scores , 1)&lt;br /&gt;
    		--mw.logObject(scores)&lt;br /&gt;
    	&lt;br /&gt;
    		--Add rest of the rowspanned rows&lt;br /&gt;
	    	for k,v in ipairs(scores) do&lt;br /&gt;
	    		--increment goals count&lt;br /&gt;
	    		goals_count = goals_count + 1&lt;br /&gt;
	    		&lt;br /&gt;
	    		score_col = p.format_score(mw.text.split(v, &amp;quot;-&amp;quot;), is_home)&lt;br /&gt;
	    		local single_row2 = string.format(&amp;quot;|style=&amp;#039;text-align:center;&amp;#039;|%d||style=&amp;#039;text-align:center;&amp;#039;|%s&amp;quot;, goals_count, score_col)&lt;br /&gt;
		    	&lt;br /&gt;
	    		local rows = string.format(&amp;quot;\n|-\n%s&amp;quot;, single_row2)&lt;br /&gt;
	    		table.insert(final_result, rows)&lt;br /&gt;
	    	end&lt;br /&gt;
	    else&lt;br /&gt;
	    	--no rowspan = only 1 score to format&lt;br /&gt;
	    	score_col = p.format_score(mw.text.split(scores[1], &amp;quot;-&amp;quot;), is_home)&lt;br /&gt;
	    	&lt;br /&gt;
	    	--Regular single row&lt;br /&gt;
    		local single = p.get_single_row({&lt;br /&gt;
    			goals=goals_count,&lt;br /&gt;
    			date=date_col,&lt;br /&gt;
    			venue=venue_col,&lt;br /&gt;
    			oppo=opp_col,&lt;br /&gt;
    			score=score_col,&lt;br /&gt;
    			result=result_col,&lt;br /&gt;
    			comp=comp_col,&lt;br /&gt;
    			ref=ref_col})&lt;br /&gt;
    		table.insert(final_result, string.format(&amp;quot;\n|-\n%s&amp;quot;, single))&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(final_result, string.format(&amp;quot;\n|-\n&amp;quot;))&lt;br /&gt;
	table.insert(final_result, string.format(frame:expandTemplate{title=&amp;quot;end&amp;quot;}))&lt;br /&gt;
	--mw.log(&amp;quot;goals=&amp;quot; .. goals_count)&lt;br /&gt;
	mw.logObject(final_result)&lt;br /&gt;
	return table.concat(final_result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get_header( frame, fields )&lt;br /&gt;
	local header = frame:expandTemplate{title=&amp;quot;International goals header&amp;quot;, args = { above=string.format(&amp;quot;List of international goals scored by %s&amp;quot;, fields[&amp;quot;name&amp;quot;]), &lt;br /&gt;
		ref=yesno(fields[&amp;quot;ref1&amp;quot;] or &amp;quot;no&amp;quot;)}}&lt;br /&gt;
	local disclaimer = string.format(&amp;quot;:&amp;#039;&amp;#039;Scores and results list %s&amp;#039;s goal tally first, score column indicates score after each %s goal.&amp;#039;&amp;#039;&amp;quot;, fields[&amp;quot;name&amp;quot;], fields[&amp;quot;name&amp;quot;])&lt;br /&gt;
	return string.format(&amp;quot;%s\n%s&amp;quot;, disclaimer, header)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get single table row, with optional rowspan&lt;br /&gt;
function p.get_single_row( fields, row_span )&lt;br /&gt;
	if (row_span ~= nil) then&lt;br /&gt;
		return string.format(&amp;quot;|style=&amp;#039;text-align:center;&amp;#039;|%d||rowspan=%d|%s||rowspan=%d|%s||rowspan=%d|%s||style=&amp;#039;text-align:center;&amp;#039;|%s||rowspan=%d style=&amp;#039;text-align:center;&amp;#039;|%s||rowspan=%d|%s||rowspan=%d|%s&amp;quot;, &lt;br /&gt;
		fields[&amp;quot;goals&amp;quot;], row_span, fields[&amp;quot;date&amp;quot;], row_span, fields[&amp;quot;venue&amp;quot;], row_span, fields[&amp;quot;oppo&amp;quot;], fields[&amp;quot;score&amp;quot;], row_span, fields[&amp;quot;result&amp;quot;], row_span, fields[&amp;quot;comp&amp;quot;], row_span, fields[&amp;quot;ref&amp;quot;])&lt;br /&gt;
	else&lt;br /&gt;
		return string.format(&amp;quot;|style=&amp;#039;text-align:center;&amp;#039;|%d||%s||%s||%s||style=&amp;#039;text-align:center;&amp;#039;|%s||style=&amp;#039;text-align:center;&amp;#039;|%s||%s||%s&amp;quot;,&lt;br /&gt;
		fields[&amp;quot;goals&amp;quot;], fields[&amp;quot;date&amp;quot;], fields[&amp;quot;venue&amp;quot;], fields[&amp;quot;oppo&amp;quot;], fields[&amp;quot;score&amp;quot;], fields[&amp;quot;result&amp;quot;], fields[&amp;quot;comp&amp;quot;], fields[&amp;quot;ref&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Properly format score/result text (en dash) and inverse away goals&lt;br /&gt;
function p.format_score( scores, is_home )&lt;br /&gt;
	if (is_home) then&lt;br /&gt;
		return string.format(&amp;quot;%s—%s&amp;quot;, scores[1], scores[2])&lt;br /&gt;
	else&lt;br /&gt;
    	return string.format(&amp;quot;%s—%s&amp;quot;, scores[2], scores[1])&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Properly format references&lt;br /&gt;
function p.format_ref( frame, field, index )&lt;br /&gt;
	-- Or: frame:expandTemplate{ title = &amp;#039;efn&amp;#039;, args = { group=&amp;#039;lower-alpha&amp;#039;,  name=note_id, note_local} }&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;quot;refn&amp;quot;, args = { group = &amp;quot;lower-alpha&amp;quot;, name = field..index, field} }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Check if venue text needs to be wikilinked&lt;br /&gt;
function p.check_wikilink( fields )&lt;br /&gt;
	local add_link = yesno(fields[&amp;quot;link&amp;quot;] or &amp;quot;yes&amp;quot;) and true or false&lt;br /&gt;
	if (add_link) then&lt;br /&gt;
		return string.format(&amp;quot;[[%s]], [[%s]], %s&amp;quot;, fields[&amp;quot;stadium&amp;quot;], fields[&amp;quot;city&amp;quot;], fields[&amp;quot;country&amp;quot;])&lt;br /&gt;
	else&lt;br /&gt;
		 return string.format(&amp;quot;%s, %s, %s&amp;quot;, fields[&amp;quot;stadium&amp;quot;], fields[&amp;quot;city&amp;quot;], fields[&amp;quot;country&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Switch/case struct for types&lt;br /&gt;
_G.switch = function(param, case_table)&lt;br /&gt;
    local case = case_table[param]&lt;br /&gt;
    if case then return case() end&lt;br /&gt;
    local def = case_table[&amp;#039;default&amp;#039;]&lt;br /&gt;
    return def and def() or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;BartVaes</name></author>
	</entry>
</feed>