UNPKG

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
/******/ (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