simplr-forms-dom
Version:
DOM components for simplr-forms.
294 lines (272 loc) • 31.4 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("simplr-forms"), require("typed-immutable-record"));
else if(typeof define === 'function' && define.amd)
define(["simplr-forms", "typed-immutable-record"], factory);
else {
var a = typeof exports === 'object' ? factory(require("simplr-forms"), require("typed-immutable-record")) : factory(root["simplr-forms"], root["typed-immutable-record"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_27__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 24);
/******/ })
/************************************************************************/
/******/ ({
/***/ 2:
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_2__;
/***/ }),
/***/ 24:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(__webpack_require__(4));
__export(__webpack_require__(5));
/***/ }),
/***/ 27:
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_27__;
/***/ }),
/***/ 4:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var simplr_forms_1 = __webpack_require__(2);
var BaseDomField = (function (_super) {
__extends(BaseDomField, _super);
function BaseDomField() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.OnFocus = function (event) {
var props = _this.props;
if (props.onFocus != null) {
props.onFocus(event);
}
_this.Focus();
};
_this.OnBlur = function (event) {
var props = _this.props;
if (props.onBlur != null) {
props.onBlur(event);
}
_this.Blur();
};
_this.SetElementRef = function (element) {
_this.Element = element;
};
return _this;
}
Object.defineProperty(BaseDomField.prototype, "FieldTemplate", {
get: function () {
var formProps = this.FormStore.GetState().Form.Props;
if (this.props.template != null) {
return this.props.template;
}
if (formProps.template) {
return formProps.template;
}
},
enumerable: true,
configurable: true
});
BaseDomField.prototype.GetHTMLProps = function (props) {
var defaultValue = props.defaultValue, destroyOnUnmount = props.destroyOnUnmount, disabled = props.disabled, formatValue = props.formatValue, initialValue = props.initialValue, name = props.name, normalizeValue = props.normalizeValue, onBlur = props.onBlur, onFocus = props.onFocus, parseValue = props.parseValue, template = props.template, validationType = props.validationType, value = props.value, children = props.children, restProps = __rest(props, ["defaultValue", "destroyOnUnmount", "disabled", "formatValue", "initialValue", "name", "normalizeValue", "onBlur", "onFocus", "parseValue", "template", "validationType", "value", "children"]);
return restProps;
};
BaseDomField.prototype.render = function () {
if (this.FieldTemplate == null) {
return this.renderField();
}
return this.FieldTemplate(this.renderField.bind(this), {
name: this.Name,
fieldGroupId: this.FieldsGroupId,
id: this.FieldId
}, this.FormStore, {
props: this.props,
state: this.FieldState
});
};
return BaseDomField;
}(simplr_forms_1.BaseField));
exports.BaseDomField = BaseDomField;
/***/ }),
/***/ 5:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var typed_immutable_record_1 = __webpack_require__(27);
var simplr_forms_1 = __webpack_require__(2);
var BaseFormButton = (function (_super) {
__extends(BaseFormButton, _super);
function BaseFormButton() {
return _super !== null && _super.apply(this, arguments) || this;
}
BaseFormButton.prototype.OnStoreUpdated = function () {
var formStore = this.FormStore.GetState();
var newState = {
HasError: formStore.HasError,
Validating: formStore.Validating,
Submitting: formStore.Submitting,
Pristine: formStore.Pristine,
Disabled: formStore.Form.Disabled
};
var newStateRecord = typed_immutable_record_1.recordify(newState);
// Type 'Readonly<TState>' cannot be converted to type 'Iterable<string, any>'.
var stateIterable = this.state;
if (!newStateRecord.equals(stateIterable)) {
this.setState(function (prevState) {
// newStateRecord becomes an empty object after setState
// This happens because of an underlying Immutable.Record
// not enumerating properties in for..in
return newState;
});
}
};
Object.defineProperty(BaseFormButton.prototype, "Disabled", {
get: function () {
if (this.state == null) {
return false;
}
if (this.state.Disabled === true) {
return true;
}
var props = this.props;
if (props.disabled != null) {
return props.disabled;
}
if (props.disableOnError === true &&
this.state.HasError) {
return true;
}
if (props.disableOnBusy === true &&
this.Busy) {
return true;
}
if (props.disableOnPristine === true &&
this.state.Pristine === true) {
return true;
}
return false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseFormButton.prototype, "Busy", {
get: function () {
return this.props.busy === true ||
this.state != null &&
(this.state.Validating || this.state.Submitting);
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseFormButton.prototype, "InlineStyles", {
get: function () {
var inlineStyles = {};
var props = this.props;
if (props.style != null) {
inlineStyles = props.style;
}
if (this.Busy && !props.disabled) {
inlineStyles.cursor = "wait";
}
return inlineStyles;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseFormButton.prototype, "ClassName", {
get: function () {
var className = "";
if (this.props.className != null) {
className += this.props.className + " ";
}
if (this.Busy) {
className += this.props.busyClassName;
}
return className.length > 0 ? className : undefined;
},
enumerable: true,
configurable: true
});
return BaseFormButton;
}(simplr_forms_1.BaseContainer));
BaseFormButton.defaultProps = {
disableOnBusy: true,
disableOnError: false,
disableOnPristine: false,
disabled: undefined,
busyClassName: "busy"
};
exports.BaseFormButton = BaseFormButton;
/***/ })
/******/ });
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uPzVjYTYiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDMzNzBlNjg4MmEyMjdmMTBlM2Y2PzUxYmUiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic2ltcGxyLWZvcm1zXCI/ZDc4OCIsIndlYnBhY2s6Ly8vLi9zcmMvYWJzdHJhY3Rpb25zL2luZGV4LnRzIiwid2VicGFjazovLy9leHRlcm5hbCBcInR5cGVkLWltbXV0YWJsZS1yZWNvcmRcIiIsIndlYnBhY2s6Ly8vLi9zcmMvYWJzdHJhY3Rpb25zL2Jhc2UtZG9tLWZpZWxkLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYWJzdHJhY3Rpb25zL2Jhc2UtZm9ybS1idXR0b24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7O0FDaEVBLCtDOzs7Ozs7Ozs7Ozs7O0FDQUEsaUNBQWlDO0FBQ2pDLGlDQUFtQzs7Ozs7Ozs7QUNEbkMsZ0Q7Ozs7Ozs7Ozs7QUNBQSw0Q0FBeUQ7QUFlekQ7SUFDWSxnQ0FBeUI7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akMsQ0FBQztZQUVELE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDeEIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBYyxxQ0FBUzthQUF2QjtZQUNJLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNuQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixTQUFTLElBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLE1BQUcsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ1osU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzFDLENBQUM7WUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN4RCxDQUFDOzs7T0FBQTtJQUdMLHFCQUFDO0FBQUQsQ0FBQyxDQWhHVyw0QkFBYTtBQUNQLDJCQUFZLEdBQXdCO0lBQzlDLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsYUFBYSxFQUFFLE1BQU07Q0FDeEIsQ0FBQztBQVJnQix3Q0FBYyIsImZpbGUiOiIuL2Rpc3QvYWJzdHJhY3Rpb25zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwic2ltcGxyLWZvcm1zXCIpLCByZXF1aXJlKFwidHlwZWQtaW1tdXRhYmxlLXJlY29yZFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJzaW1wbHItZm9ybXNcIiwgXCJ0eXBlZC1pbW11dGFibGUtcmVjb3JkXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBmYWN0b3J5KHJlcXVpcmUoXCJzaW1wbHItZm9ybXNcIiksIHJlcXVpcmUoXCJ0eXBlZC1pbW11dGFibGUtcmVjb3JkXCIpKSA6IGZhY3Rvcnkocm9vdFtcInNpbXBsci1mb3Jtc1wiXSwgcm9vdFtcInR5cGVkLWltbXV0YWJsZS1yZWNvcmRcIl0pO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMjdfXykge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAzMzcwZTY4ODJhMjI3ZjEwZTNmNiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJzaW1wbHItZm9ybXNcIlxuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImV4cG9ydCAqIGZyb20gXCIuL2Jhc2UtZG9tLWZpZWxkXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2Jhc2UtZm9ybS1idXR0b25cIjtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIEQ6L1Byb2plY3RzL1NpbXBsckpTL3NpbXBsci1mb3Jtcy9jb21tb24vdGVtcC9+L3NvdXJjZS1tYXAtbG9hZGVyIS4vc3JjL2Fic3RyYWN0aW9ucy9pbmRleC50cyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yN19fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwidHlwZWQtaW1tdXRhYmxlLXJlY29yZFwiXG4vLyBtb2R1bGUgaWQgPSAyN1xuLy8gbW9kdWxlIGNodW5rcyA9IDEiLCJpbXBvcnQgeyBCYXNlRmllbGQsIEJhc2VGaWVsZFN0YXRlIH0gZnJvbSBcInNpbXBsci1mb3Jtc1wiO1xyXG5pbXBvcnQgeyBGaWVsZFByb3BzIH0gZnJvbSBcInNpbXBsci1mb3Jtcy9jb250cmFjdHNcIjtcclxuaW1wb3J0IHtcclxuICAgIERvbUZpZWxkUHJvcHMsXHJcbiAgICBEb21GaWVsZFRlbXBsYXRlQ2FsbGJhY2ssXHJcbiAgICBEb21Db21wb25lbnREYXRhLFxyXG4gICAgRG9tRmllbGREZXRhaWxzXHJcbn0gZnJvbSBcIi4uL2NvbnRyYWN0cy9maWVsZFwiO1xyXG5pbXBvcnQgeyBGb3JtUHJvcHMgfSBmcm9tIFwiLi4vY29udHJhY3RzL2Zvcm1cIjtcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEb21GaWVsZFN0YXRlIGV4dGVuZHMgQmFzZUZpZWxkU3RhdGUge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEb21GaWVsZDxUUHJvcHMgZXh0ZW5kcyBEb21GaWVsZFByb3BzLCBUU3RhdGUgZXh0ZW5kcyBCYXNlRG9tRmllbGRTdGF0ZSwgVFVuZGVybHlpbmdFbGVtZW50ID0gYW55PlxyXG4gICAgZXh0ZW5kcyBCYXNlRmllbGQ8VFByb3BzLCBUU3RhdGU+IHtcclxuICAgIHB1YmxpYyBFbGVtZW50OiBUVW5kZXJseWluZ0VsZW1lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIE9uRm9jdXMgPSAoZXZlbnQ6IFJlYWN0LkZvY3VzRXZlbnQ8YW55Pik6IHZvaWQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcyBhcyBEb21GaWVsZFByb3BzO1xyXG4gICAgICAgIGlmIChwcm9wcy5vbkZvY3VzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcHJvcHMub25Gb2N1cyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuRm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgT25CbHVyID0gKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PGFueT4pOiB2b2lkID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHMgYXMgRG9tRmllbGRQcm9wcztcclxuICAgICAgICBpZiAocHJvcHMub25CbHVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcHJvcHMub25CbHVyKGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuQmx1cigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgRmllbGRUZW1wbGF0ZSgpOiBEb21GaWVsZFRlbXBsYXRlQ2FsbGJhY2sgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Qcm9wcyA9IHRoaXMuRm9ybVN0b3JlLkdldFN0YXRlKCkuRm9ybS5Qcm9wcyBhcyBGb3JtUHJvcHM7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudGVtcGxhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50ZW1wbGF0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtUHJvcHMudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1Qcm9wcy50ZW1wbGF0ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIEdldEhUTUxQcm9wcyhwcm9wczogRG9tRmllbGRQcm9wcyk6IHt9IHtcclxuICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcclxuICAgICAgICAgICAgZGVzdHJveU9uVW5tb3VudCxcclxuICAgICAgICAgICAgZGlzYWJsZWQsXHJcbiAgICAgICAgICAgIGZvcm1hdFZhbHVlLFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWUsXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZVZhbHVlLFxyXG4gICAgICAgICAgICBvbkJsdXIsXHJcbiAgICAgICAgICAgIG9uRm9jdXMsXHJcbiAgICAgICAgICAgIHBhcnNlVmFsdWUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlLFxyXG4gICAgICAgICAgICB2YWxpZGF0aW9uVHlwZSxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLFxyXG4gICAgICAgICAgICAuLi5yZXN0UHJvcHNcclxuICAgICAgICB9ID0gcHJvcHM7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN0UHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIFNldEVsZW1lbnRSZWYgPSAoZWxlbWVudDogVFVuZGVybHlpbmdFbGVtZW50IHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XHJcbiAgICAgICAgdGhpcy5FbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyRmllbGQoKTogSlNYLkVsZW1lbnQgfCBudWxsO1xyXG5cclxuICAgIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5GaWVsZFRlbXBsYXRlID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRmllbGQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuRmllbGRUZW1wbGF0ZShcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGaWVsZC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLk5hbWUsXHJcbiAgICAgICAgICAgICAgICBmaWVsZEdyb3VwSWQ6IHRoaXMuRmllbGRzR3JvdXBJZCxcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLkZpZWxkSWRcclxuICAgICAgICAgICAgfSBhcyBEb21GaWVsZERldGFpbHMsXHJcbiAgICAgICAgICAgIHRoaXMuRm9ybVN0b3JlLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLkZpZWxkU3RhdGVcclxuICAgICAgICAgICAgfSBhcyBEb21Db21wb25lbnREYXRhKTtcclxuICAgIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gRDovUHJvamVjdHMvU2ltcGxySlMvc2ltcGxyLWZvcm1zL2NvbW1vbi90ZW1wL34vc291cmNlLW1hcC1sb2FkZXIhLi9zcmMvYWJzdHJhY3Rpb25zL2Jhc2UtZG9tLWZpZWxkLnRzeCIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgcmVjb3JkaWZ5LCBUeXBlZFJlY29yZCB9IGZyb20gXCJ0eXBlZC1pbW11dGFibGUtcmVjb3JkXCI7XG5pbXBvcnQgeyBJdGVyYWJsZSB9IGZyb20gXCJpbW11dGFibGVcIjtcblxuaW1wb3J0IHsgQmFzZUNvbnRhaW5lciwgQmFzZUNvbnRhaW5lclByb3BzIH0gZnJvbSBcInNpbXBsci1mb3Jtc1wiO1xuaW1wb3J0IHsgRm9ybUVycm9yIH0gZnJvbSBcInNpbXBsci1mb3Jtcy9jb250cmFjdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRm9ybUJ1dHRvblByb3BzIGV4dGVuZHMgQmFzZUNvbnRhaW5lclByb3BzLCBSZWFjdC5IVE1MUHJvcHM8SFRNTEJ1dHRvbkVsZW1lbnQ+IHtcbiAgICBkaXNhYmxlT25FcnJvcj86IGJvb2xlYW47XG4gICAgZGlzYWJsZU9uQnVzeT86IGJvb2xlYW47XG4gICAgZGlzYWJsZU9uUHJpc3RpbmU/OiBib29sZWFuO1xuICAgIGJ1c3k/OiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICBidXN5Q2xhc3NOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VGb3JtQnV0dG9uU3RhdGUge1xuICAgIEhhc0Vycm9yOiBib29sZWFuO1xuICAgIFZhbGlkYXRpbmc6IGJvb2xlYW47XG4gICAgU3VibWl0dGluZzogYm9vbGVhbjtcbiAgICBQcmlzdGluZTogYm9vbGVhbjtcbiAgICBEaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRm9ybUJ1dHRvblN0YXRlUmVjb3JkIGV4dGVuZHMgVHlwZWRSZWNvcmQ8QmFzZUZvcm1CdXR0b25TdGF0ZVJlY29yZD4sIEJhc2VGb3JtQnV0dG9uU3RhdGUgeyB9XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRm9ybUJ1dHRvbjxUUHJvcHMgZXh0ZW5kcyBCYXNlRm9ybUJ1dHRvblByb3BzLCBUU3RhdGUgZXh0ZW5kcyBCYXNlRm9ybUJ1dHRvblN0YXRlUmVjb3JkPlxuICAgIGV4dGVuZHMgQmFzZUNvbnRhaW5lcjxUUHJvcHMsIFRTdGF0ZT4ge1xuICAgIHB1YmxpYyBzdGF0aWMgZGVmYXVsdFByb3BzOiBCYXNlRm9ybUJ1dHRvblByb3BzID0ge1xuICAgICAgICBkaXNhYmxlT25CdXN5OiB0cnVlLFxuICAgICAgICBkaXNhYmxlT25FcnJvcjogZmFsc2UsXG4gICAgICAgIGRpc2FibGVPblByaXN0aW5lOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgYnVzeUNsYXNzTmFtZTogXCJidXN5XCJcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIE9uU3RvcmVVcGRhdGVkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtU3RvcmUgPSB0aGlzLkZvcm1TdG9yZS5HZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCBuZXdTdGF0ZTogQmFzZUZvcm1CdXR0b25TdGF0ZSA9IHtcbiAgICAgICAgICAgIEhhc0Vycm9yOiBmb3JtU3RvcmUuSGFzRXJyb3IsXG4gICAgICAgICAgICBWYWxpZGF0aW5nOiBmb3JtU3RvcmUuVmFsaWRhdGluZyxcbiAgICAgICAgICAgIFN1Ym1pdHRpbmc6IGZvcm1TdG9yZS5TdWJtaXR0aW5nLFxuICAgICAgICAgICAgUHJpc3RpbmU6IGZvcm1TdG9yZS5QcmlzdGluZSxcbiAgICAgICAgICAgIERpc2FibGVkOiBmb3JtU3RvcmUuRm9ybS5EaXNhYmxlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG5ld1N0YXRlUmVjb3JkID0gcmVjb3JkaWZ5PEJhc2VGb3JtQnV0dG9uU3RhdGUsIEJhc2VGb3JtQnV0dG9uU3RhdGVSZWNvcmQ+KG5ld1N0YXRlKTtcblxuICAgICAgICAvLyBUeXBlICdSZWFkb25seTxUU3RhdGU+JyBjYW5ub3QgYmUgY29udmVydGVkIHRvIHR5cGUgJ0l0ZXJhYmxlPHN0cmluZywgYW55PicuXG4gICAgICAgIGNvbnN0IHN0YXRlSXRlcmFibGUgPSB0aGlzLnN0YXRlIGFzIGFueSBhcyBJdGVyYWJsZTxzdHJpbmcsIGFueT47XG4gICAgICAgIGlmICghbmV3U3RhdGVSZWNvcmQuZXF1YWxzKHN0YXRlSXRlcmFibGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBuZXdTdGF0ZVJlY29yZCBiZWNvbWVzIGFuIGVtcHR5IG9iamVjdCBhZnRlciBzZXRTdGF0ZVxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFwcGVucyBiZWNhdXNlIG9mIGFuIHVuZGVybHlpbmcgSW1tdXRhYmxlLlJlY29yZFxuICAgICAgICAgICAgICAgIC8vIG5vdCBlbnVtZXJhdGluZyBwcm9wZXJ0aWVzIGluIGZvci4uaW5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLkRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcyBhcyBUUHJvcHM7XG4gICAgICAgIGlmIChwcm9wcy5kaXNhYmxlZCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcHMuZGlzYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZU9uRXJyb3IgPT09IHRydWUgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuSGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmRpc2FibGVPbkJ1c3kgPT09IHRydWUgJiZcbiAgICAgICAgICAgIHRoaXMuQnVzeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuZGlzYWJsZU9uUHJpc3RpbmUgPT09IHRydWUgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuUHJpc3RpbmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IEJ1c3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmJ1c3kgPT09IHRydWUgfHxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT0gbnVsbCAmJlxuICAgICAgICAgICAgKHRoaXMuc3RhdGUuVmFsaWRhdGluZyB8fCB0aGlzLnN0YXRlLlN1Ym1pdHRpbmcpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgSW5saW5lU3R5bGVzKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMge1xuICAgICAgICBsZXQgaW5saW5lU3R5bGVzOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge307XG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcyBhcyBUUHJvcHM7XG4gICAgICAgIGlmIChwcm9wcy5zdHlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbmxpbmVTdHlsZXMgPSBwcm9wcy5zdHlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLkJ1c3kgJiYgIXByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpbmxpbmVTdHlsZXMuY3Vyc29yID0gXCJ3YWl0XCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5saW5lU3R5bGVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgQ2xhc3NOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAke3RoaXMucHJvcHMuY2xhc3NOYW1lfSBgO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLkJ1c3kpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSB0aGlzLnByb3BzLmJ1c3lDbGFzc05hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5sZW5ndGggPiAwID8gY2xhc3NOYW1lIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHJlbmRlcigpOiBKU1guRWxlbWVudCB8IG51bGw7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gRDovUHJvamVjdHMvU2ltcGxySlMvc2ltcGxyLWZvcm1zL2NvbW1vbi90ZW1wL34vc291cmNlLW1hcC1sb2FkZXIhLi9zcmMvYWJzdHJhY3Rpb25zL2Jhc2UtZm9ybS1idXR0b24udHN4Il0sInNvdXJjZVJvb3QiOiIifQ==