<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.tachyony.co.uk/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikipedia_ads</id>
	<title>Module:Wikipedia ads - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tachyony.co.uk/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikipedia_ads"/>
	<link rel="alternate" type="text/html" href="https://wiki.tachyony.co.uk/w/index.php?title=Module:Wikipedia_ads&amp;action=history"/>
	<updated>2026-05-15T22:57:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.tachyony.co.uk/w/index.php?title=Module:Wikipedia_ads&amp;diff=8928&amp;oldid=prev</id>
		<title>Tachyony: Created page with &quot;------------------------------------------------------------------------------- --                         Module:Wikipedia ads -- -- This module displays a random banner-style advert for a Wikipedia project, -- page or process. It implements Template:Wikipedia ads. -------------------------------------------------------------------------------  -- Set constants local LIST_MODULE = &#039;Module:Wikipedia ads/list&#039; local DATA_MODULE = &#039;Module:Wikipedia ads/data&#039;  local p =...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.tachyony.co.uk/w/index.php?title=Module:Wikipedia_ads&amp;diff=8928&amp;oldid=prev"/>
		<updated>2022-01-20T01:51:42Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;------------------------------------------------------------------------------- --                         Module:Wikipedia ads -- -- This module displays a random banner-style advert for a Wikipedia project, -- page or process. It implements &lt;a href=&quot;/wiki/Template:Wikipedia_ads&quot; title=&quot;Template:Wikipedia ads&quot;&gt;Template:Wikipedia ads&lt;/a&gt;. -------------------------------------------------------------------------------  -- Set constants local LIST_MODULE = &amp;#039;Module:Wikipedia ads/list&amp;#039; local DATA_MODULE = &amp;#039;Module:Wikipedia ads/data&amp;#039;  local p =...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-------------------------------------------------------------------------------&lt;br /&gt;
--                         Module:Wikipedia ads&lt;br /&gt;
--&lt;br /&gt;
-- This module displays a random banner-style advert for a Wikipedia project,&lt;br /&gt;
-- page or process. It implements [[Template:Wikipedia ads]].&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Set constants&lt;br /&gt;
local LIST_MODULE = &amp;#039;Module:Wikipedia ads/list&amp;#039;&lt;br /&gt;
local DATA_MODULE = &amp;#039;Module:Wikipedia ads/data&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local warnings = {}&lt;br /&gt;
&lt;br /&gt;
local function addWarning(msg)&lt;br /&gt;
	table.insert(warnings, msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeWikilink(page, display)&lt;br /&gt;
	return string.format(&amp;#039;[[%s|%s]]&amp;#039;, page, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUrlLink(url, display)&lt;br /&gt;
	url = tostring(url)&lt;br /&gt;
	return string.format(&amp;#039;[%s %s]&amp;#039;, url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function colorText(s, color)&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, color, s)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getImageData(args)&lt;br /&gt;
	-- This function gets an image data from the data module. It also tracks&lt;br /&gt;
	-- whether the image data choice was random.&lt;br /&gt;
	local data = mw.loadData(DATA_MODULE)&lt;br /&gt;
&lt;br /&gt;
	local function getSomeImageData(id, param)&lt;br /&gt;
		id = tonumber(id) or id&lt;br /&gt;
		local someImageData = data.ids[id]&lt;br /&gt;
		if someImageData then&lt;br /&gt;
			return someImageData&lt;br /&gt;
		else&lt;br /&gt;
			addWarning(string.format(&amp;quot;ID &amp;#039;%s&amp;#039; does not exist&amp;quot;, tostring(id)))&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get the image data of the ad to display.&lt;br /&gt;
	local imageData, isRandom&lt;br /&gt;
	if args.ad then&lt;br /&gt;
		imageData = getSomeImageData(args.ad, &amp;#039;ad&amp;#039;)&lt;br /&gt;
		if not imageData then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		isRandom = false&lt;br /&gt;
	else&lt;br /&gt;
		local imageDataArray, length&lt;br /&gt;
		if args[1] then&lt;br /&gt;
			imageDataArray = {}&lt;br /&gt;
			for i, id in ipairs(args) do&lt;br /&gt;
				imageDataArray[#imageDataArray + 1] = getSomeImageData(id, i)&lt;br /&gt;
			end&lt;br /&gt;
			length = #imageDataArray&lt;br /&gt;
			if length &amp;lt; 1 then&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			imageDataArray = data.list&lt;br /&gt;
			length = data.noAds&lt;br /&gt;
		end&lt;br /&gt;
		assert(length &amp;gt;= 1, string.format(&lt;br /&gt;
			&amp;#039;no ads were found in [[%s]]&amp;#039;,&lt;br /&gt;
			DATA_MODULE&lt;br /&gt;
		))&lt;br /&gt;
		isRandom = length &amp;gt; 1&lt;br /&gt;
		if isRandom then&lt;br /&gt;
			math.randomseed(os.clock() * 1000000000)&lt;br /&gt;
			imageData = imageDataArray[math.random(length)]&lt;br /&gt;
		else&lt;br /&gt;
			imageData = imageDataArray[1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check that the image data has the required fields. We have already&lt;br /&gt;
	-- checked the ID in the data module.&lt;br /&gt;
	for i, field in ipairs{&amp;#039;image&amp;#039;, &amp;#039;link&amp;#039;} do&lt;br /&gt;
		assert(imageData[field], string.format(&lt;br /&gt;
			&amp;quot;Invalid image data in [[%s]]; table with ID &amp;#039;%s&amp;#039; has no &amp;#039;%s&amp;#039; field&amp;quot;,&lt;br /&gt;
			LIST_MODULE, tostring(imageData.id), field&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return imageData, isRandom&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAd(imageData, args, title, isRandom)&lt;br /&gt;
	local width = tonumber(args.width) or 468&lt;br /&gt;
	local maxWidth = width + 9&lt;br /&gt;
	local linkColor = args.linkcolor or &amp;#039;#002bb8&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Table root&lt;br /&gt;
	local root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
	root&lt;br /&gt;
		:addClass(&amp;#039;plainlinks qxz-ads&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;color&amp;#039;, args.color or &amp;#039;#555555&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;background&amp;#039;, args.background)&lt;br /&gt;
		:css(&amp;#039;line-height&amp;#039;, &amp;#039;1em&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-size&amp;#039;, &amp;#039;90%&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;display&amp;#039;, &amp;#039;block&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;overflow&amp;#039;, &amp;#039;auto&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;max-width&amp;#039;, maxWidth .. &amp;#039;px&amp;#039;)&lt;br /&gt;
	if args.float then&lt;br /&gt;
		root:css(&amp;#039;float&amp;#039;, args.float)&lt;br /&gt;
		root:css(&amp;#039;margin&amp;#039;, args.margin)&lt;br /&gt;
	else&lt;br /&gt;
		root:css(&amp;#039;margin&amp;#039;, args.margin or &amp;#039;0 auto&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Image row&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
				:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
				:wikitext(string.format(&lt;br /&gt;
					&amp;#039;[[File:%s|%dpx|alt=Wikipedia ad for %s|link=%s]]&amp;#039;,&lt;br /&gt;
					imageData.image,&lt;br /&gt;
					width,&lt;br /&gt;
					imageData.link,&lt;br /&gt;
					imageData.link&lt;br /&gt;
				))&lt;br /&gt;
	&lt;br /&gt;
	-- Links row&lt;br /&gt;
	if not args.nolinks then&lt;br /&gt;
		local linksRow = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		-- Wikipedia ads link&lt;br /&gt;
		linksRow&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
				:wikitext(makeWikilink(&lt;br /&gt;
					&amp;#039;Template:Wikipedia ads&amp;#039;,&lt;br /&gt;
					colorText(&amp;#039;Wikipedia ads&amp;#039;, linkColor)&lt;br /&gt;
				))&lt;br /&gt;
&lt;br /&gt;
		-- File info, purge and ID&lt;br /&gt;
		local links = {}&lt;br /&gt;
		links[#links + 1] = makeWikilink(&lt;br /&gt;
			&amp;#039;:File:&amp;#039; .. imageData.image,&lt;br /&gt;
			colorText(&amp;#039;file info&amp;#039;, linkColor)&lt;br /&gt;
		)&lt;br /&gt;
		if args.showpurge or isRandom then&lt;br /&gt;
			links[#links + 1] = makeUrlLink(&lt;br /&gt;
				title:fullUrl{action = &amp;#039;purge&amp;#039;},&lt;br /&gt;
				colorText(&amp;#039;show another&amp;#039;, linkColor)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
		links[#links + 1] = &amp;#039;#&amp;#039; .. tostring(imageData.id)&lt;br /&gt;
		linksRow&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;text-align&amp;#039;, &amp;#039;right&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
				:wikitext(table.concat(links, &amp;#039; – &amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderWarnings(args, title)&lt;br /&gt;
	if #warnings &amp;lt; 1 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Error list&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;width&amp;#039;, &amp;#039;468px&amp;#039;)&lt;br /&gt;
	if args.float then&lt;br /&gt;
		root&lt;br /&gt;
			:css(&amp;#039;float&amp;#039;, args.float)&lt;br /&gt;
			:css(&amp;#039;clear&amp;#039;, &amp;#039;both&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		root:css(&amp;#039;margin&amp;#039;, &amp;#039;0 auto&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local list = root:tag(&amp;#039;ul&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-size&amp;#039;, &amp;#039;90%&amp;#039;)&lt;br /&gt;
	for _, msg in ipairs(warnings) do&lt;br /&gt;
		list&lt;br /&gt;
			:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
				:wikitext(string.format(&lt;br /&gt;
					&amp;#039;Wikipedia ads error: %s ([[Template:Wikipedia ads#Errors|help]]).&amp;#039;,&lt;br /&gt;
					msg&lt;br /&gt;
				))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Category. We use [[Module:Category handler]] for its blacklist.&lt;br /&gt;
	local mCatHandler = require(&amp;#039;Module:Category handler&amp;#039;)&lt;br /&gt;
	local category = mCatHandler._main{&lt;br /&gt;
		all = &amp;#039;[[Category:Wikipedia ads templates with errors]]&amp;#039;,&lt;br /&gt;
		nocat = args.nocat,&lt;br /&gt;
		page = title and title.prefixedText&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local ret = tostring(root)&lt;br /&gt;
	if category then&lt;br /&gt;
		ret = ret .. category&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, title)&lt;br /&gt;
	title = title or mw.title.getCurrentTitle()&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local imageData, isRandom = getImageData(args)&lt;br /&gt;
	if imageData then&lt;br /&gt;
		ret[#ret + 1] = renderAd(imageData, args, title, isRandom)&lt;br /&gt;
	end&lt;br /&gt;
	ret[#ret + 1] = renderWarnings(args, title)&lt;br /&gt;
	if #ret &amp;gt; 0 then&lt;br /&gt;
		return table.concat(ret)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &amp;#039;Template:Wikipedia ads&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Tachyony</name></author>
	</entry>
</feed>