Wir laden dich herzlich auf den Star Citizen Wiki Discord Server ein! Du kannst uns auch auf unserem neuen YouTube-Chanel finden!
Modul:Navplate
From Star Citizen Wiki
Views
Actions
Namespaces
Variants
Tools
Modulabhängigkeiten
Dieses Modul benötigt Modul:Common
Modulinfo
Das Modul Navplate erlaubt die Erstellung von Linktabellen, wie sie beispielsweise im Fußbereich der Raumschiffe zu finden sind.
Öffentliche Methoden
Das Modul stellt folgende öffentliche Methoden bereit:
getSmwData
- Lädt Daten aus SMW
- category string: Die abzufragende Kategorie
- Lädt Daten aus SMW
group
- Gruppiert SMW Daten nach einem bestimmten Kriterium
- data table: Daten aus SMW
- groupKey string: Das Feld nach dem gruppiert werden soll, z.B. 'Hersteller'
- Gruppiert SMW Daten nach einem bestimmten Kriterium
createTable
- Erstellt die finale Tabelle
- data table: Gruppierte Daten
- headerText string: Text, welcher über der Tabelle angezeigt wird
- Erstellt die finale Tabelle
local Navplate = {}
local common = require( 'Module:Common' )
local metatable = {}
local methodtable = {}
metatable.__index = methodtable
--- Queries the SMW Store
--- @return table
function methodtable.getSmwData( self, category )
-- Cache multiple calls
if self.smwData ~= nil then
return self.smwData
end
category = category or ''
local askData = {
'?#-=page',
'?Hersteller#-=manufacturer',
sort = 'Hersteller',
order = 'asc',
limit = 250,
}
local query = ''
if string.sub( category, 1, 2 ) == '[[' then
query = category
else
query = '[[Kategorie:' .. category .. '|+depth=0]]'
end
query = query .. [[:+]]
table.insert( askData, 1, query )
local data = mw.smw.ask( askData )
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 Manufacturer
---
--- @param data table SMW data - Requires a 'page' key on each row
--- @param groupKey string Key on objects to group them under, e.g. manufacturer
--- @return table
function methodtable.group( self, data, groupKey )
local grouped = {}
if type( data ) ~= 'table' or type( groupKey ) ~= 'string' then
return grouped
end
for _, row in pairs( data ) do
if row[ groupKey ] ~= nil then
if type( grouped[ row[ groupKey ] ] ) ~= 'table' then
grouped[ row[ groupKey ] ] = {}
end
table.insert( grouped[ row[ groupKey ] ], string.format( '[[%s|%s]]', row.page, common.removeTypeSuffix( row.page, self.plateType ) ) )
end
end
mw.logObject( grouped )
return grouped
end
--- Creates the navplate
---
--- @param data table - Data from NavPlate.group
--- @param headerText string - Text to add above the navplate
--- @return string
function methodtable.createTable( self, data, headerText )
local div = mw.html.create( 'div' )
:addClass( 'navplate' )
:addClass( string.format( 'navplate-%s', self.plateType ) )
local tbl = mw.html.create( 'table', { parent = div } )
:attr( 'class', 'wikitable broadtable' )
:attr( 'style', 'width: 100%')
:tag( 'tr' )
:tag( 'th' )
:attr( 'colspan', 2 )
:wikitext( headerText or self.plateType .. ' Übersicht' )
:done()
:done()
div:node( tbl )
local rows = 0
for key, entries in common.spairs( data ) do
table.sort( entries )
entries = table.concat( entries, ' · ' )
local icon = ''
if self.iconPrefix ~= nil then
icon = string.format( '[[Datei:%s%s.png|25px|link=]] ', self.iconPrefix, key )
end
tbl:tag( 'tr' )
:tag( 'th' )
:wikitext( string.format( '%s[[%s]]', icon, key ) )
:done()
:tag( 'td' )
:wikitext( entries )
:done()
:done()
rows = rows + 1
end
if rows == 0 then
return ''
end
tbl:allDone()
return div:allDone()
end
--- New Instance
---
--- @param plateType string
--- @return table Navplate
function Navplate.new( self, plateType, iconPrefix )
local instance = {
plateType = plateType,
iconPrefix = iconPrefix or nil,
}
setmetatable( instance, metatable )
return instance
end
return Navplate