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



    Polcompball Wiki
    Revision as of 00:42, 31 August 2021 by TheGhostOfInky (talk | contribs)

    Documentation for this module may be created at Module:Dialogue/doc

    --| 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('Dev: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.

    Recent changes

  • Rigourdigga • 4 minutes ago
  • Icantthinkofanamexd • 18 minutes ago
  • Icantthinkofanamexd • 27 minutes ago
  • FanOfWolves • 27 minutes ago
  • Cookies help us deliver our services. By using our services, you agree to our use of cookies.