Jump to content

Module:Quote: Difference between revisions

From The Petit Planet Wiki
ReisuDesign (talk | contribs)
No edit summary
ReisuDesign (talk | contribs)
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
-- <nowiki>
-- <nowiki>
local Quote = {}
local Quote = {}
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local i18n = require('Module:I18n').loadMessages('Quote')
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')
-- Parameters
        :addClass(options.align)
-- =========================================================
        :addClass(options.extraclasses)
 
        :css(options.styles)
local function parameter(args, ...)
         :cssText(options.extrastyles)
     local names = { ... }
       
 
    quote_container:node(quote_contents)
    for _, name in ipairs(names) do
          
         local value = i18n:parameter(name, args)
    if quote_source then
 
    quote_container:tag('div')
         if value ~= nil and value ~= '' then
    :addClass('pull-quote__source')
            return value
        :tag('cite')
        end
        :wikitext(quote_source)
        :done()
        :done()
     end
     end
   
 
     return quote_container
     return nil
end
end


local function options(args)
 
     local options = {}
-- =========================================================
   
-- Options
    options.styles = {}
-- =========================================================
     options.extraclasses = i18n:parameter('class', args)
 
     options.extrastyles = i18n:parameter('style', args)
local function getOptions(args)
     options.align = ''
 
     local align = i18n:parameter('align', args)
     local options = {
        classes = {},
        styles = {}
     }
 
    local extraClasses = parameter(args, 'class')
 
     if extraClasses then
        options.extraClasses = extraClasses
    end
 
    local extraStyles = parameter(args, 'style')
 
     if extraStyles then
        options.extraStyles = extraStyles
    end
 
 
    -- Alignment
 
     local align = parameter(args, 'align')
 
     if align then
     if align then
         options.align = 'pull-quote--' .. align
         align = string.lower(align)
        options.styles['width'] = i18n:parameter('width', args) or
 
                                  i18n:parameter('quotewidth', args) or
        if align == 'left' or align == 'right' then
                                  '300px'
            options.classes[#options.classes + 1] =
                'pp-quote--' .. align
 
            local width =
                parameter(args, 'width', 'quotewidth')
 
            if width then
                options.styles.width = width
            end
        end
     end
     end
   
 
     return options
     return options
end
end


-- let MediaWiki parser auto-generate <p> tags
 
local function paragraph(quotetext)
-- =========================================================
return '\n' .. quotetext .. '\n'
-- Build quote
-- =========================================================
 
local function build(quoteContents, quoteSource, options)
 
    local quote = mw.html.create('blockquote')
        :addClass('pp-quote')
 
    -- Alignment classes
    for _, className in ipairs(options.classes) do
        quote:addClass(className)
    end
 
    -- Extra classes
    if options.extraClasses then
        quote:addClass(options.extraClasses)
    end
 
    -- Explicit styles
    for property, value in pairs(options.styles) do
        quote:css(property, value)
    end
 
    if options.extraStyles then
        quote:cssText(options.extraStyles)
    end
 
    -- Quote content
    quote:node(quoteContents)
 
    -- Source
    if quoteSource and quoteSource ~= '' then
        quote
            :tag('div')
                :addClass('pp-quote__source')
                :wikitext(quoteSource)
                :done()
    end
 
    return quote
end
end
-- =========================================================
-- Normal quote
-- =========================================================


function Quote.quote(frame)
function Quote.quote(frame)
     local args = getArgs(frame)
     local args = getArgs(frame)
    local options = getOptions(args)
    local quoteText =
        args[1]
        or parameter(args, 'quotetext', 'quote', 'text')
        or ''
    local person =
        args[2]
        or parameter(
            args,
            'person',
            'speaker',
            'personquoted'
        )
    local source =
        args[3]
        or parameter(
            args,
            'source',
            'quote_source'
        )


    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')
    -- Quote text
         :addClass('pull-quote__text')
     local quoteContents = mw.html.create('div')
         :wikitext(paragraph(quotetext))
         :addClass('pp-quote__text')
      
         :wikitext(quoteText)
     local quote_source = person
 
   
 
     -- Source
     local quoteSource
 
     if person and source then
     if person and source then
         quote_source = person .. ', ' .. source
         quoteSource = person .. ', ' .. source
    elseif person then
        quoteSource = person
     elseif source then
     elseif source then
    quote_source = source
        quoteSource = source
     end
     end
   
 
     return build(quote_contents, quote_source, options)
 
     return build(
        quoteContents,
        quoteSource,
        options
    )
end
end
-- =========================================================
-- Dialogue
-- =========================================================


function Quote.dialogue(frame)
function Quote.dialogue(frame)
     local args = getArgs(frame)
     local args = getArgs(frame)
   
     local options = getOptions(args)
     local options = options(args)
 
   
     local quoteContents = mw.html.create('div')
     local quote_contents = mw.html.create('div')
         :addClass('pp-quote__text')
         :addClass('pull-quote__text')
         :addClass('pp-quote__text--dialogue')
          
 
     local quote_source
 
     -- Dialogue lines
    for i = 1, #args, 2 do
 
        local speaker = args[i]
        local line = args[i + 1]
 
        if speaker and line then
 
            quoteContents
                :tag('div')
                    :addClass('pp-quote__line')
 
                    :tag('strong')
                        :addClass('pp-quote__speaker')
                        :wikitext(speaker .. ':')
                        :done()
 
                    :wikitext(' ' .. line)


    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()
                     :done()
                :wikitext(' ' .. paragraph(args[next_param]))
                :done()
         end
         end
     end
     end
      
 
     local context = i18n:parameter('context', args)
 
     local source = i18n:parameter('source', args)
     -- Dialogue source
     local context =
        parameter(args, 'context')
 
     local source =
        parameter(args, 'source')
 
    local quoteSource
 
     if context and source then
     if context and source then
         quote_source = context .. ', ' .. source
         quoteSource = context .. ', ' .. source
     elseif context and not source then
     elseif context then
         quote_source = context
         quoteSource = context
     elseif source and not context then
     elseif source then
         quote_source = source
         quoteSource = source
     end
     end
   
 
     return build(quote_contents, quote_source, options)
 
      
     return build(
        quoteContents,
        quoteSource,
        options
     )
end
end


return Quote
return Quote

Latest revision as of 16:29, 26 September 2026

Module documentation

This module implements {{Quote}}.

-- <nowiki>
local Quote = {}

local getArgs = require('Module:Arguments').getArgs
local i18n = require('Module:I18n').loadMessages('Quote')


-- =========================================================
-- Parameters
-- =========================================================

local function parameter(args, ...)
    local names = { ... }

    for _, name in ipairs(names) do
        local value = i18n:parameter(name, args)

        if value ~= nil and value ~= '' then
            return value
        end
    end

    return nil
end


-- =========================================================
-- Options
-- =========================================================

local function getOptions(args)

    local options = {
        classes = {},
        styles = {}
    }

    local extraClasses = parameter(args, 'class')

    if extraClasses then
        options.extraClasses = extraClasses
    end

    local extraStyles = parameter(args, 'style')

    if extraStyles then
        options.extraStyles = extraStyles
    end


    -- Alignment

    local align = parameter(args, 'align')

    if align then
        align = string.lower(align)

        if align == 'left' or align == 'right' then
            options.classes[#options.classes + 1] =
                'pp-quote--' .. align

            local width =
                parameter(args, 'width', 'quotewidth')

            if width then
                options.styles.width = width
            end
        end
    end

    return options
end


-- =========================================================
-- Build quote
-- =========================================================

local function build(quoteContents, quoteSource, options)

    local quote = mw.html.create('blockquote')
        :addClass('pp-quote')

    -- Alignment classes
    for _, className in ipairs(options.classes) do
        quote:addClass(className)
    end

    -- Extra classes
    if options.extraClasses then
        quote:addClass(options.extraClasses)
    end

    -- Explicit styles
    for property, value in pairs(options.styles) do
        quote:css(property, value)
    end

    if options.extraStyles then
        quote:cssText(options.extraStyles)
    end

    -- Quote content
    quote:node(quoteContents)

    -- Source
    if quoteSource and quoteSource ~= '' then
        quote
            :tag('div')
                :addClass('pp-quote__source')
                :wikitext(quoteSource)
                :done()
    end

    return quote
end


-- =========================================================
-- Normal quote
-- =========================================================

function Quote.quote(frame)

    local args = getArgs(frame)
    local options = getOptions(args)

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

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

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


    -- Quote text
    local quoteContents = mw.html.create('div')
        :addClass('pp-quote__text')
        :wikitext(quoteText)


    -- Source
    local quoteSource

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


    return build(
        quoteContents,
        quoteSource,
        options
    )
end


-- =========================================================
-- Dialogue
-- =========================================================

function Quote.dialogue(frame)

    local args = getArgs(frame)
    local options = getOptions(args)

    local quoteContents = mw.html.create('div')
        :addClass('pp-quote__text')
        :addClass('pp-quote__text--dialogue')


    -- Dialogue lines
    for i = 1, #args, 2 do

        local speaker = args[i]
        local line = args[i + 1]

        if speaker and line then

            quoteContents
                :tag('div')
                    :addClass('pp-quote__line')

                    :tag('strong')
                        :addClass('pp-quote__speaker')
                        :wikitext(speaker .. ':')
                        :done()

                    :wikitext(' ' .. line)

                    :done()
        end
    end


    -- Dialogue source
    local context =
        parameter(args, 'context')

    local source =
        parameter(args, 'source')

    local quoteSource

    if context and source then
        quoteSource = context .. ', ' .. source
    elseif context then
        quoteSource = context
    elseif source then
        quoteSource = source
    end


    return build(
        quoteContents,
        quoteSource,
        options
    )
end


return Quote