Module:EncounterTable: Difference between revisions

1,135 bytes added ,  13:42, 20 January 2023
change data namespace to Population
m (further reformatting)
(change data namespace to Population)
 
(11 intermediate revisions by 2 users not shown)
Line 8: Line 8:
--# Interface
--# Interface


function EncounterTable.splitEncounterTableArgs(row)
function EncounterTable.splitEncounterTableArgs(row, hideQuantity)
     local TABLE_ARGS = {'table', 'item', 'quantity', 'weight'}
     local TABLE_ARGS = {}
    if hideQuantity then
        TABLE_ARGS = {'table', 'item', 'weight'}
    else
        TABLE_ARGS = {'table', 'item', 'quantity', 'weight'}
    end
     return TextUtility.splitArgs(row, TABLE_ARGS)
     return TextUtility.splitArgs(row, TABLE_ARGS)
end
end
Line 15: Line 20:


function EncounterTable.start(frame)
function EncounterTable.start(frame)
    local favilink = require 'Module:Favilink'
     local args = ProcessArgs.merge(true)
     local args = ProcessArgs.merge(true)
     local tblName = args.name or ''
     local tblName = args.name or ''
     local pick = args.roll or 'once'
     local pick = args.roll or 'once'
    local bFavilinkId = false
    local bHideQuantity = (args.hidequantity ~= nil)
    if args.favilinkid == 'yes' then bFavilinkId = true end
    local bSamePageLink = false
    if args.samepage == 'yes' then bSamePageLink = true end
     local result = {}
     local result = {}
     local totalWeight = 0
     local totalWeight = 0
Line 39: Line 51:
                 error'A table or item must be specified!'
                 error'A table or item must be specified!'
             else
             else
                 finalTable[i].item = '[[' .. row.item .. ']]'
                 if bFavilinkId then
                    finalTable[i].item = favilink.modulefavilink(row.item, 'ObjectID')
                else
                    finalTable[i].item = '[[' .. row.item .. ']]'
                end
             end
             end
         elseif row.item == 'none' then  
         elseif row.item == 'none' then  
             local linkstr = ''
             local linkstr = ''
             maintable = row.table:match'^(.+)%s+%w*$'
             maintable = row.table:match'^(.+)%s+%w*$'
 
            if bSamePageLink then
             if maintable ~= nil and maintable ~= '' then
                maintable = mw.title.getCurrentTitle().text
                linkstr = maintable .. '#' .. row.table
             elseif maintable ~= nil and maintable ~= '' then
                 linkstr = maintable .. '#' .. row.table
                 linkstr = maintable .. '#' .. row.table
             else
             else
Line 51: Line 69:
             end
             end


             finalTable[i].item = 'Item from [[Data:' .. linkstr  .. '|' .. row.table .. ']]'
             finalTable[i].item = 'Item from [[Population:' .. linkstr  .. '|' .. row.table .. ']]'
         else
         else
             error'A table and item cannot be specified at the same time!'
             error'A table and item cannot be specified at the same time!'
Line 57: Line 75:


         -- dice tooltip quantity
         -- dice tooltip quantity
 
        if not bHideQuantity then
        finalTable[i].quantity = frame:expandTemplate{
            finalTable[i].quantity = frame:expandTemplate{
            title = 'Dice tooltip',
                title = 'Dice tooltip',
            args = {row.quantity},
                args = {row.quantity},
        }
            }
 
        end
         --finalTable[i].quantity = row.quantity
         --finalTable[i].quantity = row.quantity
         finalTable[i].weight = row.weight
         finalTable[i].weight = row.weight
Line 77: Line 95:
     end
     end


     return EncounterTable.formatTable(finalTable)
     return EncounterTable.formatTable(finalTable, bHideQuantity)
end
end


function EncounterTable.formatTable(final)
function EncounterTable.formatTable(final, bHideQuantity)
     local TABLE_HEADER = '<tr><th>Item</th><th>Quantity</th><th>Weight</th><th>Chance</th></tr>'
     local TABLE_HEADER = bHideQuantity and
'<tr><th>Item</th><th>Weight</th><th>Chance</th></tr>' or
'<tr><th>Item</th><th>Quantity</th><th>Weight</th><th>Chance</th></tr>'
     local tableRows = ''
     local tableRows = ''
    local headerhtml = ''


     for _, entry in ipairs(final) do
     for _, entry in ipairs(final) do
        tableRows = tableRows .. ('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'):format(entry.item, entry.quantity, entry.weight, entry.chance)
          if bHideQuantity then
              tableRows = tableRows .. ('<tr><td>%s</td><td>%s</td><td>%s</td></tr>'):format(entry.item, entry.weight, entry.chance)
          else
              tableRows = tableRows .. ('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'):format(entry.item, entry.quantity, entry.weight, entry.chance)
          end
     end
     end