focus-components-v3
Version:
Focus web components to build applications (based on Material Design)
256 lines (209 loc) • 25.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _dec, _class;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _material = require('../behaviours/material');
var _material2 = _interopRequireDefault(_material);
var _i18next = require('i18next');
var _i18next2 = _interopRequireDefault(_i18next);
var _mdlSpinner = require('../spinner/mdl-spinner');
var _mdlSpinner2 = _interopRequireDefault(_mdlSpinner);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
var BTN_JS = 'mdl-js-button';
var BTN_CLASS = 'mdl-button';
var BUTTON_PRFX = 'mdl-button--';
var RIPPLE_EFFECT = 'mdl-js-ripple-effect';
var propTypes = {
className: _react.PropTypes.string,
color: _react.PropTypes.oneOf([undefined, 'colored', 'primary', 'accent']),
handleOnClick: _react.PropTypes.func, //to remove in V2
hasRipple: _react.PropTypes.bool,
id: _react.PropTypes.string,
isJs: _react.PropTypes.bool,
icon: _react.PropTypes.string,
iconLibrary: _react.PropTypes.oneOf(['material', 'font-awesome', 'font-custom']),
iconPosition: _react.PropTypes.oneOf(['left', 'right']),
label: _react.PropTypes.string,
onClick: _react.PropTypes.func,
processLabel: _react.PropTypes.string,
saving: _react.PropTypes.bool,
shape: _react.PropTypes.oneOf([undefined, 'raised', 'fab', 'icon', 'mini-fab']),
type: _react.PropTypes.oneOf(['submit', 'button'])
};
var defaultProps = {
hasRipple: true,
icon: null,
iconLibrary: 'material',
iconPosition: 'left',
id: '',
isJs: true,
label: '',
shape: 'raised',
type: 'submit'
};
var Button = (_dec = (0, _material2.default)('materialButton', 'MaterialButton'), _dec(_class = function (_Component) {
_inherits(Button, _Component);
function Button() {
_classCallCheck(this, Button);
return _possibleConstructorReturn(this, _Component.apply(this, arguments));
}
/**
* Called when component is mounted.
*/
Button.prototype.componentDidMount = function componentDidMount() {
var hasRipple = this.props.hasRipple;
var refNode = _reactDom2.default.findDOMNode(this.refs['materialButton']);
if (hasRipple) {
componentHandler.upgradeElement(refNode, 'MaterialRipple');
}
};
/**
* Date de composant.
* @return {string} Classe.
*/
Button.prototype._getComponentClassName = function _getComponentClassName() {
var _props = this.props,
shape = _props.shape,
color = _props.color,
hasRipple = _props.hasRipple,
isJs = _props.isJs;
var SHAPE_CLASS = void 0;
switch (shape) {
case 'raised':
SHAPE_CLASS = BUTTON_PRFX + 'raised';
break;
case 'fab':
SHAPE_CLASS = BUTTON_PRFX + 'fab';
break;
case 'icon':
SHAPE_CLASS = BUTTON_PRFX + 'icon';
break;
case 'mini-fab':
SHAPE_CLASS = BUTTON_PRFX + 'mini-fab ' + BUTTON_PRFX + 'fab';
break;
case null:
SHAPE_CLASS = '';
break;
default:
SHAPE_CLASS = null;
break;
}
var COLOR_CLASS = color ? '' + BUTTON_PRFX + color : '';
var JS_CLASS = isJs ? BTN_JS : '';
var RIPPLE_EFFECT_CLASS = hasRipple ? RIPPLE_EFFECT : '';
return BTN_CLASS + ' ' + COLOR_CLASS + ' ' + SHAPE_CLASS + ' ' + JS_CLASS + ' ' + RIPPLE_EFFECT_CLASS;
};
/**
* Render the pressed button.
* @return {Component} - Component button.
*/
Button.prototype.renderPressedButton = function renderPressedButton() {
return _react2.default.createElement(
'button',
null,
'Loading...'
);
};
/**
* Render an icon.
* @return {Component} - Composant icone.
*/
Button.prototype._renderIcon = function _renderIcon() {
var _props2 = this.props,
icon = _props2.icon,
iconLibrary = _props2.iconLibrary;
switch (iconLibrary) {
case 'material':
return _react2.default.createElement(
'i',
{ className: 'material-icons' },
icon
);
case 'font-awesome':
var faCss = 'fa fa-' + icon;
return _react2.default.createElement('i', { className: faCss });
case 'font-custom':
return _react2.default.createElement('span', { className: 'icon-' + icon });
default:
return null;
}
};
/**
* Render the label.
* @return {Component} - Tle button label.
*/
Button.prototype._renderLabel = function _renderLabel() {
var _props3 = this.props,
label = _props3.label,
processLabel = _props3.processLabel,
saving = _props3.saving,
shape = _props3.shape;
if (label && 'fab' !== shape && 'icon' !== shape && 'mini-fab' !== shape && (!saving || !processLabel)) {
return _react2.default.createElement(
'span',
{ 'data-focus': 'button-label' },
_i18next2.default.t(label)
);
} else if (processLabel && 'fab' !== shape && 'icon' !== shape && 'mini-fab' !== shape && saving) {
return _react2.default.createElement(
'span',
{ 'data-focus': 'button-label' },
_i18next2.default.t(processLabel)
);
}
return null;
};
/** inheritedDoc */
Button.prototype.render = function render() {
// attribute doc : https://developer.mozilla.org/fr/docs/Web/HTML/Element/Button
// be careful the way you declare your attribute names : https://developer.mozilla.org/fr/docs/Web/HTML/Element/Button
var _props4 = this.props,
className = _props4.className,
disabled = _props4.disabled,
formNoValidate = _props4.formNoValidate,
handleOnClick = _props4.handleOnClick,
icon = _props4.icon,
iconPosition = _props4.iconPosition,
id = _props4.id,
onClick = _props4.onClick,
type = _props4.type,
label = _props4.label,
style = _props4.style,
hasRipple = _props4.hasRipple,
isJs = _props4.isJs,
iconLibrary = _props4.iconLibrary,
saving = _props4.saving,
shape = _props4.shape,
route = _props4.route,
processLabel = _props4.processLabel,
otherProps = _objectWithoutProperties(_props4, ['className', 'disabled', 'formNoValidate', 'handleOnClick', 'icon', 'iconPosition', 'id', 'onClick', 'type', 'label', 'style', 'hasRipple', 'isJs', 'iconLibrary', 'saving', 'shape', 'route', 'processLabel']);
var otherInputProps = _extends({ formNoValidate: formNoValidate, onClick: handleOnClick ? handleOnClick : onClick, style: style, type: type }, otherProps); //on click for legacy. Remove handleOnClick in v2
var renderedClassName = ((className ? className : '') + ' ' + this._getComponentClassName.call(this)).trim();
var showSpinner = saving && (shape === 'fab' || shape === 'mini-fab' || shape === 'icon') || !saving ? false : true;
return _react2.default.createElement(
'button',
_extends({ alt: _i18next2.default.t(label), className: renderedClassName, 'data-focus': 'button-action', 'data-icon': icon && iconPosition || "none", 'data-saving': saving, disabled: disabled || saving, id: id, title: _i18next2.default.t(label) }, otherInputProps, { ref: 'materialButton' }),
icon && this._renderIcon.call(this),
this._renderLabel.call(this),
showSpinner && _react2.default.createElement(_mdlSpinner2.default, { className: 'double-action-button-spinner' })
);
};
return Button;
}(_react.Component)) || _class);
Button.displayName = 'Button';
Button.defaultProps = defaultProps;
Button.propTypes = propTypes;
exports.default = Button;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIkJUTl9KUyIsIkJUTl9DTEFTUyIsIkJVVFRPTl9QUkZYIiwiUklQUExFX0VGRkVDVCIsInByb3BUeXBlcyIsImNsYXNzTmFtZSIsInN0cmluZyIsImNvbG9yIiwib25lT2YiLCJ1bmRlZmluZWQiLCJoYW5kbGVPbkNsaWNrIiwiZnVuYyIsImhhc1JpcHBsZSIsImJvb2wiLCJpZCIsImlzSnMiLCJpY29uIiwiaWNvbkxpYnJhcnkiLCJpY29uUG9zaXRpb24iLCJsYWJlbCIsIm9uQ2xpY2siLCJwcm9jZXNzTGFiZWwiLCJzYXZpbmciLCJzaGFwZSIsInR5cGUiLCJkZWZhdWx0UHJvcHMiLCJCdXR0b24iLCJjb21wb25lbnREaWRNb3VudCIsInByb3BzIiwicmVmTm9kZSIsImZpbmRET01Ob2RlIiwicmVmcyIsImNvbXBvbmVudEhhbmRsZXIiLCJ1cGdyYWRlRWxlbWVudCIsIl9nZXRDb21wb25lbnRDbGFzc05hbWUiLCJTSEFQRV9DTEFTUyIsIkNPTE9SX0NMQVNTIiwiSlNfQ0xBU1MiLCJSSVBQTEVfRUZGRUNUX0NMQVNTIiwicmVuZGVyUHJlc3NlZEJ1dHRvbiIsIl9yZW5kZXJJY29uIiwiZmFDc3MiLCJfcmVuZGVyTGFiZWwiLCJ0IiwicmVuZGVyIiwiZGlzYWJsZWQiLCJmb3JtTm9WYWxpZGF0ZSIsInN0eWxlIiwicm91dGUiLCJvdGhlclByb3BzIiwib3RoZXJJbnB1dFByb3BzIiwicmVuZGVyZWRDbGFzc05hbWUiLCJ0cmltIiwic2hvd1NwaW5uZXIiLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxTQUFTLGVBQWY7QUFDQSxJQUFNQyxZQUFZLFlBQWxCO0FBQ0EsSUFBTUMsY0FBYyxjQUFwQjtBQUNBLElBQU1DLGdCQUFnQixzQkFBdEI7O0FBRUEsSUFBTUMsWUFBWTtBQUNkQyxl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QXdCLEVBQTNCLFVBQW1DLEtBQUs2QixzQkFBUCxNQUFFLElBQUYsQ0FBakMsRUFBbUVrQixJQUFuRSxFQUExQjtBQUNBLFlBQU1DLGNBQWUvQixXQUFXQyxVQUFVLEtBQVYsSUFBbUJBLFVBQVUsVUFBN0IsSUFBMkNBLFVBQVUsTUFBaEUsQ0FBRCxJQUE2RSxDQUFDRCxNQUE5RSxHQUF1RixLQUF2RixHQUErRixJQUFuSDtBQUNBLGVBQ0k7QUFBQTtBQUFBLHVCQUFRLEtBQUssa0JBQVFxQixDQUFSLENBQVV4QixLQUFWLENBQWIsRUFBK0IsV0FBV2dDLGlCQUExQyxFQUE2RCxjQUFXLGVBQXhFLEVBQXdGLGFBQVduQyxRQUFRRSxZQUFSLElBQXdCLE1BQTNILEVBQW1JLGVBQWFJLE1BQWhKLEVBQXdKLFVBQVV1QixZQUFZdkIsTUFBOUssRUFBc0wsSUFBSVIsRUFBMUwsRUFBOEwsT0FBTyxrQkFBUTZCLENBQVIsQ0FBVXhCLEtBQVYsQ0FBck0sSUFBMk4rQixlQUEzTixJQUE0TyxLQUFJLGdCQUFoUDtBQUNLbEMsb0JBQVUsS0FBS3dCLFdBQVAsTUFBRSxJQUFGLENBRGI7QUFFTyxpQkFBS0UsWUFBUCxNQUFFLElBQUYsQ0FGTDtBQUdLVywyQkFBZSxzREFBUyxXQUFVLDhCQUFuQjtBQUhwQixTQURKO0FBT0gsSzs7V0F2R0MzQixNOzs7O0FBMEdOQSxPQUFPNEIsV0FBUCxHQUFxQixRQUFyQjtBQUNBNUIsT0FBT0QsWUFBUCxHQUFzQkEsWUFBdEI7QUFDQUMsT0FBT3RCLFNBQVAsR0FBbUJBLFNBQW5COztrQkFFZXNCLE0iLCJmaWxlIjoiZnItRlIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIFByb3BUeXBlc30gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcclxuaW1wb3J0IE1EQmVoYXZpb3VyIGZyb20gJy4uL2JlaGF2aW91cnMvbWF0ZXJpYWwnO1xyXG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcclxuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi4vc3Bpbm5lci9tZGwtc3Bpbm5lcic7XHJcblxyXG5jb25zdCBCVE5fSlMgPSAnbWRsLWpzLWJ1dHRvbic7XHJcbmNvbnN0IEJUTl9DTEFTUyA9ICdtZGwtYnV0dG9uJztcclxuY29uc3QgQlVUVE9OX1BSRlggPSAnbWRsLWJ1dHRvbi0tJztcclxuY29uc3QgUklQUExFX0VGRkVDVCA9ICdtZGwtanMtcmlwcGxlLWVmZmVjdCc7XHJcblxyXG5jb25zdCBwcm9wVHlwZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWQsJ2NvbG9yZWQnLCAncHJpbWFyeScsICdhY2NlbnQnXSksXHJcbiAgICBoYW5kbGVPbkNsaWNrOiBQcm9wVHlwZXMuZnVuYywgLy90byByZW1vdmUgaW4gVjJcclxuICAgIGhhc1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXHJcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIGlzSnM6IFByb3BUeXBlcy5ib29sLFxyXG4gICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIGljb25MaWJyYXJ5OiBQcm9wVHlwZXMub25lT2YoWydtYXRlcmlhbCcsICdmb250LWF3ZXNvbWUnLCAnZm9udC1jdXN0b20nXSksXHJcbiAgICBpY29uUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2xlZnQnLCAncmlnaHQnXSksXHJcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcclxuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxyXG4gICAgcHJvY2Vzc0xhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgc2F2aW5nOiBQcm9wVHlwZXMuYm9vbCxcclxuICAgIHNoYXBlOiBQcm9wVHlwZXMub25lT2YoW3VuZGVmaW5lZCwgJ3JhaXNlZCcsICdmYWInLCAnaWNvbicsICdtaW5pLWZhYiddKSxcclxuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbJ3N1Ym1pdCcsICdidXR0b24nXSlcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgaGFzUmlwcGxlOiB0cnVlLFxyXG4gICAgaWNvbjogbnVsbCxcclxuICAgIGljb25MaWJyYXJ5OiAnbWF0ZXJpYWwnLFxyXG4gICAgaWNvblBvc2l0aW9uOiAnbGVmdCcsXHJcbiAgICBpZDogJycsXHJcbiAgICBpc0pzOiB0cnVlLFxyXG4gICAgbGFiZWw6ICcnLFxyXG4gICAgc2hhcGU6ICdyYWlzZWQnLFxyXG4gICAgdHlwZTogJ3N1Ym1pdCdcclxufVxyXG5cclxuQE1EQmVoYXZpb3VyKCdtYXRlcmlhbEJ1dHRvbicsICdNYXRlcmlhbEJ1dHRvbicpXHJcbmNsYXNzIEJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENhbGxlZCB3aGVuIGNvbXBvbmVudCBpcyBtb3VudGVkLlxyXG4gICAgKi9cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IHtoYXNSaXBwbGV9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCByZWZOb2RlID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcy5yZWZzWydtYXRlcmlhbEJ1dHRvbiddKTtcclxuICAgICAgICBpZiAoaGFzUmlwcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudEhhbmRsZXIudXBncmFkZUVsZW1lbnQocmVmTm9kZSwgJ01hdGVyaWFsUmlwcGxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBEYXRlIGRlIGNvbXBvc2FudC5cclxuICAgICogQHJldHVybiB7c3RyaW5nfSBDbGFzc2UuXHJcbiAgICAqL1xyXG4gICAgX2dldENvbXBvbmVudENsYXNzTmFtZSgpIHtcclxuICAgICAgICBjb25zdCB7c2hhcGUsIGNvbG9yLCBoYXNSaXBwbGUsIGlzSnN9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBsZXQgU0hBUEVfQ0xBU1M7XHJcbiAgICAgICAgc3dpdGNoIChzaGFwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyYWlzZWQnOlxyXG4gICAgICAgICAgICBTSEFQRV9DTEFTUyA9IGAke0JVVFRPTl9QUkZYfXJhaXNlZGA7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdmYWInOlxyXG4gICAgICAgICAgICBTSEFQRV9DTEFTUyA9IGAke0JVVFRPTl9QUkZYfWZhYmA7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpY29uJzpcclxuICAgICAgICAgICAgU0hBUEVfQ0xBU1MgPSBgJHtCVVRUT05fUFJGWH1pY29uYDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbmktZmFiJzpcclxuICAgICAgICAgICAgU0hBUEVfQ0xBU1MgPSBgJHtCVVRUT05fUFJGWH1taW5pLWZhYiAke0JVVFRPTl9QUkZYfWZhYmA7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIG51bGw6XHJcbiAgICAgICAgICAgIFNIQVBFX0NMQVNTID0gJyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBTSEFQRV9DTEFTUyA9IG51bGw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBDT0xPUl9DTEFTUyA9IGNvbG9yID8gYCR7QlVUVE9OX1BSRlh9JHtjb2xvcn1gIDogJyc7XHJcbiAgICAgICAgY29uc3QgSlNfQ0xBU1MgPSBpc0pzID8gQlROX0pTIDogJyc7XHJcbiAgICAgICAgY29uc3QgUklQUExFX0VGRkVDVF9DTEFTUyA9IGhhc1JpcHBsZSA/IFJJUFBMRV9FRkZFQ1QgOiAnJztcclxuICAgICAgICByZXR1cm4gYCR7QlROX0NMQVNTfSAke0NPTE9SX0NMQVNTfSAke1NIQVBFX0NMQVNTfSAke0pTX0NMQVNTfSAke1JJUFBMRV9FRkZFQ1RfQ0xBU1N9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogUmVuZGVyIHRoZSBwcmVzc2VkIGJ1dHRvbi5cclxuICAgICogQHJldHVybiB7Q29tcG9uZW50fSAtIENvbXBvbmVudCBidXR0b24uXHJcbiAgICAqL1xyXG4gICAgcmVuZGVyUHJlc3NlZEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gKDxidXR0b24+TG9hZGluZy4uLjwvYnV0dG9uPik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlbmRlciBhbiBpY29uLlxyXG4gICAgKiBAcmV0dXJuIHtDb21wb25lbnR9IC0gQ29tcG9zYW50IGljb25lLlxyXG4gICAgKi9cclxuICAgIF9yZW5kZXJJY29uKCkge1xyXG4gICAgICAgIGNvbnN0IHtpY29uLCBpY29uTGlicmFyeX0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHN3aXRjaCAoaWNvbkxpYnJhcnkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWF0ZXJpYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxpIGNsYXNzTmFtZT0nbWF0ZXJpYWwtaWNvbnMnPntpY29ufTwvaT47XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnQtYXdlc29tZSc6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYUNzcyA9IGBmYSBmYS0ke2ljb259YDtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8aSBjbGFzc05hbWU9e2ZhQ3NzfT48L2k+O1xyXG4gICAgICAgICAgICBjYXNlICdmb250LWN1c3RvbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtgaWNvbi0ke2ljb259YH0+PC9zcGFuPjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJlbmRlciB0aGUgbGFiZWwuXHJcbiAgICAqIEByZXR1cm4ge0NvbXBvbmVudH0gLSBUbGUgYnV0dG9uIGxhYmVsLlxyXG4gICAgKi9cclxuICAgIF9yZW5kZXJMYWJlbCgpIHtcclxuICAgICAgICBjb25zdCB7bGFiZWwscHJvY2Vzc0xhYmVsLCBzYXZpbmcsIHNoYXBlfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgICAgIGlmIChsYWJlbCAmJiAnZmFiJyAhPT0gc2hhcGUgJiYgJ2ljb24nICE9PSBzaGFwZSAmJiAnbWluaS1mYWInICE9PSBzaGFwZSAmJiAoIXNhdmluZyB8fCAhcHJvY2Vzc0xhYmVsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gPHNwYW4gZGF0YS1mb2N1cz0nYnV0dG9uLWxhYmVsJz57aTE4bmV4dC50KGxhYmVsKX08L3NwYW4+O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzc0xhYmVsICYmICdmYWInICE9PSBzaGFwZSAmJiAnaWNvbicgIT09IHNoYXBlICYmICdtaW5pLWZhYicgIT09IHNoYXBlICYmIHNhdmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gPHNwYW4gZGF0YS1mb2N1cz0nYnV0dG9uLWxhYmVsJz57aTE4bmV4dC50KHByb2Nlc3NMYWJlbCl9PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqIGluaGVyaXRlZERvYyAqL1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vIGF0dHJpYnV0ZSBkb2MgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvQnV0dG9uXHJcbiAgICAgICAgLy8gYmUgY2FyZWZ1bCB0aGUgd2F5IHlvdSBkZWNsYXJlIHlvdXIgYXR0cmlidXRlIG5hbWVzIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0J1dHRvblxyXG4gICAgICAgIGNvbnN0IHtjbGFzc05hbWUsIGRpc2FibGVkLCBmb3JtTm9WYWxpZGF0ZSwgaGFuZGxlT25DbGljaywgaWNvbiwgaWNvblBvc2l0aW9uLCBpZCwgb25DbGljaywgdHlwZSwgbGFiZWwsIHN0eWxlLCBoYXNSaXBwbGUsIGlzSnMsIGljb25MaWJyYXJ5LCBzYXZpbmcsIHNoYXBlLCByb3V0ZSwgcHJvY2Vzc0xhYmVsLCAuLi5vdGhlclByb3BzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IG90aGVySW5wdXRQcm9wcyA9IHsgZm9ybU5vVmFsaWRhdGUsIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgPyBoYW5kbGVPbkNsaWNrIDogb25DbGljaywgc3R5bGUsIHR5cGUsIC4uLm90aGVyUHJvcHN9OyAvL29uIGNsaWNrIGZvciBsZWdhY3kuIFJlbW92ZSBoYW5kbGVPbkNsaWNrIGluIHYyXHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWRDbGFzc05hbWUgPSBgJHtjbGFzc05hbWUgPyBjbGFzc05hbWUgOiAnJ30gJHs6OnRoaXMuX2dldENvbXBvbmVudENsYXNzTmFtZSgpfWAudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IHNob3dTcGlubmVyID0gKHNhdmluZyAmJiAoc2hhcGUgPT09ICdmYWInIHx8IHNoYXBlID09PSAnbWluaS1mYWInIHx8IHNoYXBlID09PSAnaWNvbicpKSB8fCAhc2F2aW5nID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxidXR0b24gYWx0PXtpMThuZXh0LnQobGFiZWwpfSBjbGFzc05hbWU9e3JlbmRlcmVkQ2xhc3NOYW1lfSBkYXRhLWZvY3VzPSdidXR0b24tYWN0aW9uJyBkYXRhLWljb249e2ljb24gJiYgaWNvblBvc2l0aW9uIHx8IFwibm9uZVwifSBkYXRhLXNhdmluZz17c2F2aW5nfSBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgc2F2aW5nfSBpZD17aWR9IHRpdGxlPXtpMThuZXh0LnQobGFiZWwpfSB7Li4ub3RoZXJJbnB1dFByb3BzfSByZWY9J21hdGVyaWFsQnV0dG9uJz5cclxuICAgICAgICAgICAgICAgIHtpY29uICYmIDo6dGhpcy5fcmVuZGVySWNvbigpfVxyXG4gICAgICAgICAgICAgICAgezo6dGhpcy5fcmVuZGVyTGFiZWwoKX1cclxuICAgICAgICAgICAgICAgIHtzaG93U3Bpbm5lciAmJiA8U3Bpbm5lciBjbGFzc05hbWU9J2RvdWJsZS1hY3Rpb24tYnV0dG9uLXNwaW5uZXInIC8+fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5CdXR0b24uZGlzcGxheU5hbWUgPSAnQnV0dG9uJ1xyXG5CdXR0b24uZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xyXG5CdXR0b24ucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xyXG4iXX0=
;