Jump to content

Module:Sandbox/BartVaes/Bananas: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m counterr
m output
Line 18: Line 18:
comp=Args["comp"..index], ref=Args["ref"..index]}
comp=Args["comp"..index], ref=Args["ref"..index]}
end
end
mw.logObject(entries_list)
--mw.logObject(entries_list)
--Only 1 header
--Only 1 header
Line 94: Line 94:
table.insert(final_result, string.format("\n|-\n%s", single))
table.insert(final_result, string.format("\n|-\n%s", single))
--mw.logObject(final_result)
--mw.logObject(final_result)
--return tostring(final_result[1] .. final_result[2])
end
end
end
end
Line 102: Line 101:
mw.log("final result size=" .. #final_result)
mw.log("final result size=" .. #final_result)
mw.logObject(final_result)
mw.logObject(final_result)
return table.concat(final_result)
return tostring(final_result[1] .. final_result[2] .. final_result[3] .. final_result[4] .. final_result[5] .. final_result[6] .. final_result[7]) --fixme
end
end



Revision as of 20:47, 8 October 2022

local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')

function p.hello( frame )
    -- Declare locals
	local Args = getArgs(frame, {parentFirst = true})
	local final_result = {}
	local index = 0
	local goals_count = 0
	local entries_list = {}
	
	--Get and group all the dates/entries in nested table, index start at 1
	--TODO format date to YYYYMMDD ?
	while (Args["date"..index+1] ~= nil) do
		index = index+1
		entries_list[index] = {date=Args["date"..index], venue=Args["venue"..index], opp=Args["opp"..index], scores=Args["scores"..index], result=Args["result"..index],
			comp=Args["comp"..index], ref=Args["ref"..index]}
	end
	--mw.logObject(entries_list)
	
	--Only 1 header
	local header = p.get_header(frame, Args)
	table.insert(final_result, string.format("%s%s", header, "\n|-\n"))
	
	--Only 1 type/gender
	local type = string.lower(Args["type"])
	
	index = 0
	while (entries_list[index+1] ~= nil) do
		index = index+1
		
		--increment goals
    	goals_count = goals_count + 1
    	mw.log("goals=" .. goals_count)
		
		--Add date col
		local date_col = frame:expandTemplate{title="dts", args = {entries_list[index]["date"]} }
		
		--Add venue col
		local venue_col = string.format("[[%s]]", entries_list[index]["venue"])
		
		--Add opponent col (check type/gender)
		local opp_col = nil
    	if (type == "w") then
    		opp_col = frame:expandTemplate{title="fbw", args = {entries_list[index]["opp"]}}
    	else 
    		opp_col = frame:expandTemplate{title="fb", args = {entries_list[index]["opp"]}}
    	end
		
		--Add scores -> check if rowspan is needed
		local scores = mw.text.split(entries_list[index]["scores"], ",")
		local rowspan = #scores
		mw.log("rowspan=" .. rowspan)
		local score_col = p.format_score(mw.text.split(scores[1], "-"), is_home) --At least 1 is mandatory
		--check home/away for scores, default home=yes
		local is_home = yesno(entries_list[index]["home"] or "yes") and true or false
		
		--Add result
		local result_col = entries_list[index]["result"]
		
		--Add competition
    	local comp_col = string.format("[[%s]]", entries_list[index]["comp"])
    	
    	--Add references (cite_web)
    	local ref_col = entries_list[index]["ref"]
    	
    	--Put all in rows. If rowspan > 1 means that multiple scorelines have to be 'rowspanned'
    	if (rowspan > 1) then
    		--Treat 1st row as regular single row
    		local single_row = p.get_single_row_span({goals=goals_count, date=date_col, venue=venue_col, oppo=opp_col, score=score_col, result=result_col, comp=comp_col, ref=ref_col}, rowspan)
    		table.insert(final_result, single_row)
    	
    		--loop over remaining scores, remove the 1st one
    		table.remove(scores , 1)
    		mw.logObject(scores)
    	
	    	for k,v in ipairs(scores) do
	    		--increment goals
	    		goals_count = goals_count + 1
	    		mw.log("goals=" .. goals_count)
	    		
	    		score_col = p.format_score(mw.text.split(v, "-"), is_home)
	    		local single_row2 = string.format("|style='text-align:center;'|%d||style='text-align:center;'|%s", goals_count, score_col)
		    	
	    		local rows = string.format("\n|-\n%s", single_row2)
	    		table.insert(final_result, rows)
	    	end
	    else
	    	mw.log("goals=" .. goals_count)
	    	
	    	--Regular single row
    		local single = p.get_single_row({goals=goals_count, date=date_col, venue=venue_col, oppo=opp_col, score=score_col, result=result_col, comp=comp_col, ref=ref_col})
    		table.insert(final_result, string.format("\n|-\n%s", single))
    		--mw.logObject(final_result)
	    end
	end
	table.insert(final_result, string.format("\n|-\n"))
	table.insert(final_result, string.format(frame:expandTemplate{title="end"}))
	mw.log("goals=" .. goals_count)
	mw.log("final result size=" .. #final_result)
	mw.logObject(final_result)
	return table.concat(final_result)
end

function p.get_header( frame, this_args )
	return frame:expandTemplate{title="International goals header", args = { above=string.format("List of international goals scored by %s", this_args["name"]), 
		ref=yesno(this_args["ref1"] or "no")}}
end

function p.get_single_row( fields )
	return string.format("|style='text-align:center;'|%d||%s||%s||%s||style='text-align:center;'|%s||style='text-align:center;'|%s||%s||%s",
		fields["goals"], fields["date"],fields["venue"],fields["oppo"],fields["score"],fields["result"],fields["comp"],fields["ref"])
end

function p.get_single_row_span( fields, row_span )
	--hardcoded for now
	return string.format("|style='text-align:center;'|%d||rowspan=%d|%s||rowspan=%d|%s||rowspan=%d|%s||style='text-align:center;'|%s||rowspan=%d style='text-align:center;'|%s||rowspan=%d|%s||rowspan=%d|%s", 
		fields["goals"] ,row_span, fields["date"], row_span, fields["venue"], row_span, fields["oppo"], fields["score"], row_span, fields["result"], row_span, fields["comp"], row_span, fields["ref"])
end

function p.format_score( scores, is_home )
	if is_home then
		return string.format("'''%s'''-%s", scores[1], scores[2])
	else
    	return string.format("%s-'''%s'''", scores[1], scores[2])
    end
end

return p