Modul:Galactapedia: Unterschied zwischen den Versionen

Aus Steel Beasts Wiki
sc>FoXFTW
KKeine Bearbeitungszusammenfassung
 
K (1 Version importiert)
 

Aktuelle Version vom 3. September 2023, 08:02 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Galactapedia/Doku erstellt werden

local Galactapedia = {}

local metatable = {}
local methodtable = {}

metatable.__index = methodtable

local objectData = mw.loadJsonData( 'Module:Galactapedia/data.json' )

-- Needed Extensions
local common = require( 'Module:Common' )
local localized = require( 'Module:Localized' )
local TNT = require( 'Module:Translate' ):new()

--- Creates the main title
--- @return string
function methodtable.getTitle( self )
    local title = ''

    --[[    if self.args[ 'title' ] ~= nil then
            title = self.args[ 'title' ]
        else
            title = mw.title.getCurrentTitle().subpageText
        end]]

    -- Return the title text for now
    return localized.getMainTitle()
end


--- Entrypoint for {{#seo:}}
--- @return void
function methodtable.setSeoData( self )
    -- Call to {{#seo:}}
    require( 'Module:SEO' ).set(
        'Galactapedia',
        localized.getMainTitle(),
        table.concat({
            localized.getMainTitle(),
            'Galactapedia',
            self.frame:preprocess( '{{SITENAME}}' )
        }, ' - '),
        'replace',
        {
            'Galactapedia',
            'Star Citizen',
            'CIG',
            'Star Citizen Lore',
            'Squadron 42'
        },
        nil,
        self.args[ 'image' ],
        localized.getMainTitle()
    )
end

--- Sets the frame and extracts the args
--- @param frame table
function methodtable.setFrame( self, frame )
    self.frame = frame
    self.args = require( 'Module:Arguments' ).getArgs( frame )
end

--- Get the infobox for the current article
function methodtable.getInfobox( self )
    local tableData = {}

    local box = require( 'Module:InfoboxNeue' ):new()

	local png, _ = mw.ustring.gsub( self.args[ 'image' ], '.jpg', '.png' )
    box:renderImage( common.getImage( {
        self.args[ 'image' ],
        png
    } ) )

    box:renderHeader( self:getTitle() )
    
    local section = {}

    for _, key in ipairs( objectData.propertyOrder ) do
        if self.args[ key ] ~= nil then
            local data = {
                key = key,
                value = self.args[ key ]
            }

			local added = 0
            for _, value in pairs( common.extractDataFromPrefix( key, self.args ) ) do
            	local setValue
                if objectData.propertyContent[ value ] ~= nil then
                    setValue = objectData.propertyContent[ value ]
                else
                    setValue = value
                end

                added = added + 1
                
                if added == 1 then
                	data.value = setValue
                elseif added == 2 then
        			data.value = {
        				data.value,
        				setValue,
        			}
                elseif added > 2 then
					table.insert( data.value, setValue )
				end
            end

            table.insert( tableData, data )

            self.args[ key ] = nil
        end
    end

    for _, data in ipairs( tableData ) do
        local key = data.key
        local value = data.value
        if type( value ) ~= 'table' then
        	value = { value }
    	end

        if objectData.smwMapData[ key ] ~= nil then
            if key == 'dateS' then
                self.smwData[ objectData.smwMapData[ key ] ] = mw.text.split( table.concat( value ), '-', true )
            else
                self.smwData[ objectData.smwMapData[ key ] ] = value
            end
        end

        local rowData = table.concat( value, '<br>' )
        rowData = mw.text.split( rowData, ', ', true )

		local success, translation = pcall( TNT.format, 'Module:Galactapedia/i18n.json', key )
		if not success then
			translation = mw.getContentLanguage():ucfirst( key )
		end

		table.insert( section, box:renderItem( translation, table.concat( rowData, '<br>' ) ) )
    end
    
    box:renderSection( {
    	col = 2,
    	content = section
    } )

	if not mw.title.getCurrentTitle().isSubpage then
    	mw.smw.set( self.smwData )
    end

    if self.args.related ~= nil then
        box:renderSection( {
        	content = {
        		box:renderItem( TNT.format( 'Module:Galactapedia/i18n.json', 'related_articles' ), self.args.related )
        	}
        } )
    end

    return tostring( box ) .. tostring( table.concat( self.categories ) ) .. tostring( common.generateInterWikiLinks( self:getTitle() ) )
end


--- Entry point for template calls
--- @return string
function Galactapedia.infoBox( frame )
    local instance = Galactapedia:new()
    instance:setFrame( frame )
    instance:setSeoData()

    return instance:getInfobox()
end

--- New Instance
--- Library entrance
function Galactapedia.new( self )
    local instance = {
        frame = nil,
        args = nil,
        categories = {},
        smwData = {
            [ 'Austritt' ]         = nil,
            [ 'Geburtsdatum' ]     = nil,
            [ 'Todesdatum' ]       = nil,
            [ 'Volk' ]             = nil,
            [ 'Hersteller' ]       = nil,
            [ 'Beruf' ]            = nil,
            [ 'Veröffentlichung' ] = nil,
            [ 'Zeitpunkt' ]        = nil,
            [ 'Gründungsdatum' ]   = nil,
            [ 'Ort' ]              = nil,
        }
    }

    setmetatable( instance, metatable )

    return instance
end

return Galactapedia