<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://star-citizen.wiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3ANavplate_vehicles</id>
	<title>Modul:Navplate vehicles - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://star-citizen.wiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3ANavplate_vehicles"/>
	<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:Navplate_vehicles&amp;action=history"/>
	<updated>2026-05-09T21:02:51Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Star Citizen Wiki</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://star-citizen.wiki/index.php?title=Modul:Navplate_vehicles&amp;diff=80063&amp;oldid=prev</id>
		<title>FoXFTW: Automated syncing of modules from rev 308be26</title>
		<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:Navplate_vehicles&amp;diff=80063&amp;oldid=prev"/>
		<updated>2024-04-09T20:16:25Z</updated>

		<summary type="html">&lt;p&gt;Automated syncing of modules from rev 308be26&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- TODO: Maybe make this more generic so that it can be reused somewhere else?&lt;br /&gt;
local NavplateVehicles = {}&lt;br /&gt;
&lt;br /&gt;
local metatable = {}&lt;br /&gt;
local methodtable = {}&lt;br /&gt;
&lt;br /&gt;
metatable.__index = methodtable&lt;br /&gt;
&lt;br /&gt;
local navplate = require( &amp;#039;Module:Navplate&amp;#039; )&lt;br /&gt;
local common = require( &amp;#039;Module:Common&amp;#039; )&lt;br /&gt;
local mfu = require( &amp;#039;Module:Manufacturer&amp;#039; )._manufacturer&lt;br /&gt;
local TNT = require( &amp;#039;Module:Translate&amp;#039; ):new()&lt;br /&gt;
local lang = mw.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
--- FIXME: This should go to somewhere else, like Module:Common&lt;br /&gt;
--- Calls TNT with the given key&lt;br /&gt;
---&lt;br /&gt;
--- @param key string The translation key&lt;br /&gt;
--- @return string If the key was not found in the .tab page, the key is returned&lt;br /&gt;
local function translate( key, ... )&lt;br /&gt;
	local success, translation = pcall( TNT.format, &amp;#039;Module:Navplate vehicles/i18n.json&amp;#039;, key or &amp;#039;&amp;#039;, ... )&lt;br /&gt;
&lt;br /&gt;
	if not success or translation == nil then&lt;br /&gt;
		return key&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return translation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Queries the SMW Store&lt;br /&gt;
--- @return table&lt;br /&gt;
function methodtable.getSmwData( self, category )&lt;br /&gt;
    -- Cache multiple calls&lt;br /&gt;
    if self.smwData ~= nil and self.smwData[category] ~= nil then&lt;br /&gt;
        return self.smwData[category]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    category = category or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local smwManufacturer = translate( &amp;#039;SMW_Manufacturer&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    local askData = {&lt;br /&gt;
		&amp;#039;[[:+]]&amp;#039;,&lt;br /&gt;
        &amp;#039;?#-=page&amp;#039;,&lt;br /&gt;
        &amp;#039;?&amp;#039; .. smwManufacturer ..&amp;#039;#-=manufacturer&amp;#039;,&lt;br /&gt;
        sort = smwManufacturer,&lt;br /&gt;
        order = &amp;#039;asc&amp;#039;,&lt;br /&gt;
        limit = 500,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local query = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.sub( category, 1, 2 ) == &amp;#039;[[&amp;#039; then&lt;br /&gt;
    	query = category&lt;br /&gt;
    else&lt;br /&gt;
    	query = &amp;#039;[[Category:&amp;#039; .. category .. &amp;#039;|+depth=0]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	table.insert( askData, 1, query )&lt;br /&gt;
&lt;br /&gt;
    local data = mw.smw.ask( askData )&lt;br /&gt;
&lt;br /&gt;
    if data == nil or data[ 1 ] == nil then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	mw.logObject( data )&lt;br /&gt;
&lt;br /&gt;
	-- Init self.smwData&lt;br /&gt;
	if self.smwData == nil then&lt;br /&gt;
		self.smwData = {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    self.smwData[category] = data&lt;br /&gt;
&lt;br /&gt;
    return self.smwData[category]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Sorts the table by Manufacturer&lt;br /&gt;
---&lt;br /&gt;
--- @param data table SMW data - Requires a &amp;#039;page&amp;#039; key on each row&lt;br /&gt;
--- @param groupKey string Key on objects to group them under, e.g. manufacturer&lt;br /&gt;
--- @param suffix string|table Suffix to remove from page title&lt;br /&gt;
--- @return table&lt;br /&gt;
function methodtable.group( self, data, groupKey, suffix )&lt;br /&gt;
    local grouped = {}&lt;br /&gt;
&lt;br /&gt;
    if type( data ) ~= &amp;#039;table&amp;#039; or type( groupKey ) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
        return grouped&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local name&lt;br /&gt;
&lt;br /&gt;
    for _, row in pairs( data ) do&lt;br /&gt;
        if row[ groupKey ] ~= nil then&lt;br /&gt;
            if type( grouped[ row[ groupKey ] ] ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
                grouped[ row[ groupKey ] ] = {}&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            if type( suffix ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
            	for _, s in pairs( suffix ) do&lt;br /&gt;
            		name = common.removeTypeSuffix( row.page, s )&lt;br /&gt;
            	end&lt;br /&gt;
            else&lt;br /&gt;
            	name = common.removeTypeSuffix( row.page, suffix )&lt;br /&gt;
            end&lt;br /&gt;
 &lt;br /&gt;
            if row.name ~= nil then&lt;br /&gt;
            	name = row.name&lt;br /&gt;
        	end&lt;br /&gt;
&lt;br /&gt;
            table.insert(&lt;br /&gt;
            	grouped[ row[ groupKey ] ],&lt;br /&gt;
            	string.format(&lt;br /&gt;
            		&amp;#039;[[%s|%s]]&amp;#039;,&lt;br /&gt;
            		row.page,&lt;br /&gt;
            		name&lt;br /&gt;
        		)&lt;br /&gt;
        	)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	mw.logObject( grouped )&lt;br /&gt;
&lt;br /&gt;
    return grouped&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Outputs the table&lt;br /&gt;
---&lt;br /&gt;
--- @return string&lt;br /&gt;
function methodtable.make( self )&lt;br /&gt;
	local args = {&lt;br /&gt;
		subtitle = translate( &amp;#039;subtitle_navplatevehicles&amp;#039; ),&lt;br /&gt;
		title = translate( &amp;#039;title_navplatevehicles&amp;#039; )&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local sections = {&lt;br /&gt;
		translate( &amp;#039;category_ships&amp;#039; ),&lt;br /&gt;
		translate( &amp;#039;category_ground_vehicles&amp;#039; )&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local i = 1&lt;br /&gt;
	for _, section in pairs( sections ) do&lt;br /&gt;
		local data = self:getSmwData( section )&lt;br /&gt;
		if data == nil then&lt;br /&gt;
			local hatnote = require( &amp;#039;Module:Hatnote&amp;#039; )._hatnote&lt;br /&gt;
			return hatnote(&lt;br /&gt;
				translate( &amp;#039;error_no_data_text&amp;#039; ),&lt;br /&gt;
				{ icon = &amp;#039;WikimediaUI-Error.svg&amp;#039; }&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
		local grouped = self:group( data, &amp;#039;manufacturer&amp;#039;, sections )&lt;br /&gt;
&lt;br /&gt;
		args[ &amp;#039;header&amp;#039; .. i ] = lang:ucfirst( section )&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		for manufacturer, vehicles in common.spairs( grouped ) do&lt;br /&gt;
			local icon = &amp;#039;&amp;#039;&lt;br /&gt;
			local label&lt;br /&gt;
			local mfuData = mfu( manufacturer )&lt;br /&gt;
			if mfuData and mfuData.code then&lt;br /&gt;
				icon = mw.ustring.format( &amp;#039;[[File:sc-icon-manufacturer-%s.svg|36px|link=]] &amp;#039;, mw.ustring.lower( mfuData.code ) )&lt;br /&gt;
				-- TODO: Intergrate label title and subtitle into Module:Navplate&lt;br /&gt;
				label = mw.ustring.format(&lt;br /&gt;
					&amp;#039;[[%s|%s&amp;lt;div class=&amp;quot;template-navplate__subtitle&amp;gt;%s&amp;lt;/div&amp;gt;]]&amp;#039;,&lt;br /&gt;
					manufacturer,&lt;br /&gt;
					mfuData.name,&lt;br /&gt;
					mfuData.code&lt;br /&gt;
				)&lt;br /&gt;
			else&lt;br /&gt;
				label = mw.ustring.format( &amp;#039;[[%s]]&amp;#039;, manufacturer )&lt;br /&gt;
			end&lt;br /&gt;
			args[ &amp;#039;label&amp;#039; .. i ] = mw.ustring.format( &amp;#039;%s%s&amp;#039;, icon, label )&lt;br /&gt;
			args[ &amp;#039;list&amp;#039; .. i ] = table.concat( vehicles )&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	mw.logObject( args )&lt;br /&gt;
&lt;br /&gt;
    return navplate.navplateTemplate({&lt;br /&gt;
		args = args&lt;br /&gt;
    })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- New Instance&lt;br /&gt;
---&lt;br /&gt;
--- @return table NavplateVehicles&lt;br /&gt;
function NavplateVehicles.new( self, frameArgs )&lt;br /&gt;
    local instance = {}&lt;br /&gt;
    setmetatable( instance, metatable )&lt;br /&gt;
    return instance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- &amp;quot;Main&amp;quot; entry point&lt;br /&gt;
---&lt;br /&gt;
--- @param frame table Invocation frame&lt;br /&gt;
--- @return string&lt;br /&gt;
function NavplateVehicles.main( frame )&lt;br /&gt;
    local instance = NavplateVehicles:new()&lt;br /&gt;
&lt;br /&gt;
    return instance:make()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return NavplateVehicles&lt;/div&gt;</summary>
		<author><name>FoXFTW</name></author>
	</entry>
</feed>