mNo edit summary |
mNo edit summary |
||
Line 28: | Line 28: | ||
function p.getTeamLogo(team, game, size) | function p.getTeamLogo(team, game, size) | ||
if not team then return mw.html.create('div'):node(mw.html.create('div'):wikitext('[[File:Team_placeholder_light.png|' .. size or '20x20px' .. ']]') ):node(mw.html.create('div'):wikitext('[[File:Team_placeholder_dark.png|' .. size or '20x20px' .. ']]') ) end | if not team then return mw.html.create('div'):node(mw.html.create('div'):addClass('light'):wikitext('[[File:Team_placeholder_light.png|' .. (size or '20x20px') .. ']]') ):node(mw.html.create('div'):addClass('dark'):wikitext('[[File:Team_placeholder_dark.png|' .. (size or '20x20px') .. ']]') ) end | ||
-- Check if team has org incase the logo is saved under org | -- Check if team has org incase the logo is saved under org | ||
local org = '' | local org = '' |
Revision as of 05:19, 29 October 2023
Documentation for this module may be created at Module:Functions/doc
local cargo = mw.ext.cargo local p = {} function p.getTeamPage(team, game) local currentTitle = mw.title.getCurrentTitle().text local gameCategory = game or mw.text.split(currentTitle, '/')[1] -- Check if shorthand of a team was used local tables = 'Teams' local fields = '_pageName, shorthand' local cargoArgs = { where = '_pageName LIKE "' .. gameCategory .. '/%" AND shorthand = "' .. team .. '"' } local results = cargo.query(tables, fields, cargoArgs) if #results > 0 then return results[1]._pageName else return gameCategory .. '/' .. team end end function p.prizeToString(nr) if nr == nil then return 'TBD' end local prize = '' local reversed = string.reverse(tostring(nr)) for k = 1, #reversed do prize = reversed:sub(k, k) .. prize if k % 3 == 0 and k < #reversed then prize = ',' .. prize end k = k + 1 end return prize end function p.getTeamLogo(team, game, size) if not team then return mw.html.create('div'):node(mw.html.create('div'):addClass('light'):wikitext('[[File:Team_placeholder_light.png|' .. (size or '20x20px') .. ']]') ):node(mw.html.create('div'):addClass('dark'):wikitext('[[File:Team_placeholder_dark.png|' .. (size or '20x20px') .. ']]') ) end -- Check if team has org incase the logo is saved under org local org = '' tables = 'Teams' fields = 'org' cargoArgs = { where = '_pageName = "' .. team .. '" AND org IS NOT NULL' } results = cargo.query(tables, fields, cargoArgs) if #results > 0 then org = results[1].org end local tables = 'Logos' local fields = '_pageName, logoLight, logoDark, logoAll, iconAll, iconLight, iconDark, start, end' local currentDate = os.date('%Y-%m-%d') local cargoArgs = { where = '(_pageName = "' .. team .. '" OR _pageName="' .. org .. '") AND (start is NULL OR start < "' .. currentDate .. '") AND (end is NULL OR end > "' .. currentDate .. '")' } local results = cargo.query(tables, fields, cargoArgs) if #results > 0 then if results[1].iconAll then return p.createLogo(results[1].iconAll, team, nil, game, size) elseif results[1].iconLight and results[1].iconDark then return mw.html.create('div'):node(p.createLogo(results[1].iconLight, team, 'light', game, size)):node(p.createLogo(results[1].iconDark, team, 'dark', game, size)) elseif results[1].logoAll then return p.createLogo(results[1].logoAll, team, nil, game, size) elseif results[1].logoLight and results[1].logoDark then return mw.html.create('div'):node(p.createLogo(results[1].logoLight, team, 'light', game, size)):node(p.createLogo(results[1].logoDark, team, 'dark', game, size)) else local logo = results[1].iconLight or results[1].iconDark or results[1].logoLight or results[1].logoDark return p.createLogo(logo, team, nil, game, size) end else return mw.html.create('div'):node(p.createLogo(nil, team, 'light', game, size)):node(p.createLogo(nil, team, 'dark', game, size)) end end function p.createLogo(url, teamPage, class, game, size) size = size or '20px' local className = class and class .. ' h-100' or 'h-100' local logoURL = url and url or 'Team_placeholder_' .. class .. '.png' local logoContainer = mw.html.create('div'):addClass(className) local logo = mw.html.create('div') :addClass('team-list-logo') :node('[[File:' .. logoURL .. '|' .. size .. '|link=' .. teamPage .. '|' .. string.gsub(teamPage, game .. '/', '') .. ']]') logoContainer:node(logo) return logoContainer end function p.stringifyDate(inputDate) if not inputDate then return nil end local dateTimeSplit = mw.text.split(inputDate, ' ') local date = dateTimeSplit[1] local time = dateTimeSplit[2] and ' ' .. timeAbbr(dateTimeSplit[2]) or '' local monthNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} local dateSplit = mw.text.split(date, '-') local year = dateSplit[1] or '' local month = dateSplit[2] and monthNames[tonumber(dateSplit[2])] .. ' ' or '' local day = dateSplit[3] and dateSplit[3] .. ', ' or '' return month .. day .. year .. time end function timeAbbr(time) local split = mw.text.split(time, ':') local hours = split[1] local minutes = split[2] return hours .. ':' .. minutes end function p.timeUntil(inputDate) local currentDate = os.time() -- Get the current Unix timestamp -- Parse the date string into a table local year, month, day, hour, minute, second = inputDate:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)") -- Create a table with the parsed date and time local targetDate = { year = tonumber(year), month = tonumber(month), day = tonumber(day), hour = tonumber(hour), min = tonumber(minute), sec = tonumber(second) } -- Convert the target date and time to a Unix timestamp local targetTimestamp = os.time(targetDate) -- Calculate the time difference in seconds local timeDifference = targetTimestamp - currentDate if timeDifference <= 0 then return 'LIVE' else -- Calculate days, hours, and minutes local days = math.floor(timeDifference / (24 * 3600)) local hours = math.floor((timeDifference % (24 * 3600)) / 3600) local minutes = math.floor((timeDifference % 3600) / 60) local timeUntil = "" if days > 0 then timeUntil = timeUntil .. days .. "d " end if hours > 0 then timeUntil = timeUntil .. hours .. "h " end if minutes > 0 or (days == 0 and hours == 0) then timeUntil = timeUntil .. minutes .. "m" end return timeUntil end end function p.colorModeDiv(light, dark) local light = mw.html.create('div'):addClass('light'):node(light) local dark = mw.html.create('div'):addClass('dark'):node(dark) return mw.html.create('div'):node(light):node(dark) end return p