×
Create a new article
Write your page title here:
We currently have 179 articles on NBITTRPG Wiki. Type your article name above or click on one of the titles below and start writing!



NBITTRPG Wiki

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('Module:Arguments').getArgs

----
-- Local Functions
----
local function makeInvokeFunc(funcName)
  return function (frame)
    local args = getArgs(frame, {removeBlanks = false})
    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

Recent changes

  • Zaptrap • Friday at 22:20
  • Zaptrap • Friday at 22:18
  • Zaptrap • Friday at 22:15
  • Ember • Friday at 22:03
  • AndrewFBR • Friday at 00:24
  • AndrewFBR • Friday at 00:24
  • AndrewFBR • Friday at 00:24
  • AndrewFBR • Friday at 00:24