<?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%3AExcerpt_slideshow</id>
		<title>Module:Excerpt slideshow - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.agency/index.php?action=history&amp;feed=atom&amp;title=Module%3AExcerpt_slideshow"/>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Excerpt_slideshow&amp;action=history"/>
		<updated>2026-04-29T14:00:39Z</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:Excerpt_slideshow&amp;diff=9742&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Excerpt_slideshow&amp;diff=9742&amp;oldid=prev"/>
				<updated>2018-11-06T09:06:46Z</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:Excerpt_slideshow&amp;diff=9741&amp;oldid=prev</id>
		<title>Evad37: preprocess parser functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Excerpt_slideshow&amp;diff=9741&amp;oldid=prev"/>
				<updated>2018-10-05T02:45:06Z</updated>
		
		<summary type="html">&lt;p&gt;preprocess parser functions&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local excerptModule =  require(&amp;#039;Module:Excerpt&amp;#039;)&lt;br /&gt;
local slideshowModule = require(&amp;#039;Module:Random slideshow&amp;#039;)&lt;br /&gt;
local randomModule = require(&amp;#039;Module:Random&amp;#039;)&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) == &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;
--[[&lt;br /&gt;
	@param {String} wikitext: Wikitext of just the list (i.e. each line is a list item)&lt;br /&gt;
	@param {String} symbol:   Special character used in the wikitext markup for the list, e.g. &amp;#039;*&amp;#039; or &amp;#039;#&amp;#039;&lt;br /&gt;
	@param {String} outerTag: Text portion of the tag for each list or sublist, e.g. &amp;#039;ul&amp;#039; or &amp;#039;ol&amp;#039;&lt;br /&gt;
	@param {String} innerTag: Text portion of the tag for each list item, e.g. &amp;#039;li&amp;#039;&lt;br /&gt;
]]&lt;br /&gt;
local wikitextToHtmlList = function(wikitext, symbol, outerTag, innerTag)&lt;br /&gt;
	local listParts = {}&lt;br /&gt;
	for level, item in mw.ustring.gmatch(&amp;#039;\n&amp;#039;..wikitext..&amp;#039;\n&amp;#039;, &amp;#039;\n(%&amp;#039;..symbol..&amp;#039;+)(.-)%f[\n]&amp;#039;) do&lt;br /&gt;
	    table.insert(listParts, {level=level, item=item})&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listParts, {level=&amp;#039;&amp;#039;, item=&amp;#039;&amp;#039;})&lt;br /&gt;
	&lt;br /&gt;
	local htmlList = {}&lt;br /&gt;
	for i, this in ipairs( listParts ) do&lt;br /&gt;
		local isFirstItem = (i == 1)&lt;br /&gt;
		local isLastItem = (i == #listParts)&lt;br /&gt;
	    local lastLevel = isFirstItem and &amp;#039;&amp;#039; or listParts[i-1][&amp;#039;level&amp;#039;]&lt;br /&gt;
	    local tags&lt;br /&gt;
	    if #lastLevel == #this.level then&lt;br /&gt;
	    	tags = &amp;#039;&amp;lt;/&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;lt;&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;#039;&lt;br /&gt;
	    elseif #this.level &amp;gt; #lastLevel then&lt;br /&gt;
	    	tags = string.rep(&amp;#039;&amp;lt;&amp;#039;..outerTag..&amp;#039;&amp;gt;&amp;lt;&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;#039;, #this.level - #lastLevel)&lt;br /&gt;
	    elseif isLastItem then&lt;br /&gt;
	    	tags = string.rep(&amp;#039;&amp;lt;/&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;lt;/&amp;#039;..outerTag..&amp;#039;&amp;gt;&amp;#039;, #lastLevel)&lt;br /&gt;
	    else -- ( #this.level &amp;lt; #lastLevel ) and not last item&lt;br /&gt;
	    	tags = string.rep(&amp;#039;&amp;lt;/&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;lt;/&amp;#039;..outerTag..&amp;#039;&amp;gt;&amp;#039;, #lastLevel - #this.level ) .. &amp;#039;&amp;lt;/&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;lt;&amp;#039;..innerTag..&amp;#039;&amp;gt;&amp;#039;&lt;br /&gt;
	    end&lt;br /&gt;
	    table.insert(htmlList, tags .. this.item)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(htmlList)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	@param {String} wikitext: Wikitext excertp containg zero or more lists&lt;br /&gt;
	@param {String} symbol:   Special character used in the wikitext markup for the list, e.g. &amp;#039;*&amp;#039; or &amp;#039;#&amp;#039;&lt;br /&gt;
	@param {String} outerTag: Text portion of the tag for each list or sublist, e.g. &amp;#039;ul&amp;#039; or &amp;#039;ol&amp;#039;&lt;br /&gt;
	@param {String} innerTag: Text portion of the tag for each list item, e.g. &amp;#039;li&amp;#039;&lt;br /&gt;
]]&lt;br /&gt;
local gsubWikitextLists = function(wikitext, symbol, outerTag, innerTag)&lt;br /&gt;
	-- temporarily remove list linebreaks... &lt;br /&gt;
	wikitext = mw.ustring.gsub(wikitext..&amp;#039;\n&amp;#039;, &amp;#039;\n%&amp;#039;..symbol, &amp;#039;¿¿¿&amp;#039;..symbol) &lt;br /&gt;
	-- ...so we can grab the whole list (and just the list)...&lt;br /&gt;
	return mw.ustring.gsub(&lt;br /&gt;
		wikitext,&lt;br /&gt;
		&amp;#039;¿¿¿%&amp;#039;..symbol..&amp;#039;[^\n]+&amp;#039;, &lt;br /&gt;
		function(listWikitext)&lt;br /&gt;
			-- ...and then reinstate linebreaks...&lt;br /&gt;
			listWikitext = mw.ustring.gsub(listWikitext, &amp;#039;¿¿¿%&amp;#039;..symbol, &amp;#039;\n&amp;#039;..symbol)&lt;br /&gt;
			-- ...and finally do the conversion&lt;br /&gt;
			return wikitextToHtmlList(listWikitext, symbol, outerTag, innerTag)&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local replacePipesWithMagicword = function(t)&lt;br /&gt;
	return mw.ustring.gsub(t, &amp;#039;|&amp;#039;, &amp;#039;{{!}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ help gsub strip tables and templates that aren&amp;#039;t part of the prose,&lt;br /&gt;
     and remove linebreaks from within other templates,&lt;br /&gt;
     and preprocess parser functions ]]&lt;br /&gt;
local processBraces = function(t)&lt;br /&gt;
	local isTable = mw.ustring.sub(mw.text.trim(t), 2, 2) == &amp;#039;|&amp;#039;&lt;br /&gt;
	if isTable then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- else it&amp;#039;s a template or parser function&lt;br /&gt;
	local first = mw.ustring.sub(t, 1, 1)&lt;br /&gt;
	local last = mw.ustring.sub(t, -1)&lt;br /&gt;
	local isNotPartOfProse = first == &amp;#039;\n&amp;#039; and last == &amp;#039;\n&amp;#039;&lt;br /&gt;
	if isNotPartOfProse then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local isParserFunction = mw.ustring.sub(mw.text.trim(t), 3, 3) == &amp;#039;#&amp;#039;&lt;br /&gt;
	if isParserFunction then&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		return frame:preprocess(t)&lt;br /&gt;
	end&lt;br /&gt;
	-- else replace pipes and remove internal linebreaks&lt;br /&gt;
	return replacePipesWithMagicword(mw.ustring.gsub(t, &amp;#039;\n*&amp;#039;, &amp;#039;&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local makeGalleryArgs = function(titles, options, limit)&lt;br /&gt;
	options.nostubs = true&lt;br /&gt;
	local galleryArgs = {}&lt;br /&gt;
	local titlesSequence = {}&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while titles[i] do&lt;br /&gt;
		titlesSequence[i] = titles[i]&lt;br /&gt;
		i  = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	local randomTitles = randomModule.main(&amp;#039;array&amp;#039;, {t=titlesSequence, limit=limit})&lt;br /&gt;
	for _, title in pairs(randomTitles) do&lt;br /&gt;
		local excerpt = mw.text.trim(excerptModule.main({title}, options))&lt;br /&gt;
		if excerpt and excerpt ~= &amp;#039;&amp;#039; and #excerpt &amp;gt; 10 then&lt;br /&gt;
			-- temporarily take off the &amp;#039;&amp;#039;&amp;#039;[[Page title|Read more...]]&amp;#039;&amp;#039;&amp;#039; link if present&lt;br /&gt;
			readmore_start_index, readmore_end_index, readmore_text = mw.ustring.find(excerpt, &amp;quot;(&amp;#039;&amp;#039;&amp;#039;%b[]&amp;#039;&amp;#039;&amp;#039;)$&amp;quot;, -350) --- Starting from end should improve efficiency. 350 characters allows for long page titles and/or a long custom label for the link&lt;br /&gt;
			if readmore_start_index then&lt;br /&gt;
				excerpt = mw.ustring.sub(excerpt, 1, readmore_start_index-2)&lt;br /&gt;
			end&lt;br /&gt;
			-- strip galleries&lt;br /&gt;
			excerpt = mw.ustring.gsub(excerpt, &amp;quot;&amp;lt;%s*[Gg]allery.-&amp;gt;.-&amp;lt;%s*/%s*[Gg]allery%s*&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			-- strip tables and block templates; strip newlines and replace pipes within inline templates&lt;br /&gt;
			excerpt = mw.ustring.gsub(excerpt..&amp;#039;\n&amp;#039;, &amp;#039;\n?%b{}\n?&amp;#039;, processBraces)&lt;br /&gt;
			-- replace pipes within links&lt;br /&gt;
			excerpt = mw.ustring.gsub(excerpt, &amp;#039;%b[]&amp;#039;, replacePipesWithMagicword)&lt;br /&gt;
			-- replace other pipes with html entity&lt;br /&gt;
			excerpt = mw.ustring.gsub(excerpt, &amp;#039;|&amp;#039;, &amp;#039;&amp;amp;#124;&amp;#039;)&lt;br /&gt;
			-- replace wikitext bulleted lists with html bulleted lists&lt;br /&gt;
			excerpt = gsubWikitextLists(excerpt, &amp;#039;*&amp;#039;, &amp;#039;ul&amp;#039;, &amp;#039;li&amp;#039;)&lt;br /&gt;
			-- replace wikitext numbered lists with html numbered lists&lt;br /&gt;
			excerpt = gsubWikitextLists(excerpt, &amp;#039;#&amp;#039;, &amp;#039;ol&amp;#039;, &amp;#039;li&amp;#039;)&lt;br /&gt;
			excerpt = mw.text.trim(excerpt)&lt;br /&gt;
			-- add back the &amp;quot;Read more...&amp;quot; link if it was present&lt;br /&gt;
			if readmore_text then&lt;br /&gt;
				excerpt = excerpt .. &amp;quot; &amp;quot; .. readmore_text&lt;br /&gt;
			end&lt;br /&gt;
			local text = &amp;#039;&amp;lt;div style{{=}}text-align:left;&amp;gt;&amp;#039; .. mw.ustring.gsub(excerpt, &amp;#039;%c&amp;#039;, &amp;#039;&amp;lt;br&amp;gt;&amp;#039;) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			table.insert(galleryArgs, &amp;#039;File:Blank.png&amp;#039;)&lt;br /&gt;
			table.insert(galleryArgs, text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return galleryArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local makeOptions = function(args)&lt;br /&gt;
	local options = args -- pick up miscellaneous options: more, errors, fileargs&lt;br /&gt;
	options.paraflags = excerptModule.numberflags(args.paragraphs or &amp;quot;&amp;quot;) -- parse paragraphs, e.g. &amp;quot;1,3-5&amp;quot; → {&amp;quot;1&amp;quot;,&amp;quot;3-5&amp;quot;}&lt;br /&gt;
	options.fileflags = excerptModule.numberflags(args.files or &amp;quot;&amp;quot;) -- parse file numbers&lt;br /&gt;
	return options&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local isArticle = function(pagetitle)&lt;br /&gt;
	local titleObject = mw.title.new(pagetitle)&lt;br /&gt;
	return ( titleObject and titleObject.namespace == 0 ) and true or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getLinkedTitles = function(args, method, limit)&lt;br /&gt;
	local pagenames = {}&lt;br /&gt;
	local ii = 1&lt;br /&gt;
	local isNotCategory&lt;br /&gt;
	while args[ii] and ii &amp;lt; limit do&lt;br /&gt;
		local pageContent = excerptModule.getContent(args[ii])&lt;br /&gt;
		if pageContent then&lt;br /&gt;
			local pageSection = args[&amp;quot;section&amp;quot;..ii] or args[&amp;quot;section&amp;quot;]&lt;br /&gt;
			local sectionOnly = args[&amp;quot;sectiononly&amp;quot;..ii] or args[&amp;quot;sectiononly&amp;quot;]&lt;br /&gt;
			local text = pageContent&lt;br /&gt;
			if pageSection then -- check relevant section only&lt;br /&gt;
				text = excerptModule.getsection(pageContent, pageSection, sectionOnly) or pageContent&lt;br /&gt;
			end&lt;br /&gt;
			-- replace annotated links with real links&lt;br /&gt;
			text = mw.ustring.gsub(text, &amp;quot;{{%s*[Aa]nnotated[ _]link%s*|%s*(.-)%s*}}&amp;quot;, &amp;quot;[[%1]]&amp;quot;)&lt;br /&gt;
			if method == &amp;quot;linked&amp;quot; then&lt;br /&gt;
				for p in mw.ustring.gmatch(text, &amp;quot;%[%[%s*([^%]|\n]*)&amp;quot;) do&lt;br /&gt;
					if isArticle(p) then&lt;br /&gt;
						table.insert(pagenames, p)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- listitem: first wikilink on a line beginning *, :#, etc. except in &amp;quot;See also&amp;quot; or later section&lt;br /&gt;
				text = mw.ustring.gsub(text, &amp;quot;\n== *See also.*&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
				for p in mw.ustring.gmatch(text, &amp;quot;\n:*[%*#][^\n]-%[%[%s*([^%]|\n]*)&amp;quot;) do&lt;br /&gt;
					if isArticle(p) then&lt;br /&gt;
						table.insert(pagenames, p)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end	&lt;br /&gt;
		end&lt;br /&gt;
		ii = ii + 1&lt;br /&gt;
	end&lt;br /&gt;
	return pagenames&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Template entry points:&lt;br /&gt;
&lt;br /&gt;
-- randomExcerpt: Titles specified in template parameters (equivalent to {{Transclude random excerpt}})&lt;br /&gt;
p.randomExcerpt = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local output = p._excerpt(parent.args, &amp;#039;random&amp;#039;)&lt;br /&gt;
	return frame:preprocess(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- linkedExcerpt: Titles from links on one or more pages (similar to {{Transclude linked excerpt}})&lt;br /&gt;
p.linkedExcerpt = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local output = p._excerpt(parent.args, &amp;#039;linked&amp;#039;)&lt;br /&gt;
	return frame:preprocess(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- listItemExcerpt: Titles from linked list items one one or more pages (similar to {{Transclude list item excerpt}})&lt;br /&gt;
p.listItemExcerpt = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local output = p._excerpt(parent.args, &amp;#039;listitem&amp;#039;)&lt;br /&gt;
	return frame:preprocess(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Module entry point:&lt;br /&gt;
&lt;br /&gt;
p._excerpt = function(_args, method)&lt;br /&gt;
	local args = cleanupArgs(_args)&lt;br /&gt;
	-- check for blank value in more parameter&lt;br /&gt;
	if _args.more and not args.more then&lt;br /&gt;
		args.more = &amp;quot;Read more...&amp;quot; -- default text for blank more=&lt;br /&gt;
	end&lt;br /&gt;
	local galleryArgs = {}&lt;br /&gt;
	local options = makeOptions(args)&lt;br /&gt;
	local limit = args.limit and tonumber(args.limit) or 50&lt;br /&gt;
	local titles&lt;br /&gt;
	if method == &amp;#039;linked&amp;#039; or method == &amp;#039;listitem&amp;#039; then&lt;br /&gt;
		titles = getLinkedTitles(args, method, 50)&lt;br /&gt;
	else&lt;br /&gt;
		titles = args&lt;br /&gt;
	end&lt;br /&gt;
	local galleryArgs = makeGalleryArgs(titles, options, limit)&lt;br /&gt;
	return slideshowModule._main(galleryArgs, false, &amp;#039;excerptSlideshow-container&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Evad37</name></author>	</entry>

	</feed>