Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions Wide image/main.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
-- 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('floatleft')
elseif float == 'right' then
r:addClass('floatright')
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, bgtype)
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 + 10) .. 'px')

local r,d = getcontainers(noborder, float or '', boxwidth or 'auto', maxwidth)

if tonumber(width) then
width = width .. 'px'
end

cclass = 'noresize '

if not (border == 'no') then
cclass = cclass .. 'thumbimage'
end

if (bgtype == 'norm') then
cclass = cclass .. ' wide-image-normbg'
elseif (bgtype == 'none') then
cclass = cclass .. ' wide-image-nobg'
end

d:tag('div')
:addClass(cclass)
: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)
local styles = frame:extensionTag{
name = 'templatestyles',
args = { src = 'Module:Wide image/styles.css' },
}

return styles .. 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'], args['bgtype']
)
end

return p
9 changes: 9 additions & 0 deletions Wide image/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.wide-image-normbg, .thumbimage.wide-image-normbg {
background: var(--background-color-neutral-subtle, #f8f9fa);
color: inherit;
}

.wide-image-nobg, .thumbimage.wide-image-nobg {
background: transparent;
color: inherit;
}
Loading