Modul:Sports series: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
opsi tabel rata tengah
penambahan fitur catatan pada agregat dan skor
 
(1 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 14:
end
 
-- Function to process country codes and variants OR youth team flag templates and age level, dividing parameters by the "+" sign
local function processIcon(iconString)
if not iconString or iconString:match("^%s*$") then
Baris 181:
-- Function to check if any parameter in a given row is non-nil and non-empty
local function anyParameterPresent(startIndex, step, args)
-- Check regular parameters
for index = startIndex, startIndex + step - 1 do
if args[index] and args[index]:match("^%s*(.-)%s*$") ~= "" then
Baris 186 ⟶ 187:
end
end
return false
-- Check aggregate note
end
local rowIndex = math.floor((startIndex - 1) / step) + 1
local aggNote = args['note_agg_' .. rowIndex]
if aggNote and aggNote:match("^%s*(.-)%s*$") ~= "" then
return true
end
 
-- Check leg notes
-- Function to add a legend to below the table when isFBRStyle is true
local numLegs = step - (noFlagIcons and 3 or 5) -- Calculate number of legs
local function createFBRLegend()
for leg = 1, numLegs do
return mw.html.create('div')
local legNote = args['note_leg' .. leg .. '_' .. rowIndex]
:css('font-size', '90%')
if legNote and legNote:match("^%s*(.-)%s*$") ~= "" then
:css('margin-bottom', '0.5em')
return true
:wikitext("Legenda: Biru = tim kandang menang; Kuning = imbang; Merah = tim tandang menang.")
end
end
 
return false
end
 
Baris 243 ⟶ 253:
end
 
-- Function to format the dashes and winning notes for aggregate/leg score parameters, and divide the score from references/notes/superscripts
local function format_scoreformat_and_extract_score(s, noWrapdoWrap)
if not s then return '', '' end -- Return empty stringstrings if input is nil
local function format_dash(pattern)
Baris 261 ⟶ 271:
 
-- Format winning notes in brackets
if noWrapdoWrap and not (s:match("%(.*%(")) then
s = mw.ustring.gsub(s, '(%(%d+%s*–%s*%d+)%s+[Pp]%.?[EeSs]?%.?[NnOo]?%.?%)', '%1 [[Adu penalti|a.p]])')
s = mw.ustring.gsub(s, '%([Aa]%.?[Ee]%.?[Tt]%.?%)', '([[Perpanjangan waktu (sepak bola)|p.w.]])')
Baris 270 ⟶ 280:
s = mw.ustring.gsub(s, '%([Aa]%.?[Gg]?%.?[Rr]?%.?%)', '([[Peraturan gol tandang|p.g.t]])')
 
-- Extract end text
return s
-- Pattern to match superscript
local supStart = s:find('<sup')
-- Pattern to match the unique placeholder
local placeholderStart = s:find('\127%\'"`UNIQ')
 
-- Function to find the first parenthesis outside of wikilinks
local function find_paren_outside_wikilinks(s)
local pos = 1
while true do
pos = s:find('%(', pos)
if not pos then break end
 
-- Check if there are unclosed [[ before this position
local beforeParen = s:sub(1, pos - 1)
local openLinks = 0
for linkStart in beforeParen:gmatch('%[%[') do
openLinks = openLinks + 1
end
for linkEnd in beforeParen:gmatch('%]%]') do
openLinks = openLinks - 1
end
 
-- If there are no unclosed links, this is a valid parenthesis
if openLinks == 0 then
return pos
end
 
pos = pos + 1
end
return nil
end
 
-- Find the first parenthesis outside of wikilinks
local parenStart = find_paren_outside_wikilinks(s)
 
-- Store all start positions in a table
local startPositions = {}
if supStart then table.insert(startPositions, supStart) end
if placeholderStart then table.insert(startPositions, placeholderStart) end
if parenStart then table.insert(startPositions, parenStart) end
 
local startPos
if #startPositions > 0 then
startPos = math.min(unpack(startPositions)) -- Find the minimum start position
end
 
if startPos then
-- Find the preceding whitespace
local wsStart = s:find("%s*$", 1, startPos)
 
-- Extract the score and endText
local scoreMatch = s:sub(1, wsStart and wsStart - 1 or startPos - 1)
local endText = s:sub(wsStart or startPos)
 
return scoreMatch, endText
else
-- If no match found, return the entire score
return s, ""
end
end
 
-- Function to rewriteclean anchorteam linksnames ofand matchgenerate scoreslinks
local function rewriteAnchorLinkscleanAndGenerateLinks(textteam1, baselinkteam2, score, isSecondLeg)
local function cleanTeam(str, defaultName)
if not text then
if str and str ~= "" then
return text
str = str:gsub('<sup.->.-</sup>', '')
end
str = str:gsub("</?%w+[^>]*>", "")
return text:gsub('(%[%[)(#[^%[%]]*%|)', '%1' .. baselink .. '%2')
str = str:gsub('\127%\'"`UNIQ.-QINU`"%\'\127', '')
str = str:gsub("%[%[[Ff]ile:[^%]]+%]%]", "")
str = str:gsub("%[%[[Bb]erkas:[^%]]+%]%]", "")
str = str:gsub("%[%[[Ii]mage:[^%]]+%]%]", "")
str = str:gsub("%[%[.-%]%]", replaceLink)
str = str:gsub("%s*&nbsp;%s*", "")
str = str:match("^%s*(.-)%s*$") -- Remove leading and trailing whitespace
return str ~= "" and str or defaultName
end
return defaultName
end
 
team1 = cleanTeam(team1, "Team 1")
team2 = cleanTeam(team2, "Team 2")
 
if score and score:match("%S") then
local linkScore = score
if score:find('%[') then
linkScore = score:match('^([%d%.]+–[%d%.]+)')
if not linkScore then
return score
end
end
 
if linkScore then
local link
if isSecondLeg then
link = "[[#" .. team2 .. " v " .. team1 .. "|" .. linkScore .. "]]"
else
link = "[[#" .. team1 .. " v " .. team2 .. "|" .. linkScore .. "]]"
end
return link .. score:sub(#linkScore + 1)
end
end
 
return score
end
 
-- Function to process notes for aggregate and leg scores
local function processNote(frame, notes, noteKey, noteText, endText, rowIndex, rand_val, noteGroup)
if not noteText then return endText, notes end
if noteText:match("^%s*<sup") or noteText:match("^\127%\'%\"`UNIQ") then
return noteText .. endText, notes
end
 
local function createInlineNote(name)
return frame:extensionTag{
name = 'ref',
args = {
name = name,
group = noteGroup
}
}
end
 
-- Check if noteText is a reference to another note
local referenced_note = noteText:match("^(agg_%d+)$") or noteText:match("^(leg%d+_%d+)$")
if referenced_note then
local referenced_note_id = '"table_note_' .. referenced_note .. '_' .. rand_val .. '"'
return endText .. createInlineNote(referenced_note_id), notes
end
 
local note_id = '"table_note_' .. noteKey .. '_' .. rowIndex .. '_' .. rand_val .. '"'
if not notes[note_id] then
notes[note_id] = noteText
end
 
return endText .. createInlineNote(note_id), notes
end
 
-- Function to generate the footer if necessary
local function createFooter(frame, notes, noteGroup, isFBRStyle, displayNotes, externalNotes, legs)
local needFooter = (isFBRStyle and legs == 0) or displayNotes or (next(notes) ~= nil)
 
if not needFooter then
return '' -- Return an empty string if no footer is needed
end
 
local divContent = mw.html.create('div')
:css('font-size', '90%')
:css('margin-bottom', '0.5em')
 
if isFBRStyle and legs == 0 then
divContent:wikitext("Legend: Blue = home team win; Yellow = draw; Red = away team win.")
end
 
if (next(notes) ~= nil and not externalNotes) or displayNotes then
divContent:wikitext((isFBRStyle and legs == 0) and "<br>Notes:" or "Notes:")
end
 
local footer = tostring(divContent)
 
if next(notes) ~= nil or displayNotes then
local noteDefinitions = {}
for noteId, noteText in pairs(notes) do
if type(noteId) == 'string' and noteId:match('^"table_note') then
table.insert(noteDefinitions, frame:extensionTag{
name = 'ref',
args = {
name = noteId,
group = noteGroup
},
content = noteText
})
end
end
 
if externalNotes then
local hiddenRefs = mw.html.create('span')
:css('display', 'none')
:wikitext(table.concat(noteDefinitions))
if isFBRStyle and legs == 0 then
footer = footer .. tostring(hiddenRefs)
else
footer = tostring(hiddenRefs)
end
else
local reflistArgs = {
refs = table.concat(noteDefinitions),
group = noteGroup
}
footer = footer .. frame:expandTemplate{
title = 'reflist',
args = reflistArgs
}
end
end
 
return footer
end
 
-- Main function that processes input and returns the wikitable
function p.main(frame)
local args = require('Modul:Arguments').getArgs(frame, {trim = true})
-- Check for section transclusion
Baris 294 ⟶ 492:
end
-- Helper function for boolean checks
local function isTrue(value)
if not value then return false end
local lowerValue = value:lower()
return lowerValue == 'y' or lowerValue == 'yes' or lowerValue == '1' or lowerValue == 'true'
end
 
-- Helper function for negative boolean checks
local function isFalse(value)
if not value then return false end
local lowerValue = value:lower()
return lowerValue == 'n' or lowerValue == 'no' or lowerValue == '0' or lowerValue == 'false' or lowerValue == 'null' or lowerValue == 'none'
end
 
local root = mw.html.create()
local matchType = (args.type == 'WNT' or args.type == 'MNT') and 'NT' or (args.type or 'club') -- Set default match type to 'club'
local isWNT = args.type == 'WNT' -- Track if WNT was set
local flagTemplate, flagParam1
local noFlagIcons = false
local fillBlanks = args.fill_blanks and isTrue(args.fill_blanks == 'y' or args.fill_blanks == 'yes' or args.fill_blanks == '1' or args.fill_blanks == 'true')
local generateLinks = isTrue(args.generate_links)
local solidCell = args.solid_cell and (args.solid_cell == 'y' or args.solid_cell == 'yes' or args.solid_cell == '1' or args.solid_cell == 'true' or args.solid_cell == 'grey' or args.solid_cell == 'gray' or args.solid_cell == 'abu-abu')
local solidCell = isTrue(args.solid_cell) or args.solid_cell == 'grey' or args.solid_cell == 'gray' or args.solid_cell == 'abu-abu'
local baselink = frame:getParent():getTitle()
if mw.title.getCurrentTitle().text == baselink then baselink = '' end
local notes = {}
local noteGroup = args.note_group or 'lower-alpha'
local displayNotes = isTrue(args.note_list)
local externalNotes = isFalse(args.note_list)
math.randomseed(os.clock() * 10^8) -- Initialize random number generator
local rand_val = math.random()
-- Process the font size parameter
Baris 313 ⟶ 529:
end
end
-- Calculate the font size for small text
local smallFontSize
if fontSize then
smallFontSize = math.floor(((fontSize / 100) * 0.85) * 100)
else
smallFontSize = 85
end
-- Process flag parameter to determine flag template and variant
iflocal args.flagflagTemplate and= args.flag:find( or '+fbaicon') then -- Default to {{fbaicon}}
local noFlagIcons = isFalse(args.flag)
flagTemplate, flagParam1 = processIcon(args.flag) -- Process flag icons with variants
local flagSize = args.flag_size
else
if flagSize and not if args.flagflagSize:match('px$') then
flagSize = flagSize .. flagTemplate = args.flag'px'
elseif isWNT then
flagTemplate = 'fbw' -- Default to {{fbw}} for WNT matches
elseif matchType == 'NT' then
flagTemplate = 'fb' -- Default to {{fb}} for NT/MNT matches
else
flagTemplate = 'fbaicon' -- Default to {{fbaicon}} for club matches
end
end
 
-- Check if flagTemplate exists and adjust if necessary
if args.flag and (flagTemplate == 'n' or flagTemplate == 'no' or flagTemplate == '0' or flagTemplate == 'false' or flagTemplate == 'null' or flagTemplate == 'none' or flagTemplate == 'noflag') then
if not noFlagIcons and flagTemplate ~= 'fbaicon' then
noFlagIcons = true -- Hide flag icons for club matches
if matchTypenot == 'NT'templateExists(flagTemplate) then
flagTemplate = 'flagicon'
flagTemplate = isWNT and 'fbw' or 'fb' -- Set flagTemplate to "fbw"/"fb", as disabling flags is not allowed for NT
flagParam1 = false
end
end
 
-- Determine whether line should be displayed
-- Check if flagTemplate exists and adjust if necessary
local showCountry = args.show_country
if matchType == 'NT' and (flagTemplate ~= 'fb' and flagTemplate ~= 'fbw') then
local function shouldShowRow(team1Icon, team2Icon)
if not templateExists(flagTemplate) or not templateExists(flagTemplate .. '-rt') then
if not showCountry or noFlagIcons then
flagTemplate = isWNT and 'fbw' or 'fb'
return true
end
end
elseif not noFlagIcons and flagTemplate ~= 'fbaicon' then
return team1Icon == showCountry or team2Icon == showCountry
if not templateExists(flagTemplate) then
flagTemplate = 'fbaicon'
end
end
 
local legs = (isFalse(args.legs == '1') or args.legs == 'n' or args.legs == 'no' or args.legs == 'false' or args.legs == 'null' or args.legs == 'none' or args.legs == 'single' or args.legs == 'one1') and 0 or tonumber(args.legs) or 2
if legs and legs < 0 then
legs = 2
Baris 361 ⟶ 560:
local teamWidth = (tonumber(args['team_width']) and args['team_width'] .. 'px') or '250px'
local scoreWidth = (tonumber(args['score_width']) and args['score_width'] .. 'px') or '80px'
local boldWinner = not isFalse(args.bold_winner == 'n' or args.bold_winner == 'no' or args.bold_winner == '0' or args.bold_winner == 'false' or args.bold_winner == 'null')
local colorWinner = args.color_winner and isTrue(args.color_winner == 'y' or args.color_winner == 'yes' or args.color_winner == '1' or args.color_winner == 'true')
local matchesStyle = args.matches_style
local isFBRStyle = matchesStyle and matchesStyle:upper() == "FBR"
local isHA = isTrue(args.h_a == 'y') or args.h_a(isFBRStyle ==and 'yes' or args.h_a == '1' or args.h_alegs == 'true'0)
local disableAwayGoals = isFalse(args.away_goals == 'n' or args.away_goals == 'no' or args.away_goals == '0' or args.away_goals == 'false' or args.away_goals == 'null')
local disableSmallText = isFalse(args.small_text == 'n' or args.small_text == 'no' or args.small_text == '0' or args.small_text == 'false' or args.small_text == 'null')
local noWrap = args.nowrap and isTrue(args.nowrap == 'y' or args.nowrap == 'yes' or args.nowrap == '1' or args.nowrap == 'true')
local disableNoWrap = isFalse(args.nowrap)
local doWrap = not noWrap and not disableNoWrap
local tableClass = 'wikitable'
local tableStyle = 'text-align: center;'
if args.collapsed and isTrue(args.collapsed == 'y' or args.collapsed == 'yes' or args.collapsed == '1' or args.collapsed == 'true') then
tableClass = 'wikitable mw-collapsible mw-collapsed'
tableStyle = tableStyle .. ' width: 100%;'
end
if args.center_table and isTrue(args.center_table == 'y' or args.center_table == 'yes' or args.center_table == '1' or args.center_table == 'true') then
tableStyle = tableStyle .. ' margin-left: auto; margin-right: auto; border: none;'
end
Baris 392 ⟶ 593:
if args.id then
table:attr('id', args.id) -- Optional id parameter to allow anchor to table
end
-- Add FBR legend if isFBRStyle is true
if isFBRStyle and legs == 0 then
root:node(createFBRLegend())
isHA = true
end
 
Baris 419 ⟶ 614:
-- Create the header row with team and score columns
local header = table:tag('tr')
if doWrap then
header:css('white-space', 'nowrap')
end
local defaultTeam1 = isHA and 'Tim kandang' or 'Tim 1'
local defaultTeam2 = isHA and 'Tim tandang' or 'Tim 2'
Baris 439 ⟶ 637:
if legs > 0 then
for leg = 1, legs do
local legHeading = args['leg' .. leg]
 
-- Check if "legN" parameter is present
if args['leg'not .. leg]legHeading then
legHeading = args['leg' .. leg]
else
-- Check if "leg_prefix" parameter is present
if args.leg_prefix then
--legHeading Check if= isTrue(args.leg_prefix) isand y,('Leg yes,' 1,.. leg) or true(args.leg_prefix .. ' ' .. leg)
ifelseif args.leg_prefixleg_suffix ==and 'y' ornot isTrue(args.leg_prefix == 'yes' or args.leg_prefix == '1' or args.leg_prefix == 'true'leg_suffix) then
legHeading = 'Laga ' .. leg
else
legHeading = args.leg_prefix .. ' ' .. leg
end
-- Check if "leg_suffix" parameter is present and does not equal y, yes, 1, or true
elseif args.leg_suffix and args.leg_suffix ~= 'y' and args.leg_suffix ~= 'yes' and args.leg_suffix ~= '1' and args.leg_suffix ~= 'true' then
legHeading = args.leg_suffix .. ' ' .. ordinal(leg)
else
Baris 468 ⟶ 657:
end
 
local step = (matchType == 'NT' and 3 or (noFlagIcons and 3 or 5)) + legs -- Determine the step size based on the match type and presence of flag icons
local i = 1
while anyParameterPresent(i, step, args) do
local rowIndex = math.floor((i - 1) / step) + 1
local aggNote = args['note_agg_' .. rowIndex]
local headingParam = args['heading' .. rowIndex]
local team1, team2, aggregateScore, aggregateEndText, legEndText, team1Icon, team2Icon, team1Variant, team2Variant
-- Add a heading above a given row in the table
if headingParam then
local headingRow = table:tag('tr')
headingRow:tag('td')
:attr('colspan', colCount)
:css('text-align', 'center')
:css('background', 'whitesmoke')
:wikitext('<strong>' .. headingParam .. '</strong>')
end
 
local row = table:tag('tr')
local team1, team2, aggregateScore, team1Icon, team2Icon, team1Variant, team2Variant
local team1Winner, team2Winner, manualBold, manualColor, isDraw = false, false, false, false, false
local leg1Score, leg2Score = false, false
local team1Asterick, team2Asterick = false, false
-- Process rows from input
 
team1 = args[i]
-- Process rows for both national team and club matches
if matchType == 'NT'noFlagIcons then
team1 = args[i]
if team1 and team1:match("^%s*%*") then
team1 = team1:gsub("^%s*%*", "")
team1Asterick = true
else
team1, team1Variant = processIcon(args[i])
end
aggregateScore = args[i+1]
team2 = args[i+2]
if team2 and team2:match("^%s*%*") then
team2 = team2:gsub("^%s*%*", "")
team2Asterick = true
else
team2, team2Variant = processIcon(args[i+2])
end
else
team1team1Icon, team1Variant = processIcon(args[i+1])
ifaggregateScore noFlagIcons= thenargs[i+2]
aggregateScoreteam2 = args[i+13]
team2Icon, team2team2Variant = processIcon(args[i+24])
else
team1Icon, team1Variant = processIcon(args[i+1])
aggregateScore = args[i+2]
team2 = args[i+3]
team2Icon, team2Variant = processIcon(args[i+4])
end
end
 
-- NameCheck if the 1st/2ndline should be legshown scoresbased foron two-leggedboth tiesteams
if legsshouldShowRow(team1Icon, == 2team2Icon) then
if-- matchTypeAdd ==a 'NT'heading orabove noFlagIconsa thengiven row in the table
if headingParam and not leg1ScoreshowCountry = args[i+3]then
leg2Scorelocal headingRow = args[i+4]table:tag('tr')
else headingRow:tag('td')
leg1Score = args[i+5] :attr('colspan', colCount)
leg2Score = args[i+6] :css('background', 'whitesmoke')
:wikitext('<strong>' .. headingParam .. '</strong>')
end
end
 
local row = table:tag('tr')
-- Clean the aggregate score
local cleanAggregate = cleanScore(aggregateScore)
-- Format and rewrite anchor links for aggregate score
aggregateScore = format_score(aggregateScore, noWrap)
if baselink ~= '' then
aggregateScore = rewriteAnchorLinks(aggregateScore, baselink)
end
 
-- Name the 1st/2nd leg scores for two-legged ties
-- Determine the winning team on aggregate
if legs == 2 then
team1, team2, team1Winner, team2Winner, manualBold, manualColor, isDraw, aggregateScore = determineWinner(cleanAggregate, team1, team2, boldWinner, colorWinner, aggregateScore, isFBRStyle, legs, leg1Score, leg2Score, disableAwayGoals)
if noFlagIcons then
leg1Score = args[i+3]
leg2Score = args[i+4]
else
leg1Score = args[i+5]
leg2Score = args[i+6]
end
end
 
-- Add background-color for winning team-- ifClean setthe byaggregate userscore
local team1StylecleanAggregate = 'text-align: right;'cleanScore(aggregateScore)
-- Format and rewrite anchor links for aggregate score
local team2Style = 'text-align: left;'
aggregateScore, aggregateEndText = format_and_extract_score(aggregateScore, doWrap)
if team1Winner and (colorWinner or manualColor) then
aggregateEndText, notes = processNote(frame, notes, 'agg', aggNote, aggregateEndText, rowIndex, rand_val, noteGroup)
team1Style = team1Style .. ' background-color: #CCFFCC;'
if generateLinks and legs == 0 then
end
aggregateScore = cleanAndGenerateLinks(team1, team2, aggregateScore, false)
if team2Winner and (colorWinner or manualColor) then
end
team2Style = team2Style .. ' background-color: #CCFFCC;'
 
end
-- Determine the winning team on aggregate
local skipDetermineWinner = legs == 0 and aggregateScore ~= '' and checkSmallText(aggregateScore)
 
-- Generate text to displayif fornot eachskipDetermineWinner teamthen
team1, team2, team1Winner, team2Winner, manualBold, manualColor, isDraw, aggregateScore = determineWinner(cleanAggregate, team1, team2, boldWinner, colorWinner, aggregateScore, isFBRStyle, legs, leg1Score, leg2Score, disableAwayGoals)
local team1Text, team2Text
if matchType == 'NT' then
if flagParam1 then -- Check whether youth team flag template with age level is used
team1Text = (not team1Asterick and team1 ~= "" and team1 ~= nil) and (expandTemplate(frame, flagTemplate .. '-rt', {flagParam1, team1, variant = team1Variant})) or (team1 ~= nil and team1 or "")
team2Text = (not team2Asterick and team2 ~= "" and team2 ~= nil) and (expandTemplate(frame, flagTemplate, {flagParam1, team2, variant = team2Variant})) or (team2 ~= nil and team2 or "")
else -- Use standard national team flag template without age level
team1Text = (not team1Asterick and team1 ~= "" and team1 ~= nil) and (expandTemplate(frame, flagTemplate .. '-rt', {team1, variant = team1Variant})) or (team1 ~= nil and team1 or "")
team2Text = (not team2Asterick and team2 ~= "" and team2 ~= nil) and (expandTemplate(frame, flagTemplate, {team2, variant = team2Variant})) or (team2 ~= nil and team2 or "")
end
else
team1Text = noFlagIcons and (team1 or '') or ((team1Icon ~= "" and team1Icon ~= nil) and ((team1 or '') .. ' ' .. expandTemplate(frame, flagTemplate, {team1Icon, variant = team1Variant})) or (team1 or ''))
team2Text = noFlagIcons and (team2 or '') or ((team2Icon ~= "" and team2Icon ~= nil) and (expandTemplate(frame, flagTemplate, {team2Icon, variant = team2Variant}) .. ' ' .. (team2 or '')) or (team2 or ''))
end
 
-- When set by user,-- addsAdd blank flags when string is usedbackground-color for awinning team insteadif ofset nationalby team flag templateuser
local team1Style = 'text-align: right;'
if fillBlanks then
iflocal matchTypeteam2Style == 'NTtext-align: left;' then
if team1Winner and (colorWinner ifor team1AsterickmanualColor) then
team1Textteam1Style = team1Textteam1Style .. ' <span class="flagicon">[[Berkasbackground-color:Flag placeholder.svg|25x17px|link=]]</span>#CCFFCC;'
end
if team2Winner and (colorWinner or manualColor) then
team2Style = team2Style .. ' background-color: #CCFFCC;'
end
-- Function to create flag template parameters
local function getFlagParams(icon, variant)
local params = {icon, variant = variant}
if flagSize then
params.size = flagSize
end
ifreturn team2Asterick thenparams
end
team2Text = '<span class="flagicon">[[Berkas:Flag placeholder.svg|25x17px|link=]]</span> ' .. team2Text
 
end
elseif-- notGenerate noFlagIconstext thento display for each team
local team1Text = noFlagIcons and (team1 or '') or ((team1Icon ~= "" and team1Icon ~= nil) and ((team1 or '') .. '&nbsp;' .. expandTemplate(frame, flagTemplate, getFlagParams(team1Icon, team1Variant))) or (team1 or ''))
local team2Text = noFlagIcons and (team2 or '') or ((team2Icon ~= "" and team2Icon ~= nil) and (expandTemplate(frame, flagTemplate, getFlagParams(team2Icon, team2Variant)) .. '&nbsp;' .. (team2 or '')) or (team2 or ''))
 
-- When set by user, adds blank flag placeholder next to team names
if fillBlanks and not noFlagIcons then
if not team1Icon or team1Icon == "" then
team1Text = team1Text .. ' &nbsp;<span class="flagicon">[[BerkasFile:Flag placeholder.svg|25x17px|link=]]</span>'
end
if not team2Icon or team2Icon == "" then
team2Text = '<span class="flagicon">[[BerkasFile:Flag placeholder.svg|25x17px|link=]]</span> &nbsp;' .. team2Text
end
end
end
 
-- Create aggregate score celllocal with conditional stylingaggregateContent
if not disableSmallText and skipDetermineWinner then
local aggregateStyle = ''
if legs == 0 and not disableSmallText and aggregateScoreaggregateContent ~= '<span style="font-size:85%;">' and.. checkSmallText(aggregateScore) then.. '</span>' .. aggregateEndText
else
aggregateStyle = 'font-size: ' .. smallFontSize .. '%;'
aggregateContent = aggregateScore .. aggregateEndText
end
if isFBRStyle and legs == 0 thenend
 
if team1Winner then
-- Create aggregate score cell with conditional styling
aggregateStyle = aggregateStyle .. 'background-color: #BBF3FF;'
elseiflocal team2WinneraggregateStyle then= ''
if doWrap and not (cleanAggregate:match("%(.*%(")) then
aggregateStyle = aggregateStyle .. 'background-color: #FFBBBB;'
aggregateStyle = 'white-space: nowrap;'
end
if isFBRStyle and legs == 0 then
if team1Winner then
aggregateStyle = aggregateStyle .. 'background-color: #BBF3FF;'
elseif team2Winner then
aggregateStyle = aggregateStyle .. 'background-color: #FFBBBB;'
elseif isDraw then
aggregateStyle = aggregateStyle .. 'background-color: #FFFFBB;'
end
elseif isDraw then
aggregateStyle = aggregateStyle .. 'background-color: #FFFFBB;'
end
elseif isDraw then
aggregateStyle = aggregateStyle .. 'background-color: #FFFFBB;'
end
 
-- Create rows for aggregate score and team names, bolded if set by user
row:tag('td'):cssText(team1Style):wikitext((team1Winner and (boldWinner or manualBold) and team1Text ~= '') and ('<strong>' .. team1Text .. '</strong>') or team1Text)
row:tag('td'):cssText(aggregateStyle ~= '' and aggregateStyle or nil):wikitext(aggregateScoreaggregateContent)
row:tag('td'):cssText(team2Style):wikitext((team2Winner and (boldWinner or manualBold) and team2Text ~= '') and ('<strong>' .. team2Text .. '</strong>') or team2Text)
 
-- Add columns for each leg score if applicable
if legs > 0 then
for leg = 1, legs do
local legIndex = i + 4 + leg + (matchType == 'NT' and -2 or (noFlagIcons and -2 or 0))
local legScore = args[legIndex]
if legScore ~ local legNote = "nil"args['note_leg' .. leg .. '_' .. thenrowIndex]
if legScore =~= "nullnil" then
if solidCelllegScore == "null" then
row:tag('td'):css('background',if '#BBBBBB')solidCell then
else row:tag('td'):css('background', '#BBBBBB')
row:tag('td'):wikitext('—')else
legScore = '—'
end
end
 
else
--if FormatlegScore and~= rewrite"null" anchor links for leg scoresthen
legScore = format_score(legScore, noWrap) -- Format and rewrite anchor links for leg scores
if baselink ~= '' thenlocal cleanLeg = cleanScore(legScore)
legScore, legEndText = rewriteAnchorLinksformat_and_extract_score(legScore, baselinkdoWrap)
legEndText, notes = processNote(frame, notes, 'leg' .. leg, legNote, legEndText, rowIndex, rand_val, noteGroup)
end
local legStyle = '' if generateLinks and not aggregateContent:lower():find("bye") then
if not disableSmallText and legScore ~= '' and checkSmallText(legScore)if leg == 1 then
legStyle = 'font-size: ' .. smallFontSize .. '%;' legScore = cleanAndGenerateLinks(team1, team2, legScore, false)
elseif leg == 2 then
legScore = cleanAndGenerateLinks(team1, team2, legScore, true)
end
end
local legContent
if not disableSmallText and legScore ~= '' and checkSmallText(legScore) then
legContent = '<span style="font-size:85%;">' .. legScore .. '</span>' .. legEndText
else
legContent = legScore .. legEndText
end
local legStyle = ''
if doWrap and not (cleanLeg:match("%(.*%(")) then
legStyle = 'white-space: nowrap;'
end
-- Write cells for legs
row:tag('td'):cssText(legStyle ~= '' and legStyle or nil):wikitext(legContent)
end
-- Write cells for legs
row:tag('td'):cssText(legStyle ~= '' and legStyle or nil):wikitext(legScore)
end
end
Baris 637 ⟶ 827:
 
i = i + step
end
-- Generate footer text
local footerText = createFooter(frame, notes, noteGroup, isFBRStyle, displayNotes, externalNotes, legs)
root:wikitext(footerText)
 
local tableCode = tostring(root)
 
-- Rewrite anchor links for the entire table
if baselink ~= '' then
tableCode = mw.ustring.gsub(tableCode, '(%[%[)(#[^%[%]]*%|)', '%1' .. baselink .. '%2')
end
 
return tostring(root)tableCode
end