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, [factor])
    array = cockpit.format_bytes(number, [factor, options])

Formats `number` into a displayable `string` with a suffix, such as KB or MB. Returns an `array` of the formatted number and the suffix if `options.separate` is set to `true`.

If specifying 1000 or 1024 is specified as a `factor` then an appropriate suffix will be chosen. By default the `factor` is 1000. You can pass a string suffix as a `factor` in which case the resulting number will be formatted with the same suffix.

If the `number` is less than the `factor` or an unknown factor was passed in, then the formatted number is returned without a suffix. If `options.separate` is true, returns an array of `[formatted_number, suffix]` or `[formatted_number]` if returned without a suffix.

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 or an array without a suffix will be returned.

## cockpit.format_bytes_per_sec()

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

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

If specifying 1000 or 1024 is specified as a `factor` then an appropriate suffix will be chosen. By default the `factor` is 1000. You can pass a string suffix as a `factor` in which case the resulting number will be formatted with the same suffix.

If the `number` is less than the `factor` or an unknown factor was passed in, then the formatted number is returned without a suffix. If `options.separate` is true, returns an array of `[formatted_number, suffix]` or `[formatted_number]` if returned without a suffix.

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 or array will be returned.

## cockpit.format_bits_per_sec()

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

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

If specifying 1000 or 1024 is specified as a `factor` then an appropriate suffix will be chosen. By default the `factor` is 1000. You can pass a string suffix as a `factor` in which case the resulting number will be formatted with the same suffix.

If the `number` is less than the `factor` or an unknown factor was passed in, then the formatted number is returned without a suffix. If `options.separate` is true, returns an array of `[formatted_number, suffix]` or `[formatted_number]` if returned without a suffix.

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 or array will be returned.

## cockpit.info

    cockpit.info["version"]
    cockpit.info["build"]

This object contains information about cockpit itself. Note that when cockpit is running on multiple servers, this only reflects the server that was connected to. The following fields are defined:

`"build"`

  A string containing build details.

`"version"`

  A string containing the cockpit version number. It is almost always incorrect to use this to make a decision in code.

## cockpit.event_target

    cockpit.event_target(object, [handlers])

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