Star Citizen Wiki Modul:Navplate
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

Modulabhängigkeiten

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
  • 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'
  • createTable
    • Erstellt die finale Tabelle
      • data table: Gruppierte Daten
      • headerText string: Text, welcher über der Tabelle angezeigt wird

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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.