apeman-react-mixins
Version:
React mixin set of apeman.
270 lines (211 loc) • 17.3 kB
JavaScript
/**
* Mixin for form.
* @mixin ApFormMixin
*/
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _defaults = require('defaults');
var _defaults2 = _interopRequireDefault(_defaults);
var _stringcase = require('stringcase');
var _stringcase2 = _interopRequireDefault(_stringcase);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/** @lends ApFormMixin */
var ApFormMixin = {
// --------------------
// Custom
// --------------------
$apFormMixed: true,
/**
* Handle change of form input
* @param {object} e - Input change event.
*/
handleFormChange: function handleFormChange(e) {
var s = this;
var props = s.props;
var _e$target = e.target;
var name = _e$target.name;
var value = _e$target.value;
var values = Object.assign({}, props.formValues, _defineProperty({}, name, value));
if (props.onFormChange) {
e = e || {};
e.target = e.target || _reactDom2.default.findDOMNode(s);
e.form = values;
props.onFormChange(e);
}
},
/**
* Handle form submit.
* @param {object} e - Submit event.
*/
handleFormSubmit: function handleFormSubmit(e) {
var s = this;
var props = s.props;
var values = props.formValues;
if (props.onFormSubmit) {
e = e || {};
e.target = e.target || _reactDom2.default.findDOMNode(s);
e.form = values;
props.onFormSubmit(e);
}
},
/**
* Handle form cancel.
* @param {object} e - Submit event.
*/
handleFormCancel: function handleFormCancel(e) {
var s = this;
var props = s.props;
var values = props.formValues;
if (props.onFormCancel) {
e = e || {};
e.target = e.target || _reactDom2.default.findDOMNode(s);
e.form = values;
props.onFormCancel(e);
}
},
/**
* Get a form value.
* @param {string} name - Name of the value.
* @returns {*} - Value
*/
getFormValue: function getFormValue(name) {
var s = this;
var values = s.getFormValues();
return values && values[name];
},
/**
* Get form values.
* @returns {string}
*/
getFormValues: function getFormValues() {
var s = this;
var formValues = s.props.formValues;
return s.formatFormValues(formValues || null);
},
/**
* Get a form id.
* @param {string} name
* @returns {string}
*/
getFormId: function getFormId(name) {
var s = this;
var formPrefix = s.props.formPrefix;
return [formPrefix || 'ap-form', _stringcase2.default.spinalcase(name)].join('-');
},
/**
* Get a label
* @param {string} name
* @returns {string}
*/
getFormLabel: function getFormLabel(name) {
var s = this;
var formLabels = s.props.formLabels;
var label = (formLabels || {})[name];
if (!label) {
console.warn('[ApFormMixin] Label not found with name: ' + name);
label = name;
}
return label;
},
/**
* Get a icon
* @param {string} name
* @returns {string}
*/
getFormIcon: function getFormIcon(name) {
var s = this;
var formIcons = s.props.formIcons;
return (formIcons || {})[name];
},
/**
* Get a placeholder
* @param {string} name
* @returns {string}
*/
getFormPlaceholder: function getFormPlaceholder(name) {
var s = this;
var formPlaceholders = s.props.formPlaceholders;
return (formPlaceholders || {})[name];
},
/**
* Get an image
* @param {string} name
* @returns {string}
*/
getFormImage: function getFormImage(name) {
var s = this;
var formImages = s.props.formImages;
return (formImages || {})[name];
},
/**
* Get an action
* @param {string} name
* @returns {string}
*/
getFormAction: function getFormAction(name) {
var s = this;
var formActions = s.props.formActions;
return (formActions || {})[name];
},
/**
* Wrap as form handler.
* @param {function} handler - A handler.
* @param {object} options - Optional setttings
* @returns {function}
*/
asFormHandler: function asFormHandler(handler, options) {
var s = this;
options = options || {};
var key = options.key || 'default';
if (!handler) {
return null;
}
handler.apFormWraps = handler.apFormWraps || {};
handler.apFormWraps[key] = handler.apFormWraps[key] || function formWrap(e) {
e = Object.assign(e || {}, {
form: s.getFormValues()
}, options);
handler.call(s, e);
};
return handler.apFormWraps[key];
},
// --------------------
// Specs
// --------------------
propTypes: {
formValues: _react.PropTypes.object,
formLabels: _react.PropTypes.object,
formIcons: _react.PropTypes.object,
formImages: _react.PropTypes.object,
formActions: _react.PropTypes.object,
formPlaceholders: _react.PropTypes.object,
formPrefix: _react.PropTypes.string,
onFormChange: _react.PropTypes.func,
onFormSubmit: _react.PropTypes.func,
onFormCancel: _react.PropTypes.func
},
getDefaultProps: function getDefaultProps() {
return {};
},
// --------------------
// Lifecycle
// --------------------
componentWillMount: function componentWillMount() {
var s = this;
var noop = function noop(value) {
return value;
};
(0, _defaults2.default)(s, {
formatFormValues: noop
});
}
};
exports.default = Object.freeze(ApFormMixin);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2Zvcm1fbWl4aW4uanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0E7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7Ozs7QUFHQSxJQUFNLGNBQWM7Ozs7O0FBS2xCLGdCQUFjLElBTEk7Ozs7OztBQVdsQixrQkFYa0IsNEJBV0EsQ0FYQSxFQVdHO0FBQ25CLFFBQU0sSUFBSSxJQUFWO0FBRG1CLFFBRWIsS0FGYSxHQUVILENBRkcsQ0FFYixLQUZhO0FBQUEsb0JBSUcsRUFBRSxNQUpMO0FBQUEsUUFJYixJQUphLGFBSWIsSUFKYTtBQUFBLFFBSVAsS0FKTyxhQUlQLEtBSk87O0FBS25CLFFBQUksU0FBUyxPQUFPLE1BQVAsQ0FDWCxFQURXLEVBQ1AsTUFBTSxVQURDLHNCQUVSLElBRlEsRUFFRCxLQUZDLEVBQWI7O0FBTUEsUUFBSSxNQUFNLFlBQVYsRUFBd0I7QUFDdEIsVUFBSSxLQUFLLEVBQVQ7QUFDQSxRQUFFLE1BQUYsR0FBVyxFQUFFLE1BQUYsSUFBWSxtQkFBUyxXQUFULENBQXFCLENBQXJCLENBQXZCO0FBQ0EsUUFBRSxJQUFGLEdBQVMsTUFBVDtBQUNBLFlBQU0sWUFBTixDQUFtQixDQUFuQjtBQUNEO0FBQ0YsR0E1QmlCOzs7Ozs7O0FBa0NsQixrQkFsQ2tCLDRCQWtDQSxDQWxDQSxFQWtDRztBQUNuQixRQUFNLElBQUksSUFBVjtBQURtQixRQUViLEtBRmEsR0FFSCxDQUZHLENBRWIsS0FGYTs7O0FBSW5CLFFBQUksU0FBUyxNQUFNLFVBQW5CO0FBQ0EsUUFBSSxNQUFNLFlBQVYsRUFBd0I7QUFDdEIsVUFBSSxLQUFLLEVBQVQ7QUFDQSxRQUFFLE1BQUYsR0FBVyxFQUFFLE1BQUYsSUFBWSxtQkFBUyxXQUFULENBQXFCLENBQXJCLENBQXZCO0FBQ0EsUUFBRSxJQUFGLEdBQVMsTUFBVDtBQUNBLFlBQU0sWUFBTixDQUFtQixDQUFuQjtBQUNEO0FBQ0YsR0E3Q2lCOzs7Ozs7O0FBbURsQixrQkFuRGtCLDRCQW1EQSxDQW5EQSxFQW1ERztBQUNuQixRQUFNLElBQUksSUFBVjtBQURtQixRQUViLEtBRmEsR0FFSCxDQUZHLENBRWIsS0FGYTs7O0FBSW5CLFFBQUksU0FBUyxNQUFNLFVBQW5CO0FBQ0EsUUFBSSxNQUFNLFlBQVYsRUFBd0I7QUFDdEIsVUFBSSxLQUFLLEVBQVQ7QUFDQSxRQUFFLE1BQUYsR0FBVyxFQUFFLE1BQUYsSUFBWSxtQkFBUyxXQUFULENBQXFCLENBQXJCLENBQXZCO0FBQ0EsUUFBRSxJQUFGLEdBQVMsTUFBVDtBQUNBLFlBQU0sWUFBTixDQUFtQixDQUFuQjtBQUNEO0FBQ0YsR0E5RGlCOzs7Ozs7OztBQXFFbEIsY0FyRWtCLHdCQXFFSixJQXJFSSxFQXFFRTtBQUNsQixRQUFNLElBQUksSUFBVjtBQUNBLFFBQUksU0FBUyxFQUFFLGFBQUYsRUFBYjtBQUNBLFdBQU8sVUFBVSxPQUFRLElBQVIsQ0FBakI7QUFDRCxHQXpFaUI7Ozs7Ozs7QUErRWxCLGVBL0VrQiwyQkErRUQ7QUFDZixRQUFNLElBQUksSUFBVjtBQURlLFFBRVQsVUFGUyxHQUVNLEVBQUUsS0FGUixDQUVULFVBRlM7O0FBR2YsV0FBTyxFQUFFLGdCQUFGLENBQW1CLGNBQWMsSUFBakMsQ0FBUDtBQUNELEdBbkZpQjs7Ozs7Ozs7QUEwRmxCLFdBMUZrQixxQkEwRlAsSUExRk8sRUEwRkQ7QUFDZixRQUFNLElBQUksSUFBVjtBQURlLFFBRVQsVUFGUyxHQUVNLEVBQUUsS0FGUixDQUVULFVBRlM7O0FBR2YsV0FBTyxDQUNMLGNBQWMsU0FEVCxFQUVMLHFCQUFXLFVBQVgsQ0FBc0IsSUFBdEIsQ0FGSyxFQUdMLElBSEssQ0FHQSxHQUhBLENBQVA7QUFJRCxHQWpHaUI7Ozs7Ozs7O0FBd0dsQixjQXhHa0Isd0JBd0dKLElBeEdJLEVBd0dFO0FBQ2xCLFFBQU0sSUFBSSxJQUFWO0FBRGtCLFFBRVosVUFGWSxHQUVHLEVBQUUsS0FGTCxDQUVaLFVBRlk7O0FBR2xCLFFBQUksUUFBUSxDQUFDLGNBQWMsRUFBZixFQUFvQixJQUFwQixDQUFaO0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLGNBQVEsSUFBUiwrQ0FBeUQsSUFBekQ7QUFDQSxjQUFRLElBQVI7QUFDRDtBQUNELFdBQU8sS0FBUDtBQUNELEdBakhpQjs7Ozs7Ozs7QUF3SGxCLGFBeEhrQix1QkF3SEwsSUF4SEssRUF3SEM7QUFDakIsUUFBTSxJQUFJLElBQVY7QUFEaUIsUUFFWCxTQUZXLEdBRUcsRUFBRSxLQUZMLENBRVgsU0FGVzs7QUFHakIsV0FBTyxDQUFDLGFBQWEsRUFBZCxFQUFtQixJQUFuQixDQUFQO0FBQ0QsR0E1SGlCOzs7Ozs7OztBQW1JbEIsb0JBbklrQiw4QkFtSUUsSUFuSUYsRUFtSVE7QUFDeEIsUUFBTSxJQUFJLElBQVY7QUFEd0IsUUFFbEIsZ0JBRmtCLEdBRUcsRUFBRSxLQUZMLENBRWxCLGdCQUZrQjs7QUFHeEIsV0FBTyxDQUFDLG9CQUFvQixFQUFyQixFQUEwQixJQUExQixDQUFQO0FBQ0QsR0F2SWlCOzs7Ozs7OztBQThJbEIsY0E5SWtCLHdCQThJSixJQTlJSSxFQThJRTtBQUNsQixRQUFNLElBQUksSUFBVjtBQURrQixRQUVaLFVBRlksR0FFRyxFQUFFLEtBRkwsQ0FFWixVQUZZOztBQUdsQixXQUFPLENBQUMsY0FBYyxFQUFmLEVBQW9CLElBQXBCLENBQVA7QUFDRCxHQWxKaUI7Ozs7Ozs7O0FBeUpsQixlQXpKa0IseUJBeUpILElBekpHLEVBeUpHO0FBQ25CLFFBQU0sSUFBSSxJQUFWO0FBRG1CLFFBRWIsV0FGYSxHQUVHLEVBQUUsS0FGTCxDQUViLFdBRmE7O0FBR25CLFdBQU8sQ0FBQyxlQUFlLEVBQWhCLEVBQXFCLElBQXJCLENBQVA7QUFDRCxHQTdKaUI7Ozs7Ozs7OztBQXFLbEIsZUFyS2tCLHlCQXFLSCxPQXJLRyxFQXFLTSxPQXJLTixFQXFLZTtBQUMvQixRQUFNLElBQUksSUFBVjtBQUNBLGNBQVUsV0FBVyxFQUFyQjtBQUNBLFFBQUksTUFBTSxRQUFRLEdBQVIsSUFBZSxTQUF6QjtBQUNBLFFBQUksQ0FBQyxPQUFMLEVBQWM7QUFDWixhQUFPLElBQVA7QUFDRDtBQUNELFlBQVEsV0FBUixHQUFzQixRQUFRLFdBQVIsSUFBdUIsRUFBN0M7QUFDQSxZQUFRLFdBQVIsQ0FBcUIsR0FBckIsSUFBNkIsUUFBUSxXQUFSLENBQXFCLEdBQXJCLEtBQzNCLFNBQVMsUUFBVCxDQUFtQixDQUFuQixFQUFzQjtBQUNwQixVQUFJLE9BQU8sTUFBUCxDQUFjLEtBQUssRUFBbkIsRUFBdUI7QUFDekIsY0FBTSxFQUFFLGFBQUY7QUFEbUIsT0FBdkIsRUFFRCxPQUZDLENBQUo7QUFHQSxjQUFRLElBQVIsQ0FBYSxDQUFiLEVBQWdCLENBQWhCO0FBQ0QsS0FOSDtBQU9BLFdBQU8sUUFBUSxXQUFSLENBQXFCLEdBQXJCLENBQVA7QUFDRCxHQXJMaUI7Ozs7Ozs7QUEyTGxCLGFBQVc7QUFDVCxnQkFBWSxpQkFBTSxNQURUO0FBRVQsZ0JBQVksaUJBQU0sTUFGVDtBQUdULGVBQVcsaUJBQU0sTUFIUjtBQUlULGdCQUFZLGlCQUFNLE1BSlQ7QUFLVCxpQkFBYSxpQkFBTSxNQUxWO0FBTVQsc0JBQWtCLGlCQUFNLE1BTmY7QUFPVCxnQkFBWSxpQkFBTSxNQVBUO0FBUVQsa0JBQWMsaUJBQU0sSUFSWDtBQVNULGtCQUFjLGlCQUFNLElBVFg7QUFVVCxrQkFBYyxpQkFBTTtBQVZYLEdBM0xPOztBQXdNbEIsaUJBeE1rQiw2QkF3TUM7QUFDakIsV0FBTyxFQUFQO0FBQ0QsR0ExTWlCOzs7Ozs7O0FBZ05sQixvQkFoTmtCLGdDQWdOSTtBQUNwQixRQUFNLElBQUksSUFBVjs7QUFFQSxRQUFJLE9BQU8sU0FBUCxJQUFPLENBQUMsS0FBRDtBQUFBLGFBQVcsS0FBWDtBQUFBLEtBQVg7QUFDQSw0QkFBUyxDQUFULEVBQVk7QUFDVix3QkFBa0I7QUFEUixLQUFaO0FBR0Q7QUF2TmlCLENBQXBCOztrQkEyTmUsT0FBTyxNQUFQLENBQWMsV0FBZCxDIiwiZmlsZSI6ImFwX2Zvcm1fbWl4aW4uanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL29rdW5pc2hpbmlzaGkvUHJvamVjdHMvYXBlbWFuLXByb2plY3RzL2FwZW1hbi1yZWFjdC1taXhpbnMvbGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNaXhpbiBmb3IgZm9ybS5cbiAqIEBtaXhpbiBBcEZvcm1NaXhpblxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMgYXMgdHlwZXN9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBkZWZhdWx0cyBmcm9tICdkZWZhdWx0cydcbmltcG9ydCBzdHJpbmdjYXNlIGZyb20gJ3N0cmluZ2Nhc2UnXG5cbi8qKiBAbGVuZHMgQXBGb3JtTWl4aW4gKi9cbmNvbnN0IEFwRm9ybU1peGluID0ge1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEN1c3RvbVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAkYXBGb3JtTWl4ZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaGFuZ2Ugb2YgZm9ybSBpbnB1dFxuICAgKiBAcGFyYW0ge29iamVjdH0gZSAtIElucHV0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGhhbmRsZUZvcm1DaGFuZ2UgKGUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICBsZXQgdmFsdWVzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LCBwcm9wcy5mb3JtVmFsdWVzLCB7XG4gICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAocHJvcHMub25Gb3JtQ2hhbmdlKSB7XG4gICAgICBlID0gZSB8fCB7fVxuICAgICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBSZWFjdERPTS5maW5kRE9NTm9kZShzKVxuICAgICAgZS5mb3JtID0gdmFsdWVzXG4gICAgICBwcm9wcy5vbkZvcm1DaGFuZ2UoZSlcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBmb3JtIHN1Ym1pdC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGUgLSBTdWJtaXQgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVGb3JtU3VibWl0IChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgbGV0IHZhbHVlcyA9IHByb3BzLmZvcm1WYWx1ZXNcbiAgICBpZiAocHJvcHMub25Gb3JtU3VibWl0KSB7XG4gICAgICBlID0gZSB8fCB7fVxuICAgICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBSZWFjdERPTS5maW5kRE9NTm9kZShzKVxuICAgICAgZS5mb3JtID0gdmFsdWVzXG4gICAgICBwcm9wcy5vbkZvcm1TdWJtaXQoZSlcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBmb3JtIGNhbmNlbC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGUgLSBTdWJtaXQgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVGb3JtQ2FuY2VsIChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgbGV0IHZhbHVlcyA9IHByb3BzLmZvcm1WYWx1ZXNcbiAgICBpZiAocHJvcHMub25Gb3JtQ2FuY2VsKSB7XG4gICAgICBlID0gZSB8fCB7fVxuICAgICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBSZWFjdERPTS5maW5kRE9NTm9kZShzKVxuICAgICAgZS5mb3JtID0gdmFsdWVzXG4gICAgICBwcm9wcy5vbkZvcm1DYW5jZWwoZSlcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIGZvcm0gdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSAtIFZhbHVlXG4gICAqL1xuICBnZXRGb3JtVmFsdWUgKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB2YWx1ZXMgPSBzLmdldEZvcm1WYWx1ZXMoKVxuICAgIHJldHVybiB2YWx1ZXMgJiYgdmFsdWVzWyBuYW1lIF1cbiAgfSxcblxuICAvKipcbiAgICogR2V0IGZvcm0gdmFsdWVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybVZhbHVlcyAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtVmFsdWVzIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIHMuZm9ybWF0Rm9ybVZhbHVlcyhmb3JtVmFsdWVzIHx8IG51bGwpXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIGZvcm0gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRGb3JtSWQgKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IGZvcm1QcmVmaXggfSA9IHMucHJvcHNcbiAgICByZXR1cm4gW1xuICAgICAgZm9ybVByZWZpeCB8fCAnYXAtZm9ybScsXG4gICAgICBzdHJpbmdjYXNlLnNwaW5hbGNhc2UobmFtZSlcbiAgICBdLmpvaW4oJy0nKVxuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBsYWJlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybUxhYmVsIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtTGFiZWxzIH0gPSBzLnByb3BzXG4gICAgbGV0IGxhYmVsID0gKGZvcm1MYWJlbHMgfHwge30pWyBuYW1lIF1cbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtBcEZvcm1NaXhpbl0gTGFiZWwgbm90IGZvdW5kIHdpdGggbmFtZTogJHtuYW1lfWApXG4gICAgICBsYWJlbCA9IG5hbWVcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIGljb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEZvcm1JY29uIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtSWNvbnMgfSA9IHMucHJvcHNcbiAgICByZXR1cm4gKGZvcm1JY29ucyB8fCB7fSlbIG5hbWUgXVxuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBwbGFjZWhvbGRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybVBsYWNlaG9sZGVyIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtUGxhY2Vob2xkZXJzIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIChmb3JtUGxhY2Vob2xkZXJzIHx8IHt9KVsgbmFtZSBdXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbWFnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybUltYWdlIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtSW1hZ2VzIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIChmb3JtSW1hZ2VzIHx8IHt9KVsgbmFtZSBdXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhbiBhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEZvcm1BY3Rpb24gKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IGZvcm1BY3Rpb25zIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIChmb3JtQWN0aW9ucyB8fCB7fSlbIG5hbWUgXVxuICB9LFxuXG4gIC8qKlxuICAgKiBXcmFwIGFzIGZvcm0gaGFuZGxlci5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlciAtIEEgaGFuZGxlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0dGluZ3NcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufVxuICAgKi9cbiAgYXNGb3JtSGFuZGxlciAoaGFuZGxlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgICBsZXQga2V5ID0gb3B0aW9ucy5rZXkgfHwgJ2RlZmF1bHQnXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBoYW5kbGVyLmFwRm9ybVdyYXBzID0gaGFuZGxlci5hcEZvcm1XcmFwcyB8fCB7fVxuICAgIGhhbmRsZXIuYXBGb3JtV3JhcHNbIGtleSBdID0gaGFuZGxlci5hcEZvcm1XcmFwc1sga2V5IF0gfHxcbiAgICAgIGZ1bmN0aW9uIGZvcm1XcmFwIChlKSB7XG4gICAgICAgIGUgPSBPYmplY3QuYXNzaWduKGUgfHwge30sIHtcbiAgICAgICAgICBmb3JtOiBzLmdldEZvcm1WYWx1ZXMoKVxuICAgICAgICB9LCBvcHRpb25zKVxuICAgICAgICBoYW5kbGVyLmNhbGwocywgZSlcbiAgICAgIH1cbiAgICByZXR1cm4gaGFuZGxlci5hcEZvcm1XcmFwc1sga2V5IF1cbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTcGVjc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByb3BUeXBlczoge1xuICAgIGZvcm1WYWx1ZXM6IHR5cGVzLm9iamVjdCxcbiAgICBmb3JtTGFiZWxzOiB0eXBlcy5vYmplY3QsXG4gICAgZm9ybUljb25zOiB0eXBlcy5vYmplY3QsXG4gICAgZm9ybUltYWdlczogdHlwZXMub2JqZWN0LFxuICAgIGZvcm1BY3Rpb25zOiB0eXBlcy5vYmplY3QsXG4gICAgZm9ybVBsYWNlaG9sZGVyczogdHlwZXMub2JqZWN0LFxuICAgIGZvcm1QcmVmaXg6IHR5cGVzLnN0cmluZyxcbiAgICBvbkZvcm1DaGFuZ2U6IHR5cGVzLmZ1bmMsXG4gICAgb25Gb3JtU3VibWl0OiB0eXBlcy5mdW5jLFxuICAgIG9uRm9ybUNhbmNlbDogdHlwZXMuZnVuY1xuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wcyAoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgY29tcG9uZW50V2lsbE1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuXG4gICAgbGV0IG5vb3AgPSAodmFsdWUpID0+IHZhbHVlXG4gICAgZGVmYXVsdHMocywge1xuICAgICAgZm9ybWF0Rm9ybVZhbHVlczogbm9vcFxuICAgIH0pXG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuZnJlZXplKEFwRm9ybU1peGluKVxuIl19