<?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%3AExcerpt_slideshow</id>
	<title>Module:Excerpt slideshow - 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%3AExcerpt_slideshow"/>
	<link rel="alternate" type="text/html" href="http://wiki.filipefonseca.pt/index.php?title=Module:Excerpt_slideshow&amp;action=history"/>
	<updated>2026-04-19T06:14:21Z</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:Excerpt_slideshow&amp;diff=8789&amp;oldid=prev</id>
		<title>imported&gt;Evad37: Better mobile view handling per Module talk:Random slideshow#Mobile view improvement</title>
		<link rel="alternate" type="text/html" href="http://wiki.filipefonseca.pt/index.php?title=Module:Excerpt_slideshow&amp;diff=8789&amp;oldid=prev"/>
		<updated>2021-05-07T06:26:03Z</updated>

		<summary type="html">&lt;p&gt;Better mobile view handling per &lt;a href=&quot;/index.php?title=Module_talk:Random_slideshow&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module talk:Random slideshow (page does not exist)&quot;&gt;Module talk:Random slideshow#Mobile view improvement&lt;/a&gt;&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('Module:Excerpt/portals')&lt;br /&gt;
local slideshowModule = require('Module:Random slideshow')&lt;br /&gt;
local randomModule = require('Module:Random')&lt;br /&gt;
&lt;br /&gt;
local DEFAULT_LIMIT = 25 -- max number of excerpts to be shown in the slideshow&lt;br /&gt;
local SOURCE_PAGES_LIMIT = 10 -- max number of pages to check for links / list items&lt;br /&gt;
&lt;br /&gt;
-- begin BHG addition for tracking source pages&lt;br /&gt;
local sourcepgagesused = {};&lt;br /&gt;
local sourcepgagesusedcounter = 0;&lt;br /&gt;
local articlelistcount = -1;&lt;br /&gt;
local usesEmbeddedList = false;&lt;br /&gt;
-- end BHG addition for tracking source pages&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 isDeclined(val)&lt;br /&gt;
	if not val then return false end&lt;br /&gt;
	local declinedWords = &amp;quot; decline declined exclude excluded false none not no n off omit omitted remove removed &amp;quot;&lt;br /&gt;
	return string.find(declinedWords , ' '..val..' ', 1, true ) and true or false&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. '*' or '#'&lt;br /&gt;
	@param {String} outerTag: Text portion of the tag for each list or sublist, e.g. 'ul' or 'ol'&lt;br /&gt;
	@param {String} innerTag: Text portion of the tag for each list item, e.g. 'li'&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('\n'..wikitext..'\n', '\n(%'..symbol..'+)(.-)%f[\n]') do&lt;br /&gt;
	    table.insert(listParts, {level=level, item=item})&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(listParts, {level='', item=''})&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 '' or listParts[i-1]['level']&lt;br /&gt;
	    local tags&lt;br /&gt;
	    if #lastLevel == #this.level then&lt;br /&gt;
	    	tags = '&amp;lt;/'..innerTag..'&amp;gt;&amp;lt;'..innerTag..'&amp;gt;'&lt;br /&gt;
	    elseif #this.level &amp;gt; #lastLevel then&lt;br /&gt;
	    	tags = string.rep('&amp;lt;'..outerTag..'&amp;gt;&amp;lt;'..innerTag..'&amp;gt;', #this.level - #lastLevel)&lt;br /&gt;
	    elseif isLastItem then&lt;br /&gt;
	    	tags = string.rep('&amp;lt;/'..innerTag..'&amp;gt;&amp;lt;/'..outerTag..'&amp;gt;', #lastLevel)&lt;br /&gt;
	    else -- ( #this.level &amp;lt; #lastLevel ) and not last item&lt;br /&gt;
	    	tags = string.rep('&amp;lt;/'..innerTag..'&amp;gt;&amp;lt;/'..outerTag..'&amp;gt;', #lastLevel - #this.level ) .. '&amp;lt;/'..innerTag..'&amp;gt;&amp;lt;'..innerTag..'&amp;gt;'&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. '*' or '#'&lt;br /&gt;
	@param {String} outerTag: Text portion of the tag for each list or sublist, e.g. 'ul' or 'ol'&lt;br /&gt;
	@param {String} innerTag: Text portion of the tag for each list item, e.g. 'li'&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..'\n', '\n%'..symbol, '¿¿¿'..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;
		'¿¿¿%'..symbol..'[^\n]+', &lt;br /&gt;
		function(listWikitext)&lt;br /&gt;
			-- ...and then reinstate linebreaks...&lt;br /&gt;
			listWikitext = mw.ustring.gsub(listWikitext, '¿¿¿%'..symbol, '\n'..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, '|', '{{!}}')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ help gsub strip tables and templates that aren'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) == '|'&lt;br /&gt;
	if isTable then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	-- else it'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 == '\n' and last == '\n'&lt;br /&gt;
	if isNotPartOfProse then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	local isParserFunction = mw.ustring.sub(mw.text.trim(t), 3, 3) == '#'&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, '\n*', ''))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local cleanUpExcerpt = function(excerpt)&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..'\n', '\n?%b{}\n?', processBraces)&lt;br /&gt;
	-- replace pipes within links&lt;br /&gt;
	excerpt = mw.ustring.gsub(excerpt, '%b[]', replacePipesWithMagicword)&lt;br /&gt;
	-- replace other pipes with html entity&lt;br /&gt;
	excerpt = mw.ustring.gsub(excerpt, '|', '&amp;amp;#124;')&lt;br /&gt;
	-- replace wikitext bulleted lists with html bulleted lists&lt;br /&gt;
	excerpt = gsubWikitextLists(excerpt, '*', 'ul', 'li')&lt;br /&gt;
	-- replace wikitext numbered lists with html numbered lists&lt;br /&gt;
	excerpt = gsubWikitextLists(excerpt, '#', 'ol', 'li')&lt;br /&gt;
	excerpt = mw.text.trim(excerpt)&lt;br /&gt;
	return excerpt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeGalleryArgs(titles, options, limit, nonRandom)&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 sortedTitles = nonRandom and titlesSequence or randomModule.main('array', {t=titlesSequence, limit=limit})&lt;br /&gt;
	for _i, title in ipairs(sortedTitles) do&lt;br /&gt;
		if (#galleryArgs / 2) &amp;lt; limit then&lt;br /&gt;
			local success, excerpt = pcall(excerptModule.get, title, options)&lt;br /&gt;
			if not success then&lt;br /&gt;
				mw.log(&amp;quot;require('Module:Excerpt').get failed: &amp;quot; .. excerpt) -- probably got a redlink&lt;br /&gt;
				excerpt = nil&lt;br /&gt;
			end&lt;br /&gt;
			if excerpt and excerpt ~= '' and #excerpt &amp;gt; 10 then -- check again in case we had a few characters plus (Full article...)&lt;br /&gt;
				excerpt = cleanUpExcerpt(excerpt)&lt;br /&gt;
				if options.more then&lt;br /&gt;
					excerpt = excerpt .. &amp;quot; ('''[[&amp;quot; .. title .. &amp;quot;|&amp;quot; .. options.more .. &amp;quot;]]''')&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				local text = '&amp;lt;div style{{=}}text-align:left;&amp;gt;' .. mw.ustring.gsub(excerpt, '%c', '&amp;lt;br&amp;gt;') .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
				table.insert(galleryArgs, 'File:Blank.png')&lt;br /&gt;
				table.insert(galleryArgs, text)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if nonRandom then&lt;br /&gt;
		galleryArgs.random = 'false'&lt;br /&gt;
	end&lt;br /&gt;
	if #galleryArgs == 0 and options.nostubs then&lt;br /&gt;
		-- try again, this time including stubs&lt;br /&gt;
		options.nostubs = false&lt;br /&gt;
		return makeGalleryArgs(titles, options, limit, nonRandom)&lt;br /&gt;
	else&lt;br /&gt;
		return galleryArgs&lt;br /&gt;
	end&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;
	if args.nostubs and isDeclined(args.nostubs) then&lt;br /&gt;
		options.nostubs = false&lt;br /&gt;
	else &lt;br /&gt;
		options.nostubs = true&lt;br /&gt;
	end&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;
				local success, result = pcall(excerptModule.getSection, pageContent, pageSection, sectionOnly)&lt;br /&gt;
				if not success then&lt;br /&gt;
					mw.log(&amp;quot;require('Module:Excerpt').getSection failed on the content of &amp;quot; .. args[ii] .. &amp;quot;: &amp;quot; .. result)&lt;br /&gt;
					result = nil&lt;br /&gt;
				end&lt;br /&gt;
				text = result or pageContent&lt;br /&gt;
			end&lt;br /&gt;
			-- begin BHG addition for tracking source pages&lt;br /&gt;
			local thisPage = mw.title.getCurrentTitle().nsText .. &amp;quot;:&amp;quot; .. mw.title.getCurrentTitle().text&lt;br /&gt;
			local thisBareParam = mw.ustring.gsub(args[ii], &amp;quot;^([^#]+).*$&amp;quot;, &amp;quot;%1&amp;quot;, 1) -- strip any section anchor from the parameter's page name&lt;br /&gt;
			if (thisPage == thisBareParam) then&lt;br /&gt;
				usesEmbeddedList = true;&lt;br /&gt;
			end&lt;br /&gt;
			-- end BHG addition for tracking source pages&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;
			-- begin BHG addition for tracking source pages&lt;br /&gt;
			if ((method == &amp;quot;listitem&amp;quot;) or (method == &amp;quot;linked&amp;quot;)) then&lt;br /&gt;
				table.insert(sourcepgagesused, args[ii])&lt;br /&gt;
				sourcepgagesusedcounter = sourcepgagesusedcounter + 1&lt;br /&gt;
			end&lt;br /&gt;
			-- end BHG addition for tracking source pages&lt;br /&gt;
		end&lt;br /&gt;
		ii = ii + 1&lt;br /&gt;
	end&lt;br /&gt;
	-- begin BHG addition for tracking&lt;br /&gt;
	articlelistcount = #pagenames&lt;br /&gt;
	-- end BHG addition for tracking&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, 'random')&lt;br /&gt;
	return frame:extensionTag{ name='templatestyles', args = { src='Module:Random slideshow/styles.css'} } &lt;br /&gt;
		.. 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, 'linked')&lt;br /&gt;
	return frame:extensionTag{ name='templatestyles', args = { src='Module:Random slideshow/styles.css'} } &lt;br /&gt;
		.. 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, 'listitem')&lt;br /&gt;
	return frame:extensionTag{ name='templatestyles', args = { src='Module:Random slideshow/styles.css'} } &lt;br /&gt;
		.. 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;
	args.more = excerptModule.getMoreLinkText(_args.more)&lt;br /&gt;
	local options = makeOptions(args)&lt;br /&gt;
	local limit = args.limit and tonumber(args.limit) or DEFAULT_LIMIT&lt;br /&gt;
	local titles&lt;br /&gt;
	if method == 'linked' or method == 'listitem' then&lt;br /&gt;
		titles = getLinkedTitles(args, method, SOURCE_PAGES_LIMIT)&lt;br /&gt;
	else&lt;br /&gt;
		titles = args&lt;br /&gt;
	end&lt;br /&gt;
	local galleryArgs = makeGalleryArgs(titles, options, limit, isDeclined(_args.random))&lt;br /&gt;
	return slideshowModule._main(galleryArgs, false, 'excerptSlideshow-container') .. checksourcepages()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p._cleanUpExcerpt = cleanUpExcerpt&lt;br /&gt;
&lt;br /&gt;
-- begin BHG addition for tracking source pages&lt;br /&gt;
function checksourcepages()&lt;br /&gt;
	-- no tracking unless we are in Portal namespace&lt;br /&gt;
	if (mw.title.getCurrentTitle().nsText ~= &amp;quot;Portal&amp;quot;) then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local pagecounter = 0;&lt;br /&gt;
	local templatecount = 0;&lt;br /&gt;
	local outlinecount = 0;&lt;br /&gt;
	local retval =&amp;quot;&amp;quot;;&lt;br /&gt;
	local usesEponymousArticle = false;&lt;br /&gt;
	local debugging = false;&lt;br /&gt;
	local thisPageBareName = mw.title.getCurrentTitle().text;&lt;br /&gt;
	if debugging then&lt;br /&gt;
		retval = '&amp;lt;div style=&amp;quot;display:block; border:10px solid green; background-color:#efe; padding:1em; margin:1em&amp;quot;&amp;gt;\n----\n'&lt;br /&gt;
		retval = retval .. &amp;quot;sourcepgagesusedcounter: &amp;quot; .. sourcepgagesusedcounter .. &amp;quot;\n----\n&amp;quot;&lt;br /&gt;
		retval = retval .. &amp;quot;pages used:&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local apage&lt;br /&gt;
	for apage in arrayvalues(sourcepgagesused) do&lt;br /&gt;
		if debugging then &lt;br /&gt;
			retval = retval .. &amp;quot;\n# [[:&amp;quot; .. apage .. &amp;quot;]]&amp;quot;&lt;br /&gt;
			retval = retval .. &amp;quot; — &amp;quot; .. &amp;quot;First 999 = /&amp;quot; .. string.sub(apage, 1, 999) .. &amp;quot;/&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if (string.find(apage, &amp;quot;^[tT]emplate ?:&amp;quot;) == 1) then&lt;br /&gt;
			templatecount = templatecount + 1;&lt;br /&gt;
		end&lt;br /&gt;
		if (string.find(apage, &amp;quot;^[oO]utline +of &amp;quot;) == 1) then&lt;br /&gt;
			outlinecount = outlinecount + 1;&lt;br /&gt;
		end&lt;br /&gt;
		if (apage == thisPageBareName) then&lt;br /&gt;
			usesEponymousArticle = true;&lt;br /&gt;
		end&lt;br /&gt;
		pagecounter = pagecounter + 1&lt;br /&gt;
	end&lt;br /&gt;
	if debugging then&lt;br /&gt;
		retval = retval .. &amp;quot;\nTotal pages: &amp;quot; .. pagecounter&lt;br /&gt;
		retval = retval .. &amp;quot;\ntemplatecount: &amp;quot; .. templatecount&lt;br /&gt;
		retval = retval .. &amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- first do a sanity check that both counting methods have produced the same result&lt;br /&gt;
	if (sourcepgagesusedcounter == pagecounter) then&lt;br /&gt;
		-- if all pages are templates, then populate tracking categories&lt;br /&gt;
		if (pagecounter == templatecount) then&lt;br /&gt;
			if (templatecount == 1) then&lt;br /&gt;
				retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built solely from one template]]&amp;quot;&lt;br /&gt;
			elseif (templatecount == 2) then&lt;br /&gt;
				retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built solely from two templates]]&amp;quot;&lt;br /&gt;
			elseif (templatecount == 3) then&lt;br /&gt;
				retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built solely from three templates]]&amp;quot;&lt;br /&gt;
			elseif (templatecount &amp;gt; 3) then&lt;br /&gt;
				retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built solely from four or more templates]]&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		elseif (templatecount &amp;gt; 0) then&lt;br /&gt;
			retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built using one or more templates, and other sources]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (outlinecount &amp;gt;= 1) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built using one or more outline pages]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if (articlelistcount &amp;lt; 2) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with less than 2 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 5) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 2–5 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 10) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 6–10 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 15) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 11–15 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 20) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 16–20 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 25) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 21–25 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 30) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 26–30 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 40) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 31–40 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 50) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 41–50 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 100) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 51–100 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 200) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 101–200 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 500) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 201–500 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;lt;= 1000) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with 501–1000 articles in article list]]&amp;quot;&lt;br /&gt;
	elseif (articlelistcount &amp;gt; 1000) then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with over 1000 articles in article list]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if usesEmbeddedList then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with embedded list]]&amp;quot;	&lt;br /&gt;
	end&lt;br /&gt;
	if usesEponymousArticle then&lt;br /&gt;
		retval = retval .. &amp;quot;[[Category:Automated article-slideshow portals with article list built using eponymous article]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arrayvalues(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function() i = i + 1; return t[i] end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- end BHG addition for tracking source pages&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Evad37</name></author>
	</entry>
</feed>