apeman-react-icon
Version:
apeman react package for icon components.
291 lines (214 loc) • 22.3 kB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
const React = require('react')
const ReactDOM = require('react-dom')
const Demo = require('./demo.component.js').default
window.addEventListener('load', function onLoad () {
window.React = React
let DemoFactory = React.createFactory(Demo)
ReactDOM.render(DemoFactory(), document.getElementById('demo-wrap'))
})
},{"./demo.component.js":2,"react":"react","react-dom":"react-dom"}],2:[function(require,module,exports){
;Object.defineProperty(exports,'__esModule',{value:true});var _react=require('react');var _react2=_interopRequireDefault(_react);var _ap_icon=require('../../lib/ap_icon');var _ap_icon2=_interopRequireDefault(_ap_icon);var _ap_ion_icon=require('../../lib/ap_ion_icon');var _ap_ion_icon2=_interopRequireDefault(_ap_ion_icon);var _ap_fa_icon=require('../../lib/ap_fa_icon');var _ap_fa_icon2=_interopRequireDefault(_ap_fa_icon);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var Demo=_react2.default.createClass({displayName:'Demo',render:function render(){return _react2.default.createElement('div',null,_react2.default.createElement('div',null,_react2.default.createElement(_ap_fa_icon2.default,{type:'money'}),_react2.default.createElement(_ap_fa_icon2.default,{type:'pencil'}),_react2.default.createElement(_ap_fa_icon2.default,{type:'phone'})),_react2.default.createElement('div',null,_react2.default.createElement(_ap_ion_icon2.default,{type:'ios-circle-filled'}),_react2.default.createElement(_ap_ion_icon2.default,{type:'ios-circle-outline'}),_react2.default.createElement(_ap_ion_icon2.default,{type:'ios-checkmark-outline'}),_react2.default.createElement(_ap_ion_icon2.default,{type:'ios-checkmark'})),_react2.default.createElement('div',null,_react2.default.createElement(_ap_icon2.default,{className:'ion an-invalid-style-class'})))}});exports.default=Demo;
},{"../../lib/ap_fa_icon":3,"../../lib/ap_icon":4,"../../lib/ap_ion_icon":5,"react":"react"}],3:[function(require,module,exports){
/**
* Icon for font awesome.
* @class ApFaIcon
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _ap_icon = require('./ap_icon');
var _ap_icon2 = _interopRequireDefault(_ap_icon);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @lends ApFaIcon */
var ApFaIcon = _react2.default.createClass({
displayName: 'ApFaIcon',
// --------------------
// Specs
// --------------------
propTypes: {
type: _react.PropTypes.string.isRequired
},
mixins: [],
statics: {},
getInitialState: function getInitialState() {
return {};
},
getDefaultProps: function getDefaultProps() {
return {
type: null
};
},
render: function render() {
var s = this;
var props = s.props;
return _react2.default.createElement(_ap_icon2.default, { className: (0, _classnames2.default)('ap-fa-icon', 'fa', props.className, 'fa-' + props.type),
style: Object.assign({}, props.style) });
}
});
exports.default = ApFaIcon;
},{"./ap_icon":4,"classnames":"classnames","react":"react"}],4:[function(require,module,exports){
/**
* apeman react package for icon components.
* @class ApIcon
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _apemanReactMixins = require('apeman-react-mixins');
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var assertCache = {};
/** @lends ApIcon */
var ApIcon = _react2.default.createClass({
displayName: 'ApIcon',
// --------------------
// Specs
// --------------------
propTypes: {},
mixins: [_apemanReactMixins.ApPureMixin],
statics: {
/**
* Check if has style.
* @param className
*/
hasStyleWithClass: function hasStyleWithClass(className) {
var styleSheets = document.styleSheets || [];
for (var i = 0; i < styleSheets.length; i++) {
var styleSheet = styleSheets[i];
var rules = styleSheet.rules || styleSheet.cssRules || [];
for (var j = 0; j < rules.length; j++) {
var rule = rules[j];
var selectorText = rule.selectorText;
var hit = selectorText && new RegExp('.' + className).test(selectorText);
if (hit) {
return true;
}
}
}
return false;
}
},
getInitialState: function getInitialState() {
return {};
},
getDefaultProps: function getDefaultProps() {
return {};
},
render: function render() {
var s = this;
var props = s.props;
return _react2.default.createElement('i', { className: (0, _classnames2.default)('ap-icon', props.className),
style: Object.assign({}, props.style) });
},
// --------------------
// Lifecycle
// --------------------
componentDidMount: function componentDidMount() {
var s = this;
var props = s.props;
s.assertClassName(props.className);
},
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
var s = this;
if (nextProps.hasOwnProperty('className')) {
s.assertClassName(nextProps.className);
}
},
componentWillUnmount: function componentWillUnmount() {
var s = this;
clearTimeout(s._assertTimer);
},
// ------------------
// Helper
// ------------------
assertClassName: function assertClassName(className) {
if (!className) {
return;
}
var s = this;
clearTimeout(s._assertTimer);
s._assertTimer = setTimeout(function () {
var isMounted = s.isMounted();
if (!isMounted) {
return;
}
className.split(/\s/g).forEach(function (className) {
if (!className) {
return;
}
if (assertCache.hasOwnProperty(className)) {
return;
}
if (/^ap/.test(className)) {
return;
}
var valid = ApIcon.hasStyleWithClass(className);
if (!valid) {
console.warn('[ApIcon] No style found for class "' + className + '". You may misspell the name or miss some stylesheets.');
}
assertCache[className] = valid;
});
}, 100);
},
// ------------------
// Private
// ------------------
_assertTimer: -1
});
exports.default = ApIcon;
},{"apeman-react-mixins":"apeman-react-mixins","classnames":"classnames","react":"react"}],5:[function(require,module,exports){
/**
* Icon for font awesome.
* @class ApIonIcon
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _ap_icon = require('./ap_icon');
var _ap_icon2 = _interopRequireDefault(_ap_icon);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @lends ApIonIcon */
var ApIonIcon = _react2.default.createClass({
displayName: 'ApIonIcon',
// --------------------
// Specs
// --------------------
propTypes: {
type: _react.PropTypes.string.isRequired
},
mixins: [],
statics: {},
getInitialState: function getInitialState() {
return {};
},
getDefaultProps: function getDefaultProps() {
return {
type: null
};
},
render: function render() {
var s = this;
var props = s.props;
return _react2.default.createElement(_ap_icon2.default, { className: (0, _classnames2.default)('ap-ion-icon', 'ion', props.className, 'ion-' + props.type),
style: Object.assign({}, props.style) });
}
});
exports.default = ApIonIcon;
},{"./ap_icon":4,"classnames":"classnames","react":"react"}]},{},[1])
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy5udm0vdmVyc2lvbnMvbm9kZS92Ni4wLjAvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJkb2MvZGVtby9kZW1vLmJyb3dzZXIuanMiLCIvVXNlcnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LWljb24vZG9jL2RlbW8vZGVtby5jb21wb25lbnQuanN4IiwiL1VzZXJzL29rdW5pc2hpbmlzaGkvUHJvamVjdHMvYXBlbWFuLXByb2plY3RzL2FwZW1hbi1yZWFjdC1pY29uL2xpYi9hcF9mYV9pY29uLmpzeCIsIi9Vc2Vycy9va3VuaXNoaW5pc2hpL1Byb2plY3RzL2FwZW1hbi1wcm9qZWN0cy9hcGVtYW4tcmVhY3QtaWNvbi9saWIvYXBfaWNvbi5qc3giLCIvVXNlcnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LWljb24vbGliL2FwX2lvbl9pY29uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBLGEseURBRUEsNEIsMkNBQ0EsMEMsK0NBQ0Esa0QsdURBQ0EsZ0QsdUlBRUEsSUFBTSxLQUFPLGdCQUFNLFdBQU4sQ0FBa0Isb0JBQzdCLE1BRDZCLGtCQUNuQixDQUNSLE9BQ0UseUNBQ0UseUNBQ0Usb0RBQVUsS0FBSyxPQUFmLEVBREYsQ0FFRSxvREFBVSxLQUFLLFFBQWYsRUFGRixDQUdFLG9EQUFVLEtBQUssT0FBZixFQUhGLENBREYsQ0FNRSx5Q0FDRSxxREFBVyxLQUFLLG1CQUFoQixFQURGLENBRUUscURBQVcsS0FBSyxvQkFBaEIsRUFGRixDQUdFLHFEQUFXLEtBQUssdUJBQWhCLEVBSEYsQ0FJRSxxREFBVyxLQUFLLGVB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VztBQUNULFVBQU0saUJBQU0sTUFBTixDQUFhO0FBRFYsR0FOdUI7O0FBVWxDLFVBQVEsRUFWMEI7O0FBWWxDLFdBQVMsRUFaeUI7O0FBY2xDLGlCQWRrQyw2QkFjZjtBQUNqQixXQUFPLEVBQVA7QUFDRCxHQWhCaUM7QUFrQmxDLGlCQWxCa0MsNkJBa0JmO0FBQ2pCLFdBQU87QUFDTCxZQUFNO0FBREQsS0FBUDtBQUdELEdBdEJpQztBQXdCbEMsUUF4QmtDLG9CQXdCeEI7QUFDUixRQUFNLElBQUksSUFBVjtBQURRLFFBRUYsS0FGRSxHQUVRLENBRlIsQ0FFRixLQUZFOzs7QUFJUixXQUNFLG1EQUFRLFdBQVksMEJBQVcsYUFBWCxFQUEwQixLQUExQixFQUFpQyxNQUFNLFNBQXZDLFdBQ04sTUFBTSxJQURBLENBQXBCO0FBRVEsYUFBUSxPQUFPLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLE1BQU0sS0FBeEIsQ0FGaEIsR0FERjtBQU1EO0FBbENpQyxDQUFsQixDQUFsQjs7a0JBcUNlLFMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKVxuY29uc3QgUmVhY3RET00gPSByZXF1aXJlKCdyZWFjdC1kb20nKVxuXG5jb25zdCBEZW1vID0gcmVxdWlyZSgnLi9kZW1vLmNvbXBvbmVudC5qcycpLmRlZmF1bHRcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiBvbkxvYWQgKCkge1xuICB3aW5kb3cuUmVhY3QgPSBSZWFjdFxuICBsZXQgRGVtb0ZhY3RvcnkgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KERlbW8pXG4gIFJlYWN0RE9NLnJlbmRlcihEZW1vRmFjdG9yeSgpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVtby13cmFwJykpXG59KVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBBcEljb24gZnJvbSAnLi4vLi4vbGliL2FwX2ljb24nXG5pbXBvcnQgQXBJb25JY29uIGZyb20gJy4uLy4uL2xpYi9hcF9pb25faWNvbidcbmltcG9ydCBBcEZhSWNvbiBmcm9tICcuLi8uLi9saWIvYXBfZmFfaWNvbidcblxuY29uc3QgRGVtbyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyICgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8QXBGYUljb24gdHlwZT1cIm1vbmV5XCIvPlxuICAgICAgICAgIDxBcEZhSWNvbiB0eXBlPVwicGVuY2lsXCIvPlxuICAgICAgICAgIDxBcEZhSWNvbiB0eXBlPVwicGhvbmVcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxBcElvbkljb24gdHlwZT1cImlvcy1jaXJjbGUtZmlsbGVkXCIvPlxuICAgICAgICAgIDxBcElvbkljb24gdHlwZT1cImlvcy1jaXJjbGUtb3V0bGluZVwiLz5cbiAgICAgICAgICA8QXBJb25JY29uIHR5cGU9XCJpb3MtY2hlY2ttYXJrLW91dGxpbmVcIi8+XG4gICAgICAgICAgPEFwSW9uSWNvbiB0eXBlPVwiaW9zLWNoZWNrbWFya1wiLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPEFwSWNvbiBjbGFzc05hbWU9XCJpb24gYW4taW52YWxpZC1zdHlsZS1jbGFzc1wiLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IERlbW9cbiIsIi8qKlxuICogSWNvbiBmb3IgZm9udCBhd2Vzb21lLlxuICogQGNsYXNzIEFwRmFJY29uXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBSZWFjdCwge1Byb3BUeXBlcyBhcyB0eXBlc30gZnJvbSAncmVhY3QnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuXG5pbXBvcnQgQXBJY29uIGZyb20gJy4vYXBfaWNvbidcblxuLyoqIEBsZW5kcyBBcEZhSWNvbiAqL1xuY29uc3QgQXBGYUljb24gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm9wVHlwZXM6IHtcbiAgICB0eXBlOiB0eXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9LFxuXG4gIG1peGluczogW10sXG5cbiAgc3RhdGljczoge30sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge31cbiAgfSxcblxuICBnZXREZWZhdWx0UHJvcHMgKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxBcEljb24gY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtZmEtaWNvbicsICdmYScsIHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICBgZmEtJHtwcm9wcy50eXBlfWApIH1cbiAgICAgICAgICAgICAgc3R5bGU9eyBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5zdHlsZSkgfT5cbiAgICAgIDwvQXBJY29uPlxuICAgIClcbiAgfVxufSlcblxuZXhwb3J0IGRlZmF1bHQgQXBGYUljb25cbiIsIi8qKlxuICogYXBlbWFuIHJlYWN0IHBhY2thZ2UgZm9yIGljb24gY29tcG9uZW50cy5cbiAqIEBjbGFzcyBBcEljb25cbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7QXBQdXJlTWl4aW59IGZyb20gJ2FwZW1hbi1yZWFjdC1taXhpbnMnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuXG5sZXQgYXNzZXJ0Q2FjaGUgPSB7fVxuXG4vKiogQGxlbmRzIEFwSWNvbiAqL1xuY29uc3QgQXBJY29uID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNwZWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvcFR5cGVzOiB7fSxcblxuICBtaXhpbnM6IFtcbiAgICBBcFB1cmVNaXhpblxuICBdLFxuXG4gIHN0YXRpY3M6IHtcbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBoYXMgc3R5bGUuXG4gICAgICogQHBhcmFtIGNsYXNzTmFtZVxuICAgICAqL1xuICAgIGhhc1N0eWxlV2l0aENsYXNzIChjbGFzc05hbWUpIHtcbiAgICAgIGxldCBzdHlsZVNoZWV0cyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzIHx8IFtdXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbIGkgXVxuICAgICAgICBsZXQgcnVsZXMgPSBzdHlsZVNoZWV0LnJ1bGVzIHx8IHN0eWxlU2hlZXQuY3NzUnVsZXMgfHwgW11cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBydWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGxldCBydWxlID0gcnVsZXNbIGogXVxuICAgICAgICAgIGxldCBzZWxlY3RvclRleHQgPSBydWxlLnNlbGVjdG9yVGV4dFxuICAgICAgICAgIGxldCBoaXQgPSBzZWxlY3RvclRleHQgJiYgbmV3IFJlZ0V4cChgXFwuJHtjbGFzc05hbWV9YCkudGVzdChzZWxlY3RvclRleHQpXG4gICAgICAgICAgaWYgKGhpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBnZXRJbml0aWFsU3RhdGUgKCkge1xuICAgIHJldHVybiB7fVxuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wcyAoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH0sXG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGkgY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtaWNvbicsIHByb3BzLmNsYXNzTmFtZSkgfVxuICAgICAgICAgc3R5bGU9e09iamVjdC5hc3NpZ24oe30sIHByb3BzLnN0eWxlKX0+XG4gICAgICA8L2k+XG4gICAgKVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gICAgcy5hc3NlcnRDbGFzc05hbWUocHJvcHMuY2xhc3NOYW1lKVxuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykpIHtcbiAgICAgIHMuYXNzZXJ0Q2xhc3NOYW1lKG5leHRQcm9wcy5jbGFzc05hbWUpXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGNsZWFyVGltZW91dChzLl9hc3NlcnRUaW1lcilcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSGVscGVyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGFzc2VydENsYXNzTmFtZSAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGNsZWFyVGltZW91dChzLl9hc3NlcnRUaW1lcilcbiAgICBzLl9hc3NlcnRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGV0IGlzTW91bnRlZCA9IHMuaXNNb3VudGVkKClcbiAgICAgIGlmICghaXNNb3VudGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2xhc3NOYW1lLnNwbGl0KC9cXHMvZykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFzc2VydENhY2hlLmhhc093blByb3BlcnR5KGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoL15hcC8udGVzdChjbGFzc05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbGlkID0gQXBJY29uLmhhc1N0eWxlV2l0aENsYXNzKGNsYXNzTmFtZSlcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW0FwSWNvbl0gTm8gc3R5bGUgZm91bmQgZm9yIGNsYXNzIFwiJHtjbGFzc05hbWV9XCIuIFlvdSBtYXkgbWlzc3BlbGwgdGhlIG5hbWUgb3IgbWlzcyBzb21lIHN0eWxlc2hlZXRzLmApXG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0Q2FjaGVbIGNsYXNzTmFtZSBdID0gdmFsaWRcbiAgICAgIH0pXG4gICAgfSwgMTAwKVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIF9hc3NlcnRUaW1lcjogLTFcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEFwSWNvblxuIiwiLyoqXG4gKiBJY29uIGZvciBmb250IGF3ZXNvbWUuXG4gKiBAY2xhc3MgQXBJb25JY29uXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBSZWFjdCwge1Byb3BUeXBlcyBhcyB0eXBlc30gZnJvbSAncmVhY3QnXG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IEFwSWNvbiBmcm9tICcuL2FwX2ljb24nXG5cbi8qKiBAbGVuZHMgQXBJb25JY29uICovXG5jb25zdCBBcElvbkljb24gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm9wVHlwZXM6IHtcbiAgICB0eXBlOiB0eXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9LFxuXG4gIG1peGluczogW10sXG5cbiAgc3RhdGljczoge30sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge31cbiAgfSxcblxuICBnZXREZWZhdWx0UHJvcHMgKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxBcEljb24gY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtaW9uLWljb24nLCAnaW9uJywgcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgIGBpb24tJHtwcm9wcy50eXBlfWApIH1cbiAgICAgICAgICAgICAgc3R5bGU9eyBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5zdHlsZSkgfT5cbiAgICAgIDwvQXBJY29uPlxuICAgIClcbiAgfVxufSlcblxuZXhwb3J0IGRlZmF1bHQgQXBJb25JY29uXG4iXX0=