Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
You must create an account or log in to edit.

Module:Hatnote: Difference between revisions

From Amaranth Legacy, available at amaranth-legacy.community
Content deleted Content added
No edit summary
No edit summary
Line 46: Line 46:
-- left file
-- left file
if args['file1'] then
if args['file1'] then
local class = 'notpageimage'
local class = 'notpageimage hatnote-image1'
if args['file1_class'] then
if args['file1_class'] then
class = class .. ' ' .. args['file1_class']
class = class .. ' ' .. args['file1_class']
Line 97: Line 97:
-- right file
-- right file
if args['file2'] then
if args['file2'] then
local class = 'notpageimage'
local class = 'notpageimage hatnote-image2'
if args['file2_class'] then
if args['file2_class'] then
class = class .. ' ' .. args['file2_class']
class = class .. ' ' .. args['file2_class']

Revision as of 23:39, April 16, 2025

This module is used for Template:Hatnote. See the template's page for more information.


local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local p = {}

function p.main(frame)
	local args = getArgs(frame)
	local content = mw.html.create('div')
		:addClass('noexcerpt')
		:addClass('hatnote')
		:attr('role', 'note')

	-- backwards compatibility
	if args['file'] then args['file1'] = args['file'] end
	if args['file_class'] then args['file1_class'] = args['file_class'] end

	-- input validation
	if not args['file1'] and args['file2'] then
		error('file1 is required when file2 is specified')
	end
	if not args['primary'] then
		error('primary is required')
	end

	-- set the color so the look stays consistent even outside of the scope
	if args['color'] then
		content:css('--color-amaranth-legacy-scope', args['color'])
		if yesno(args['color_applies_to_links'] or true) then
			content:css('--color-link', args['color'])
		end
	end

	-- top <hr>
	if not yesno(args['remove_hr'] or false) and not yesno(args['remove_hr_top'] or false) then
		content:wikitext('<hr>')
	end

	-- content wrapper
	if args['file1'] and args['file2'] then
		content:addClass('hatnote2')
	elseif args['file1'] then
		content:addClass('hatnote1')
	else
		content:addClass('hatnote0')
	end

	-- left file
	if args['file1'] then
		local class = 'notpageimage hatnote-image1'
		if args['file1_class'] then
			class = class .. ' ' .. args['file1_class']
		end
		content:wikitext('[['
			.. 'File:' .. args['file1']
			.. '|' .. (args['file_size'] or '80px')
			.. '|class=' .. class
			.. '|link='
			.. '|alt='
		.. ']]')
	end

	-- center text
	local text = content:tag('p')

	-- primary text wrapper
	local primary_text = text:tag('span'):addClass('hatnote-primary')
	-- primary text linear-gradient
	if args['primary_gradient'] then
		primary_text
			:css('color', 'transparent')
			:css('background-image', 'linear-gradient(' .. args['primary_gradient'] .. ')')
			:css('background-clip', 'text')
	end
	-- primary text font-size
	if args['primary_font_size'] then
		primary_text:css('font-size', 'var(--font-size-' .. args['primary_font_size'] .. ')')
	end
	-- primary text font-family
	if args['font'] then
		primary_text:css('font-family', args['font'])
	end
	-- primary text text-transform
	if args['primary_transform'] then
		primary_text:css('text-transform', args['primary_transform'])
	end
	-- primary text
	primary_text:wikitext(args['primary'])

	-- secondary text
	if args['secondary'] then
		-- italic secondary text
		if yesno(args['italic_secondary'] or true) then
			args['secondary'] = '\'\'' .. args['secondary'] .. '\'\''
		end
		text:wikitext('<br/>' .. args['secondary'])
	end

	-- right file
	if args['file2'] then
		local class = 'notpageimage hatnote-image2'
		if args['file2_class'] then
			class = class .. ' ' .. args['file2_class']
		end
		content:wikitext('[['
			.. 'File:' .. args['file2']
			.. '|' .. (args['file_size'] or '80px')
			.. '|class=' .. class
			.. '|link='
			.. '|alt='
		.. ']]')
	end

	-- bottom <hr>
	if not yesno(args['remove_hr'] or false) and not yesno(args['remove_hr_bottom'] or false) then
		content:wikitext('<hr>')
	end

	return frame:extensionTag { name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' } }
		.. tostring(content)
end

return p