Modul:Sports series: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
opsi tabel rata tengah |
Penambahan beberapa fitur; Penghapusan fitur type=NT, diganti dengan templat-templat terkait {{fb}} |
||
Baris 14:
end
-- Function to process country codes and variants
local function processIcon(iconString)
if not iconString or iconString:match("^%s*$") then
Baris 243:
end
-- Function to format the dashes and winning notes for aggregate/leg score parameters, and divide the score from references/notes/superscripts
local function
if not s then return '', '' end -- Return empty
local function format_dash(pattern)
Baris 261:
-- Format winning notes in brackets
if
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:
s = mw.ustring.gsub(s, '%([Aa]%.?[Gg]?%.?[Rr]?%.?%)', '([[Peraturan gol tandang|p.g.t]])')
-- Extract end text
-- 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
local function
local function cleanTeam(str, defaultName)
if str and str ~= "" then
str = str:gsub("</?%w+[^>]*>", "")
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: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
Baris 294 ⟶ 387:
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 noFlagIcons = false
local fillBlanks =
local generateLinks = isTrue(args.generate_links)
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
Baris 313 ⟶ 418:
end
end
-- Process flag parameter to determine flag template and variant
local noFlagIcons = isFalse(args.flag)
local flagSize = args.flag_size
if flagSize and not
flagSize = flagSize ..
end
-- Check if flagTemplate exists and adjust if necessary
if not noFlagIcons and flagTemplate ~= 'fbaicon' then
if
flagTemplate = 'flagicon'
end
end
-- Determine whether line should be displayed
local showCountry = args.show_country
local function shouldShowRow(team1Icon, team2Icon)
if not showCountry or noFlagIcons then
return true
end
return team1Icon == showCountry or team2Icon == showCountry
end
local legs = (isFalse(args.legs
if legs and legs < 0 then
legs = 2
Baris 361 ⟶ 449:
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
local colorWinner =
local matchesStyle = args.matches_style
local isFBRStyle = matchesStyle and matchesStyle:upper() == "FBR"
local isHA = isTrue(args.h_a
local disableAwayGoals = isFalse(args.away_goals
local disableSmallText = isFalse(args.small_text
local noWrap =
local disableNoWrap = isFalse(args.nowrap)
local doWrap = not noWrap and not disableNoWrap
local tableClass = 'wikitable'
local tableStyle = 'text-align: center;'
if
tableClass = 'wikitable mw-collapsible mw-collapsed'
tableStyle = tableStyle .. ' width: 100%;'
end
if
tableStyle = tableStyle .. ' margin-left: auto; margin-right: auto; border: none;'
end
Baris 419 ⟶ 509:
-- 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 ⟶ 532:
if legs > 0 then
for leg = 1, legs do
local legHeading = args['leg' .. leg]
-- Check if "legN" parameter is present
if
if args.leg_prefix then
legHeading = args.leg_suffix .. ' ' .. ordinal(leg)
else
Baris 468 ⟶ 552:
end
local step =
local i = 1
while anyParameterPresent(i, step, args) do
local rowIndex = math.floor((i - 1) / step) + 1
local headingParam = args['heading' .. rowIndex]
local team1, team2, aggregateScore, aggregateEndText, legEndText, team1Icon, team2Icon, team1Variant, team2Variant
local team1Winner, team2Winner, manualBold, manualColor, isDraw = false, false, false, false, false
local leg1Score, leg2Score = false, false
-- Process rows from input
team1 = args[i]
if
aggregateScore = args[i+1]
team2 = args[i+2]
else
team2Icon,
end
--
if
if headingParam and not
:wikitext('<strong>' .. headingParam .. '</strong>')
end
local row = table:tag('tr')
-- Name the 1st/2nd leg scores for two-legged ties
if legs == 2 then
if noFlagIcons then
leg1Score = args[i+3]
leg2Score = args[i+4]
else
leg1Score = args[i+5]
leg2Score = args[i+6]
end
end
local
-- Format and rewrite anchor links for aggregate score
aggregateScore, aggregateEndText = format_and_extract_score(aggregateScore, doWrap)
aggregateScore = cleanAndGenerateLinks(team1, team2, aggregateScore, false)
end
local skipDetermineWinner = legs == 0 and aggregateScore ~= '' and checkSmallText(aggregateScore)
if not skipDetermineWinner then
team1, team2, team1Winner, team2Winner, manualBold, manualColor, isDraw, aggregateScore = determineWinner(cleanAggregate, team1, team2, boldWinner, colorWinner, aggregateScore, isFBRStyle, legs, leg1Score, leg2Score, disableAwayGoals)
end
local team1Style = 'text-align: right;'
if team1Winner and (colorWinner
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
end
local team1Text = noFlagIcons and (team1 or '') or ((team1Icon ~= "" and team1Icon ~= nil) and ((team1 or '') .. ' ' .. 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)) .. ' ' .. (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 .. '
end
if not team2Icon or team2Icon == "" then
team2Text = '<span class="flagicon">[[
end
end
if not disableSmallText and skipDetermineWinner then
else
aggregateContent = aggregateScore .. aggregateEndText
-- Create aggregate score cell with conditional styling
if doWrap and not (cleanAggregate:match("%(.*%(")) then
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
-- 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(
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 +
local legScore = args[legIndex]
if legScore ~= "nil" then
if legScore == "null" then
if solidCell then
row:tag('td'):css('background', '#BBBBBB')
else
end
end
legScore, legEndText =
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
end
end
Baris 639 ⟶ 720:
end
-- Rewrite anchor links for the entire table
if baselink ~= '' then
tableCode = mw.ustring.gsub(tableCode, '(%[%[)(#[^%[%]]*%|)', '%1' .. baselink .. '%2')
end
return tableCode
end
|