Documentation for this module may be created at Module:PageIsSponsoring/doc
local cargo = mw.ext.cargo local Flags = require('Module:Flags') local PageIsSponsoring = {} function PageIsSponsoring.main(frame) local currentTitle = mw.title.getCurrentTitle().text local empty = true -- Check if there are any interviews for this page local tables = 'Sponsors' local fields = '_pageName, id, type, start, startString, end, endString' local currentDate = os.date('%Y-%m-%d') local cargoArgs = { where = 'id ="' .. currentTitle .. '" AND (end is NULL OR end > "' .. currentDate .. '")', limit=30, orderBy = 'type, start' } local results = cargo.query(tables, fields, cargoArgs) local fullString = '' local container = mw.html.create() :node(mw.html.create('h2'):wikitext('Sponsoring')) local hasMultipleTypes = hasMultipleUniqueTypes(results) if #results > 0 then empty = false local limit = 1 local type = results[1].type if hasMultipleTypes then fullString = fullString .. '<tabber>|-|' .. PageIsSponsoring.capitalizeFirstCharacter(type) .. 's=' end local Table = mw.html.create('table') :addClass('striped-table') local titleRow = mw.html.create('tr') :addClass('headerRow') local nameCell = mw.html.create('th') :wikitext('Name') local startCell = mw.html.create('th') :wikitext('Start') Table:node(titleRow:node(nameCell):node(startCell)) for r = 1, #results do local result = results[r] if results[r-1] and results[r-1].type ~= result.type then limit = 1 country = Flags.CountryName(result.country) if hasMultipleTypes then fullString = fullString .. tostring(mw.clone(Table)) .. '|-|' .. PageIsSponsoring.capitalizeFirstCharacter(result.type) .. 's=' else fullString = fullString .. tostring(mw.clone(Table)) end Table = mw.html.create('table') :addClass('striped-table') titleRow = mw.html.create('tr') :addClass('headerRow') nameCell = mw.html.create('th') :wikitext('Name') startCell= mw.html.create('th') :wikitext('Start') Table:node(titleRow:node(nameCell):node(startCell)) end if limit < 10 then local resultRow= mw.html.create('tr'):addClass('bodyRow') local name = mw.html.create('td'):wikitext('[[' .. result._pageName .. ']]') local start = mw.html.create('td') :node(result.startString or 'TBD' ) Table:node(resultRow:node(name):node(start)) end limit = limit + 1 end fullString = fullString .. tostring(Table) end if hasMultipleTypes then fullString = fullString .. '</tabber>' end if empty then return '<span class="d-none"></span>' else return container:wikitext(frame:preprocess(fullString)) end end function PageIsSponsoring.capitalizeFirstCharacter(str) return str:gsub('^%l', string.upper) end function hasMultipleUniqueTypes(results) if #results == 0 then return false end local uniqueTypes = {} for _, result in ipairs(results) do uniqueTypes[result.type] = true -- If there are already more than 1 unique types, return true if next(uniqueTypes, next(uniqueTypes)) then return true end end -- If we reached here, there's either 1 or 0 unique types return false end return PageIsSponsoring