Module:Quote: Difference between revisions

From Honkai: Nexus Anima Wiki
Jump to navigation Jump to search
m Protected "Module:Quote" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
No edit summary
Line 1: Line 1:
-- This Module is used for making templates based in the Lua language.
-- <nowiki>
-- See more details about Lua in [[w:Help:Lua]].
local Quote = {}
-- The Fandom Developer's Wiki hosts Global Lua Modules that can be imported and locally overridden.
local getArgs = require('Dev:Arguments').getArgs
-- The next line imports the Quote module from the [[w:c:dev:Global Lua Modules]].
local i18n = require('Dev:I18n').loadMessages('Quote')
local Quote = require('Dev:Quote')
 
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Quote]]
local function build(quote_contents, quote_source, options)
local quote_container = mw.html.create('blockquote')
:addClass('pull-quote')
:addClass(options.align)
:addClass(options.extraclasses)
:css(options.styles)
:cssText(options.extrastyles)
:node(quote_contents)
 
if quote_source then
quote_container:tag('div')
:addClass('pull-quote__source')
:tag('cite')
:wikitext(quote_source)
:done()
:done()
end
 
return quote_container
end
 
local function options(args)
local options = {}
 
options.styles = {}
options.extraclasses = i18n:parameter('class', args)
options.extrastyles = i18n:parameter('style', args)
options.align = ''
local align = i18n:parameter('align', args)
if align then
options.align = 'pull-quote--' .. align
options.styles['width'] = i18n:parameter('width', args) or
  i18n:parameter('quotewidth', args) or
  '300px'
end
 
return options
end
 
-- let MediaWiki parser auto-generate <p> tags
local function paragraph(quotetext)
return '\n' .. quotetext .. '\n'
end
 
function Quote.quote(frame)
local args = getArgs(frame)
 
local options = options(args)
 
local quotetext = args[1] or
  i18n:parameter('quotetext', args) or
  i18n:parameter('quote', args) or
  i18n:parameter('text', args) or ''
 
local person = args[2] or
  i18n:parameter('person', args) or
  i18n:parameter('speaker', args) or
  i18n:parameter('personquoted', args) or nil
 
local source = args[3] or
  i18n:parameter('source', args) or
  i18n:parameter('quote_source', args) or nil
 
local quote_contents = mw.html.create('div')
:addClass('pull-quote__text')
:wikitext(paragraph(quotetext))
 
local quote_source = person
 
if person and source then
quote_source = person .. ', ' .. source
elseif source then
quote_source = source
end
 
return build(quote_contents, quote_source, options)
end
 
function Quote.dialogue(frame)
local args = getArgs(frame)
 
local options = options(args)
 
local quote_contents = mw.html.create('div')
:addClass('pull-quote__text')
 
local quote_source
 
for i, v in ipairs(args) do
local next_param = i + 1
if i % 2 ~= 0 then
quote_contents:tag('div')
:addClass('pull-quote__line')
:tag('strong')
:addClass('pull-quote__speaker')
:wikitext(v .. ':')
:done()
:wikitext(' ' .. paragraph(args[next_param]))
:done()
end
end
 
local context = i18n:parameter('context', args)
local source = i18n:parameter('source', args)
if context and source then
quote_source = context .. ', ' .. source
elseif context and not source then
quote_source = context
elseif source and not context then
quote_source = source
end
 
return build(quote_contents, quote_source, options)
 
end


-- The last line produces the output for the template
return Quote
return Quote
-- </nowiki>

Revision as of 10:45, 13 July 2026

This module is used by most of the basic Quote Templates and is invoked by {{Quote}}.


-- <nowiki>
local Quote = {}
local getArgs = require('Dev:Arguments').getArgs
local i18n = require('Dev:I18n').loadMessages('Quote')

local function build(quote_contents, quote_source, options)
	local quote_container = mw.html.create('blockquote')
		:addClass('pull-quote')
		:addClass(options.align)
		:addClass(options.extraclasses)
		:css(options.styles)
		:cssText(options.extrastyles)
		:node(quote_contents)

	if quote_source then
		quote_container:tag('div')
			:addClass('pull-quote__source')
				:tag('cite')
				:wikitext(quote_source)
				:done()
			:done()
	end

	return quote_container
end

local function options(args)
	local options = {}

	options.styles = {}
	options.extraclasses = i18n:parameter('class', args)
	options.extrastyles = i18n:parameter('style', args)
	options.align = ''
	local align = i18n:parameter('align', args)
	if align then
		options.align = 'pull-quote--' .. align
		options.styles['width'] = i18n:parameter('width', args) or
								  i18n:parameter('quotewidth', args) or
								  '300px'
	end

	return options
end

-- let MediaWiki parser auto-generate <p> tags
local function paragraph(quotetext)
	return '\n' .. quotetext .. '\n'
end

function Quote.quote(frame)
	local args = getArgs(frame)

	local options = options(args)

	local quotetext = args[1] or
					  i18n:parameter('quotetext', args) or
					  i18n:parameter('quote', args) or
					  i18n:parameter('text', args) or ''

	local person = args[2] or
				   i18n:parameter('person', args) or
				   i18n:parameter('speaker', args) or
				   i18n:parameter('personquoted', args) or nil

	local source = args[3] or
				   i18n:parameter('source', args) or
				   i18n:parameter('quote_source', args) or nil

	local quote_contents = mw.html.create('div')
		:addClass('pull-quote__text')
		:wikitext(paragraph(quotetext))

	local quote_source = person

	if person and source then
		quote_source = person .. ', ' .. source
	elseif source then
		quote_source = source
	end

	return build(quote_contents, quote_source, options)
end

function Quote.dialogue(frame)
	local args = getArgs(frame)

	local options = options(args)

	local quote_contents = mw.html.create('div')
		:addClass('pull-quote__text')

	local quote_source

	for i, v in ipairs(args) do
		local next_param = i + 1
		
		if i % 2 ~= 0 then
			quote_contents:tag('div')
				:addClass('pull-quote__line')
				:tag('strong')
					:addClass('pull-quote__speaker')
					:wikitext(v .. ':')
					:done()
				:wikitext(' ' .. paragraph(args[next_param]))
				:done()
		end
	end

	local context = i18n:parameter('context', args)
	local source = i18n:parameter('source', args)
	if context and source then
		quote_source = context .. ', ' .. source
	elseif context and not source then
		quote_source = context
	elseif source and not context then
		quote_source = source
	end

	return build(quote_contents, quote_source, options)

end

return Quote
-- </nowiki>