# Class: LuCI

## LuCI

This is the LuCI base class. It is automatically instantiated and accessible using the global `L` variable.

#### new LuCI(env)

luci.js, line 1

  Name | Type | Description
  --- | --- | ---
  `env` | Object | The environment settings to use for the LuCI runtime.

### Classes

baseclass
dom
form
fs
headers
network
poll
request
response
rpc
session
uci
ui
view
xhr

### Members

#### Class

  Legacy `L.Class` class alias. New view code should use `'require baseclass';` to request the `LuCI.baseclass` class.

  Deprecated
    - Yes

#### dom

  Legacy `L.dom` class alias. New view code should use `'require dom';` to request the `LuCI.dom` class.

  Deprecated
    - Yes

#### env

  The `env` object holds environment settings used by LuCI, such as request timeouts, base URLs etc.

#### Poll

  Legacy `L.Poll` class alias. New view code should use `'require poll';` to request the `LuCI.poll` class.

  Deprecated
    - Yes

#### Request

  Legacy `L.Request` class alias. New view code should use `'require request';` to request the `LuCI.request` class.

  Deprecated
    - Yes

#### view

  Legacy `L.view` class alias. New view code should use `'require view';` to request the `LuCI.view` class.

  Deprecated
    - Yes

### Methods

#### bind(fn, self, args){function}

luci.js, line 2397

  Return a bound function using the given `self` as `this` context and any further arguments as parameters to the bound function.

  Name | Type | Description
  --- | --- | ---
  `fn` | function | The function to bind.
  `self` | * | The value to bind as `this` context to the specified function.
  `args` | * | optional repeatable Zero or more variable arguments which are bound to the function as parameters.

  ##### Returns:

  Type | Description
  --- | ---
  function | Returns the bound function.

#### error(type, fmt, args)

luci.js, line 2356

  A wrapper around `raise()` which also renders the error either as modal overlay when `ui.js` is already loaed or directly into the view body.

  Name | Type | Default | Description
  --- | --- | --- | ---
  `type` | Error | string | Error | optional Either a string specifying the type of the error to throw or an existing `Error` instance to copy.
  `fmt` | string | Unspecified error | optional A format string which is used to form the error message, together with all subsequent optional arguments.
  `args` | * |  | optional repeatable Zero or more variable arguments to the supplied format string.

  ##### Throws:

  Throws the created error object with the captured stack trace appended to the message and the type set to the given type argument or copied from the given error instance.

  Type
    Error

#### fspath(parts){string}

luci.js, line 2771

  Construct an absolute filesystem path relative to the server document root.

  Name | Type | Description
  --- | --- | ---
  `parts` | string | optional repeatable An array of parts to join into a path.

  ##### Returns:

  Type | Description
  --- | ---
  string | Return the joined path.

#### get(url, args, cb){Promise.<null>}

luci.js, line 3070

  Issues a GET request to the given url and invokes the specified callback function. The function is a wrapper around `Request.request()`.

  Name | Type | Description
  --- | --- | ---
  `url` | string | The URL to request.
  `args` | Object.<string, string> | optional Additional query string arguments to append to the URL.
  `cb` | LuCI.requestCallbackFn | The callback function to invoke when the request finishes.

  Deprecated
    - Yes

  ##### Returns:

  Type | Description
  --- | ---
  Promise.<null> | Returns a promise resolving to `null` when concluded.

#### halt(){boolean}

luci.js, line 3208

  Deprecated wrapper around `Poll.stop()`.

  Deprecated
    - Yes

  ##### Returns:

  Type | Description
  --- | ---
  boolean | Returns `true` when the polling loop has been stopped or `false` when it didn't run to begin with.

#### hasSystemFeature(feature, subfeature){boolean|null}

luci.js, line 2649

  Test whether a particular system feature is available, such as hostapd SAE support or an installed firewall. The features are queried once at the beginning of the LuCI session and cached in `SessionStorage` throughout the lifetime of the associated tab or browser window.

  Name | Type | Description
  --- | --- | ---
  `feature` | string | The feature to test. For detailed list of known feature flags, see `/modules/luci-base/root/usr/libexec/rpcd/luci`.
  `subfeature` | string | optional Some feature classes like `hostapd` provide sub-feature flags, such as `sae` or `11w` support. The `subfeature` argument can be used to query these.

  ##### Returns:

  Type | Description
  --- | ---
  boolean | null | Return `true` if the queried feature (and sub-feature) is available or `false` if the requested feature isn't present or known. Return `null` when a sub-feature was queried for a feature which has no sub-features.

#### hasViewPermission(){boolean|null}

luci.js, line 3174

  Check whether a view has sufficient permissions.

  ##### Returns:

  Type | Description
  --- | ---
  boolean | null | Returns `null` if the current session has no permission at all to load resources required by the view. Returns `false` if readonly permissions are granted or `true` if at least one required ACL group is granted with write permissions.

#### isObject(val){boolean}

luci.js, line 2917

  Tests whether the passed argument is a JavaScript object. This function is meant to be an object counterpart to the standard `Array.isArray()` function.

  Name | Type | Description
  --- | --- | ---
  `val` | * | optional The value to test

  ##### Returns:

  Type | Description
  --- | ---
  boolean | Returns `true` if the given value is of type object and not `null`, else returns `false`.

#### location(){string}

luci.js, line 2897

  Return the complete URL path to the current view.

  ##### Returns:

  Type | Description
  --- | ---
  string | Returns the URL path to the current view.

#### media(parts){string}

luci.js, line 2884

  Construct an URL path relative to the media resource path of the LuCI ui (usually `/luci-static/$theme_name`).

  The resulting URL is guaranteed to only contain the characters `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well as `/` for the path separator.

  Name | Type | Description
  --- | --- | ---
  `parts` | Array.<string> | optional An array of parts to join into an URL path. Parts may contain slashes and any of the other characters mentioned above.

  ##### Returns:

  Type | Description
  --- | ---
  string | Returns the resulting URL path.

#### path(prefix, parts){string}

luci.js, line 2809

  Construct a relative URL path from the given prefix and parts. The resulting URL is guaranteed to only contain the characters `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well as `/` for the path separator.

  Name | Type | Description
  --- | --- | ---
  `prefix` | string | optional The prefix to join the given parts with. If the `prefix` is omitted, it defaults to an empty string.
  `parts` | Array.<string> | optional An array of parts to join into an URL path. Parts may contain slashes and any of the other characters mentioned above.

  ##### Returns:

  Type | Description
  --- | ---
  string | Return the joined URL path.

#### poll(interval, url, args, cb, post){function}

luci.js, line 3140

  Register a polling HTTP request that invokes the specified callback function. The function is a wrapper around `Request.poll.add()`.

  Name | Type | Default | Description
  --- | --- | --- | ---
  `interval` | number |  | The poll interval to use. If set to a value less than or equal to `0`, it will default to the global poll interval configured in `LuCI.env.pollinterval`.
  `url` | string |  | The URL to request.
  `args` | Object.<string, string> |  | optional Specifies additional arguments for the request. For GET requests, the arguments are appended to the URL as query string, for POST requests, they'll be added to the request body.
  `cb` | LuCI.requestCallbackFn |  | The callback function to invoke whenever a request finishes.
  `post` | boolean | false | optional When set to `false` or not specified, poll requests will be made using the GET method. When set to `true`, POST requests will be issued. In case of POST requests, the request body will contain an argument `token` with the current value of `LuCI.env.token` by default, regardless of the parameters specified with `args`.

  Deprecated
    - Yes

  ##### Returns:

  Type | Description
  --- | ---
  function | Returns the internally created function that has been passed to `Request.poll.add()`. This value can be passed to `Poll.remove()` to remove the polling request.

#### post(url, args, cb){Promise.<null>}

luci.js, line 3098

  Issues a POST request to the given url and invokes the specified callback function. The function is a wrapper around `Request.request()`. The request is sent using `application/x-www-form-urlencoded` encoding and will contain a field `token` with the current value of `LuCI.env.token` by default.

  Name | Type | Description
  --- | --- | ---
  `url` | string | The URL to request.
  `args` | Object.<string, string> | optional Additional post arguments to append to the request body.
  `cb` | LuCI.requestCallbackFn | The callback function to invoke when the request finishes.

  Deprecated
    - Yes

  ##### Returns:

  Type | Description
  --- | ---
  Promise.<null> | Returns a promise resolving to `null` when concluded.

#### raise(type, fmt, args)

luci.js, line 2290

  Captures the current stack trace and throws an error of the specified type as a new exception. Also logs the exception as error to the debug console if it is available.

  Name | Type | Default | Description
  --- | --- | --- | ---
  `type` | Error | string | Error | optional Either a string specifying the type of the error to throw or an existing `Error` instance to copy.
  `fmt` | string | Unspecified error | optional A format string which is used to form the error message, together with all subsequent optional arguments.
  `args` | * |  | optional repeatable Zero or more variable arguments to the supplied format string.

  ##### Throws:

  Throws the created error object with the captured stack trace appended to the message and the type set to the given type argument or copied from the given error instance.

  Type
    Error

#### require(name){Promise.<LuCI.baseclass>}

luci.js, line 2436

  Load an additional LuCI JavaScript class and its dependencies, instantiate it and return the resulting class instance. Each class is only loaded once. Subsequent attempts to load the same class will return the already instantiated class.

  Name | Type | Description
  --- | --- | ---
  `name` | string | The name of the class to load in dotted notation. Dots will be replaced by spaces and joined with the runtime-determined base URL of LuCI.js to form an absolute URL to load the class file from.

  ##### Throws:

  - Throws a `DependencyError` when the class to load includes circular dependencies.

    Type
      DependencyError

  - Throws `NetworkError` when the underlying `LuCI.request` call failed.

    Type
      NetworkError

  - Throws `SyntaxError` when the loaded class file code cannot be interpreted by `eval`.

    Type
      SyntaxError

  - Throws `TypeError` when the class file could be loaded and interpreted, but when invoking its code did not yield a valid class instance.

    Type
      TypeError

  ##### Returns:

  Type | Description
  --- | ---
  Promise.<LuCI.baseclass> | Returns the instantiated class.

#### resolveDefault(value, defvalue){Promise.<*>}

luci.js, line 3025

  Returns a promise resolving with either the given value or or with the given default in case the input value is a rejecting promise.

  Name | Type | Description
  --- | --- | ---
  `value` | * | The value to resolve the promise with.
  `defvalue` | * | The default value to resolve the promise with in case the given input value is a rejecting promise.

  ##### Returns:

  Type | Description
  --- | ---
  Promise.<*> | Returns a new promise resolving either to the given input value or to the given default value on error.

#### resource(parts){string}

luci.js, line 2862

  Construct an URL path relative to the global static resource path of the LuCI ui (usually `/luci-static/resources`).

  The resulting URL is guaranteed to only contain the characters `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well as `/` for the path separator.

  Name | Type | Description
  --- | --- | ---
  `parts` | Array.<string> | optional An array of parts to join into an URL path. Parts may contain slashes and any of the other characters mentioned above.

  ##### Returns:

  Type | Description
  --- | ---
  string | Returns the resulting URL path.

#### run(){boolean}

luci.js, line 3221

  Deprecated wrapper around `Poll.start()`.

  Deprecated
    - Yes

  ##### Returns:

  Type | Description
  --- | ---
  boolean | Returns `true` when the polling loop has been started or `false` when it was already running.

#### sortedKeys(obj, key, sortmode){Array.<string>}

luci.js, line 2946

  Return an array of sorted object keys, optionally sorted by a different key or a different sorting mode.

  Name | Type | Description
  --- | --- | ---
  `obj` | object | The object to extract the keys from. If the given value is not an object, the function will return an empty array.
  `key` | string | optional Specifies the key to order by. This is mainly useful for nested objects of objects or objects of arrays when sorting shall not be performed by the primary object keys but by some other key pointing to a value within the nested values.
  `sortmode` | string | optional May be either `addr` or `num` to override the natural lexicographic sorting with a sorting suitable for IP/MAC style addresses or numeric values respectively.

  ##### Returns:

  Type | Description
  --- | ---
  Array.<string> | Returns an array containing the sorted keys of the given object.

#### stop(entry){boolean}

luci.js, line 3195

  Deprecated wrapper around `Poll.remove()`.

  Name | Type | Description
  --- | --- | ---
  `entry` | function | The polling function to remove.

  Deprecated
    - Yes

  ##### Returns:

  Type | Description
  --- | ---
  boolean | Returns `true` when the function has been removed or `false` if it could not be found.

#### toArray(val){Array.<*>}

luci.js, line 2991

  Converts the given value to an array. If the given value is of type array, it is returned as-is, values of type object are returned as one-element array containing the object, empty strings and `null` values are returned as empty array, all other values are converted using `String()`, trimmed, split on white space and returned as array.

  Name | Type | Description
  --- | --- | ---
  `val` | * | The value to convert into an array.

  ##### Returns:

  Type | Description
  --- | ---
  Array.<*> | Returns the resulting array.

#### url(parts){string}

luci.js, line 2840

  Construct an URL pathrelative to the script path of the server side LuCI application (usually `/cgi-bin/luci`).

  The resulting URL is guaranteed to only contain the characters `a-z`, `A-Z`, `0-9`, `_`, `.`, `%`, `,`, `;`, and `-` as well as `/` for the path separator.

  Name | Type | Description
  --- | --- | ---
  `parts` | Array.<string> | optional An array of parts to join into an URL path. Parts may contain slashes and any of the other characters mentioned above.

  ##### Returns:

  Type | Description
  --- | ---
  string | Returns the resulting URL path.

### Type Definitions

#### LuCI.requestCallbackFn(xhr, data, duration)

luci.js, line 3029

  The request callback function is invoked whenever an HTTP reply to a request made using the `L.get()`, `L.post()` or `L.poll()` function is timed out or received successfully.

  Name | Type | Description
  --- | --- | ---
  `xhr` | XMLHTTPRequest | The XMLHTTPRequest instance used to make the request.
  `data` | * | The response JSON if the response could be parsed as such, else `null`.
  `duration` | number | The total duration of the request in milliseconds.