پودمان:Wide image
ظاهر
-- This module implements [[template:wide image]] and [[template:panorama]]
local p = {}
local function getfilename(s)
s = mw.ustring.gsub(s or '', '^%s*[Ff][Ii][Ll][Ee]%s*:%s*', '')
s = mw.ustring.gsub(s or '', '^%s*[Ii][Mm][Aa][Gg][Ee]%s*:%s*', '')
s = mw.ustring.gsub(s or '', '^%s*پرونده%s*:%s*', '')
return s
end
local function getwidth(s, w, h)
w = mw.ustring.gsub(w or '0', '^%s*(%d+)%s*[Pp][Xx]*%s*$', '%1')
h = mw.ustring.gsub(h or '0', '^%s*(%d+)%s*[Pp][Xx]*%s*$', '%1')
w = tonumber(w) or 0
h = tonumber(h) or 0
if w > 0 then
return w
end
local file = s and mw.title.new('پرونده:' .. mw.uri.decode(mw.ustring.gsub(s,'%|.*$',''), 'WIKI'))
file = file and file.file or {width = 0, height = 0}
if h > 0 then
w = math.floor(h * (tonumber(file.width) or 0)/(tonumber(file.height) or 1) + 0.5)
if w > 0 then
return w
end
end
w = tonumber(file.width) or 0
return w
end
local function getimage(s, w, a, c, ltr)
if c == 'thumb' or c == 'thumbnail' or c == 'frame' or c == 'border' or c == 'انگشتی' or c == 'بندانگشتی' or c == 'قاب' then
c = s
elseif ltr and c ~= '' then
c = '‪' .. c .. '‬'
end
return '[[پرونده:' .. (s or '') .. '|' .. (w or '') .. '|alt=' .. (a or '')
.. '|' .. mw.text.unstrip(c or '') .. ']]'
end
local function getcontainers(noborder, float, width, maxwidth)
local r = mw.html.create('div')
if noborder then
if float == 'right' then
r:addClass('floatright')
elseif float == 'left' then
r:addClass('floatleft')
elseif float == 'none' then
r:addClass('floatnone')
else -- center is default
r:addClass('floatnone')
r:css('margin-left', 'auto')
r:css('margin-right', 'auto')
r:css('overflow', 'hidden')
end
else
r:addClass('thumb')
if float == 'left' then
r:addClass('tleft')
elseif float == 'right' then
r:addClass('tright')
elseif float == 'none' then
r:addClass('tnone')
else -- center is default
r:addClass('tnone')
r:css('margin-left', 'auto')
r:css('margin-right', 'auto')
r:css('overflow', 'hidden')
end
end
r:css('width', width)
r:css('max-width', maxwidth)
local d = noborder and r or r:tag('div'):addClass('thumbinner')
return r,d
end
function wideimage(image, width, height, caption, boxwidth, float, alt, border, capalign, dir)
if image then
image = getfilename(image)
local iwidth = getwidth(image, width or '0', height or '0')
if width == nil then
width = iwidth .. 'px'
end
local ltr = dir and dir == 'ltr' or nil
local noborder = border and border == 'no' or nil
local maxwidth = noborder and (iwidth .. 'px') or ((iwidth + 8) .. 'px')
local r,d = getcontainers(noborder, float or '', boxwidth or 'auto', maxwidth)
--to convert وسط, چپ and راست to friendly align values for MediaWiki software
if capalign then
if capalign == 'وسط' then
capalign = 'center'
elseif capalign == 'چپ' then
capalign = 'left'
elseif capalign == 'راست' then
capalign = 'right'
end
end
if tonumber(width) then
width = width .. 'px'
end
d:tag('div')
:addClass('noresize')
:css('overflow', 'auto')
:css('direction', ltr and 'ltr' or nil)
:wikitext(getimage(image,width,alt,caption or '',ltr))
if caption then
d = d:tag('div')
:addClass('thumbcaption')
:css('text-align', capalign)
if noborder == nil then
d:tag('div')
:addClass('magnify')
:wikitext('[[:پرونده:' .. image .. '| ]]')
end
d:wikitext(caption)
end
return tostring(r)
end
return ''
end
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return wideimage(
args['image'] or args['تصویر'] or args[1], args[2] or nil, -- width
args['height'] or args['ارتفاع'] or nil, args['caption'] or args['زیرنویس'] or args['توضیح'] or args[3],
args['width'] or args['پهنا'] or args['عرض'] or args[4], args['align'] or args['تراز'] or args[5],
args['alt'] or args['جایگزین'], args['border'] or args['قاب'], args['align-cap'] or args['تراز زیرنویس'] or args['تراز توضیح'], args['dir'] or args['جهت']
)
end
return p