kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
157 lines (125 loc) • 24.6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = FloatingTimeDisplayFactory;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _icons = require("../icons");
var _defaultSettings = require("../../../constants/default-settings");
var _styledComponents2 = require("../styled-components");
var _dataUtils = require("../../../utils/data-utils");
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
var StyledTimeDisplayWrapper = _styledComponents["default"].div.attrs({
className: 'floating-time-display'
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n bottom: ", ";\n display: flex;\n position: absolute;\n width: 100%;\n margin-left: -", "px;\n justify-content: center;\n pointer-events: none; /* prevent padding from blocking input */\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n"])), function (props) {
return "calc(100% + ".concat(props.theme.bottomPanelGap, "px)");
}, function (props) {
return props.theme.bottomInnerPdSide;
});
var StyledTimeDisplay = _styledComponents["default"].div.attrs({
className: 'floating-time-display__inner'
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n border-radius: ", "px;\n color: ", ";\n display: flex;\n height: ", "px;\n justify-content: center;\n min-width: ", "px;\n opacity: ", ";\n padding: ", ";\n"])), function (props) {
return props.theme.panelBackground;
}, function (props) {
return props.theme.timeDisplayBorderRadius;
}, function (props) {
return props.theme.titleTextColor;
}, function (props) {
return props.theme.timeDisplayHeight;
}, function (props) {
return props.theme.timeDisplayMinWidth;
}, function (props) {
return props.theme.timeDisplayOpacity;
}, function (props) {
return props.theme.timeDisplayPadding;
});
var StyledTimeDisplayGroups = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n align-items: center;\n display: flex;\n flex-direction: row;\n"])));
var StyledTimeDisplayRows = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n justify-content: center;\n"])));
var StyledTimeDisplayTop = _styledComponents["default"].div.attrs({
className: 'animation-control__time-display__top'
})(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: 12px;\n font-weight: 500;\n justify-content: center;\n"])), function (props) {
return props.theme.textColor;
});
var StyledTimeDisplayBottom = _styledComponents["default"].div.attrs({
className: 'animation-control__time-display__bottom'
})(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: 14px;\n font-weight: 500;\n justify-content: center;\n"])), function (props) {
return props.theme.titleTextColor;
});
var StyledTimeValueGroup = _styledComponents["default"].div.attrs({
className: 'animation-control__time-value-group'
})(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"])));
var StyledHorizontalBar = _styledComponents["default"].div.attrs({
className: 'animation-control__horizontal-bar'
})(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0 12px;\n"])));
var TimeDivider = function TimeDivider() {
return /*#__PURE__*/_react["default"].createElement(StyledHorizontalBar, null, /*#__PURE__*/_react["default"].createElement(_icons.Minus, {
height: "12px"
}));
};
var TimeDisplayRow = function TimeDisplayRow(_ref) {
var _ref$timeValues = _ref.timeValues,
timeValues = _ref$timeValues === void 0 ? [] : _ref$timeValues;
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.CenterFlexbox, null, /*#__PURE__*/_react["default"].createElement("div", {
className: "time-value"
}, timeValues[0]), timeValues[1] ? /*#__PURE__*/_react["default"].createElement(TimeDivider, null) : null, timeValues[1] ? /*#__PURE__*/_react["default"].createElement("div", {
className: "time-value"
}, timeValues[1]) : null);
};
function FloatingTimeDisplayFactory() {
var FloatingTimeDisplay = function FloatingTimeDisplay(_ref2) {
var currentTime = _ref2.currentTime,
defaultTimeFormat = _ref2.defaultTimeFormat,
timeFormat = _ref2.timeFormat,
timezone = _ref2.timezone;
var _useMemo = (0, _react.useMemo)(function () {
var groupTime = Array.isArray(currentTime) ? currentTime : [currentTime];
var hasUserFormat = typeof timeFormat === 'string';
var currentFormat = (hasUserFormat ? timeFormat : defaultTimeFormat) || _defaultSettings.DEFAULT_TIME_FORMAT;
var dateFunc = (0, _dataUtils.datetimeFormatter)(timezone);
if (hasUserFormat) {
// dont split time if user defined it
return {
displayDate: groupTime.map(dateFunc(currentFormat)),
displayTime: []
};
}
return groupTime.reduce(function (accu, curr) {
var _currentFormat$split = currentFormat.split(' '),
_currentFormat$split2 = (0, _slicedToArray2["default"])(_currentFormat$split, 2),
dateFormat = _currentFormat$split2[0],
datetimeFormat = _currentFormat$split2[1];
var dateString = dateFunc(dateFormat)(curr);
var timeString = datetimeFormat ? dateFunc(datetimeFormat)(curr) : null;
if (!accu.displayDate.includes(dateString)) {
accu.displayDate.push(dateString);
}
if (timeString) {
accu.displayTime.push(timeString);
}
return accu;
}, {
displayDate: [],
displayTime: []
});
}, [currentTime, timeFormat, defaultTimeFormat, timezone]),
displayDate = _useMemo.displayDate,
displayTime = _useMemo.displayTime;
var twoGroups = displayDate.length === 2 && displayTime.length === 2;
var bottomRow = displayTime.length ? displayTime : displayDate.length ? displayDate : null;
var topRow = displayDate.length && displayTime.length ? displayDate : null;
return /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplay, {
className: "animation-control__time-display"
}, twoGroups ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayGroups, null, /*#__PURE__*/_react["default"].createElement(StyledTimeValueGroup, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, displayDate[0]), /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, displayTime[0])), /*#__PURE__*/_react["default"].createElement(TimeDivider, null), /*#__PURE__*/_react["default"].createElement(StyledTimeValueGroup, null, /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, displayDate[1]), /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, displayTime[1]))) : /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayRows, null, topRow ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayTop, null, /*#__PURE__*/_react["default"].createElement(TimeDisplayRow, {
timeValues: topRow
})) : null, bottomRow ? /*#__PURE__*/_react["default"].createElement(StyledTimeDisplayBottom, null, /*#__PURE__*/_react["default"].createElement(TimeDisplayRow, {
timeValues: bottomRow
})) : null)));
};
return FloatingTimeDisplay;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9hbmltYXRpb24tY29udHJvbC9mbG9hdGluZy10aW1lLWRpc3BsYXkuanMiXSwibmFtZXMiOlsiU3R5bGVkVGltZURpc3BsYXlXcmFwcGVyIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJwcm9wcyIsInRoZW1lIiwiYm90dG9tUGFuZWxHYXAiLCJib3R0b21Jbm5lclBkU2lkZSIsIlN0eWxlZFRpbWVEaXNwbGF5IiwicGFuZWxCYWNrZ3JvdW5kIiwidGltZURpc3BsYXlCb3JkZXJSYWRpdXMiLCJ0aXRsZVRleHRDb2xvciIsInRpbWVEaXNwbGF5SGVpZ2h0IiwidGltZURpc3BsYXlNaW5XaWR0aCIsInRpbWVEaXNwbGF5T3BhY2l0eSIsInRpbWVEaXNwbGF5UGFkZGluZyIsIlN0eWxlZFRpbWVEaXNwbGF5R3JvdXBzIiwiU3R5bGVkVGltZURpc3BsYXlSb3dzIiwiU3R5bGVkVGltZURpc3BsYXlUb3AiLCJ0ZXh0Q29sb3IiLCJTdHlsZWRUaW1lRGlzcGxheUJvdHRvbSIsIlN0eWxlZFRpbWVWYWx1ZUdyb3VwIiwiU3R5bGVkSG9yaXpvbnRhbEJhciIsIlRpbWVEaXZpZGVyIiwiVGltZURpc3BsYXlSb3ciLCJ0aW1lVmFsdWVzIiwiRmxvYXRpbmdUaW1lRGlzcGxheUZhY3RvcnkiLCJGbG9hdGluZ1RpbWVEaXNwbGF5IiwiY3VycmVudFRpbWUiLCJkZWZhdWx0VGltZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImdyb3VwVGltZSIsIkFycmF5IiwiaXNBcnJheSIsImhhc1VzZXJGb3JtYXQiLCJjdXJyZW50Rm9ybWF0IiwiREVGQVVMVF9USU1FX0ZPUk1BVCIsImRhdGVGdW5jIiwiZGlzcGxheURhdGUiLCJtYXAiLCJkaXNwbGF5VGltZSIsInJlZHVjZSIsImFjY3UiLCJjdXJyIiwic3BsaXQiLCJkYXRlRm9ybWF0IiwiZGF0ZXRpbWVGb3JtYXQiLCJkYXRlU3RyaW5nIiwidGltZVN0cmluZyIsImluY2x1ZGVzIiwicHVzaCIsInR3b0dyb3VwcyIsImxlbmd0aCIsImJvdHRvbVJvdyIsInRvcFJvdyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsSUFBTUEsd0JBQXdCLEdBQUdDLDZCQUFPQyxHQUFQLENBQVdDLEtBQVgsQ0FBaUI7QUFDaERDLEVBQUFBLFNBQVMsRUFBRTtBQURxQyxDQUFqQixDQUFILGdYQUdsQixVQUFBQyxLQUFLO0FBQUEsK0JBQW1CQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsY0FBL0I7QUFBQSxDQUhhLEVBT1osVUFBQUYsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZRSxpQkFBaEI7QUFBQSxDQVBPLENBQTlCOztBQWdCQSxJQUFNQyxpQkFBaUIsR0FBR1IsNkJBQU9DLEdBQVAsQ0FBV0MsS0FBWCxDQUFpQjtBQUN6Q0MsRUFBQUEsU0FBUyxFQUFFO0FBRDhCLENBQWpCLENBQUgsMlJBR0QsVUFBQUMsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZSSxlQUFoQjtBQUFBLENBSEosRUFJSixVQUFBTCxLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlLLHVCQUFoQjtBQUFBLENBSkQsRUFLWixVQUFBTixLQUFLO0FBQUEsU0FBSUEsS0FBSyxDQUFDQyxLQUFOLENBQVlNLGNBQWhCO0FBQUEsQ0FMTyxFQU9YLFVBQUFQLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWU8saUJBQWhCO0FBQUEsQ0FQTSxFQVNSLFVBQUFSLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWVEsbUJBQWhCO0FBQUEsQ0FURyxFQVVWLFVBQUFULEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWVMsa0JBQWhCO0FBQUEsQ0FWSyxFQVdWLFVBQUFWLEtBQUs7QUFBQSxTQUFJQSxLQUFL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QUFHaEIsV0FBVyxDQUFDYyxNQUFaLElBQXNCWixXQUFXLENBQUNZLE1BQWxDLEdBQTJDZCxXQUEzQyxHQUF5RCxJQUF4RTtBQUVBLHdCQUNFLGdDQUFDLHdCQUFELHFCQUNFLGdDQUFDLGlCQUFEO0FBQW1CLE1BQUEsU0FBUyxFQUFDO0FBQTdCLE9BQ0dhLFNBQVMsZ0JBQ1IsZ0NBQUMsdUJBQUQscUJBQ0UsZ0NBQUMsb0JBQUQscUJBRUUsZ0NBQUMsb0JBQUQsUUFBdUJiLFdBQVcsQ0FBQyxDQUFELENBQWxDLENBRkYsZUFHRSxnQ0FBQyx1QkFBRCxRQUEwQkUsV0FBVyxDQUFDLENBQUQsQ0FBckMsQ0FIRixDQURGLGVBTUUsZ0NBQUMsV0FBRCxPQU5GLGVBT0UsZ0NBQUMsb0JBQUQscUJBRUUsZ0NBQUMsb0JBQUQsUUFBdUJGLFdBQVcsQ0FBQyxDQUFELENBQWxDLENBRkYsZUFHRSxnQ0FBQyx1QkFBRCxRQUEwQkUsV0FBVyxDQUFDLENBQUQsQ0FBckMsQ0FIRixDQVBGLENBRFEsZ0JBZVIsZ0NBQUMscUJBQUQsUUFDR2MsTUFBTSxnQkFDTCxnQ0FBQyxvQkFBRCxxQkFDRSxnQ0FBQyxjQUFEO0FBQWdCLE1BQUEsVUFBVSxFQUFFQTtBQUE1QixNQURGLENBREssR0FJSCxJQUxOLEVBTUdELFNBQVMsZ0JBQ1IsZ0NBQUMsdUJBQUQscUJBQ0UsZ0NBQUMsY0FBRDtBQUFnQixNQUFBLFVBQVUsRUFBRUE7QUFBNUIsTUFERixDQURRLEdBSU4sSUFWTixDQWhCSixDQURGLENBREY7QUFrQ0QsR0F2RUQ7O0FBeUVBLFNBQU8zQixtQkFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIxIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge01pbnVzfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQge0RFRkFVTFRfVElNRV9GT1JNQVR9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Q2VudGVyRmxleGJveH0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtkYXRldGltZUZvcm1hdHRlcn0gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5cbmNvbnN0IFN0eWxlZFRpbWVEaXNwbGF5V3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdmbG9hdGluZy10aW1lLWRpc3BsYXknXG59KWBcbiAgYm90dG9tOiAke3Byb3BzID0+IGBjYWxjKDEwMCUgKyAke3Byb3BzLnRoZW1lLmJvdHRvbVBhbmVsR2FwfXB4KWB9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tbGVmdDogLSR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm90dG9tSW5uZXJQZFNpZGV9cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheSA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdmbG9hdGluZy10aW1lLWRpc3BsYXlfX2lubmVyJ1xufSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kfTtcbiAgYm9yZGVyLXJhZGl1czogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aW1lRGlzcGxheUJvcmRlclJhZGl1c31weDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGl0bGVUZXh0Q29sb3J9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGltZURpc3BsYXlIZWlnaHR9cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4td2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGltZURpc3BsYXlNaW5XaWR0aH1weDtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50aW1lRGlzcGxheU9wYWNpdHl9O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpbWVEaXNwbGF5UGFkZGluZ307XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheUdyb3VwcyA9IHN0eWxlZC5kaXZgXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5gO1xuXG5jb25zdCBTdHlsZWRUaW1lRGlzcGxheVJvd3MgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZFRpbWVEaXNwbGF5VG9wID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2FuaW1hdGlvbi1jb250cm9sX190aW1lLWRpc3BsYXlfX3RvcCdcbn0pYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuYDtcblxuY29uc3QgU3R5bGVkVGltZURpc3BsYXlCb3R0b20gPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnYW5pbWF0aW9uLWNvbnRyb2xfX3RpbWUtZGlzcGxheV9fYm90dG9tJ1xufSlgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpdGxlVGV4dENvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZFRpbWVWYWx1ZUdyb3VwID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2FuaW1hdGlvbi1jb250cm9sX190aW1lLXZhbHVlLWdyb3VwJ1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuXG5jb25zdCBTdHlsZWRIb3Jpem9udGFsQmFyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2FuaW1hdGlvbi1jb250cm9sX19ob3Jpem9udGFsLWJhcidcbn0pYFxuICBtYXJnaW46IDAgMTJweDtcbmA7XG5cbmNvbnN0IFRpbWVEaXZpZGVyID0gKCkgPT4gKFxuICA8U3R5bGVkSG9yaXpvbnRhbEJhcj5cbiAgICA8TWludXMgaGVpZ2h0PVwiMTJweFwiIC8+XG4gIDwvU3R5bGVkSG9yaXpvbnRhbEJhcj5cbik7XG5cbmNvbnN0IFRpbWVEaXNwbGF5Um93ID0gKHt0aW1lVmFsdWVzID0gW119KSA9PiAoXG4gIDxDZW50ZXJGbGV4Ym94PlxuICAgIDxkaXYgY2xhc3NOYW1lPVwidGltZS12YWx1ZVwiPnt0aW1lVmFsdWVzWzBdfTwvZGl2PlxuICAgIHt0aW1lVmFsdWVzWzFdID8gPFRpbWVEaXZpZGVyIC8+IDogbnVsbH1cbiAgICB7dGltZVZhbHVlc1sxXSA/IDxkaXYgY2xhc3NOYW1lPVwidGltZS12YWx1ZVwiPnt0aW1lVmFsdWVzWzFdfTwvZGl2PiA6IG51bGx9XG4gIDwvQ2VudGVyRmxleGJveD5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEZsb2F0aW5nVGltZURpc3BsYXlGYWN0b3J5KCkge1xuICBjb25zdCBGbG9hdGluZ1RpbWVEaXNwbGF5ID0gKHtjdXJyZW50VGltZSwgZGVmYXVsdFRpbWVGb3JtYXQsIHRpbWVGb3JtYXQsIHRpbWV6b25lfSkgPT4ge1xuICAgIGNvbnN0IHtkaXNwbGF5RGF0ZSwgZGlzcGxheVRpbWV9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBncm91cFRpbWUgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRUaW1lKSA/IGN1cnJlbnRUaW1lIDogW2N1cnJlbnRUaW1lXTtcbiAgICAgIGNvbnN0IGhhc1VzZXJGb3JtYXQgPSB0eXBlb2YgdGltZUZvcm1hdCA9PT0gJ3N0cmluZyc7XG4gICAgICBjb25zdCBjdXJyZW50Rm9ybWF0ID0gKGhhc1VzZXJGb3JtYXQgPyB0aW1lRm9ybWF0IDogZGVmYXVsdFRpbWVGb3JtYXQpIHx8IERFRkFVTFRfVElNRV9GT1JNQVQ7XG4gICAgICBjb25zdCBkYXRlRnVuYyA9IGRhdGV0aW1lRm9ybWF0dGVyKHRpbWV6b25lKTtcblxuICAgICAgaWYgKGhhc1VzZXJGb3JtYXQpIHtcbiAgICAgICAgLy8gZG9udCBzcGxpdCB0aW1lIGlmIHVzZXIgZGVmaW5lZCBpdFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3BsYXlEYXRlOiBncm91cFRpbWUubWFwKGRhdGVGdW5jKGN1cnJlbnRGb3JtYXQpKSxcbiAgICAgICAgICBkaXNwbGF5VGltZTogW11cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBncm91cFRpbWUucmVkdWNlKFxuICAgICAgICAoYWNjdSwgY3VycikgPT4ge1xuICAgICAgICAgIGNvbnN0IFtkYXRlRm9ybWF0LCBkYXRldGltZUZvcm1hdF0gPSBjdXJyZW50Rm9ybWF0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGVGdW5jKGRhdGVGb3JtYXQpKGN1cnIpO1xuICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBkYXRldGltZUZvcm1hdCA/IGRhdGVGdW5jKGRhdGV0aW1lRm9ybWF0KShjdXJyKSA6IG51bGw7XG5cbiAgICAgICAgICBpZiAoIWFjY3UuZGlzcGxheURhdGUuaW5jbHVkZXMoZGF0ZVN0cmluZykpIHtcbiAgICAgICAgICAgIGFjY3UuZGlzcGxheURhdGUucHVzaChkYXRlU3RyaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICAgICAgICAgIGFjY3UuZGlzcGxheVRpbWUucHVzaCh0aW1lU3RyaW5nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgICAgfSxcbiAgICAgICAge2Rpc3BsYXlEYXRlOiBbXSwgZGlzcGxheVRpbWU6IFtdfVxuICAgICAgKTtcbiAgICB9LCBbY3VycmVudFRpbWUsIHRpbWVGb3JtYXQsIGRlZmF1bHRUaW1lRm9ybWF0LCB0aW1lem9uZV0pO1xuXG4gICAgY29uc3QgdHdvR3JvdXBzID0gZGlzcGxheURhdGUubGVuZ3RoID09PSAyICYmIGRpc3BsYXlUaW1lLmxlbmd0aCA9PT0gMjtcbiAgICBjb25zdCBib3R0b21Sb3cgPSBkaXNwbGF5VGltZS5sZW5ndGggPyBkaXNwbGF5VGltZSA6IGRpc3BsYXlEYXRlLmxlbmd0aCA/IGRpc3BsYXlEYXRlIDogbnVsbDtcbiAgICBjb25zdCB0b3BSb3cgPSBkaXNwbGF5RGF0ZS5sZW5ndGggJiYgZGlzcGxheVRpbWUubGVuZ3RoID8gZGlzcGxheURhdGUgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheSBjbGFzc05hbWU9XCJhbmltYXRpb24tY29udHJvbF9fdGltZS1kaXNwbGF5XCI+XG4gICAgICAgICAge3R3b0dyb3VwcyA/IChcbiAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheUdyb3Vwcz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRpbWVWYWx1ZUdyb3VwPlxuICAgICAgICAgICAgICAgIHsvKiBUaW1lIFN0YXJ0ICovfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD57ZGlzcGxheURhdGVbMF19PC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlCb3R0b20+e2Rpc3BsYXlUaW1lWzBdfTwvU3R5bGVkVGltZURpc3BsYXlCb3R0b20+XG4gICAgICAgICAgICAgIDwvU3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICAgIDxUaW1lRGl2aWRlciAvPlxuICAgICAgICAgICAgICA8U3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICAgICAgey8qIFRpbWUgRW5kICovfVxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD57ZGlzcGxheURhdGVbMV19PC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlCb3R0b20+e2Rpc3BsYXlUaW1lWzFdfTwvU3R5bGVkVGltZURpc3BsYXlCb3R0b20+XG4gICAgICAgICAgICAgIDwvU3R5bGVkVGltZVZhbHVlR3JvdXA+XG4gICAgICAgICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5R3JvdXBzPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U3R5bGVkVGltZURpc3BsYXlSb3dzPlxuICAgICAgICAgICAgICB7dG9wUm93ID8gKFxuICAgICAgICAgICAgICAgIDxTdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgICAgIDxUaW1lRGlzcGxheVJvdyB0aW1lVmFsdWVzPXt0b3BSb3d9IC8+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRUaW1lRGlzcGxheVRvcD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtib3R0b21Sb3cgPyAoXG4gICAgICAgICAgICAgICAgPFN0eWxlZFRpbWVEaXNwbGF5Qm90dG9tPlxuICAgICAgICAgICAgICAgICAgPFRpbWVEaXNwbGF5Um93IHRpbWVWYWx1ZXM9e2JvdHRvbVJvd30gLz5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5Qm90dG9tPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU3R5bGVkVGltZURpc3BsYXlSb3dzPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkVGltZURpc3BsYXk+XG4gICAgICA8L1N0eWxlZFRpbWVEaXNwbGF5V3JhcHBlcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBGbG9hdGluZ1RpbWVEaXNwbGF5O1xufVxuIl19