Module:Sandbox/BartVaes/Bananas: Difference between revisions
Appearance
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
This module is rated as pre-alpha. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure. |
Usage
{{#invoke:Sandbox/BartVaes/Bananas|hello|args}}
, where args consist of:
- 2 global params:
name=player name type=w (women), m (men)
- Repeating params:
date{x}=fixture date stadium{x}=Stadium city{x}=City country{x}=Country opp{x}=opponent scores{x}=comma-separated list of scores of {player} result{x}=final result comp{x}=Competition page (auto-linked) comp_alt{x}=Alternative text for Competition home{x}=home and away ref{x}=goal reference
TODO Add test cases
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