Modul:Overlay
-- this module implements [[Template:Overlay]]
-- imported from [[:en:module:Overlay]]
local p = {}
local mArguments = require('Modul: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('  ')
)
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('Module: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) < 10) and '0px 4px' or '0px 2px')
:css('vertical-align', 'middle')
:css('-moz-border-radius', '3px')
:css('-webkit-border-radius', '3px')
:css('border-radius', '3px')
:css('background-color', c)
-- link the inner span if requested and insert in the div
if lk ~= '' then
div:wikitext('[[:' .. lk .. '|' .. tostring(span) .. ']]')
else
div:wikitext(tostring(span))
end
-- convert to a string
return tostring(div)
end
end
local function buildlegend(data, cols, border, caption)
-- create the outer table to hold the columns
local root = mw.html.create('table')
:css('width', '100%')
:css('border', (border ~= 'no') and '1px #ccc solid' or '')
-- create the outer row which will contain the columns
local outerrow = root:tag('tr')
local percol = math.ceil((#data) / cols)
local k = 0
for j=1,cols do
-- create the outer cell to hold this column
local colcell = outerrow:tag('td')
:css('width', (math.floor(10/cols)/10) .. '%')
:css('vertical-align', 'top')
-- create the inner table to hold the entries in the column
local coltable = colcell:tag('table')
:css('width', '100%')
:css('font-size', '85%')
:css('line-height', '95%')
-- add the entries to the column
for l = 1,percol do
k = k + 1
if k <= #data then
local rdata = data[k]
local tr = coltable:tag('tr'):css('vertical-align','top')
tr:tag('td')
:css('width', '12px')
:css('text-align', 'right')
:css('padding-bottom', '2px')
:wikitext(rdata[1] or '')
tr:tag('td')
:css('padding-bottom', '2px')
:wikitext(rdata[2] or '')
end
end
end
return caption .. tostring(root)
end
local function buildlegenditem(im, lk, t)
local res = {im, ''}
if t ~= '' then
if lk ~= '' then
res[2] = '[[:' .. lk .. '|' .. t .. ']]'
else
res[2] = t
end
else
res[2] = '[[:' .. lk .. '|' .. lk .. ']]'
end
return res
end
function p.icon(frame)
local args = mArguments.getArgs(frame)
return tostring(
mw.html.create('div')
:css('display', 'inline-block')
:css('line-height', '95%')
:wikitext(buildicon(args['1'] or '',
args['form'] or 'icon',
args['link'] or '',
args['2'] or 'red',
args['tip'] or ''))
)
end
function p.main(frame)
local args = mArguments.getArgs(frame)
local image = args['image'] or ''
local width = tonumber(args['width'] or '500') or 500
local height = tonumber(args['height'] or '500') or 500
local columns = tonumber(args['columns'] or '3') or 3
local grid = ((args['grid'] or ''):lower() == 'yes') and 'yes' or 'no'
local legendbox = ((args['legendbox'] or ''):lower() == 'no') and 'no' or 'yes'
local overlay = (image == '') and 'no' or ( ((args['overlay'] or ''):lower() == 'no') and 'no' or 'yes' )
local float = args['float'] or 'center'
local border = ((args['border'] or ''):lower() == 'no') and 'no' or 'yes'
local padding = args['padding'] or ''
-- create the root table
local root = mw.html.create('table')
if float == 'center' or float == 'centre' then
root:css('margin-left', 'auto')
:css('margin-right', 'auto')
elseif float == 'right' then
root:css('float', 'right')
:css('clear', 'right')
:css('margin-left', '1em')
elseif float == 'left' then
root:css('float', 'left')
:css('clear', 'left')
:css('margin-right', '1em')
else
root:css('float', float)
end
if border == 'yes' then
root:css('border', '1px #ccc solid')
end
-- create a list of all the overlay numbers
local itemnums = {}
for k, v in pairs( args ) do
local i = tonumber(tostring(k):match( '^%s*overlay([%d]+)%s*$' ) or '-1')
if i > -1 then
table.insert(itemnums, i)
else
i = tonumber(tostring(k):match( '^%s*overlay([%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('[[File:Grid 99, 100 int red 50 int yellow (940).svg|940px]]')
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('[[File:' .. image .. '|' .. width .. 'x' .. height .. 'px]]')
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 <= j2) then
table.insert(legend[i], itemdata[k])
itemnums[k] = -1
end
end
end
end
-- Add any left over items to the first legend
for k = 1,#itemnums do
if itemnums[k] >= 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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve









