<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.agency/index.php?action=history&amp;feed=atom&amp;title=Module%3ASelected_current_events</id>
		<title>Module:Selected current events - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.agency/index.php?action=history&amp;feed=atom&amp;title=Module%3ASelected_current_events"/>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Selected_current_events&amp;action=history"/>
		<updated>2026-04-29T05:30:04Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.1</generator>

	<entry>
		<id>https://wiki.agency/index.php?title=Module:Selected_current_events&amp;diff=9748&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Selected_current_events&amp;diff=9748&amp;oldid=prev"/>
				<updated>2018-11-06T09:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 09:06, 6 November 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>https://wiki.agency/index.php?title=Module:Selected_current_events&amp;diff=9747&amp;oldid=prev</id>
		<title>Evad37: allow header and footer to be specified in args</title>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Selected_current_events&amp;diff=9747&amp;oldid=prev"/>
				<updated>2018-08-02T09:44:22Z</updated>
		
		<summary type="html">&lt;p&gt;allow header and footer to be specified in args&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&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) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			val = val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
			if val ~= &amp;#039;&amp;#039; 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 = &amp;#039; add added affirm affirmed include included on true yes y &amp;#039;&lt;br /&gt;
	return string.find(affirmedWords, &amp;#039; &amp;#039;..string.lower(val)..&amp;#039; &amp;#039;, 1, true ) and true or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeOutput(allItems, maxItems, more)&lt;br /&gt;
	local output = &amp;#039;&amp;#039;&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] .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		itemIndex = itemIndex + 1&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 formatDateString(dateString, mdyDates)&lt;br /&gt;
	if mdyDates then&lt;br /&gt;
		formattedDatePattern = &amp;quot;%2 %3, %1&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		formattedDatePattern = &amp;quot;%3 %2 %1&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span style=&amp;quot;font-weight:normal;&amp;quot;&amp;gt;&amp;#039; .. string.gsub(dateString, &amp;quot;(.*) (.*) (.*)&amp;quot;, formattedDatePattern) .. &amp;#039; –&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&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 getCurrentEvents(date, mdyDates, keepPatterns, skipPatterns)&lt;br /&gt;
	local title = mw.title.new(&amp;quot;Portal:Current events/&amp;quot; .. date)&lt;br /&gt;
	local raw = title:getContent()&lt;br /&gt;
	local lines = mw.text.split( raw , &amp;#039;\n&amp;#039;)&lt;br /&gt;
	local items = {}&lt;br /&gt;
	local itemHeading = &amp;#039;&amp;#039;&lt;br /&gt;
	local cleanItemHeading = &amp;#039;&amp;#039;&lt;br /&gt;
	local previousItemHeading = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local formattedDate = formatDateString(date, mdyDates)&lt;br /&gt;
&lt;br /&gt;
	for i, v in ipairs(lines) do&lt;br /&gt;
		local keep = false&lt;br /&gt;
		local skip = false&lt;br /&gt;
		local isListItem = ( string.sub( v, 0, 1) == &amp;#039;*&amp;#039; )&lt;br /&gt;
		local isSublistItem = ( string.sub( v, 0, 2 ) == &amp;#039;**&amp;#039; )&lt;br /&gt;
		if isListItem and not isSublistItem then&lt;br /&gt;
			previousItemHeading = itemHeading&lt;br /&gt;
			itemHeading = mw.text.trim(mw.ustring.gsub(v, &amp;#039;%*&amp;#039;, &amp;#039;&amp;#039;, 1))&lt;br /&gt;
			cleanItemHeading = cleanForPatternMatching(itemHeading)&lt;br /&gt;
		elseif isSublistItem  then&lt;br /&gt;
			local text = cleanForPatternMatching(v)&lt;br /&gt;
			for ii, keepPatt in pairs(keepPatterns) do&lt;br /&gt;
				if not keep and ( mw.ustring.find(text, keepPatt) or mw.ustring.find(cleanItemHeading, 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) or mw.ustring.find(cleanItemHeading, 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;
			local itemPrefix = &amp;#039;:&amp;#039;&lt;br /&gt;
			if previousItemHeading ~= itemHeading then &lt;br /&gt;
				itemPrefix = &amp;quot;;&amp;quot;..formattedDate..&amp;quot; &amp;#039;&amp;#039;&amp;#039;&amp;quot;..itemHeading..&amp;quot;&amp;#039;&amp;#039;&amp;#039;\n:&amp;quot;&lt;br /&gt;
				previousItemHeading = itemHeading&lt;br /&gt;
			end&lt;br /&gt;
			local item = mw.ustring.gsub(v, &amp;#039;%*+&amp;#039;, itemPrefix)&lt;br /&gt;
			table.insert(items, item)&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(maxDays, mdyDates, patterns, skipPatterns)&lt;br /&gt;
	local allItems = {}&lt;br /&gt;
	local lang = mw.language.new(&amp;#039;en&amp;#039;)&lt;br /&gt;
	local daysAgo = 0&lt;br /&gt;
	while daysAgo &amp;lt; maxDays do&lt;br /&gt;
		local day = lang:formatDate(&amp;#039;Y F j&amp;#039;, &amp;#039;now - &amp;#039;..daysAgo..&amp;#039; days&amp;#039;)&lt;br /&gt;
		local dailyItems = getCurrentEvents(day, mdyDates, patterns, skipPatterns)&lt;br /&gt;
		for i, item in ipairs(dailyItems) do&lt;br /&gt;
			table.insert(allItems, item)&lt;br /&gt;
		end&lt;br /&gt;
		daysAgo = daysAgo + 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[&amp;#039;not&amp;#039;] and not args[&amp;#039;not1&amp;#039;] then&lt;br /&gt;
		args[&amp;#039;not1&amp;#039;] = args[&amp;#039;not&amp;#039;]&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, &amp;#039;not&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local days = tonumber(args.days) or 30&lt;br /&gt;
&lt;br /&gt;
	local mdyDates = args.dates and string.lower(args.dates) == &amp;#039;mdy&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local allItems = getItems(days, mdyDates, patterns, skipPatterns)&lt;br /&gt;
	if #allItems &amp;lt; 1 then&lt;br /&gt;
		return args.header and &amp;#039;&amp;#039; or args.none or &amp;#039;No recent news&amp;#039;&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;&amp;#039;&amp;#039;&amp;#039;[[Portal:Current events|More current events...]]&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local output = makeOutput(allItems, maxItems, more)&lt;br /&gt;
	if args.header then&lt;br /&gt;
		output = args.header .. &amp;#039;\n&amp;#039; .. output .. &amp;#039;\n&amp;#039; .. (args.footer or &amp;#039;{{Box-footer}}&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local needsExpansion = mw.ustring.find(output, &amp;#039;{{&amp;#039;, 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;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Evad37</name></author>	</entry>

	</feed>