<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/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://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikipedia_ads"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Wikipedia_ads&amp;action=history"/>
	<updated>2026-05-04T12:39:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Wikipedia_ads&amp;diff=480071&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Wikipedia_ads&amp;diff=480071&amp;oldid=prev"/>
		<updated>2021-07-16T08:00:31Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&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 = 'Module:Wikipedia ads/list'&lt;br /&gt;
local DATA_MODULE = 'Module:Wikipedia ads/data'&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('[[%s|%s]]', 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('[%s %s]', url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function colorText(s, color)&lt;br /&gt;
	return string.format('&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;', 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 '%s' 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, 'ad')&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;
			'no ads were found in [[%s]]',&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{'image', 'link'} do&lt;br /&gt;
		assert(imageData[field], string.format(&lt;br /&gt;
			&amp;quot;Invalid image data in [[%s]]; table with ID '%s' has no '%s' 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 '#002bb8'&lt;br /&gt;
&lt;br /&gt;
	-- Table root&lt;br /&gt;
	local root = mw.html.create('table')&lt;br /&gt;
	root&lt;br /&gt;
		:addClass('plainlinks qxz-ads')&lt;br /&gt;
		:css('color', args.color or '#555555')&lt;br /&gt;
		:css('border', 'none')&lt;br /&gt;
		:css('background', args.background)&lt;br /&gt;
		:css('line-height', '1em')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
		:css('display', 'block')&lt;br /&gt;
		:css('overflow', 'auto')&lt;br /&gt;
		:css('max-width', maxWidth .. 'px')&lt;br /&gt;
	if args.float then&lt;br /&gt;
		root:css('float', args.float)&lt;br /&gt;
		root:css('margin', args.margin)&lt;br /&gt;
	else&lt;br /&gt;
		root:css('margin', args.margin or '0 auto')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Image row&lt;br /&gt;
	root&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
				:css('border', 'none')&lt;br /&gt;
				:wikitext(string.format(&lt;br /&gt;
					'[[File:%s|%dpx|alt=Wikipedia ad for %s|link=%s]]',&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('tr')&lt;br /&gt;
&lt;br /&gt;
		-- Wikipedia ads link&lt;br /&gt;
		linksRow&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:css('border', 'none')&lt;br /&gt;
				:wikitext(makeWikilink(&lt;br /&gt;
					'Template:Wikipedia ads',&lt;br /&gt;
					colorText('Wikipedia ads', 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;
			':File:' .. imageData.image,&lt;br /&gt;
			colorText('file info', 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 = 'purge'},&lt;br /&gt;
				colorText('show another', linkColor)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
		links[#links + 1] = '#' .. tostring(imageData.id)&lt;br /&gt;
		linksRow&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:css('text-align', 'right')&lt;br /&gt;
				:css('border', 'none')&lt;br /&gt;
				:wikitext(table.concat(links, ' – '))&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('div')&lt;br /&gt;
		:css('width', '468px')&lt;br /&gt;
	if args.float then&lt;br /&gt;
		root&lt;br /&gt;
			:css('float', args.float)&lt;br /&gt;
			:css('clear', 'both')&lt;br /&gt;
	else&lt;br /&gt;
		root:css('margin', '0 auto')&lt;br /&gt;
	end&lt;br /&gt;
	local list = root:tag('ul')&lt;br /&gt;
		:addClass('error')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
	for _, msg in ipairs(warnings) do&lt;br /&gt;
		list&lt;br /&gt;
			:tag('li')&lt;br /&gt;
				:wikitext(string.format(&lt;br /&gt;
					'Wikipedia ads error: %s ([[Template:Wikipedia ads#Errors|help]]).',&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('Module:Category handler')&lt;br /&gt;
	local category = mCatHandler._main{&lt;br /&gt;
		all = '[[Category:Wikipedia ads templates with errors]]',&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('Module:Arguments').getArgs(frame, {&lt;br /&gt;
		wrappers = 'Template:Wikipedia ads'&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>Zoran</name></author>
	</entry>
</feed>