UNPKG

simplr-forms-dom

Version:
294 lines (272 loc) 31.4 kB
(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==