Mô đun:Overlay

-- Mô đun này thực hiện Bản mẫu:Overlay
local p = {}

local mArguments = require('Mô đun:Arguments')

-- used to cache the calculated font color to avoid repeat calculations
local previous_backgroundcolor =
local fontcolor =

local function buildicon(n, form, lk, c, t)
local res
if form 'text' then
return tostring(
mw.html.create('span')
:css('font-weight', 'bold')
:css('color', c)
:wikitext(n)
)
elseif form 'color' or form == 'colour' then
return tostring(
mw.html.create('span')
:css('background-color', c)
:wikitext('&160;&160;')
)
else
-- check if the color is difference from the previous color
if c ~= previous_backgroundcolor then
-- color changed, so look up the best font color
local greatercontrast = require('Mô đun:Color contrast')._greatercontrast
fontcolor = greatercontrast{c, 'white', 'black', bias = 1.3}
-- update the previous value for the next check
previous_backgroundcolor = c
end
-- build the inner span for the icon
local span = mw.html.create('span')
:css('color', fontcolor)
:css('font-size', '88%')
:css('font-weight', 'bold')
:attr('title', t)
:wikitext(n)
-- build the outer div
local div = mw.html.create('div')
:css('display', 'inline-block')
:css('width', 'auto')
:css('height', 'auto')
:css('text-align', 'center')
:css('padding', ((tonumber(n) or 0) -1 then
table.insert(itemnums, i)
else
i = tonumber(tostring(k):match( '^%soverlay([%d]+)tip%s$' ) or '-1')
if i > -1 then
table.insert(itemnums, i)
end
end
end
-- sort to process in order
table.sort( itemnums )

-- remove duplicates
for k = 2,itemnums do
if itemnums[k] == itemnums[k-1] then
table.remove(itemnums, k)
end
end

-- build the overlay markers and text
itemdata = {}
local colori = args['color'] or args['colour'] or 'red'
local formi =
for k = 1,itemnums do
local i = itemnums[k]
formi = args['overlay' .. i .. 'form'] or formi
colori = args['overlay' .. i .. 'color'] or args['overlay' .. i .. 'colour'] or colori
local linki = args['overlay' .. i .. 'link'] or
local tipi = args['overlay' .. i .. 'tip'] or args['overlay' .. i] or
local overlayi = args['overlay' .. i] or args['overlay' .. i .. 'tip'] or
if (overlayi ~= or tipi ~= ) then
local imagei = buildicon(i, formi, linki, colori, tipi)
itemdata[k] = buildlegenditem(imagei, args['overlay' .. i .. 'link'] or , overlayi)
end
end

-- create the overlay image
if image ~= then
local cell = root:tag('tr'):tag('td')
cell:attr('align', 'center')
if( padding ~= ) then
cell:css('padding', padding)
end
if( columns > 1 and legendbox == 'yes' ) then
cell:attr('colspan', columns)
end
local imagediv = cell:tag('div')
imagediv:css('position','relative')
:css('left', '0px')
:css('top', '0px')
:css('width', ((grid 'yes') and 940 or width) .. 'px')
:css('height', ((grid 'yes') and 940 or height) .. 'px')
if grid 'yes' then
imagediv:tag('span')
:css('position', 'absolute')
:css('left', '0px')
:css('top', '0px')
:css('z-index', '2')
:wikitext()
end
imagediv:tag('span')
:css('position', 'absolute')
:css('left', '0px')
:css('top', '0px')
:css('z-index', '0')
:css('width', width .. 'px')
:css('height', height .. 'px')
:wikitext()
if overlay 'yes' then
for k = 1,itemnums do
local i = itemnums[k]
local imagei = (itemdata[k])[1]
for j =0,3 do
local overlayileftj = args['overlay' .. i .. 'left' .. ((j == 0) and or j)] or
local overlayitopj = args['overlay' .. i .. 'top' .. ((j == 0) and or j)] or
if overlayileftj ~= then
imagediv:tag('div')
:css('position', 'absolute')
:css('left', overlayileftj .. 'px')
:css('top', overlayitopj .. 'px')
:css('line-height', '95%')
:css('z-index', '1')
:wikitext(imagei)
end
end
end
end
end

-- Split the legend items into sub-legends
legend = {{}, {}, {}, {}, {}}
local jmax = itemnums[itemnums]
for i=1,5 do
if args['legend' .. i .. 'start'] then
-- default is all items
j1 = 0
j2 = jmax
-- set start item number to (legendistart) or (legend(i-1)end + 1)
if args['legend' .. i .. 'start'] then
j1 = tonumber(args['legend' .. i .. 'start']) or j1
elseif args['legend' .. (i-1) .. 'end'] then
j1 = (tonumber(args['legend' .. (i-1) .. 'end']) or j1) + 1
end
-- set end item number to (legendiend) or (legend(i+1)start - 1)
if args['legend' .. i .. 'end'] then
j2 = tonumber(args['legend' .. i .. 'end']) or j2
elseif args['legend' .. (i+1) .. 'start'] then
j2 = (tonumber(args['legend' .. (i+1) .. 'start']) or j2) - 1
end
-- get the items within the range, marking them as they are used
for k=1,itemnums do
j = itemnums[k]
if (j >= 0 and j >= j1 and j = 0 then
table.insert(legend[1], itemdata[k])
end
end

-- Build the legend
if columns > 0 then
for i = 1,5 do
local locallegend = legend[i]
if (locallegend and locallegend > 0) then
local cell = root:tag('tr'):tag('td')
cell:wikitext(buildlegend(locallegend, columns, border, args['legend' .. i .. 'title'] or ))
end
end
end

return tostring(root)
end

return p