Módulo:Selected recent additions – Wikipédia, a enciclopédia livre
Este módulo está classificado como alfa. Ele está pronto para aceitar dados de terceiros, e pode ser utilizado em algumas páginas para ver se aparecem problemas, mas deve ser vigiado. Sugestões para novas funções ou alterações dos seus mecanismos de dados de entrada e saída são bem-vindas. |
Este módulo depende dos seguintes outros módulos: |
Uso
[editar código-fonte]{{#invoke:Selected recent additions|main}}
Argumentos provem da predefinição parente {{Transclude selected recent additions}}; ver a documentação para detalhes.
Ver também
[editar código-fonte]
local randomModule = require('Module:Random') function cleanupArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then cleanArgs[key] = val end else cleanArgs[key] = val end end return cleanArgs end function isAffirmed(val) if not(val) then return false end local affirmedWords = ' add added affirm affirmed include included on true yes y adicionar adicionado afirmar afirmado incluír incluído ligado sim s' return string.find(affirmedWords, ' '..string.lower(val)..' ', 1, true ) and true or false end function makeOutput(allItems, maxItems, more, notRandom) local output if notRandom then output = '' local itemIndex = 1 local maxCount = math.min(#allItems, maxItems) while itemIndex <= maxCount do output = output .. allItems[itemIndex] .. '\n' itemIndex = itemIndex + 1 end else local randomiseArgs = { ['t'] = allItems, ['limit'] = maxItems } local randomisedItems = randomModule.main('array', randomiseArgs ) output = table.concat(randomisedItems, '\n') end if more then output = output .. more end return mw.text.trim(output) end function cleanForPatternMatching(wikitext) -- remove wikilink brackets local cleaned = mw.ustring.gsub(wikitext, "%[%[(.-)%]%]","%1") -- remove pipes that would have been in piped links cleaned = mw.ustring.gsub(cleaned, "%|"," ") -- remove external links cleaned = mw.ustring.gsub(cleaned, "%[.-%]"," ") return cleaned end function makeCollapsed(outerText, innerText) return "{{Hidden begin | titlestyle = font-weight:normal | title = " .. outerText .. "}}" .. innerText .. "{{Hidden end}}" end -- Get current events for a "Até YYYY de Month de D. Returns a table of list items. function getRecentAdditions(subpage, keepPatterns, skipPatterns, showWikitext) local title = mw.title.new('Wikipédia:Sabia que/Arquivo/' .. subpage) local raw = title:getContent() local itemPattern = '%*%s?%.?%.?%.?%.?%.?%.[%S ]*' local items = {} for item in mw.ustring.gmatch(raw, itemPattern) do local keep = false local skip = false local isListItem = ( string.sub(item, 0, 1) == '*' ) if isListItem then local text = cleanForPatternMatching(item) for ii, keepPatt in pairs(keepPatterns) do if not keep and mw.ustring.find(text, keepPatt) then keep = true end end if #skipPatterns > 0 then for iii, skipPatt in pairs(skipPatterns) do if not skip and mw.ustring.find(text, skipPatt) then skip = true end end end end if keep and not skip then -- remove (pictured) inline note local cleanItem = mw.ustring.gsub(item, "%s*''%(.-pictured.-%)''", "") -- remove (illustrated) inline note cleanItem = mw.ustring.gsub(cleanItem, "%s*''%(.-illustrated.-%)''", "") if showWikitext then -- remove html comments cleanItem = mw.ustring.gsub(cleanItem, "%<%!%-%-(.-)%-%-%>", "") local itemWikitext = "<pre>" .. mw.text.nowiki( cleanItem ) .. "</pre>" cleanItem = makeCollapsed(cleanItem, itemWikitext) end table.insert(items, cleanItem) end end return items end function getItems(patterns, skipPatterns, showWikitext) local allItems = {} local lang = mw.language.new('pt') local currentYear = tonumber(lang:formatDate('Y', 'now')) local yearsAgo = 2006 while yearsAgo < currentYear do subpage = yearsAgo local yearlyItems = getRecentAdditions(subpage, patterns, skipPatterns, showWikitext) for i, item in ipairs(yearlyItems) do table.insert(allItems, item) end yearsAgo = yearsAgo + 1 end return allItems end function getPatterns(args, prefix) local patterns = {} local ii = 1 while args[prefix and prefix..ii or ii] do patterns[ii] = args[prefix and prefix..ii or ii] ii = ii + 1 end return patterns end local p = {} p.main = function(frame) local parent = frame.getParent(frame) local parentArgs = parent.args local args = cleanupArgs(parentArgs) if args['not'] and not args['not1'] then args['not1'] = args['not'] end local patterns = getPatterns(args) if #patterns < 1 then return error("Texto de procura não informado") end local skipPatterns = getPatterns(args, 'not') local showWikitext = isAffirmed(args.wikitext) local allItems = getItems(patterns, skipPatterns, showWikitext) if #allItems < 1 then return args.header and '' or args.none or 'Sem adições recentes' end local maxItems = tonumber(args.max) or 6 local more = args.more if isAffirmed(args.more) then more = "'''[[Wikipédia:Sabia que/Arquivo|Mais arquivos...]]'''" end local nonRandom = isAffirmed(args.latest) local output = makeOutput(allItems, maxItems, more, nonRandom) if args.header then output = args.header .. '\n' .. output .. '\n' .. (args.footer or '{{Box-footer}}') end local needsExpansion = mw.ustring.find(output, '{{', 0, true) if needsExpansion then return frame:preprocess(output) else return output end end return p