<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.filipefonseca.pt/index.php?action=history&amp;feed=atom&amp;title=Module%3ASelected_recent_additions</id>
	<title>Module:Selected recent additions - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.filipefonseca.pt/index.php?action=history&amp;feed=atom&amp;title=Module%3ASelected_recent_additions"/>
	<link rel="alternate" type="text/html" href="http://wiki.filipefonseca.pt/index.php?title=Module:Selected_recent_additions&amp;action=history"/>
	<updated>2026-04-19T07:57:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>http://wiki.filipefonseca.pt/index.php?title=Module:Selected_recent_additions&amp;diff=8807&amp;oldid=prev</id>
		<title>imported&gt;Evad37: allow wikitext to be shown alongside items, for when the template is just used to generate suggestions</title>
		<link rel="alternate" type="text/html" href="http://wiki.filipefonseca.pt/index.php?title=Module:Selected_recent_additions&amp;diff=8807&amp;oldid=prev"/>
		<updated>2019-03-09T07:31:27Z</updated>

		<summary type="html">&lt;p&gt;allow wikitext to be shown alongside items, for when the template is just used to generate suggestions&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local randomModule = require('Module:Random')&lt;br /&gt;
&lt;br /&gt;
function cleanupArgs(argsTable)&lt;br /&gt;
	local cleanArgs = {}&lt;br /&gt;
	for key, val in pairs(argsTable) do&lt;br /&gt;
		if type(val) == 'string' then&lt;br /&gt;
			val = val:match('^%s*(.-)%s*$')&lt;br /&gt;
			if val ~= '' then&lt;br /&gt;
				cleanArgs[key] = val&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			cleanArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return cleanArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function isAffirmed(val)&lt;br /&gt;
	if not(val) then return false end&lt;br /&gt;
	local affirmedWords = ' add added affirm affirmed include included on true yes y '&lt;br /&gt;
	return string.find(affirmedWords, ' '..string.lower(val)..' ', 1, true ) and true or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeOutput(allItems, maxItems, more, notRandom)&lt;br /&gt;
	local output&lt;br /&gt;
	if notRandom then&lt;br /&gt;
		output = ''&lt;br /&gt;
		local itemIndex = 1&lt;br /&gt;
		local maxCount = math.min(#allItems, maxItems)&lt;br /&gt;
		while itemIndex &amp;lt;= maxCount do&lt;br /&gt;
			output = output .. allItems[itemIndex] .. '\n'&lt;br /&gt;
			itemIndex = itemIndex + 1&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local randomiseArgs = {&lt;br /&gt;
			['t'] = allItems,&lt;br /&gt;
			['limit'] = maxItems&lt;br /&gt;
		}&lt;br /&gt;
		local randomisedItems = randomModule.main('array', randomiseArgs )&lt;br /&gt;
		output = table.concat(randomisedItems, '\n')&lt;br /&gt;
	end&lt;br /&gt;
	if more then&lt;br /&gt;
		output = output .. more&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.trim(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function cleanForPatternMatching(wikitext)&lt;br /&gt;
	-- remove wikilink brackets&lt;br /&gt;
	local cleaned = mw.ustring.gsub(wikitext, &amp;quot;%[%[(.-)%]%]&amp;quot;,&amp;quot;%1&amp;quot;)&lt;br /&gt;
	-- remove pipes that would have been in piped links&lt;br /&gt;
	cleaned = mw.ustring.gsub(cleaned, &amp;quot;%|&amp;quot;,&amp;quot; &amp;quot;)&lt;br /&gt;
	-- remove external links&lt;br /&gt;
	cleaned = mw.ustring.gsub(cleaned, &amp;quot;%[.-%]&amp;quot;,&amp;quot; &amp;quot;)&lt;br /&gt;
	return cleaned&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeCollapsed(outerText, innerText)&lt;br /&gt;
	return &amp;quot;{{Hidden begin | titlestyle = font-weight:normal | title = &amp;quot; .. outerText .. &amp;quot;}}&amp;quot; .. innerText .. &amp;quot;{{Hidden end}}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Get current events for a &amp;quot;YYYY Month D&amp;quot; date. Returns a table of list items.&lt;br /&gt;
function getRecentAdditions(subpage, keepPatterns, skipPatterns, showWikitext)&lt;br /&gt;
	local title = mw.title.new('Wikipedia:Recent additions' .. subpage)&lt;br /&gt;
	local raw = title:getContent()&lt;br /&gt;
	local itemPattern = '%*%s?%.%.%.[%S ]*'&lt;br /&gt;
	local items = {}&lt;br /&gt;
	for item in mw.ustring.gmatch(raw, itemPattern) do&lt;br /&gt;
		local keep = false&lt;br /&gt;
		local skip = false&lt;br /&gt;
		local isListItem = ( string.sub(item, 0, 1) == '*' )&lt;br /&gt;
		if isListItem then&lt;br /&gt;
			local text = cleanForPatternMatching(item)&lt;br /&gt;
			for ii, keepPatt in pairs(keepPatterns) do&lt;br /&gt;
				if not keep and mw.ustring.find(text, keepPatt) then&lt;br /&gt;
					keep = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if #skipPatterns &amp;gt; 0 then&lt;br /&gt;
				for iii, skipPatt in pairs(skipPatterns) do&lt;br /&gt;
					if not skip and mw.ustring.find(text, skipPatt) then&lt;br /&gt;
						skip = true			&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if keep and not skip then&lt;br /&gt;
			-- remove (pictured) inline note&lt;br /&gt;
			local cleanItem = mw.ustring.gsub(item, &amp;quot;%s*''%(.-pictured.-%)''&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			-- remove (illustrated) inline note&lt;br /&gt;
			cleanItem = mw.ustring.gsub(cleanItem, &amp;quot;%s*''%(.-illustrated.-%)''&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			if showWikitext then&lt;br /&gt;
				-- remove html comments&lt;br /&gt;
				cleanItem = mw.ustring.gsub(cleanItem, &amp;quot;%&amp;lt;%!%-%-(.-)%-%-%&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				local itemWikitext = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.nowiki( cleanItem ) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
				cleanItem = makeCollapsed(cleanItem, itemWikitext)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(items, cleanItem)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return items&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getItems(maxMonths, patterns, skipPatterns, showWikitext)&lt;br /&gt;
	local allItems = {}&lt;br /&gt;
	local lang = mw.language.new('en')&lt;br /&gt;
	local currentYear  = tonumber(lang:formatDate('Y', 'now'))&lt;br /&gt;
	local currentMonth = tonumber(lang:formatDate('n', 'now'))&lt;br /&gt;
	local monthsAgo = 0&lt;br /&gt;
	while monthsAgo &amp;lt; maxMonths do&lt;br /&gt;
		local subpage&lt;br /&gt;
		if monthsAgo == 0 then&lt;br /&gt;
			subpage = ''&lt;br /&gt;
		else&lt;br /&gt;
			local year = currentYear - math.modf( (monthsAgo+12-currentMonth)/12 ) &lt;br /&gt;
			local month = math.fmod(12 + currentMonth - math.fmod(monthsAgo, 12), 12)&lt;br /&gt;
			month = ( month ~= 0 ) and month or 12&lt;br /&gt;
			subpage = lang:formatDate('/Y/F', year .. '-' .. month)&lt;br /&gt;
		end&lt;br /&gt;
		local monthlyItems = getRecentAdditions(subpage, patterns, skipPatterns, showWikitext)&lt;br /&gt;
		for i, item in ipairs(monthlyItems) do&lt;br /&gt;
			table.insert(allItems, item)&lt;br /&gt;
		end&lt;br /&gt;
		monthsAgo = monthsAgo + 1&lt;br /&gt;
	end&lt;br /&gt;
	return allItems&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getPatterns(args, prefix)&lt;br /&gt;
	local patterns = {}&lt;br /&gt;
	local ii = 1&lt;br /&gt;
	while args[prefix and prefix..ii or ii] do&lt;br /&gt;
		patterns[ii] = args[prefix and prefix..ii or ii]&lt;br /&gt;
		ii = ii + 1&lt;br /&gt;
	end&lt;br /&gt;
	return patterns&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
p.main = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local parentArgs = parent.args&lt;br /&gt;
	local args = cleanupArgs(parentArgs)&lt;br /&gt;
&lt;br /&gt;
	if args['not'] and not args['not1'] then&lt;br /&gt;
		args['not1'] = args['not']&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local patterns = getPatterns(args)&lt;br /&gt;
	if #patterns &amp;lt; 1 then&lt;br /&gt;
		return error(&amp;quot;Search pattern not set&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local skipPatterns = getPatterns(args, 'not')&lt;br /&gt;
&lt;br /&gt;
	local months = tonumber(args.months) or 30&lt;br /&gt;
	&lt;br /&gt;
	local showWikitext = isAffirmed(args.wikitext)&lt;br /&gt;
&lt;br /&gt;
	local allItems = getItems(months, patterns, skipPatterns, showWikitext)&lt;br /&gt;
	if #allItems &amp;lt; 1 then&lt;br /&gt;
		return args.header and '' or args.none or 'No recent additions'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local maxItems = tonumber(args.max) or 6&lt;br /&gt;
&lt;br /&gt;
	local more = args.more&lt;br /&gt;
	if isAffirmed(args.more) then&lt;br /&gt;
		more = &amp;quot;'''[[Wikipedia:Recent additions|More recent additions...]]'''&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nonRandom = isAffirmed(args.latest)&lt;br /&gt;
&lt;br /&gt;
	local output = makeOutput(allItems, maxItems, more, nonRandom)&lt;br /&gt;
	if args.header then&lt;br /&gt;
		output = args.header .. '\n' .. output .. '\n' .. (args.footer or '{{Box-footer}}')&lt;br /&gt;
	end&lt;br /&gt;
	local needsExpansion = mw.ustring.find(output, '{{', 0, true)	&lt;br /&gt;
	if needsExpansion then&lt;br /&gt;
		return frame:preprocess(output)&lt;br /&gt;
	else &lt;br /&gt;
		return output&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Evad37</name></author>
	</entry>
</feed>