Module: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*', ) 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('File:' .. 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, rtl) if c == 'thumb' or c == 'thumbnail' or c == 'frame' or c == 'border' then c = s	elseif rtl and c ~= '' then c = '&#x202A;' .. c .. '&#x202C;' end return '' end

local function getcontainers(noborder, float, width, maxwidth) local r = mw.html.create('div') if noborder then if float == 'left' then r:css('float', 'left') elseif float == 'right' then r:css('float', 'right') elseif float == 'none' then r:css('float', 'none') else -- center is default r:css('float', 'none') 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 rtl = dir and dir == 'rtl' 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) if tonumber(width) then width = width .. 'px' end d:tag('div') :addClass('noresize') :css('overflow', 'auto') :css('direction', rtl and 'rtl' or nil) :wikitext(getimage(image,width,alt,caption or '',rtl)) if caption then d = d:tag('div') :addClass('thumbcaption') :css('text-align', capalign) if noborder == nil then d:tag('div') :addClass('magnify') :wikitext(' ') 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[1], args[2] or nil, -- width			args['height'] or nil, args['caption'] or args[3], 			args['width'] or args[4], args['align'] or args[5], 			args['alt'], args['border'], args['align-cap'], args['dir']			) end

return p