Content deleted Content added
Alistair3149 (talk | contribs) No edit summary |
Alistair3149 (talk | contribs) No edit summary |
||
Line 45: | Line 45: | ||
:addClass( 'template-dimensions-object' ) |
:addClass( 'template-dimensions-object' ) |
||
:css( { |
:css( { |
||
[ '--object-length' ] = data.length |
[ '--object-length' ] = data.length, |
||
[ '--object-width' ] = data.width |
[ '--object-width' ] = data.width, |
||
[ '--object-height' ] = data.height |
[ '--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 = |
length = tonumber( args.length ), |
||
width = |
width = tonumber( args.width ), |
||
height = |
height = tonumber( args.height ), |
||
mass = tonumber( args.mass ) |
mass = tonumber( args.mass ) |
||
longestSide = longestSide |
|||
} |
} |
||
end |
end |
Revision as of 05:04, 25 October 2024
This documentation is transcluded from Module:Dimensions/doc. Changes can be proposed in the talk page.
Module:Dimensions is shared across the Star Citizen Wikis.
This module is shared across the Star Citizen Wikis. Any changes should also be relayed to the GitHub repository.
Function list |
---|
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