# 02. __Library__

[![+Professional Support](https://www.totaljs.com/img/badge-support.svg)](https://www.totaljs.com/support/) [![+Chat with contributors](https://www.totaljs.com/img/badge-chat.svg)](https://messenger.totaljs.com)

## Properties

- [`MAIN.components`](#property-main-components-)
- [`MAIN.defaults`](#property-main-defaults-)
- [`MAIN.loaded`](#property-main-loaded-)
- [`MAIN.validators`](#property-main-validators-)
- [`MAIN.version`](#property-main-version-)
- [`MAIN.ua`](#property-main-ua-)
- [`MAIN.$components`](#property-main-components-)
- [`MAIN.$language`](#property-main-language-)
- [`MAIN.$localstorage`](#property-main-localstorage-)
- [`MAIN.$version`](#property-main-version-)

---

### Property: `MAIN.components`

`readonly` Gets all instances of components.

```javascript
MAIN.components;
// returns {Array Object}
```

### Property: `MAIN.defaults`

Gets default settings. With this property you can change behaviour of jComponent library.

```javascript
MAIN.defaults;
// returns {Object}

DEF;
// returns {Object}
// Is an alias for MAIN.defaults

DEF.ajaxerrors = false;
// {Boolean} AJAX() method won't create an exception if HTTP status code will be >= 400

DEF.ajaxcredentials = false;
// {Boolean} +v18 enables cookies for CORS (default: false)

DEF.baseurl = '';
// This property affects a relative URL address in AJAX requests
// {String} If it contains "string" then the string is combined with URL: "url = baseurl + url"
// {Function(url)} If it contains "function" then the function needs to return a new url
// +v13.0.5

DEF.makerurl = function(url) {
   return url;
};
// This delegate can affect URL before is request created.
// It must return updated URL!!!
// +v14.3.1

DEF.dateformat = null;
// {String} A default date format
// It's used when "new Date().format(null)" contains "null" value

DEF.decimalseparator = '.';
// Default decimal separator

DEF.delay = 300;
// {Number} A delay for real-time keypress binding

DEF.delaybinder = 200;
// {Number} A default delay for binding of value for non-released component
// +v13.0.0

DEF.delaywatcher = 555;
// {Number} A delay for component watcher (component.width(), component.heigth(), etc.)
// +v13.0.0

DEF.devices = { xs: { max: 768 }, sm: { min: 768, max: 992 }, md: { min: 992, max: 1200 }, lg: { min: 1200 }};
// {Object} Custom display sizes for Responsive UI

DEF.fallback = 'https://cdn.componentator.com/j-{0}.html';
// {String} A fallback URL for non-exist components
// Import "fallback" will be disabled if the "fallback" will be empty
// +v14.0.0

DEF.fallbackcache = '5 minutes';
// {String} Fallback cache, empty value disables caching
// Default: empty
// +v14.0.0

DEF.headers = { 'X-Requested-With': 'XMLHttpRequest' };
// {Object} Custom AJAX() headers
// IMPORATNT: +v13.0.0 X-Requested-With is removed for CORS request

DEF.jsoncompress = false;
// {Boolean} Compresses JSON values (removes empty strings and null values from JSON)

DEF.jsondate = true;
// {Boolean} Converts date values in JSON automatically to Date object

DEF.keypress = true;
// {Boolean} Can disable real-time keypress binding

DEF.localstorage = true;
// {Boolean} Can disable localstorage

DEF.pingdata = {};
// {Object} Can contain GET params for PING method

DEF.thousandsseparator = ' ';
// {String} Default thousands separator

DEF.version = '1';
// {String} A default version for all jComponents
// Default: empty
// +v14.0.0

DEF.currencies;
// {Object}
// This object uses "Number.currency" method
// +v17

// Example:
DEF.currencies.eur = DEF.currencies.EUR = function(val) {
	return val.format(2) + ' &euro;';
};

DEF.currency;
// {String}
// Can contain a default currency
// +v17

DEF.scrollbaranimate = true;
// {Boolean}
// Can disable CustomScrollbar animations (default: true)
// +v17

DEF.empty = '---';
// {String}
// Contains an empty string for "Thelpers.def" and "data-bind=...def" command.
// +v17

DEF.languagekey = 'language';
// {String}
// QueryString argument name for language
// +v18

DEF.language = 'sk';
// {String}
// Appends a value to each AJAX() request to "languagekey" param
// +v18

DEF.languagehtml = 'sk';
// {String}
// Appends a value to each AJAX() request for .html files only
// +v18

DEF.versionkey = 'version';
// {String}
// QueryString argument name for version
// +v18

DEF.version = '1';
// {String}
// Appends a value to each AJAX() request to "versionkey" param
// +v18

DEF.versionhtml = '1';
// {String}
// Appends a value to each AJAX() request for .html files only
// +v18

DEF.versioncomponents = '';
// {String}
// Explicity sets a new version to all components
// +v18

DEF.localstorage = 'jc';
// {String}
// Returns a localStorage key for jComponent. You can change this key by your needs.
// +v18

DEF.repeatfocus = true;
// {Boolean}
// Enables (default: true) focus condition in REPEAT() method
// +v18

DEF.secret(key);
// @key {String}
// Sets secret for data encryption (can be executed only onetime)
// +v18
```

### Property: `MAIN.validators`

Contains `RegExp` validators.

```javascript
MAIN.validators;
// returns {Object}

MAIN.validators.url;
// RegExp for URL addresses

MAIN.validators.email;
// RegExp for email addresses

MAIN.validators.phone;
// RegExp for phone numbers
```

### Property: `MAIN.loaded`

`readonly` Determines whether is jComponent loaded (cache + document is ready).

```javascript
MAIN.loaded;
// returns {Boolean}
```

### Property: `MAIN.version`

`readonly` Returns the current build version of jComponent.

```javascript
MAIN.version;
// returns {Number}

// For example:
// 16.027
```

### Property: `MAIN.ua`

`+v18` Returns parsed user-agent.

```javascript
MAIN.ua;
// returns {Object}

// Example:
// console.log(MAIN.ua);
// Output: { os: 'Mac', browser: 'Opera', device: 'desktop' }
```

### Property: `MAIN.$components`

`readonly` Gets all registered components, only types without instances.

```javascript
MAIN.$components;
// returns {Object}
```

### Property: `MAIN.$language`

Affects all `AJAX()` requests, it appends GET argument `?language=$language` automatically to the URL address. __IMPORTANT__ removed in v18, alternative `DEF.language` or `DEF.languagehtml`.

```javascript
MAIN.$language = '';
// returns {String}
```

### Property: `MAIN.$localstorage`

Returns a `localStorage` key for jComponent. You can change this key by your needs. __IMPORTANT__ removed in v18, alternative `DEF.localstorage`.

```javascript
MAIN.$localstorage = 'jc';
// returns {String}
```

### Property: `MAIN.$version`

Affects all `AJAX()` requests, it appends GET argument `?version=$version` automatically to the URL address. __IMPORTANT__ removed in v18, alternative `DEF.version` or `DEF.versionhtml`.

```javascript
MAIN.$version = '';
// returns {String}
```