Module:Quote: Difference between revisions

ReisuDesign (talk | contribs)
No edit summary
Tags: Mobile edit Mobile web edit
ReisuDesign (talk | contribs)
No edit summary
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('div')
        :addClass('pp-quote')
        :addClass(options.align)
        :addClass(options.extraclasses)
        :css(options.styles)
        :cssText(options.extrastyles)


     quote_container:node(quote_contents)
-- =========================================================
-- Helpers
-- =========================================================
 
local function parameter(args, ...)
     local names = { ... }
 
    for _, name in ipairs(names) do
        local value = i18n:parameter(name, args)


    if quote_source then
        if value ~= nil and value ~= '' then
        quote_container
             return value
             :tag('div')
        end
                :addClass('pp-quote__source')
                :wikitext(quote_source)
                :done()
     end
     end


     return quote_container
     return nil
end
 
 
local function paragraph(text)
    return '\n' .. text .. '\n'
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 parseOptions(args)
     options.align = ''
     local options = {
     local align = i18n:parameter('align', args)
        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
 
     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.align = align
            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'
-- Quote builder
-- =========================================================
 
local function build(quoteContents, quoteSource, options)
 
    local quote = mw.html.create('div')
        :addClass('pp-quote')
 
    -- Alignment
    for _, className in ipairs(options.classes) do
        quote:addClass(className)
    end
 
    -- User-supplied classes
    if options.extraClasses then
        quote:addClass(options.extraClasses)
    end
 
    -- User-supplied styles
    for property, value in pairs(options.styles) do
        quote:css(property, value)
    end
 
    if options.extraStyles then
        quote:cssText(options.extraStyles)
    end
 
    -- Quote text
    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 = parseOptions(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 container
    local quoteContents = mw.html.create('div')
        :addClass('pp-quote__text')
        :wikitext(quoteText)


     local options = options(args)
     -- Build source
   
     local quoteSource
    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('pp-quote__text')
    :wikitext(quotetext)
   
    local quote_source = person
   
     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 = parseOptions(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(' ' .. paragraph(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)
     -- Dialogue source
     local source = i18n:parameter('source', args)
     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