# cockpit.js: Utilities

Various utility functions

## cockpit.format()

    string = cockpit.format(template, args)
    string = cockpit.format(template, [arg, ...])

Format a string interpolating `args` into `template` using shell like syntax. The `args` may be either an array or javascript object. The `template` can contain fields that look like `$name` or `${name}` or `$0`. Numeric fields are used with array `args` and start at zero.

In the second form, multiple `arg` arguments may be passed directly, and interpolated as as numeric fields in the `template`.

All falsy arguments except the numbers `0` and `0.0`are replaced by an empty string.

## cockpit.format_number()

    string = cockpit.format_number(number, [precision])

Formats `number` into a displayable `string`. If the number is not an integer, it is rounded to the given number of decimal places, defaulting to 3. If the number is near zero, but not quite zero it is rounded to the smallest non-zero value of the given precision; i.e. ±0.001 for default precision 3.

If `number` is `null` or `undefined` an empty string will be returned.

## cockpit.format_bytes()

    string = cockpit.format_bytes(number, [options])

Formats `number` into a displayable `string` with a suffix, such as kB or MB.

By default, SI units are used. IEC units (1024-based) can be requested by including `base2: true` in `options`.

By default, non-integer numbers will be formatted with 3 digits of precision. This can be changed with `options.precision`.

If `number` is `null` or `undefined` an empty string will be returned.

## cockpit.format_bytes_per_sec()

    string = cockpit.format_bytes_per_sec(number, [options])

Format `number` of bytes into a displayable speed `string`.

This function is mostly equivalent to `cockpit.format_bytes()` but the returned value contains a unit like kB/s or MB/s.

## cockpit.format_bits_per_sec()

    string = cockpit.format_bits_per_sec(number, [options])

Format `number` of bits into a displayable speed `string`.

This function is mostly equivalent to `cockpit.format_bytes()` but the returned value contains a unit like kbps or Mbps.

This function does not support IEC units. `base2` may not be passed as part of `options`.

## cockpit.init()

    await cockpit.init();

    cockpit.init().then(() => { ... });

Requests initialization of the Cockpit client library. This will ensure that the transport is connected and we are ready to create channels. It also populates the `cockpit.info` field.

This function returns a promise. Initialization isn’t complete until the promise has resolved. You can either `await` it or call `.then()` on it.

## cockpit.info

    cockpit.info.channels[payload]

    cockpit.info.os_release[field]

    cockpit.info.user

    cockpit.info.ws.version

This object contains information about Cockpit itself. It is only available after cockpit.init() has been called and awaited.

`channels`

  This is a mapping of channel payload types (keys, strings) supported by the bridge to capabilities advertised by those channels (values, lists of strings). Channels are listed even if they don’t advertise any capabilities, making this useful as a way to determine which channel types are supported by the bridge.

`os_release`

  This is the data from the `/etc/os-release` or `/usr/lib/os-release` on the system that the bridge is running on. It is a mapping from the key names to their values. See the os-release Specification for information about the available keys.

`user`

  Contains information about the user we’re logged in as.

  `uid`

    This is unix user id as an integer.

  `gid`

    This is unix user group id as an integer.

  `name`

    This is the unix user name like `"root"`.

  `fullname`

    This is a readable name for the user, from the GECOS field.

  `group`

    This is the primary group name of the user.

  `groups`

    This is an array of group names to which the user belongs. The first item in this list is the primary group.

  `home`

    This is user’s home directory.

  `shell`

    This is unix user shell.

`ws`

  Contains information about the webserver Cockpit is being served with.

  `version`

    The version of the webserver.

## cockpit.event_target

    cockpit.event_target(object, [handlers])

Adds an EventTarget implementation to the `object`. Optionally store the handlers in `handlers` if its specified.