Módulo:TítulosAgrupados
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:TítulosAgrupados/doc
local p = {} -- Ordem de prioridade dos títulos local priority_order = { "Mundial de Clubes", "Copa Libertadores da América", "Copa Sul-Americana", "Recopa Sul-Americana", "Campeonato Brasileiro de Futebol", "Copa do Brasil de Futebol", "Supercopa do Brasil", "Campeonato Brasileiro de Futebol - Série B", "Copa Sul", "Campeonato Sul-Brasileiro", "Campeonato Gaúcho de Futebol", "Recopa Gaúcha", "Campeonato Citadino de Porto Alegre", "Torneio Extra de Porto Alegre", "Troféu Wanderpreis" } -- Função para obter a prioridade de um título local function get_priority(title) for i, t in ipairs(priority_order) do if t == title then return i end end return #priority_order + 1 -- Menor prioridade para títulos não listados end -- Função para extrair o texto visível de um link (se for um link) local function extract_visible_text(link) if type(link) == "string" then -- Extrai o texto visível em links no formato [[Texto|Exibição]] ou [[Texto]] local visible_text = link:match("%[%[.-|(.+)%]%]") or link:match("%[%[(.-)%]%]") or link return visible_text end return link -- Retorna o texto como está se não for um link end -- Função principal function p.titulos(frame) -- Verifica se o SMW está disponível if not mw.smw then return "Erro: O Semantic MediaWiki não está disponível ou não está configurado corretamente." end -- Recebe a consulta passada como argumento local query = frame.args.query or "" -- Executa a consulta no SMW local result = mw.smw.ask(query .. "|?CampeaoTrofeu|?Título|?TítuloAno3|?TítuloAno2", { format = "table", headers = "hide", mainlabel = "-", sep = "\n" }) -- Processa os resultados local grouped_titles = {} for _, row in pairs(result) do local trofeu = row["CampeaoTrofeu"] local titulo = extract_visible_text(row["Título"]) -- Extrai o texto visível do link local ano = row["TítuloAno3"] local ano2 = tonumber(row["TítuloAno2"]) or 0 -- Garantir ordenação numérica -- Agrupa títulos e anos if not grouped_titles[titulo] then grouped_titles[titulo] = {trofeu = trofeu, anos = {}, ano2s = {}} end table.insert(grouped_titles[titulo].anos, ano) table.insert(grouped_titles[titulo].ano2s, ano2) end -- Ordena os títulos com base na prioridade e, em seguida, organiza os anos local sorted_titles = {} for titulo, data in pairs(grouped_titles) do table.sort(data.anos) table.sort(data.ano2s) table.insert(sorted_titles, {titulo = titulo, data = data, priority = get_priority(titulo)}) end table.sort(sorted_titles, function(a, b) if a.priority == b.priority then return a.data.ano2s[1] < b.data.ano2s[1] -- Ordenar pelos anos se as prioridades forem iguais end return a.priority < b.priority end) -- Formata a saída local output = {} for _, entry in ipairs(sorted_titles) do local titulo = entry.titulo local data = entry.data -- Formata os anos com "e" antes do último ano local anos = {} for i, ano in ipairs(data.anos) do table.insert(anos, tostring(ano)) end local anos_formatados = table.concat(anos, ", ", 1, #anos - 1) if #anos > 1 then anos_formatados = anos_formatados .. " e " .. anos[#anos] else anos_formatados = anos[1] end -- Adiciona o título formatado à saída table.insert(output, string.format('%s %s: %s', data.trofeu, titulo, anos_formatados)) end return table.concat(output, "<br>") end return p