模块:Quote:修订间差异

(创建页面,内容为“-- This Module is used for making templates based in the Lua language. -- See more details about Lua in w:Help:Lua. -- The Fandom Developer's Wiki hosts Global Lua Modules that can be imported and locally overridden. -- The next line imports the Quote module from the w:c:dev:Global Lua Modules. local Quote = require('Dev:Quote') -- See more details about this module at w:c:dev:Global_Lua_Modules/Quote -- The last line produces the output for the te…”)
 
无编辑摘要
 
第1行: 第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('Module:Arguments').getArgs
-- The next line imports the Quote module from the [[w:c:dev:Global Lua Modules]].
local i18n = require('Module: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)
       
    quote_container: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
 
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)
    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('p')
        :addClass('pull-quote__text')
        :wikitext(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(' ' .. 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

2024年3月22日 (五) 10:39的最新版本

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


-- <nowiki>
local Quote = {}
local getArgs = require('Module:Arguments').getArgs
local i18n = require('Module: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)
        
    quote_container: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

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)
    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('p')
        :addClass('pull-quote__text')
        :wikitext(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(' ' .. 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