@hxui/angular
Version:
This README includes the steps that are necessary to import the HxUi-angular into a project or to contribute with development.
421 lines (420 loc) • 24.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
var SelectizeConfig = /** @class */ (function () {
function SelectizeConfig() {
var _this = this;
/**
* The string to separate items by. When typing an item in a multi-selection control
* allowing creation, then the delimiter, the item is added. If you paste
* delimiter-separated items in such control, the items are added at once.
* The delimiter is also used in the getValue API call on a text <input> tag to
* separate the multiple values.
*
* Default: ','
*/
this.delimiter = ',';
/**
* Allows the user to create new items that aren't in the initial list of options.
* This setting can be any of the following: true, false (disabled), or a function
* to process input. The function can take one of two forms: synchronous
* (with signature function(input){} or asynchronous
* (with signature function(input, callback). In the synchronous case, the function
* should return an object for the options
* (eg, with defaults: return { 'value': value, 'text': text };).
* The asynchronous version should invoke the callback with the result in the same
* format as the object above (eg, callback( { 'value': value, 'text': text});)
*
* Default: false
*/
this.create = false;
/**
* If true, when user exits the field (clicks outside of input), a new option
* is created and selected (if create setting is enabled).
*
* Default: false
*/
this.createOnBlur = false;
/**
* Specifies a RegExp or a string containing a regular expression that the current
* search filter must match to be allowed to be created. May also be a predicate
* function that takes the filter text and returns whether it is allowed.
*
* Default: null
*/
this.createFilter = null;
/**
* Toggles match highlighting within the dropdown menu.
*
* Default: true
*/
this.highlight = true;
/**
* If false, items created by the user will not show up as available options once
* they are unselected.
*
* Default: false
*/
this.persist = true;
/**
* Show the dropdown immediately when the control receives focus.
*
* Default: true
*/
this.openOnFocus = true;
/**
* The max number of items to render at once in the dropdown list of options.
*
* Default: 1000
*/
this.maxOptions = 1000;
/**
* The max number of items the user can select. 1 makes the control mono-selection,
* null allows an unlimited number of items.
*
* Default: 1
*/
this.maxItems = 1;
/**
* If true, the items that are currently selected will not be shown in the dropdown
* list of available options.
*
* Default: false
*/
this.hideSelected = false;
/**
* If true, the dropdown will be closed after a selection is made.
*
* Default: false
*/
this.closeAfterSelect = false;
/**
* If true, Selectize will treat any options with a "" value like normal.
* This defaults to false to accomodate the common <select> practice of
* having the first empty option to act as a placeholder.
*
* Default: false
*/
this.allowEmptyOption = false;
/**
* The animation duration (in milliseconds) of the scroll animation
* triggered when going [up] and [down] in the options dropdown.
*
* Default: 60
*/
this.scrollDuration = 60;
/**
* The number of milliseconds to wait before requesting options from the
* server or null. If null, throttling is disabled. Useful when loading
* options dynamically while the user types a search / filter expression.
*
* Default: 300
*/
this.loadThrottle = 300;
/**
* The class name added to the wrapper element while awaiting the
* fulfillment of load requests.
*
* Default: 'loading'
*/
this.loadingClass = 'loading';
/**
* The placeholder of the control (displayed when nothing is selected / typed).
* Defaults to input element's placeholder, unless this one is specified.
*
* Default: null
*/
this.placeholder = null;
/**
* If true, the load function will be called upon control
* initialization (with an empty search).
*
* Default: false
*/
this.preload = false;
/**
* The element the dropdown menu is appended to. This should be 'body' or null.
* If null, the dropdown will be appended as a child of the Selectize control.
*
* Default: null
*/
this.dropdownParent = null;
/**
* If true, the "Add..." option is the default selection in the dropdown.
*
* Default: false
*/
this.addPrecedence = false;
/**
* If true, the tab key will choose the currently selected item.
*
* Default: false
*/
this.selectOnTab = false;
/**
* Enable or disable international character support.
*
* Default: true
*/
this.diacritics = true;
/**
* The property name of the label in the options array
*
* Default: 'label'
*/
this.labelField = 'label';
/**
* The property name of the value in the options array
*
* Default: 'value'
*/
this.valueField = 'value';
/**
* An array of property names to analyze when filtering options.
*/
this.searchField = ['label'];
/**
* Default override item render function
*/
this.render = {
item: function (item, escape) {
var /** @type {?} */ multi = "<span class=\"hx-badge is-medium\">\n <span class=\"hx-badge-content\">"
+ escape(item.label) +
"</span>\n </span>";
var /** @type {?} */ single = "<div class=\"item\">" + escape(item.label) + "</div>";
return (!_this.maxItems) ? multi : single;
}
};
/**
* Selectize plugins to use
*/
this.plugins = {
'remove_button': {
label: '',
title: 'Remove',
className: 'hx-delete',
append: true
}
};
}
SelectizeConfig.decorators = [
{ type: Injectable },
];
return SelectizeConfig;
}());
export { SelectizeConfig };
function SelectizeConfig_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
SelectizeConfig.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
SelectizeConfig.ctorParameters;
/**
* The string to separate items by. When typing an item in a multi-selection control
* allowing creation, then the delimiter, the item is added. If you paste
* delimiter-separated items in such control, the items are added at once.
* The delimiter is also used in the getValue API call on a text <input> tag to
* separate the multiple values.
*
* Default: ','
* @type {?}
*/
SelectizeConfig.prototype.delimiter;
/**
* Allows the user to create new items that aren't in the initial list of options.
* This setting can be any of the following: true, false (disabled), or a function
* to process input. The function can take one of two forms: synchronous
* (with signature function(input){} or asynchronous
* (with signature function(input, callback). In the synchronous case, the function
* should return an object for the options
* (eg, with defaults: return { 'value': value, 'text': text };).
* The asynchronous version should invoke the callback with the result in the same
* format as the object above (eg, callback( { 'value': value, 'text': text});)
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.create;
/**
* If true, when user exits the field (clicks outside of input), a new option
* is created and selected (if create setting is enabled).
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.createOnBlur;
/**
* Specifies a RegExp or a string containing a regular expression that the current
* search filter must match to be allowed to be created. May also be a predicate
* function that takes the filter text and returns whether it is allowed.
*
* Default: null
* @type {?}
*/
SelectizeConfig.prototype.createFilter;
/**
* Toggles match highlighting within the dropdown menu.
*
* Default: true
* @type {?}
*/
SelectizeConfig.prototype.highlight;
/**
* If false, items created by the user will not show up as available options once
* they are unselected.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.persist;
/**
* Show the dropdown immediately when the control receives focus.
*
* Default: true
* @type {?}
*/
SelectizeConfig.prototype.openOnFocus;
/**
* The max number of items to render at once in the dropdown list of options.
*
* Default: 1000
* @type {?}
*/
SelectizeConfig.prototype.maxOptions;
/**
* The max number of items the user can select. 1 makes the control mono-selection,
* null allows an unlimited number of items.
*
* Default: 1
* @type {?}
*/
SelectizeConfig.prototype.maxItems;
/**
* If true, the items that are currently selected will not be shown in the dropdown
* list of available options.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.hideSelected;
/**
* If true, the dropdown will be closed after a selection is made.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.closeAfterSelect;
/**
* If true, Selectize will treat any options with a "" value like normal.
* This defaults to false to accomodate the common <select> practice of
* having the first empty option to act as a placeholder.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.allowEmptyOption;
/**
* The animation duration (in milliseconds) of the scroll animation
* triggered when going [up] and [down] in the options dropdown.
*
* Default: 60
* @type {?}
*/
SelectizeConfig.prototype.scrollDuration;
/**
* The number of milliseconds to wait before requesting options from the
* server or null. If null, throttling is disabled. Useful when loading
* options dynamically while the user types a search / filter expression.
*
* Default: 300
* @type {?}
*/
SelectizeConfig.prototype.loadThrottle;
/**
* The class name added to the wrapper element while awaiting the
* fulfillment of load requests.
*
* Default: 'loading'
* @type {?}
*/
SelectizeConfig.prototype.loadingClass;
/**
* The placeholder of the control (displayed when nothing is selected / typed).
* Defaults to input element's placeholder, unless this one is specified.
*
* Default: null
* @type {?}
*/
SelectizeConfig.prototype.placeholder;
/**
* If true, the load function will be called upon control
* initialization (with an empty search).
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.preload;
/**
* The element the dropdown menu is appended to. This should be 'body' or null.
* If null, the dropdown will be appended as a child of the Selectize control.
*
* Default: null
* @type {?}
*/
SelectizeConfig.prototype.dropdownParent;
/**
* If true, the "Add..." option is the default selection in the dropdown.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.addPrecedence;
/**
* If true, the tab key will choose the currently selected item.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.selectOnTab;
/**
* Enable or disable international character support.
*
* Default: true
* @type {?}
*/
SelectizeConfig.prototype.diacritics;
/**
* The property name of the label in the options array
*
* Default: 'label'
* @type {?}
*/
SelectizeConfig.prototype.labelField;
/**
* The property name of the value in the options array
*
* Default: 'value'
* @type {?}
*/
SelectizeConfig.prototype.valueField;
/**
* An array of property names to analyze when filtering options.
* @type {?}
*/
SelectizeConfig.prototype.searchField;
/**
* Default override item render function
* @type {?}
*/
SelectizeConfig.prototype.render;
/**
* Selectize plugins to use
* @type {?}
*/
SelectizeConfig.prototype.plugins;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aXplLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VsZWN0aXplL3NlbGVjdGl6ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7eUJBZTdCLEdBQUc7Ozs7Ozs7Ozs7Ozs7O3NCQWVjLEtBQUs7Ozs7Ozs7NEJBUW5CLEtBQUs7Ozs7Ozs7OzRCQVNHLElBQUk7Ozs7Ozt5QkFPZixJQUFJOzs7Ozs7O3VCQVFOLElBQUk7Ozs7OzsyQkFPQSxJQUFJOzs7Ozs7MEJBT0wsSUFBSTs7Ozs7Ozt3QkFRTixDQUFDOzs7Ozs7OzRCQVFHLEtBQUs7Ozs7OztnQ0FPRCxLQUFLOzs7Ozs7OztnQ0FTTCxLQUFLOzs7Ozs7OzhCQVFQLEVBQUU7Ozs7Ozs7OzRCQVNKLEdBQUc7Ozs7Ozs7NEJBUUssU0FBUzs7Ozs7OzsyQkFRRixJQUFJOzs7Ozs7O3VCQVF4QixLQUFLOzs7Ozs7OzhCQVFVLElBQUk7Ozs7Ozs2QkFPYixLQUFLOzs7Ozs7MkJBT0MsS0FBSzs7Ozs7OzBCQU9OLElBQUk7Ozs7OzswQkFPTCxPQUFPOzs7Ozs7MEJBT1AsT0FBTzs7OzsyQkFLTixDQUFDLE9BQU8sQ0FBQzs7OztzQkFLZDtZQUNkLElBQUksRUFBRSxVQUFDLElBQW9CLEVBQUUsTUFBZ0I7Z0JBQzNDLHFCQUFNLEtBQUssR0FBRyx3RkFDNEI7c0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QixnQ0FDTSxDQUFDO2dCQUNqQixxQkFBTSxNQUFNLEdBQUcsc0JBQW9CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ3BFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUMxQztTQUNGOzs7O3VCQU1pQjtZQUNoQixlQUFlLEVBQUU7Z0JBQ2YsS0FBSyxFQUFPLEVBQUU7Z0JBQ2QsS0FBSyxFQUFPLFFBQVE7Z0JBQ3BCLFNBQVMsRUFBRyxXQUFXO2dCQUN2QixNQUFNLEVBQU0sSUFBSTthQUNqQjtTQUNGOzs7Z0JBOU5GLFVBQVU7OzBCQUhYOztTQUlhLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SVNlbGVjdGl6ZUl0ZW19IGZyb20gJy4vc2VsZWN0aXplLWl0ZW0uaW50ZXJmYWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNlbGVjdGl6ZUNvbmZpZyAge1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIHN0cmluZyB0byBzZXBhcmF0ZSBpdGVtcyBieS4gV2hlbiB0eXBpbmcgYW4gaXRlbSBpbiBhIG11bHRpLXNlbGVjdGlvbiBjb250cm9sXHJcbiAgICogIGFsbG93aW5nIGNyZWF0aW9uLCB0aGVuIHRoZSBkZWxpbWl0ZXIsIHRoZSBpdGVtIGlzIGFkZGVkLiBJZiB5b3UgcGFzdGVcclxuICAgKiAgZGVsaW1pdGVyLXNlcGFyYXRlZCBpdGVtcyBpbiBzdWNoIGNvbnRyb2wsIHRoZSBpdGVtcyBhcmUgYWRkZWQgYXQgb25jZS5cclxuICAgKiAgVGhlIGRlbGltaXRlciBpcyBhbHNvIHVzZWQgaW4gdGhlIGdldFZhbHVlIEFQSSBjYWxsIG9uIGEgdGV4dCA8aW5wdXQ+IHRhZyB0b1xyXG4gICAqICBzZXBhcmF0ZSB0aGUgbXVsdGlwbGUgdmFsdWVzLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6ICcsJ1xyXG4gICAqL1xyXG4gIGRlbGltaXRlciA9ICcsJztcclxuXHJcbiAgLyoqXHJcbiAgICogIEFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgbmV3IGl0ZW1zIHRoYXQgYXJlbid0IGluIHRoZSBpbml0aWFsIGxpc3Qgb2Ygb3B0aW9ucy5cclxuICAgKiAgVGhpcyBzZXR0aW5nIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzogdHJ1ZSwgZmFsc2UgKGRpc2FibGVkKSwgb3IgYSBmdW5jdGlvblxyXG4gICAqICB0byBwcm9jZXNzIGlucHV0LiBUaGUgZnVuY3Rpb24gY2FuIHRha2Ugb25lIG9mIHR3byBmb3Jtczogc3luY2hyb25vdXNcclxuICAgKiAgKHdpdGggc2lnbmF0dXJlIGZ1bmN0aW9uKGlucHV0KXt9IG9yIGFzeW5jaHJvbm91c1xyXG4gICAqICAod2l0aCBzaWduYXR1cmUgZnVuY3Rpb24oaW5wdXQsIGNhbGxiYWNrKS4gSW4gdGhlIHN5bmNocm9ub3VzIGNhc2UsIHRoZSBmdW5jdGlvblxyXG4gICAqICBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBmb3IgdGhlIG9wdGlvbnNcclxuICAgKiAgKGVnLCB3aXRoIGRlZmF1bHRzOiByZXR1cm4geyAndmFsdWUnOiB2YWx1ZSwgJ3RleHQnOiB0ZXh0IH07KS5cclxuICAgKiAgVGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIHNob3VsZCBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHJlc3VsdCBpbiB0aGUgc2FtZVxyXG4gICAqICBmb3JtYXQgYXMgdGhlIG9iamVjdCBhYm92ZSAoZWcsIGNhbGxiYWNrKCB7ICd2YWx1ZSc6IHZhbHVlLCAndGV4dCc6IHRleHR9KTspXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBjcmVhdGU6IGJvb2xlYW4gfCBGdW5jdGlvbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgSWYgdHJ1ZSwgd2hlbiB1c2VyIGV4aXRzIHRoZSBmaWVsZCAoY2xpY2tzIG91dHNpZGUgb2YgaW5wdXQpLCBhIG5ldyBvcHRpb25cclxuICAgKiAgaXMgY3JlYXRlZCBhbmQgc2VsZWN0ZWQgKGlmIGNyZWF0ZSBzZXR0aW5nIGlzIGVuYWJsZWQpLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IGZhbHNlXHJcbiAgICovXHJcbiAgY3JlYXRlT25CbHVyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqICBTcGVjaWZpZXMgYSBSZWdFeHAgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSBjdXJyZW50XHJcbiAgICogIHNlYXJjaCBmaWx0ZXIgbXVzdCBtYXRjaCB0byBiZSBhbGxvd2VkIHRvIGJlIGNyZWF0ZWQuIE1heSBhbHNvIGJlIGEgcHJlZGljYXRlXHJcbiAgICogIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGZpbHRlciB0ZXh0IGFuZCByZXR1cm5zIHdoZXRoZXIgaXQgaXMgYWxsb3dlZC5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBudWxsXHJcbiAgICovXHJcbiAgY3JlYXRlRmlsdGVyOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiAgVG9nZ2xlcyBtYXRjaCBoaWdobGlnaHRpbmcgd2l0aGluIHRoZSBkcm9wZG93biBtZW51LlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IHRydWVcclxuICAgKi9cclxuICBoaWdobGlnaHQgPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiAgSWYgZmFsc2UsIGl0ZW1zIGNyZWF0ZWQgYnkgdGhlIHVzZXIgd2lsbCBub3Qgc2hvdyB1cCBhcyBhdmFpbGFibGUgb3B0aW9ucyBvbmNlXHJcbiAgICogIHRoZXkgYXJlIHVuc2VsZWN0ZWQuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBwZXJzaXN0ID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIFNob3cgdGhlIGRyb3Bkb3duIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNvbnRyb2wgcmVjZWl2ZXMgZm9jdXMuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogdHJ1ZVxyXG4gICAqL1xyXG4gIG9wZW5PbkZvY3VzID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIFRoZSBtYXggbnVtYmVyIG9mIGl0ZW1zIHRvIHJlbmRlciBhdCBvbmNlIGluIHRoZSBkcm9wZG93biBsaXN0IG9mIG9wdGlvbnMuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogMTAwMFxyXG4gICAqL1xyXG4gIG1heE9wdGlvbnMgPSAxMDAwO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIG1heCBudW1iZXIgb2YgaXRlbXMgdGhlIHVzZXIgY2FuIHNlbGVjdC4gMSBtYWtlcyB0aGUgY29udHJvbCBtb25vLXNlbGVjdGlvbixcclxuICAgKiAgbnVsbCBhbGxvd3MgYW4gdW5saW1pdGVkIG51bWJlciBvZiBpdGVtcy5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiAxXHJcbiAgICovXHJcbiAgbWF4SXRlbXMgPSAxO1xyXG5cclxuICAvKipcclxuICAgKiAgSWYgdHJ1ZSwgdGhlIGl0ZW1zIHRoYXQgYXJlIGN1cnJlbnRseSBzZWxlY3RlZCB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgZHJvcGRvd25cclxuICAgKiAgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucy5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBmYWxzZVxyXG4gICAqL1xyXG4gIGhpZGVTZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgSWYgdHJ1ZSwgdGhlIGRyb3Bkb3duIHdpbGwgYmUgY2xvc2VkIGFmdGVyIGEgc2VsZWN0aW9uIGlzIG1hZGUuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBjbG9zZUFmdGVyU2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqICBJZiB0cnVlLCBTZWxlY3RpemUgd2lsbCB0cmVhdCBhbnkgb3B0aW9ucyB3aXRoIGEgXCJcIiB2YWx1ZSBsaWtlIG5vcm1hbC5cclxuICAgKiAgVGhpcyBkZWZhdWx0cyB0byBmYWxzZSB0byBhY2NvbW9kYXRlIHRoZSBjb21tb24gPHNlbGVjdD4gcHJhY3RpY2Ugb2ZcclxuICAgKiAgaGF2aW5nIHRoZSBmaXJzdCBlbXB0eSBvcHRpb24gdG8gYWN0IGFzIGEgcGxhY2Vob2xkZXIuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBhbGxvd0VtcHR5T3B0aW9uID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqICBUaGUgYW5pbWF0aW9uIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIG9mIHRoZSBzY3JvbGwgYW5pbWF0aW9uXHJcbiAgICogIHRyaWdnZXJlZCB3aGVuIGdvaW5nIFt1cF0gYW5kIFtkb3duXSBpbiB0aGUgb3B0aW9ucyBkcm9wZG93bi5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiA2MFxyXG4gICAqL1xyXG4gIHNjcm9sbER1cmF0aW9uID0gNjA7XHJcblxyXG4gIC8qKlxyXG4gICAqICBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXF1ZXN0aW5nIG9wdGlvbnMgZnJvbSB0aGVcclxuICAgKiAgc2VydmVyIG9yIG51bGwuIElmIG51bGwsIHRocm90dGxpbmcgaXMgZGlzYWJsZWQuIFVzZWZ1bCB3aGVuIGxvYWRpbmdcclxuICAgKiAgb3B0aW9ucyBkeW5hbWljYWxseSB3aGlsZSB0aGUgdXNlciB0eXBlcyBhIHNlYXJjaCAvIGZpbHRlciBleHByZXNzaW9uLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IDMwMFxyXG4gICAqL1xyXG4gIGxvYWRUaHJvdHRsZSA9IDMwMDtcclxuXHJcbiAgLyoqXHJcbiAgICogIFRoZSBjbGFzcyBuYW1lIGFkZGVkIHRvIHRoZSB3cmFwcGVyIGVsZW1lbnQgd2hpbGUgYXdhaXRpbmcgdGhlXHJcbiAgICogIGZ1bGZpbGxtZW50IG9mIGxvYWQgcmVxdWVzdHMuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogJ2xvYWRpbmcnXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2FkaW5nQ2xhc3MgPSAnbG9hZGluZyc7XHJcblxyXG4gIC8qKlxyXG4gICAqICBUaGUgcGxhY2Vob2xkZXIgb2YgdGhlIGNvbnRyb2wgKGRpc3BsYXllZCB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQgLyB0eXBlZCkuXHJcbiAgICogIERlZmF1bHRzIHRvIGlucHV0IGVsZW1lbnQncyBwbGFjZWhvbGRlciwgdW5sZXNzIHRoaXMgb25lIGlzIHNwZWNpZmllZC5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBudWxsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogIElmIHRydWUsIHRoZSBsb2FkIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHVwb24gY29udHJvbFxyXG4gICAqICBpbml0aWFsaXphdGlvbiAod2l0aCBhbiBlbXB0eSBzZWFyY2gpLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IGZhbHNlXHJcbiAgICovXHJcbiAgcHJlbG9hZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIGVsZW1lbnQgdGhlIGRyb3Bkb3duIG1lbnUgaXMgYXBwZW5kZWQgdG8uIFRoaXMgc2hvdWxkIGJlICdib2R5JyBvciBudWxsLlxyXG4gICAqICBJZiBudWxsLCB0aGUgZHJvcGRvd24gd2lsbCBiZSBhcHBlbmRlZCBhcyBhIGNoaWxkIG9mIHRoZSBTZWxlY3RpemUgY29udHJvbC5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBudWxsXHJcbiAgICovXHJcbiAgZHJvcGRvd25QYXJlbnQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqICBJZiB0cnVlLCB0aGUgXCJBZGQuLi5cIiBvcHRpb24gaXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIGluIHRoZSBkcm9wZG93bi5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBmYWxzZVxyXG4gICAqL1xyXG4gIGFkZFByZWNlZGVuY2UgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIElmIHRydWUsIHRoZSB0YWIga2V5IHdpbGwgY2hvb3NlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBmYWxzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2VsZWN0T25UYWIgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIEVuYWJsZSBvciBkaXNhYmxlIGludGVybmF0aW9uYWwgY2hhcmFjdGVyIHN1cHBvcnQuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogdHJ1ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGlhY3JpdGljcyA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqICBUaGUgcHJvcGVydHkgbmFtZSBvZiB0aGUgbGFiZWwgaW4gdGhlIG9wdGlvbnMgYXJyYXlcclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiAnbGFiZWwnXHJcbiAgICovXHJcbiAgcHVibGljIGxhYmVsRmllbGQgPSAnbGFiZWwnO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIHZhbHVlIGluIHRoZSBvcHRpb25zIGFycmF5XHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogJ3ZhbHVlJ1xyXG4gICAqL1xyXG4gIHB1YmxpYyB2YWx1ZUZpZWxkID0gJ3ZhbHVlJztcclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdG8gYW5hbHl6ZSB3aGVuIGZpbHRlcmluZyBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWFyY2hGaWVsZCA9IFsnbGFiZWwnXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmYXVsdCBvdmVycmlkZSBpdGVtIHJlbmRlciBmdW5jdGlvblxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW5kZXIgPSB7XHJcbiAgICBpdGVtOiAoaXRlbTogSVNlbGVjdGl6ZUl0ZW0sIGVzY2FwZTogRnVuY3Rpb24pOiBzdHJpbmcgPT4ge1xyXG4gICAgICBjb25zdCBtdWx0aSA9IGA8c3BhbiBjbGFzcz1cImh4LWJhZGdlIGlzLW1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoeC1iYWRnZS1jb250ZW50XCI+YFxyXG4gICAgICAgICAgICAgICAgICAgICsgZXNjYXBlKGl0ZW0ubGFiZWwpICtcclxuICAgICAgICAgICAgICAgIGA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPmA7XHJcbiAgICAgIGNvbnN0IHNpbmdsZSA9IGA8ZGl2IGNsYXNzPVwiaXRlbVwiPmAgKyBlc2NhcGUoaXRlbS5sYWJlbCkgKyBgPC9kaXY+YDtcclxuICAgICAgcmV0dXJuICghdGhpcy5tYXhJdGVtcykgPyBtdWx0aSA6IHNpbmdsZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogIFNlbGVjdGl6ZSBwbHVnaW5zIHRvIHVzZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGx1Z2lucyA9IHtcclxuICAgICdyZW1vdmVfYnV0dG9uJzoge1xyXG4gICAgICBsYWJlbCAgICAgOiAnJyxcclxuICAgICAgdGl0bGUgICAgIDogJ1JlbW92ZScsXHJcbiAgICAgIGNsYXNzTmFtZSA6ICdoeC1kZWxldGUnLFxyXG4gICAgICBhcHBlbmQgICAgOiB0cnVlXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbn1cclxuIl19