<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3ASelected_current_events</id>
	<title>Module:Selected current events - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Module%3ASelected_current_events"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Selected_current_events&amp;action=history"/>
	<updated>2026-06-26T06:13:13Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Module:Selected_current_events&amp;diff=3390775&amp;oldid=prev</id>
		<title>imported&gt;Njzjz 来自 2020年3月19日 (四) 21:17</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Module:Selected_current_events&amp;diff=3390775&amp;oldid=prev"/>
		<updated>2020-03-19T21:17:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&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;
			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:bold;&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;
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;
function reverse(tbl)&lt;br /&gt;
  for i=1, math.floor(#tbl / 2) do&lt;br /&gt;
    tbl[i], tbl[#tbl - i + 1] = tbl[#tbl - i + 1], tbl[i]&lt;br /&gt;
  end&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, showWikitext)&lt;br /&gt;
	local title = mw.title.new( date)&lt;br /&gt;
	local raw = title:getContent()&lt;br /&gt;
	if (not raw) or raw == &amp;#039;&amp;#039; then&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
	local lines = mw.text.split( raw , &amp;#039;\n&amp;#039;)&lt;br /&gt;
	reverse(lines)&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 previousItemPrefix = &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 isSublistItem = ( string.sub( v, 0, 2 ) == &amp;#039;**&amp;#039; )&lt;br /&gt;
		local isListItem = not isSublistItem and ( string.sub( v, 0, 1) == &amp;#039;*&amp;#039; )&lt;br /&gt;
		local hasSublistItem = isListItem and i &amp;lt; #lines and ( string.sub( lines[i+1], 0, 2 ) == &amp;#039;**&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		if hasSublistItem then&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 isListItem then&lt;br /&gt;
			itemHeading = &amp;quot;&amp;quot;&lt;br /&gt;
			cleanItemHeading = &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if (isListItem and not hasSublistItem) or 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;
&lt;br /&gt;
		if keep and not skip then&lt;br /&gt;
			local itemPrefix = &amp;quot;;&amp;quot; .. formattedDate&lt;br /&gt;
			if itemHeading ~= &amp;quot;&amp;quot; then itemPrefix = itemPrefix .. &amp;quot; &amp;#039;&amp;#039;&amp;#039;&amp;quot;..itemHeading..&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; end&lt;br /&gt;
			itemPrefix = itemPrefix .. &amp;quot;\n* &amp;quot;&lt;br /&gt;
			if previousItemPrefix == itemPrefix then&lt;br /&gt;
				itemPrefix = &amp;#039;* &amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				previousItemPrefix = itemPrefix&lt;br /&gt;
			end&lt;br /&gt;
			local item = mw.ustring.gsub(v, &amp;#039;%*+&amp;#039;, itemPrefix)&lt;br /&gt;
			if showWikitext then&lt;br /&gt;
				-- remove html comments&lt;br /&gt;
				local itemWikitext = mw.ustring.gsub(item, &amp;quot;%&amp;lt;%!%-%-(.-)%-%-%&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				-- remove prefix from wikitext&lt;br /&gt;
				itemWikitext = mw.ustring.gsub(itemWikitext, &amp;quot;;(.-)\n&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				itemWikitext = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.nowiki( itemWikitext ) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
				-- remove prefix from item&lt;br /&gt;
				itemWithoutPrexix = mw.ustring.gsub(v, &amp;#039;%*+&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
				item = itemPrefix .. makeCollapsed(itemWithoutPrexix, itemWikitext)&lt;br /&gt;
			end&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, showWikitext)&lt;br /&gt;
	local allItems = {}&lt;br /&gt;
	local lang = mw.language.new(&amp;#039;zh&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年M&amp;#039;, &amp;#039;now - &amp;#039;..daysAgo..&amp;#039; months&amp;#039;)&lt;br /&gt;
		local dailyItems = getCurrentEvents(day, mdyDates, patterns, skipPatterns, showWikitext)&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.months) or 3&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 showWikitext = isAffirmed(args.wikitext)&lt;br /&gt;
&lt;br /&gt;
	local allItems = getItems(days, mdyDates, patterns, skipPatterns, showWikitext)&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;没有更多动态&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|更多动态]]&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>imported&gt;Njzjz</name></author>
	</entry>
</feed>