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

Module:Scope hatnote: Difference between revisions

From Amaranth Legacy, available at amaranth-legacy.community
Content deleted Content added
No edit summary
No edit summary
Line 82: Line 82:
"label": "Use scope styling",
"label": "Use scope styling",
"description": "If the scope's styling should be used",
"description": "If the scope's styling should be used",
"type": "boolean",
"default": "true"
},
"use_hatnote_links": {
"label": "Use hatnote links",
"description": "If the scope's meta pages should be linked",
"type": "boolean",
"type": "boolean",
"default": "true"
"default": "true"

Revision as of 04:51, July 12, 2025

General template for scope hatnote templates

Parameters

for
Used in the description of the TemplateData
rawcss_ref
RawCSS application reference to use
categories
Categories to use (like Category:Scope: Imagindarium's Creation)
use_remove_parentheses
If Module:Remove parentheses should be used
use_hatnote_links
If Template:Hatnote links should be used

local yesno = require('Module:Yesno')

local p = {}

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame)
	local parentArgs = require('Module:Arguments').getArgs(frame:getParent())
	-- input validation
	if not args['for'] then error('"for" argument is required') end
	if not args['rawcss_ref'] then error('"rawcss_ref" argument is required') end
	if not args['categories'] then error('"categories" argument is required') end

	local result = ''

	-- remove parentheses from the displayed title
	if yesno(args['use_remove_parentheses'] or true) then
		for specifier in args['for']:gmatch('[^/]+') do
			result = result .. require('Module:Remove parentheses').invoke(specifier)
		end
	end

	-- indicator
	if yesno(args['use_indicator'] or true) and yesno(parentArgs['add_indicator'] or true) then
		if args['file'] then args['indicator_file'] = args['file'] end
		if args['file1'] then args['indicator_file'] = args['file1'] end
		if not args['indicator_file'] then error('"indicator_file" argument is required') end

		result = result .. frame:extensionTag{
			name = 'indicator',
			content = '[[File:' .. args['indicator_file']
				.. '|28px'
				.. '|class=' .. (args['indicator_class'] or args['file_class'] or '')
				.. '|link=Scope:' .. args['for']
				.. '|Scope: ' .. args['for']
				.. ']]',
			args = {
				name = 'scope-' .. args['for']:lower():gsub(' ', '_'):gsub('/', '-')
			}
		}
	end

	-- scope styling
	if yesno(parentArgs['use_scope_styling'] or true) then
		result = result .. frame:extensionTag('rawcss', '', {
			ref = args['rawcss_ref']
		})
	end

	-- hatnote
	result = result .. require('Module:Hatnote').main(frame)

	-- hatnote links
	if yesno(args['use_hatnote_links'] or false) and yesno(parentArgs['use_hatnote_links'] or true) then
		result = result .. frame:expandTemplate{
			title = 'Hatnote links',
			args = args
		}
	end

	-- categories
	if yesno(parentArgs['add_category'] or true) and not mw.title.getCurrentTitle():inNamespace(2) then
		result = result .. args['categories']
	end

	-- TemplateData
	result = result .. frame:getParent():preprocess('<noinclude>' .. frame:extensionTag('templatedata',
		[[{
	"params": {
		"add_category": {
			"label": "Add category",
			"description": "If the scope category should be added to the page",
			"type": "boolean",
			"default": "true"
		},
		"add_indicator": {
			"label": "Add indicator",
			"description": "If the scope indicator should be added to the page",
			"type": "boolean",
			"default": "true"
		},
		"use_scope_styling": {
			"label": "Use scope styling",
			"description": "If the scope's styling should be used",
			"type": "boolean",
			"default": "true"
		},
		"use_hatnote_links": {
			"label": "Use hatnote links",
			"description": "If the scope's meta pages should be linked",
			"type": "boolean",
			"default": "true"
		}
	},
	"description": "Scope hatnote for Scope:]] .. args['for'] .. [[",
	"format": "inline"
}]],
	{}) .. '[[Category:META: Hatnote]]</noinclude>')

	return result
end

return p