Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Please sign up or log in to edit the wiki.

Module:Dimensions: Difference between revisions

From the Star Citizen Wiki, the fidelity™ encyclopedia
Content deleted Content added
No edit summary
No edit summary
Line 45: Line 45:
:addClass( 'template-dimensions-object' )
:addClass( 'template-dimensions-object' )
:css( {
:css( {
[ '--object-length' ] = data.length or data.longestSide,
[ '--object-length' ] = data.length,
[ '--object-width' ] = data.width or data.longestSide,
[ '--object-width' ] = data.width,
[ '--object-height' ] = data.height or data.longestSide,
[ '--object-height' ] = data.height,
[ '--object-longest-side' ] = data.longestSide,
} )
} )


Line 117: Line 116:
:node( getObjectHTML( data) )
:node( getObjectHTML( data) )
return html
return html
end

--- Return the biggest number
---
--- @param numbers table
--- @return number|nil
local function getBiggestNumber( numbers )
local biggest = 0
for i = 1, #numbers do
local number = numbers[ i ]
-- Attempt to convert to number if it is string
if type( number ) == 'string' then
number = tonumber( number )
end
if type( number ) == 'number' then
if number > biggest then
biggest = number
end
end
end
return biggest
end
end




local function getDimensionsData( args )
local function getDimensionsData( args )
local numLength = tonumber( args.length )
local numWidth = tonumber( args.width )
local numHeight = tonumber( args.height )

local longestSide = getBiggestNumber( {
numLength,
numWidth,
numHeight
} )

local a = numLength or longestSide
local b = numWidth or longestSide

return {
return {
length = numLength,
length = tonumber( args.length ),
width = numWidth,
width = tonumber( args.width ),
height = numHeight,
height = tonumber( args.height ),
mass = tonumber( args.mass ),
mass = tonumber( args.mass )
longestSide = longestSide
}
}
end
end

Revision as of 05:04, 25 October 2024

Module documentation[view][edit][history][purge]
This documentation is transcluded from Module:Dimensions/doc. Changes can be proposed in the talk page.
Function list
L 11 — t
L 16 — getTextHTML
L 43 — getObjectHTML
L 113 — getOutputHTML
L 121 — getDimensionsData
L 130 — p.main

require( 'strict' )

local p = {}

local i18n = require( 'Module:i18n' ):new()

--- Wrapper function for Module:i18n.translate
---
--- @param key string The translation key
--- @return string If the key was not found, the key is returned
local function t( key )
	return i18n:translate( key )
end


local function getTextHTML( data )
    if not data.label and not data.value then return end
    local html = mw.html.create( 'div' )
        :addClass( 'template-dimensions-box-text' )

    if data.variant then
        html:addClass( 'template-dimensions-box-text-' .. data.variant )
    end

    if data.label then
        html:tag( 'div' )
            :addClass( 'template-dimensions-label' )
            :wikitext( data.label )
            :done()
    end

    if data.value then
        html:tag( 'div' )
            :addClass( 'template-dimensions-data' )
            :wikitext( data.value )
            :done()
    end

    return html
end


local function getObjectHTML( data )
    local html = mw.html.create( 'div' )
        :addClass( 'template-dimensions-object' )
        :css( {
            [ '--object-length' ] = data.length,
            [ '--object-width' ] = data.width,
            [ '--object-height' ] = data.height,
        } )

    local isometric = html:tag( 'div' )
        :addClass( 'template-dimensions-isometric' )
        :css( {
            [ 'transform-style' ] = 'preserve-3d',
            [ 'grid-template-areas' ] = "'layer'"
        } )

    -- Top layer
    isometric:tag( 'div' )
        :addClass( 'template-dimensions-layer template-dimensions-layer-top' )
        :css( 'transform-style', 'preserve-3d' )
        :tag( 'div' )
            :addClass( 'template-dimensions-box-faces' )
            :css( 'transform-style', 'preserve-3d' )
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face-top' )
                :done()
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face-front' )
                :done()
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face-right' )
                :done()
            :done()
        :node( getTextHTML( {
            label = 'Mass',
            value = data.mass,
            variant = 'fill'
        } ) )
        :done()

    -- Mid layer
    isometric:tag( 'div' )
        :addClass( 'template-dimensions-layer template-dimensions-layer-mid' )
        :css( 'transform-style', 'preserve-3d' )
        :node( getTextHTML( {
            label = 'Height',
            value = data.height,
            variant = 'y'
        } ) )
        :done()

    -- Bottom layer
    isometric:tag( 'div' )
        :addClass( 'template-dimensions-layer template-dimensions-layer-bottom' )
        :node( getTextHTML( {
            label = 'Length',
            value = data.length,
            variant = 'z'
        } ) )
        :node( getTextHTML( {
            label = 'Width',
            value = data.width,
            variant = 'x'
        } ) )
        :done()

    return html
end


local function getOutputHTML( data )
    local html = mw.html.create( 'div' )
        :addClass( 'template-dimensions' )
        :node( getObjectHTML( data) )
    return html
end


local function getDimensionsData( args )
    return {
        length = tonumber( args.length ),
        width = tonumber( args.width ),
        height = tonumber( args.height ),
        mass = tonumber( args.mass )
    }
end

function p.main( frame )
    local args = require( 'Module:Arguments' ).getArgs( frame )
    local data = getDimensionsData( args )

    return tostring( getOutputHTML( data ) ) .. frame:extensionTag{
        name = 'templatestyles', args = { src = 'Module:Dimensions/styles.css' }
    }
end

return p