Diese Dokumentation wird von Modul:ArmorTable/doc aus übernommen. Änderungen können auf der Diskussionsseite vorgeschlagen werden.
Dieses Modul wird nicht verwendet.
Dieses Modul wird weder von einer Vorlage aufgerufen noch von einem anderen Modul benötigt/geladen. Wenn dies ein Fehler ist, stelle bitte sicher, dass
{{Dokumentation}}
/{{Keine Dokumentation}}
auf der Dokumentationsseite der Vorlage oder des Moduls eingebunden ist.Function list |
---|
L 13 — methodtable.getSmwData L 54 — methodtable.sort L 75 — methodtable.createTable L 151 — methodtable.make L 172 — ArmorTable.new L 185 — ArmorTable.fromArgs |
Dieses Modul erzeugt eine tabellarische Übersicht aller verfügbaren Rüstungen.
local ArmorTable = {}
local common = require( 'Module:Common' )
local metatable = {}
local methodtable = {}
metatable.__index = methodtable
--- Queries the SMW Store
--- @return table
function methodtable.getSmwData( self )
-- Cache multiple calls
if self.smwData ~= nil then
return self.smwData
end
-- name from args or current page
-- local subType = self.frameArgs[ 'Typ' ] or 'Raumschiff'
local query = {
'[[Ist Basisversion::wahr]][[Kategorie:Körperpanzerung]]',
'?#-=page',
'?Minimaler Temperaturwiderstand=temp_min',
'?Maximaler Temperaturwiderstand=temp_max',
'?Subtyp#-=class',
'?Inventar=inventory',
'?Hersteller=manufacturer',
'?Spielversion#-=version',
'mainlabel=name',
'sort=name,Subtyp',
'order=asc,asc',
'limit=500',
}
local data = mw.smw.ask( query )
if data == nil or data[ 1 ] == nil then
return nil
end
mw.logObject( data )
self.smwData = data
return self.smwData
end
--- Sorts the table by Position -> Shop
---
--- @return table
function methodtable.sort( self )
local sorted = {}
for _, row in pairs( self.smwData ) do
if row.class ~= nil then
if type( sorted[ row.class ] ) ~= 'table' then
sorted[ row.class ] = {}
end
table.insert( sorted[ row.class ], row )
end
end
return sorted
end
--- Creates the buy table
---
--- @param armor table
--- @return string
function methodtable.createTable(self, items)
if #items == 0 then
return ''
end
local currentRow = 1
local table = mw.html.create( 'table' )
:attr( 'class', 'wikitable broadtable sortable' )
:attr( 'style', 'width: 100%')
:tag( 'tr' )
:tag( 'th' )
:wikitext( 'Name' )
:done()
:tag( 'th' )
:wikitext( 'Temperaturresistenz' )
:done()
:tag( 'th' )
:wikitext( 'Rüstungsklasse' )
:done()
:tag( 'th' )
:wikitext( 'Inventar' )
:done()
:tag( 'th' )
:wikitext( 'Hersteller' )
:done()
:tag( 'th' )
:wikitext( 'Spielversion' )
:done()
:done()
:done()
for _, armor in pairs(items) do
local trClass = 'row-odd'
if currentRow % 2 == 0 then
trClass = 'row-even'
end
currentRow = currentRow + 1
local price = '-'
if type( armor.price ) == 'table' then
price = armor.price[ 1 ]
end
local tempResist = armor.temp_resist
table:tag( 'tr' )
:addClass( trClass )
:tag( 'td' )
:wikitext( string.format( '[[%s]]', armor.page ) )
:done()
:tag( 'td' )
:wikitext( (armor.temp_min or '-') .. ' / ' .. (armor.temp_max or '-') )
:done()
:tag( 'td' )
:wikitext( armor.class )
:done()
:tag( 'td' )
:wikitext( armor.inventory )
:done()
:tag( 'td' )
:wikitext( armor.manufacturer )
:done()
:tag( 'td' )
:wikitext( armor.version )
:done()
:done()
end
return table:allDone()
end
--- Outputs the table
---
--- @return string
function methodtable.make( self )
local data = self:getSmwData()
if data == nil then
return '<p class="hatnote">Konnte keine semantischen Daten laden.</p>'
end
local sorted = self:sort()
local out = ''
for class, items in common.spairs( sorted ) do
out = string.format( "%s\n=== [[%s]] ===\n%s", out, class, tostring( self:createTable(items) ))
end
mw.logObject(out)
return mw.text.trim( out )
end
--- New Instance
--- @return table ArmorTable
function ArmorTable.new( self, frameArgs )
local instance = {
args = frameArgs,
}
setmetatable( instance, metatable )
return instance
end
--- Entry for module calls
---
--- @return string
function ArmorTable.fromArgs( frame )
local args = require( 'Module:Arguments').getArgs( frame )
local instance = ArmorTable:new( args )
return instance:make()
end
return ArmorTable