Module:Su: Difference between revisions

From Zoophilia Wiki
Jump to navigationJump to search
meta>Mr. Stradivarius
create replacement for Template:Su
 
Ookami (talk | contribs)
m 11 revisions imported
 
(10 intermediate revisions by 4 users not shown)
Line 14: Line 14:
end
end
end
end
return p.luaMain(args)
 
-- Define the variables to pass to luaMain.
local sup = args.p
local sub = args.b
local options = {
align = args.a,
fontSize = args.w,
lineHeight = args.lh,
verticalAlign = args.va
}
return p._main(sup, sub, options)
end
end


function p.luaMain(args)
function p._main(sup, sub, options)
options = options or {}
local span = mw.html.create('span')
local span = mw.html.create('span')


-- Set the styles
-- Set the styles.
span:css{
span:css{
['display']        = 'inline-block',
['display']        = 'inline-block',
['margin-bottom']  = '-0.3em',
['margin-bottom']  = '-0.3em',
['vertical-align'] = args.b and '-0.4em' or '0.8em',
['vertical-align'] = options.verticalAlign or sub and '-0.4em' or '0.8em',
['line-height']    = '1.2em',
['line-height']    = options.lineHeight or '1.2em'
}
}
if args.w == 'f' then
if options.fontSize == 'f' or options.fontSize == 'fixed' then
span:css{
span:css{
['font-family'] = 'monospace,courier',
['font-family'] = 'monospace',
['font-size']  = '85%'
['font-size']  = '80%'
}
}
else
else
span:css('font-size', args.w and args.w or '85%')
span:css('font-size', options.fontSize or '80%')
end
end
if args.a == 'r' then
if options.align == 'r' or options.align == 'right' then
span:css('text-align', 'right')
span:css('text-align', 'right')
elseif args.a == 'c' then
elseif options.align == 'c' or options.align == 'center' then
span:css('text-align', 'center')
span:css('text-align', 'center')
else
else
Line 43: Line 54:
end
end


-- Add the wikitext
-- Add the wikitext.
span
span
:wikitext(args.p)
:tag('sup')
:css('font-size', 'inherit')
:css('line-height', 'inherit')
:css('vertical-align', 'baseline')
:wikitext(sup)
:done()
:tag('br', {selfClosing = true}):done()
:tag('br', {selfClosing = true}):done()
:wikitext(args.b)
:tag('sub')
:css('font-size', 'inherit')
:css('line-height', 'inherit')
:css('vertical-align', 'baseline')
:wikitext(sub)
return tostring(span)
return tostring(span)

Latest revision as of 14:08, 3 September 2020

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

-- This module implements {{su}}.

local p = {}

function p.main(frame)
	-- Use arguments from the parent frame only, and remove any blank arguments.
	-- We don't need to trim whitespace from any arguments, as this module only
	-- uses named arguments, and whitespace is trimmed from them automatically. 
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		if v ~= '' then
			args[k] = v
		end
	end

	-- Define the variables to pass to luaMain.
	local sup = args.p
	local sub = args.b
	local options = {
		align = args.a,
		fontSize = args.w,
		lineHeight = args.lh,
		verticalAlign = args.va
	}
	return p._main(sup, sub, options)
end

function p._main(sup, sub, options)
	options = options or {}
	local span = mw.html.create('span')

	-- Set the styles.
	span:css{
		['display']        = 'inline-block',
		['margin-bottom']  = '-0.3em',
		['vertical-align'] = options.verticalAlign or sub and '-0.4em' or '0.8em',
		['line-height']    = options.lineHeight or '1.2em'
	}
	if options.fontSize == 'f' or options.fontSize == 'fixed' then
		span:css{
			['font-family'] = 'monospace',
			['font-size']   = '80%'
		}
	else
		span:css('font-size', options.fontSize or '80%')
	end
	if options.align == 'r' or options.align == 'right' then
		span:css('text-align', 'right')
	elseif options.align == 'c' or options.align == 'center' then
		span:css('text-align', 'center')
	else
		span:css('text-align', 'left')
	end

	-- Add the wikitext.
	span
		:tag('sup')
			:css('font-size', 'inherit')
			:css('line-height', 'inherit')
			:css('vertical-align', 'baseline')
			:wikitext(sup)
			:done()
		:tag('br', {selfClosing = true}):done()
		:tag('sub')
			:css('font-size', 'inherit')
			:css('line-height', 'inherit')
			:css('vertical-align', 'baseline')
			:wikitext(sub)
	
	return tostring(span)
end

return p