×
Create a new article
Write your page title here:
We currently have 9 articles on Arcadian Odyssey Extended Universe. Type your article name above or click on one of the titles below and start writing!



Documentation for this module may be created at Module:Wide image/doc

-- 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