test-bed-time-service
Version:
A time service for the test-bed, producing messages with real time, fictive time and scenario duration.
947 lines (828 loc) • 113 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // install a JSONP callback for chunk loading
/******/ function webpackJsonpCallback(data) {
/******/ var chunkIds = data[0];
/******/ var moreModules = data[1];
/******/ var executeModules = data[2];
/******/
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0, resolves = [];
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(installedChunks[chunkId]) {
/******/ resolves.push(installedChunks[chunkId][0]);
/******/ }
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ for(moduleId in moreModules) {
/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ modules[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/ while(resolves.length) {
/******/ resolves.shift()();
/******/ }
/******/
/******/ // add entry modules from loaded chunk to deferred list
/******/ deferredModules.push.apply(deferredModules, executeModules || []);
/******/
/******/ // run deferred modules when all chunks ready
/******/ return checkDeferredModules();
/******/ };
/******/ function checkDeferredModules() {
/******/ var result;
/******/ for(var i = 0; i < deferredModules.length; i++) {
/******/ var deferredModule = deferredModules[i];
/******/ var fulfilled = true;
/******/ for(var j = 1; j < deferredModule.length; j++) {
/******/ var depId = deferredModule[j];
/******/ if(installedChunks[depId] !== 0) fulfilled = false;
/******/ }
/******/ if(fulfilled) {
/******/ deferredModules.splice(i--, 1);
/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
/******/ }
/******/ }
/******/ return result;
/******/ }
/******/
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // Promise = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ "app": 0
/******/ };
/******/
/******/ var deferredModules = [];
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
/******/ jsonpArray.push = webpackJsonpCallback;
/******/ jsonpArray = jsonpArray.slice();
/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
/******/ var parentJsonpFunction = oldJsonpFunction;
/******/
/******/
/******/ // add entry module to deferred list
/******/ deferredModules.push(["./src/app.ts","vendors~app"]);
/******/ // run deferred modules when ready
/******/ return checkDeferredModules();
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js?!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src/index.js!./src/components/calendar/calendar.css":
/*!****************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src!./src/components/calendar/calendar.css ***!
\****************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(/*! ../../../node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/runtime/api.js")(false);
// Module
exports.push([module.i, ".anim04c {\r\n -webkit-transition: all 0.4s cubic-bezier(0.5, 0.35, 0.15, 1.4);\r\n transition: all 0.4s cubic-bezier(0.5, 0.35, 0.15, 1.4);\r\n}\r\n.cal {\r\n width: 100px;\r\n height: 100px;\r\n position: absolute;\r\n top: 20px;\r\n right: 30px;\r\n text-align: center;\r\n}\r\n/* em {\r\n color: #ed4988;\r\n} */\r\n.cal-outer {\r\n position: relative;\r\n top: 50%;\r\n z-index: 1;\r\n -webkit-transform: translateY(-50%);\r\n transform: translateY(-50%);\r\n cursor: pointer;\r\n}\r\n\r\n.cal-signboard {\r\n width: 100px;\r\n height: 100px;\r\n margin: auto;\r\n color: #fff;\r\n border-radius: 10px;\r\n}\r\n\r\n.cal-front {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n z-index: 3;\r\n background: #ff726b;\r\n text-align: center;\r\n}\r\n.cal-right {\r\n position: absolute;\r\n right: 0;\r\n z-index: 2;\r\n -webkit-transform: rotate(-10deg) translate(7px, 8px);\r\n transform: rotate(-10deg) translate(7px, 8px);\r\n background: #efc94c;\r\n}\r\n.cal-left {\r\n position: absolute;\r\n left: 0;\r\n z-index: 1;\r\n -webkit-transform: rotate(5deg) translate(-4px, 4px);\r\n transform: rotate(5deg) translate(-4px, 4px);\r\n background: #3498db;\r\n}\r\n\r\n.cal-outer:hover .inner {\r\n -webkit-transform: rotate(0) translate(0);\r\n transform: rotate(0) translate(0);\r\n}\r\n\r\n.cal-outer:active .inner {\r\n -webkit-transform: rotate(0) translate(0) scale(0.9);\r\n transform: rotate(0) translate(0) scale(0.9);\r\n}\r\n.cal-outer:active .cal-front .date {\r\n -webkit-transform: scale(2);\r\n}\r\n.cal-outer:active .cal-front .day,\r\n.cal-outer:active .cal-front .month {\r\n visibility: hidden;\r\n opacity: 0;\r\n -webkit-transform: scale(0);\r\n transform: scale(0);\r\n}\r\n.cal-outer:active .cal-right {\r\n -webkit-transform: rotate(-5deg) translateX(80px) scale(0.9);\r\n transform: rotate(-5deg) translateX(80px) scale(0.9);\r\n}\r\n.cal-outer:active .cal-left {\r\n -webkit-transform: rotate(5deg) translateX(-80px) scale(0.9);\r\n transform: rotate(5deg) translateX(-80px) scale(0.9);\r\n}\r\n\r\n.cal-outer:active .calMain {\r\n -webkit-transform: scale(1.8);\r\n opacity: 0;\r\n visibility: hidden;\r\n}\r\n.cal-outer:active .calNormal {\r\n bottom: -30px;\r\n opacity: 1;\r\n visibility: visible;\r\n}\r\n.cal-outer:active .year {\r\n top: -30px;\r\n opacity: 1;\r\n visibility: visible;\r\n letter-spacing: 3px;\r\n}\r\n\r\n.calMain {\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n opacity: 1;\r\n}\r\n.cal-month,\r\n.cal-day {\r\n font-size: 10px;\r\n line-height: 30px;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 3px;\r\n}\r\n.cal-date {\r\n font-size: 40px;\r\n line-height: 40px;\r\n font-weight: 300;\r\n text-transform: uppercase;\r\n letter-spacing: 3px;\r\n}\r\n\r\n.cal-year {\r\n width: 100%;\r\n position: absolute;\r\n top: 0;\r\n font-size: 14px;\r\n line-height: 30px;\r\n font-weight: 300;\r\n text-transform: uppercase;\r\n letter-spacing: 0;\r\n text-align: center;\r\n opacity: 0;\r\n visibility: hidden;\r\n color: #ff726b;\r\n}\r\n.calNormal {\r\n width: 100%;\r\n position: absolute;\r\n bottom: 0;\r\n font-size: 14px;\r\n line-height: 30px;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 3px;\r\n text-align: center;\r\n opacity: 0;\r\n visibility: hidden;\r\n}\r\n", ""]);
/***/ }),
/***/ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js?!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src/index.js!./src/components/digital-clock/digital-clock.css":
/*!**************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src!./src/components/digital-clock/digital-clock.css ***!
\**************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(/*! ../../../node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/runtime/api.js")(false);
// Module
exports.push([module.i, ".digital-clock {\n font-family: 'Share Tech Mono', monospace;\n color: #ffffff;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n color: #daf6ff;\n text-shadow: 0 0 20px #0aafe6, 0 0 20px rgba(10, 175, 230, 0);\n}\n.digital-clock .time {\n letter-spacing: 0.05em;\n padding: 5px 0;\n}", ""]);
/***/ }),
/***/ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js?!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src/index.js!./src/styles.css":
/*!******************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src!./src/styles.css ***!
\******************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(/*! ../node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/runtime/api.js")(false);
// Module
exports.push([module.i, "html,\nbody {\n width: 100%;\n height: 100%;\n font-family: 'Source Sans Pro', sans-serif;\n background: #eee;\n color: #666;\n}\nbody {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.black-theme {\n width: 100%;\n height: 100%;\n background: #0f3854;\n background: radial-gradient(ellipse at center, #0a2e38 0%, #000000 70%);\n background-size: 100%;\n}\n\n.white-theme {\n width: 100%;\n height: 100%;\n}\n\n#clock {\n height: 90%;\n width: 100%;\n margin: auto;\n text-align: center;\n}\n\n.button-group {\n padding: 0 10px;\n}\n\n.clickable {\n cursor: pointer;\n}\n\n.inline {\n display: inline-block;\n}\n\n.side-nav {\n width: 350px;\n}\n\n.black-theme .almost-hidden {\n color: white;\n}\n\n.almost-hidden {\n color: black;\n opacity: 0.2;\n}\n.almost-hidden:hover {\n opacity: 1;\n}\n", ""]);
/***/ }),
/***/ "./src/app.ts":
/*!********************!*\
!*** ./src/app.ts ***!
\********************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var socket_service_1 = __webpack_require__(/*! ./services/socket-service */ "./src/services/socket-service.ts");
__webpack_require__(/*! materialize-css/dist/css/materialize.min.css */ "./node_modules/.registry.npmjs.org/materialize-css/1.0.0/node_modules/materialize-css/dist/css/materialize.min.css");
__webpack_require__(/*! materialize-css/dist/js/materialize.js */ "./node_modules/.registry.npmjs.org/materialize-css/1.0.0/node_modules/materialize-css/dist/js/materialize.js");
__webpack_require__(/*! material-icons/iconfont/material-icons.css */ "./node_modules/.registry.npmjs.org/material-icons/0.3.0/node_modules/material-icons/iconfont/material-icons.css");
__webpack_require__(/*! ./styles.css */ "./src/styles.css");
var mithril_1 = __importDefault(__webpack_require__(/*! mithril */ "./node_modules/.registry.npmjs.org/mithril/1.1.6/node_modules/mithril/mithril.js"));
var layout_1 = __webpack_require__(/*! ./views/layout */ "./src/views/layout.ts");
var clock_1 = __webpack_require__(/*! ./components/clock */ "./src/components/clock.ts");
var digital_clock_1 = __webpack_require__(/*! ./components/digital-clock */ "./src/components/digital-clock/index.ts");
var calendar_1 = __webpack_require__(/*! ./components/calendar/calendar */ "./src/components/calendar/calendar.ts");
var waitForSocketIO = function () {
return new Promise(function (resolve) {
// let iterations = 0;
var handler = window.setInterval(function () {
// iterations++;
var socket = socket_service_1.SocketService.socket;
if (socket.connected) {
// console.warn(`waited ${iterations} iterations for SocketIO to finish loading`);
window.clearInterval(handler);
resolve();
}
}, 1);
});
};
var routingTable = {
'/': {
render: function () { return mithril_1.default(layout_1.Layout, { theme: '.black-theme' }, [mithril_1.default(digital_clock_1.DigitalClock), mithril_1.default(calendar_1.Calendar)]); },
},
'/analog': {
render: function () { return mithril_1.default(layout_1.Layout, { theme: '.white-theme' }, [mithril_1.default(clock_1.Clock), mithril_1.default(calendar_1.Calendar)]); },
},
};
// waitForMaterialize()
// .then(() => waitForSocketIO())
// m.route.prefix("/time-service")
waitForSocketIO().then(function () { return mithril_1.default.route(document.body, '/', routingTable); });
/***/ }),
/***/ "./src/assets/background-clock.png":
/*!*****************************************!*\
!*** ./src/assets/background-clock.png ***!
\*****************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "757129e88db64bb7bb81d01e91246fdd.png";
/***/ }),
/***/ "./src/assets/logo/non-transparent-logo.png":
/*!**************************************************!*\
!*** ./src/assets/logo/non-transparent-logo.png ***!
\**************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__.p + "2967a2152209f992a8b503226b1068d7.png";
/***/ }),
/***/ "./src/components/calendar/calendar.css":
/*!**********************************************!*\
!*** ./src/components/calendar/calendar.css ***!
\**********************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
var content = __webpack_require__(/*! !../../../node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js??ref--5-1!../../../node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src!./calendar.css */ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js?!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src/index.js!./src/components/calendar/calendar.css");
if(typeof content === 'string') content = [[module.i, content, '']];
var transform;
var insertInto;
var options = {"hmr":true}
options.transform = transform
options.insertInto = undefined;
var update = __webpack_require__(/*! ../../../node_modules/.registry.npmjs.org/style-loader/0.23.1/node_modules/style-loader/lib/addStyles.js */ "./node_modules/.registry.npmjs.org/style-loader/0.23.1/node_modules/style-loader/lib/addStyles.js")(content, options);
if(content.locals) module.exports = content.locals;
if(false) {}
/***/ }),
/***/ "./src/components/calendar/calendar.ts":
/*!*********************************************!*\
!*** ./src/components/calendar/calendar.ts ***!
\*********************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
__webpack_require__(/*! ./calendar.css */ "./src/components/calendar/calendar.css");
var sim_state_1 = __webpack_require__(/*! ../../models/sim-state */ "./src/models/sim-state.ts");
var mithril_1 = __importDefault(__webpack_require__(/*! mithril */ "./node_modules/.registry.npmjs.org/mithril/1.1.6/node_modules/mithril/mithril.js"));
var socket_service_1 = __webpack_require__(/*! ../../services/socket-service */ "./src/services/socket-service.ts");
var monthNames = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
];
var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
exports.Calendar = function () {
return {
view: function () {
var trialTime = new Date(sim_state_1.SimulationState.trialTime);
var month = monthNames[trialTime.getUTCMonth()];
var date = trialTime.getUTCDate();
var day = dayNames[trialTime.getUTCDay()];
return mithril_1.default('.cal.anim04c[id=calendar]', [
mithril_1.default('.cal-signboard.cal-outer', [
mithril_1.default('.cal-signboard.cal-front.cal-inner.anim04c', [
mithril_1.default('.calMain.anim04c', [
mithril_1.default('.cal-month.anim04c', mithril_1.default('span', "" + month)),
mithril_1.default('.cal-date.anim04c', mithril_1.default('span', "" + date)),
mithril_1.default('.cal-day.anim04c', mithril_1.default('span', "" + day)),
]),
]),
mithril_1.default('.cal-signboard.cal-left.cal-inner.anim04c'),
mithril_1.default('.cal-signboard.cal-right.cal-inner.anim04c'),
]),
]);
},
oncreate: function () {
socket_service_1.SocketService.socket.on('time', function () { return mithril_1.default.redraw(); });
},
};
};
/***/ }),
/***/ "./src/components/clock.ts":
/*!*********************************!*\
!*** ./src/components/clock.ts ***!
\*********************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var mithril_1 = __importDefault(__webpack_require__(/*! mithril */ "./node_modules/.registry.npmjs.org/mithril/1.1.6/node_modules/mithril/mithril.js"));
var sim_state_1 = __webpack_require__(/*! ../models/sim-state */ "./src/models/sim-state.ts");
var d3_clock_1 = __webpack_require__(/*! d3-clock */ "./node_modules/.registry.npmjs.org/d3-clock/0.1.5/node_modules/d3-clock/dist/index.js");
var socket_service_1 = __webpack_require__(/*! ../services/socket-service */ "./src/services/socket-service.ts");
exports.Clock = function () {
return {
view: function () { return mithril_1.default('.clock[id=clock]'); },
oncreate: function () {
var el = document.getElementById('clock');
var width = el ? Math.min(el.clientHeight, el.clientWidth) : 600;
socket_service_1.SocketService.socket.on('time', function () { return mithril_1.default.redraw(); });
d3_clock_1.d3clock({
// Parent div to put the clock in
target: '#clock',
width: width,
date: function () { return sim_state_1.SimulationState.trialTime; },
// Time zone offset
TZOffset: { hours: 0 },
// Clock face, e.g. sbb, braun, modern, or classic, must be imported
face: d3_clock_1.sbb,
});
},
};
};
/***/ }),
/***/ "./src/components/digital-clock/digital-clock.css":
/*!********************************************************!*\
!*** ./src/components/digital-clock/digital-clock.css ***!
\********************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
var content = __webpack_require__(/*! !../../../node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js??ref--5-1!../../../node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src!./digital-clock.css */ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js?!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src/index.js!./src/components/digital-clock/digital-clock.css");
if(typeof content === 'string') content = [[module.i, content, '']];
var transform;
var insertInto;
var options = {"hmr":true}
options.transform = transform
options.insertInto = undefined;
var update = __webpack_require__(/*! ../../../node_modules/.registry.npmjs.org/style-loader/0.23.1/node_modules/style-loader/lib/addStyles.js */ "./node_modules/.registry.npmjs.org/style-loader/0.23.1/node_modules/style-loader/lib/addStyles.js")(content, options);
if(content.locals) module.exports = content.locals;
if(false) {}
/***/ }),
/***/ "./src/components/digital-clock/digital-clock.ts":
/*!*******************************************************!*\
!*** ./src/components/digital-clock/digital-clock.ts ***!
\*******************************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var mithril_1 = __importDefault(__webpack_require__(/*! mithril */ "./node_modules/.registry.npmjs.org/mithril/1.1.6/node_modules/mithril/mithril.js"));
__webpack_require__(/*! ./digital-clock.css */ "./src/components/digital-clock/digital-clock.css");
var sim_state_1 = __webpack_require__(/*! ../../models/sim-state */ "./src/models/sim-state.ts");
var socket_service_1 = __webpack_require__(/*! ../../services/socket-service */ "./src/services/socket-service.ts");
var utils_1 = __webpack_require__(/*! ../../utils */ "./src/utils/index.ts");
exports.DigitalClock = function () {
var updateSimTime = function () {
var now = Date.now();
var delta = (now - state.updated) * state.speed;
state.updated = now;
var oldTime = state.time;
state.time = new Date(state.time.valueOf() + delta);
if (state.time !== oldTime) {
mithril_1.default.redraw();
}
};
var interval = function () { return 500 / (state.speed || 1); };
var state = {
updated: Date.now(),
time: new Date(),
speed: 1,
handler: -1,
};
return {
oncreate: function () {
state.handler = setInterval(updateSimTime, interval());
socket_service_1.SocketService.socket.on('time', function () {
var oldSpeed = state.speed;
state.time = new Date(sim_state_1.SimulationState.trialTime);
state.speed = sim_state_1.SimulationState.trialTimeSpeed;
if (state.speed === oldSpeed) {
return;
}
clearInterval(state.handler);
state.handler = setInterval(updateSimTime, interval());
});
},
onremove: function () {
clearInterval(state.handler);
},
view: function () {
var mainContainer = document.getElementById('main');
var fontSize = mainContainer.clientWidth / 5;
return mithril_1.default('.digital-clock', { style: "font-size: " + fontSize + "px" }, mithril_1.default('.time', utils_1.formatTime(state.time)));
},
};
};
/***/ }),
/***/ "./src/components/digital-clock/index.ts":
/*!***********************************************!*\
!*** ./src/components/digital-clock/index.ts ***!
\***********************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(__webpack_require__(/*! ./digital-clock */ "./src/components/digital-clock/digital-clock.ts"));
/***/ }),
/***/ "./src/components/time-control.ts":
/*!****************************************!*\
!*** ./src/components/time-control.ts ***!
\****************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var mithril_1 = __importDefault(__webpack_require__(/*! mithril */ "./node_modules/.registry.npmjs.org/mithril/1.1.6/node_modules/mithril/mithril.js"));
var sim_state_1 = __webpack_require__(/*! ../models/sim-state */ "./src/models/sim-state.ts");
var states_1 = __webpack_require__(/*! ../models/states */ "./src/models/states.ts");
var socket_service_1 = __webpack_require__(/*! ../services/socket-service */ "./src/services/socket-service.ts");
var mithril_materialized_1 = __webpack_require__(/*! mithril-materialized */ "./node_modules/.registry.npmjs.org/mithril-materialized/0.11.4/node_modules/mithril-materialized/dist/index.js");
var utils_1 = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
var Controls = function () {
return {
view: function (_a) {
var attrs = _a.attrs;
var socket = attrs.socket, isPaused = attrs.isPaused, canChangeSpeed = attrs.canChangeSpeed;
return [
mithril_1.default(mithril_materialized_1.FlatButton, {
iconName: 'fast_rewind',
onclick: function () { return socket.emit('update', sim_state_1.SimulationState.trialTimeSpeed / 2); },
disabled: !canChangeSpeed,
}),
mithril_1.default(mithril_materialized_1.FlatButton, {
modalId: 'stopPanel',
iconName: 'stop',
disabled: sim_state_1.SimulationState.state === states_1.States.Initialized,
}),
isPaused
? mithril_1.default(mithril_materialized_1.FlatButton, { iconName: 'play_arrow', onclick: function () { return socket.emit('start'); } })
: mithril_1.default(mithril_materialized_1.FlatButton, { iconName: 'pause', onclick: function () { return socket.emit('pause'); } }),
mithril_1.default(mithril_materialized_1.FlatButton, {
iconName: 'fast_forward',
onclick: function () { return socket.emit('update', sim_state_1.SimulationState.trialTimeSpeed * 2); },
disabled: !canChangeSpeed,
}),
];
},
};
};
exports.TimeControl = function () {
var socket = socket_service_1.SocketService.socket;
var startTime = '10:00';
var startDate = new Date();
var newTime = function () {
var _a = startTime.split(':').map(function (v) { return +v; }), hours = _a[0], minutes = _a[1];
return startDate.setUTCHours(hours, minutes, 0, 0);
};
var timeHasNotChanged = function () {
var d = new Date(sim_state_1.SimulationState.trialTime);
return (startTime === utils_1.formatTime(d, false) &&
startDate.getUTCFullYear() === d.getUTCFullYear() &&
startDate.getUTCMonth() === d.getUTCMonth() &&
startDate.getUTCDate() === d.getUTCDate());
};
var onSelect = function (hrs, min) {
startTime = utils_1.padLeft(hrs, 2) + ":" + utils_1.padLeft(min, 2);
};
return {
oninit: function () {
socket.on('stateUpdated', function () { return mithril_1.default.redraw(); });
},
view: function () {
var controls = function () {
switch (sim_state_1.SimulationState.state) {
case states_1.States.Idle:
return mithril_1.default('.row.left', [
mithril_1.default(mithril_materialized_1.FlatButton, {
label: 'Initialise time',
contentClass: 'btn-flat-large',
iconName: 'timer',
iconClass: 'medium',
onclick: function () { return socket.emit('init', newTime()); },
}),
mithril_1.default('.row.left', [
mithril_1.default(mithril_materialized_1.TimePicker, {
label: 'Start time:',
container: '#main',
initialValue: startTime,
twelveHour: false,
onSelect: onSelect,
}),
mithril_1.default(mithril_materialized_1.DatePicker, {
label: 'Start date:',
container: document.getElementById('main'),
onchange: function (d) {
startDate = d;
},
}),
]),
]);
case states_1.States.Initialized:
return mithril_1.default('.row', [
mithril_1.default(Controls, { socket: socket, isPaused: true, canChangeSpeed: false }),
mithril_1.default(mithril_materialized_1.FlatButton, {
label: 'Reset time',
iconName: 'timer_off',
onclick: function () { return socket.emit('reset'); },
}),
]);
case states_1.States.Paused:
return mithril_1.default('.row', [
mithril_1.default(Controls, { socket: socket, isPaused: true, canChangeSpeed: false }),
mithril_1.default('.row.left', [
mithril_1.default(mithril_materialized_1.TimePicker, {
label: 'Updated time:',
container: '#main',
initialValue: startTime,
twelveHour: false,
onSelect: onSelect,
}),
mithril_1.default(mithril_materialized_1.DatePicker, {
label: 'Updated date:',
container: document.getElementById('main'),
initialValue: startDate,
onchange: function (d) {
startDate = d;
},
}),
mithril_1.default(mithril_materialized_1.FlatButton, {
label: 'Update time',
iconName: 'update',
disabled: timeHasNotChanged(),
onclick: function () { return socket.emit('update', 0, newTime()); },
}),
]),
]);
case states_1.States.Started:
return mithril_1.default('.row', [
mithril_1.default(Controls, { socket: socket, isPaused: false, canChangeSpeed: true }),
mithril_1.default('.row', [
mithril_1.default('em', 'Trial Time Speed Factor: ' + sim_state_1.SimulationState.trialTimeSpeed),
sim_state_1.SimulationState.trialTimeSpeed !== 1
? mithril_1.default(mithril_materialized_1.FlatButton, { iconName: 'restore', onclick: function () { return socket.emit('update', 1); } })
: undefined,
]),
]);
case states_1.States.Stopped:
return mithril_1.default('.row', mithril_1.default(mithril_materialized_1.FlatButton, { label: 'Reset time', iconName: 'timer_off', onclick: function () { return socket.emit('reset'); } }));
}
};
return mithril_1.default('.button-group', [controls()]);
},
};
};
/***/ }),
/***/ "./src/models/sim-state.ts":
/*!*********************************!*\
!*** ./src/models/sim-state.ts ***!
\*********************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var states_1 = __webpack_require__(/*! ./states */ "./src/models/states.ts");
exports.SimulationState = {
/**
* The date and time the trialTime was updated as the number of milliseconds
* from the unix epoch, 1 January 1970 00:00:00.000 UTC.
*/
updatedAt: Date.now(),
/**
* The fictive date and time of the simulation / trial as the number of milliseconds
* from the UNIX epoch, 1 January 1970 00:00:00.000 UTC.
*/
trialTime: Date.now(),
/**
* The number of milliseconds from the start of the trial.
*/
timeElapsed: 0,
/**
* Positive number, indicating how fast the simulation / trial time moves with respect
* to the actual time. A value of 0 means a pause, 1 is as fast as real-time.
*/
trialTimeSpeed: 0,
/**
* Current active state
*/
state: states_1.States.Idle,
};
/***/ }),
/***/ "./src/models/states.ts":
/*!******************************!*\
!*** ./src/models/states.ts ***!
\******************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var States;
(function (States) {
States["Idle"] = "Idle";
States["Initialized"] = "Initialized";
States["Started"] = "Started";
States["Paused"] = "Paused";
States["Stopped"] = "Stopped";
})(States = exports.States || (exports.States = {}));
/***/ }),
/***/ "./src/services/socket-service.ts":
/*!****************************************!*\
!*** ./src/services/socket-service.ts ***!
\****************************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var socket_io_client_1 = __importDefault(__webpack_require__(/*! socket.io-client */ "./node_modules/.registry.npmjs.org/socket.io-client/2.2.0/node_modules/socket.io-client/lib/index.js"));
var sim_state_1 = __webpack_require__(/*! ../models/sim-state */ "./src/models/sim-state.ts");
// tslint:disable-next-line:no-console
var log = console.log;
var socket;
var setupSocket = function () {
if (socket) {
return socket;
}
socket = socket_io_client_1.default({
path: '/time-service/socket.io/',
});
socket.on('connect', function () { return log('Connected'); });
socket.on('event', function (data) { return log(data); });
socket.on('disconnect', function () { return log('Disconnected'); });
socket.on('stateUpdated', function (state) {
sim_state_1.SimulationState.state = state;
});
var handler = -1;
socket.on('time', function (time) {
// log(`Time message received: ${time.trialTime}`);
sim_state_1.SimulationState.trialTime = time.trialTime || new Date().setUTCHours(12, 0, 0).valueOf();
sim_state_1.SimulationState.trialTimeSpeed = time.trialTimeSpeed;
sim_state_1.SimulationState.timeElapsed = time.timeElapsed;
window.clearInterval(handler);
if (time.trialTimeSpeed > 0) {
var secDuration_1 = 1000;
handler = window.setInterval(function () {
sim_state_1.SimulationState.trialTime += secDuration_1;
}, secDuration_1 / time.trialTimeSpeed);
}
});
return socket;
};
socket = setupSocket();
exports.SocketService = {
socket: socket || setupSocket(),
};
/***/ }),
/***/ "./src/styles.css":
/*!************************!*\
!*** ./src/styles.css ***!
\************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
var content = __webpack_require__(/*! !../node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js??ref--5-1!../node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src!./styles.css */ "./node_modules/.registry.npmjs.org/css-loader/2.1.1/node_modules/css-loader/dist/cjs.js?!./node_modules/.registry.npmjs.org/postcss-loader/3.0.0/node_modules/postcss-loader/src/index.js!./src/styles.css");
if(typeof content === 'string') content = [[module.i, content, '']];
var transform;
var insertInto;
var options = {"hmr":true}
options.transform = transform
options.insertInto = undefined;
var update = __webpack_require__(/*! ../node_modules/.registry.npmjs.org/style-loader/0.23.1/node_modules/style-loader/lib/addStyles.js */ "./node_modules/.registry.npmjs.org/style-loader/0.23.1/node_modules/style-loader/lib/addStyles.js")(content, options);
if(content.locals) module.exports = content.locals;
if(false) {}
/***/ }),
/***/ "./src/utils/index.ts":
/*!****************************!*\
!*** ./src/utils/index.ts ***!
\****************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Pad left, default with a '0'
*
* @see http://stackoverflow.com/a/10073788/319711
* @param {(string | number)} n
* @param {number} width
* @param {string} [z='0']
* @returns
*/
exports.padLeft = function (n, width, z) {
if (z === void 0) { z = '0'; }
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
};
/** Convert a date to HH:mm */
exports.formatTime = function (t, includeSeconds) {
if (includeSeconds === void 0) { includeSeconds = true; }
return includeSeconds
? exports.padLeft(t.getUTCHours(), 2) + ":" + exports.padLeft(t.getUTCMinutes(), 2) + ":" + exports.padLeft(t.getUTCSeconds(), 2)
: exports.padLeft(t.getUTCHours(), 2) + ":" + exports.padLeft(t.getUTCMinutes(), 2);
};
/***/ }),
/***/ "./src/views/layout.ts":
/*!*****************************!*\
!*** ./src/views/layout.ts ***!
\*****************************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var time_control_1 = __webpack_require__(/*! ../components/time-control */ "./src/components/time-control.ts");
var mithril_materialized_1 = __webpack_require__(/*! mithril-materialized */ "./node_modules/.registry.npmjs.org/mithril-materialized/0.11.4/node_modules/mithril-materialized/dist/index.js");
var mithril_1 = __importDefault(__webpack_require__(/*! mithril */ "./node_modules/.registry.npmjs.org/mithril/1.1.6/node_modules/mithril/mithril.js"));
var non_transparent_logo_png_1 = __importDefault(__webpack_require__(/*! ../assets/logo/non-transparent-logo.png */ "./src/assets/logo/non-transparent-logo.png"));
var background_clock_png_1 = __importDefault(__webpack_require__(/*! ../assets/background-clock.png */ "./src/assets/background-clock.png"));
var materialize_css_1 = __importDefault(__webpack_require__(/*! materialize-css */ "./node_modules/.registry.npmjs.org/materialize-css/1.0.0/node_modules/materialize-css/dist/js/materialize.js"));
var socket_service_1 = __webpack_require__(/*! ../services/socket-service */ "./src/services/socket-service.ts");
var driverLink = 'a[href=http://www.driver-project.eu][target=_blank]';
exports.Layout = function () { return ({
view: function (vnode) {
return mithril_1.default(vnode.attrs.theme, [
mithril_1.default('a.sidenav-trigger.almost-hidden[href=#][data-target=slide-out]', mithril_1.default('i.material-icons', 'menu')),
mithril_1.default('.container[id="main"]', [
mithril_1.default('ul[id=slide-out].sidenav', { style: 'width: 350px;' }, mithril_1.default('li', [
mithril_1.default('.user-view', [
mithril_1.default('.background', mithril_1.default("img[src=" + background_clock_png_1.default + "]")),
mithril_1.default(driverLink, mithril_1.default("img.circle[src=" + non_transparent_logo_png_1.default + "]")),
mithril_1.default(driverLink, mithril_1.default('span.white-text.name', 'DRIVER+')),
]),
]), mithril_1.default('li', mithril_1.default(time_control_1.TimeControl))),
mithril_1.default('.row', vnode.children),
mithril_1.default(mithril_materialized_1.ModalPanel, {
id: 'stopPanel',
title: 'Are you certain you want to stop?',
description: 'After stopping the time service, you will not be able to continue anymore.',
buttons: [
{ label: 'No, bring me back to safety' },
{ label: 'Yes, I am sure!', onclick: function () { return socket_service_1.SocketService.socket.emit('stop'); } },
],
}),
]),
]);
},
oncreate: function () {
var elems = document.querySelectorAll('.sidenav');
materialize_css_1.default.Sidenav.init(elems);
},
}); };
/***/ }),
/***/ 0:
/*!********************!*\
!*** ws (ignored) ***!
\********************/
/*! no static exports found */
/*! all exports used */
/***/ (function(module, exports) {
/* (ignored) */
/***/ })
/******/ });
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY3NzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2RpZ2l0YWwtY2xvY2svZGlnaXRhbC1jbG9jay5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2JhY2tncm91bmQtY2xvY2sucG5nIiwid2VicGFjazovLy8uL3NyYy9hc3NldHMvbG9nby9ub24tdHJhbnNwYXJlbnQtbG9nby5wbmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY3NzP2JiMDciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY2xvY2sudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvZGlnaXRhbC1jbG9jay9kaWdpdGFsLWNsb2NrLmNzcz9jMmZkIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2RpZ2l0YWwtY2xvY2svZGlnaXRhbC1jbG9jay50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9kaWdpdGFsLWNsb2NrL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3RpbWUtY29udHJvbC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbW9kZWxzL3NpbS1zdGF0ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbW9kZWxzL3N0YXRlcy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc2VydmljZXMvc29ja2V0LXNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlcy5jc3M/YTlmZSIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZpZXdzL2xheW91dC50cyIsIndlYnBhY2s6Ly8vd3MgKGlnbm9yZWQpIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFRLG9CQUFvQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0