Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Wikipedia ads/sandbox
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
------------------------------------------------------------------------------- -- 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 = 'Module:Wikipedia ads/list' local DATA_MODULE = 'Module:Wikipedia ads/data' local p = {} local warnings = {} local function addWarning(msg) table.insert(warnings, msg) end local function makeWikilink(page, display) return string.format('[[%s|%s]]', page, display) end local function makeUrlLink(url, display) url = tostring(url) return string.format('[%s %s]', url, display) end local function colorText(s, color) return string.format('<span style="color:%s">%s</span>', color, s) end local function getImageData(args) -- This function gets an image data from the data module. It also tracks -- whether the image data choice was random. local data = mw.loadData(DATA_MODULE) local function getSomeImageData(id, param) id = tonumber(id) or id local originalId = id local someImageData = data.ids[id] local tryCount = 0 if type(id) == 'number' then while not someImageData and tryCount < data.noAds do tryCount = tryCount + 1 id = id + 1 someImageData = data.ids[id] end end if someImageData then return someImageData else addWarning(string.format("ID '%s' does not exist", tostring(originalId))) return nil end end -- Get the image data of the ad to display. local imageData, isRandom if args.ad then imageData = getSomeImageData(args.ad, 'ad') if not imageData then return nil end isRandom = false else local imageDataArray, length if args[1] then imageDataArray = {} for i, id in ipairs(args) do imageDataArray[#imageDataArray + 1] = getSomeImageData(id, i) end length = #imageDataArray if length < 1 then return nil end else imageDataArray = data.list length = data.noAds end assert(length >= 1, string.format( 'no ads were found in [[%s]]', DATA_MODULE )) isRandom = length > 1 if isRandom then math.randomseed(os.clock() * 1000000000) imageData = imageDataArray[math.random(length)] else imageData = imageDataArray[1] end end -- Check that the image data has the required fields. We have already -- checked the ID in the data module. for i, field in ipairs{'image', 'link'} do assert(imageData[field], string.format( "Invalid image data in [[%s]]; table with ID '%s' has no '%s' field", LIST_MODULE, tostring(imageData.id), field )) end return imageData, isRandom end local function renderAd(imageData, args, title, isRandom) local width = tonumber(args.width) or 468 local maxWidth = width + 9 local linkColor = args.linkcolor or '#002bb8' -- Table root local root = mw.html.create('table') root :addClass('plainlinks qxz-ads') :css('color', args.color or '#555555') :css('border', 'none') :css('background', args.background) :css('line-height', '1em') :css('font-size', '90%') :css('display', 'block') :css('overflow', 'auto') :css('max-width', maxWidth .. 'px') if args.float then root:css('float', args.float) root:css('margin', args.margin) else root:css('margin', args.margin or '0 auto') end -- Image row root :tag('tr') :tag('td') :attr('colspan', 2) :css('border', 'none') :wikitext(string.format( '[[File:%s|%dpx|alt=Wikipedia ad for %s|link=%s]]', imageData.image, width, imageData.link, imageData.link )) -- Links row if not args.nolinks then local linksRow = root:tag('tr') -- Wikipedia ads link linksRow :tag('td') :css('border', 'none') :wikitext(makeWikilink( 'Template:Wikipedia ads', colorText('Wikipedia ads', linkColor) )) -- File info, purge and ID local links = {} links[#links + 1] = makeWikilink( ':File:' .. imageData.image, colorText('file info', linkColor) ) if args.showpurge or isRandom then links[#links + 1] = makeUrlLink( title:fullUrl{action = 'purge'}, colorText('show another', linkColor) ) end links[#links + 1] = '#' .. tostring(imageData.id) linksRow :tag('td') :css('text-align', 'right') :css('border', 'none') :wikitext(table.concat(links, ' β ')) end return tostring(root) end local function renderWarnings(args, title) if #warnings < 1 then return nil end -- Error list local root = mw.html.create('div') :css('width', '468px') if args.float then root :css('float', args.float) :css('clear', 'both') else root:css('margin', '0 auto') end local list = root:tag('ul') :addClass('error') :css('font-size', '90%') for _, msg in ipairs(warnings) do list :tag('li') :wikitext(string.format( 'Wikipedia ads error: %s ([[Template:Wikipedia ads#Errors|help]]).', msg )) end -- Category. We use [[Module:Category handler]] for its blacklist. local mCatHandler = require('Module:Category handler') local category = mCatHandler._main{ all = '[[Category:Wikipedia ads templates with errors]]', nocat = args.nocat, page = title and title.prefixedText } local ret = tostring(root) if category then ret = ret .. category end return ret end function p._main(args, title) title = title or mw.title.getCurrentTitle() local ret = {} local imageData, isRandom = getImageData(args) if imageData then ret[#ret + 1] = renderAd(imageData, args, title, isRandom) end ret[#ret + 1] = renderWarnings(args, title) if #ret > 0 then return table.concat(ret) else return nil end end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Wikipedia ads' }) return p._main(args) end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Wikipedia ads/sandbox/doc
(
edit
)