Module:Miscellaneous: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
>OmegaK2
No edit summary
>OmegaK2
(Updated based on feedback; added range 0-4 for the columns, filtration/customation columns added, removed the direct_link column)
Line 39: Line 39:
             :tag('th')
             :tag('th')
                 :attr('rowspan', 2)
                 :attr('rowspan', 2)
                 :wikitext('Direct Link')
                 :wikitext('Release')
                 :done()
                 :done()
             :tag('th')
             :tag('th')
                 :attr('colspan', 8)
                 :attr('colspan', 8)
                 :wikitext('Features')
                 :wikitext('Ingame Features')
                 :done()
                 :done()
             :tag('th')
             :tag('th')
                 :attr('rowspan', 2)
                 :attr('colspan', 1)
                 :wikitext('Release')
                :wikitext('Other Features')
                :done()
            :tag('th')
                :attr('colspan', 2)
                 :wikitext('Filtration Support')
                 :done()
                 :done()
           
         :done()
         :done()
         :tag('tr')
         :tag('tr')
Line 75: Line 80:
                 :wikitext('Crafting')
                 :wikitext('Crafting')
                 :done()
                 :done()
            -- Other Features
            :tag('th')
                :wikitext('Customizable')
                :done()
            -- Filtration
            :tag('th')
                :wikitext('General')
                :done()
            :tag('th')
                :wikitext('Themes')
                :done() 
         :done()
         :done()
         :wikitext(g_args.rows)
         :wikitext(g_args.rows)
Line 85: Line 101:
--
--


local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'direct_link', 'colour', 'border', 'font_size', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting', 'release'})
local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'release', 'colour', 'border', 'font_size', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_yes_no_args = xtable:new({'colour', 'border', 'font_size', 'item_hiding'})
local filter_list_range_args = xtable:new({'colour', 'border', 'font_size', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_yes_no = xtable:new({'yes', 'no'})
local filter_list_range_values = xtable:new({'no', 'minor', 'partial', 'major', 'yes'})
local filter_list_yes_no_partial_args = xtable:new({'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_yes_no_partial = xtable:new({'yes', 'no', 'partial'})


local filter_list_yes_no_args = xtable:new({'customization', 'filtration_general', 'filtration_themes'})
local filter_list_yes_no = xtable:new({'no', 'partial', 'yes', 'unknown'})


-- Test: =p.filter_list_row{name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes', border='yes', font_size='no', item_hiding='yes', leveling='partial', endgame='yes', vendor_recipes='partial', crafting='no', release='2015'}
-- Test: =p.filter_list{rows=p.filter_list_row{name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes', border='yes', font_size='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015'}}
-- =p
function p.filter_list_row(frame)
function p.filter_list_row(frame)
     g_args = getArgs(frame, {
     g_args = getArgs(frame, {
Line 109: Line 126:
     end
     end
      
      
     for _, arg in ipairs(filter_list_yes_no_args) do
    g_args.filtration_general = g_args.filtration_general or 'unknown'
    g_args.filtration_themes = g_args.filtration_themes or 'unknown'
    g_args.customization = g_args.customization or 'unknown'
   
    -- Checking & formatting args
   
     for _, arg in ipairs(filter_list_range_args) do
         local val = g_args[arg]
         local val = g_args[arg]
         if not filter_list_yes_no:contains(val) then
        local index = filter_list_range_values:index(val)
             error('Argument ' .. args .. ' requires one of the following arguments: ' .. table.concat(filter_list_yesno))
         if index then
            g_args[arg] = index
        else
            index = util.cast.number(val)
            if index ~= nil and index >= 0 and index < filter_list_range_values:size() then
                -- Lua starts counting at 1
                g_args[arg] = index+1
             else
                error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_range_values, ' '))
            end
         end
         end
     end
     end
      
      
     for _, arg in ipairs(filter_list_yes_no_partial_args) do
     for _, arg in ipairs(filter_list_yes_no_args) do
         local val = g_args[arg]
         local val = g_args[arg]
         if not filter_list_yes_no_partial:contains(val) then
         if not filter_list_yes_no:contains(val) then
             error('Argument ' .. args .. ' requires one of the following arguments: ' .. table.concat(filter_list_yesno))
             error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_yes_no, ' '))
         end
         end
     end
     end
Line 134: Line 166:
             :done()
             :done()
         :tag('td')
         :tag('td')
             :wikitext(g_args.direct_link)
             :wikitext(g_args.release)
             :done()
             :done()
              
              
     for _, arg in ipairs(filter_list_yes_no_args) do
    -- Basic Features
         tblrow
     for _, arg in ipairs(filter_list_range_args) do
            :tag('td')
         local index = g_args[arg]
                :attr('class', 'table-cell-' .. g_args[arg])
        local text = filter_list_range_values[index] or ''
                :wikitext(g_args[arg])
                :done()
    end
   
    for _, arg in ipairs(filter_list_yes_no_partial_args) do
         local note = g_args[arg .. '_note']
         local note = g_args[arg .. '_note']
         local ref = ''
         local ref = ''
Line 153: Line 180:
         tblrow
         tblrow
             :tag('td')
             :tag('td')
                 :attr('class', 'table-cell-' .. g_args[arg])
                 :attr('class', 'table-cell-' .. text )
                 :wikitext(g_args[arg] .. ref)
                :attr('data-sort-value', index)
                 :wikitext(text .. ref)
                 :done()
                 :done()
     end
     end
      
      
     tblrow
     -- Other Features
        :tag('td')
    for _, arg in ipairs(filter_list_yes_no_args) do
            :wikitext(g_args.release)
        local val = g_args[arg]
            :done()
        tblrow
           
            :tag('td')
                :attr('class', 'table-cell-' .. val)
                :attr('data-sort-value', '' .. filter_list_yes_no:index(val))
                :wikitext(val)
                :done()
    end
 
     return tostring(tblrow)
     return tostring(tblrow)
end
end


return p
return p

Revision as of 18:54, 26 July 2015

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


Lua logo

This module depends on the following other modules:

Overview

Module for implementing various templates in lua that are not big/complex enough to warrent their own module.

List of currently implemented templates

de:Modul:Miscellaneous

--[[
Module for implementing miscellaneous templates in lua.  
Mostly exists here so we don't have hundred of module pages for templates that don't have a lot of code.
 
If a template requires a *lot* of coding consider moving it into it's own lua module.
]]--

local xtable = require('Module:Table')
local util = require('Module:Util')
local getArgs = require('Module:Arguments').getArgs
local m_item = require('Module:Item')

local p = {}
local g_frame, g_args

--
-- Template: ItemFilterList
--
function p.filter_list(frame)
    g_args = getArgs(frame, {
		parentFirst = true
	})
    if frame == nil or type(frame) == 'table' then
        frame = mw.getCurrentFrame()
    end
    
    tbl = mw.html.create('table')
    tbl
        :attr('class', 'wikitable sortable')
        :tag('tr')
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('Name')
                :done()
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('Author')
                :done()
            :tag('th')
                :attr('rowspan', 2)
                :wikitext('Release')
                :done()
            :tag('th')
                :attr('colspan', 8)
                :wikitext('Ingame Features')
                :done()
            :tag('th')
                :attr('colspan', 1)
                :wikitext('Other Features')
                :done()
            :tag('th')
                :attr('colspan', 2)
                :wikitext('Filtration Support')
                :done()
            
        :done()
        :tag('tr')
            :tag('th')
                :wikitext('Colours')
                :done()
            :tag('th')
                :wikitext('Borders')
                :done()
            :tag('th')
                :wikitext('Font<br>Size')
                :done()
            :tag('th')
                :wikitext('Item<br>Hiding')
                :done()
            :tag('th')
                :wikitext('Leveling')
                :done()
            :tag('th')
                :wikitext('Endgame')
                :done()
            :tag('th')
                :wikitext('Vendor<br>recipes')
                :done()
            :tag('th')
                :wikitext('Crafting')
                :done()
            -- Other Features
            :tag('th')
                :wikitext('Customizable')
                :done()
            -- Filtration
            :tag('th')
                :wikitext('General')
                :done()
            :tag('th')
                :wikitext('Themes')
                :done()  
        :done()
        :wikitext(g_args.rows)
    
    return tostring(tbl) .. frame:extensionTag{ name = 'references', content = '', args = {group='note'}}
end

--
-- Template: ItemFilterListRow
--

local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'release', 'colour', 'border', 'font_size', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_range_args = xtable:new({'colour', 'border', 'font_size', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'})
local filter_list_range_values = xtable:new({'no', 'minor', 'partial', 'major', 'yes'})

local filter_list_yes_no_args = xtable:new({'customization', 'filtration_general', 'filtration_themes'})
local filter_list_yes_no = xtable:new({'no', 'partial', 'yes', 'unknown'})

-- Test: =p.filter_list{rows=p.filter_list_row{name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes', border='yes', font_size='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015'}}
-- =p
function p.filter_list_row(frame)
    g_args = getArgs(frame, {
		parentFirst = true
	})
    if frame == nil or type(frame) == 'table' then
        frame = mw.getCurrentFrame()
    end
    
    -- Checking args
    
    for _, arg in ipairs(filter_list_required_args) do
        if g_args[arg] == nil then
            error('Required argument ' .. arg .. ' is missing')
        end
    end
    
    g_args.filtration_general = g_args.filtration_general or 'unknown'
    g_args.filtration_themes = g_args.filtration_themes or 'unknown'
    g_args.customization = g_args.customization or 'unknown'
    
    -- Checking & formatting args
    
    for _, arg in ipairs(filter_list_range_args) do
        local val = g_args[arg]
        local index = filter_list_range_values:index(val)
        if index then
            g_args[arg] = index
        else
            index = util.cast.number(val)
            if index ~= nil and index >= 0 and index < filter_list_range_values:size() then
                -- Lua starts counting at 1
                g_args[arg] = index+1
            else
                error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_range_values, ' '))
            end
        end
    end
    
    for _, arg in ipairs(filter_list_yes_no_args) do
        local val = g_args[arg]
        if not filter_list_yes_no:contains(val) then
            error('Argument ' .. arg .. ' requires one of the following arguments: ' .. table.concat(filter_list_yes_no, ' '))
        end
    end
    
    -- Output
    
    tblrow = mw.html.create('tr')
    tblrow
        :tag('td')
            :wikitext('[' .. g_args.release_link .. ' ' .. g_args.name .. ']')
            :done()
        :tag('td')
            :wikitext(g_args.author)
            :done()
        :tag('td')
            :wikitext(g_args.release)
            :done()
            
    -- Basic Features
    for _, arg in ipairs(filter_list_range_args) do
        local index = g_args[arg]
        local text = filter_list_range_values[index] or ''
        local note = g_args[arg .. '_note']
        local ref = ''
        if note ~= nil then
            ref = frame:extensionTag{ name = 'ref', content = note, args = {group='note'}}
        end
        tblrow
            :tag('td')
                :attr('class', 'table-cell-' .. text )
                :attr('data-sort-value', index)
                :wikitext(text .. ref)
                :done()
    end
    
    -- Other Features
    for _, arg in ipairs(filter_list_yes_no_args) do
        local val = g_args[arg]
        tblrow
            :tag('td')
                :attr('class', 'table-cell-' .. val)
                :attr('data-sort-value', '' .. filter_list_yes_no:index(val))
                :wikitext(val)
                :done()
    end

    return tostring(tblrow)
end

return p