Jump to content

Module:Wide image

Permanently protected module
From Wikipedia, the free encyclopedia

-- 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 = '‪' .. c .. '‬'
	end
	return '[[File:' .. (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 == 'left' then
			r:addClass('floatleft')
		elseif float == 'right' then
			r:addClass('floatright')
		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 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('[[:File:' .. 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[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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy