<?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%2Fisaacl%2FNHL_standings</id>
	<title>Module:Sandbox/isaacl/NHL standings - 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%2Fisaacl%2FNHL_standings"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/isaacl/NHL_standings&amp;action=history"/>
	<updated>2026-08-02T08:34:32Z</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/isaacl/NHL_standings&amp;diff=146532&amp;oldid=prev</id>
		<title>imported&gt;Isaacl: add notes for future changes to module</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/isaacl/NHL_standings&amp;diff=146532&amp;oldid=prev"/>
		<updated>2014-08-11T00:08:45Z</updated>

		<summary type="html">&lt;p&gt;add notes for future changes to module&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module copies content from Template:2012–13_NHL_Eastern_Conference_standings;&lt;br /&gt;
-- see the history of that page for attribution.&lt;br /&gt;
&lt;br /&gt;
-- TODO:&lt;br /&gt;
-- add support for annotations:&lt;br /&gt;
-- - y = won division&lt;br /&gt;
-- - z = best record in conference&lt;br /&gt;
-- - p = best record in league&lt;br /&gt;
-- add support for sorting by playoff ranking&lt;br /&gt;
-- add support for wild card-based tables&lt;br /&gt;
&lt;br /&gt;
local me = { }&lt;br /&gt;
&lt;br /&gt;
local nhlInfo&lt;br /&gt;
&lt;br /&gt;
-- if mw.loadData() not supported, use require() instead&lt;br /&gt;
if mw.loadData then&lt;br /&gt;
    nhlInfo = mw.loadData(&amp;#039;Module:Sandbox/isaacl/NHL standings/2013 2014 NHL info&amp;#039;)&lt;br /&gt;
else&lt;br /&gt;
    nhlInfo = require(&amp;#039;Module:Sandbox/isaacl/NHL standings/2013 2014 NHL info&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local Navbar = require(&amp;#039;Module:Navbar&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local config = { }&lt;br /&gt;
&lt;br /&gt;
config.inputFormat  = &amp;#039;2005-2006-rules&amp;#039;&lt;br /&gt;
config.outputFormat = &amp;#039;2013-2014-rules&amp;#039;&lt;br /&gt;
config.standingsType = &amp;#039;league&amp;#039;&lt;br /&gt;
config.separatorFormat = &amp;#039;default&amp;#039;&lt;br /&gt;
config.seedInfo = { }&lt;br /&gt;
config.tableHeaderText = { }&lt;br /&gt;
config.entityForTeam = nil&lt;br /&gt;
&lt;br /&gt;
config.tableTitleForStandingsType = {&lt;br /&gt;
    conference = &amp;#039;Conference standings&amp;#039;,&lt;br /&gt;
    division = &amp;#039;Division&amp;#039;,&lt;br /&gt;
    league = &amp;#039;League standings&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
config.scopeForStandingsType = {&lt;br /&gt;
    conference = &amp;#039;conference&amp;#039;,&lt;br /&gt;
    division = &amp;#039;division&amp;#039;,&lt;br /&gt;
    league = &amp;#039;league&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function initEntityForTeamTable()&lt;br /&gt;
    config.entityForTeam = { }&lt;br /&gt;
&lt;br /&gt;
    for conferenceName, conferenceInfo in pairs(nhlInfo.structure.conference) do&lt;br /&gt;
        for divisionName, teamList in pairs(conferenceInfo.division) do&lt;br /&gt;
            for idx, teamName in ipairs(teamList) do&lt;br /&gt;
                if (config.entityForTeam[teamName] == nil) then&lt;br /&gt;
                    config.entityForTeam[teamName] = { }&lt;br /&gt;
                end&lt;br /&gt;
                config.entityForTeam[teamName].conference = conferenceName&lt;br /&gt;
                config.entityForTeam[teamName].division   = divisionName&lt;br /&gt;
            end  -- loop over team names&lt;br /&gt;
        end  -- loop over divisions&lt;br /&gt;
    end  -- loop over conferences&lt;br /&gt;
end  -- function initTeamsForEntity()&lt;br /&gt;
&lt;br /&gt;
local function filterTeamsByEntity(listOfTeams, entityType, entity)&lt;br /&gt;
	if (config.entityForTeam == nil) then&lt;br /&gt;
	    initEntityForTeamTable()&lt;br /&gt;
	end&lt;br /&gt;
    local filteredTeams = { }&lt;br /&gt;
    for idx, teamInfo in ipairs(listOfTeams) do&lt;br /&gt;
    	if (config.entityForTeam[teamInfo.name]) then&lt;br /&gt;
            if (entity == config.entityForTeam[teamInfo.name][entityType]) then&lt;br /&gt;
                table.insert(filteredTeams, teamInfo)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return filteredTeams&lt;br /&gt;
end  -- function filterTeamsByEntity&lt;br /&gt;
&lt;br /&gt;
local function compareTeamsByRank(teamA, teamB)&lt;br /&gt;
    local result;&lt;br /&gt;
    if (teamA.points ~= teamB.points) then&lt;br /&gt;
        return teamA.points &amp;gt; teamB.points&lt;br /&gt;
    elseif (teamA.games ~= teamB.games) then&lt;br /&gt;
        return teamA.games &amp;lt; teamB.games&lt;br /&gt;
    elseif (teamA.nonShootoutWins ~= teamB.nonShootoutWins) then&lt;br /&gt;
        return teamA.nonShootoutWins &amp;gt; teamB.nonShootoutWins&lt;br /&gt;
    else&lt;br /&gt;
    	-- The next tie-breaker is the head-to-head records of the&lt;br /&gt;
    	-- two teams. As this information is not given to this&lt;br /&gt;
    	-- template, just preserve the original order.&lt;br /&gt;
        return teamA.originalPosition &amp;lt; teamB.originalPosition&lt;br /&gt;
    end&lt;br /&gt;
end  -- function compareTeams()&lt;br /&gt;
&lt;br /&gt;
local readTeamInfo = {&lt;br /&gt;
    [&amp;#039;2005-2006-rules&amp;#039;] = function(args, currentIdx, returnData)&lt;br /&gt;
        if (config.separatorFormat == &amp;#039;whitespace&amp;#039;) then&lt;br /&gt;
            if (args[currentIdx] == nil or&lt;br /&gt;
               	args[currentIdx+1] == nil) then&lt;br /&gt;
                returnData.errorMessage = &amp;#039;Insufficient number of arguments for format: &amp;#039; ..&lt;br /&gt;
                  config.separatorFormat&lt;br /&gt;
                return nil&lt;br /&gt;
            end&lt;br /&gt;
        elseif (args[currentIdx]   == nil or&lt;br /&gt;
            args[currentIdx+1] == nil or&lt;br /&gt;
            args[currentIdx+2] == nil or&lt;br /&gt;
            args[currentIdx+3] == nil or&lt;br /&gt;
            args[currentIdx+4] == nil or&lt;br /&gt;
            args[currentIdx+5] == nil or&lt;br /&gt;
            args[currentIdx+6] == nil   ) then&lt;br /&gt;
            returnData.errorMessage = &amp;#039;Insufficient number of arguments for format: &amp;#039; ..&lt;br /&gt;
              config.separatorFormat&lt;br /&gt;
            return nil&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        local teamInfo = {&lt;br /&gt;
            name = mw.text.trim(args[currentIdx])&lt;br /&gt;
		}&lt;br /&gt;
        if (config.separatorFormat == &amp;#039;whitespace&amp;#039;) then&lt;br /&gt;
            local argList = mw.text.split(args[currentIdx+1], &amp;#039;%s+&amp;#039;)&lt;br /&gt;
            teamInfo.wins = tonumber(mw.text.trim(argList[1]))&lt;br /&gt;
            teamInfo.losses = tonumber(mw.text.trim(argList[2]))&lt;br /&gt;
            teamInfo.nonRegulationLosses = tonumber(mw.text.trim(argList[3]))&lt;br /&gt;
            teamInfo.nonShootoutWins     = tonumber(mw.text.trim(argList[4]))&lt;br /&gt;
            teamInfo.goalsFor     = tonumber(mw.text.trim(argList[5]))&lt;br /&gt;
            teamInfo.goalsAgainst = tonumber(mw.text.trim(argList[6]))&lt;br /&gt;
&lt;br /&gt;
            returnData.cIndicesRead = 2&lt;br /&gt;
        else&lt;br /&gt;
            teamInfo.wins = tonumber(mw.text.trim(args[currentIdx+1]))&lt;br /&gt;
            teamInfo.losses = tonumber(mw.text.trim(args[currentIdx+2]))&lt;br /&gt;
            teamInfo.nonRegulationLosses = tonumber(mw.text.trim(args[currentIdx+3]))&lt;br /&gt;
            teamInfo.nonShootoutWins     = tonumber(mw.text.trim(args[currentIdx+4]))&lt;br /&gt;
            teamInfo.goalsFor     = tonumber(mw.text.trim(args[currentIdx+5]))&lt;br /&gt;
            teamInfo.goalsAgainst = tonumber(mw.text.trim(args[currentIdx+6]))&lt;br /&gt;
&lt;br /&gt;
            returnData.cIndicesRead = 7&lt;br /&gt;
        end&lt;br /&gt;
        teamInfo.games = teamInfo.wins + teamInfo.losses + teamInfo.nonRegulationLosses&lt;br /&gt;
        teamInfo.points = 2 * teamInfo.wins + teamInfo.nonRegulationLosses&lt;br /&gt;
        return teamInfo&lt;br /&gt;
    end,  -- function readTeamInfo.default()&lt;br /&gt;
}  -- readTeamInfo object&lt;br /&gt;
&lt;br /&gt;
local function initTableHeaderText(frame)&lt;br /&gt;
    config.tableHeaderText = {&lt;br /&gt;
		rank     = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;R&amp;#039;, &amp;#039;Rank&amp;#039;} },&lt;br /&gt;
		division = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;Div&amp;#039;, &amp;#039;Division&amp;#039;} },&lt;br /&gt;
		games    = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;GP&amp;#039;, &amp;#039;Games played&amp;#039;} },&lt;br /&gt;
		wins     = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;W&amp;#039;, &amp;#039;Wins&amp;#039;} },&lt;br /&gt;
		losses   = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;L&amp;#039;, &amp;#039;Regulation losses&amp;#039;} },&lt;br /&gt;
		nonRegulationLosses = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;OTL&amp;#039;, &amp;#039;Overtime + shootout losses&amp;#039;} },&lt;br /&gt;
		nonShootoutWins  = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;ROW&amp;#039;, &amp;#039;Regulation + overtime wins&amp;#039;} },&lt;br /&gt;
		goalsFor = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;GF&amp;#039;, &amp;#039;Goals for&amp;#039;} },&lt;br /&gt;
		goalsAgainst = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;GA&amp;#039;, &amp;#039;Goals against&amp;#039;} },&lt;br /&gt;
		points   = frame:expandTemplate{ title=&amp;#039;abbr&amp;#039;, args={&amp;#039;Pts&amp;#039;, &amp;#039;Points&amp;#039;} },&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local generateTableHeader = {&lt;br /&gt;
    [&amp;#039;2013-2014-rules&amp;#039;] = function(config)&lt;br /&gt;
        return&lt;br /&gt;
&amp;#039;{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align:center;&amp;quot;\&lt;br /&gt;
|+ &amp;#039; .. config.tableTitleForStandingsType[config.standingsType] .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:5%&amp;quot; | &amp;#039; .. config.tableHeaderText.rank .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:25%;&amp;quot; class=&amp;quot;unsortable&amp;quot; |\&lt;br /&gt;
! style=&amp;quot;width:8%;&amp;quot; class=&amp;quot;unsortable&amp;quot; | &amp;#039; .. config.tableHeaderText.games .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:8%;&amp;quot; | &amp;#039; .. config.tableHeaderText.wins .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:8%;&amp;quot; | &amp;#039; .. config.tableHeaderText.losses .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:8%;&amp;quot; | &amp;#039; .. config.tableHeaderText.nonRegulationLosses .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:8%;&amp;quot; | &amp;#039; .. config.tableHeaderText.nonShootoutWins .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot; | &amp;#039; .. config.tableHeaderText.goalsFor .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot; | &amp;#039; .. config.tableHeaderText.goalsAgainst .. &amp;#039;\&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot; | &amp;#039; .. config.tableHeaderText.points .. &amp;#039;\n&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	end,  -- function generateTableHeader.&amp;#039;2013-2014-rules&amp;#039;&lt;br /&gt;
}  -- generateTableHeader object&lt;br /&gt;
&lt;br /&gt;
local generateTeamRow = {&lt;br /&gt;
    [&amp;#039;2013-2014-rules&amp;#039;] = function(config, teamRowInfo, teamInfo)&lt;br /&gt;
        return&lt;br /&gt;
&amp;#039;|-&amp;#039; .. teamRowInfo.rowStyle .. &amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamRowInfo.rank .. &amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamRowInfo.seedText .. &amp;#039;[[&amp;#039; .. teamRowInfo.teamSeasonPage .. &amp;#039;|&amp;#039; .. teamInfo.name .. &amp;#039;]]\&lt;br /&gt;
|| &amp;#039; .. teamInfo.games ..&amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamInfo.wins .. &amp;#039; || &amp;#039; .. teamInfo.losses .. &amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamInfo.nonRegulationLosses .. &amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamInfo.nonShootoutWins .. &amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamInfo.goalsFor ..&amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamInfo.goalsAgainst .. &amp;#039;\&lt;br /&gt;
|| &amp;#039; .. teamInfo.points .. &amp;#039;\n&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    end,  -- function generateTeamRow.&amp;#039;2013-2014-rules&amp;#039;&lt;br /&gt;
}   -- generateTeamRow object&lt;br /&gt;
&lt;br /&gt;
local calculateSeeds = {&lt;br /&gt;
	[&amp;#039;2013-2014-rules&amp;#039;] = function()&lt;br /&gt;
		return &amp;#039;&amp;#039;   -- TODO&lt;br /&gt;
	end,  -- function calculateSeeds.&amp;#039;2013-2014-rules&amp;#039;&lt;br /&gt;
}  -- calculateSeeds object&lt;br /&gt;
&lt;br /&gt;
local function parseHighlightArg(highlightArg, teamsToHighlight)&lt;br /&gt;
    local teamList = mw.text.split(highlightArg, &amp;#039;%s*,%s*&amp;#039;)&lt;br /&gt;
    if (#teamList == 0) then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, team in ipairs(teamList) do&lt;br /&gt;
        teamsToHighlight[mw.text.trim(team)] = true&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
end  -- function parseHighlightArg&lt;br /&gt;
&lt;br /&gt;
local function parseTeamLinks(teamLinksArg, linkForTeam)&lt;br /&gt;
    local teamList = mw.text.split(teamLinksArg, &amp;#039;%s*,%s*&amp;#039;)&lt;br /&gt;
    if (#teamList == 0) then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for idx, teamLinkInfo in ipairs(teamList) do&lt;br /&gt;
        local teamData = mw.text.split(teamLinkInfo, &amp;#039;%s*:%s*&amp;#039;)&lt;br /&gt;
        if (#teamData &amp;gt;= 2) then&lt;br /&gt;
            local team = mw.text.trim(teamData[1])&lt;br /&gt;
            local teamLink = mw.text.trim(teamData[2])&lt;br /&gt;
            linkForTeam[team] = teamLink&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end  -- function parseTeamLinks&lt;br /&gt;
&lt;br /&gt;
function me.generateStandingsTable(frame)&lt;br /&gt;
    config.templateName = nil&lt;br /&gt;
    if (frame.args.template_name ~= nil) then&lt;br /&gt;
        config.templateName = frame.args.template_name&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if (frame.args.standingsType ~= nil) then&lt;br /&gt;
        local standingsTypeArg = mw.text.trim(frame.args.standingsType)&lt;br /&gt;
        if (standingsTypeArg ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
            config.standingsType = standingsTypeArg&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if (config.standingsType ~= nil) then&lt;br /&gt;
    	if (frame.args.entity ~= nil) then&lt;br /&gt;
            local entityArg = mw.text.trim(frame.args.entity)&lt;br /&gt;
            if (entityArg ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
                config.entity = entityArg&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if (frame.args.separatorFormat ~= nil) then&lt;br /&gt;
    	local separatorFormatArg = mw.text.trim(frame.args.separatorFormat)&lt;br /&gt;
    	config.separatorFormat = separatorFormatArg&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    config.season = mw.text.trim(frame.args.season or &amp;#039;&amp;#039;)&lt;br /&gt;
    -- For convenience, replace hyphen with en-dash&lt;br /&gt;
    config.season = mw.ustring.gsub(config.season, &amp;#039;-&amp;#039;, &amp;#039;–&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    config.teamsToHighlight = {}&lt;br /&gt;
    if (frame.args.highlight ~= nil) then&lt;br /&gt;
        parseHighlightArg(frame.args.highlight, config.teamsToHighlight)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    config.linkForTeam = {}&lt;br /&gt;
    if (frame.args.team_links ~= nil) then&lt;br /&gt;
        parseTeamLinks(frame.args.team_links, config.linkForTeam)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local listOfTeams = {}&lt;br /&gt;
    local currentArgIdx = 1&lt;br /&gt;
    local originalPosition = 1&lt;br /&gt;
&lt;br /&gt;
    while (frame.args[currentArgIdx] ~= nil) do&lt;br /&gt;
        local returnData = { }&lt;br /&gt;
        local teamInfo = readTeamInfo[config.inputFormat](frame.args, currentArgIdx, returnData);&lt;br /&gt;
        if (teamInfo == nil) then&lt;br /&gt;
        	if (returnData.errorMessage ~= nil) then&lt;br /&gt;
        		return returnData.errorMessage&lt;br /&gt;
        	end&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
        if (config.linkForTeam[teamInfo.name] ~= nil) then&lt;br /&gt;
            teamInfo.teamLink = config.linkForTeam[teamInfo.name]&lt;br /&gt;
        else&lt;br /&gt;
            teamInfo.teamLink = teamInfo.name&lt;br /&gt;
        end&lt;br /&gt;
        teamInfo.originalPosition = originalPosition&lt;br /&gt;
        table.insert(listOfTeams, teamInfo)&lt;br /&gt;
        currentArgIdx = currentArgIdx + returnData.cIndicesRead&lt;br /&gt;
        originalPosition = originalPosition + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if (#listOfTeams == 0) then&lt;br /&gt;
        return &amp;#039;No teams!&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local outputBuffer = { }&lt;br /&gt;
&lt;br /&gt;
    initTableHeaderText(frame)&lt;br /&gt;
&lt;br /&gt;
    table.insert(outputBuffer,&lt;br /&gt;
        generateTableHeader[config.outputFormat](config)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    local teamsToDisplay = listOfTeams&lt;br /&gt;
&lt;br /&gt;
    -- filter teams to display, based on scope&lt;br /&gt;
&lt;br /&gt;
    if (config.scopeForStandingsType[config.standingsType] == &amp;#039;division&amp;#039;) then&lt;br /&gt;
        teamsToDisplay = filterTeamsByEntity(listOfTeams, &amp;#039;division&amp;#039;, config.entity)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if (config.scopeForStandingsType[config.standingsType] == &amp;#039;conference&amp;#039;) then&lt;br /&gt;
        teamsToDisplay = filterTeamsByEntity(listOfTeams, &amp;#039;conference&amp;#039;, config.entity)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.sort(teamsToDisplay, compareTeamsByRank)&lt;br /&gt;
&lt;br /&gt;
    -- TODO: further filter teams after sorting (for division leaders&lt;br /&gt;
    -- table)&lt;br /&gt;
&lt;br /&gt;
    local rankIdx = 1&lt;br /&gt;
    for idx, teamInfo in ipairs(teamsToDisplay) do&lt;br /&gt;
    	local teamRowInfo = {&lt;br /&gt;
    	    seedText = &amp;#039;&amp;#039;,&lt;br /&gt;
    	    rowStyle = &amp;#039;&amp;#039;,&lt;br /&gt;
    	    teamSeasonPage = config.season .. &amp;#039; &amp;#039; .. teamInfo.teamLink .. &amp;#039; season&amp;#039;,&lt;br /&gt;
    	    rank = rankIdx,&lt;br /&gt;
    	}&lt;br /&gt;
        if (config.seedInfo[teamInfo.name] ~= nil) then&lt;br /&gt;
            teamRowInfo.seedText = &amp;#039;&amp;lt;sup&amp;gt;(&amp;#039; .. seedInfo[teamInfo.name] .. &amp;#039;)&amp;lt;/sup&amp;gt; &amp;#039;&lt;br /&gt;
            teamRowInfo.rowStyle = &amp;#039; style=&amp;quot;background:#CCFFCC&amp;quot;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if (config.teamsToHighlight[teamInfo.name]) then&lt;br /&gt;
            teamRowInfo.rowStyle =  &amp;#039; style=&amp;quot;background:#CCFFCC&amp;quot;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        table.insert(outputBuffer,&lt;br /&gt;
            generateTeamRow[config.outputFormat](config, teamRowInfo, teamInfo)&lt;br /&gt;
        )&lt;br /&gt;
        rankIdx = rankIdx + 1&lt;br /&gt;
    end  -- end of looping over listOfTeams&lt;br /&gt;
&lt;br /&gt;
    table.insert(outputBuffer, &amp;#039;|}\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    return table.concat(outputBuffer)&lt;br /&gt;
&lt;br /&gt;
end  -- function me.generateStandingsTable()&lt;br /&gt;
&lt;br /&gt;
function me.generateStandingsTable_fromTemplate(frame)&lt;br /&gt;
    return me.generateStandingsTable(frame:getParent())&lt;br /&gt;
end  -- function me.generateStandingsTable_fromTemplate()&lt;br /&gt;
&lt;br /&gt;
return me&lt;/div&gt;</summary>
		<author><name>imported&gt;Isaacl</name></author>
	</entry>
</feed>