Das Star Citizen Wiki wird von Leuten wie dir gemacht! Bitte überleg doch bei uns mitzuwirken, wir können viel Hilfe gebrauchen!

Modul:Common

Aus Star Citizen Wiki

Das Modul Common stellt Funktionen bereit, welche allgemein in anderen Modulen weiterverwendet werden.

Öffentliche Methoden[Bearbeiten]

Das Modul stellt folgende öffentliche Methoden bereit:

  • extractDataFromPrefix
    • Extrahiert alle Argumente, die mit 'argPrefix' beginnen, aus übergebenen Vorlageparametern
  • setDisplayTitle
    • Setzt den Abzeigetitel der aktuellen Seite
      • framm tabelle: Der zu bearbeitende Frame
      • title string: Seitentitel
      • flag string: Entweder 'noerror' oder 'noreplace'
  • removeTypeSuffix
    • Entfernt (...) Suffixe aus einer Zeichenkette
      • Beispiel:
        • Eingabe: Orion (Raumschiff)
        • Aufruf: common.removeTypeSuffix( 'Orion (Raumschiff)', 'Raumschiff' )
        • Ausgabe: Orion
  • checkSmwResult
    • Prüft, ob das Setzen von SMW-Daten erfolgreich war
  • checkApiResponse
    • Prüft, ob die Api-Anfrage erfolgreich war und ob die Antwort gültig ist
  • formatNum
    • Formatiert eine Zahl entsprechend der Sprache des Inhalts

local common = {}

-- Extracts all arguments starting with 'argPrefix' form passed args
-- keyPrefix string Prefix of template parameters. Example: |template_param_1=foo, |template_param_2=bar PREFIX = template_param_
-- args table Frame arguments
-- mode string Param operation mode default %w = strings or integers. %a = strings, %d = digits. See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
function common.extractDataFromPrefix( keyPrefix, args, mode )
    local data = {}

    local operationMode = mode
    if operationMode == nil then
        operationMode = '%w'
    end

    for key, value in pairs( args ) do
        if mw.ustring.match( key, keyPrefix .. operationMode ) and value ~= nil then
            table.insert( data, value )
        end
    end

    return data
end

-- Set the Displaytitle of the current page
-- frame table The frame to operate on
-- title string Page title
-- flag string Either 'noerror' or 'noreplace'
function common.setDisplayTitle( frame, title, flag )
    if flag ~= nil and ( flag ~= 'noerror' or flag ~= 'noreplace' ) then
        flag = nil
    end

    return frame:callParserFunction{
        name = 'DISPLAYTITLE:' .. title,
        args = {
            flag
        }
    }
end

-- Removes (...) suffixes
function common.removeTypeSuffix( pageName, suffix )
    if type( suffix ) == 'table' then
        for _, toRemove in pairs( suffix ) do
            pageName = common.removeTypeSuffix( pageName, toRemove )
        end

        return pageName
    end

    return mw.text.trim( pageName:gsub( '%(' .. suffix .. '%)', '' ), '_ ' )
end

-- Checks if Setting SMW Data was successful
function common.checkSmwResult( result )
    if result ~= true and result.error ~= nil then
        error( 'Semantic Mediawiki Fehler ' .. result.error )
    end
end

-- Checks if Api Request was successful and if the Response is valid
function common.checkApiResponse( response, errorOnStatus, errorOnData )
    if response[ 'status_code' ] ~= nil and response[ 'status_code' ] ~= 200 then
        if errorOnStatus == nil or errorOnStatus == true then
            error( 'API Anfrage resultierte in Fehlercode ' .. response[ 'status_code' ] .. '(' .. response[ 'message' ] .. ')', 0 )
        end
    end

    if response[ 'data' ] == nil then
        if errorOnData == nil or errorOnData == true then
            error( 'API Daten entalten kein "data" Feld', 0 )
        end
    end
end

-- Formats a number according to the content language
function common.formatNum( num )
    if num == nil then
        return num
    end

    if type( num ) == 'string' then
        num = tonumber( num, 10 )
    end

    if num == nil then
        return num
    end

    return mw.language.getContentLanguage():formatNum( num )
end

-- https://github.com/mirven/underscore.lua/blob/master/lib/underscore.lua
-- Slices an array
function common.slice( array, start_index, length )
    local sliced_array = {}

    start_index = math.max( start_index, 1 )
    local end_index = math.min( start_index + length - 1, #array )
    for i = start_index, end_index do
        sliced_array[ #sliced_array + 1 ] = array[ i ]
    end

    return sliced_array
end

-- Titleparts Lib
common.titleparts = {}

-- https://github.com/wikimedia/mediawiki-extensions-ParserFunctions/blob/master/includes/ParserFunctions.php
function common.titleparts.get( title, parts, offset )
    local ntitle = mw.title.new( title )

    parts = tonumber( parts )
    offset = tonumber( offset )

    if ntitle.exists == false then
        return title
    end

    local bits = mw.text.split( title, '/', true )

    if #bits <= 0 then
        return ntitle.prefixedText()
    else
        if parts == 0 then
            return table.concat( slice( bits, offset ), '/' )
        else
            return table.concat( slice( bits, offset, parts ), '/' )
        end
    end
end

return common