Modul:CharArmorComponents

Aus Steel Beasts Wiki

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

local CharArmorComponents = {}

local metatable = {}
local methodtable = {}

metatable.__index = methodtable


local localized = require( 'Module:Localized' )


--- Request armor set and class from the current page
--- @param title string
--- @return string|nil
function CharArmorComponents.getPageData( title )
    local query = {
        '[[' .. title .. ']]',
        '?Set#-=set', '+lang=de',
        '?Basisversion UUID#-=base_uuid',
        '?UUID#-=uuid',
        'mainlabel=-'
    }

    local result = mw.smw.ask( query )
    local set, uuid, base_uuid

    if result ~= nil and result[ 1 ] ~= nil then
        set = result[ 1 ].set or nil
        base_uuid = result[ 1 ].base_uuid or nil
        uuid = result[ 1 ].uuid or nil
    end

    return set, uuid, base_uuid
end


--- Creates the query for components
--- @return string
function CharArmorComponents.makeComponentsQuery( frame )
    local args = require( 'Module:Arguments' ).getArgs( frame )

    -- name from args or current page
    local name = args[ 1 ] or args[ 'Name' ] or localized.getMainTitle()
    local set, _, _ = CharArmorComponents.getPageData( name )

    local restrictions = {
        '[[Name::~~"' .. name .. '"]]',
        '[[Ist Basisversion::Wahr]]',
        '[[:+]]',
    }

    if type( set ) == 'string' then
        table.insert( restrictions, '[[Set::' .. set .. ']]')
    else
    	return ''
    end

	local query = {
	    '{{#ask:',
	    table.concat( restrictions ),
	    '|?Rüstungsklasse=Komponente',
	    '|+lang=de',
	    '|?Name',
	    '|format=broadtable',
	    '|limit=5',
	    '|offset=0',
	    '|link=all',
	    '|sort=',
	    '|order=asc',
	    '|headers=plain',
	    '|mainlabel=-',
	    '|class=sortable wikitable smwtable',
	    '|transpose=1',
	    '|intro=<nowiki/>',
	    '== Rüstungskomponenten ==',
	    '<div class="flex-wrapper">',
	    '|outro=<nowiki/>',
	    '</div>',
	    '}}',
	}

	return frame:preprocess( table.concat( query, "\n" ) )
end


--- Creates the query for variants
--- @return string
function CharArmorComponents.makeVariantsQuery( frame )
    local args = require( 'Module:Arguments' ).getArgs( frame )

    -- name from args or current page
    local name = args[ 1 ] or args[ 'Name' ] or localized.getMainTitle()
    local set, uuid, base_uuid = CharArmorComponents.getPageData( name )

    local restrictions = {
        '[[:+]]',
        '[[Hat Unterobjekt::+]]',
    }

    if set == nil and uuid == nil and base_uuid == nil then
    	return ''
	end

    if base_uuid ~= nil then
    	table.insert(
    		restrictions,
    		'<q>[[Basisversion UUID::' .. base_uuid .. ']]||[[UUID::' .. base_uuid .. ']]</q>'
		)
    elseif uuid ~= nil then
		table.insert( restrictions, '[[Basisversion UUID::' .. uuid .. ']]')
	else
        table.insert( restrictions, '[[Name::~' .. name .. '%"]]' )
	end

    if type( set ) == 'string' then
        table.insert( restrictions, '[[Set::' .. set .. ']]')
    end

	local query = {
	    '{{#ask:',
	    table.concat( restrictions ),
	    '|format=ul',
	    '|limit=15',
	    '|offset=0',
	    '|link=all',
	    '|order=asc',
	    '|class=ul-col-3',
	    '|searchlabel=… weitere Versionen',
	    '|intro=<nowiki/>',
	    '== Versionen ==',
	    'Dieses Item existiert in folgenden Varianten:',
	    '}}',
	}

	return frame:preprocess( table.concat( query, "\n" ) )
end


return CharArmorComponents