Unit

baja. Unit

new Unit()

Description:
  • Represents a baja:Unit in BajaScript.

    When creating a Simple, always use the make() method instead of
    creating a new Object.

Source:

Extends

Members

isPrefix

Description:
  • Returns true if the unit should be prefixed.

Source:

Returns true if the unit should be prefixed.

(static) DEFAULT :baja.Unit

Description:
  • Default Unit instance.

Source:

Default Unit instance.

Type:

(static) NULL :baja.Unit

Description:
  • Null Unit instance (same as DEFAULT).

Source:

Null Unit instance (same as DEFAULT).

Type:

Methods

convertTo(toUnit, scalar) → {number}

Description:
  • Convert a scalar value from this unit to another.

Source:
Parameters:
Name Type Description
toUnit baja.Unit
scalar number
Throws:

if the two Units are not of the same Dimension

Type
Error
Returns:

the converted scalar value

Type
number

decodeAsync(str, batchopt) → {baja.Simple|Promise.<baja.Simple>}

Description:
  • The string encoding of certain Simples may include Type information, or other data that may
    require asynchronous operations to decode. For instance, some Simples may function as
    "containers" for other Simples, and may include that Type information in the string encoding.
    That Simple would then need to import those Types before it could be fully decoded in the
    browser.

    baja.Facets is a great example of this. A Facets may contain FrozenEnum values that are
    defined by Types, such as baja:Weekday. For a Facets containing a Weekday to be fully
    constructed in the browser, the baja:Weekday Type must be imported first. Since importing
    a Type may require a network call, this Facets instance might not be able to be constructed
    synchronously, using only decodeFromString(). baja.Facets has itself implemented
    decodeAsync() to import any necessary Types.

    When implementing a Type Extension for a Simple, if your Simple references arbitrary Types that
    need to be imported when decoding your Simple, implement decodeAsync() and perform any Type
    imports (or other asynchronous operations) there.

    If you are writing code that decodes Simples from strings - that is, when you have a type spec
    and string encoding, and you need to be able to decode any kind of Simple - favor the use of
    decodeAsync, as it gives the individual Simple a chance to perform async operations to ensure
    that the decoded Simple is fully correct.

    The default implementation just returns decodeFromString directly.

    Prior to Niagara 4.14, decodeAsync() was only used in field editors. In 4.14 and later,
    decodeAsync() will be used by BajaScript itself to support asynchronous decoding of Simples
    when resolving ORDs and retrieving other data from the station.

    (Note: decodeAsync() cannot be used by the framework to decode frozen slots. If you
    have a frozen slot, whose definition is a Simple that would require the use of
    decodeAsync() to construct it, it will not work. The best approach would be to implement a
    Type Extension that would use the baja! plugin to preload all the types referenced by the
    default value of that frozen slot, so that decodeFromString would have all the information
    it needed to construct it synchronously.)

Source:
Inherited From:
Example
return Promise.resolve(baja.$(simpleTypeSpec).decodeAsync(stringEncoding))
  .then((simpleInstance) => {});
Parameters:
Name Type Attributes Description
str string
batch baja.comm.Batch <optional>

optional batch to use

Returns:

may return the Simple instance
directly, or a Promise resolving to same - so wrap in Promise.resolve()
if unsure.

Type
baja.Simple | Promise.<baja.Simple>

decodeFromString(str) → {baja.Unit}

Description:
  • Parse a baja.Unit from a String.

Source:
Overrides:
Parameters:
Name Type Description
str String
Throws:

if string is malformed or contains invalid unit parameters

Returns:
Type
baja.Unit

encodeToString() → {String}

Description:
  • Encode a baja.Unit to a String.

Source:
Overrides:
Returns:
Type
String

equals(obj) → {Boolean}

Description:
  • Equality test.

Source:
Inherited From:
Parameters:
Name Type Description
obj
Returns:
Type
Boolean

equivalent(obj) → {Boolean}

Description:
  • Equivalence test.

    equivalent() is used to compare if two Objects have equivalent
    state, but might not want to return true for equals since it
    it has implied semantics for many operations. The default
    implementation returns the result of baja.Object#equals.

Source:
Inherited From:
Parameters:
Name Type Description
obj
Returns:
Type
Boolean

getAgents(isopt, batchopt) → {Promise}

Description:
  • Returns a promise that resolves to the agent list for this Object.

Source:
Inherited From:
See:
Parameters:
Name Type Attributes Description
is Array.<String> <optional>

An optional array of filters to add to the
agent query.

batch baja.comm.Batch <optional>

An optional object used to batch network
calls together.

Returns:

A promise that will resolve with the Agent Info.

Type
Promise

getDataTypeSymbol() → {String}

Description:
  • Returns the data type symbol (u) for Facets encoding.

Source:
Returns:
Type
String

getDimension() → {baja.Dimension}

Description:
  • Returns the unit dimension.

Source:
Returns:
Type
baja.Dimension

getIcon() → {baja.Icon}

Description:
  • Return the Object's Icon.

Source:
Inherited From:
Returns:
Type
baja.Icon

getOffset() → {Number}

Description:
  • Returns the unit offset.

Source:
Returns:
Type
Number

getScale() → {Number}

Description:
  • Returns the unit scale.

Source:
Returns:
Type
Number

getSymbol() → {String}

Description:
  • Returns the unit symbol.

Source:
Returns:
Type
String

getType() → {Type}

Description:
  • Get the type of this instance.

Source:
Inherited From:
Returns:
Type
Type

getTypeDisplayName(cxopt) → {Promise.<string>|string}

Description:
  • Gets the friendly type display name for this object.

Source:
Since:
  • Niagara 4.10
Inherited From:
See:
  • baja.Type#getDisplayName
Parameters:
Name Type Attributes Description
cx Object <optional>

a context to be passed down to Type

Returns:

If no context is provided, the type
display name is returned synchronously as a string. If context provided,
the type display name is resolved via a promise as a string.

Type
Promise.<string> | string

getUnitName() → {String}

Description:
  • Returns the unit name.

Source:
Returns:
Type
String

make() → {baja.Unit}

Source:
Overrides:
See:
Returns:
Type
baja.Unit

newCopy(exactopt)

Description:
  • Every value may be cloned using the newCopy method.

    Please note that Simples are immutable so they don't
    allocate a new instance.

Source:
Inherited From:
See:
Parameters:
Name Type Attributes Description
exact Boolean <optional>

true if an exact copy of the value should be
made (only valid in the Component architecture).

Returns:

a copy of the value (or the same instance if the value is a
Simple).

toDesiredUnit(unitConversion) → {Promise.<baja.Unit>}

Description:
  • Get the unit that this unit converts to as specified by the given
    conversion.

Source:
Since:
  • Niagara 4.8
Example
return fahrenheitUnit.toDesiredUnit('metric')
  .then(function (unit) {
    console.log(unit.getUnitName()); // Celsius
  });
Parameters:
Name Type Description
unitConversion baja.FrozenEnum | number | string

accepts a
baja:UnitConversion enum, ordinal, or tag.

Returns:
Type
Promise.<baja.Unit>

toString() → {String}

Description:
  • Returns the unit symbol.

Source:
Overrides:
Returns:
Type
String

valueOf() → {String}

Source:
Inherited From:
Returns:

the string encoding of the Simple, by default

Type
String

(static) convert(scalar, params) → {Promise.<number>}

Description:
  • Friendly API to convert a scalar value to a desired unit.

Source:
Since:
  • Niagara 4.8
Examples

What is 32 Fahrenheit, as shown in metric units?

return baja.Unit.convert(32, { units: 'fahrenheit', unitConversion: 'metric' })
  .then(function (result) {
    console.log(result); // 0
  });

How many centimeters are in 1 inch?

return baja.Unit.convert(1, { fromUnits: 'inch', toUnits: 'centimeter' })
  .then(function (result) {
    console.log(result); // 2.54
  });

My data is "12 inches", but the user wants to see metric units. What number should I show them in the UI?

return baja.Unit.convert(12, { fromUnits: 'inch', unitConversion: 'metric' })
  .then(function (result) {
    console.log(result); // 30.48
  });

My user entered "100 cm", but my station logic is in inches. What number should I store in the station?

return baja.Unit.convert(100, { unitConversion: 'metric', toUnits: 'inch', precision: 2 })
  .then(function (result) {
    console.log(result); // 39.37
  });
Parameters:
Name Type Description
scalar number

a scalar value to convert

params object
Properties
Name Type Attributes Default Description
fromUnits baja.Unit | string <optional>
params.units

the units the scalar is currently in. Can be a unit name, or Units instance. If omitted, considered to be toUnits with unitConversion applied.

unitConversion string | number | baja.FrozenEnum <optional>

used to convert between systems of measure.

toUnits baja.Unit | string <optional>

the desired units. If omitted, will be considered to be fromUnits with unitConversion applied.

precision number <optional>
8

specify how many decimal places the resulting scalar should be rounded to.

Returns:

the converted unit.

Type
Promise.<number>

(static) make(name, symbolopt, dimension, scaleopt, offsetopt, isPrefixopt) → {baja.Unit}

Description:
  • Creates a new instance of baja.Unit.

    Note that if calling this function directly, multiple calls with the same
    name but different dimensions will result in an error (no messing with
    the laws of physics!). Be careful not to manually create Units with
    incorrect dimensions that might clash with units specified in the unit
    database stationside.

Source:
Parameters:
Name Type Attributes Default Description
name String

the unit name. Must be unique and may not contain a
semicolon.

symbol String <optional>
name

the unit symbol. If omitted will default to
the unit name. May not contain a semicolon.

dimension baja.Dimension

the unit dimension

scale Number <optional>
1

the unit scale

offset Number <optional>
0

the unit offset

isPrefix Boolean <optional>
false

true if the unit should be prefixed /
displayed on the left of the actual value

Throws:

if name or symbol contain a semicolon, the dimension is omitted,
or if duplicate units are created with the same name but different
dimensions

Returns:
Type
baja.Unit

(static) toDisplayUnits(cxopt) → {Promise.<(baja.Unit|null)>}

Description:
  • Get the desired unit as specified by the input context.

Source:
Since:
  • Niagara 4.8
See:
Example

Calculate display units based on facets.

var facetsObj = point.getFacets().toObject();
return baja.Unit.toDisplayUnits(facetsObj)
  .then(function (displayUnits) {
    console.log('this point wants to be displayed with units ' + displayUnits);
  });
Parameters:
Name Type Attributes Description
cx Object <optional>
Properties
Name Type Attributes Description
units baja.Unit <optional>
unitConversion baja.FrozenEnum | number | string <optional>

accepts a
baja:UnitConversion enum, ordinal, or tag. If omitted,
baja.getUnitConversion() (the user-configured unit conversion) will be
used.

showUnits boolean <optional>
Returns:

resolves the desired display unit as
specified. If showUnits is false or the units are not specified or
NULL, resolves null to indicate that units are not used for display in
this context.

Type
Promise.<(baja.Unit|null)>