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

Module:Dimensions

From the Star Citizen Wiki, the fidelity™ encyclopedia
Revision as of 07:43, 25 October 2024 by Alistair3149 (talk | contribs)
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 127 — getOutputHTML
L 135 — getDimensionsData
L 144 — 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 template-dimensions-box-face-top' )
                :done()
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face template-dimensions-box-face-front' )
                :done()
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face 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' )
        :css( 'transform-style', 'preserve-3d' )
        :tag( 'div' )
            :addClass( 'template-dimensions-reference template-dimensions-box-faces' )
            :css( 'transform-style', 'preserve-3d' )
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face template-dimensions-box-face-top' )
                :done()
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face template-dimensions-box-face-front' )
                :done()
            :tag( 'div' )
                :addClass( 'template-dimensions-box-face template-dimensions-box-face-right' )
                :done()
            :done()
        :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