Module:Sandbox: Difference between revisions

From Path of Exile 2 Wiki
Jump to navigation Jump to search
>OmegaK2
No edit summary
>OmegaK2
No edit summary
Line 1: Line 1:
local p = {}
local p = {}
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local mk = require('multikey')


-- for testing
-- for testing
Line 88: Line 86:
     -- quest_diff: class: [rowA, rowB]
     -- quest_diff: class: [rowA, rowB]
     for garbage, row in ipairs(return_data) do
     for garbage, row in ipairs(return_data) do
         local temp = mk.get(format_data, row['quest'], row['difficulty'])
         local key = row['quest'] .. '_' .. row['difficulty']
          
         local sub = format_data[key]
         if temp == nil then
 
             temp = {}
         if sub == nil then
            temp[row['class']] = {row}
             format_data[key] = {
             mk.put(format_data, row['quest'], row['difficulty'], temp)
                quest=row['quest'],
         elseif temp[row['class']] == nil then
                difficulty=row['difficulty'],
             temp[row['class']] = {row}
                classes={}
             }
            format_data[key]['classes'][row['class']] = {row}
           
         elseif sub['classes'][row['class']] == nil then
             sub['classes'][row['class']] = {row}
         else
         else
             table.insert(temp[row['class']], row)
             table.insert(sub['classes'][row['class']], row)
         end
         end
     end
     end
      
      
     -- lastly add to table
     -- lastly add to table
     for quest_diff, columns in ipairs(format_data) do
     for quest_diff, row_data in ipairs(format_data) do
         local tblrow = tbl:tag('tr')
         local tblrow = tbl:tag('tr')
         tblrow
         tblrow
             :tag('td')
             :tag('td')
                 :wikitext(quest_diff['quest'])
                 :wikitext(row_data['quest'])
          
          
         if columns['All'] ~= nil then
         if row_data['classes']['All'] ~= nil then
             tblrow
             tblrow
                 :tag('td')
                 :tag('td')
Line 116: Line 119:
             for garbage, class in ipairs(poe_classes) do
             for garbage, class in ipairs(poe_classes) do
                 local txt = ''
                 local txt = ''
                 if columns[class] ~= nil then
                 if row_data['classes'][class] ~= nil then
                     txt = format_reward(columns[class])
                     txt = format_reward(row_data['classes'][class])
                 end
                 end
                 tblrow
                 tblrow

Revision as of 16:15, 2 July 2015

Module documentation[view] [edit] [history] [purge]


This page is not an actual Scribunto module. It exists to provide editors a place to create experimental modules.

Naming your modules

To keep things tidy, please use the following format to name your experimental modules:

Module:Sandbox/Your username/Module name

Cleaning up unused modules

Experimental modules may be deleted by admins upon request or after a long period of inactivity.

List of modules in this area

For a list of the experimental modules under Module:Sandbox, see Special:PrefixIndex/Module:Sandbox/.

local p = {}
local getArgs = require('Module:Arguments').getArgs

-- for testing
local quest_data = {
    {
        reward="Ground Slam",
        reward_type="skill",
        class="Marauder",
        difficulty="Normal",
        quest="Enemy at the Gate",
    },
    {
        reward="Molten Strike",
        reward_type="skill",
        class="Marauder",
        difficulty="Normal",
        quest="Enemy at the Gate",
    },
}

local poe_classes = {'Marauder', 'Templar', 'Witch', 'Shadow', 'Ranger', 'Duelist', 'Scion'}

function p.table(frame)
    --if not getArgs then
	--	getArgs = require('Module:Arguments').getArgs
	--end
    local args = getArgs(frame, {
		parentFirst = true
	})
    
    args.reward = args.reward or args.Reward
    args.reward_type = args.reward_type or args.rewardType or args.RewardType
    args.class = args.class or args.Class
    args.difficulty = args.difficulty or args.Difficulty
    args.quest = args.quest or args.Quest
    args.display_style = args.display_style or args.displayStyle or args.DisplayStyle or 'full'
    
    -- parser
    
    local return_data = {}
    
    
    for key, row in ipairs(quest_data) do
        (function()
            for k, v in ipairs({"reward", "reward_type", "class", "quest", "difficulty"}) do
                if args[v] ~= nil and row[v] ~= args[v] then return end
            end
            
            table.insert(return_data, row)
        end)()
    end
    
    local outstr
    if args.display_style == 'full' then
        outstr = display_full(return_data)
    end
    
    return outstr
end

function display_full(return_data)
    local tbl = mw.html.create('table')
    local tblhead = tbl:tag('tr')
    
    tbl
        :addClass('wikitable')
        
    tblhead
        :tag('th')
            :wikitext('Class')
    for garbage, value in ipairs(poe_classes) do
        tblhead
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('[[' .. value .. ']]')
    end
    tbl
        :tag('tr')
            :tag('th')
                :wikitext('Quest')
    
    local format_data = {}
    
    -- reformat to make proper lists
    -- quest_diff: class: [rowA, rowB]
    for garbage, row in ipairs(return_data) do
        local key = row['quest'] .. '_' .. row['difficulty']
        local sub = format_data[key]

        if sub == nil then
            format_data[key] = {
                quest=row['quest'], 
                difficulty=row['difficulty'],
                classes={}
            }
            format_data[key]['classes'][row['class']] = {row}
            
        elseif sub['classes'][row['class']] == nil then
            sub['classes'][row['class']] = {row}
        else
            table.insert(sub['classes'][row['class']], row)
        end
    end
    
    -- lastly add to table
    for quest_diff, row_data in ipairs(format_data) do
        local tblrow = tbl:tag('tr')
        tblrow
            :tag('td')
                :wikitext(row_data['quest'])
        
        if row_data['classes']['All'] ~= nil then
            tblrow
                :tag('td')
                    :attr('colspan', 7)
                    :wikitext(format_reward(row['All']))
        else
            for garbage, class in ipairs(poe_classes) do
                local txt = ''
                if row_data['classes'][class] ~= nil then
                    txt = format_reward(row_data['classes'][class])
                end
                tblrow
                    :tag('td')
                        :wikitext(txt)
            end
        end
        
    end
    
    return tostring(tbl)
end

function format_reward(row)
    -- Take a row and format it accordingly
    local output
    if row['reward_type'] == 'skill' then
        output = frame:expandTemplate{title='sl', args={row['reward']}}
    elseif row['reward_type'] == 'item' then
        output = frame:expandTemplate{title='il', args={row['reward']}}
    else
        output = row['reward']
    end
     
    if row['display'] ~= nil then
        output = replace_vars{row[display], reward=output}
    end
    
    return output
end


function replace_vars(str, vars)
  -- Allow replace_vars{str, vars} syntax as well as replace_vars(str, {vars})
  if not vars then
    vars = str
    str = vars[1]
  end
  return (string_gsub(str, "({([^}]+)})",
    function(whole,i)
      return vars[i] or whole
    end))
end

return p