<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://nationalatlas.ign.es/index.php?action=history&amp;feed=atom&amp;title=Module%3AOverlay</id>
	<title>Module:Overlay - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://nationalatlas.ign.es/index.php?action=history&amp;feed=atom&amp;title=Module%3AOverlay"/>
	<link rel="alternate" type="text/html" href="http://nationalatlas.ign.es/index.php?title=Module:Overlay&amp;action=history"/>
	<updated>2026-04-04T05:13:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>http://nationalatlas.ign.es/index.php?title=Module:Overlay&amp;diff=3310&amp;oldid=prev</id>
		<title>Ane: 1 revisión importada</title>
		<link rel="alternate" type="text/html" href="http://nationalatlas.ign.es/index.php?title=Module:Overlay&amp;diff=3310&amp;oldid=prev"/>
		<updated>2018-11-16T07:59:22Z</updated>

		<summary type="html">&lt;p&gt;1 revisión importada&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- this module implements [[Template:Overlay]]&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local mArguments = require('Module:Arguments')&lt;br /&gt;
&lt;br /&gt;
-- used to cache the calculated font color to avoid repeat calculations&lt;br /&gt;
local previous_backgroundcolor = ''&lt;br /&gt;
local fontcolor = ''&lt;br /&gt;
&lt;br /&gt;
local function buildicon(n, form, lk, c, t)&lt;br /&gt;
	local res&lt;br /&gt;
	if form == 'text' then&lt;br /&gt;
		return tostring(&lt;br /&gt;
				mw.html.create('span')&lt;br /&gt;
					:css('font-weight', 'bold')&lt;br /&gt;
					:css('color', c)&lt;br /&gt;
					:wikitext(n)&lt;br /&gt;
				)&lt;br /&gt;
	elseif form == 'color' or form == 'colour' then&lt;br /&gt;
		return tostring(&lt;br /&gt;
				mw.html.create('span')&lt;br /&gt;
					:css('background-color', c)&lt;br /&gt;
					:wikitext('&amp;amp;#160;&amp;amp;#160;')&lt;br /&gt;
				)&lt;br /&gt;
	else&lt;br /&gt;
		-- check if the color is difference from the previous color&lt;br /&gt;
		if c ~= previous_backgroundcolor then&lt;br /&gt;
			-- color changed, so look up the best font color&lt;br /&gt;
			local greatercontrast = require('Module:Color contrast')._greatercontrast&lt;br /&gt;
			fontcolor = greatercontrast{c, 'white', 'black', bias = 1.3}&lt;br /&gt;
			-- update the previous value for the next check&lt;br /&gt;
			previous_backgroundcolor = c&lt;br /&gt;
		end&lt;br /&gt;
		-- build the inner span for the icon&lt;br /&gt;
		local span = mw.html.create('span')&lt;br /&gt;
			:css('color', fontcolor)&lt;br /&gt;
			:css('font-size', '88%')&lt;br /&gt;
			:css('font-weight', 'bold')&lt;br /&gt;
			:attr('title', t)&lt;br /&gt;
			:wikitext(n)&lt;br /&gt;
		-- build the outer div&lt;br /&gt;
		local div = mw.html.create('div')&lt;br /&gt;
			:css('display', 'inline-block')&lt;br /&gt;
			:css('width', 'auto')&lt;br /&gt;
			:css('height', 'auto')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:css('padding', ((tonumber(n) or 0) &amp;lt; 10) and '0px 4px' or '0px 2px')&lt;br /&gt;
			:css('vertical-align', 'middle')&lt;br /&gt;
			:css('-moz-border-radius', '3px')&lt;br /&gt;
			:css('-webkit-border-radius', '3px')&lt;br /&gt;
			:css('border-radius', '3px')&lt;br /&gt;
			:css('background-color', c)&lt;br /&gt;
&lt;br /&gt;
		-- link the inner span if requested and insert in the div&lt;br /&gt;
		if lk ~= '' then&lt;br /&gt;
			div:wikitext('[[:' .. lk .. '|' .. tostring(span) .. ']]')&lt;br /&gt;
		else&lt;br /&gt;
			div:wikitext(tostring(span))&lt;br /&gt;
		end&lt;br /&gt;
		-- convert to a string&lt;br /&gt;
		return tostring(div)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildlegend(data, cols, border, caption)&lt;br /&gt;
	-- create the outer table to hold the columns&lt;br /&gt;
	local root = mw.html.create('table')&lt;br /&gt;
		:css('width', '100%')&lt;br /&gt;
		:css('border', (border ~= 'no') and '1px #ccc solid' or '')&lt;br /&gt;
	-- create the outer row which will contain the columns&lt;br /&gt;
	local outerrow = root:tag('tr')&lt;br /&gt;
	local percol = math.ceil((#data) / cols)&lt;br /&gt;
	local k = 0&lt;br /&gt;
	for j=1,cols do&lt;br /&gt;
		-- create the outer cell to hold this column&lt;br /&gt;
		local colcell = outerrow:tag('td')&lt;br /&gt;
			:css('width', (math.floor(10/cols)/10) .. '%')&lt;br /&gt;
			:css('vertical-align', 'top')&lt;br /&gt;
		-- create the inner table to hold the entries in the column&lt;br /&gt;
		local coltable = colcell:tag('table')&lt;br /&gt;
			:css('width', '100%')&lt;br /&gt;
			:css('font-size', '85%')&lt;br /&gt;
			:css('line-height', '95%')&lt;br /&gt;
		-- add the entries to the column&lt;br /&gt;
		for l = 1,percol do&lt;br /&gt;
			k = k + 1&lt;br /&gt;
			if k &amp;lt;= #data then&lt;br /&gt;
				local rdata = data[k]&lt;br /&gt;
				local tr = coltable:tag('tr'):css('vertical-align','top')&lt;br /&gt;
				tr:tag('td')&lt;br /&gt;
					:css('width', '12px')&lt;br /&gt;
					:css('text-align', 'right')&lt;br /&gt;
					:css('padding-bottom', '2px')&lt;br /&gt;
					:wikitext(rdata[1] or '')&lt;br /&gt;
				tr:tag('td')&lt;br /&gt;
					:css('padding-bottom', '2px')&lt;br /&gt;
					:wikitext(rdata[2] or '')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return caption .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildlegenditem(im, lk, t)&lt;br /&gt;
	local res = {im, ''}&lt;br /&gt;
	if t ~= '' then&lt;br /&gt;
		if lk ~= '' then&lt;br /&gt;
			res[2] = '[[:' .. lk .. '|' .. t .. ']]'&lt;br /&gt;
		else&lt;br /&gt;
			res[2] = t&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		res[2] = '[[:' .. lk .. '|' .. lk .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
	return res &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.icon(frame)&lt;br /&gt;
	local args = mArguments.getArgs(frame)&lt;br /&gt;
	return tostring(&lt;br /&gt;
		mw.html.create('div')&lt;br /&gt;
			:css('display', 'inline-block')&lt;br /&gt;
			:css('line-height', '95%')&lt;br /&gt;
			:wikitext(buildicon(args['1'] or '', &lt;br /&gt;
								args['form'] or 'icon',&lt;br /&gt;
								args['link'] or '', &lt;br /&gt;
								args['2'] or 'red',&lt;br /&gt;
								args['tip'] or ''))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = mArguments.getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local image = args['image'] or ''&lt;br /&gt;
	local width = tonumber(args['width'] or '500') or 500&lt;br /&gt;
	local height = tonumber(args['height'] or '500') or 500&lt;br /&gt;
	local columns = tonumber(args['columns'] or '3') or 3&lt;br /&gt;
	local grid = ((args['grid'] or ''):lower() == 'yes') and 'yes' or 'no'&lt;br /&gt;
	local legendbox = ((args['legendbox'] or ''):lower() == 'no') and 'no' or 'yes'&lt;br /&gt;
	local overlay = (image == '') and 'no' or ( ((args['overlay'] or ''):lower() == 'no') and 'no' or 'yes' )&lt;br /&gt;
	local float = args['float'] or 'center'&lt;br /&gt;
	local border = ((args['border'] or ''):lower() == 'no') and 'no' or 'yes'&lt;br /&gt;
	local padding = args['padding'] or ''&lt;br /&gt;
&lt;br /&gt;
	-- create the root table&lt;br /&gt;
	local root = mw.html.create('table')&lt;br /&gt;
	if float == 'center' or float == 'centre' then&lt;br /&gt;
		root:css('margin-left', 'auto')&lt;br /&gt;
			:css('margin-right', 'auto')&lt;br /&gt;
	elseif float == 'right' then&lt;br /&gt;
		root:css('float', 'right')&lt;br /&gt;
			:css('clear', 'right')&lt;br /&gt;
			:css('margin-left', '1em')&lt;br /&gt;
	elseif float == 'left' then&lt;br /&gt;
		root:css('float', 'left')&lt;br /&gt;
			:css('clear', 'left')&lt;br /&gt;
			:css('margin-right', '1em')&lt;br /&gt;
	else&lt;br /&gt;
		root:css('float', float)&lt;br /&gt;
	end&lt;br /&gt;
	if border == 'yes' then&lt;br /&gt;
		root:css('border', '1px #ccc solid')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create a list of all the overlay numbers&lt;br /&gt;
	local itemnums = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		local i = tonumber(tostring(k):match( '^%s*overlay([%d]+)%s*$' ) or '-1')&lt;br /&gt;
		if i &amp;gt; -1 then&lt;br /&gt;
			table.insert(itemnums, i)&lt;br /&gt;
		else&lt;br /&gt;
			i = tonumber(tostring(k):match( '^%s*overlay([%d]+)tip%s*$' ) or '-1')&lt;br /&gt;
			if i &amp;gt; -1 then&lt;br /&gt;
				table.insert(itemnums, i)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- sort to process in order&lt;br /&gt;
	table.sort( itemnums )&lt;br /&gt;
	&lt;br /&gt;
	-- remove duplicates&lt;br /&gt;
	for k = 2,#itemnums do&lt;br /&gt;
		if itemnums[k] == itemnums[k-1] then&lt;br /&gt;
			table.remove(itemnums, k)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- build the overlay markers and text&lt;br /&gt;
	itemdata = {}&lt;br /&gt;
	local colori = args['color'] or args['colour'] or 'red'&lt;br /&gt;
	local formi = ''	&lt;br /&gt;
	for k = 1,#itemnums do&lt;br /&gt;
		local i = itemnums[k]&lt;br /&gt;
		formi = args['overlay' .. i .. 'form'] or formi&lt;br /&gt;
		colori = args['overlay' .. i .. 'color'] or args['overlay' .. i .. 'colour'] or colori&lt;br /&gt;
		local linki = args['overlay' .. i .. 'link'] or ''&lt;br /&gt;
		local tipi = args['overlay' .. i .. 'tip'] or args['overlay' .. i] or ''&lt;br /&gt;
		local overlayi = args['overlay' .. i] or args['overlay' .. i .. 'tip'] or ''&lt;br /&gt;
		if (overlayi ~= '' or tipi ~= '') then&lt;br /&gt;
			local imagei = buildicon(i, formi, linki, colori, tipi)&lt;br /&gt;
			itemdata[k] = buildlegenditem(imagei, args['overlay' .. i .. 'link'] or '', overlayi)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the overlay image&lt;br /&gt;
	if image ~= '' then&lt;br /&gt;
		local cell = root:tag('tr'):tag('td')&lt;br /&gt;
		cell:attr('align', 'center')&lt;br /&gt;
		if( padding ~= '' ) then&lt;br /&gt;
			cell:css('padding', padding)&lt;br /&gt;
		end&lt;br /&gt;
		if( columns &amp;gt; 1 and legendbox == 'yes' ) then&lt;br /&gt;
			cell:attr('colspan', columns)&lt;br /&gt;
		end&lt;br /&gt;
		local imagediv = cell:tag('div')&lt;br /&gt;
		imagediv:css('position','relative')&lt;br /&gt;
			:css('left', '0px')&lt;br /&gt;
			:css('top', '0px')&lt;br /&gt;
			:css('width', ((grid == 'yes') and 940 or width) .. 'px')&lt;br /&gt;
			:css('height', ((grid == 'yes') and 940 or height) .. 'px')&lt;br /&gt;
		if grid == 'yes' then&lt;br /&gt;
			imagediv:tag('span')&lt;br /&gt;
				:css('position', 'absolute')&lt;br /&gt;
				:css('left', '0px')&lt;br /&gt;
				:css('top', '0px')&lt;br /&gt;
				:css('z-index', '2')&lt;br /&gt;
				:wikitext('[[File:Grid 99, 100 int red 50 int yellow (940).svg|940px]]')&lt;br /&gt;
		end&lt;br /&gt;
		imagediv:tag('span')&lt;br /&gt;
			:css('position', 'absolute')&lt;br /&gt;
			:css('left', '0px')&lt;br /&gt;
			:css('top', '0px')&lt;br /&gt;
			:css('z-index', '0')&lt;br /&gt;
			:css('width', width .. 'px')&lt;br /&gt;
			:css('height', height .. 'px')&lt;br /&gt;
			:wikitext('[[File:' .. image .. '|' .. width .. 'x' .. height .. 'px]]')&lt;br /&gt;
		if overlay == 'yes' then&lt;br /&gt;
			for k = 1,#itemnums do&lt;br /&gt;
				local i = itemnums[k]&lt;br /&gt;
				local imagei = (itemdata[k])[1]&lt;br /&gt;
				for j =0,3 do&lt;br /&gt;
					local overlayileftj = args['overlay' .. i .. 'left' .. ((j == 0) and '' or j)] or ''&lt;br /&gt;
					local overlayitopj = args['overlay' .. i .. 'top' .. ((j == 0) and '' or j)] or ''&lt;br /&gt;
					if overlayileftj ~= '' then&lt;br /&gt;
						imagediv:tag('div')&lt;br /&gt;
							:css('position', 'absolute')&lt;br /&gt;
							:css('left', overlayileftj .. 'px')&lt;br /&gt;
							:css('top', overlayitopj .. 'px')&lt;br /&gt;
							:css('line-height', '95%')&lt;br /&gt;
							:css('z-index', '1')&lt;br /&gt;
							:wikitext(imagei)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Split the legend items into sub-legends&lt;br /&gt;
	legend = {{}, {}, {}, {}, {}}&lt;br /&gt;
	local jmax = itemnums[#itemnums]&lt;br /&gt;
	for i=1,5 do&lt;br /&gt;
		if args['legend' .. i .. 'start'] then&lt;br /&gt;
			-- default is all items&lt;br /&gt;
			j1 = 0&lt;br /&gt;
			j2 = jmax&lt;br /&gt;
			-- set start item number to (legendistart) or (legend(i-1)end + 1)&lt;br /&gt;
			if args['legend' .. i .. 'start'] then&lt;br /&gt;
				j1 = tonumber(args['legend' .. i .. 'start']) or j1&lt;br /&gt;
			elseif args['legend' .. (i-1) .. 'end'] then&lt;br /&gt;
				j1 = (tonumber(args['legend' .. (i-1) .. 'end']) or j1) + 1&lt;br /&gt;
			end&lt;br /&gt;
			-- set end item number to (legendiend) or (legend(i+1)start - 1)&lt;br /&gt;
			if args['legend' .. i .. 'end'] then&lt;br /&gt;
				j2 = tonumber(args['legend' .. i .. 'end']) or j2&lt;br /&gt;
			elseif args['legend' .. (i+1) .. 'start'] then&lt;br /&gt;
				j2 = (tonumber(args['legend' .. (i+1) .. 'start']) or j2) - 1&lt;br /&gt;
			end&lt;br /&gt;
			-- get the items within the range, marking them as they are used&lt;br /&gt;
			for k=1,#itemnums do&lt;br /&gt;
				j = itemnums[k]&lt;br /&gt;
				if (j &amp;gt;= 0 and j &amp;gt;= j1 and j &amp;lt;= j2) then&lt;br /&gt;
					table.insert(legend[i], itemdata[k])&lt;br /&gt;
					itemnums[k] = -1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add any left over items to the first legend&lt;br /&gt;
	for k = 1,#itemnums do&lt;br /&gt;
		if itemnums[k] &amp;gt;= 0 then&lt;br /&gt;
			table.insert(legend[1], itemdata[k])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Build the legend&lt;br /&gt;
	if columns &amp;gt; 0 then&lt;br /&gt;
		for i = 1,5 do&lt;br /&gt;
			local locallegend = legend[i]&lt;br /&gt;
			if (locallegend and #locallegend &amp;gt; 0) then&lt;br /&gt;
				local cell = root:tag('tr'):tag('td')&lt;br /&gt;
				cell:wikitext(buildlegend(locallegend, columns, border, args['legend' .. i .. 'title'] or ''))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Ane</name></author>
		
	</entry>
</feed>