Módulo:Selected recent additions

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:Selected recent additions/doc

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