Module: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 game = require('Module:Game') local mbox = require('Module:Message box').main

local p = {} local g_frame, g_args

local i18n = { tooltips = { item_class = 'Item class', item_class_id = 'Internal ID', item_class_category = 'Category', }, }

-- -- Template: Item class list --

function p.item_class_list(frame) g_args = getArgs(frame, {       parentFirst = true    }) g_frame = util.misc.get_frame(frame) local skip = {['SmallRelic'] = true, ['MediumRelic'] = true, ['LargeRelic'] = true} local out = {} for id, data in pairs(game.constants.item.classes) do       if skip[id] == nil then local tr = mw.html.create('tr') tr               :tag('td') :wikitext(string.format('%s', data['full'])) :done :tag('td') :wikitext(id) :done :tag('td') :wikitext(data['category']) :done out[data['id']] = tostring(tr) else out[data['id']] = '' end end local tbl = mw.html.create('table') tbl :attr('class', 'wikitable sortable') :tag('tr') :tag('th') :wikitext(i18n.tooltips.item_class) :done :tag('th') :wikitext(i18n.tooltips.item_class_id) :done :tag('th') :wikitext(i18n.tooltips.item_class_category) :done :done :wikitext(table.concat(out)) return tostring(tbl) end

function p.item_class_category_list(frame) --       Displays a list of categories for all item classes.

local tpl_args = getArgs(frame, {parentFirst = true}) local frame = util.misc.get_frame(frame) tpl_args.format = tpl_args.format or 'default' local fmt if tpl_args.format == 'default' then fmt = '%s' else error(string.format('Unrecognized format: %s', tpl_args.format)) end out = {''} save_tbl = {} for _, data in pairs(game.constants.item.classes) do       if not save_tbl[data.category] and data.category ~= '' then save_tbl[data.category] = true out[#out+1] = string.format(fmt, data.category) end end out[#out+1] = '' return table.concat(out) end

-- -- Template: ItemFilterList -- function p.filter_list(frame) g_args = getArgs(frame, {       parentFirst = true    }) g_frame = util.misc.get_frame(frame) g_args.type = g_args.type or '' tbl = mw.html.create('table') tbl :attr('class', 'wikitable sortable') tblrow = tbl: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', 9) :wikitext('Ingame Features') :done :tag('th') :attr('colspan', 1) :wikitext('Other Features') :done :tag('th') :attr('colspan', 2) :wikitext('Filtration Support') :done if g_args.type == 'specialized' then tblrow:tag('th') :attr('rowspan', 2) :wikitext('Description') :done end tblrow = tbl:tag('tr') :tag('th') :wikitext('Colours') :done :tag('th') :wikitext('Borders') :done :tag('th') :wikitext('Font Size') :done :tag('th') :wikitext('Background') :done :tag('th') :wikitext('Item Hiding') :done :tag('th') :wikitext('Leveling') :done :tag('th') :wikitext('Endgame') :done :tag('th') :wikitext('Vendor 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'}} return tostring(tbl) end

-- -- Template: ItemFilterListRow --

local filter_list_required_args = xtable:new({'name', 'release_link', 'author', 'release', 'colour', 'border', 'font_size', 'background', 'item_hiding', 'leveling', 'endgame', 'vendor_recipes', 'crafting'}) local filter_list_range_args = xtable:new({'colour', 'border', 'font_size', 'background', '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.filter_list{type='specialized',rows=p.filter_list_row{type='specialized', name='a', release_link='http://google.de', author='Mario', author_contact='No idea', direct_link='http://google.de', colour='yes',colour_note="test", border='yes', font_size='no', background='no', item_hiding='yes', leveling=0, endgame=4, vendor_recipes='partial', crafting='no', release='2015', description='test'}} function p.filter_list_row(frame) g_args = getArgs(frame, {       parentFirst = true    }) g_frame = util.misc.get_frame(frame) -- 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' g_args.descriptipon = g_args.description or ' ' g_args.type = g_args.type or '' -- 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'] tblrow :tag('td') :attr('class', 'table-cell-coloured table-cell-' .. text ) :attr('data-sort-value', index) :wikitext(filter_list_get_arg(arg)) :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-coloured table-cell-' .. val) :attr('data-sort-value', '' .. filter_list_yes_no:index(val)) :wikitext(filter_list_get_arg(arg)) :done end if g_args.type == 'specialized' then tblrow :tag('td') :wikitext(filter_list_get_arg('description')) :done end

return tostring(tblrow) end

function filter_list_get_arg(arg) --   Return a formatted table cell for the given argument    -- local val = g_args[arg] if type(val) == 'number' then val = filter_list_range_values[val] end if g_args[arg .. '_note'] ~= nil then abbr = mw.html.create('abbr') abbr :attr('title', g_args[arg .. '_note']) :css('color', 'black') :wikitext(val) :done return tostring(abbr) else return val end end

--

return p