×
Create a new article
Write your page title here:
We currently have 152 articles on Grow Song of The Evertree Wiki. Type your article name above or create one of the articles listed here!



    Grow Song of The Evertree Wiki
    Revision as of 16:35, 21 November 2022 by NotAracham (talk | contribs) (replacing dialogue module with local version)
    (diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

    This module is invoked by the {{Dialogue}} template.


    --| Creates dialogue definition lists
    --- For whatever reason, refuses to make blockquotes
    --- <nowiki>
    local Dialogue = {}
    
    ----
    -- Libraries and Globals
    ----
    -- Parses invocation and template parameters, trims whitespace, and removes blanks.
    local getArgs = require('Module:Arguments').getArgs
    
    ----
    -- Local Functions
    ----
    local function makeInvokeFunc(funcName)
      return function (frame)
        local args = getArgs(frame)
        return Dialogue[funcName](args)
      end
    end
    
    ----
    -- Public Functions
    ----
    --% Formats dialogue between multiple speakers
    --- Intended to replace {{Dialogue}}.  
    --- Syntax compliant with [[wikipedia:Template:Dialogue]] 
    --- with portability and citation modifications
    --@ frame (table) Invokes the frame from {{Dialogue}}. See [[Template:Dialogue/doc]].
    --: (string) HTML <dl />
    Dialogue.main = makeInvokeFunc('dialogue')
    --% & crafts the Dialogue definition list
    --@ args (table) Arguments passed from Module function call <code>[.main]</code> or other Lua Modules
    function Dialogue.dialogue (args)
      local block = mw.html.create('dl'):addClass('dialogue-wrapper')
      for i,v in ipairs(args) do
        local next_param = i + 1
        local mood_line = next_param / 2
          if i == 1 then 
            if v == 'action' then
              block:tag('dd')
              :tag('small'):attr('data-dialogue','action')
              :tag('u')
              :wikitext('['..args[next_param]..']')
              :done():done():done()
            else
              local speaker = 
                (args[i] and args[args[i]]) 
                and args[args[i]]
                or (
                    type(args[i]) == 'string' 
                        and mw.text.trim(args[i]):len() > 0
                    ) 
                  and args[i] 
                  or nil
              speaker = speaker and string.format("'''%s'''", speaker)
              local mood = args['mood'..mood_line] or nil
              mood = mood and string.format("&nbsp;''(%s)''", mood)
              if speaker or mood then
                block:tag('dt')
                :wikitext(
                  ('%s%s'):format( speaker or '', mood or '')
                ):done()
              end
              if args[next_param] then
                block:tag('dd'):tag('q')
                :wikitext(args[next_param])
                :done():done()
              else
                block:tag('dd'):wikitext('...'):done()
              end
            end
          elseif math.fmod(i, 2) == 1 then
            if v == 'action' then
              block:tag('dd')
              :tag('small')
              :attr('data-dialogue','action')
              :tag('u')
              :wikitext('['..args[next_param]..']')
              :done():done():done()
            else
              local speaker = 
                (args[i] and args[args[i]]) 
                and args[args[i]]
                or (
                    type(args[i]) == 'string' 
                        and mw.text.trim(args[i]):len() > 0
                    ) 
                  and args[i] 
                  or nil
              speaker = speaker and string.format("'''%s'''", speaker)
              local mood = args['mood'..mood_line] or nil
              mood = mood and string.format("&nbsp;''(%s)''", mood)
              if speaker or mood then
                block:tag('dt')
                :wikitext(
                  ('%s%s'):format( speaker or '', mood or '')
                )
                :done()
              end
              if args[next_param] then
                block:tag('dd'):tag('q')
                :wikitext(args[next_param])
                :done():done()
              else
                block:tag('dd'):wikitext('...'):done()
              end
            end
          end
      end
      block:done()
      if args['cite'] then
        block:tag('cite'):wikitext(string.format("— %s", args['cite'])):done()
      end
      return tostring(block)
    end
    
    ----
    -- Output
    ----
    return Dialogue
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.