UNPKG

apeman-react-icon

Version:
291 lines (214 loc) 22.3 kB
(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){ 'use strict' 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){ 'use strict';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 */ 'use strict'; 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 */ 'use strict'; 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 */ 'use strict'; 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=