From ddcc8debc3be58b22a4be04a3b0749b1ad8bedb2 Mon Sep 17 00:00:00 2001 From: Gijsjan Date: Thu, 19 Jul 2018 16:13:43 +0200 Subject: [PATCH] Make multiple bands with different event sets possible --- build/bundle.js | 56 +- build/src/constants.d.ts | 3 +- build/src/index.d.ts | 5 +- build/src/models/config.d.ts | 16 +- build/src/models/domain.config.d.ts | 17 +- build/src/models/domain.d.ts | 7 +- build/src/models/props.d.ts | 8 +- build/src/utils/aggregate.worker.d.ts | 3 - build/src/utils/dates.d.ts | 2 +- build/src/utils/events.worker.d.ts | 10 +- .../band/events/event/interval/index.d.ts | 6 +- .../events/event/point-in-time/index.d.ts | 4 +- build/src/views/band/rulers/index.d.ts | 2 +- build/src/views/band/sparkline/index.d.ts | 12 - build/src/views/indicator/index.d.ts | 3 +- data/explorers.json | 18 +- data/floods.json | 3128 +++++++------- data/political-philosophy.json | 54 +- index.floods.html | 57 +- index.html | 56 +- index.political.philosophy.html | 27 +- package-lock.json | 3801 +++++++++++------ package.json | 4 +- src/constants.ts | 10 +- src/index.ts | 39 +- src/models/config.ts | 25 +- src/models/domain.config.ts | 42 +- src/models/domain.ts | 21 +- src/models/props.ts | 74 +- src/utils/aggregate.worker.ts | 70 +- src/utils/create-element.ts | 1 + src/utils/events.worker.ts | 19 +- src/views/band/events/event-segment.ts | 4 +- src/views/band/events/event/interval/index.ts | 12 +- .../band/events/event/point-in-time/index.ts | 5 +- src/views/band/events/index.ts | 4 +- src/views/band/events/ruler-segment.ts | 2 +- src/views/band/index.ts | 20 +- src/views/band/minimap/index.ts | 31 +- src/views/band/rulers/index.ts | 15 +- src/views/band/sparkline/index.ts | 68 - src/views/band/sparklineOLD/index.ts | 68 + src/views/indicator/index.ts | 10 +- 43 files changed, 4468 insertions(+), 3371 deletions(-) delete mode 100644 build/src/utils/aggregate.worker.d.ts delete mode 100644 build/src/views/band/sparkline/index.d.ts delete mode 100644 src/views/band/sparkline/index.ts create mode 100644 src/views/band/sparklineOLD/index.ts diff --git a/build/bundle.js b/build/bundle.js index 7dc2377..7de41d8 100644 --- a/build/bundle.js +++ b/build/bundle.js @@ -113,7 +113,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EVENT_MIN_SPACE = 160;\nexports.EVENT_HEIGHT = 14;\nexports.EVENT_ROW_HEIGHT = 20;\nexports.DATE_BAR_HEIGHT = exports.EVENT_ROW_HEIGHT;\nexports.RULER_LABELS_HEIGHT = 60;\nexports.CENTER_CHANGE = 'CENTER_CHANGE';\nexports.CENTER_CHANGE_DONE = 'CENTER_CHANGE_DONE';\nclass RawSegment {\n}\nexports.RawSegment = RawSegment;\n\n\n//# sourceURL=webpack://Timeline/./src/constants.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EVENT_MIN_SPACE = 160;\nexports.EVENT_HEIGHT = 14;\nexports.EVENT_ROW_HEIGHT = 20;\nexports.DATE_BAR_HEIGHT = exports.EVENT_ROW_HEIGHT;\nexports.RULER_LABELS_HEIGHT = 60;\nexports.CENTER_CHANGE = 'CENTER_CHANGE';\nexports.CENTER_CHANGE_DONE = 'CENTER_CHANGE_DONE';\nclass RawSegment {\n}\nexports.RawSegment = RawSegment;\nexports.colors = [\n 'rgba(211,84,0',\n 'rgba(219,10,91',\n 'rgba(31,58,147',\n 'rgba(0,128,0'\n].map(color => (opacity = 1) => `${color},${opacity})`);\n\n\n//# sourceURL=webpack://Timeline/./src/constants.ts?"); /***/ }), @@ -137,7 +137,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst props_1 = __webpack_require__(/*! ./models/props */ \"./src/models/props.ts\");\nconst config_1 = __webpack_require__(/*! ./models/config */ \"./src/models/config.ts\");\nexports.TimelineConfig = config_1.default;\nconst band_1 = __webpack_require__(/*! ./views/band */ \"./src/views/band/index.ts\");\nconst indicator_1 = __webpack_require__(/*! ./views/indicator */ \"./src/views/indicator/index.ts\");\nconst create_element_1 = __webpack_require__(/*! ./utils/create-element */ \"./src/utils/create-element.ts\");\nconst index_1 = __webpack_require__(/*! ./utils/index */ \"./src/utils/index.ts\");\nconst events_worker_1 = __webpack_require__(/*! ./utils/events.worker */ \"./src/utils/events.worker.ts\");\nexports.orderEvents = events_worker_1.orderEvents;\nconst api_1 = __webpack_require__(/*! ./api */ \"./src/api.ts\");\nconst event_bus_1 = __webpack_require__(/*! ./event-bus */ \"./src/event-bus.ts\");\nclass Timeline extends api_1.default {\n constructor(config) {\n super();\n this.reload = (config) => {\n config = config != null ? config : props_1.default.config;\n props_1.default.init(config);\n this.removeChildren();\n this.renderBands();\n };\n this.debouncedReload = index_1.debounce(this.reload, 600);\n this.appendToWrapper = (child) => this.wrapper.appendChild(child.render());\n props_1.default.init(config);\n config.rootElement.appendChild(this.render());\n window.addEventListener('resize', () => {\n this.removeChildren();\n this.debouncedReload();\n });\n }\n removeChildren() {\n event_bus_1.default.flush();\n Array\n .from(this.wrapper.children)\n .forEach(child => this.wrapper.removeChild(child));\n }\n render() {\n this.wrapper = create_element_1.default('div', 'wrapper', [\n 'background-color: teal',\n 'box-sizing: border-box',\n 'height: 100%',\n 'overflow: hidden',\n 'position: relative',\n 'user-select: none',\n 'width: 100%',\n ]);\n this.renderBands();\n return this.wrapper;\n }\n renderBands() {\n this.bands = props_1.default.domains.map(d => new band_1.default(d));\n this.bands.forEach(this.appendToWrapper);\n this.renderIndicators();\n }\n renderIndicators() {\n this.bands\n .filter(band => band.domain.config.hasIndicatorFor != null)\n .map(band => new indicator_1.default(band.domain, this.bands[band.domain.config.hasIndicatorFor].domain))\n .forEach(this.appendToWrapper);\n }\n}\nexports.default = Timeline;\n\n\n//# sourceURL=webpack://Timeline/./src/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst props_1 = __webpack_require__(/*! ./models/props */ \"./src/models/props.ts\");\nconst config_1 = __webpack_require__(/*! ./models/config */ \"./src/models/config.ts\");\nexports.TimelineConfig = config_1.default;\nconst band_1 = __webpack_require__(/*! ./views/band */ \"./src/views/band/index.ts\");\nconst indicator_1 = __webpack_require__(/*! ./views/indicator */ \"./src/views/indicator/index.ts\");\nconst create_element_1 = __webpack_require__(/*! ./utils/create-element */ \"./src/utils/create-element.ts\");\nconst index_1 = __webpack_require__(/*! ./utils/index */ \"./src/utils/index.ts\");\nconst events_worker_1 = __webpack_require__(/*! ./utils/events.worker */ \"./src/utils/events.worker.ts\");\nexports.orderEvents = events_worker_1.orderEvents;\nexports.OrderedEvents = events_worker_1.OrderedEvents;\nconst api_1 = __webpack_require__(/*! ./api */ \"./src/api.ts\");\nconst event_bus_1 = __webpack_require__(/*! ./event-bus */ \"./src/event-bus.ts\");\nclass Timeline extends api_1.default {\n constructor(config) {\n super();\n this.reload = (config) => {\n config = config != null ? config : props_1.default.config;\n props_1.default.init(config);\n this.removeChildren();\n this.renderBands();\n };\n this.debouncedReload = index_1.debounce(this.reload, 600);\n this.appendToWrapper = (child) => this.wrapper.appendChild(child.render());\n props_1.default.init(config);\n config.rootElement.appendChild(this.render());\n window.addEventListener('resize', () => {\n this.removeChildren();\n this.debouncedReload();\n });\n }\n removeChildren() {\n event_bus_1.default.flush();\n Array\n .from(this.wrapper.children)\n .forEach(child => this.wrapper.removeChild(child));\n }\n render() {\n this.wrapper = create_element_1.default('div', 'wrapper', [\n 'box-sizing: border-box',\n 'height: 100%',\n 'overflow: hidden',\n 'position: relative',\n 'user-select: none',\n 'width: 100%',\n ]);\n this.renderBands();\n return this.wrapper;\n }\n renderBands() {\n this.bands = props_1.default.domains.map(d => new band_1.default(d));\n this.bands.forEach(this.appendToWrapper);\n this.renderLabels();\n this.renderIndicators();\n }\n renderIndicators() {\n this.bands\n .filter(band => band.domain.config.targets != null)\n .map(band => new indicator_1.default(band.domain))\n .forEach(this.appendToWrapper);\n }\n renderLabels() {\n props_1.default.domains\n .filter(d => d.config.label != null)\n .map(d => {\n const eventsLabel = create_element_1.default('div', 'events-label', [\n 'border-bottom-right-radius: 4px',\n 'color: #444',\n 'font-size: .8em',\n 'font-family: sans-serif',\n 'padding: 2px 4px',\n 'position: absolute',\n ], [\n `top: ${d.config.topOffsetRatio * 100}%`\n ]);\n eventsLabel.innerText = d.config.label;\n this.wrapper.appendChild(eventsLabel);\n });\n }\n}\nexports.default = Timeline;\n\n\n//# sourceURL=webpack://Timeline/./src/index.ts?"); /***/ }), @@ -149,7 +149,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass AggregateEntry {\n}\nexports.AggregateEntry = AggregateEntry;\nclass Config {\n constructor() {\n this.aggregate = [];\n this.center = .5;\n this.domains = [];\n this.events = [];\n this.rootElement = null;\n }\n}\nexports.default = Config;\n\n\n//# sourceURL=webpack://Timeline/./src/models/config.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Config {\n constructor() {\n this.center = .5;\n this.domains = [];\n this.rootElement = null;\n }\n}\nexports.default = Config;\n\n\n//# sourceURL=webpack://Timeline/./src/models/config.ts?"); /***/ }), @@ -161,7 +161,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DomainConfig {\n constructor(props) {\n this.components = new Set();\n this.hasEvents = true;\n this.hasIndicatorFor = null;\n this.heightRatio = 1;\n this.hasRulers = true;\n this.hasSparkline = true;\n this.topOffsetRatio = 0;\n this.visibleRatio = 1;\n Object.keys(props).forEach(k => {\n if (k === 'components')\n this[k] = new Set(props[k]);\n else if (this.hasOwnProperty(k))\n this[k] = props[k];\n });\n }\n}\nexports.default = DomainConfig;\n\n\n//# sourceURL=webpack://Timeline/./src/models/domain.config.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_worker_1 = __webpack_require__(/*! ../utils/events.worker */ \"./src/utils/events.worker.ts\");\nclass DomainConfig {\n constructor(config, viewportWidth) {\n this.events = [];\n this.targets = null;\n this.heightRatio = 1;\n this.label = null;\n this.orderedEvents = null;\n this.rulers = true;\n this.topOffsetRatio = 0;\n this.type = 'events';\n this.visibleRatio = 1;\n if (config.type === 'events') {\n if (config.events == null && config.orderedEvents == null)\n console.error('[DomainConfig] No events in config!');\n this.orderedEvents = (config.orderedEvents == null) ?\n events_worker_1.orderEvents(config.events, viewportWidth, this.visibleRatio) :\n config.orderedEvents;\n }\n Object.keys(config).forEach(k => {\n if (this.hasOwnProperty(k))\n this[k] = config[k];\n });\n }\n}\nexports.default = DomainConfig;\n\n\n//# sourceURL=webpack://Timeline/./src/models/domain.config.ts?"); /***/ }), @@ -173,7 +173,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dates_1 = __webpack_require__(/*! ../utils/dates */ \"./src/utils/dates.ts\");\nconst dates_2 = __webpack_require__(/*! ../utils/dates */ \"./src/utils/dates.ts\");\nconst props_1 = __webpack_require__(/*! ./props */ \"./src/models/props.ts\");\nconst domain_config_1 = __webpack_require__(/*! ./domain.config */ \"./src/models/domain.config.ts\");\nclass Domain {\n get left() { return this._left; }\n set left(left) {\n if (left < -this.width + props_1.default.viewportWidth)\n left = props_1.default.viewportWidth - this.width;\n else if (left > 0)\n left = 0;\n this._left = left;\n }\n constructor(configProps) {\n this.config = new domain_config_1.default(configProps);\n this.height = props_1.default.viewportHeight * this.config.heightRatio;\n this.width = props_1.default.viewportWidth / this.config.visibleRatio;\n this.granularity = dates_1.getGranularity(props_1.default.config.from, props_1.default.config.to, this.config.visibleRatio);\n this.nextDate = dates_2.subsequentDate(this.granularity);\n this.pixelsPerMillisecond = this.width / props_1.default.time;\n this.updateLeft();\n }\n updateLeft() {\n this.left = props_1.default.center * (props_1.default.viewportWidth - this.width);\n return this.left;\n }\n positionAtDate(date) {\n return (date - props_1.default.config.from) * this.pixelsPerMillisecond;\n }\n proportionAtPosition(position) {\n return position / this.width;\n }\n dateAtProportion(proportion) {\n return props_1.default.config.from + (props_1.default.time * proportion);\n }\n get fromTo() {\n const visibleTime = this.config.visibleRatio * props_1.default.time;\n const from = props_1.default.config.from + (props_1.default.center * (props_1.default.time - visibleTime));\n const to = props_1.default.config.from + (props_1.default.center * (props_1.default.time - visibleTime)) + visibleTime;\n return [from, to];\n }\n}\nexports.default = Domain;\n\n\n//# sourceURL=webpack://Timeline/./src/models/domain.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dates_1 = __webpack_require__(/*! ../utils/dates */ \"./src/utils/dates.ts\");\nconst dates_2 = __webpack_require__(/*! ../utils/dates */ \"./src/utils/dates.ts\");\nconst props_1 = __webpack_require__(/*! ./props */ \"./src/models/props.ts\");\nclass Domain {\n constructor(config, color) {\n this.config = config;\n this.color = color;\n this.height = props_1.default.viewportHeight * this.config.heightRatio;\n this.width = props_1.default.viewportWidth / this.config.visibleRatio;\n this.granularity = dates_1.getGranularity(props_1.default.from, props_1.default.to, this.config.visibleRatio);\n this.nextDate = dates_2.subsequentDate(this.granularity);\n this.pixelsPerMillisecond = this.width / props_1.default.time;\n this.updateLeft();\n }\n get left() { return this._left; }\n set left(left) {\n if (left < -this.width + props_1.default.viewportWidth)\n left = props_1.default.viewportWidth - this.width;\n else if (left > 0)\n left = 0;\n this._left = left;\n }\n updateLeft() {\n this.left = props_1.default.center * (props_1.default.viewportWidth - this.width);\n return this.left;\n }\n positionAtDate(date) {\n return (date - props_1.default.from) * this.pixelsPerMillisecond;\n }\n proportionAtPosition(position) {\n return position / this.width;\n }\n dateAtProportion(proportion) {\n return props_1.default.from + (props_1.default.time * proportion);\n }\n get fromTo() {\n const visibleTime = this.config.visibleRatio * props_1.default.time;\n const from = props_1.default.from + (props_1.default.center * (props_1.default.time - visibleTime));\n const to = props_1.default.from + (props_1.default.center * (props_1.default.time - visibleTime)) + visibleTime;\n return [from, to];\n }\n}\nexports.default = Domain;\n\n\n//# sourceURL=webpack://Timeline/./src/models/domain.ts?"); /***/ }), @@ -197,19 +197,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./src/constants.ts\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\nconst domain_1 = __webpack_require__(/*! ./domain */ \"./src/models/domain.ts\");\nclass Props {\n constructor() {\n this.defaultCenter = .5;\n this._center = this.defaultCenter;\n this.centerChangeDone = utils_1.debounce(() => document.dispatchEvent(new CustomEvent(constants_1.CENTER_CHANGE_DONE)), 300);\n }\n init(config) {\n this.config = config;\n if (config.center != null)\n this.center = config.center;\n this.time = config.to - config.from;\n this.dimensions = config.rootElement;\n this.domains = config.domains.map(d => new domain_1.default(d));\n }\n get center() { return this._center; }\n set center(n) {\n if ((this._center === 0 && n < 0) || (this._center === 1 && n > 1))\n return;\n else if (n < 0)\n this._center = 0;\n else if (n > 1)\n this._center = 1;\n else\n this._center = n;\n document.dispatchEvent(new CustomEvent(constants_1.CENTER_CHANGE, { detail: n }));\n this.centerChangeDone();\n }\n set dimensions(rootElement) {\n const style = getComputedStyle(rootElement);\n const nextWidth = parseInt(style.getPropertyValue('width'), 10);\n const nextHeight = parseInt(style.getPropertyValue('height'), 10);\n this.viewportWidth = nextWidth;\n this.viewportHeight = nextHeight;\n }\n}\nexports.Props = Props;\nexports.default = new Props();\n\n\n//# sourceURL=webpack://Timeline/./src/models/props.ts?"); - -/***/ }), - -/***/ "./src/utils/aggregate.worker.ts": -/*!***************************************!*\ - !*** ./src/utils/aggregate.worker.ts ***! - \***************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction aggregateWorker(e) {\n let prevYear;\n const run1 = e.data\n .reduce((prev, curr, index, array) => {\n const year = new Date(curr.date).getFullYear();\n if (prev.hasOwnProperty(year)) {\n prev[year]++;\n }\n else {\n while (prevYear < year) {\n prevYear += 1;\n prev[prevYear] = 0;\n }\n prev[year] = 1;\n }\n prevYear = year;\n return prev;\n }, {});\n const run2 = Object.keys(run1).map((year, index) => ({ year, count: run1[year] }));\n postMessage(run2);\n}\nconst func = `onmessage = ${aggregateWorker.toString()}`;\nexports.default = (events, done) => {\n const objectURL = URL.createObjectURL(new Blob([func]));\n let worker = new Worker(objectURL);\n worker.postMessage(events);\n worker.onmessage = (e) => {\n URL.revokeObjectURL(objectURL);\n worker.terminate();\n done(e.data);\n };\n};\n\n\n//# sourceURL=webpack://Timeline/./src/utils/aggregate.worker.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./src/constants.ts\");\nconst utils_1 = __webpack_require__(/*! ../utils */ \"./src/utils/index.ts\");\nconst domain_1 = __webpack_require__(/*! ./domain */ \"./src/models/domain.ts\");\nconst domain_config_1 = __webpack_require__(/*! ./domain.config */ \"./src/models/domain.config.ts\");\nfunction createRange(n) {\n return Array.apply(null, { length: n }).map(Number.call, Number);\n}\nfunction selectRandom(set, amount) {\n const selected = [];\n while (selected.length < amount) {\n const randomIndex = Math.floor(Math.random() * set.length);\n const nextItem = set[randomIndex];\n if (selected.indexOf(nextItem) === -1 || set.length < amount)\n selected.push(nextItem);\n }\n return selected;\n}\nclass Props {\n constructor() {\n this.defaultCenter = .5;\n this._center = this.defaultCenter;\n this.centerChangeDone = utils_1.debounce(() => document.dispatchEvent(new CustomEvent(constants_1.CENTER_CHANGE_DONE)), 300);\n }\n init(config) {\n this.dimensions = config.rootElement;\n this.config = Object.assign({}, config, { domains: config.domains.map(d => new domain_config_1.default(d, this.viewportWidth)) });\n const dates = this.config.domains\n .filter(d => d.type === 'events')\n .reduce((prev, curr) => {\n const { events } = curr.orderedEvents;\n const firstEvent = events[0];\n const lastEvent = events[events.length - 1];\n prev.push(firstEvent.date_min, firstEvent.date, firstEvent.end_date, firstEvent.end_date_max);\n prev.push(lastEvent.date_min, lastEvent.date, lastEvent.end_date, lastEvent.end_date_max);\n return prev;\n }, [])\n .filter(d => d != null);\n this.from = Math.min(...dates);\n this.to = Math.max(...dates);\n this.time = this.to - this.from;\n if (config.center != null)\n this.center = config.center;\n const indices = selectRandom(createRange(constants_1.colors.length), this.config.domains.filter(d => d.type === 'events').length);\n this.domains = this.config.domains.map((d, i) => new domain_1.default(d, constants_1.colors[indices[i]]));\n }\n get center() { return this._center; }\n set center(n) {\n if ((this._center === 0 && n < 0) || (this._center === 1 && n > 1))\n return;\n else if (n < 0)\n this._center = 0;\n else if (n > 1)\n this._center = 1;\n else\n this._center = n;\n document.dispatchEvent(new CustomEvent(constants_1.CENTER_CHANGE, { detail: n }));\n this.centerChangeDone();\n }\n set dimensions(rootElement) {\n const style = getComputedStyle(rootElement);\n const nextWidth = parseInt(style.getPropertyValue('width'), 10);\n const nextHeight = parseInt(style.getPropertyValue('height'), 10);\n this.viewportWidth = nextWidth;\n this.viewportHeight = nextHeight;\n }\n}\nexports.Props = Props;\nexports.default = new Props();\n\n\n//# sourceURL=webpack://Timeline/./src/models/props.ts?"); /***/ }), @@ -245,7 +233,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexport /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction orderEvents(events, viewportWidth, visibleRatio) {\n if (!events.length)\n return [[], null, null, [], null];\n let rowCount = 0;\n const grid = [];\n const firstEvent = events[0];\n const from = firstEvent.date_min != null ? firstEvent.date_min : firstEvent.date;\n const lastEvent = events[events.length - 1];\n const to = lastEvent.end_date_max != null ?\n lastEvent.end_date_max :\n lastEvent.end_date != null ?\n lastEvent.end_date :\n lastEvent.date;\n const millisecondsPerPixel = (to - from) / (viewportWidth / visibleRatio);\n const eventMinWidth = millisecondsPerPixel * viewportWidth * .1;\n const addRow = (event) => {\n let row;\n const from = event.date_min != null ? event.date_min : event.date;\n let to = event.end_date_max != null ? event.end_date_max : event.end_date;\n if (to == null || (to - from) < eventMinWidth)\n to = from + eventMinWidth;\n let rowIterator = 0;\n while (row == null && rowIterator < grid.length) {\n const rows = grid[rowIterator];\n let cellIterator = 0;\n let hasSpace = true;\n while (hasSpace && cellIterator < rows.length) {\n hasSpace = (to < rows[cellIterator][0] || from > rows[cellIterator][1]);\n cellIterator++;\n }\n if (hasSpace) {\n rows.push([from, to]);\n row = rowIterator;\n }\n rowIterator++;\n }\n if (row == null)\n row = grid.push([[from, to]]) - 1;\n if (row > rowCount)\n rowCount = row;\n event.row = row;\n return event;\n };\n return [events.map(addRow), from, to, grid, rowCount];\n}\nexports.orderEvents = orderEvents;\nfunction eventsWorker(e) {\n importScripts(e.data.orderEventsURL);\n postMessage(orderEvents(e.data.events));\n}\nexports.eventsWorker = eventsWorker;\nexports.default = (events, done) => {\n const orderEventsURL = URL.createObjectURL(new Blob([orderEvents]));\n const func = `onmessage = ${eventsWorker.toString()}`;\n const objectURL = URL.createObjectURL(new Blob([func]));\n let worker = new Worker(objectURL);\n worker.postMessage({ events, orderEventsURL });\n worker.onmessage = (e) => {\n URL.revokeObjectURL(objectURL);\n worker.terminate();\n done(e.data);\n };\n};\n\n\n//# sourceURL=webpack://Timeline/./src/utils/events.worker.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass OrderedEvents {\n constructor() {\n this.events = [];\n this.from = null;\n this.to = null;\n this.grid = [];\n this.rowCount = 0;\n }\n}\nexports.OrderedEvents = OrderedEvents;\nfunction orderEvents(events, viewportWidth, visibleRatio) {\n if (!events.length)\n return new OrderedEvents();\n let rowCount = 0;\n const grid = [];\n const firstEvent = events[0];\n const from = firstEvent.date_min != null ? firstEvent.date_min : firstEvent.date;\n const lastEvent = events[events.length - 1];\n const to = lastEvent.end_date_max != null ?\n lastEvent.end_date_max :\n lastEvent.end_date != null ?\n lastEvent.end_date :\n lastEvent.date;\n const millisecondsPerPixel = (to - from) / (viewportWidth / visibleRatio);\n const eventMinWidth = millisecondsPerPixel * viewportWidth * .1;\n const addRow = (event) => {\n let row;\n const from = event.date_min != null ? event.date_min : event.date;\n let to = event.end_date_max != null ? event.end_date_max : event.end_date;\n if (to == null || (to - from) < eventMinWidth)\n to = from + eventMinWidth;\n let rowIterator = 0;\n while (row == null && rowIterator < grid.length) {\n const rows = grid[rowIterator];\n let cellIterator = 0;\n let hasSpace = true;\n while (hasSpace && cellIterator < rows.length) {\n hasSpace = (to < rows[cellIterator][0] || from > rows[cellIterator][1]);\n cellIterator++;\n }\n if (hasSpace) {\n rows.push([from, to]);\n row = rowIterator;\n }\n rowIterator++;\n }\n if (row == null)\n row = grid.push([[from, to]]) - 1;\n if (row > rowCount)\n rowCount = row;\n event.row = row;\n return event;\n };\n return {\n events: events.map(addRow),\n from,\n to,\n grid,\n rowCount\n };\n}\nexports.orderEvents = orderEvents;\nfunction eventsWorker(e) {\n importScripts(e.data.orderEventsURL);\n postMessage(orderEvents(e.data.events));\n}\nexports.eventsWorker = eventsWorker;\nexports.default = (events, done) => {\n const orderEventsURL = URL.createObjectURL(new Blob([orderEvents]));\n const func = `onmessage = ${eventsWorker.toString()}`;\n const objectURL = URL.createObjectURL(new Blob([func]));\n let worker = new Worker(objectURL);\n worker.postMessage({ events, orderEventsURL });\n worker.onmessage = (e) => {\n URL.revokeObjectURL(objectURL);\n worker.terminate();\n done(e.data);\n };\n};\n\n\n//# sourceURL=webpack://Timeline/./src/utils/events.worker.ts?"); /***/ }), @@ -281,7 +269,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfuncti /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst event_1 = __webpack_require__(/*! ../../../models/event */ \"./src/models/event.ts\");\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst point_in_time_1 = __webpack_require__(/*! ./event/point-in-time */ \"./src/views/band/events/event/point-in-time/index.ts\");\nconst interval_1 = __webpack_require__(/*! ./event/interval */ \"./src/views/band/events/event/interval/index.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nclass Segment {\n constructor(domain, segmentData) {\n this.domain = domain;\n this.rendered = false;\n this.rawEvents = segmentData.events;\n this.from = segmentData.from;\n this.left = ((props_1.default.config.from - this.from) / props_1.default.time) * this.domain.width;\n }\n render() {\n this.rootElement = create_element_1.default('div', 'segment', [\n 'bottom: 0',\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n 'position: absolute',\n 'top: 0',\n `width: ${props_1.default.viewportWidth}px`,\n ], [\n `left: ${this.left}px`,\n ]);\n return this.rootElement;\n }\n renderChildren() {\n if (this.rendered)\n return;\n const ul = create_element_1.default('ul', 'events', [\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n ]);\n for (let i = 0; i < this.rawEvents.length; i++) {\n const event = new event_1.default(this.rawEvents[i], this.domain);\n const EventClass = event.isInterval() ? interval_1.default : point_in_time_1.default;\n const view = new EventClass(event, this.left);\n ul.appendChild(view.render());\n }\n this.rootElement.appendChild(ul);\n this.rendered = true;\n }\n}\nexports.default = Segment;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/event-segment.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst event_1 = __webpack_require__(/*! ../../../models/event */ \"./src/models/event.ts\");\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst point_in_time_1 = __webpack_require__(/*! ./event/point-in-time */ \"./src/views/band/events/event/point-in-time/index.ts\");\nconst interval_1 = __webpack_require__(/*! ./event/interval */ \"./src/views/band/events/event/interval/index.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nclass Segment {\n constructor(domain, segmentData) {\n this.domain = domain;\n this.rendered = false;\n this.rawEvents = segmentData.events;\n this.from = segmentData.from;\n this.left = ((props_1.default.from - this.from) / props_1.default.time) * this.domain.width;\n }\n render() {\n this.rootElement = create_element_1.default('div', 'segment', [\n 'bottom: 0',\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n 'position: absolute',\n 'top: 0',\n `width: ${props_1.default.viewportWidth}px`,\n ], [\n `left: ${this.left}px`,\n ]);\n return this.rootElement;\n }\n renderChildren() {\n if (this.rendered)\n return;\n const ul = create_element_1.default('ul', 'events', [\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n ]);\n for (let i = 0; i < this.rawEvents.length; i++) {\n const event = new event_1.default(this.rawEvents[i], this.domain);\n const EventClass = event.isInterval() ? interval_1.default : point_in_time_1.default;\n const view = new EventClass(this.domain, event, this.left);\n ul.appendChild(view.render());\n }\n this.rootElement.appendChild(ul);\n this.rendered = true;\n }\n}\nexports.default = Segment;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/event-segment.ts?"); /***/ }), @@ -293,7 +281,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst constants_1 = __webpack_require__(/*! ../../../../../constants */ \"./src/constants.ts\");\nconst props_1 = __webpack_require__(/*! ../../../../../models/props */ \"./src/models/props.ts\");\nclass PointInTime {\n constructor(event, segmentOffset) {\n this.event = event;\n this.segmentOffset = segmentOffset;\n }\n render() {\n const backgroundColor = this.event.row % 2 === 0 ? 'rgb(235, 235, 255)' : 'rgb(215, 215, 255)';\n const li = create_element_1.default('li', 'interval-wrap', [\n 'box-sizing: border-box',\n 'font-size: 0.8em',\n `height: ${constants_1.EVENT_ROW_HEIGHT - 6}px`,\n 'position: absolute',\n 'white-space: nowrap',\n ], [\n `background-color: ${backgroundColor}`,\n `left: ${this.event.left - this.segmentOffset}px`,\n `bottom: ${(this.event.row) * constants_1.EVENT_ROW_HEIGHT}px`,\n `width: ${this.event.width}px`,\n ]);\n const title = create_element_1.default('div', 'interval-title', [\n 'display: inline-block',\n `line-height: ${constants_1.EVENT_ROW_HEIGHT - 6}px`,\n `max-width: ${props_1.default.viewportWidth / 10}px`,\n 'overflow: hidden',\n 'padding: 0 .25em',\n 'text-overflow: ellipsis',\n ]);\n title.textContent = this.event.label;\n title.title = this.event.label;\n li.appendChild(title);\n return li;\n }\n}\nexports.default = PointInTime;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/event/interval/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst constants_1 = __webpack_require__(/*! ../../../../../constants */ \"./src/constants.ts\");\nconst props_1 = __webpack_require__(/*! ../../../../../models/props */ \"./src/models/props.ts\");\nclass Interval {\n constructor(domain, event, segmentOffset) {\n this.domain = domain;\n this.event = event;\n this.segmentOffset = segmentOffset;\n }\n render() {\n const li = create_element_1.default('li', 'interval-wrap', [\n 'box-sizing: border-box',\n 'font-size: 0.8em',\n `height: ${constants_1.EVENT_ROW_HEIGHT - 6}px`,\n 'position: absolute',\n 'white-space: nowrap',\n 'z-index: 1',\n ], [\n `background-color: ${this.domain.color(.25)}`,\n `left: ${this.event.left - this.segmentOffset}px`,\n `bottom: ${(this.event.row) * constants_1.EVENT_ROW_HEIGHT}px`,\n `width: ${this.event.width}px`,\n ]);\n const title = create_element_1.default('div', 'interval-title', [\n 'display: inline-block',\n `line-height: ${constants_1.EVENT_ROW_HEIGHT - 6}px`,\n `max-width: ${props_1.default.viewportWidth / 10}px`,\n 'overflow: hidden',\n 'padding: 0 .25em',\n 'text-overflow: ellipsis',\n ]);\n title.textContent = this.event.label;\n title.title = this.event.label;\n li.appendChild(title);\n return li;\n }\n}\nexports.default = Interval;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/event/interval/index.ts?"); /***/ }), @@ -305,7 +293,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst constants_1 = __webpack_require__(/*! ../../../../../constants */ \"./src/constants.ts\");\nconst create_element_1 = __webpack_require__(/*! ../../../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../../../models/props */ \"./src/models/props.ts\");\nclass PointInTime {\n constructor(event, segmentOffset) {\n this.event = event;\n this.segmentOffset = segmentOffset;\n }\n render() {\n const li = create_element_1.default('li', 'pit-wrap', [\n 'box-sizing: border-box',\n 'font-size: 0.8em',\n `height: ${constants_1.EVENT_HEIGHT}px`,\n `margin-left: -${constants_1.EVENT_HEIGHT / 2}px`,\n 'position: absolute',\n 'white-space: nowrap',\n `max-width: ${constants_1.EVENT_MIN_SPACE}px`,\n `z-index: 1`,\n ], [\n `left: ${this.event.left - this.segmentOffset}px`,\n `bottom: ${(this.event.row) * constants_1.EVENT_ROW_HEIGHT}px`,\n ]);\n const title = create_element_1.default('div', 'pit-title', [\n 'background-color: rgba(255,255,255,.75)',\n 'display: inline-block',\n `line-height: ${constants_1.EVENT_HEIGHT}px`,\n `max-width: ${props_1.default.viewportWidth / 10}px`,\n 'overflow: hidden',\n 'padding: 0 .25em',\n 'text-overflow: ellipsis',\n ]);\n title.textContent = this.event.label;\n title.title = this.event.label;\n const point = create_element_1.default('div', 'pit-point', [\n 'background-image: radial-gradient(white 20%, black 100%)',\n `border-radius: ${constants_1.EVENT_HEIGHT / 2}px`,\n 'display: inline-block',\n `width: ${constants_1.EVENT_HEIGHT}px`,\n `height: ${constants_1.EVENT_HEIGHT}px`,\n ]);\n li.appendChild(point);\n li.appendChild(title);\n return li;\n }\n}\nexports.default = PointInTime;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/event/point-in-time/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst constants_1 = __webpack_require__(/*! ../../../../../constants */ \"./src/constants.ts\");\nconst create_element_1 = __webpack_require__(/*! ../../../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../../../models/props */ \"./src/models/props.ts\");\nclass PointInTime {\n constructor(domain, event, segmentOffset) {\n this.domain = domain;\n this.event = event;\n this.segmentOffset = segmentOffset;\n }\n render() {\n this.domain;\n const li = create_element_1.default('li', 'pit-wrap', [\n 'box-sizing: border-box',\n 'font-size: 0.8em',\n `height: ${constants_1.EVENT_HEIGHT}px`,\n `margin-left: -${constants_1.EVENT_HEIGHT / 2}px`,\n 'position: absolute',\n 'white-space: nowrap',\n `max-width: ${constants_1.EVENT_MIN_SPACE}px`,\n `z-index: 1`,\n ], [\n `left: ${this.event.left - this.segmentOffset}px`,\n `bottom: ${(this.event.row) * constants_1.EVENT_ROW_HEIGHT}px`,\n ]);\n const title = create_element_1.default('div', 'pit-title', [\n 'background-color: rgba(255,255,255,.75)',\n 'display: inline-block',\n `line-height: ${constants_1.EVENT_HEIGHT}px`,\n `max-width: ${props_1.default.viewportWidth / 10}px`,\n 'overflow: hidden',\n 'padding: 0 .25em',\n 'text-overflow: ellipsis',\n ]);\n title.textContent = this.event.label;\n title.title = this.event.label;\n const point = create_element_1.default('div', 'pit-point', [\n 'background-image: radial-gradient(white 20%, black 100%)',\n `border-radius: ${constants_1.EVENT_HEIGHT / 2}px`,\n 'display: inline-block',\n `width: ${constants_1.EVENT_HEIGHT}px`,\n `height: ${constants_1.EVENT_HEIGHT}px`,\n ]);\n li.appendChild(point);\n li.appendChild(title);\n return li;\n }\n}\nexports.default = PointInTime;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/event/point-in-time/index.ts?"); /***/ }), @@ -317,7 +305,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nconst event_segment_1 = __webpack_require__(/*! ./event-segment */ \"./src/views/band/events/event-segment.ts\");\nconst ruler_segment_1 = __webpack_require__(/*! ./ruler-segment */ \"./src/views/band/events/ruler-segment.ts\");\nconst segments_worker_1 = __webpack_require__(/*! ../../../utils/segments.worker */ \"./src/utils/segments.worker.ts\");\nconst constants_1 = __webpack_require__(/*! ../../../constants */ \"./src/constants.ts\");\nclass Events {\n constructor(domain) {\n this.domain = domain;\n this.eventSegments = [];\n this.rulerSegments = [];\n }\n render() {\n const eventsBand = create_element_1.default('div', 'events-band');\n const rulerSegmentsWrap = create_element_1.default('div', 'ruler-segments', [\n 'position: absolute',\n ], [\n `height: ${this.domain.height}px`,\n ]);\n const eventSegmentsWrap = create_element_1.default('div', 'event-segments', [\n `bottom: ${constants_1.DATE_BAR_HEIGHT}px`,\n 'position: absolute',\n ], [\n `height: ${this.domain.height}px`,\n ]);\n segments_worker_1.default({\n events: props_1.default.config.events,\n center: props_1.default.center,\n visibleRatio: this.domain.config.visibleRatio,\n from: new Date(props_1.default.config.from).getTime(),\n time: props_1.default.time\n }, (segments) => {\n segments.forEach(s => {\n const eventSegment = new event_segment_1.default(this.domain, s);\n this.eventSegments.push(eventSegment);\n eventSegmentsWrap.appendChild(eventSegment.render());\n const rulerSegment = new ruler_segment_1.default(this.domain, s);\n this.rulerSegments.push(rulerSegment);\n rulerSegmentsWrap.appendChild(rulerSegment.render());\n });\n this.renderChildren();\n eventsBand.appendChild(eventSegmentsWrap);\n eventsBand.appendChild(rulerSegmentsWrap);\n });\n return eventsBand;\n }\n renderChildren() {\n let index = Math.floor((this.eventSegments.length - 1) * props_1.default.center);\n this.eventSegments[index].renderChildren();\n this.rulerSegments[index].renderChildren();\n for (let i = index - 2; i <= index + 2; i++) {\n const eventSegment = this.eventSegments[i];\n const rulerSegment = this.rulerSegments[i];\n if (i >= 0 && i < this.eventSegments.length) {\n if (i !== index) {\n eventSegment.renderChildren();\n rulerSegment.renderChildren();\n }\n }\n }\n }\n}\nexports.default = Events;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nconst event_segment_1 = __webpack_require__(/*! ./event-segment */ \"./src/views/band/events/event-segment.ts\");\nconst ruler_segment_1 = __webpack_require__(/*! ./ruler-segment */ \"./src/views/band/events/ruler-segment.ts\");\nconst segments_worker_1 = __webpack_require__(/*! ../../../utils/segments.worker */ \"./src/utils/segments.worker.ts\");\nconst constants_1 = __webpack_require__(/*! ../../../constants */ \"./src/constants.ts\");\nclass Events {\n constructor(domain) {\n this.domain = domain;\n this.eventSegments = [];\n this.rulerSegments = [];\n }\n render() {\n const eventsBand = create_element_1.default('div', 'events-band');\n const rulerSegmentsWrap = create_element_1.default('div', 'ruler-segments', [\n 'position: absolute',\n ], [\n `height: ${this.domain.height}px`,\n ]);\n const eventSegmentsWrap = create_element_1.default('div', 'event-segments', [\n `bottom: ${constants_1.DATE_BAR_HEIGHT}px`,\n 'position: absolute',\n ], [\n `height: ${this.domain.height}px`,\n ]);\n segments_worker_1.default({\n events: this.domain.config.orderedEvents.events,\n center: props_1.default.center,\n visibleRatio: this.domain.config.visibleRatio,\n from: new Date(props_1.default.from).getTime(),\n time: props_1.default.time\n }, (segments) => {\n segments.forEach(s => {\n const eventSegment = new event_segment_1.default(this.domain, s);\n this.eventSegments.push(eventSegment);\n eventSegmentsWrap.appendChild(eventSegment.render());\n const rulerSegment = new ruler_segment_1.default(this.domain, s);\n this.rulerSegments.push(rulerSegment);\n rulerSegmentsWrap.appendChild(rulerSegment.render());\n });\n this.renderChildren();\n eventsBand.appendChild(eventSegmentsWrap);\n eventsBand.appendChild(rulerSegmentsWrap);\n });\n return eventsBand;\n }\n renderChildren() {\n let index = Math.floor((this.eventSegments.length - 1) * props_1.default.center);\n this.eventSegments[index].renderChildren();\n this.rulerSegments[index].renderChildren();\n for (let i = index - 2; i <= index + 2; i++) {\n const eventSegment = this.eventSegments[i];\n const rulerSegment = this.rulerSegments[i];\n if (i >= 0 && i < this.eventSegments.length) {\n if (i !== index) {\n eventSegment.renderChildren();\n rulerSegment.renderChildren();\n }\n }\n }\n }\n}\nexports.default = Events;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/index.ts?"); /***/ }), @@ -329,7 +317,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nconst rulers_1 = __webpack_require__(/*! ../rulers */ \"./src/views/band/rulers/index.ts\");\nconst ruler_1 = __webpack_require__(/*! ../rulers/ruler */ \"./src/views/band/rulers/ruler.ts\");\nclass Segment {\n constructor(domain, segmentData) {\n this.domain = domain;\n this.rendered = false;\n this.renderChildren = () => {\n if (this.rendered)\n return;\n const rulers = create_element_1.default('div', 'rulers', [\n `width: ${props_1.default.viewportWidth}px`,\n ], [\n `left: ${this.left}px`,\n `height: ${this.domain.height}px`,\n ]);\n let date = rulers_1.findClosestRulerDate(this.from, this.domain.granularity);\n while (date < this.to) {\n rulers.appendChild(new ruler_1.default(date, this.domain, this.left).render());\n date = this.domain.nextDate(date);\n }\n this.rootElement.appendChild(rulers);\n this.rendered = true;\n };\n this.from = segmentData.from;\n this.to = segmentData.to;\n this.left = ((props_1.default.config.from - this.from) / props_1.default.time) * this.domain.width;\n }\n render() {\n this.rootElement = create_element_1.default('div', 'segment', [\n 'bottom: 0',\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n 'position: absolute',\n 'top: 0',\n `width: ${props_1.default.viewportWidth}px`,\n ], [\n `left: ${this.left}px`,\n ]);\n return this.rootElement;\n }\n}\nexports.default = Segment;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/ruler-segment.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nconst rulers_1 = __webpack_require__(/*! ../rulers */ \"./src/views/band/rulers/index.ts\");\nconst ruler_1 = __webpack_require__(/*! ../rulers/ruler */ \"./src/views/band/rulers/ruler.ts\");\nclass Segment {\n constructor(domain, segmentData) {\n this.domain = domain;\n this.rendered = false;\n this.renderChildren = () => {\n if (this.rendered)\n return;\n const rulers = create_element_1.default('div', 'rulers', [\n `width: ${props_1.default.viewportWidth}px`,\n ], [\n `left: ${this.left}px`,\n `height: ${this.domain.height}px`,\n ]);\n let date = rulers_1.findClosestRulerDate(this.from, this.domain.granularity);\n while (date < this.to) {\n rulers.appendChild(new ruler_1.default(date, this.domain, this.left).render());\n date = this.domain.nextDate(date);\n }\n this.rootElement.appendChild(rulers);\n this.rendered = true;\n };\n this.from = segmentData.from;\n this.to = segmentData.to;\n this.left = ((props_1.default.from - this.from) / props_1.default.time) * this.domain.width;\n }\n render() {\n this.rootElement = create_element_1.default('div', 'segment', [\n 'bottom: 0',\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n 'position: absolute',\n 'top: 0',\n `width: ${props_1.default.viewportWidth}px`,\n ], [\n `left: ${this.left}px`,\n ]);\n return this.rootElement;\n }\n}\nexports.default = Segment;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/events/ruler-segment.ts?"); /***/ }), @@ -341,7 +329,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst props_1 = __webpack_require__(/*! ../../models/props */ \"./src/models/props.ts\");\nconst create_element_1 = __webpack_require__(/*! ../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst constants_1 = __webpack_require__(/*! ../../constants */ \"./src/constants.ts\");\nconst sparkline_1 = __webpack_require__(/*! ./sparkline */ \"./src/views/band/sparkline/index.ts\");\nconst rulers_1 = __webpack_require__(/*! ./rulers */ \"./src/views/band/rulers/index.ts\");\nconst minimap_1 = __webpack_require__(/*! ./minimap */ \"./src/views/band/minimap/index.ts\");\nconst events_1 = __webpack_require__(/*! ./events */ \"./src/views/band/events/index.ts\");\nconst event_bus_1 = __webpack_require__(/*! ../../event-bus */ \"./src/event-bus.ts\");\nclass Band {\n constructor(domain) {\n this.domain = domain;\n this.updateLeft = () => {\n this.rootElement.style.transform = `translate3d(${this.domain.updateLeft()}px, 0, 0)`;\n if (this.eventsBand != null)\n this.eventsBand.renderChildren();\n };\n this.onMouseDown = (ev) => {\n document.addEventListener('mouseup', this.onMouseUp);\n this.dragOffset = ev.clientX;\n this.dragStart = this.domain.left;\n };\n this.onMouseMove = (ev) => {\n if (this.dragOffset) {\n const left = this.dragStart - (this.dragOffset - ev.clientX);\n props_1.default.center = left / (props_1.default.viewportWidth - this.domain.width);\n }\n };\n this.onMouseUp = (ev) => {\n document.removeEventListener('mouseup', this.onMouseUp);\n this.dragOffset = null;\n };\n this.onDblClick = (ev) => {\n const rootLeft = this.rootElement.getBoundingClientRect().left;\n const proportion = this.domain.proportionAtPosition(ev.clientX - rootLeft);\n props_1.default.center = proportion;\n };\n event_bus_1.default.register(constants_1.CENTER_CHANGE, this.updateLeft);\n }\n render() {\n this.rootElement = create_element_1.default('div', 'band-wrap', [\n 'background-color: white',\n 'box-shadow: inset 0 6px 20px #eee',\n 'position: absolute',\n ], [\n `height: ${this.domain.config.heightRatio * 100}%`,\n `top: ${this.domain.config.topOffsetRatio * 100}%`,\n `transform: translate3d(${this.domain.left}px, 0, 0)`,\n `width: ${this.domain.width}px`,\n ]);\n if (this.domain.config.components.has('SPARKLINE')) {\n const sparkline = new sparkline_1.default(this.domain, props_1.default.config.aggregate);\n this.rootElement.appendChild(sparkline.render());\n }\n if (this.domain.config.components.has('RULERS') && !this.domain.config.components.has('EVENTS')) {\n this.rootElement.appendChild(new rulers_1.default(this.domain).render());\n }\n if (this.domain.config.components.has('MINIMAP')) {\n const minimap = new minimap_1.default(this.domain);\n this.rootElement.appendChild(minimap.render());\n }\n if (this.domain.config.components.has('EVENTS')) {\n this.eventsBand = new events_1.default(this.domain);\n this.rootElement.appendChild(this.eventsBand.render());\n }\n if (this.domain.config.visibleRatio < 1) {\n event_bus_1.default.register('mousedown', this.onMouseDown, this.rootElement);\n event_bus_1.default.register('mousemove', this.onMouseMove, this.rootElement);\n }\n event_bus_1.default.register('dblclick', this.onDblClick, this.rootElement);\n return this.rootElement;\n }\n}\nexports.default = Band;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst props_1 = __webpack_require__(/*! ../../models/props */ \"./src/models/props.ts\");\nconst create_element_1 = __webpack_require__(/*! ../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst constants_1 = __webpack_require__(/*! ../../constants */ \"./src/constants.ts\");\nconst minimap_1 = __webpack_require__(/*! ./minimap */ \"./src/views/band/minimap/index.ts\");\nconst events_1 = __webpack_require__(/*! ./events */ \"./src/views/band/events/index.ts\");\nconst event_bus_1 = __webpack_require__(/*! ../../event-bus */ \"./src/event-bus.ts\");\nconst rulers_1 = __webpack_require__(/*! ./rulers */ \"./src/views/band/rulers/index.ts\");\nclass Band {\n constructor(domain) {\n this.domain = domain;\n this.updateLeft = () => {\n this.rootElement.style.transform = `translate3d(${this.domain.updateLeft()}px, 0, 0)`;\n if (this.eventsBand != null)\n this.eventsBand.renderChildren();\n };\n this.onMouseDown = (ev) => {\n document.addEventListener('mouseup', this.onMouseUp);\n this.dragOffset = ev.clientX;\n this.dragStart = this.domain.left;\n };\n this.onMouseMove = (ev) => {\n if (this.dragOffset) {\n const left = this.dragStart - (this.dragOffset - ev.clientX);\n props_1.default.center = left / (props_1.default.viewportWidth - this.domain.width);\n }\n };\n this.onMouseUp = (ev) => {\n document.removeEventListener('mouseup', this.onMouseUp);\n this.dragOffset = null;\n };\n this.onDblClick = (ev) => {\n const rootLeft = this.rootElement.getBoundingClientRect().left;\n const proportion = this.domain.proportionAtPosition(ev.clientX - rootLeft);\n props_1.default.center = proportion;\n };\n event_bus_1.default.register(constants_1.CENTER_CHANGE, this.updateLeft);\n }\n render() {\n this.rootElement = create_element_1.default('div', 'band-wrap', [\n 'background-color: white',\n 'position: absolute',\n ], [\n `box-shadow: inset 0 6px 20px ${this.domain.color != null ? this.domain.color(.1) : '#eee'}`,\n `height: ${this.domain.config.heightRatio * 100}%`,\n `top: ${this.domain.config.topOffsetRatio * 100}%`,\n `transform: translate3d(${this.domain.left}px, 0, 0)`,\n `width: ${this.domain.width}px`,\n ]);\n if (this.domain.config.type === 'minimap') {\n if (this.domain.config.rulers) {\n this.rootElement.appendChild(new rulers_1.default(this.domain).render());\n }\n const minimap = new minimap_1.default(this.domain);\n this.rootElement.appendChild(minimap.render());\n }\n if (this.domain.config.type === 'events') {\n this.eventsBand = new events_1.default(this.domain);\n this.rootElement.appendChild(this.eventsBand.render());\n }\n if (this.domain.config.visibleRatio < 1) {\n event_bus_1.default.register('mousedown', this.onMouseDown, this.rootElement);\n event_bus_1.default.register('mousemove', this.onMouseMove, this.rootElement);\n }\n event_bus_1.default.register('dblclick', this.onDblClick, this.rootElement);\n return this.rootElement;\n }\n}\nexports.default = Band;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/index.ts?"); /***/ }), @@ -353,7 +341,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nconst event_1 = __webpack_require__(/*! ../../../models/event */ \"./src/models/event.ts\");\nconst constants_1 = __webpack_require__(/*! ../../../constants */ \"./src/constants.ts\");\nconst event_bus_1 = __webpack_require__(/*! ../../../event-bus */ \"./src/event-bus.ts\");\nconst onVisible = (from, to) => (e) => {\n const eventFrom = e.date_min || e.date;\n let eventTo = e.end_date_max || e.end_date;\n if (eventTo == null)\n eventTo = eventFrom;\n if (eventFrom == null && eventTo == null)\n return false;\n return !(eventTo < from || eventFrom > to);\n};\nclass MiniMap {\n constructor(domain) {\n this.domain = domain;\n this.drawEvents = () => {\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n const left = this.domain.positionAtDate(this.domain.fromTo[0]);\n this.canvas.style.left = `${left}px`;\n const [from, to] = this.domain.fromTo;\n const visibleEvents = props_1.default.config.events.filter(onVisible(from, to));\n for (let i = 0; i < visibleEvents.length; i++) {\n const event = new event_1.default(visibleEvents[i], this.domain);\n const y = this.maxHeight - ((event.row + 1) * this.eventHeight);\n const width = event.width < 1 ? 1 : event.width;\n this.context.fillRect(event.left - left, y, width, this.eventHeight);\n }\n };\n this.maxHeight = this.domain.height - constants_1.DATE_BAR_HEIGHT;\n this.eventHeight = this.maxHeight / props_1.default.config.rowCount;\n if (this.eventHeight < 1)\n this.eventHeight = 1;\n if (this.domain.config.visibleRatio < 1) {\n event_bus_1.default.register(constants_1.CENTER_CHANGE_DONE, this.drawEvents);\n }\n }\n render() {\n this.canvas = create_element_1.default('canvas', 'minimap', [\n 'position: absolute',\n ]);\n this.canvas.width = props_1.default.viewportWidth;\n this.canvas.height = this.domain.height;\n this.context = this.canvas.getContext('2d');\n this.context.fillStyle = 'rgba(180, 180, 255, 1)';\n this.drawEvents();\n return this.canvas;\n }\n}\nexports.default = MiniMap;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/minimap/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nconst event_1 = __webpack_require__(/*! ../../../models/event */ \"./src/models/event.ts\");\nconst constants_1 = __webpack_require__(/*! ../../../constants */ \"./src/constants.ts\");\nconst event_bus_1 = __webpack_require__(/*! ../../../event-bus */ \"./src/event-bus.ts\");\nconst onVisible = (from, to) => (e) => {\n const eventFrom = e.date_min || e.date;\n let eventTo = e.end_date_max || e.end_date;\n if (eventTo == null)\n eventTo = eventFrom;\n if (eventFrom == null && eventTo == null)\n return false;\n return !(eventTo < from || eventFrom > to);\n};\nclass MiniMap {\n constructor(domain) {\n this.domain = domain;\n this.drawEvents = () => {\n this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n const [from, to] = this.domain.fromTo;\n const left = this.domain.positionAtDate(from);\n this.canvas.style.left = `${left}px`;\n this.domain.config.targets.forEach(targetIndex => {\n const domain = props_1.default.domains[targetIndex];\n const { events } = domain.config.orderedEvents;\n this.context.fillStyle = domain.color(.5);\n const visibleEvents = events.filter(onVisible(from, to));\n for (let i = 0; i < visibleEvents.length; i++) {\n const event = new event_1.default(visibleEvents[i], this.domain);\n const y = this.maxHeight - ((event.row + 1) * this.eventHeight);\n const width = event.width < 1 ? 1 : event.width;\n this.context.fillRect(event.left - left, y, width, this.eventHeight);\n }\n });\n };\n this.maxHeight = this.domain.height - constants_1.DATE_BAR_HEIGHT;\n const rowCounts = this.domain.config.targets.map(index => props_1.default.domains[index].config.orderedEvents.rowCount);\n this.eventHeight = this.maxHeight / Math.max(...rowCounts);\n if (this.eventHeight < 1)\n this.eventHeight = 1;\n if (this.domain.config.visibleRatio < 1) {\n event_bus_1.default.register(constants_1.CENTER_CHANGE_DONE, this.drawEvents);\n }\n }\n render() {\n this.canvas = create_element_1.default('canvas', 'minimap', [\n 'position: absolute',\n ]);\n this.canvas.width = props_1.default.viewportWidth;\n this.canvas.height = this.domain.height;\n this.context = this.canvas.getContext('2d');\n this.drawEvents();\n return this.canvas;\n }\n}\nexports.default = MiniMap;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/minimap/index.ts?"); /***/ }), @@ -365,7 +353,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst ruler_1 = __webpack_require__(/*! ./ruler */ \"./src/views/band/rulers/ruler.ts\");\nconst dates_1 = __webpack_require__(/*! ../../../utils/dates */ \"./src/utils/dates.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nfunction findClosestRulerDate(d, granularity) {\n const date = new Date(d);\n let year = date.getFullYear();\n if (granularity >= 4) {\n const step = dates_1.getStep(granularity);\n if (granularity === 4)\n year += 1;\n else\n while (year % step !== 0) {\n year += 1;\n }\n return Date.UTC(year, 0, 1);\n }\n else if (granularity === 3) {\n return Date.UTC(year, date.getMonth() + 1, 1);\n }\n else if (granularity === 1) {\n return Date.UTC(year, date.getMonth(), date.getDate() + 1);\n }\n return d;\n}\nexports.findClosestRulerDate = findClosestRulerDate;\nclass Rulers {\n constructor(domain) {\n this.domain = domain;\n }\n render() {\n this.ul = create_element_1.default('ul', 'ruler-wrap', [\n 'bottom: 0',\n 'left: 0',\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n 'position: absolute',\n 'right: 0',\n 'top: 0',\n 'whiteSpace: nowrap',\n ]);\n let date = findClosestRulerDate(props_1.default.config.from, this.domain.granularity);\n while (date < props_1.default.config.to) {\n this.ul.appendChild(new ruler_1.default(date, this.domain).render());\n date = this.domain.nextDate(date);\n }\n return this.ul;\n }\n}\nexports.default = Rulers;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/rulers/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst ruler_1 = __webpack_require__(/*! ./ruler */ \"./src/views/band/rulers/ruler.ts\");\nconst dates_1 = __webpack_require__(/*! ../../../utils/dates */ \"./src/utils/dates.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nfunction findClosestRulerDate(timestamp, granularity) {\n if (timestamp == null || isNaN(timestamp)) {\n console.error('[findClosestRulerDate] start timestamp is not defined');\n return;\n }\n const date = new Date(timestamp);\n let year = date.getFullYear();\n if (granularity >= 4) {\n const step = dates_1.getStep(granularity);\n if (granularity === 4)\n year += 1;\n else\n while (year % step !== 0) {\n year += 1;\n }\n return Date.UTC(year, 0, 1);\n }\n else if (granularity === 3) {\n return Date.UTC(year, date.getMonth() + 1, 1);\n }\n else if (granularity === 1) {\n return Date.UTC(year, date.getMonth(), date.getDate() + 1);\n }\n return timestamp;\n}\nexports.findClosestRulerDate = findClosestRulerDate;\nclass Rulers {\n constructor(domain) {\n this.domain = domain;\n }\n render() {\n this.ul = create_element_1.default('ul', 'ruler-wrap', [\n 'bottom: 0',\n 'left: 0',\n 'list-style: none',\n 'margin: 0',\n 'padding: 0',\n 'position: absolute',\n 'right: 0',\n 'top: 0',\n 'whiteSpace: nowrap',\n ]);\n let date = findClosestRulerDate(props_1.default.from, this.domain.granularity);\n while (date < props_1.default.to) {\n this.ul.appendChild(new ruler_1.default(date, this.domain).render());\n date = this.domain.nextDate(date);\n }\n return this.ul;\n }\n}\nexports.default = Rulers;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/rulers/index.ts?"); /***/ }), @@ -381,18 +369,6 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ }), -/***/ "./src/views/band/sparkline/index.ts": -/*!*******************************************!*\ - !*** ./src/views/band/sparkline/index.ts ***! - \*******************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst aggregate_worker_1 = __webpack_require__(/*! ../../../utils/aggregate.worker */ \"./src/utils/aggregate.worker.ts\");\nconst props_1 = __webpack_require__(/*! ../../../models/props */ \"./src/models/props.ts\");\nclass Sparkline {\n constructor(domain, aggregate) {\n this.domain = domain;\n this.aggregate = aggregate;\n }\n render() {\n this.svg = create_element_1.createSvg('svg', null, {\n height: `${this.domain.height}px`,\n preserveAspectRatio: \"none\",\n viewBox: `0 0 ${this.domain.width} ${this.domain.height}`,\n width: `${this.domain.width}px`,\n });\n if (this.aggregate.length) {\n this.renderPath();\n }\n else if (props_1.default.config.events.length) {\n aggregate_worker_1.default(props_1.default.config.events, (aggregate) => {\n this.aggregate = aggregate;\n this.renderPath();\n });\n }\n return this.svg;\n }\n renderChildren() { }\n createPath() {\n const countMax = this.aggregate.reduce((prev, curr) => { return Math.max(prev, curr.count); }, 0);\n const path = this.aggregate.reduce((prev, curr, index) => {\n const curveType = index === 0 ? 'M' : 'L';\n const x = (this.domain.width / (this.aggregate.length - 1)) * index;\n const y = this.domain.height - ((curr.count / countMax) * this.domain.height);\n return `${prev} ${curveType} ${x} ${y}`;\n }, '');\n const pathCloser = ` L ${this.domain.width + 1} ${this.domain.height + 1} L -1 ${this.domain.height + 1}`;\n return path + pathCloser;\n }\n renderPath() {\n const pathElement = create_element_1.createSvg('path', [\n 'fill: rgba(245, 245, 255, .7)',\n 'stroke: rgb(180, 180, 255)',\n ], { d: this.createPath() });\n this.svg.appendChild(pathElement);\n }\n}\nexports.default = Sparkline;\n\n\n//# sourceURL=webpack://Timeline/./src/views/band/sparkline/index.ts?"); - -/***/ }), - /***/ "./src/views/indicator/index.ts": /*!**************************************!*\ !*** ./src/views/indicator/index.ts ***! @@ -401,7 +377,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst constants_1 = __webpack_require__(/*! ../../constants */ \"./src/constants.ts\");\nconst props_1 = __webpack_require__(/*! ../../models/props */ \"./src/models/props.ts\");\nconst event_bus_1 = __webpack_require__(/*! ../../event-bus */ \"./src/event-bus.ts\");\nclass Indicator {\n constructor(hostDomain, targetDomain) {\n this.hostDomain = hostDomain;\n this.targetDomain = targetDomain;\n this.handleCenterChange = (e) => {\n this.leftOfIndicator.style.transform = `scaleX(${this.leftWidthScale()})`;\n this.rightOfIndicator.style.transform = `scaleX(${this.rightWidthScale()})`;\n };\n this.width = this.hostDomain.width / this.targetDomain.width * props_1.default.viewportWidth;\n if (this.width < 2)\n this.width = 2;\n let heightRatio = (this.targetDomain.height - constants_1.DATE_BAR_HEIGHT) / (props_1.default.config.rowCount * constants_1.EVENT_ROW_HEIGHT);\n if (heightRatio > 1)\n heightRatio = 1;\n this.offset = props_1.default.viewportWidth - this.width;\n this.leftWidth = this.nextLeftWidth();\n this.rightWidth = this.nextRightWidth();\n event_bus_1.default.register(constants_1.CENTER_CHANGE, this.handleCenterChange);\n }\n render() {\n const wrapper = create_element_1.default('div', 'indicator-wrap', [\n 'bottom: 0',\n 'left: 0',\n 'pointer-events: none',\n 'position: absolute',\n 'right: 0',\n ], [\n `height: ${this.hostDomain.height}px`,\n `top: ${this.hostDomain.config.topOffsetRatio * 100}%`,\n ]);\n this.leftOfIndicator = create_element_1.default('div', 'indicator', [\n 'position: absolute',\n `bottom: ${0}px`,\n 'cursor: -webkit-grab',\n 'background-color: rgba(0, 0, 0, .1)',\n 'z-index: 3',\n ], [\n `height: ${this.hostDomain.height}px`,\n 'left: 0',\n 'transform-origin: left',\n `width: ${this.leftWidth}px`,\n ]);\n this.rightOfIndicator = create_element_1.default('div', 'indicator', [], [\n `height: ${this.hostDomain.height}px`,\n 'right: 0',\n 'transform-origin: right',\n `width: ${this.rightWidth}px`,\n ]);\n wrapper.appendChild(this.leftOfIndicator);\n wrapper.appendChild(this.rightOfIndicator);\n return wrapper;\n }\n nextLeftWidth() {\n return this.offset * props_1.default.center;\n }\n nextRightWidth() {\n return props_1.default.viewportWidth - (this.nextLeftWidth() + this.width);\n }\n leftWidthScale() {\n return this.nextLeftWidth() / this.leftWidth;\n }\n rightWidthScale() {\n return this.nextRightWidth() / this.rightWidth;\n }\n}\nexports.default = Indicator;\n\n\n//# sourceURL=webpack://Timeline/./src/views/indicator/index.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst create_element_1 = __webpack_require__(/*! ../../utils/create-element */ \"./src/utils/create-element.ts\");\nconst constants_1 = __webpack_require__(/*! ../../constants */ \"./src/constants.ts\");\nconst props_1 = __webpack_require__(/*! ../../models/props */ \"./src/models/props.ts\");\nconst event_bus_1 = __webpack_require__(/*! ../../event-bus */ \"./src/event-bus.ts\");\nclass Indicator {\n constructor(hostDomain) {\n this.hostDomain = hostDomain;\n this.handleCenterChange = (e) => {\n this.leftOfIndicator.style.transform = `scaleX(${this.leftWidthScale()})`;\n this.rightOfIndicator.style.transform = `scaleX(${this.rightWidthScale()})`;\n };\n this.width = this.hostDomain.width / props_1.default.domains[this.hostDomain.config.targets[0]].width * props_1.default.viewportWidth;\n if (this.width < 2)\n this.width = 2;\n this.offset = props_1.default.viewportWidth - this.width;\n this.leftWidth = this.nextLeftWidth();\n this.rightWidth = this.nextRightWidth();\n event_bus_1.default.register(constants_1.CENTER_CHANGE, this.handleCenterChange);\n }\n render() {\n const wrapper = create_element_1.default('div', 'indicator-wrap', [\n 'bottom: 0',\n 'left: 0',\n 'pointer-events: none',\n 'position: absolute',\n 'right: 0',\n ], [\n `height: ${this.hostDomain.height}px`,\n `top: ${this.hostDomain.config.topOffsetRatio * 100}%`,\n ]);\n this.leftOfIndicator = create_element_1.default('div', 'indicator', [\n 'position: absolute',\n `bottom: ${0}px`,\n 'cursor: -webkit-grab',\n 'background-color: rgba(0, 0, 0, .1)',\n 'z-index: 3',\n ], [\n `height: ${this.hostDomain.height}px`,\n 'left: 0',\n 'transform-origin: left',\n `width: ${this.leftWidth}px`,\n ]);\n this.rightOfIndicator = create_element_1.default('div', 'indicator', [], [\n `height: ${this.hostDomain.height}px`,\n 'right: 0',\n 'transform-origin: right',\n `width: ${this.rightWidth}px`,\n ]);\n wrapper.appendChild(this.leftOfIndicator);\n wrapper.appendChild(this.rightOfIndicator);\n return wrapper;\n }\n nextLeftWidth() {\n return this.offset * props_1.default.center;\n }\n nextRightWidth() {\n return props_1.default.viewportWidth - (this.nextLeftWidth() + this.width);\n }\n leftWidthScale() {\n return this.nextLeftWidth() / this.leftWidth;\n }\n rightWidthScale() {\n return this.nextRightWidth() / this.rightWidth;\n }\n}\nexports.default = Indicator;\n\n\n//# sourceURL=webpack://Timeline/./src/views/indicator/index.ts?"); /***/ }) diff --git a/build/src/constants.d.ts b/build/src/constants.d.ts index 73f5a15..2f7fbc7 100644 --- a/build/src/constants.d.ts +++ b/build/src/constants.d.ts @@ -8,7 +8,6 @@ export declare const CENTER_CHANGE = "CENTER_CHANGE"; export declare const CENTER_CHANGE_DONE = "CENTER_CHANGE_DONE"; export declare type Milliseconds = number; export declare type Grid = [Milliseconds, Milliseconds][][]; -export declare type ComponentType = 'EVENTS' | 'MINIMAP' | 'RULERS' | 'SPARKLINE'; export declare type Ratio = number; export declare type Pixels = number; export declare class RawSegment { @@ -16,3 +15,5 @@ export declare class RawSegment { from: Milliseconds; to: Milliseconds; } +export declare type Color = (opacity: number) => string; +export declare const colors: Color[]; diff --git a/build/src/index.d.ts b/build/src/index.d.ts index dc3dac2..d19e9d6 100644 --- a/build/src/index.d.ts +++ b/build/src/index.d.ts @@ -1,7 +1,7 @@ import Config from './models/config'; -import { orderEvents } from './utils/events.worker'; +import { orderEvents, OrderedEvents } from './utils/events.worker'; import Api from './api'; -export { orderEvents, Config as TimelineConfig }; +export { Config as TimelineConfig, orderEvents, OrderedEvents }; export default class Timeline extends Api { private wrapper; constructor(config: Config); @@ -11,5 +11,6 @@ export default class Timeline extends Api { private render(); private renderBands(); private renderIndicators(); + private renderLabels(); private appendToWrapper; } diff --git a/build/src/models/config.d.ts b/build/src/models/config.d.ts index f6e640e..b1ddea4 100644 --- a/build/src/models/config.d.ts +++ b/build/src/models/config.d.ts @@ -1,17 +1,7 @@ -import { Ratio, Milliseconds } from "../constants"; -import { RawEv3nt } from "./event"; +import { Ratio } from "../constants"; import DomainConfig from "./domain.config"; -export declare class AggregateEntry { - count: number; - year: number; -} export default class Config { - aggregate?: AggregateEntry[]; center?: Ratio; - domains: DomainConfig[]; - events: RawEv3nt[]; - from: Milliseconds; - rootElement: HTMLElement; - rowCount: number; - to: Milliseconds; + domains?: DomainConfig[]; + rootElement?: HTMLElement; } diff --git a/build/src/models/domain.config.d.ts b/build/src/models/domain.config.d.ts index 2260ee0..0dfa916 100644 --- a/build/src/models/domain.config.d.ts +++ b/build/src/models/domain.config.d.ts @@ -1,12 +1,15 @@ -import { Ratio, ComponentType } from "../constants"; +import { Ratio, Pixels } from "../constants"; +import { OrderedEvents } from "../utils/events.worker"; +import { RawEv3nt } from "./event"; export default class DomainConfig { - components: Set; - hasEvents?: boolean; - hasIndicatorFor?: number; + events?: RawEv3nt[]; + targets?: number[]; heightRatio?: Ratio; - hasRulers?: boolean; - hasSparkline?: boolean; + label?: string; + orderedEvents?: OrderedEvents; + rulers?: boolean; topOffsetRatio?: Ratio; + type?: 'events' | 'minimap'; visibleRatio?: Ratio; - constructor(props: any); + constructor(config: DomainConfig, viewportWidth: Pixels); } diff --git a/build/src/models/domain.d.ts b/build/src/models/domain.d.ts index 05e940c..5a2a62e 100644 --- a/build/src/models/domain.d.ts +++ b/build/src/models/domain.d.ts @@ -1,16 +1,17 @@ import { Granularity } from '../utils/dates'; import DomainConfig from './domain.config'; -import { Pixels, Milliseconds, Ratio } from '../constants'; +import { Pixels, Milliseconds, Ratio, Color } from '../constants'; declare class Domain { config: DomainConfig; + color: Color; granularity: Granularity; + height: number; pixelsPerMillisecond: number; width: number; - height: number; private _left; left: number; nextDate: (d: Milliseconds) => Milliseconds; - constructor(configProps: any); + constructor(config: DomainConfig, color: Color); updateLeft(): Pixels; positionAtDate(date: Milliseconds): Pixels; proportionAtPosition(position: Pixels): Ratio; diff --git a/build/src/models/props.d.ts b/build/src/models/props.d.ts index b852e19..84dedf2 100644 --- a/build/src/models/props.d.ts +++ b/build/src/models/props.d.ts @@ -1,13 +1,15 @@ -import { Ratio, Milliseconds } from "../constants"; +import { Ratio, Milliseconds, Pixels } from "../constants"; import Config from "./config"; import Domain from "./domain"; export declare class Props { private readonly defaultCenter; config: Config; domains: Domain[]; + from: Milliseconds; time: Milliseconds; - viewportHeight: number; - viewportWidth: number; + to: Milliseconds; + viewportHeight: Pixels; + viewportWidth: Pixels; init(config: Config): void; private _center; center: Ratio; diff --git a/build/src/utils/aggregate.worker.d.ts b/build/src/utils/aggregate.worker.d.ts deleted file mode 100644 index 992eef0..0000000 --- a/build/src/utils/aggregate.worker.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { AggregateEntry } from "../models/config"; -declare const _default: (events: any, done: (response: AggregateEntry[]) => void) => void; -export default _default; diff --git a/build/src/utils/dates.d.ts b/build/src/utils/dates.d.ts index 23350fd..f19a4c0 100644 --- a/build/src/utils/dates.d.ts +++ b/build/src/utils/dates.d.ts @@ -17,4 +17,4 @@ export declare const format: (date: Date, granularity: Granularity) => string; export declare const getGranularity: (from: number, to: number, visibleRatio: number) => Granularity; export declare const getStep: (granularity: Granularity) => number; export declare function subsequentDate(granularity: Granularity): ((date: Milliseconds) => Milliseconds); -export declare function byDate(a: RawEv3nt, b: RawEv3nt): 0 | 1 | -1; +export declare function byDate(a: RawEv3nt, b: RawEv3nt): 1 | -1 | 0; diff --git a/build/src/utils/events.worker.d.ts b/build/src/utils/events.worker.d.ts index 7e3d879..47e86a8 100644 --- a/build/src/utils/events.worker.d.ts +++ b/build/src/utils/events.worker.d.ts @@ -1,6 +1,12 @@ import { Milliseconds, Grid, Pixels, Ratio } from "../constants"; import { RawEv3nt } from "../models/event"; -export declare type OrderedEvents = [RawEv3nt[], Milliseconds, Milliseconds, Grid, number]; +export declare class OrderedEvents { + events: RawEv3nt[]; + from: Milliseconds; + to: Milliseconds; + grid: Grid; + rowCount: number; +} export declare function orderEvents(events: RawEv3nt[], viewportWidth: Pixels, visibleRatio: Ratio): OrderedEvents; export declare function eventsWorker(e: { data: { @@ -8,5 +14,5 @@ export declare function eventsWorker(e: { orderEventsURL: string; }; }): void; -declare const _default: (events: RawEv3nt[], done: (response: [RawEv3nt[], number, number, [number, number][][], number]) => void) => void; +declare const _default: (events: RawEv3nt[], done: (response: OrderedEvents) => void) => void; export default _default; diff --git a/build/src/views/band/events/event/interval/index.d.ts b/build/src/views/band/events/event/interval/index.d.ts index 74df621..f841a61 100644 --- a/build/src/views/band/events/event/interval/index.d.ts +++ b/build/src/views/band/events/event/interval/index.d.ts @@ -1,7 +1,9 @@ import DomainEvent from "../../../../../models/event"; -export default class PointInTime { +import Domain from "../../../../../models/domain"; +export default class Interval { + private domain; private event; private segmentOffset; - constructor(event: DomainEvent, segmentOffset: number); + constructor(domain: Domain, event: DomainEvent, segmentOffset: number); render(): any; } diff --git a/build/src/views/band/events/event/point-in-time/index.d.ts b/build/src/views/band/events/event/point-in-time/index.d.ts index 74df621..99230b6 100644 --- a/build/src/views/band/events/event/point-in-time/index.d.ts +++ b/build/src/views/band/events/event/point-in-time/index.d.ts @@ -1,7 +1,9 @@ import DomainEvent from "../../../../../models/event"; +import Domain from "../../../../../models/domain"; export default class PointInTime { + private domain; private event; private segmentOffset; - constructor(event: DomainEvent, segmentOffset: number); + constructor(domain: Domain, event: DomainEvent, segmentOffset: number); render(): any; } diff --git a/build/src/views/band/rulers/index.d.ts b/build/src/views/band/rulers/index.d.ts index cf6f0bd..e516e83 100644 --- a/build/src/views/band/rulers/index.d.ts +++ b/build/src/views/band/rulers/index.d.ts @@ -1,7 +1,7 @@ import Domain from '../../../models/domain'; import { Granularity } from '../../../utils/dates'; import { Milliseconds } from '../../../constants'; -export declare function findClosestRulerDate(d: Milliseconds, granularity: Granularity): Milliseconds; +export declare function findClosestRulerDate(timestamp: Milliseconds, granularity: Granularity): Milliseconds; export default class Rulers { private domain; private ul; diff --git a/build/src/views/band/sparkline/index.d.ts b/build/src/views/band/sparkline/index.d.ts deleted file mode 100644 index 246150e..0000000 --- a/build/src/views/band/sparkline/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import Domain from '../../../models/domain'; -import { AggregateEntry } from '../../../models/config'; -export default class Sparkline { - private domain; - private aggregate; - private svg; - constructor(domain: Domain, aggregate: AggregateEntry[]); - render(): SVGElement; - protected renderChildren(): void; - private createPath(); - private renderPath(); -} diff --git a/build/src/views/indicator/index.d.ts b/build/src/views/indicator/index.d.ts index 0038e54..a7f68e9 100644 --- a/build/src/views/indicator/index.d.ts +++ b/build/src/views/indicator/index.d.ts @@ -1,14 +1,13 @@ import Domain from '../../models/domain'; export default class Indicator { private hostDomain; - private targetDomain; private leftOfIndicator; private rightOfIndicator; private width; private leftWidth; private rightWidth; private offset; - constructor(hostDomain: Domain, targetDomain: Domain); + constructor(hostDomain: Domain); render(): any; private handleCenterChange; private nextLeftWidth(); diff --git a/data/explorers.json b/data/explorers.json index 9e56e51..fe633ba 100644 --- a/data/explorers.json +++ b/data/explorers.json @@ -1,46 +1,46 @@ [ { - "title": "Abel Tasman", + "label": "Abel Tasman", "date": -11581401600000, "end_date": -9789811200000 }, { - "title": "Ferdinand Magellan", + "label": "Ferdinand Magellan", "date": -15460070400000, "end_date": -14159059200000 }, { - "title": "Christopher Columbus", + "label": "Christopher Columbus", "date": -16351891200000, "end_date": -14630457600000 }, { - "title": "Vasco da Gama", + "label": "Vasco da Gama", "date": -16094073600000, "end_date": -14043542400000 }, { - "title": "Bartolomeu Dias", + "label": "Bartolomeu Dias", "date": -16409606400000, "end_date": -14818982400000 }, { - "title": "Amerigo Vespucci", + "label": "Amerigo Vespucci", "date": -16277587200000, "end_date": -14448672000000 }, { - "title": "Meriwether Lewis", + "label": "Meriwether Lewis", "date": -6165331200000, "end_date": -5056214400000 }, { - "title": "William Clark", + "label": "William Clark", "date": -6293030400000, "end_date": -4144521600000 }, { - "title": "Jacob Roggeveen", + "label": "Jacob Roggeveen", "date": -9811497600000, "end_date": -7602595200000 } diff --git a/data/floods.json b/data/floods.json index 7910a93..84f7f30 100644 --- a/data/floods.json +++ b/data/floods.json @@ -1,7822 +1,7822 @@ [ { "date": 405385200000, - "title": "Andorra", + "label": "Andorra", "end_date": 405558000000 }, { "date": -2285366400000, - "title": "Austria", + "label": "Austria", "end_date": -2285020800000 }, { "date": -2218147200000, - "title": "Austria", + "label": "Austria", "end_date": -2218147200000 }, { "date": -1971136800000, - "title": "Austria", + "label": "Austria", "end_date": -1971136800000 }, { "date": -359431200000, - "title": "Austria", + "label": "Austria", "end_date": -359344800000 }, { "date": -136864800000, - "title": "Austria", + "label": "Austria", "end_date": -136519200000 }, { "date": -106365600000, - "title": "Austria", + "label": "Austria", "end_date": -106365600000 }, { "date": 492213600000, - "title": "Austria", + "label": "Austria", "end_date": 492300000000 }, { "date": 556840800000, - "title": "Austria", + "label": "Austria", "end_date": 557100000000 }, { "date": 681084000000, - "title": "Austria", + "label": "Austria", "end_date": 681429600000 }, { "date": 773013600000, - "title": "Austria", + "label": "Austria", "end_date": 773013600000 }, { "date": 804204000000, - "title": "Austria", + "label": "Austria", "end_date": 804204000000 }, { "date": 835135200000, - "title": "Austria", + "label": "Austria", "end_date": 835480800000 }, { "date": 867967200000, - "title": "Austria", + "label": "Austria", "end_date": 868312800000 }, { "date": 869176800000, - "title": "Austria", + "label": "Austria", "end_date": 869522400000 }, { "date": 927324000000, - "title": "Austria", + "label": "Austria", "end_date": 927928800000 }, { "date": 1016665200000, - "title": "Austria", + "label": "Austria", "end_date": 1017957600000 }, { "date": 1029103200000, - "title": "Austria", + "label": "Austria", "end_date": 1029794400000 }, { "date": 1120946400000, - "title": "Austria", + "label": "Austria", "end_date": 1121205600000 }, { "date": 1124575200000, - "title": "Austria", + "label": "Austria", "end_date": 1125007200000 }, { "date": 1143496800000, - "title": "Austria", + "label": "Austria", "end_date": 1143496800000 }, { "date": 1245621600000, - "title": "Austria", + "label": "Austria", "end_date": 1246226400000 }, { "date": 1247695200000, - "title": "Austria", + "label": "Austria", "end_date": 1247954400000 }, { "date": 1370124000000, - "title": "Austria", + "label": "Austria", "end_date": 1370210400000 }, { "date": -2013642000000, - "title": "Belgium", + "label": "Belgium", "end_date": -2013642000000 }, { "date": -2008202400000, - "title": "Belgium", + "label": "Belgium", "end_date": -2008202400000 }, { "date": -1388538000000, - "title": "Belgium", + "label": "Belgium", "end_date": -1388278800000 }, { "date": -1297036800000, - "title": "Belgium", + "label": "Belgium", "end_date": -1296950400000 }, { "date": -551757600000, - "title": "Belgium", + "label": "Belgium", "end_date": -551757600000 }, { "date": -533869200000, - "title": "Belgium", + "label": "Belgium", "end_date": -533782800000 }, { "date": -428983200000, - "title": "Belgium", + "label": "Belgium", "end_date": -428983200000 }, { "date": 52009200000, - "title": "Belgium", + "label": "Belgium", "end_date": 52009200000 }, { "date": 189471600000, - "title": "Belgium", + "label": "Belgium", "end_date": 189471600000 }, { "date": 556754400000, - "title": "Belgium", + "label": "Belgium", "end_date": 556754400000 }, { "date": 756345600000, - "title": "Belgium", + "label": "Belgium", "end_date": 757296000000 }, { "date": 775605600000, - "title": "Belgium", + "label": "Belgium", "end_date": 775605600000 }, { "date": 790642800000, - "title": "Belgium", + "label": "Belgium", "end_date": 791679600000 }, { "date": 905637600000, - "title": "Belgium", + "label": "Belgium", "end_date": 905724000000 }, { "date": 1126303200000, - "title": "Belgium", + "label": "Belgium", "end_date": 1126389600000 }, { "date": 1289433600000, - "title": "Belgium", + "label": "Belgium", "end_date": 1289779200000 }, { "date": 1464818400000, - "title": "Belgium", + "label": "Belgium", "end_date": 1464904800000 }, { "date": 849312000000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 849654000000 }, { "date": 882057600000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 887583600000 }, { "date": 1022709600000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1022882400000 }, { "date": 1028930400000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1029016800000 }, { "date": 1117058400000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1118613600000 }, { "date": 1120255200000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1120600800000 }, { "date": 1123106400000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1123711200000 }, { "date": 1127253600000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1127426400000 }, { "date": 1179784800000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1181080800000 }, { "date": 1186264800000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1186524000000 }, { "date": 1195171200000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1195603200000 }, { "date": 1328050800000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1328482800000 }, { "date": 1403128800000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1403647200000 }, { "date": 1406584800000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1406930400000 }, { "date": 1409868000000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1410127200000 }, { "date": 1422745200000, - "title": "Bulgaria", + "label": "Bulgaria", "end_date": 1423004400000 }, { "date": -165722400000, - "title": "Croatia", + "label": "Croatia", "end_date": -165722400000 }, { "date": -97376400000, - "title": "Croatia", + "label": "Croatia", "end_date": -97376400000 }, { "date": -3600000, - "title": "Croatia", + "label": "Croatia", "end_date": -3600000 }, { "date": 149814000000, - "title": "Croatia", + "label": "Croatia", "end_date": 149814000000 }, { "date": 615247200000, - "title": "Croatia", + "label": "Croatia", "end_date": 615247200000 }, { "date": 905810400000, - "title": "Croatia", + "label": "Croatia", "end_date": 905896800000 }, { "date": 909874800000, - "title": "Croatia", + "label": "Croatia", "end_date": 909874800000 }, { "date": 977961600000, - "title": "Croatia", + "label": "Croatia", "end_date": 978134400000 }, { "date": 999727200000, - "title": "Croatia", + "label": "Croatia", "end_date": 999727200000 }, { "date": 1275170400000, - "title": "Croatia", + "label": "Croatia", "end_date": 1276984800000 }, { "date": 1284674400000, - "title": "Croatia", + "label": "Croatia", "end_date": 1286402400000 }, { "date": 1291330800000, - "title": "Croatia", + "label": "Croatia", "end_date": 1291330800000 }, { "date": 1352070000000, - "title": "Croatia", + "label": "Croatia", "end_date": 1352156400000 }, { "date": 1400104800000, - "title": "Croatia", + "label": "Croatia", "end_date": 1400536800000 }, { "date": 1410645600000, - "title": "Croatia", + "label": "Croatia", "end_date": 1410732000000 }, { "date": 1444780800000, - "title": "Croatia", + "label": "Croatia", "end_date": 1444953600000 }, { "date": 486165600000, - "title": "Cyprus", + "label": "Cyprus", "end_date": 486165600000 }, { "date": -3080073600000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": -3079987200000 }, { "date": -2503353600000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": -2503267200000 }, { "date": -2285539200000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": -2285452800000 }, { "date": -113191200000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": -113191200000 }, { "date": 13734000000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 13734000000 }, { "date": 146098800000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 146444400000 }, { "date": 577490400000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 577576800000 }, { "date": 831679200000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 832024800000 }, { "date": 867794400000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 869695200000 }, { "date": 901144800000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 901490400000 }, { "date": 952470000000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 952902000000 }, { "date": 1028671200000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1030485600000 }, { "date": 1111014000000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1111705200000 }, { "date": 1143496800000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1145224800000 }, { "date": 1245535200000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1246140000000 }, { "date": 1273874400000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1274824800000 }, { "date": 1281132000000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1281218400000 }, { "date": 1369692000000, - "title": "Czech Republic", + "label": "Czech Republic", "end_date": 1371506400000 }, { "date": -3065212800000, - "title": "Denmark", + "label": "Denmark", "end_date": -3065126400000 }, { "date": 375408000000, - "title": "Denmark", + "label": "Denmark", "end_date": 375408000000 }, { "date": 633308400000, - "title": "Denmark", + "label": "Denmark", "end_date": 633308400000 }, { "date": 663375600000, - "title": "Denmark", + "label": "Denmark", "end_date": 663375600000 }, { "date": 730249200000, - "title": "Denmark", + "label": "Denmark", "end_date": 730249200000 }, { "date": 944175600000, - "title": "Denmark", + "label": "Denmark", "end_date": 944175600000 }, { "date": 1105138800000, - "title": "Denmark", + "label": "Denmark", "end_date": 1105138800000 }, { "date": 1162335600000, - "title": "Denmark", + "label": "Denmark", "end_date": 1162335600000 }, { "date": 1105052400000, - "title": "Estonia", + "label": "Estonia", "end_date": 1105138800000 }, { "date": -2261692800000, - "title": "Finland", + "label": "Finland", "end_date": -2227478400000 }, { "date": -2237846400000, - "title": "Finland", + "label": "Finland", "end_date": -2235427200000 }, { "date": -528256800000, - "title": "Finland", + "label": "Finland", "end_date": -528256800000 }, { "date": -115696800000, - "title": "Finland", + "label": "Finland", "end_date": -115696800000 }, { "date": 449618400000, - "title": "Finland", + "label": "Finland", "end_date": 449618400000 }, { "date": 610322400000, - "title": "Finland", + "label": "Finland", "end_date": 610322400000 }, { "date": 956354400000, - "title": "Finland", + "label": "Finland", "end_date": 957045600000 }, { "date": 1090879200000, - "title": "Finland", + "label": "Finland", "end_date": 1090879200000 }, { "date": 1105052400000, - "title": "Finland", + "label": "Finland", "end_date": 1105138800000 }, { "date": 1116972000000, - "title": "Finland", + "label": "Finland", "end_date": 1117490400000 }, { "date": 1186869600000, - "title": "Finland", + "label": "Finland", "end_date": 1186869600000 }, { "date": 1349388000000, - "title": "Finland", + "label": "Finland", "end_date": 1350259200000 }, { "date": -3104611200000, - "title": "France", + "label": "France", "end_date": -3104611200000 }, { "date": -3090700800000, - "title": "France", + "label": "France", "end_date": -3090614400000 }, { "date": -3066249600000, - "title": "France", + "label": "France", "end_date": -3050870400000 }, { "date": -2984515200000, - "title": "France", + "label": "France", "end_date": -2982700800000 }, { "date": -2981750400000, - "title": "France", + "label": "France", "end_date": -2981750400000 }, { "date": -2975961600000, - "title": "France", + "label": "France", "end_date": -2975875200000 }, { "date": -2941228800000, - "title": "France", + "label": "France", "end_date": -2941228800000 }, { "date": -2806185600000, - "title": "France", + "label": "France", "end_date": -2806185600000 }, { "date": -2668464000000, - "title": "France", + "label": "France", "end_date": -2668291200000 }, { "date": -2624918400000, - "title": "France", + "label": "France", "end_date": -2624832000000 }, { "date": -2556316800000, - "title": "France", + "label": "France", "end_date": -2555884800000 }, { "date": -2501971200000, - "title": "France", + "label": "France", "end_date": -2501625600000 }, { "date": -2444774400000, - "title": "France", + "label": "France", "end_date": -2444774400000 }, { "date": -2434406400000, - "title": "France", + "label": "France", "end_date": -2434406400000 }, { "date": -2185581600000, - "title": "France", + "label": "France", "end_date": -2185581600000 }, { "date": -1989792000000, - "title": "France", + "label": "France", "end_date": -1989446400000 }, { "date": -1965088800000, - "title": "France", + "label": "France", "end_date": -1963180800000 }, { "date": -1964570400000, - "title": "France", + "label": "France", "end_date": -1961971200000 }, { "date": -1961283600000, - "title": "France", + "label": "France", "end_date": -1961283600000 }, { "date": -1902189600000, - "title": "France", + "label": "France", "end_date": -1902189600000 }, { "date": -1891990800000, - "title": "France", + "label": "France", "end_date": -1887757200000 }, { "date": -1866412800000, - "title": "France", + "label": "France", "end_date": -1862956800000 }, { "date": -1691546400000, - "title": "France", + "label": "France", "end_date": -1691546400000 }, { "date": -1578614400000, - "title": "France", + "label": "France", "end_date": -1575594000000 }, { "date": -1451005200000, - "title": "France", + "label": "France", "end_date": -1451005200000 }, { "date": -1428804000000, - "title": "France", + "label": "France", "end_date": -1428631200000 }, { "date": -1424826000000, - "title": "France", + "label": "France", "end_date": -1424826000000 }, { "date": -1364954400000, - "title": "France", + "label": "France", "end_date": -1359936000000 }, { "date": -1351299600000, - "title": "France", + "label": "France", "end_date": -1351040400000 }, { "date": -1271383200000, - "title": "France", + "label": "France", "end_date": -1271383200000 }, { "date": -1257210000000, - "title": "France", + "label": "France", "end_date": -1256950800000 }, { "date": -1248055200000, - "title": "France", + "label": "France", "end_date": -1248055200000 }, { "date": -1175824800000, - "title": "France", + "label": "France", "end_date": -1175738400000 }, { "date": -1144548000000, - "title": "France", + "label": "France", "end_date": -1144375200000 }, { "date": -1035248400000, - "title": "France", + "label": "France", "end_date": -1035162000000 }, { "date": -1015632000000, - "title": "France", + "label": "France", "end_date": -1015545600000 }, { "date": -921801600000, - "title": "France", + "label": "France", "end_date": -921456000000 }, { "date": -919036800000, - "title": "France", + "label": "France", "end_date": -919036800000 }, { "date": -873511200000, - "title": "France", + "label": "France", "end_date": -873424800000 }, { "date": -832125600000, - "title": "France", + "label": "France", "end_date": -832125600000 }, { "date": -694828800000, - "title": "France", + "label": "France", "end_date": -693104400000 }, { "date": -634608000000, - "title": "France", + "label": "France", "end_date": -634262400000 }, { "date": -565491600000, - "title": "France", + "label": "France", "end_date": -564973200000 }, { "date": -558410400000, - "title": "France", + "label": "France", "end_date": -558237600000 }, { "date": -522727200000, - "title": "France", + "label": "France", "end_date": -522554400000 }, { "date": -507258000000, - "title": "France", + "label": "France", "end_date": -506998800000 }, { "date": -472611600000, - "title": "France", + "label": "France", "end_date": -470797200000 }, { "date": -444614400000, - "title": "France", + "label": "France", "end_date": -444614400000 }, { "date": -396151200000, - "title": "France", + "label": "France", "end_date": -395978400000 }, { "date": -355284000000, - "title": "France", + "label": "France", "end_date": -354938400000 }, { "date": -291780000000, - "title": "France", + "label": "France", "end_date": -291693600000 }, { "date": -244778400000, - "title": "France", + "label": "France", "end_date": -244346400000 }, { "date": -100569600000, - "title": "France", + "label": "France", "end_date": -100483200000 }, { "date": 10364400000, - "title": "France", + "label": "France", "end_date": 12697200000 }, { "date": 24015600000, - "title": "France", + "label": "France", "end_date": 24451200000 }, { "date": 47516400000, - "title": "France", + "label": "France", "end_date": 47516400000 }, { "date": 54082800000, - "title": "France", + "label": "France", "end_date": 54082800000 }, { "date": 80262000000, - "title": "France", + "label": "France", "end_date": 80262000000 }, { "date": 82594800000, - "title": "France", + "label": "France", "end_date": 82681200000 }, { "date": 94608000000, - "title": "France", + "label": "France", "end_date": 94608000000 }, { "date": 110588400000, - "title": "France", + "label": "France", "end_date": 110588400000 }, { "date": 129682800000, - "title": "France", + "label": "France", "end_date": 130114800000 }, { "date": 149122800000, - "title": "France", + "label": "France", "end_date": 149122800000 }, { "date": 215049600000, - "title": "France", + "label": "France", "end_date": 215136000000 }, { "date": 232754400000, - "title": "France", + "label": "France", "end_date": 232840800000 }, { "date": 236988000000, - "title": "France", + "label": "France", "end_date": 237160800000 }, { "date": 248313600000, - "title": "France", + "label": "France", "end_date": 248400000000 }, { "date": 253321200000, - "title": "France", + "label": "France", "end_date": 253839600000 }, { "date": 258850800000, - "title": "France", + "label": "France", "end_date": 260319600000 }, { "date": 308361600000, - "title": "France", + "label": "France", "end_date": 308880000000 }, { "date": 338248800000, - "title": "France", + "label": "France", "end_date": 338335200000 }, { "date": 377222400000, - "title": "France", + "label": "France", "end_date": 378345600000 }, { "date": 396050400000, - "title": "France", + "label": "France", "end_date": 396136800000 }, { "date": 405385200000, - "title": "France", + "label": "France", "end_date": 405558000000 }, { "date": 408672000000, - "title": "France", + "label": "France", "end_date": 409622400000 }, { "date": 418341600000, - "title": "France", + "label": "France", "end_date": 418687200000 }, { "date": 423612000000, - "title": "France", + "label": "France", "end_date": 423612000000 }, { "date": 430610400000, - "title": "France", + "label": "France", "end_date": 430783200000 }, { "date": 499392000000, - "title": "France", + "label": "France", "end_date": 499564800000 }, { "date": 519688800000, - "title": "France", + "label": "France", "end_date": 519688800000 }, { "date": 529545600000, - "title": "France", + "label": "France", "end_date": 529632000000 }, { "date": 553125600000, - "title": "France", + "label": "France", "end_date": 553212000000 }, { "date": 591836400000, - "title": "France", + "label": "France", "end_date": 591836400000 }, { "date": 592617600000, - "title": "France", + "label": "France", "end_date": 592617600000 }, { "date": 634777200000, - "title": "France", + "label": "France", "end_date": 636159600000 }, { "date": 643154400000, - "title": "France", + "label": "France", "end_date": 643154400000 }, { "date": 656208000000, - "title": "France", + "label": "France", "end_date": 656294400000 }, { "date": 659491200000, - "title": "France", + "label": "France", "end_date": 659664000000 }, { "date": 717026400000, - "title": "France", + "label": "France", "end_date": 717112800000 }, { "date": 717458400000, - "title": "France", + "label": "France", "end_date": 717544800000 }, { "date": 717544800000, - "title": "France", + "label": "France", "end_date": 717634800000 }, { "date": 741823200000, - "title": "France", + "label": "France", "end_date": 741823200000 }, { "date": 748735200000, - "title": "France", + "label": "France", "end_date": 748908000000 }, { "date": 749775600000, - "title": "France", + "label": "France", "end_date": 749948400000 }, { "date": 750034800000, - "title": "France", + "label": "France", "end_date": 750121200000 }, { "date": 752025600000, - "title": "France", + "label": "France", "end_date": 752194800000 }, { "date": 756345600000, - "title": "France", + "label": "France", "end_date": 757296000000 }, { "date": 757810800000, - "title": "France", + "label": "France", "end_date": 757897200000 }, { "date": 772581600000, - "title": "France", + "label": "France", "end_date": 772581600000 }, { "date": 774741600000, - "title": "France", + "label": "France", "end_date": 775000800000 }, { "date": 782524800000, - "title": "France", + "label": "France", "end_date": 782611200000 }, { "date": 783903600000, - "title": "France", + "label": "France", "end_date": 784076400000 }, { "date": 784076400000, - "title": "France", + "label": "France", "end_date": 784076400000 }, { "date": 790642800000, - "title": "France", + "label": "France", "end_date": 792111600000 }, { "date": 821228400000, - "title": "France", + "label": "France", "end_date": 821401200000 }, { "date": 822783600000, - "title": "France", + "label": "France", "end_date": 822956400000 }, { "date": 849654000000, - "title": "France", + "label": "France", "end_date": 850086000000 }, { "date": 866239200000, - "title": "France", + "label": "France", "end_date": 866498400000 }, { "date": 878770800000, - "title": "France", + "label": "France", "end_date": 878857200000 }, { "date": 882230400000, - "title": "France", + "label": "France", "end_date": 882576000000 }, { "date": 895010400000, - "title": "France", + "label": "France", "end_date": 895010400000 }, { "date": 916614000000, - "title": "France", + "label": "France", "end_date": 916614000000 }, { "date": 933199200000, - "title": "France", + "label": "France", "end_date": 933199200000 }, { "date": 942364800000, - "title": "France", + "label": "France", "end_date": 942451200000 }, { "date": 957823200000, - "title": "France", + "label": "France", "end_date": 957823200000 }, { "date": 960501600000, - "title": "France", + "label": "France", "end_date": 960674400000 }, { "date": 962834400000, - "title": "France", + "label": "France", "end_date": 963093600000 }, { "date": 969314400000, - "title": "France", + "label": "France", "end_date": 969400800000 }, { "date": 971481600000, - "title": "France", + "label": "France", "end_date": 971568000000 }, { "date": 973378800000, - "title": "France", + "label": "France", "end_date": 973465200000 }, { "date": 973465200000, - "title": "France", + "label": "France", "end_date": 974678400000 }, { "date": 976492800000, - "title": "France", + "label": "France", "end_date": 976665600000 }, { "date": 975711600000, - "title": "France", + "label": "France", "end_date": 975711600000 }, { "date": 985215600000, - "title": "France", + "label": "France", "end_date": 985730400000 }, { "date": 986594400000, - "title": "France", + "label": "France", "end_date": 988754400000 }, { "date": 994197600000, - "title": "France", + "label": "France", "end_date": 994456800000 }, { "date": 1002319200000, - "title": "France", + "label": "France", "end_date": 1002405600000 }, { "date": 1009238400000, - "title": "France", + "label": "France", "end_date": 1010185200000 }, { "date": 1023314400000, - "title": "France", + "label": "France", "end_date": 1023314400000 }, { "date": 1029621600000, - "title": "France", + "label": "France", "end_date": 1029621600000 }, { "date": 1031436000000, - "title": "France", + "label": "France", "end_date": 1031522400000 }, { "date": 1037404800000, - "title": "France", + "label": "France", "end_date": 1037750400000 }, { "date": 1039388400000, - "title": "France", + "label": "France", "end_date": 1039824000000 }, { "date": 1041807600000, - "title": "France", + "label": "France", "end_date": 1041807600000 }, { "date": 1054418400000, - "title": "France", + "label": "France", "end_date": 1054418400000 }, { "date": 1064181600000, - "title": "France", + "label": "France", "end_date": 1064268000000 }, { "date": 1070233200000, - "title": "France", + "label": "France", "end_date": 1071014400000 }, { "date": 1116280800000, - "title": "France", + "label": "France", "end_date": 1116280800000 }, { "date": 1126044000000, - "title": "France", + "label": "France", "end_date": 1126216800000 }, { "date": 1132012800000, - "title": "France", + "label": "France", "end_date": 1132185600000 }, { "date": 1133478000000, - "title": "France", + "label": "France", "end_date": 1133478000000 }, { "date": 1138230000000, - "title": "France", + "label": "France", "end_date": 1138489200000 }, { "date": 1180044000000, - "title": "France", + "label": "France", "end_date": 1180216800000 }, { "date": 1181167200000, - "title": "France", + "label": "France", "end_date": 1181253600000 }, { "date": 1205103600000, - "title": "France", + "label": "France", "end_date": 1205103600000 }, { "date": 1212012000000, - "title": "France", + "label": "France", "end_date": 1212098400000 }, { "date": 1267311600000, - "title": "France", + "label": "France", "end_date": 1267484400000 }, { "date": 1276552800000, - "title": "France", + "label": "France", "end_date": 1276725600000 }, { "date": 1320102000000, - "title": "France", + "label": "France", "end_date": 1320793200000 }, { "date": 1362438000000, - "title": "France", + "label": "France", "end_date": 1362524400000 }, { "date": 1367359200000, - "title": "France", + "label": "France", "end_date": 1367791200000 }, { "date": 1371420000000, - "title": "France", + "label": "France", "end_date": 1371592800000 }, { "date": 1382400000000, - "title": "France", + "label": "France", "end_date": 1382486400000 }, { "date": 1389826800000, - "title": "France", + "label": "France", "end_date": 1390086000000 }, { "date": 1410818400000, - "title": "France", + "label": "France", "end_date": 1411077600000 }, { "date": 1411855200000, - "title": "France", + "label": "France", "end_date": 1412028000000 }, { "date": 1415836800000, - "title": "France", + "label": "France", "end_date": 1416096000000 }, { "date": 1417219200000, - "title": "France", + "label": "France", "end_date": 1417734000000 }, { "date": 1433887200000, - "title": "France", + "label": "France", "end_date": 1433887200000 }, { "date": 1443823200000, - "title": "France", + "label": "France", "end_date": 1443909600000 }, { "date": 1464732000000, - "title": "France", + "label": "France", "end_date": 1466460000000 }, { "date": -3065212800000, - "title": "Germany", + "label": "Germany", "end_date": -3065126400000 }, { "date": -2979331200000, - "title": "Germany", + "label": "Germany", "end_date": -2979331200000 }, { "date": -2825971200000, - "title": "Germany", + "label": "Germany", "end_date": -2825971200000 }, { "date": -2795817600000, - "title": "Germany", + "label": "Germany", "end_date": -2795817600000 }, { "date": -2748124800000, - "title": "Germany", + "label": "Germany", "end_date": -2743804800000 }, { "date": -2748124800000, - "title": "Germany", + "label": "Germany", "end_date": -2743113600000 }, { "date": -2580595200000, - "title": "Germany", + "label": "Germany", "end_date": -2578780800000 }, { "date": -2496268800000, - "title": "Germany", + "label": "Germany", "end_date": -2496009600000 }, { "date": -2329430400000, - "title": "Germany", + "label": "Germany", "end_date": -2329084800000 }, { "date": -2285539200000, - "title": "Germany", + "label": "Germany", "end_date": -2285452800000 }, { "date": -2285539200000, - "title": "Germany", + "label": "Germany", "end_date": -2285280000000 }, { "date": -2211321600000, - "title": "Germany", + "label": "Germany", "end_date": -2211321600000 }, { "date": -2098058400000, - "title": "Germany", + "label": "Germany", "end_date": -2096503200000 }, { "date": -1922230800000, - "title": "Germany", + "label": "Germany", "end_date": -1920675600000 }, { "date": -1879293600000, - "title": "Germany", + "label": "Germany", "end_date": -1879207200000 }, { "date": -1640998800000, - "title": "Germany", + "label": "Germany", "end_date": -1638406800000 }, { "date": -1556330400000, - "title": "Germany", + "label": "Germany", "end_date": -1556157600000 }, { "date": -1446512400000, - "title": "Germany", + "label": "Germany", "end_date": -1443924000000 }, { "date": -1389052800000, - "title": "Germany", + "label": "Germany", "end_date": -1388365200000 }, { "date": -1374372000000, - "title": "Germany", + "label": "Germany", "end_date": -1373248800000 }, { "date": -1340762400000, - "title": "Germany", + "label": "Germany", "end_date": -1340676000000 }, { "date": -1214704800000, - "title": "Germany", + "label": "Germany", "end_date": -1214704800000 }, { "date": -753930000000, - "title": "Germany", + "label": "Germany", "end_date": -753930000000 }, { "date": -719024400000, - "title": "Germany", + "label": "Germany", "end_date": -718765200000 }, { "date": -489636000000, - "title": "Germany", + "label": "Germany", "end_date": -488685600000 }, { "date": -456112800000, - "title": "Germany", + "label": "Germany", "end_date": -456112800000 }, { "date": -425008800000, - "title": "Germany", + "label": "Germany", "end_date": -424058400000 }, { "date": -362455200000, - "title": "Germany", + "label": "Germany", "end_date": -362368800000 }, { "date": -248490000000, - "title": "Germany", + "label": "Germany", "end_date": -248403600000 }, { "date": -109044000000, - "title": "Germany", + "label": "Germany", "end_date": -109044000000 }, { "date": 1810800000, - "title": "Germany", + "label": "Germany", "end_date": 5094000000 }, { "date": 18486000000, - "title": "Germany", + "label": "Germany", "end_date": 18572400000 }, { "date": 82681200000, - "title": "Germany", + "label": "Germany", "end_date": 82681200000 }, { "date": 123721200000, - "title": "Germany", + "label": "Germany", "end_date": 124675200000 }, { "date": 172796400000, - "title": "Germany", + "label": "Germany", "end_date": 173746800000 }, { "date": 177289200000, - "title": "Germany", + "label": "Germany", "end_date": 177289200000 }, { "date": 189385200000, - "title": "Germany", + "label": "Germany", "end_date": 189471600000 }, { "date": 241048800000, - "title": "Germany", + "label": "Germany", "end_date": 241048800000 }, { "date": 264636000000, - "title": "Germany", + "label": "Germany", "end_date": 264981600000 }, { "date": 318466800000, - "title": "Germany", + "label": "Germany", "end_date": 318726000000 }, { "date": 352854000000, - "title": "Germany", + "label": "Germany", "end_date": 353372400000 }, { "date": 360453600000, - "title": "Germany", + "label": "Germany", "end_date": 360453600000 }, { "date": 364514400000, - "title": "Germany", + "label": "Germany", "end_date": 364687200000 }, { "date": 379033200000, - "title": "Germany", + "label": "Germany", "end_date": 379206000000 }, { "date": 381279600000, - "title": "Germany", + "label": "Germany", "end_date": 381538800000 }, { "date": 418773600000, - "title": "Germany", + "label": "Germany", "end_date": 419119200000 }, { "date": 422748000000, - "title": "Germany", + "label": "Germany", "end_date": 423180000000 }, { "date": 444870000000, - "title": "Germany", + "label": "Germany", "end_date": 445129200000 }, { "date": 456616800000, - "title": "Germany", + "label": "Germany", "end_date": 456616800000 }, { "date": 515196000000, - "title": "Germany", + "label": "Germany", "end_date": 515196000000 }, { "date": 574556400000, - "title": "Germany", + "label": "Germany", "end_date": 575503200000 }, { "date": 575334000000, - "title": "Germany", + "label": "Germany", "end_date": 576108000000 }, { "date": 634950000000, - "title": "Germany", + "label": "Germany", "end_date": 635122800000 }, { "date": 642204000000, - "title": "Germany", + "label": "Germany", "end_date": 649202400000 }, { "date": 680997600000, - "title": "Germany", + "label": "Germany", "end_date": 681343200000 }, { "date": 756345600000, - "title": "Germany", + "label": "Germany", "end_date": 758156400000 }, { "date": 766188000000, - "title": "Germany", + "label": "Germany", "end_date": 766620000000 }, { "date": 772668000000, - "title": "Germany", + "label": "Germany", "end_date": 772840800000 }, { "date": 790729200000, - "title": "Germany", + "label": "Germany", "end_date": 791679600000 }, { "date": 801957600000, - "title": "Germany", + "label": "Germany", "end_date": 802562400000 }, { "date": 868485600000, - "title": "Germany", + "label": "Germany", "end_date": 871077600000 }, { "date": 909705600000, - "title": "Germany", + "label": "Germany", "end_date": 910047600000 }, { "date": 919378800000, - "title": "Germany", + "label": "Germany", "end_date": 919638000000 }, { "date": 926460000000, - "title": "Germany", + "label": "Germany", "end_date": 927928800000 }, { "date": 965426400000, - "title": "Germany", + "label": "Germany", "end_date": 965512800000 }, { "date": 1023314400000, - "title": "Germany", + "label": "Germany", "end_date": 1023400800000 }, { "date": 1029016800000, - "title": "Germany", + "label": "Germany", "end_date": 1029794400000 }, { "date": 1041462000000, - "title": "Germany", + "label": "Germany", "end_date": 1041980400000 }, { "date": 1111618800000, - "title": "Germany", + "label": "Germany", "end_date": 1111618800000 }, { "date": 1124575200000, - "title": "Germany", + "label": "Germany", "end_date": 1125007200000 }, { "date": 1143496800000, - "title": "Germany", + "label": "Germany", "end_date": 1145224800000 }, { "date": 1245621600000, - "title": "Germany", + "label": "Germany", "end_date": 1246053600000 }, { "date": 1246053600000, - "title": "Germany", + "label": "Germany", "end_date": 1246658400000 }, { "date": 1281045600000, - "title": "Germany", + "label": "Germany", "end_date": 1281218400000 }, { "date": 1285538400000, - "title": "Germany", + "label": "Germany", "end_date": 1286056800000 }, { "date": 1294354800000, - "title": "Germany", + "label": "Germany", "end_date": 1294614000000 }, { "date": 1356220800000, - "title": "Germany", + "label": "Germany", "end_date": 1356825600000 }, { "date": 1369692000000, - "title": "Germany", + "label": "Germany", "end_date": 1371506400000 }, { "date": 1406498400000, - "title": "Germany", + "label": "Germany", "end_date": 1406584800000 }, { "date": 1420239600000, - "title": "Germany", + "label": "Germany", "end_date": 1420239600000 }, { "date": 1434060000000, - "title": "Germany", + "label": "Germany", "end_date": 1434232800000 }, { "date": 1460757600000, - "title": "Germany", + "label": "Germany", "end_date": 1460844000000 }, { "date": 1464300000000, - "title": "Germany", + "label": "Germany", "end_date": 1464559200000 }, { "date": 1464645600000, - "title": "Germany", + "label": "Germany", "end_date": 1465423200000 }, { "date": -2593814400000, - "title": "Greece", + "label": "Greece", "end_date": -2593814400000 }, { "date": -2307744000000, - "title": "Greece", + "label": "Greece", "end_date": -2307744000000 }, { "date": -2213913600000, - "title": "Greece", + "label": "Greece", "end_date": -2213913600000 }, { "date": -1972173600000, - "title": "Greece", + "label": "Greece", "end_date": -1972173600000 }, { "date": -1425085200000, - "title": "Greece", + "label": "Greece", "end_date": -1425085200000 }, { "date": -1391904000000, - "title": "Greece", + "label": "Greece", "end_date": -1391904000000 }, { "date": -1296777600000, - "title": "Greece", + "label": "Greece", "end_date": -1296777600000 }, { "date": -1257901200000, - "title": "Greece", + "label": "Greece", "end_date": -1257901200000 }, { "date": -1236556800000, - "title": "Greece", + "label": "Greece", "end_date": -1236556800000 }, { "date": -1138669200000, - "title": "Greece", + "label": "Greece", "end_date": -1138669200000 }, { "date": -1107993600000, - "title": "Greece", + "label": "Greece", "end_date": -1107993600000 }, { "date": -1046307600000, - "title": "Greece", + "label": "Greece", "end_date": -1046307600000 }, { "date": -576122400000, - "title": "Greece", + "label": "Greece", "end_date": -576122400000 }, { "date": -449200800000, - "title": "Greece", + "label": "Greece", "end_date": -449200800000 }, { "date": -257302800000, - "title": "Greece", + "label": "Greece", "end_date": -257302800000 }, { "date": 217296000000, - "title": "Greece", + "label": "Greece", "end_date": 217296000000 }, { "date": 217555200000, - "title": "Greece", + "label": "Greece", "end_date": 217555200000 }, { "date": 247273200000, - "title": "Greece", + "label": "Greece", "end_date": 247273200000 }, { "date": 250560000000, - "title": "Greece", + "label": "Greece", "end_date": 250560000000 }, { "date": 278467200000, - "title": "Greece", + "label": "Greece", "end_date": 278553600000 }, { "date": 296863200000, - "title": "Greece", + "label": "Greece", "end_date": 296863200000 }, { "date": 311817600000, - "title": "Greece", + "label": "Greece", "end_date": 311904000000 }, { "date": 501465600000, - "title": "Greece", + "label": "Greece", "end_date": 501465600000 }, { "date": 543452400000, - "title": "Greece", + "label": "Greece", "end_date": 543452400000 }, { "date": 651448800000, - "title": "Greece", + "label": "Greece", "end_date": 651448800000 }, { "date": 657158400000, - "title": "Greece", + "label": "Greece", "end_date": 657158400000 }, { "date": 663894000000, - "title": "Greece", + "label": "Greece", "end_date": 663894000000 }, { "date": 722131200000, - "title": "Greece", + "label": "Greece", "end_date": 722131200000 }, { "date": 759970800000, - "title": "Greece", + "label": "Greece", "end_date": 759970800000 }, { "date": 782697600000, - "title": "Greece", + "label": "Greece", "end_date": 783216000000 }, { "date": 853023600000, - "title": "Greece", + "label": "Greece", "end_date": 853196400000 }, { "date": 886719600000, - "title": "Greece", + "label": "Greece", "end_date": 886806000000 }, { "date": 974592000000, - "title": "Greece", + "label": "Greece", "end_date": 974592000000 }, { "date": 978303600000, - "title": "Greece", + "label": "Greece", "end_date": 978303600000 }, { "date": 1008460800000, - "title": "Greece", + "label": "Greece", "end_date": 1008460800000 }, { "date": 1026079200000, - "title": "Greece", + "label": "Greece", "end_date": 1026165600000 }, { "date": 1108594800000, - "title": "Greece", + "label": "Greece", "end_date": 1111618800000 }, { "date": 1141858800000, - "title": "Greece", + "label": "Greece", "end_date": 1143241200000 }, { "date": 1160258400000, - "title": "Greece", + "label": "Greece", "end_date": 1160611200000 }, { "date": 1195171200000, - "title": "Greece", + "label": "Greece", "end_date": 1196550000000 }, { "date": 1256342400000, - "title": "Greece", + "label": "Greece", "end_date": 1256515200000 }, { "date": 1290988800000, - "title": "Greece", + "label": "Greece", "end_date": 1291503600000 }, { "date": 1328223600000, - "title": "Greece", + "label": "Greece", "end_date": 1328482800000 }, { "date": 1361487600000, - "title": "Greece", + "label": "Greece", "end_date": 1361487600000 }, { "date": 1422745200000, - "title": "Greece", + "label": "Greece", "end_date": 1423436400000 }, { "date": 1473026400000, - "title": "Greece", + "label": "Greece", "end_date": 1473285600000 }, { "date": -2963520000000, - "title": "Hungary", + "label": "Hungary", "end_date": -2961273600000 }, { "date": -2882390400000, - "title": "Hungary", + "label": "Hungary", "end_date": -2882390400000 }, { "date": -2867788800000, - "title": "Hungary", + "label": "Hungary", "end_date": -2867184000000 }, { "date": -2698963200000, - "title": "Hungary", + "label": "Hungary", "end_date": -2698963200000 }, { "date": -2648764800000, - "title": "Hungary", + "label": "Hungary", "end_date": -2648764800000 }, { "date": -696992400000, - "title": "Hungary", + "label": "Hungary", "end_date": -691722000000 }, { "date": -151462800000, - "title": "Hungary", + "label": "Hungary", "end_date": -143863200000 }, { "date": 11228400000, - "title": "Hungary", + "label": "Hungary", "end_date": 14252400000 }, { "date": 910047600000, - "title": "Hungary", + "label": "Hungary", "end_date": 911088000000 }, { "date": 919551600000, - "title": "Hungary", + "label": "Hungary", "end_date": 921711600000 }, { "date": 931471200000, - "title": "Hungary", + "label": "Hungary", "end_date": 932076000000 }, { "date": 954885600000, - "title": "Hungary", + "label": "Hungary", "end_date": 956613600000 }, { "date": 983660400000, - "title": "Hungary", + "label": "Hungary", "end_date": 984783600000 }, { "date": 1028671200000, - "title": "Hungary", + "label": "Hungary", "end_date": 1029621600000 }, { "date": 1090879200000, - "title": "Hungary", + "label": "Hungary", "end_date": 1091397600000 }, { "date": 1123970400000, - "title": "Hungary", + "label": "Hungary", "end_date": 1125007200000 }, { "date": 1143496800000, - "title": "Hungary", + "label": "Hungary", "end_date": 1147125600000 }, { "date": 1273874400000, - "title": "Hungary", + "label": "Hungary", "end_date": 1275861600000 }, { "date": 1370210400000, - "title": "Hungary", + "label": "Hungary", "end_date": 1370728800000 }, { "date": 1410645600000, - "title": "Hungary", + "label": "Hungary", "end_date": 1411682400000 }, { "date": 1466460000000, - "title": "Hungary", + "label": "Hungary", "end_date": 1466460000000 }, { "date": 588808800000, - "title": "Iceland", + "label": "Iceland", "end_date": 588808800000 }, { "date": 1166918400000, - "title": "Iceland", + "label": "Iceland", "end_date": 1166918400000 }, { "date": -1202601600000, - "title": "Ireland", + "label": "Ireland", "end_date": -1202601600000 }, { "date": -719370000000, - "title": "Ireland", + "label": "Ireland", "end_date": -719370000000 }, { "date": -475549200000, - "title": "Ireland", + "label": "Ireland", "end_date": -475376400000 }, { "date": -316051200000, - "title": "Ireland", + "label": "Ireland", "end_date": -316051200000 }, { "date": 341798400000, - "title": "Ireland", + "label": "Ireland", "end_date": 341798400000 }, { "date": 525304800000, - "title": "Ireland", + "label": "Ireland", "end_date": 525391200000 }, { "date": 739922400000, - "title": "Ireland", + "label": "Ireland", "end_date": 739922400000 }, { "date": 820710000000, - "title": "Ireland", + "label": "Ireland", "end_date": 821660400000 }, { "date": 867880800000, - "title": "Ireland", + "label": "Ireland", "end_date": 868226400000 }, { "date": 973378800000, - "title": "Ireland", + "label": "Ireland", "end_date": 973465200000 }, { "date": 1037232000000, - "title": "Ireland", + "label": "Ireland", "end_date": 1037318400000 }, { "date": 1098835200000, - "title": "Ireland", + "label": "Ireland", "end_date": 1098921600000 }, { "date": 1217455200000, - "title": "Ireland", + "label": "Ireland", "end_date": 1219096800000 }, { "date": 1258502400000, - "title": "Ireland", + "label": "Ireland", "end_date": 1258675200000 }, { "date": 1319500800000, - "title": "Ireland", + "label": "Ireland", "end_date": 1319500800000 }, { "date": 1374703200000, - "title": "Ireland", + "label": "Ireland", "end_date": 1374789600000 }, { "date": 1012518000000, - "title": "Isle of Man", + "label": "Isle of Man", "end_date": 1012518000000 }, { "date": -3079814400000, - "title": "Italy", + "label": "Italy", "end_date": -3078950400000 }, { "date": -3078086400000, - "title": "Italy", + "label": "Italy", "end_date": -3078086400000 }, { "date": -3068928000000, - "title": "Italy", + "label": "Italy", "end_date": -3066336000000 }, { "date": -3063657600000, - "title": "Italy", + "label": "Italy", "end_date": -3063398400000 }, { "date": -3044563200000, - "title": "Italy", + "label": "Italy", "end_date": -3044563200000 }, { "date": -2879020800000, - "title": "Italy", + "label": "Italy", "end_date": -2878848000000 }, { "date": -2754864000000, - "title": "Italy", + "label": "Italy", "end_date": -2754518400000 }, { "date": -2681337600000, - "title": "Italy", + "label": "Italy", "end_date": -2679955200000 }, { "date": -2662934400000, - "title": "Italy", + "label": "Italy", "end_date": -2662934400000 }, { "date": -2658960000000, - "title": "Italy", + "label": "Italy", "end_date": -2658960000000 }, { "date": -2654208000000, - "title": "Italy", + "label": "Italy", "end_date": -2654208000000 }, { "date": -2583360000000, - "title": "Italy", + "label": "Italy", "end_date": -2582668800000 }, { "date": -2565820800000, - "title": "Italy", + "label": "Italy", "end_date": -2565734400000 }, { "date": -2540678400000, - "title": "Italy", + "label": "Italy", "end_date": -2540678400000 }, { "date": -2532124800000, - "title": "Italy", + "label": "Italy", "end_date": -2532124800000 }, { "date": -2512684800000, - "title": "Italy", + "label": "Italy", "end_date": -2512684800000 }, { "date": -2503785600000, - "title": "Italy", + "label": "Italy", "end_date": -2503785600000 }, { "date": -2436134400000, - "title": "Italy", + "label": "Italy", "end_date": -2436134400000 }, { "date": -2401228800000, - "title": "Italy", + "label": "Italy", "end_date": -2401142400000 }, { "date": -2365545600000, - "title": "Italy", + "label": "Italy", "end_date": -2365545600000 }, { "date": -2311459200000, - "title": "Italy", + "label": "Italy", "end_date": -2311459200000 }, { "date": -2185754400000, - "title": "Italy", + "label": "Italy", "end_date": -2185495200000 }, { "date": -2124928800000, - "title": "Italy", + "label": "Italy", "end_date": -2124928800000 }, { "date": -2122768800000, - "title": "Italy", + "label": "Italy", "end_date": -2122768800000 }, { "date": -2088201600000, - "title": "Italy", + "label": "Italy", "end_date": -2088201600000 }, { "date": -2028333600000, - "title": "Italy", + "label": "Italy", "end_date": -2028333600000 }, { "date": -2004660000000, - "title": "Italy", + "label": "Italy", "end_date": -2004573600000 }, { "date": -1993593600000, - "title": "Italy", + "label": "Italy", "end_date": -1992643200000 }, { "date": -1963094400000, - "title": "Italy", + "label": "Italy", "end_date": -1963094400000 }, { "date": -1962316800000, - "title": "Italy", + "label": "Italy", "end_date": -1961715600000 }, { "date": -1961107200000, - "title": "Italy", + "label": "Italy", "end_date": -1961107200000 }, { "date": -1941847200000, - "title": "Italy", + "label": "Italy", "end_date": -1941847200000 }, { "date": -1936317600000, - "title": "Italy", + "label": "Italy", "end_date": -1936317600000 }, { "date": -1930867200000, - "title": "Italy", + "label": "Italy", "end_date": -1930867200000 }, { "date": -1928880000000, - "title": "Italy", + "label": "Italy", "end_date": -1928880000000 }, { "date": -1868832000000, - "title": "Italy", + "label": "Italy", "end_date": -1868832000000 }, { "date": -1867881600000, - "title": "Italy", + "label": "Italy", "end_date": -1867881600000 }, { "date": -1839204000000, - "title": "Italy", + "label": "Italy", "end_date": -1839204000000 }, { "date": -1827709200000, - "title": "Italy", + "label": "Italy", "end_date": -1827709200000 }, { "date": -1779933600000, - "title": "Italy", + "label": "Italy", "end_date": -1779847200000 }, { "date": -1762390800000, - "title": "Italy", + "label": "Italy", "end_date": -1762390800000 }, { "date": -1754618400000, - "title": "Italy", + "label": "Italy", "end_date": -1754272800000 }, { "date": -1740877200000, - "title": "Italy", + "label": "Italy", "end_date": -1740877200000 }, { "date": -1709427600000, - "title": "Italy", + "label": "Italy", "end_date": -1706918400000 }, { "date": -1668992400000, - "title": "Italy", + "label": "Italy", "end_date": -1668992400000 }, { "date": -1615075200000, - "title": "Italy", + "label": "Italy", "end_date": -1615075200000 }, { "date": -1608944400000, - "title": "Italy", + "label": "Italy", "end_date": -1608771600000 }, { "date": -1606784400000, - "title": "Italy", + "label": "Italy", "end_date": -1606784400000 }, { "date": -1588557600000, - "title": "Italy", + "label": "Italy", "end_date": -1588471200000 }, { "date": -1577494800000, - "title": "Italy", + "label": "Italy", "end_date": -1577322000000 }, { "date": -1555466400000, - "title": "Italy", + "label": "Italy", "end_date": -1555034400000 }, { "date": -1554343200000, - "title": "Italy", + "label": "Italy", "end_date": -1554343200000 }, { "date": -1552176000000, - "title": "Italy", + "label": "Italy", "end_date": -1552089600000 }, { "date": -1550534400000, - "title": "Italy", + "label": "Italy", "end_date": -1550448000000 }, { "date": -1549843200000, - "title": "Italy", + "label": "Italy", "end_date": -1549843200000 }, { "date": -1548464400000, - "title": "Italy", + "label": "Italy", "end_date": -1548378000000 }, { "date": -1520640000000, - "title": "Italy", + "label": "Italy", "end_date": -1520553600000 }, { "date": -1520294400000, - "title": "Italy", + "label": "Italy", "end_date": -1520294400000 }, { "date": -1518220800000, - "title": "Italy", + "label": "Italy", "end_date": -1518134400000 }, { "date": -1488243600000, - "title": "Italy", + "label": "Italy", "end_date": -1488070800000 }, { "date": -1481936400000, - "title": "Italy", + "label": "Italy", "end_date": -1481936400000 }, { "date": -1456966800000, - "title": "Italy", + "label": "Italy", "end_date": -1456966800000 }, { "date": -1444438800000, - "title": "Italy", + "label": "Italy", "end_date": -1444266000000 }, { "date": -1432173600000, - "title": "Italy", + "label": "Italy", "end_date": -1432173600000 }, { "date": -1428544800000, - "title": "Italy", + "label": "Italy", "end_date": -1428544800000 }, { "date": -1416099600000, - "title": "Italy", + "label": "Italy", "end_date": -1416099600000 }, { "date": -1409882400000, - "title": "Italy", + "label": "Italy", "end_date": -1409882400000 }, { "date": -1405130400000, - "title": "Italy", + "label": "Italy", "end_date": -1405130400000 }, { "date": -1404266400000, - "title": "Italy", + "label": "Italy", "end_date": -1404180000000 }, { "date": -1393027200000, - "title": "Italy", + "label": "Italy", "end_date": -1392940800000 }, { "date": -1377050400000, - "title": "Italy", + "label": "Italy", "end_date": -1376791200000 }, { "date": -1368064800000, - "title": "Italy", + "label": "Italy", "end_date": -1367978400000 }, { "date": -1365300000000, - "title": "Italy", + "label": "Italy", "end_date": -1363910400000 }, { "date": -1362013200000, - "title": "Italy", + "label": "Italy", "end_date": -1361840400000 }, { "date": -1360454400000, - "title": "Italy", + "label": "Italy", "end_date": -1360195200000 }, { "date": -1357603200000, - "title": "Italy", + "label": "Italy", "end_date": -1357516800000 }, { "date": -1339380000000, - "title": "Italy", + "label": "Italy", "end_date": -1339207200000 }, { "date": -1333936800000, - "title": "Italy", + "label": "Italy", "end_date": -1333677600000 }, { "date": -1333504800000, - "title": "Italy", + "label": "Italy", "end_date": -1333504800000 }, { "date": -1328486400000, - "title": "Italy", + "label": "Italy", "end_date": -1328486400000 }, { "date": -1325721600000, - "title": "Italy", + "label": "Italy", "end_date": -1325635200000 }, { "date": -1318125600000, - "title": "Italy", + "label": "Italy", "end_date": -1317607200000 }, { "date": -1304301600000, - "title": "Italy", + "label": "Italy", "end_date": -1304301600000 }, { "date": -1302919200000, - "title": "Italy", + "label": "Italy", "end_date": -1302832800000 }, { "date": -1300492800000, - "title": "Italy", + "label": "Italy", "end_date": -1300406400000 }, { "date": -1299801600000, - "title": "Italy", + "label": "Italy", "end_date": -1299801600000 }, { "date": -1299196800000, - "title": "Italy", + "label": "Italy", "end_date": -1299027600000 }, { "date": -1293670800000, - "title": "Italy", + "label": "Italy", "end_date": -1293238800000 }, { "date": -1271124000000, - "title": "Italy", + "label": "Italy", "end_date": -1270778400000 }, { "date": -1269741600000, - "title": "Italy", + "label": "Italy", "end_date": -1269655200000 }, { "date": -1267232400000, - "title": "Italy", + "label": "Italy", "end_date": -1267146000000 }, { "date": -1266192000000, - "title": "Italy", + "label": "Italy", "end_date": -1266192000000 }, { "date": -1258851600000, - "title": "Italy", + "label": "Italy", "end_date": -1258851600000 }, { "date": -1242784800000, - "title": "Italy", + "label": "Italy", "end_date": -1242784800000 }, { "date": -1237593600000, - "title": "Italy", + "label": "Italy", "end_date": -1237507200000 }, { "date": -1237161600000, - "title": "Italy", + "label": "Italy", "end_date": -1237161600000 }, { "date": -1231286400000, - "title": "Italy", + "label": "Italy", "end_date": -1231286400000 }, { "date": -1231200000000, - "title": "Italy", + "label": "Italy", "end_date": -1231200000000 }, { "date": -1226451600000, - "title": "Italy", + "label": "Italy", "end_date": -1226106000000 }, { "date": -1211940000000, - "title": "Italy", + "label": "Italy", "end_date": -1211940000000 }, { "date": -1181527200000, - "title": "Italy", + "label": "Italy", "end_date": -1181440800000 }, { "date": -1178157600000, - "title": "Italy", + "label": "Italy", "end_date": -1178071200000 }, { "date": -1177812000000, - "title": "Italy", + "label": "Italy", "end_date": -1177812000000 }, { "date": -1175997600000, - "title": "Italy", + "label": "Italy", "end_date": -1175824800000 }, { "date": -1172192400000, - "title": "Italy", + "label": "Italy", "end_date": -1172102400000 }, { "date": -1144807200000, - "title": "Italy", + "label": "Italy", "end_date": -1144634400000 }, { "date": -1144461600000, - "title": "Italy", + "label": "Italy", "end_date": -1144461600000 }, { "date": -1138838400000, - "title": "Italy", + "label": "Italy", "end_date": -1138410000000 }, { "date": -1133053200000, - "title": "Italy", + "label": "Italy", "end_date": -1133053200000 }, { "date": -1130979600000, - "title": "Italy", + "label": "Italy", "end_date": -1130979600000 }, { "date": -1121738400000, - "title": "Italy", + "label": "Italy", "end_date": -1121479200000 }, { "date": -1115690400000, - "title": "Italy", + "label": "Italy", "end_date": -1115431200000 }, { "date": -1111708800000, - "title": "Italy", + "label": "Italy", "end_date": -1111708800000 }, { "date": -1099357200000, - "title": "Italy", + "label": "Italy", "end_date": -1099011600000 }, { "date": -1096851600000, - "title": "Italy", + "label": "Italy", "end_date": -1096851600000 }, { "date": -1094004000000, - "title": "Italy", + "label": "Italy", "end_date": -1094004000000 }, { "date": -1091239200000, - "title": "Italy", + "label": "Italy", "end_date": -1091152800000 }, { "date": -1088647200000, - "title": "Italy", + "label": "Italy", "end_date": -1088560800000 }, { "date": -1085191200000, - "title": "Italy", + "label": "Italy", "end_date": -1085191200000 }, { "date": -1084586400000, - "title": "Italy", + "label": "Italy", "end_date": -1084586400000 }, { "date": -1084154400000, - "title": "Italy", + "label": "Italy", "end_date": -1084068000000 }, { "date": -1076544000000, - "title": "Italy", + "label": "Italy", "end_date": -1076371200000 }, { "date": -1062122400000, - "title": "Italy", + "label": "Italy", "end_date": -1062036000000 }, { "date": -1048377600000, - "title": "Italy", + "label": "Italy", "end_date": -1048377600000 }, { "date": -1032314400000, - "title": "Italy", + "label": "Italy", "end_date": -1032228000000 }, { "date": -1029808800000, - "title": "Italy", + "label": "Italy", "end_date": -1029722400000 }, { "date": -1021255200000, - "title": "Italy", + "label": "Italy", "end_date": -1021168800000 }, { "date": -1019613600000, - "title": "Italy", + "label": "Italy", "end_date": -1019613600000 }, { "date": -1019354400000, - "title": "Italy", + "label": "Italy", "end_date": -1019268000000 }, { "date": -1017367200000, - "title": "Italy", + "label": "Italy", "end_date": -1017367200000 }, { "date": -1017367200000, - "title": "Italy", + "label": "Italy", "end_date": -1017280800000 }, { "date": -1015117200000, - "title": "Italy", + "label": "Italy", "end_date": -1015030800000 }, { "date": -1011312000000, - "title": "Italy", + "label": "Italy", "end_date": -1011052800000 }, { "date": -1005699600000, - "title": "Italy", + "label": "Italy", "end_date": -1005699600000 }, { "date": -1005440400000, - "title": "Italy", + "label": "Italy", "end_date": -1005440400000 }, { "date": -995680800000, - "title": "Italy", + "label": "Italy", "end_date": -995508000000 }, { "date": -992052000000, - "title": "Italy", + "label": "Italy", "end_date": -991965600000 }, { "date": -986349600000, - "title": "Italy", + "label": "Italy", "end_date": -986349600000 }, { "date": -981676800000, - "title": "Italy", + "label": "Italy", "end_date": -981504000000 }, { "date": -978480000000, - "title": "Italy", + "label": "Italy", "end_date": -978480000000 }, { "date": -957405600000, - "title": "Italy", + "label": "Italy", "end_date": -957405600000 }, { "date": -956282400000, - "title": "Italy", + "label": "Italy", "end_date": -956282400000 }, { "date": -955332000000, - "title": "Italy", + "label": "Italy", "end_date": -955332000000 }, { "date": -944787600000, - "title": "Italy", + "label": "Italy", "end_date": -944787600000 }, { "date": -936324000000, - "title": "Italy", + "label": "Italy", "end_date": -936324000000 }, { "date": -927424800000, - "title": "Italy", + "label": "Italy", "end_date": -927424800000 }, { "date": -921456000000, - "title": "Italy", + "label": "Italy", "end_date": -921456000000 }, { "date": -920851200000, - "title": "Italy", + "label": "Italy", "end_date": -920851200000 }, { "date": -912128400000, - "title": "Italy", + "label": "Italy", "end_date": -911869200000 }, { "date": -909882000000, - "title": "Italy", + "label": "Italy", "end_date": -909882000000 }, { "date": -886723200000, - "title": "Italy", + "label": "Italy", "end_date": -886636800000 }, { "date": -857692800000, - "title": "Italy", + "label": "Italy", "end_date": -857606400000 }, { "date": -857178000000, - "title": "Italy", + "label": "Italy", "end_date": -857178000000 }, { "date": -762912000000, - "title": "Italy", + "label": "Italy", "end_date": -762739200000 }, { "date": -731635200000, - "title": "Italy", + "label": "Italy", "end_date": -731635200000 }, { "date": -731548800000, - "title": "Italy", + "label": "Italy", "end_date": -731548800000 }, { "date": -729907200000, - "title": "Italy", + "label": "Italy", "end_date": -729475200000 }, { "date": -726883200000, - "title": "Italy", + "label": "Italy", "end_date": -726105600000 }, { "date": -718246800000, - "title": "Italy", + "label": "Italy", "end_date": -718246800000 }, { "date": -704426400000, - "title": "Italy", + "label": "Italy", "end_date": -704340000000 }, { "date": -701748000000, - "title": "Italy", + "label": "Italy", "end_date": -701661600000 }, { "date": -699926400000, - "title": "Italy", + "label": "Italy", "end_date": -699840000000 }, { "date": -682308000000, - "title": "Italy", + "label": "Italy", "end_date": -682135200000 }, { "date": -675914400000, - "title": "Italy", + "label": "Italy", "end_date": -675741600000 }, { "date": -672976800000, - "title": "Italy", + "label": "Italy", "end_date": -672804000000 }, { "date": -668131200000, - "title": "Italy", + "label": "Italy", "end_date": -668131200000 }, { "date": -639972000000, - "title": "Italy", + "label": "Italy", "end_date": -639972000000 }, { "date": -639540000000, - "title": "Italy", + "label": "Italy", "end_date": -639540000000 }, { "date": -639108000000, - "title": "Italy", + "label": "Italy", "end_date": -638935200000 }, { "date": -638503200000, - "title": "Italy", + "label": "Italy", "end_date": -638150400000 }, { "date": -638064000000, - "title": "Italy", + "label": "Italy", "end_date": -638064000000 }, { "date": -636854400000, - "title": "Italy", + "label": "Italy", "end_date": -636854400000 }, { "date": -634176000000, - "title": "Italy", + "label": "Italy", "end_date": -634176000000 }, { "date": -629514000000, - "title": "Italy", + "label": "Italy", "end_date": -629427600000 }, { "date": -627094800000, - "title": "Italy", + "label": "Italy", "end_date": -627094800000 }, { "date": -622173600000, - "title": "Italy", + "label": "Italy", "end_date": -622173600000 }, { "date": -621568800000, - "title": "Italy", + "label": "Italy", "end_date": -621568800000 }, { "date": -610077600000, - "title": "Italy", + "label": "Italy", "end_date": -609991200000 }, { "date": -605318400000, - "title": "Italy", + "label": "Italy", "end_date": -605232000000 }, { "date": -602899200000, - "title": "Italy", + "label": "Italy", "end_date": -602899200000 }, { "date": -600134400000, - "title": "Italy", + "label": "Italy", "end_date": -599875200000 }, { "date": -599360400000, - "title": "Italy", + "label": "Italy", "end_date": -599360400000 }, { "date": -596595600000, - "title": "Italy", + "label": "Italy", "end_date": -596509200000 }, { "date": -596509200000, - "title": "Italy", + "label": "Italy", "end_date": -594867600000 }, { "date": -596422800000, - "title": "Italy", + "label": "Italy", "end_date": -596163600000 }, { "date": -592621200000, - "title": "Italy", + "label": "Italy", "end_date": -592448400000 }, { "date": -589255200000, - "title": "Italy", + "label": "Italy", "end_date": -589255200000 }, { "date": -581824800000, - "title": "Italy", + "label": "Italy", "end_date": -581738400000 }, { "date": -577591200000, - "title": "Italy", + "label": "Italy", "end_date": -577504800000 }, { "date": -576468000000, - "title": "Italy", + "label": "Italy", "end_date": -576381600000 }, { "date": -576381600000, - "title": "Italy", + "label": "Italy", "end_date": -576295200000 }, { "date": -574905600000, - "title": "Italy", + "label": "Italy", "end_date": -574473600000 }, { "date": -574041600000, - "title": "Italy", + "label": "Italy", "end_date": -573955200000 }, { "date": -572749200000, - "title": "Italy", + "label": "Italy", "end_date": -572749200000 }, { "date": -572400000000, - "title": "Italy", + "label": "Italy", "end_date": -572227200000 }, { "date": -572227200000, - "title": "Italy", + "label": "Italy", "end_date": -571104000000 }, { "date": -571536000000, - "title": "Italy", + "label": "Italy", "end_date": -571536000000 }, { "date": -569894400000, - "title": "Italy", + "label": "Italy", "end_date": -569894400000 }, { "date": -568252800000, - "title": "Italy", + "label": "Italy", "end_date": -568166400000 }, { "date": -563763600000, - "title": "Italy", + "label": "Italy", "end_date": -563763600000 }, { "date": -549338400000, - "title": "Italy", + "label": "Italy", "end_date": -549338400000 }, { "date": -542678400000, - "title": "Italy", + "label": "Italy", "end_date": -542678400000 }, { "date": -538794000000, - "title": "Italy", + "label": "Italy", "end_date": -538358400000 }, { "date": -538794000000, - "title": "Italy", + "label": "Italy", "end_date": -538621200000 }, { "date": -538099200000, - "title": "Italy", + "label": "Italy", "end_date": -537321600000 }, { "date": -536803200000, - "title": "Italy", + "label": "Italy", "end_date": -536630400000 }, { "date": -535338000000, - "title": "Italy", + "label": "Italy", "end_date": -535338000000 }, { "date": -532659600000, - "title": "Italy", + "label": "Italy", "end_date": -532314000000 }, { "date": -532486800000, - "title": "Italy", + "label": "Italy", "end_date": -532314000000 }, { "date": -531363600000, - "title": "Italy", + "label": "Italy", "end_date": -531190800000 }, { "date": -530154000000, - "title": "Italy", + "label": "Italy", "end_date": -530067600000 }, { "date": -522554400000, - "title": "Italy", + "label": "Italy", "end_date": -522381600000 }, { "date": -520135200000, - "title": "Italy", + "label": "Italy", "end_date": -520135200000 }, { "date": -519962400000, - "title": "Italy", + "label": "Italy", "end_date": -519876000000 }, { "date": -519098400000, - "title": "Italy", + "label": "Italy", "end_date": -519098400000 }, { "date": -513914400000, - "title": "Italy", + "label": "Italy", "end_date": -513914400000 }, { "date": -513828000000, - "title": "Italy", + "label": "Italy", "end_date": -513741600000 }, { "date": -511401600000, - "title": "Italy", + "label": "Italy", "end_date": -511401600000 }, { "date": -511142400000, - "title": "Italy", + "label": "Italy", "end_date": -511142400000 }, { "date": -510710400000, - "title": "Italy", + "label": "Italy", "end_date": -510195600000 }, { "date": -510624000000, - "title": "Italy", + "label": "Italy", "end_date": -510451200000 }, { "date": -504493200000, - "title": "Italy", + "label": "Italy", "end_date": -504406800000 }, { "date": -495684000000, - "title": "Italy", + "label": "Italy", "end_date": -495511200000 }, { "date": -488685600000, - "title": "Italy", + "label": "Italy", "end_date": -488685600000 }, { "date": -488426400000, - "title": "Italy", + "label": "Italy", "end_date": -488253600000 }, { "date": -479260800000, - "title": "Italy", + "label": "Italy", "end_date": -479174400000 }, { "date": -478314000000, - "title": "Italy", + "label": "Italy", "end_date": -478227600000 }, { "date": -477360000000, - "title": "Italy", + "label": "Italy", "end_date": -477014400000 }, { "date": -476067600000, - "title": "Italy", + "label": "Italy", "end_date": -476067600000 }, { "date": -471920400000, - "title": "Italy", + "label": "Italy", "end_date": -471834000000 }, { "date": -467773200000, - "title": "Italy", + "label": "Italy", "end_date": -467773200000 }, { "date": -457322400000, - "title": "Italy", + "label": "Italy", "end_date": -457063200000 }, { "date": -451447200000, - "title": "Italy", + "label": "Italy", "end_date": -451188000000 }, { "date": -451447200000, - "title": "Italy", + "label": "Italy", "end_date": -451447200000 }, { "date": -449978400000, - "title": "Italy", + "label": "Italy", "end_date": -449805600000 }, { "date": -449200800000, - "title": "Italy", + "label": "Italy", "end_date": -449114400000 }, { "date": -445737600000, - "title": "Italy", + "label": "Italy", "end_date": -445651200000 }, { "date": -418874400000, - "title": "Italy", + "label": "Italy", "end_date": -418874400000 }, { "date": -414460800000, - "title": "Italy", + "label": "Italy", "end_date": -414201600000 }, { "date": -413078400000, - "title": "Italy", + "label": "Italy", "end_date": -412477200000 }, { "date": -408762000000, - "title": "Italy", + "label": "Italy", "end_date": -408762000000 }, { "date": -408330000000, - "title": "Italy", + "label": "Italy", "end_date": -408330000000 }, { "date": -396237600000, - "title": "Italy", + "label": "Italy", "end_date": -395978400000 }, { "date": -392608800000, - "title": "Italy", + "label": "Italy", "end_date": -392349600000 }, { "date": -391312800000, - "title": "Italy", + "label": "Italy", "end_date": -391140000000 }, { "date": -390276000000, - "title": "Italy", + "label": "Italy", "end_date": -390189600000 }, { "date": -386474400000, - "title": "Italy", + "label": "Italy", "end_date": -386215200000 }, { "date": -386128800000, - "title": "Italy", + "label": "Italy", "end_date": -386042400000 }, { "date": -384393600000, - "title": "Italy", + "label": "Italy", "end_date": -384307200000 }, { "date": -383533200000, - "title": "Italy", + "label": "Italy", "end_date": -382492800000 }, { "date": -380160000000, - "title": "Italy", + "label": "Italy", "end_date": -379900800000 }, { "date": -378950400000, - "title": "Italy", + "label": "Italy", "end_date": -378950400000 }, { "date": -374806800000, - "title": "Italy", + "label": "Italy", "end_date": -374547600000 }, { "date": -373770000000, - "title": "Italy", + "label": "Italy", "end_date": -373683600000 }, { "date": -370144800000, - "title": "Italy", + "label": "Italy", "end_date": -369280800000 }, { "date": -359863200000, - "title": "Italy", + "label": "Italy", "end_date": -359863200000 }, { "date": -355024800000, - "title": "Italy", + "label": "Italy", "end_date": -355024800000 }, { "date": -353030400000, - "title": "Italy", + "label": "Italy", "end_date": -353030400000 }, { "date": -351475200000, - "title": "Italy", + "label": "Italy", "end_date": -351388800000 }, { "date": -350870400000, - "title": "Italy", + "label": "Italy", "end_date": -350179200000 }, { "date": -350179200000, - "title": "Italy", + "label": "Italy", "end_date": -349837200000 }, { "date": -349146000000, - "title": "Italy", + "label": "Italy", "end_date": -349146000000 }, { "date": -348710400000, - "title": "Italy", + "label": "Italy", "end_date": -348710400000 }, { "date": -339386400000, - "title": "Italy", + "label": "Italy", "end_date": -339213600000 }, { "date": -332388000000, - "title": "Italy", + "label": "Italy", "end_date": -332301600000 }, { "date": -331696800000, - "title": "Italy", + "label": "Italy", "end_date": -331696800000 }, { "date": -325821600000, - "title": "Italy", + "label": "Italy", "end_date": -325648800000 }, { "date": -322358400000, - "title": "Italy", + "label": "Italy", "end_date": -322358400000 }, { "date": -321148800000, - "title": "Italy", + "label": "Italy", "end_date": -321148800000 }, { "date": -319939200000, - "title": "Italy", + "label": "Italy", "end_date": -319766400000 }, { "date": -318988800000, - "title": "Italy", + "label": "Italy", "end_date": -318816000000 }, { "date": -318902400000, - "title": "Italy", + "label": "Italy", "end_date": -318816000000 }, { "date": -318384000000, - "title": "Italy", + "label": "Italy", "end_date": -318214800000 }, { "date": -318301200000, - "title": "Italy", + "label": "Italy", "end_date": -318301200000 }, { "date": -318128400000, - "title": "Italy", + "label": "Italy", "end_date": -318128400000 }, { "date": -314931600000, - "title": "Italy", + "label": "Italy", "end_date": -314845200000 }, { "date": -312944400000, - "title": "Italy", + "label": "Italy", "end_date": -312858000000 }, { "date": -312166800000, - "title": "Italy", + "label": "Italy", "end_date": -312080400000 }, { "date": -309142800000, - "title": "Italy", + "label": "Italy", "end_date": -309142800000 }, { "date": -296272800000, - "title": "Italy", + "label": "Italy", "end_date": -296272800000 }, { "date": -293162400000, - "title": "Italy", + "label": "Italy", "end_date": -292989600000 }, { "date": -293162400000, - "title": "Italy", + "label": "Italy", "end_date": -293076000000 }, { "date": -292989600000, - "title": "Italy", + "label": "Italy", "end_date": -292903200000 }, { "date": -292903200000, - "title": "Italy", + "label": "Italy", "end_date": -292212000000 }, { "date": -291520800000, - "title": "Italy", + "label": "Italy", "end_date": -291520800000 }, { "date": -289699200000, - "title": "Italy", + "label": "Italy", "end_date": -288144000000 }, { "date": -285120000000, - "title": "Italy", + "label": "Italy", "end_date": -285120000000 }, { "date": -282704400000, - "title": "Italy", + "label": "Italy", "end_date": -282704400000 }, { "date": -281062800000, - "title": "Italy", + "label": "Italy", "end_date": -281062800000 }, { "date": -277606800000, - "title": "Italy", + "label": "Italy", "end_date": -277606800000 }, { "date": -270612000000, - "title": "Italy", + "label": "Italy", "end_date": -270612000000 }, { "date": -260244000000, - "title": "Italy", + "label": "Italy", "end_date": -260071200000 }, { "date": -258940800000, - "title": "Italy", + "label": "Italy", "end_date": -258854400000 }, { "date": -256780800000, - "title": "Italy", + "label": "Italy", "end_date": -256694400000 }, { "date": -256694400000, - "title": "Italy", + "label": "Italy", "end_date": -256608000000 }, { "date": -256608000000, - "title": "Italy", + "label": "Italy", "end_date": -256435200000 }, { "date": -256608000000, - "title": "Italy", + "label": "Italy", "end_date": -256348800000 }, { "date": -255916800000, - "title": "Italy", + "label": "Italy", "end_date": -255830400000 }, { "date": -224985600000, - "title": "Italy", + "label": "Italy", "end_date": -224899200000 }, { "date": -221616000000, - "title": "Italy", + "label": "Italy", "end_date": -221529600000 }, { "date": -216954000000, - "title": "Italy", + "label": "Italy", "end_date": -216694800000 }, { "date": -206762400000, - "title": "Italy", + "label": "Italy", "end_date": -206762400000 }, { "date": -206762400000, - "title": "Italy", + "label": "Italy", "end_date": -206762400000 }, { "date": -202788000000, - "title": "Italy", + "label": "Italy", "end_date": -202788000000 }, { "date": -199764000000, - "title": "Italy", + "label": "Italy", "end_date": -199591200000 }, { "date": -197863200000, - "title": "Italy", + "label": "Italy", "end_date": -197776800000 }, { "date": -197085600000, - "title": "Italy", + "label": "Italy", "end_date": -197085600000 }, { "date": -187059600000, - "title": "Italy", + "label": "Italy", "end_date": -186973200000 }, { "date": -184381200000, - "title": "Italy", + "label": "Italy", "end_date": -184381200000 }, { "date": -174189600000, - "title": "Italy", + "label": "Italy", "end_date": -174103200000 }, { "date": -169005600000, - "title": "Italy", + "label": "Italy", "end_date": -168919200000 }, { "date": -168314400000, - "title": "Italy", + "label": "Italy", "end_date": -168228000000 }, { "date": -165981600000, - "title": "Italy", + "label": "Italy", "end_date": -165895200000 }, { "date": -165376800000, - "title": "Italy", + "label": "Italy", "end_date": -163641600000 }, { "date": -162259200000, - "title": "Italy", + "label": "Italy", "end_date": -162259200000 }, { "date": -158803200000, - "title": "Italy", + "label": "Italy", "end_date": -158716800000 }, { "date": -157939200000, - "title": "Italy", + "label": "Italy", "end_date": -157939200000 }, { "date": -141703200000, - "title": "Italy", + "label": "Italy", "end_date": -141616800000 }, { "date": -137469600000, - "title": "Italy", + "label": "Italy", "end_date": -137296800000 }, { "date": -136778400000, - "title": "Italy", + "label": "Italy", "end_date": -136692000000 }, { "date": -136778400000, - "title": "Italy", + "label": "Italy", "end_date": -136519200000 }, { "date": -136692000000, - "title": "Italy", + "label": "Italy", "end_date": -136519200000 }, { "date": -136692000000, - "title": "Italy", + "label": "Italy", "end_date": -136173600000 }, { "date": -136692000000, - "title": "Italy", + "label": "Italy", "end_date": -136519200000 }, { "date": -136692000000, - "title": "Italy", + "label": "Italy", "end_date": -136692000000 }, { "date": -136260000000, - "title": "Italy", + "label": "Italy", "end_date": -136260000000 }, { "date": -136000800000, - "title": "Italy", + "label": "Italy", "end_date": -136000800000 }, { "date": -134445600000, - "title": "Italy", + "label": "Italy", "end_date": -134272800000 }, { "date": -134445600000, - "title": "Italy", + "label": "Italy", "end_date": -134445600000 }, { "date": -132624000000, - "title": "Italy", + "label": "Italy", "end_date": -132624000000 }, { "date": -129081600000, - "title": "Italy", + "label": "Italy", "end_date": -128995200000 }, { "date": -121827600000, - "title": "Italy", + "label": "Italy", "end_date": -121827600000 }, { "date": -106711200000, - "title": "Italy", + "label": "Italy", "end_date": -106538400000 }, { "date": -102477600000, - "title": "Italy", + "label": "Italy", "end_date": -102477600000 }, { "date": -102304800000, - "title": "Italy", + "label": "Italy", "end_date": -102218400000 }, { "date": -101779200000, - "title": "Italy", + "label": "Italy", "end_date": -101779200000 }, { "date": -101433600000, - "title": "Italy", + "label": "Italy", "end_date": -101260800000 }, { "date": -100569600000, - "title": "Italy", + "label": "Italy", "end_date": -100483200000 }, { "date": -99795600000, - "title": "Italy", + "label": "Italy", "end_date": -99277200000 }, { "date": -98496000000, - "title": "Italy", + "label": "Italy", "end_date": -97545600000 }, { "date": -97977600000, - "title": "Italy", + "label": "Italy", "end_date": -97804800000 }, { "date": -91414800000, - "title": "Italy", + "label": "Italy", "end_date": -91414800000 }, { "date": -86148000000, - "title": "Italy", + "label": "Italy", "end_date": -86061600000 }, { "date": -72237600000, - "title": "Italy", + "label": "Italy", "end_date": -72064800000 }, { "date": -42775200000, - "title": "Italy", + "label": "Italy", "end_date": -42688800000 }, { "date": -36810000000, - "title": "Italy", + "label": "Italy", "end_date": -36637200000 }, { "date": -35337600000, - "title": "Italy", + "label": "Italy", "end_date": -35251200000 }, { "date": -32832000000, - "title": "Italy", + "label": "Italy", "end_date": -32832000000 }, { "date": -31021200000, - "title": "Italy", + "label": "Italy", "end_date": -30934800000 }, { "date": -8820000000, - "title": "Italy", + "label": "Italy", "end_date": -8820000000 }, { "date": -6912000000, - "title": "Italy", + "label": "Italy", "end_date": -6566400000 }, { "date": -3110400000, - "title": "Italy", + "label": "Italy", "end_date": -2851200000 }, { "date": -2682000000, - "title": "Italy", + "label": "Italy", "end_date": -1990800000 }, { "date": 4230000000, - "title": "Italy", + "label": "Italy", "end_date": 4316400000 }, { "date": 20991600000, - "title": "Italy", + "label": "Italy", "end_date": 21078000000 }, { "date": 21510000000, - "title": "Italy", + "label": "Italy", "end_date": 21682800000 }, { "date": 22460400000, - "title": "Italy", + "label": "Italy", "end_date": 22633200000 }, { "date": 23583600000, - "title": "Italy", + "label": "Italy", "end_date": 23670000000 }, { "date": 24102000000, - "title": "Italy", + "label": "Italy", "end_date": 24102000000 }, { "date": 24796800000, - "title": "Italy", + "label": "Italy", "end_date": 24796800000 }, { "date": 31705200000, - "title": "Italy", + "label": "Italy", "end_date": 31791600000 }, { "date": 54601200000, - "title": "Italy", + "label": "Italy", "end_date": 54860400000 }, { "date": 54774000000, - "title": "Italy", + "label": "Italy", "end_date": 54860400000 }, { "date": 56332800000, - "title": "Italy", + "label": "Italy", "end_date": 56419200000 }, { "date": 60048000000, - "title": "Italy", + "label": "Italy", "end_date": 60048000000 }, { "date": 60220800000, - "title": "Italy", + "label": "Italy", "end_date": 60220800000 }, { "date": 67302000000, - "title": "Italy", + "label": "Italy", "end_date": 67302000000 }, { "date": 69030000000, - "title": "Italy", + "label": "Italy", "end_date": 69030000000 }, { "date": 69375600000, - "title": "Italy", + "label": "Italy", "end_date": 69375600000 }, { "date": 80002800000, - "title": "Italy", + "label": "Italy", "end_date": 80089200000 }, { "date": 93657600000, - "title": "Italy", + "label": "Italy", "end_date": 95036400000 }, { "date": 100393200000, - "title": "Italy", + "label": "Italy", "end_date": 100393200000 }, { "date": 108428400000, - "title": "Italy", + "label": "Italy", "end_date": 108428400000 }, { "date": 117154800000, - "title": "Italy", + "label": "Italy", "end_date": 117327600000 }, { "date": 117673200000, - "title": "Italy", + "label": "Italy", "end_date": 117673200000 }, { "date": 117759600000, - "title": "Italy", + "label": "Italy", "end_date": 117932400000 }, { "date": 148950000000, - "title": "Italy", + "label": "Italy", "end_date": 149036400000 }, { "date": 150854400000, - "title": "Italy", + "label": "Italy", "end_date": 150940800000 }, { "date": 152924400000, - "title": "Italy", + "label": "Italy", "end_date": 153010800000 }, { "date": 185500800000, - "title": "Italy", + "label": "Italy", "end_date": 185760000000 }, { "date": 193273200000, - "title": "Italy", + "label": "Italy", "end_date": 193446000000 }, { "date": 205628400000, - "title": "Italy", + "label": "Italy", "end_date": 205628400000 }, { "date": 207529200000, - "title": "Italy", + "label": "Italy", "end_date": 207615600000 }, { "date": 208306800000, - "title": "Italy", + "label": "Italy", "end_date": 208479600000 }, { "date": 209084400000, - "title": "Italy", + "label": "Italy", "end_date": 209343600000 }, { "date": 215049600000, - "title": "Italy", + "label": "Italy", "end_date": 215136000000 }, { "date": 215481600000, - "title": "Italy", + "label": "Italy", "end_date": 215481600000 }, { "date": 215996400000, - "title": "Italy", + "label": "Italy", "end_date": 215996400000 }, { "date": 217123200000, - "title": "Italy", + "label": "Italy", "end_date": 217123200000 }, { "date": 232754400000, - "title": "Italy", + "label": "Italy", "end_date": 232927200000 }, { "date": 241048800000, - "title": "Italy", + "label": "Italy", "end_date": 241135200000 }, { "date": 241653600000, - "title": "Italy", + "label": "Italy", "end_date": 241653600000 }, { "date": 245026800000, - "title": "Italy", + "label": "Italy", "end_date": 245289600000 }, { "date": 253839600000, - "title": "Italy", + "label": "Italy", "end_date": 253839600000 }, { "date": 271202400000, - "title": "Italy", + "label": "Italy", "end_date": 271548000000 }, { "date": 282960000000, - "title": "Italy", + "label": "Italy", "end_date": 283046400000 }, { "date": 284943600000, - "title": "Italy", + "label": "Italy", "end_date": 285030000000 }, { "date": 286239600000, - "title": "Italy", + "label": "Italy", "end_date": 286239600000 }, { "date": 306712800000, - "title": "Italy", + "label": "Italy", "end_date": 306712800000 }, { "date": 308707200000, - "title": "Italy", + "label": "Italy", "end_date": 309225600000 }, { "date": 310003200000, - "title": "Italy", + "label": "Italy", "end_date": 310089600000 }, { "date": 340416000000, - "title": "Italy", + "label": "Italy", "end_date": 340502400000 }, { "date": 342313200000, - "title": "Italy", + "label": "Italy", "end_date": 342313200000 }, { "date": 364341600000, - "title": "Italy", + "label": "Italy", "end_date": 364514400000 }, { "date": 370825200000, - "title": "Italy", + "label": "Italy", "end_date": 370911600000 }, { "date": 397864800000, - "title": "Italy", + "label": "Italy", "end_date": 397864800000 }, { "date": 405385200000, - "title": "Italy", + "label": "Italy", "end_date": 406080000000 }, { "date": 406080000000, - "title": "Italy", + "label": "Italy", "end_date": 406080000000 }, { "date": 407545200000, - "title": "Italy", + "label": "Italy", "end_date": 407545200000 }, { "date": 409104000000, - "title": "Italy", + "label": "Italy", "end_date": 409190400000 }, { "date": 430524000000, - "title": "Italy", + "label": "Italy", "end_date": 430610400000 }, { "date": 431388000000, - "title": "Italy", + "label": "Italy", "end_date": 432079200000 }, { "date": 437007600000, - "title": "Italy", + "label": "Italy", "end_date": 437094000000 }, { "date": 446598000000, - "title": "Italy", + "label": "Italy", "end_date": 446943600000 }, { "date": 462060000000, - "title": "Italy", + "label": "Italy", "end_date": 462146400000 }, { "date": 462664800000, - "title": "Italy", + "label": "Italy", "end_date": 462751200000 }, { "date": 467078400000, - "title": "Italy", + "label": "Italy", "end_date": 467078400000 }, { "date": 473126400000, - "title": "Italy", + "label": "Italy", "end_date": 473382000000 }, { "date": 474850800000, - "title": "Italy", + "label": "Italy", "end_date": 474850800000 }, { "date": 501120000000, - "title": "Italy", + "label": "Italy", "end_date": 502070400000 }, { "date": 507423600000, - "title": "Italy", + "label": "Italy", "end_date": 507769200000 }, { "date": 507510000000, - "title": "Italy", + "label": "Italy", "end_date": 507682800000 }, { "date": 518220000000, - "title": "Italy", + "label": "Italy", "end_date": 518306400000 }, { "date": 519861600000, - "title": "Italy", + "label": "Italy", "end_date": 519861600000 }, { "date": 522194400000, - "title": "Italy", + "label": "Italy", "end_date": 522194400000 }, { "date": 529545600000, - "title": "Italy", + "label": "Italy", "end_date": 529632000000 }, { "date": 531356400000, - "title": "Italy", + "label": "Italy", "end_date": 531442800000 }, { "date": 532224000000, - "title": "Italy", + "label": "Italy", "end_date": 532224000000 }, { "date": 537318000000, - "title": "Italy", + "label": "Italy", "end_date": 537490800000 }, { "date": 552088800000, - "title": "Italy", + "label": "Italy", "end_date": 552088800000 }, { "date": 553557600000, - "title": "Italy", + "label": "Italy", "end_date": 553644000000 }, { "date": 553989600000, - "title": "Italy", + "label": "Italy", "end_date": 553989600000 }, { "date": 556754400000, - "title": "Italy", + "label": "Italy", "end_date": 556927200000 }, { "date": 556754400000, - "title": "Italy", + "label": "Italy", "end_date": 556840800000 }, { "date": 556754400000, - "title": "Italy", + "label": "Italy", "end_date": 556927200000 }, { "date": 562464000000, - "title": "Italy", + "label": "Italy", "end_date": 562550400000 }, { "date": 572828400000, - "title": "Italy", + "label": "Italy", "end_date": 572828400000 }, { "date": 583365600000, - "title": "Italy", + "label": "Italy", "end_date": 583365600000 }, { "date": 588031200000, - "title": "Italy", + "label": "Italy", "end_date": 588031200000 }, { "date": 616111200000, - "title": "Italy", + "label": "Italy", "end_date": 616111200000 }, { "date": 631065600000, - "title": "Italy", + "label": "Italy", "end_date": 631148400000 }, { "date": 644709600000, - "title": "Italy", + "label": "Italy", "end_date": 644796000000 }, { "date": 658454400000, - "title": "Italy", + "label": "Italy", "end_date": 658454400000 }, { "date": 659491200000, - "title": "Italy", + "label": "Italy", "end_date": 659577600000 }, { "date": 670802400000, - "title": "Italy", + "label": "Italy", "end_date": 670802400000 }, { "date": 687225600000, - "title": "Italy", + "label": "Italy", "end_date": 687225600000 }, { "date": 687830400000, - "title": "Italy", + "label": "Italy", "end_date": 687830400000 }, { "date": 690163200000, - "title": "Italy", + "label": "Italy", "end_date": 690249600000 }, { "date": 690249600000, - "title": "Italy", + "label": "Italy", "end_date": 690336000000 }, { "date": 702856800000, - "title": "Italy", + "label": "Italy", "end_date": 702856800000 }, { "date": 702856800000, - "title": "Italy", + "label": "Italy", "end_date": 703116000000 }, { "date": 707436000000, - "title": "Italy", + "label": "Italy", "end_date": 707436000000 }, { "date": 710805600000, - "title": "Italy", + "label": "Italy", "end_date": 710805600000 }, { "date": 717112800000, - "title": "Italy", + "label": "Italy", "end_date": 717112800000 }, { "date": 717634800000, - "title": "Italy", + "label": "Italy", "end_date": 717634800000 }, { "date": 719280000000, - "title": "Italy", + "label": "Italy", "end_date": 720489600000 }, { "date": 720658800000, - "title": "Italy", + "label": "Italy", "end_date": 720658800000 }, { "date": 745797600000, - "title": "Italy", + "label": "Italy", "end_date": 745797600000 }, { "date": 748735200000, - "title": "Italy", + "label": "Italy", "end_date": 749430000000 }, { "date": 750034800000, - "title": "Italy", + "label": "Italy", "end_date": 750121200000 }, { "date": 752108400000, - "title": "Italy", + "label": "Italy", "end_date": 752194800000 }, { "date": 752281200000, - "title": "Italy", + "label": "Italy", "end_date": 752367600000 }, { "date": 754185600000, - "title": "Italy", + "label": "Italy", "end_date": 754185600000 }, { "date": 756864000000, - "title": "Italy", + "label": "Italy", "end_date": 756864000000 }, { "date": 761526000000, - "title": "Italy", + "label": "Italy", "end_date": 761526000000 }, { "date": 778456800000, - "title": "Italy", + "label": "Italy", "end_date": 778456800000 }, { "date": 780184800000, - "title": "Italy", + "label": "Italy", "end_date": 780184800000 }, { "date": 783644400000, - "title": "Italy", + "label": "Italy", "end_date": 784425600000 }, { "date": 784162800000, - "title": "Italy", + "label": "Italy", "end_date": 784162800000 }, { "date": 795049200000, - "title": "Italy", + "label": "Italy", "end_date": 795049200000 }, { "date": 801871200000, - "title": "Italy", + "label": "Italy", "end_date": 802908000000 }, { "date": 808351200000, - "title": "Italy", + "label": "Italy", "end_date": 808696800000 }, { "date": 809215200000, - "title": "Italy", + "label": "Italy", "end_date": 809215200000 }, { "date": 810424800000, - "title": "Italy", + "label": "Italy", "end_date": 810511200000 }, { "date": 810856800000, - "title": "Italy", + "label": "Italy", "end_date": 810943200000 }, { "date": 811461600000, - "title": "Italy", + "label": "Italy", "end_date": 811461600000 }, { "date": 812847600000, - "title": "Italy", + "label": "Italy", "end_date": 812934000000 }, { "date": 835135200000, - "title": "Italy", + "label": "Italy", "end_date": 835221600000 }, { "date": 835394400000, - "title": "Italy", + "label": "Italy", "end_date": 835394400000 }, { "date": 836776800000, - "title": "Italy", + "label": "Italy", "end_date": 836776800000 }, { "date": 839714400000, - "title": "Italy", + "label": "Italy", "end_date": 839800800000 }, { "date": 844293600000, - "title": "Italy", + "label": "Italy", "end_date": 844293600000 }, { "date": 844552800000, - "title": "Italy", + "label": "Italy", "end_date": 844725600000 }, { "date": 845251200000, - "title": "Italy", + "label": "Italy", "end_date": 845251200000 }, { "date": 845337600000, - "title": "Italy", + "label": "Italy", "end_date": 845596800000 }, { "date": 848620800000, - "title": "Italy", + "label": "Italy", "end_date": 848620800000 }, { "date": 867362400000, - "title": "Italy", + "label": "Italy", "end_date": 867621600000 }, { "date": 881190000000, - "title": "Italy", + "label": "Italy", "end_date": 881190000000 }, { "date": 893973600000, - "title": "Italy", + "label": "Italy", "end_date": 894492000000 }, { "date": 904946400000, - "title": "Italy", + "label": "Italy", "end_date": 905724000000 }, { "date": 906847200000, - "title": "Italy", + "label": "Italy", "end_date": 907020000000 }, { "date": 907020000000, - "title": "Italy", + "label": "Italy", "end_date": 907020000000 }, { "date": 907624800000, - "title": "Italy", + "label": "Italy", "end_date": 907884000000 }, { "date": 938469600000, - "title": "Italy", + "label": "Italy", "end_date": 938469600000 }, { "date": 940636800000, - "title": "Italy", + "label": "Italy", "end_date": 940723200000 }, { "date": 942451200000, - "title": "Italy", + "label": "Italy", "end_date": 942451200000 }, { "date": 945216000000, - "title": "Italy", + "label": "Italy", "end_date": 945302400000 }, { "date": 968364000000, - "title": "Italy", + "label": "Italy", "end_date": 968536800000 }, { "date": 970178400000, - "title": "Italy", + "label": "Italy", "end_date": 970524000000 }, { "date": 971395200000, - "title": "Italy", + "label": "Italy", "end_date": 971654400000 }, { "date": 973465200000, - "title": "Italy", + "label": "Italy", "end_date": 975196800000 }, { "date": 974160000000, - "title": "Italy", + "label": "Italy", "end_date": 974160000000 }, { "date": 977875200000, - "title": "Italy", + "label": "Italy", "end_date": 978220800000 }, { "date": 1000418400000, - "title": "Italy", + "label": "Italy", "end_date": 1000504800000 }, { "date": 1019340000000, - "title": "Italy", + "label": "Italy", "end_date": 1019340000000 }, { "date": 1029708000000, - "title": "Italy", + "label": "Italy", "end_date": 1029708000000 }, { "date": 1031090400000, - "title": "Italy", + "label": "Italy", "end_date": 1031090400000 }, { "date": 1037923200000, - "title": "Italy", + "label": "Italy", "end_date": 1039215600000 }, { "date": 1038096000000, - "title": "Italy", + "label": "Italy", "end_date": 1038096000000 }, { "date": 1043449200000, - "title": "Italy", + "label": "Italy", "end_date": 1043622000000 }, { "date": 1055023200000, - "title": "Italy", + "label": "Italy", "end_date": 1055023200000 }, { "date": 1062108000000, - "title": "Italy", + "label": "Italy", "end_date": 1062194400000 }, { "date": 1062972000000, - "title": "Italy", + "label": "Italy", "end_date": 1063144800000 }, { "date": 1063058400000, - "title": "Italy", + "label": "Italy", "end_date": 1063058400000 }, { "date": 1063490400000, - "title": "Italy", + "label": "Italy", "end_date": 1063836000000 }, { "date": 1064268000000, - "title": "Italy", + "label": "Italy", "end_date": 1064354400000 }, { "date": 1066176000000, - "title": "Italy", + "label": "Italy", "end_date": 1066435200000 }, { "date": 1071100800000, - "title": "Italy", + "label": "Italy", "end_date": 1071273600000 }, { "date": 1102287600000, - "title": "Italy", + "label": "Italy", "end_date": 1102546800000 }, { "date": 1129939200000, - "title": "Italy", + "label": "Italy", "end_date": 1129939200000 }, { "date": 1130025600000, - "title": "Italy", + "label": "Italy", "end_date": 1130112000000 }, { "date": 1146348000000, - "title": "Italy", + "label": "Italy", "end_date": 1146348000000 }, { "date": 1151877600000, - "title": "Italy", + "label": "Italy", "end_date": 1151877600000 }, { "date": 1215813600000, - "title": "Italy", + "label": "Italy", "end_date": 1215813600000 }, { "date": 1224633600000, - "title": "Italy", + "label": "Italy", "end_date": 1224633600000 }, { "date": 1228086000000, - "title": "Italy", + "label": "Italy", "end_date": 1228345200000 }, { "date": 1228953600000, - "title": "Italy", + "label": "Italy", "end_date": 1229299200000 }, { "date": 1233442800000, - "title": "Italy", + "label": "Italy", "end_date": 1233615600000 }, { "date": 1254348000000, - "title": "Italy", + "label": "Italy", "end_date": 1254434400000 }, { "date": 1283983200000, - "title": "Italy", + "label": "Italy", "end_date": 1283983200000 }, { "date": 1286143200000, - "title": "Italy", + "label": "Italy", "end_date": 1286143200000 }, { "date": 1286229600000, - "title": "Italy", + "label": "Italy", "end_date": 1286229600000 }, { "date": 1288483200000, - "title": "Italy", + "label": "Italy", "end_date": 1288652400000 }, { "date": 1297983600000, - "title": "Italy", + "label": "Italy", "end_date": 1297983600000 }, { "date": 1298934000000, - "title": "Italy", + "label": "Italy", "end_date": 1299020400000 }, { "date": 1299106800000, - "title": "Italy", + "label": "Italy", "end_date": 1299106800000 }, { "date": 1310335200000, - "title": "Italy", + "label": "Italy", "end_date": 1310335200000 }, { "date": 1319587200000, - "title": "Italy", + "label": "Italy", "end_date": 1320102000000 }, { "date": 1320361200000, - "title": "Italy", + "label": "Italy", "end_date": 1320534000000 }, { "date": 1321920000000, - "title": "Italy", + "label": "Italy", "end_date": 1321920000000 }, { "date": 1352592000000, - "title": "Italy", + "label": "Italy", "end_date": 1353196800000 }, { "date": 1360882800000, - "title": "Italy", + "label": "Italy", "end_date": 1360882800000 }, { "date": 1384732800000, - "title": "Italy", + "label": "Italy", "end_date": 1384819200000 }, { "date": 1389999600000, - "title": "Italy", + "label": "Italy", "end_date": 1390086000000 }, { "date": 1391122800000, - "title": "Italy", + "label": "Italy", "end_date": 1391209200000 }, { "date": 1399068000000, - "title": "Italy", + "label": "Italy", "end_date": 1399154400000 }, { "date": 1406930400000, - "title": "Italy", + "label": "Italy", "end_date": 1406930400000 }, { "date": 1409522400000, - "title": "Italy", + "label": "Italy", "end_date": 1409954400000 }, { "date": 1412899200000, - "title": "Italy", + "label": "Italy", "end_date": 1412985600000 }, { "date": 1413244800000, - "title": "Italy", + "label": "Italy", "end_date": 1413244800000 }, { "date": 1415142000000, - "title": "Italy", + "label": "Italy", "end_date": 1415142000000 }, { "date": 1416009600000, - "title": "Italy", + "label": "Italy", "end_date": 1416096000000 }, { "date": 1439244000000, - "title": "Italy", + "label": "Italy", "end_date": 1439330400000 }, { "date": 1442181600000, - "title": "Italy", + "label": "Italy", "end_date": 1442181600000 }, { "date": 1444780800000, - "title": "Italy", + "label": "Italy", "end_date": 1444953600000 }, { "date": 1446332400000, - "title": "Italy", + "label": "Italy", "end_date": 1447372800000 }, { "date": 1479859200000, - "title": "Italy", + "label": "Italy", "end_date": 1480032000000 }, { "date": 354837600000, - "title": "Latvia", + "label": "Latvia", "end_date": 354837600000 }, { "date": -1334023200000, - "title": "Liechtenstein", + "label": "Liechtenstein", "end_date": -1333936800000 }, { "date": -369540000000, - "title": "Lithuania", + "label": "Lithuania", "end_date": -368848800000 }, { "date": 1012086000000, - "title": "Lithuania", + "label": "Lithuania", "end_date": 1012604400000 }, { "date": 1123452000000, - "title": "Lithuania", + "label": "Lithuania", "end_date": 1123624800000 }, { "date": 756345600000, - "title": "Luxembourg", + "label": "Luxembourg", "end_date": 757296000000 }, { "date": 790642800000, - "title": "Luxembourg", + "label": "Luxembourg", "end_date": 791679600000 }, { "date": 309657600000, - "title": "Malta", + "label": "Malta", "end_date": 309657600000 }, { "date": 812156400000, - "title": "Malta", + "label": "Malta", "end_date": 812156400000 }, { "date": 885682800000, - "title": "Malta", + "label": "Malta", "end_date": 885682800000 }, { "date": 1063576800000, - "title": "Malta", + "label": "Malta", "end_date": 1063576800000 }, { "date": -2932243200000, - "title": "Netherlands", + "label": "Netherlands", "end_date": -2932156800000 }, { "date": -2013642000000, - "title": "Netherlands", + "label": "Netherlands", "end_date": -2013642000000 }, { "date": -1703120400000, - "title": "Netherlands", + "label": "Netherlands", "end_date": -1703034000000 }, { "date": -1388538000000, - "title": "Netherlands", + "label": "Netherlands", "end_date": -1388278800000 }, { "date": -533869200000, - "title": "Netherlands", + "label": "Netherlands", "end_date": -533782800000 }, { "date": 713570400000, - "title": "Netherlands", + "label": "Netherlands", "end_date": 713570400000 }, { "date": 756432000000, - "title": "Netherlands", + "label": "Netherlands", "end_date": 757296000000 }, { "date": 790642800000, - "title": "Netherlands", + "label": "Netherlands", "end_date": 791679600000 }, { "date": 905724000000, - "title": "Netherlands", + "label": "Netherlands", "end_date": 905810400000 }, { "date": -988941600000, - "title": "Norway", + "label": "Norway", "end_date": -988596000000 }, { "date": 801957600000, - "title": "Norway", + "label": "Norway", "end_date": 803080800000 }, { "date": 971308800000, - "title": "Norway", + "label": "Norway", "end_date": 973814400000 }, { "date": 1007161200000, - "title": "Norway", + "label": "Norway", "end_date": 1007161200000 }, { "date": 1138575600000, - "title": "Norway", + "label": "Norway", "end_date": 1139007600000 }, { "date": 1307484000000, - "title": "Norway", + "label": "Norway", "end_date": 1307916000000 }, { "date": 1369173600000, - "title": "Norway", + "label": "Norway", "end_date": 1369692000000 }, { "date": 1470434400000, - "title": "Norway", + "label": "Norway", "end_date": 1470520800000 }, { "date": -2699049600000, - "title": "Poland", + "label": "Poland", "end_date": -2698531200000 }, { "date": -2097799200000, - "title": "Poland", + "label": "Poland", "end_date": -2097626400000 }, { "date": -1119146400000, - "title": "Poland", + "label": "Poland", "end_date": -1118628000000 }, { "date": -1053828000000, - "title": "Poland", + "label": "Poland", "end_date": -1053828000000 }, { "date": -934768800000, - "title": "Poland", + "label": "Poland", "end_date": -934596000000 }, { "date": -718592400000, - "title": "Poland", + "label": "Poland", "end_date": -715917600000 }, { "date": -363837600000, - "title": "Poland", + "label": "Poland", "end_date": -363060000000 }, { "date": -299383200000, - "title": "Poland", + "label": "Poland", "end_date": -296618400000 }, { "date": -239421600000, - "title": "Poland", + "label": "Poland", "end_date": -236916000000 }, { "date": -217040400000, - "title": "Poland", + "label": "Poland", "end_date": -212724000000 }, { "date": -151030800000, - "title": "Poland", + "label": "Poland", "end_date": -150512400000 }, { "date": 16844400000, - "title": "Poland", + "label": "Poland", "end_date": 17276400000 }, { "date": 83026800000, - "title": "Poland", + "label": "Poland", "end_date": 83545200000 }, { "date": 110329200000, - "title": "Poland", + "label": "Poland", "end_date": 110329200000 }, { "date": 239148000000, - "title": "Poland", + "label": "Poland", "end_date": 239580000000 }, { "date": 289090800000, - "title": "Poland", + "label": "Poland", "end_date": 294271200000 }, { "date": 331250400000, - "title": "Poland", + "label": "Poland", "end_date": 333842400000 }, { "date": 379206000000, - "title": "Poland", + "label": "Poland", "end_date": 379206000000 }, { "date": 411778800000, - "title": "Poland", + "label": "Poland", "end_date": 411865200000 }, { "date": 492127200000, - "title": "Poland", + "label": "Poland", "end_date": 493250400000 }, { "date": 548719200000, - "title": "Poland", + "label": "Poland", "end_date": 548978400000 }, { "date": 681084000000, - "title": "Poland", + "label": "Poland", "end_date": 681429600000 }, { "date": 811116000000, - "title": "Poland", + "label": "Poland", "end_date": 811116000000 }, { "date": 867880800000, - "title": "Poland", + "label": "Poland", "end_date": 871077600000 }, { "date": 893023200000, - "title": "Poland", + "label": "Poland", "end_date": 893541600000 }, { "date": 901144800000, - "title": "Poland", + "label": "Poland", "end_date": 901490400000 }, { "date": 994629600000, - "title": "Poland", + "label": "Poland", "end_date": 994716000000 }, { "date": 995148000000, - "title": "Poland", + "label": "Poland", "end_date": 996962400000 }, { "date": 1047337200000, - "title": "Poland", + "label": "Poland", "end_date": 1047337200000 }, { "date": 1058479200000, - "title": "Poland", + "label": "Poland", "end_date": 1058479200000 }, { "date": 1090879200000, - "title": "Poland", + "label": "Poland", "end_date": 1092088800000 }, { "date": 1111014000000, - "title": "Poland", + "label": "Poland", "end_date": 1112911200000 }, { "date": 1149372000000, - "title": "Poland", + "label": "Poland", "end_date": 1149544800000 }, { "date": 1245621600000, - "title": "Poland", + "label": "Poland", "end_date": 1245967200000 }, { "date": 1255478400000, - "title": "Poland", + "label": "Poland", "end_date": 1255478400000 }, { "date": 1274047200000, - "title": "Poland", + "label": "Poland", "end_date": 1275516000000 }, { "date": 1281132000000, - "title": "Poland", + "label": "Poland", "end_date": 1281218400000 }, { "date": -2079478800000, - "title": "Portugal", + "label": "Portugal", "end_date": -2079392400000 }, { "date": -1894492800000, - "title": "Portugal", + "label": "Portugal", "end_date": -1893801600000 }, { "date": -1863997200000, - "title": "Portugal", + "label": "Portugal", "end_date": -1863997200000 }, { "date": -1827104400000, - "title": "Portugal", + "label": "Portugal", "end_date": -1827104400000 }, { "date": -1577408400000, - "title": "Portugal", + "label": "Portugal", "end_date": -1577408400000 }, { "date": -1069117200000, - "title": "Portugal", + "label": "Portugal", "end_date": -1068253200000 }, { "date": -1039309200000, - "title": "Portugal", + "label": "Portugal", "end_date": -1039050000000 }, { "date": -1013472000000, - "title": "Portugal", + "label": "Portugal", "end_date": -1013472000000 }, { "date": -977101200000, - "title": "Portugal", + "label": "Portugal", "end_date": -976755600000 }, { "date": -946688400000, - "title": "Portugal", + "label": "Portugal", "end_date": -946342800000 }, { "date": -913251600000, - "title": "Portugal", + "label": "Portugal", "end_date": -912906000000 }, { "date": -911264400000, - "title": "Portugal", + "label": "Portugal", "end_date": -911264400000 }, { "date": -829188000000, - "title": "Portugal", + "label": "Portugal", "end_date": -829188000000 }, { "date": -761184000000, - "title": "Portugal", + "label": "Portugal", "end_date": -761184000000 }, { "date": -758592000000, - "title": "Portugal", + "label": "Portugal", "end_date": -758246400000 }, { "date": -721789200000, - "title": "Portugal", + "label": "Portugal", "end_date": -721184400000 }, { "date": -720493200000, - "title": "Portugal", + "label": "Portugal", "end_date": -720147600000 }, { "date": -692067600000, - "title": "Portugal", + "label": "Portugal", "end_date": -691894800000 }, { "date": -560311200000, - "title": "Portugal", + "label": "Portugal", "end_date": -560311200000 }, { "date": -506304000000, - "title": "Portugal", + "label": "Portugal", "end_date": -506131200000 }, { "date": -443145600000, - "title": "Portugal", + "label": "Portugal", "end_date": -442972800000 }, { "date": -434682000000, - "title": "Portugal", + "label": "Portugal", "end_date": -434682000000 }, { "date": -252633600000, - "title": "Portugal", + "label": "Portugal", "end_date": -252291600000 }, { "date": -249526800000, - "title": "Portugal", + "label": "Portugal", "end_date": -249526800000 }, { "date": -193708800000, - "title": "Portugal", + "label": "Portugal", "end_date": -193363200000 }, { "date": -125110800000, - "title": "Portugal", + "label": "Portugal", "end_date": -125024400000 }, { "date": -124592400000, - "title": "Portugal", + "label": "Portugal", "end_date": -124246800000 }, { "date": -122086800000, - "title": "Portugal", + "label": "Portugal", "end_date": -121568400000 }, { "date": -97290000000, - "title": "Portugal", + "label": "Portugal", "end_date": -97290000000 }, { "date": -66355200000, - "title": "Portugal", + "label": "Portugal", "end_date": -66268800000 }, { "date": -25491600000, - "title": "Portugal", + "label": "Portugal", "end_date": -24973200000 }, { "date": 65919600000, - "title": "Portugal", + "label": "Portugal", "end_date": 65919600000 }, { "date": 257295600000, - "title": "Portugal", + "label": "Portugal", "end_date": 257814000000 }, { "date": 287190000000, - "title": "Portugal", + "label": "Portugal", "end_date": 287967600000 }, { "date": 437961600000, - "title": "Portugal", + "label": "Portugal", "end_date": 438048000000 }, { "date": 438220800000, - "title": "Portugal", + "label": "Portugal", "end_date": 438220800000 }, { "date": 596419200000, - "title": "Portugal", + "label": "Portugal", "end_date": 596505600000 }, { "date": 629856000000, - "title": "Portugal", + "label": "Portugal", "end_date": 630288000000 }, { "date": 630633600000, - "title": "Portugal", + "label": "Portugal", "end_date": 630633600000 }, { "date": 639871200000, - "title": "Portugal", + "label": "Portugal", "end_date": 639871200000 }, { "date": 820882800000, - "title": "Portugal", + "label": "Portugal", "end_date": 821660400000 }, { "date": 878684400000, - "title": "Portugal", + "label": "Portugal", "end_date": 878770800000 }, { "date": 952210800000, - "title": "Portugal", + "label": "Portugal", "end_date": 952210800000 }, { "date": 977702400000, - "title": "Portugal", + "label": "Portugal", "end_date": 977875200000 }, { "date": 978649200000, - "title": "Portugal", + "label": "Portugal", "end_date": 978822000000 }, { "date": 980463600000, - "title": "Portugal", + "label": "Portugal", "end_date": 980722800000 }, { "date": 981414000000, - "title": "Portugal", + "label": "Portugal", "end_date": 981586800000 }, { "date": 985129200000, - "title": "Portugal", + "label": "Portugal", "end_date": 985215600000 }, { "date": 1040860800000, - "title": "Portugal", + "label": "Portugal", "end_date": 1040947200000 }, { "date": 1041462000000, - "title": "Portugal", + "label": "Portugal", "end_date": 1041548400000 }, { "date": 1161648000000, - "title": "Portugal", + "label": "Portugal", "end_date": 1161820800000 }, { "date": 1162508400000, - "title": "Portugal", + "label": "Portugal", "end_date": 1162767600000 }, { "date": 1203289200000, - "title": "Portugal", + "label": "Portugal", "end_date": 1203289200000 }, { "date": 1261440000000, - "title": "Portugal", + "label": "Portugal", "end_date": 1261526400000 }, { "date": 1446332400000, - "title": "Portugal", + "label": "Portugal", "end_date": 1446505200000 }, { "date": 11228400000, - "title": "Romania", + "label": "Romania", "end_date": 14252400000 }, { "date": 173574000000, - "title": "Romania", + "label": "Romania", "end_date": 174697200000 }, { "date": 333151200000, - "title": "Romania", + "label": "Romania", "end_date": 333756000000 }, { "date": 487807200000, - "title": "Romania", + "label": "Romania", "end_date": 487807200000 }, { "date": 680738400000, - "title": "Romania", + "label": "Romania", "end_date": 680824800000 }, { "date": 801180000000, - "title": "Romania", + "label": "Romania", "end_date": 801439200000 }, { "date": 820108800000, - "title": "Romania", + "label": "Romania", "end_date": 820969200000 }, { "date": 866152800000, - "title": "Romania", + "label": "Romania", "end_date": 866412000000 }, { "date": 867967200000, - "title": "Romania", + "label": "Romania", "end_date": 871077600000 }, { "date": 897256800000, - "title": "Romania", + "label": "Romania", "end_date": 899157600000 }, { "date": 930002400000, - "title": "Romania", + "label": "Romania", "end_date": 930780000000 }, { "date": 931471200000, - "title": "Romania", + "label": "Romania", "end_date": 932076000000 }, { "date": 936396000000, - "title": "Romania", + "label": "Romania", "end_date": 936741600000 }, { "date": 951865200000, - "title": "Romania", + "label": "Romania", "end_date": 951865200000 }, { "date": 954885600000, - "title": "Romania", + "label": "Romania", "end_date": 956613600000 }, { "date": 983660400000, - "title": "Romania", + "label": "Romania", "end_date": 984783600000 }, { "date": 992901600000, - "title": "Romania", + "label": "Romania", "end_date": 993160800000 }, { "date": 1027029600000, - "title": "Romania", + "label": "Romania", "end_date": 1027375200000 }, { "date": 1027980000000, - "title": "Romania", + "label": "Romania", "end_date": 1028325600000 }, { "date": 1028584800000, - "title": "Romania", + "label": "Romania", "end_date": 1028671200000 }, { "date": 1061935200000, - "title": "Romania", + "label": "Romania", "end_date": 1061935200000 }, { "date": 1090965600000, - "title": "Romania", + "label": "Romania", "end_date": 1091397600000 }, { "date": 1093557600000, - "title": "Romania", + "label": "Romania", "end_date": 1093557600000 }, { "date": 1111014000000, - "title": "Romania", + "label": "Romania", "end_date": 1111705200000 }, { "date": 1113775200000, - "title": "Romania", + "label": "Romania", "end_date": 1117836000000 }, { "date": 1120255200000, - "title": "Romania", + "label": "Romania", "end_date": 1121464800000 }, { "date": 1120860000000, - "title": "Romania", + "label": "Romania", "end_date": 1122501600000 }, { "date": 1123970400000, - "title": "Romania", + "label": "Romania", "end_date": 1125612000000 }, { "date": 1127253600000, - "title": "Romania", + "label": "Romania", "end_date": 1128808800000 }, { "date": 1141167600000, - "title": "Romania", + "label": "Romania", "end_date": 1141167600000 }, { "date": 1142204400000, - "title": "Romania", + "label": "Romania", "end_date": 1144360800000 }, { "date": 1144360800000, - "title": "Romania", + "label": "Romania", "end_date": 1148421600000 }, { "date": 1150668000000, - "title": "Romania", + "label": "Romania", "end_date": 1150668000000 }, { "date": 1150754400000, - "title": "Romania", + "label": "Romania", "end_date": 1151272800000 }, { "date": 1151618400000, - "title": "Romania", + "label": "Romania", "end_date": 1151877600000 }, { "date": 1171234800000, - "title": "Romania", + "label": "Romania", "end_date": 1171234800000 }, { "date": 1186437600000, - "title": "Romania", + "label": "Romania", "end_date": 1186437600000 }, { "date": 1187992800000, - "title": "Romania", + "label": "Romania", "end_date": 1188165600000 }, { "date": 1188943200000, - "title": "Romania", + "label": "Romania", "end_date": 1189461600000 }, { "date": 1217023200000, - "title": "Romania", + "label": "Romania", "end_date": 1217541600000 }, { "date": 1277071200000, - "title": "Romania", + "label": "Romania", "end_date": 1278885600000 }, { "date": 1378850400000, - "title": "Romania", + "label": "Romania", "end_date": 1379282400000 }, { "date": 1397858400000, - "title": "Romania", + "label": "Romania", "end_date": 1399413600000 }, { "date": 1406584800000, - "title": "Romania", + "label": "Romania", "end_date": 1406757600000 }, { "date": 1432504800000, - "title": "Romania", + "label": "Romania", "end_date": 1433196000000 }, { "date": 1464818400000, - "title": "Romania", + "label": "Romania", "end_date": 1464818400000 }, { "date": 1475964000000, - "title": "Romania", + "label": "Romania", "end_date": 1476576000000 }, { "date": -2963520000000, - "title": "Slovakia", + "label": "Slovakia", "end_date": -2961273600000 }, { "date": 867967200000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 871077600000 }, { "date": 900885600000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 901231200000 }, { "date": 930002400000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 930780000000 }, { "date": 995925600000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 996530400000 }, { "date": 1028930400000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1029189600000 }, { "date": 1090879200000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1092088800000 }, { "date": 1111014000000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1111705200000 }, { "date": 1143496800000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1147125600000 }, { "date": 1273874400000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1275429600000 }, { "date": 1281823200000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1281909600000 }, { "date": 1370210400000, - "title": "Slovakia", + "label": "Slovakia", "end_date": 1370383200000 }, { "date": -1392768000000, - "title": "Slovenia", + "label": "Slovenia", "end_date": -1392681600000 }, { "date": -1369620000000, - "title": "Slovenia", + "label": "Slovenia", "end_date": -1369533600000 }, { "date": -1365300000000, - "title": "Slovenia", + "label": "Slovenia", "end_date": -1365213600000 }, { "date": -491623200000, - "title": "Slovenia", + "label": "Slovenia", "end_date": -491450400000 }, { "date": -163555200000, - "title": "Slovenia", + "label": "Slovenia", "end_date": -163468800000 }, { "date": -136692000000, - "title": "Slovenia", + "label": "Slovenia", "end_date": -136432800000 }, { "date": 79830000000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 80089200000 }, { "date": 615506400000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 615592800000 }, { "date": 657244800000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 657414000000 }, { "date": 723337200000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 723769200000 }, { "date": 777506400000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 777506400000 }, { "date": 811029600000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 811202400000 }, { "date": 907538400000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 910220400000 }, { "date": 1190066400000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 1190239200000 }, { "date": 1284674400000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 1284933600000 }, { "date": 1352070000000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 1352156400000 }, { "date": 1410559200000, - "title": "Slovenia", + "label": "Slovenia", "end_date": 1410559200000 }, { "date": -3111350400000, - "title": "Spain", + "label": "Spain", "end_date": -3111350400000 }, { "date": -3006633600000, - "title": "Spain", + "label": "Spain", "end_date": -3006547200000 }, { "date": -2937168000000, - "title": "Spain", + "label": "Spain", "end_date": -2936995200000 }, { "date": -2919715200000, - "title": "Spain", + "label": "Spain", "end_date": -2919369600000 }, { "date": -2846534400000, - "title": "Spain", + "label": "Spain", "end_date": -2846534400000 }, { "date": -2837462400000, - "title": "Spain", + "label": "Spain", "end_date": -2837462400000 }, { "date": -2821737600000, - "title": "Spain", + "label": "Spain", "end_date": -2821737600000 }, { "date": -2815344000000, - "title": "Spain", + "label": "Spain", "end_date": -2815344000000 }, { "date": -2807222400000, - "title": "Spain", + "label": "Spain", "end_date": -2807222400000 }, { "date": -2800310400000, - "title": "Spain", + "label": "Spain", "end_date": -2800310400000 }, { "date": -2691705600000, - "title": "Spain", + "label": "Spain", "end_date": -2691619200000 }, { "date": -2607724800000, - "title": "Spain", + "label": "Spain", "end_date": -2607724800000 }, { "date": -2575324800000, - "title": "Spain", + "label": "Spain", "end_date": -2575324800000 }, { "date": -2566166400000, - "title": "Spain", + "label": "Spain", "end_date": -2566166400000 }, { "date": -2502057600000, - "title": "Spain", + "label": "Spain", "end_date": -2502057600000 }, { "date": -2471126400000, - "title": "Spain", + "label": "Spain", "end_date": -2471126400000 }, { "date": -2471126400000, - "title": "Spain", + "label": "Spain", "end_date": -2471126400000 }, { "date": -2455660800000, - "title": "Spain", + "label": "Spain", "end_date": -2455660800000 }, { "date": -2407708800000, - "title": "Spain", + "label": "Spain", "end_date": -2407449600000 }, { "date": -2390688000000, - "title": "Spain", + "label": "Spain", "end_date": -2390688000000 }, { "date": -2358633600000, - "title": "Spain", + "label": "Spain", "end_date": -2358201600000 }, { "date": -2341353600000, - "title": "Spain", + "label": "Spain", "end_date": -2341353600000 }, { "date": -2303164800000, - "title": "Spain", + "label": "Spain", "end_date": -2303164800000 }, { "date": -2281651200000, - "title": "Spain", + "label": "Spain", "end_date": -2281651200000 }, { "date": -2154736800000, - "title": "Spain", + "label": "Spain", "end_date": -2154736800000 }, { "date": -1996624800000, - "title": "Spain", + "label": "Spain", "end_date": -1996624800000 }, { "date": -1965261600000, - "title": "Spain", + "label": "Spain", "end_date": -1965175200000 }, { "date": -1962921600000, - "title": "Spain", + "label": "Spain", "end_date": -1962748800000 }, { "date": -1962748800000, - "title": "Spain", + "label": "Spain", "end_date": -1962748800000 }, { "date": -1928966400000, - "title": "Spain", + "label": "Spain", "end_date": -1928966400000 }, { "date": -1904004000000, - "title": "Spain", + "label": "Spain", "end_date": -1904004000000 }, { "date": -1894492800000, - "title": "Spain", + "label": "Spain", "end_date": -1894492800000 }, { "date": -1882922400000, - "title": "Spain", + "label": "Spain", "end_date": -1882922400000 }, { "date": -1827709200000, - "title": "Spain", + "label": "Spain", "end_date": -1827709200000 }, { "date": -1738371600000, - "title": "Spain", + "label": "Spain", "end_date": -1738371600000 }, { "date": -1675126800000, - "title": "Spain", + "label": "Spain", "end_date": -1675126800000 }, { "date": -1673654400000, - "title": "Spain", + "label": "Spain", "end_date": -1673654400000 }, { "date": -1667091600000, - "title": "Spain", + "label": "Spain", "end_date": -1667091600000 }, { "date": -1586052000000, - "title": "Spain", + "label": "Spain", "end_date": -1586052000000 }, { "date": -1523844000000, - "title": "Spain", + "label": "Spain", "end_date": -1523844000000 }, { "date": -1523584800000, - "title": "Spain", + "label": "Spain", "end_date": -1523584800000 }, { "date": -1461204000000, - "title": "Spain", + "label": "Spain", "end_date": -1461204000000 }, { "date": -1444870800000, - "title": "Spain", + "label": "Spain", "end_date": -1444870800000 }, { "date": -1444179600000, - "title": "Spain", + "label": "Spain", "end_date": -1444093200000 }, { "date": -1372471200000, - "title": "Spain", + "label": "Spain", "end_date": -1372471200000 }, { "date": -1367632800000, - "title": "Spain", + "label": "Spain", "end_date": -1367632800000 }, { "date": -1359680400000, - "title": "Spain", + "label": "Spain", "end_date": -1359680400000 }, { "date": -1249005600000, - "title": "Spain", + "label": "Spain", "end_date": -1249005600000 }, { "date": -1248919200000, - "title": "Spain", + "label": "Spain", "end_date": -1248919200000 }, { "date": -1237248000000, - "title": "Spain", + "label": "Spain", "end_date": -1237248000000 }, { "date": -1207792800000, - "title": "Spain", + "label": "Spain", "end_date": -1207792800000 }, { "date": -1154570400000, - "title": "Spain", + "label": "Spain", "end_date": -1154570400000 }, { "date": -1144029600000, - "title": "Spain", + "label": "Spain", "end_date": -1144029600000 }, { "date": -1073520000000, - "title": "Spain", + "label": "Spain", "end_date": -1073520000000 }, { "date": -1068771600000, - "title": "Spain", + "label": "Spain", "end_date": -1068771600000 }, { "date": -1018317600000, - "title": "Spain", + "label": "Spain", "end_date": -1017712800000 }, { "date": -944010000000, - "title": "Spain", + "label": "Spain", "end_date": -944010000000 }, { "date": -921801600000, - "title": "Spain", + "label": "Spain", "end_date": -921456000000 }, { "date": -913510800000, - "title": "Spain", + "label": "Spain", "end_date": -913510800000 }, { "date": -765338400000, - "title": "Spain", + "label": "Spain", "end_date": -765338400000 }, { "date": -721962000000, - "title": "Spain", + "label": "Spain", "end_date": -721962000000 }, { "date": -702525600000, - "title": "Spain", + "label": "Spain", "end_date": -702525600000 }, { "date": -692067600000, - "title": "Spain", + "label": "Spain", "end_date": -692067600000 }, { "date": -689389200000, - "title": "Spain", + "label": "Spain", "end_date": -689389200000 }, { "date": -641181600000, - "title": "Spain", + "label": "Spain", "end_date": -641181600000 }, { "date": -631584000000, - "title": "Spain", + "label": "Spain", "end_date": -631584000000 }, { "date": -611632800000, - "title": "Spain", + "label": "Spain", "end_date": -611632800000 }, { "date": -577677600000, - "title": "Spain", + "label": "Spain", "end_date": -577677600000 }, { "date": -565318800000, - "title": "Spain", + "label": "Spain", "end_date": -565318800000 }, { "date": -555904800000, - "title": "Spain", + "label": "Spain", "end_date": -555904800000 }, { "date": -511747200000, - "title": "Spain", + "label": "Spain", "end_date": -511747200000 }, { "date": -451015200000, - "title": "Spain", + "label": "Spain", "end_date": -451015200000 }, { "date": -443318400000, - "title": "Spain", + "label": "Spain", "end_date": -443059200000 }, { "date": -434426400000, - "title": "Spain", + "label": "Spain", "end_date": -434426400000 }, { "date": -386560800000, - "title": "Spain", + "label": "Spain", "end_date": -386474400000 }, { "date": -385603200000, - "title": "Spain", + "label": "Spain", "end_date": -385516800000 }, { "date": -326426400000, - "title": "Spain", + "label": "Spain", "end_date": -326426400000 }, { "date": -326167200000, - "title": "Spain", + "label": "Spain", "end_date": -326167200000 }, { "date": -323661600000, - "title": "Spain", + "label": "Spain", "end_date": -323661600000 }, { "date": -318301200000, - "title": "Spain", + "label": "Spain", "end_date": -318301200000 }, { "date": -316137600000, - "title": "Spain", + "label": "Spain", "end_date": -315878400000 }, { "date": -315536400000, - "title": "Spain", + "label": "Spain", "end_date": -315536400000 }, { "date": -311734800000, - "title": "Spain", + "label": "Spain", "end_date": -311734800000 }, { "date": -284083200000, - "title": "Spain", + "label": "Spain", "end_date": -284083200000 }, { "date": -255657600000, - "title": "Spain", + "label": "Spain", "end_date": -255657600000 }, { "date": -255657600000, - "title": "Spain", + "label": "Spain", "end_date": -255657600000 }, { "date": -252547200000, - "title": "Spain", + "label": "Spain", "end_date": -252547200000 }, { "date": -252291600000, - "title": "Spain", + "label": "Spain", "end_date": -252291600000 }, { "date": -229399200000, - "title": "Spain", + "label": "Spain", "end_date": -229399200000 }, { "date": -229226400000, - "title": "Spain", + "label": "Spain", "end_date": -229226400000 }, { "date": -225939600000, - "title": "Spain", + "label": "Spain", "end_date": -225939600000 }, { "date": -220928400000, - "title": "Spain", + "label": "Spain", "end_date": -220928400000 }, { "date": -217040400000, - "title": "Spain", + "label": "Spain", "end_date": -217040400000 }, { "date": -170042400000, - "title": "Spain", + "label": "Spain", "end_date": -170042400000 }, { "date": -133668000000, - "title": "Spain", + "label": "Spain", "end_date": -133668000000 }, { "date": -132537600000, - "title": "Spain", + "label": "Spain", "end_date": -132537600000 }, { "date": 514800000, - "title": "Spain", + "label": "Spain", "end_date": 514800000 }, { "date": 1033200000, - "title": "Spain", + "label": "Spain", "end_date": 1033200000 }, { "date": 24451200000, - "title": "Spain", + "label": "Spain", "end_date": 24451200000 }, { "date": 54169200000, - "title": "Spain", + "label": "Spain", "end_date": 54428400000 }, { "date": 60649200000, - "title": "Spain", + "label": "Spain", "end_date": 60822000000 }, { "date": 88128000000, - "title": "Spain", + "label": "Spain", "end_date": 88387200000 }, { "date": 107737200000, - "title": "Spain", + "label": "Spain", "end_date": 107737200000 }, { "date": 116204400000, - "title": "Spain", + "label": "Spain", "end_date": 116204400000 }, { "date": 119750400000, - "title": "Spain", + "label": "Spain", "end_date": 119836800000 }, { "date": 133830000000, - "title": "Spain", + "label": "Spain", "end_date": 133830000000 }, { "date": 148604400000, - "title": "Spain", + "label": "Spain", "end_date": 148604400000 }, { "date": 215650800000, - "title": "Spain", + "label": "Spain", "end_date": 215650800000 }, { "date": 221353200000, - "title": "Spain", + "label": "Spain", "end_date": 221526000000 }, { "date": 234828000000, - "title": "Spain", + "label": "Spain", "end_date": 234828000000 }, { "date": 255135600000, - "title": "Spain", + "label": "Spain", "end_date": 255135600000 }, { "date": 265932000000, - "title": "Spain", + "label": "Spain", "end_date": 265932000000 }, { "date": 283478400000, - "title": "Spain", + "label": "Spain", "end_date": 283564800000 }, { "date": 302220000000, - "title": "Spain", + "label": "Spain", "end_date": 302392800000 }, { "date": 309225600000, - "title": "Spain", + "label": "Spain", "end_date": 309225600000 }, { "date": 346204800000, - "title": "Spain", + "label": "Spain", "end_date": 346204800000 }, { "date": 367365600000, - "title": "Spain", + "label": "Spain", "end_date": 367365600000 }, { "date": 403833600000, - "title": "Spain", + "label": "Spain", "end_date": 403920000000 }, { "date": 405385200000, - "title": "Spain", + "label": "Spain", "end_date": 405558000000 }, { "date": 430610400000, - "title": "Spain", + "label": "Spain", "end_date": 430783200000 }, { "date": 433638000000, - "title": "Spain", + "label": "Spain", "end_date": 433638000000 }, { "date": 436748400000, - "title": "Spain", + "label": "Spain", "end_date": 438393600000 }, { "date": 476924400000, - "title": "Spain", + "label": "Spain", "end_date": 476924400000 }, { "date": 500774400000, - "title": "Spain", + "label": "Spain", "end_date": 500860800000 }, { "date": 522626400000, - "title": "Spain", + "label": "Spain", "end_date": 522712800000 }, { "date": 526428000000, - "title": "Spain", + "label": "Spain", "end_date": 526428000000 }, { "date": 528764400000, - "title": "Spain", + "label": "Spain", "end_date": 528764400000 }, { "date": 552952800000, - "title": "Spain", + "label": "Spain", "end_date": 552952800000 }, { "date": 557532000000, - "title": "Spain", + "label": "Spain", "end_date": 557532000000 }, { "date": 557618400000, - "title": "Spain", + "label": "Spain", "end_date": 557618400000 }, { "date": 559782000000, - "title": "Spain", + "label": "Spain", "end_date": 559782000000 }, { "date": 562892400000, - "title": "Spain", + "label": "Spain", "end_date": 563065200000 }, { "date": 585266400000, - "title": "Spain", + "label": "Spain", "end_date": 585352800000 }, { "date": 595123200000, - "title": "Spain", + "label": "Spain", "end_date": 595382400000 }, { "date": 620776800000, - "title": "Spain", + "label": "Spain", "end_date": 620949600000 }, { "date": 625536000000, - "title": "Spain", + "label": "Spain", "end_date": 625536000000 }, { "date": 627004800000, - "title": "Spain", + "label": "Spain", "end_date": 627004800000 }, { "date": 629510400000, - "title": "Spain", + "label": "Spain", "end_date": 629769600000 }, { "date": 642376800000, - "title": "Spain", + "label": "Spain", "end_date": 642376800000 }, { "date": 651103200000, - "title": "Spain", + "label": "Spain", "end_date": 651103200000 }, { "date": 686530800000, - "title": "Spain", + "label": "Spain", "end_date": 686530800000 }, { "date": 708904800000, - "title": "Spain", + "label": "Spain", "end_date": 708904800000 }, { "date": 711410400000, - "title": "Spain", + "label": "Spain", "end_date": 711410400000 }, { "date": 718239600000, - "title": "Spain", + "label": "Spain", "end_date": 718239600000 }, { "date": 754700400000, - "title": "Spain", + "label": "Spain", "end_date": 754700400000 }, { "date": 758070000000, - "title": "Spain", + "label": "Spain", "end_date": 758156400000 }, { "date": 768780000000, - "title": "Spain", + "label": "Spain", "end_date": 768780000000 }, { "date": 781657200000, - "title": "Spain", + "label": "Spain", "end_date": 781833600000 }, { "date": 782179200000, - "title": "Spain", + "label": "Spain", "end_date": 782179200000 }, { "date": 783903600000, - "title": "Spain", + "label": "Spain", "end_date": 783903600000 }, { "date": 802476000000, - "title": "Spain", + "label": "Spain", "end_date": 802648800000 }, { "date": 803944800000, - "title": "Spain", + "label": "Spain", "end_date": 803944800000 }, { "date": 808005600000, - "title": "Spain", + "label": "Spain", "end_date": 808005600000 }, { "date": 810165600000, - "title": "Spain", + "label": "Spain", "end_date": 810165600000 }, { "date": 811375200000, - "title": "Spain", + "label": "Spain", "end_date": 811375200000 }, { "date": 816048000000, - "title": "Spain", + "label": "Spain", "end_date": 816048000000 }, { "date": 817772400000, - "title": "Spain", + "label": "Spain", "end_date": 817772400000 }, { "date": 818726400000, - "title": "Spain", + "label": "Spain", "end_date": 818726400000 }, { "date": 822265200000, - "title": "Spain", + "label": "Spain", "end_date": 822265200000 }, { "date": 830642400000, - "title": "Spain", + "label": "Spain", "end_date": 830642400000 }, { "date": 833407200000, - "title": "Spain", + "label": "Spain", "end_date": 833407200000 }, { "date": 839368800000, - "title": "Spain", + "label": "Spain", "end_date": 839368800000 }, { "date": 839973600000, - "title": "Spain", + "label": "Spain", "end_date": 840319200000 }, { "date": 841615200000, - "title": "Spain", + "label": "Spain", "end_date": 841615200000 }, { "date": 842133600000, - "title": "Spain", + "label": "Spain", "end_date": 842133600000 }, { "date": 851212800000, - "title": "Spain", + "label": "Spain", "end_date": 851558400000 }, { "date": 853714800000, - "title": "Spain", + "label": "Spain", "end_date": 853714800000 }, { "date": 875397600000, - "title": "Spain", + "label": "Spain", "end_date": 875656800000 }, { "date": 878684400000, - "title": "Spain", + "label": "Spain", "end_date": 878857200000 }, { "date": 881535600000, - "title": "Spain", + "label": "Spain", "end_date": 881535600000 }, { "date": 893887200000, - "title": "Spain", + "label": "Spain", "end_date": 893887200000 }, { "date": 895269600000, - "title": "Spain", + "label": "Spain", "end_date": 895269600000 }, { "date": 895874400000, - "title": "Spain", + "label": "Spain", "end_date": 895874400000 }, { "date": 920761200000, - "title": "Spain", + "label": "Spain", "end_date": 920761200000 }, { "date": 936136800000, - "title": "Spain", + "label": "Spain", "end_date": 936136800000 }, { "date": 937260000000, - "title": "Spain", + "label": "Spain", "end_date": 937260000000 }, { "date": 960588000000, - "title": "Spain", + "label": "Spain", "end_date": 960588000000 }, { "date": 972000000000, - "title": "Spain", + "label": "Spain", "end_date": 972086400000 }, { "date": 972864000000, - "title": "Spain", + "label": "Spain", "end_date": 973033200000 }, { "date": 976143600000, - "title": "Spain", + "label": "Spain", "end_date": 976143600000 }, { "date": 980463600000, - "title": "Spain", + "label": "Spain", "end_date": 980463600000 }, { "date": 983833200000, - "title": "Spain", + "label": "Spain", "end_date": 983919600000 }, { "date": 990136800000, - "title": "Spain", + "label": "Spain", "end_date": 990309600000 }, { "date": 991346400000, - "title": "Spain", + "label": "Spain", "end_date": 991346400000 }, { "date": 999727200000, - "title": "Spain", + "label": "Spain", "end_date": 999727200000 }, { "date": 1004655600000, - "title": "Spain", + "label": "Spain", "end_date": 1004655600000 }, { "date": 1005436800000, - "title": "Spain", + "label": "Spain", "end_date": 1005436800000 }, { "date": 1017698400000, - "title": "Spain", + "label": "Spain", "end_date": 1017698400000 }, { "date": 1020722400000, - "title": "Spain", + "label": "Spain", "end_date": 1020722400000 }, { "date": 1028066400000, - "title": "Spain", + "label": "Spain", "end_date": 1028066400000 }, { "date": 1031781600000, - "title": "Spain", + "label": "Spain", "end_date": 1031781600000 }, { "date": 1034028000000, - "title": "Spain", + "label": "Spain", "end_date": 1034028000000 }, { "date": 1044399600000, - "title": "Spain", + "label": "Spain", "end_date": 1047250800000 }, { "date": 1062712800000, - "title": "Spain", + "label": "Spain", "end_date": 1062712800000 }, { "date": 1068940800000, - "title": "Spain", + "label": "Spain", "end_date": 1068940800000 }, { "date": 1070578800000, - "title": "Spain", + "label": "Spain", "end_date": 1074380400000 }, { "date": 1080342000000, - "title": "Spain", + "label": "Spain", "end_date": 1080428400000 }, { "date": 1093989600000, - "title": "Spain", + "label": "Spain", "end_date": 1094335200000 }, { "date": 1094508000000, - "title": "Spain", + "label": "Spain", "end_date": 1094594400000 }, { "date": 1129161600000, - "title": "Spain", + "label": "Spain", "end_date": 1129334400000 }, { "date": 1145829600000, - "title": "Spain", + "label": "Spain", "end_date": 1145829600000 }, { "date": 1159740000000, - "title": "Spain", + "label": "Spain", "end_date": 1159740000000 }, { "date": 1161475200000, - "title": "Spain", + "label": "Spain", "end_date": 1162940400000 }, { "date": 1163808000000, - "title": "Spain", + "label": "Spain", "end_date": 1163808000000 }, { "date": 1175551200000, - "title": "Spain", + "label": "Spain", "end_date": 1176069600000 }, { "date": 1179784800000, - "title": "Spain", + "label": "Spain", "end_date": 1180130400000 }, { "date": 1189634400000, - "title": "Spain", + "label": "Spain", "end_date": 1189634400000 }, { "date": 1190325600000, - "title": "Spain", + "label": "Spain", "end_date": 1190325600000 }, { "date": 1191189600000, - "title": "Spain", + "label": "Spain", "end_date": 1191189600000 }, { "date": 1191276000000, - "title": "Spain", + "label": "Spain", "end_date": 1191276000000 }, { "date": 1192147200000, - "title": "Spain", + "label": "Spain", "end_date": 1192665600000 }, { "date": 1195516800000, - "title": "Spain", + "label": "Spain", "end_date": 1195516800000 }, { "date": 1207692000000, - "title": "Spain", + "label": "Spain", "end_date": 1207692000000 }, { "date": 1221948000000, - "title": "Spain", + "label": "Spain", "end_date": 1222034400000 }, { "date": 1252706400000, - "title": "Spain", + "label": "Spain", "end_date": 1252706400000 }, { "date": 1252792800000, - "title": "Spain", + "label": "Spain", "end_date": 1254348000000 }, { "date": 1258070400000, - "title": "Spain", + "label": "Spain", "end_date": 1258329600000 }, { "date": 1260054000000, - "title": "Spain", + "label": "Spain", "end_date": 1260140400000 }, { "date": 1261526400000, - "title": "Spain", + "label": "Spain", "end_date": 1261612800000 }, { "date": 1266879600000, - "title": "Spain", + "label": "Spain", "end_date": 1266966000000 }, { "date": 1267225200000, - "title": "Spain", + "label": "Spain", "end_date": 1267225200000 }, { "date": 1276034400000, - "title": "Spain", + "label": "Spain", "end_date": 1276380000000 }, { "date": 1281996000000, - "title": "Spain", + "label": "Spain", "end_date": 1282082400000 }, { "date": 1291590000000, - "title": "Spain", + "label": "Spain", "end_date": 1291939200000 }, { "date": 1305669600000, - "title": "Spain", + "label": "Spain", "end_date": 1305756000000 }, { "date": 1320620400000, - "title": "Spain", + "label": "Spain", "end_date": 1320620400000 }, { "date": 1348783200000, - "title": "Spain", + "label": "Spain", "end_date": 1348869600000 }, { "date": 1364684400000, - "title": "Spain", + "label": "Spain", "end_date": 1364940000000 }, { "date": 1371506400000, - "title": "Spain", + "label": "Spain", "end_date": 1371592800000 }, { "date": 1441576800000, - "title": "Spain", + "label": "Spain", "end_date": 1441576800000 }, { "date": 1476230400000, - "title": "Spain", + "label": "Spain", "end_date": 1476230400000 }, { "date": 1480719600000, - "title": "Spain", + "label": "Spain", "end_date": 1481065200000 }, { "date": 230162400000, - "title": "Sweden", + "label": "Sweden", "end_date": 231890400000 }, { "date": 495324000000, - "title": "Sweden", + "label": "Sweden", "end_date": 495583200000 }, { "date": 869954400000, - "title": "Sweden", + "label": "Sweden", "end_date": 870127200000 }, { "date": 1089410400000, - "title": "Sweden", + "label": "Sweden", "end_date": 1090533600000 }, { "date": 1408312800000, - "title": "Sweden", + "label": "Sweden", "end_date": 1408658400000 }, { "date": -3109622400000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -3109536000000 }, { "date": -2952460800000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -2952028800000 }, { "date": -2889993600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -2889907200000 }, { "date": -2819577600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -2819577600000 }, { "date": -1879293600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -1879207200000 }, { "date": -1555293600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -1554861600000 }, { "date": -1428631200000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -1428631200000 }, { "date": -1338602400000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -1338602400000 }, { "date": -1334023200000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -1333936800000 }, { "date": -957924000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -957924000000 }, { "date": -580701600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -580615200000 }, { "date": -484884000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -484797600000 }, { "date": -40356000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": -40356000000 }, { "date": 91238400000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 91324800000 }, { "date": 109551600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 109724400000 }, { "date": 172710000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 172710000000 }, { "date": 239148000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 239234400000 }, { "date": 271288800000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 271375200000 }, { "date": 297036000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 297122400000 }, { "date": 459468000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 459554400000 }, { "date": 489276000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 489362400000 }, { "date": 519256800000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 519861600000 }, { "date": 552088800000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 552693600000 }, { "date": 553212000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 553644000000 }, { "date": 556754400000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 556840800000 }, { "date": 582415200000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 582415200000 }, { "date": 649202400000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 649202400000 }, { "date": 748735200000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 749602800000 }, { "date": 871768800000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 871768800000 }, { "date": 926460000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 927928800000 }, { "date": 971395200000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 971654400000 }, { "date": 1124575200000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 1125007200000 }, { "date": 1153864800000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 1153951200000 }, { "date": 1181253600000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 1181340000000 }, { "date": 1186524000000, - "title": "Switzerland", + "label": "Switzerland", "end_date": 1186869600000 }, { "date": -2982268800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2982268800000 }, { "date": -2978812800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2978812800000 }, { "date": -2972505600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2972332800000 }, { "date": -2727734400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2727734400000 }, { "date": -2505254400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2505254400000 }, { "date": -2436566400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2436566400000 }, { "date": -2371075200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2370902400000 }, { "date": -2112051600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2112051600000 }, { "date": -2111014800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2111014800000 }, { "date": -2036109600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -2036109600000 }, { "date": -1901671200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1901671200000 }, { "date": -1895356800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1895356800000 }, { "date": -1882404000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1882317600000 }, { "date": -1809914400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1809741600000 }, { "date": -1752717600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1752717600000 }, { "date": -1629252000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1629252000000 }, { "date": -1565056800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1565056800000 }, { "date": -1516060800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1516060800000 }, { "date": -1365991200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1365991200000 }, { "date": -1334023200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1334023200000 }, { "date": -1331078400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1330992000000 }, { "date": -1325034000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1324947600000 }, { "date": -1239847200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1239847200000 }, { "date": -1218160800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1218160800000 }, { "date": -1216605600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1216605600000 }, { "date": -1216087200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1216087200000 }, { "date": -1186884000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1186884000000 }, { "date": -1006131600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -1006131600000 }, { "date": -807674400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -807674400000 }, { "date": -720234000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -719370000000 }, { "date": -673063200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -673063200000 }, { "date": -657766800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -657766800000 }, { "date": -548388000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -548301600000 }, { "date": -533869200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -533782800000 }, { "date": -521258400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -521258400000 }, { "date": -477792000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -477792000000 }, { "date": -456285600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -456285600000 }, { "date": -396583200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -396583200000 }, { "date": -291952800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -291952800000 }, { "date": -291434400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -291434400000 }, { "date": -290131200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -290131200000 }, { "date": -46663200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": -46663200000 }, { "date": 189471600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 189471600000 }, { "date": 212367600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 212367600000 }, { "date": 248054400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 248140800000 }, { "date": 253321200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 253321200000 }, { "date": 253321200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 253321200000 }, { "date": 336348000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 336348000000 }, { "date": 378946800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 379033200000 }, { "date": 489016800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 494373600000 }, { "date": 635986800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 636159600000 }, { "date": 656985600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 657072000000 }, { "date": 663030000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 663030000000 }, { "date": 727052400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 727311600000 }, { "date": 730249200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 730249200000 }, { "date": 739749600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 739922400000 }, { "date": 756864000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 757296000000 }, { "date": 757897200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 758329200000 }, { "date": 786927600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 787190400000 }, { "date": 867708000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 867794400000 }, { "date": 892072800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 892418400000 }, { "date": 909014400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 909187200000 }, { "date": 920761200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 921279600000 }, { "date": 945993600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 946252800000 }, { "date": 960069600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 960156000000 }, { "date": 971042400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 973724400000 }, { "date": 1003622400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1003795200000 }, { "date": 1027980000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1028152800000 }, { "date": 1037232000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1038182400000 }, { "date": 1041375600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1041807600000 }, { "date": 1092607200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1092693600000 }, { "date": 1105138800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1105311600000 }, { "date": 1105398000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1105484400000 }, { "date": 1119132000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1119218400000 }, { "date": 1129075200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1129248000000 }, { "date": 1130972400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1130972400000 }, { "date": 1181858400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1185746400000 }, { "date": 1186696800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1186869600000 }, { "date": 1200351600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1201302000000 }, { "date": 1218751200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1218837600000 }, { "date": 1220652000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1220824800000 }, { "date": 1229126400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1229212800000 }, { "date": 1240524000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1240610400000 }, { "date": 1258502400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1258675200000 }, { "date": 1289865600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1289952000000 }, { "date": 1339279200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1339365600000 }, { "date": 1340402400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1340488800000 }, { "date": 1348351200000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1348610400000 }, { "date": 1353456000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1355788800000 }, { "date": 1356220800000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1356220800000 }, { "date": 1386198000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1386457200000 }, { "date": 1388102400000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1391727600000 }, { "date": 1388703600000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1388790000000 }, { "date": 1449270000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1453762800000 }, { "date": 1457478000000, - "title": "United Kingdom", + "label": "United Kingdom", "end_date": 1457564400000 } ] \ No newline at end of file diff --git a/data/political-philosophy.json b/data/political-philosophy.json index 60b0657..b448f97 100644 --- a/data/political-philosophy.json +++ b/data/political-philosophy.json @@ -1,135 +1,135 @@ [ { - "title": "Plato", + "label": "Plato", "date": -75673612800000, "end_date": -73085932800000 }, { - "title": "Confucius", + "label": "Confucius", "date": -79555046400000, "end_date": -77251536000000 }, { - "title": "Aristotle", + "label": "Aristotle", "date": -74285078400000, "end_date": -72297014400000 }, { - "title": "Alexander the Great", + "label": "Alexander the Great", "date": -73384099200000, "end_date": -72346089600000 }, { - "title": "Socrates", + "label": "Socrates", "date": -76998988800000, "end_date": -74726928000000 }, { - "title": "Cicero", + "label": "Cicero", "date": -65512022400000, "end_date": -63494755200000 }, { - "title": "Augustine of Hippo", + "label": "Augustine of Hippo", "date": -50968742400000, "end_date": -48577017600000 }, { - "title": "Thomas Aquinas", + "label": "Thomas Aquinas", "date": -23509872000000, "end_date": -21957955200000 }, { - "title": "Ibn Khaldun", + "label": "Ibn Khaldun", "date": -20120659200000, "end_date": -17791660800000 }, { - "title": "Avicenna", + "label": "Avicenna", "date": -31221158400000, "end_date": -29427840000000 }, { - "title": "Magna Carta", + "label": "Magna Carta", "date": -23811235200000 }, { - "title": "Niccolò Machiavelli", + "label": "Niccolò Machiavelli", "date": -15799449600000, "end_date": -13965004800000 }, { - "title": "Jean-Jacques Rousseau", + "label": "Jean-Jacques Rousseau", "date": -8126265600000, "end_date": -6043161600000 }, { - "title": "Thomas Hobbes", + "label": "Thomas Hobbes", "date": -12046579200000, "end_date": -9153907200000 }, { - "title": "John Locke", + "label": "John Locke", "date": -10645430400000, "end_date": -8368185600000 }, { - "title": "Montesquieu", + "label": "Montesquieu", "date": -8865936000000, "end_date": -6781276800000 }, { - "title": "Voltaire", + "label": "Voltaire", "date": -8681644800000, "end_date": -6046012800000 }, { - "title": "Karl Marx", + "label": "Karl Marx", "date": -4785955200000, "end_date": -2739225600000 }, { - "title": "Friedrich Engels", + "label": "Friedrich Engels", "date": -4704912000000, "end_date": -2348092800000 }, { - "title": "John Rawls", + "label": "John Rawls", "date": -1541894400000, "end_date": 1038096000000 }, { - "title": "Jeremy Bentham", + "label": "Jeremy Bentham", "date": -7001769600000, "end_date": -4341340800000 }, { - "title": "Michel Foucault", + "label": "Michel Foucault", "date": -1363737600000, "end_date": 456969600000 }, { - "title": "David Hume", + "label": "David Hume", "date": -8162380800000, "end_date": -6101568000000 }, { - "title": "Thomas Jefferson", + "label": "Thomas Jefferson", "date": -7154611200000, "end_date": -4528310400000 }, { - "title": "Immanuel Kant", + "label": "Immanuel Kant", "date": -7753363200000, "end_date": -5234889600000 }, { - "title": "Peter Kropotkin", + "label": "Peter Kropotkin", "date": -4009737600000, "end_date": -1543017600000 }, { - "title": "John Stuart Mill", + "label": "John Stuart Mill", "date": -5163350400000, "end_date": -3050006400000 } diff --git a/index.floods.html b/index.floods.html index 36d6e0e..f723a8a 100644 --- a/index.floods.html +++ b/index.floods.html @@ -9,37 +9,46 @@ width: 100%; } +
\ No newline at end of file + + \ No newline at end of file diff --git a/index.html b/index.html index 7074b1f..9e6ca95 100644 --- a/index.html +++ b/index.html @@ -9,38 +9,62 @@ width: 100%; } +
\ No newline at end of file + + \ No newline at end of file diff --git a/index.political.philosophy.html b/index.political.philosophy.html index 4976485..96afb3e 100644 --- a/index.political.philosophy.html +++ b/index.political.philosophy.html @@ -9,6 +9,7 @@ width: 100%; } +
\ No newline at end of file + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6aa2ef0..18f2880 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "timeline", - "version": "2.0.0", + "version": "2.4.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -42,6 +42,16 @@ "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", "dev": true }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, "acorn": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", @@ -66,6 +76,12 @@ "acorn": "^5.0.0" } }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, "ajv": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", @@ -150,12 +166,12 @@ } }, "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { - "default-require-extensions": "^1.0.0" + "default-require-extensions": "^2.0.0" } }, "aproba": { @@ -242,6 +258,12 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -310,6 +332,12 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -340,6 +368,16 @@ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", "dev": true }, + "axios": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", + "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "dev": true, + "requires": { + "follow-redirects": "^1.2.5", + "is-buffer": "^1.1.5" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -613,13 +651,31 @@ } }, "babel-jest": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.3.tgz", - "integrity": "sha512-BgSjmtl3mW3i+VeVHEr9d2zFSAT66G++pJcHQiUjd00pkW+voYXFctIm/indcqOWWXw5a1nUpR1XWszD9fJ1qg==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz", + "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==", "dev": true, "requires": { "babel-plugin-istanbul": "^4.1.5", - "babel-preset-jest": "^22.4.3" + "babel-preset-jest": "^22.4.4" + }, + "dependencies": { + "babel-plugin-jest-hoist": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", + "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", + "dev": true + }, + "babel-preset-jest": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", + "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^22.4.4", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + } } }, "babel-messages": { @@ -1243,6 +1299,12 @@ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1275,12 +1337,30 @@ } } }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, "base64-js": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", "dev": true }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", @@ -1291,6 +1371,15 @@ "tweetnacl": "^0.14.3" } }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", @@ -1309,6 +1398,12 @@ "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", "dev": true }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", @@ -1409,212 +1504,630 @@ } } }, - "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", - "dev": true - }, - "buffer-writer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", - "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" + "browser-sync": { + "version": "2.24.5", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.5.tgz", + "integrity": "sha512-r6ZRYncfYRGerw4Rh5S8Q9x9WKDdrwH572hd3ofsYgn0Px6a6EqXiLBVTCss2+2a45G9ZgjRHSeo9YY56UpgKw==", + "dev": true, + "requires": { + "browser-sync-ui": "v1.0.1", + "bs-recipes": "1.3.4", + "chokidar": "1.7.0", + "connect": "3.6.6", + "connect-history-api-fallback": "^1.5.0", + "dev-ip": "^1.0.1", + "easy-extender": "2.3.2", + "eazy-logger": "3.0.2", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "1.15.2", + "immutable": "3.8.2", + "localtunnel": "1.9.0", + "micromatch": "2.3.11", + "opn": "4.0.2", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.1.1", + "ua-parser-js": "0.7.17", + "yargs": "6.4.0" }, "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true - } - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.1.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "browser-sync-ui": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz", + "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1.1.0", + "immutable": "^3.7.6", + "server-destroy": "1.0.1", + "socket.io-client": "2.0.4", + "stream-throttle": "^0.1.3" + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "buffer-writer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", + "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "dev": true, + "requires": { + "rsvp": "^3.3.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" } @@ -1963,9 +2476,15 @@ "dev": true }, "compare-versions": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", - "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.3.0.tgz", + "integrity": "sha512-MAAAIOdi2s4Gl6rZ76PNcUa9IOYB+5ICdT41o5uMRf09aEu/F9RK+qhe8RjXNPwcTjGV7KU7h2P/fljThFVqyQ==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", "dev": true }, "component-emitter": { @@ -1974,6 +2493,12 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1992,6 +2517,24 @@ "typedarray": "^0.0.6" } }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -2013,6 +2556,12 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -2395,12 +2944,20 @@ "dev": true }, "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { - "strip-bom": "^2.0.0" + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } } }, "define-properties": { @@ -2429,6 +2986,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -2439,6 +3002,12 @@ "minimalistic-assert": "^1.0.0" } }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, "detect-conflict": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", @@ -2460,6 +3029,12 @@ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -2516,6 +3091,32 @@ "stream-shift": "^1.0.0" } }, + "easy-extender": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", + "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=", + "dev": true, + "requires": { + "lodash": "^3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "dev": true, + "requires": { + "tfunk": "^3.0.1" + } + }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", @@ -2532,6 +3133,12 @@ "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", "dev": true }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, "ejs": { "version": "2.5.8", "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", @@ -2565,6 +3172,12 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -2574,6 +3187,96 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "~1.0.2" + } + }, "enhanced-resolve": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", @@ -2614,9 +3317,9 @@ } }, "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { "es-to-primitive": "^1.1.1", @@ -2637,6 +3340,12 @@ "is-symbol": "^1.0.1" } }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2708,6 +3417,18 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -2725,12 +3446,12 @@ } }, "exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", "dev": true, "requires": { - "merge": "^1.1.3" + "merge": "^1.2.0" } }, "execa": { @@ -2761,12 +3482,6 @@ } } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", @@ -2875,16 +3590,43 @@ }, "dependencies": { "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", - "randomatic": "^1.1.3", + "randomatic": "^3.0.0", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + } } }, "is-number": { @@ -3094,6 +3836,21 @@ } } }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, "find-cache-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", @@ -3145,6 +3902,26 @@ "readable-stream": "^2.0.4" } }, + "follow-redirects": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", + "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", + "dev": true, + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3192,6 +3969,12 @@ "map-cache": "^0.2.2" } }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -3232,39 +4015,29 @@ "dev": true }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "aproba": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true @@ -3275,94 +4048,26 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, "balanced-match": { - "version": "0.4.2", + "version": "1.0.0", "bundled": true, "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, "brace-expansion": { - "version": "1.1.7", + "version": "1.1.11", "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", + "chownr": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true @@ -3370,17 +4075,7 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "1.0.0" - } + "dev": true }, "concat-map": { "version": "0.0.1", @@ -3390,8 +4085,7 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -3399,34 +4093,8 @@ "dev": true, "optional": true }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "debug": { - "version": "2.6.8", + "version": "2.6.9", "bundled": true, "dev": true, "optional": true, @@ -3435,13 +4103,7 @@ } }, "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", + "version": "0.5.1", "bundled": true, "dev": true, "optional": true @@ -3453,75 +4115,25 @@ "optional": true }, "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "forever-agent": { - "version": "0.6.1", + "version": "1.0.3", "bundled": true, "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", + "fs-minipass": { + "version": "1.2.5", "bundled": true, "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "optional": true }, "gauge": { "version": "2.7.4", @@ -3529,65 +4141,28 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "bundled": true, "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3596,164 +4171,65 @@ "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", + "iconv-lite": { + "version": "0.4.21", "bundled": true, "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "safer-buffer": "^2.1.0" } }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", + "ignore-walk": { + "version": "3.0.1", "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "bundled": true, + "dev": true }, - "mime-db": { - "version": "1.27.0", + "ini": { + "version": "1.3.5", "bundled": true, "dev": true, "optional": true }, - "mime-types": { - "version": "2.1.15", + "is-fullwidth-code-point": { + "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "mime-db": "1.27.0" + "number-is-nan": "^1.0.0" } }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, "minimatch": { "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3761,6 +4237,24 @@ "bundled": true, "dev": true }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mkdirp": { "version": "0.5.1", "bundled": true, @@ -3775,23 +4269,33 @@ "dev": true, "optional": true }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-pre-gyp": { - "version": "0.6.39", + "version": "0.10.0", "bundled": true, "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3800,33 +4304,42 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "npmlog": { - "version": "4.1.0", + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", "bundled": true, "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, - "number-is-nan": { - "version": "1.0.1", + "npmlog": { + "version": "4.1.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } }, - "oauth-sign": { - "version": "0.8.2", + "number-is-nan": { + "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3839,7 +4352,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3855,54 +4368,37 @@ "optional": true }, "osenv": { - "version": "0.1.4", + "version": "0.1.5", "bundled": true, "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "optional": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", + "version": "2.0.0", "bundled": true, "dev": true, "optional": true }, "rc": { - "version": "1.2.1", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3914,66 +4410,48 @@ } }, "readable-stream": { - "version": "2.2.9", + "version": "2.3.6", "bundled": true, "dev": true, "optional": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "request": { - "version": "2.81.0", + "rimraf": { + "version": "2.6.2", "bundled": true, "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "glob": "^7.0.5" } }, - "rimraf": { - "version": "2.6.1", + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", "bundled": true, "dev": true, - "requires": { - "glob": "7.1.2" - } + "optional": true }, - "safe-buffer": { - "version": "5.0.1", + "sax": { + "version": "1.2.4", "bundled": true, "dev": true, "optional": true }, "semver": { - "version": "5.3.0", + "version": "5.5.0", "bundled": true, "dev": true, "optional": true @@ -3990,72 +4468,31 @@ "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4065,96 +4502,44 @@ "optional": true }, "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", + "version": "4.4.1", "bundled": true, "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "bundled": true, "dev": true, "optional": true }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "bundled": true, "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true } } }, @@ -4582,12 +4967,12 @@ } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4607,12 +4992,35 @@ } } }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, "has-color": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", "dev": true }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4754,6 +5162,36 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "dev": true, + "requires": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4789,6 +5227,12 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, "import-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", @@ -4934,9 +5378,9 @@ } }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-ci": { @@ -5051,6 +5495,15 @@ } } }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, "is-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", @@ -5202,59 +5655,6 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", - "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", - "dev": true, - "requires": { - "async": "^2.1.4", - "compare-versions": "^3.1.0", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-report": "^1.1.4", - "istanbul-lib-source-maps": "^1.2.4", - "istanbul-reports": "^1.3.0", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", - "once": "^1.4.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", - "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - } - } - }, "istanbul-lib-coverage": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", @@ -5262,12 +5662,12 @@ "dev": true }, "istanbul-lib-hook": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", - "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz", + "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", "dev": true, "requires": { - "append-transform": "^0.4.0" + "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { @@ -5314,40 +5714,16 @@ "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "ms": "2.0.0" + "has-flag": "^1.0.0" } } } @@ -5407,6 +5783,15 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", @@ -5418,6 +5803,15 @@ "repeat-element": "^1.1.2" } }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -5452,9 +5846,9 @@ } }, "jest-cli": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.3.tgz", - "integrity": "sha512-IiHybF0DJNqZPsbjn4Cy4vcqcmImpoFwNFnkehzVw8lTUSl4axZh5DHewu5bdpZF2Y5gUqFKYzH0FH4Qx2k+UA==", + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz", + "integrity": "sha512-I9dsgkeyjVEEZj9wrGrqlH+8OlNob9Iptyl+6L5+ToOLJmHm4JwOPatin1b2Bzp5R5YRQJ+oiedx7o1H7wJzhA==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -5468,20 +5862,20 @@ "istanbul-lib-coverage": "^1.1.1", "istanbul-lib-instrument": "^1.8.0", "istanbul-lib-source-maps": "^1.2.1", - "jest-changed-files": "^22.4.3", - "jest-config": "^22.4.3", - "jest-environment-jsdom": "^22.4.3", - "jest-get-type": "^22.4.3", - "jest-haste-map": "^22.4.3", - "jest-message-util": "^22.4.3", - "jest-regex-util": "^22.4.3", - "jest-resolve-dependencies": "^22.4.3", - "jest-runner": "^22.4.3", - "jest-runtime": "^22.4.3", - "jest-snapshot": "^22.4.3", - "jest-util": "^22.4.3", - "jest-validate": "^22.4.3", - "jest-worker": "^22.4.3", + "jest-changed-files": "^22.2.0", + "jest-config": "^22.4.4", + "jest-environment-jsdom": "^22.4.1", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^22.4.2", + "jest-message-util": "^22.4.0", + "jest-regex-util": "^22.1.0", + "jest-resolve-dependencies": "^22.1.0", + "jest-runner": "^22.4.4", + "jest-runtime": "^22.4.4", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "jest-worker": "^22.2.2", "micromatch": "^2.3.11", "node-notifier": "^5.2.1", "realpath-native": "^1.0.0", @@ -5491,6 +5885,233 @@ "strip-ansi": "^4.0.0", "which": "^1.2.12", "yargs": "^10.0.3" + }, + "dependencies": { + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "istanbul-api": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "^2.1.4", + "compare-versions": "^3.1.0", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-hook": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-report": "^1.1.4", + "istanbul-lib-source-maps": "^1.2.4", + "istanbul-reports": "^1.3.0", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + }, + "dependencies": { + "istanbul-lib-source-maps": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", + "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", + "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "jest-changed-files": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", + "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", + "dev": true, + "requires": { + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz", + "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.4.1", + "jest-environment-node": "^22.4.1", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^22.4.4", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "pretty-format": "^22.4.0" + } + }, + "jest-haste-map": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", + "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", + "dev": true, + "requires": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^22.4.3", + "jest-serializer": "^22.4.3", + "jest-worker": "^22.4.3", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", + "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", + "dev": true, + "requires": { + "jest-regex-util": "^22.4.3" + } + }, + "jest-runner": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.4.tgz", + "integrity": "sha512-5S/OpB51igQW9xnkM5Tgd/7ZjiAuIoiJAVtvVTBcEBiXBIFzWM3BAMPBM19FX68gRV0KWyFuGKj0EY3M3aceeQ==", + "dev": true, + "requires": { + "exit": "^0.1.2", + "jest-config": "^22.4.4", + "jest-docblock": "^22.4.0", + "jest-haste-map": "^22.4.2", + "jest-jasmine2": "^22.4.4", + "jest-leak-detector": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-runtime": "^22.4.4", + "jest-util": "^22.4.1", + "jest-worker": "^22.2.2", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.4.tgz", + "integrity": "sha512-WRTj9m///npte1YjuphCYX7GRY/c2YvJImU9t7qOwFcqHr4YMzmX6evP/3Sehz5DKW2Vi8ONYPCFWe36JVXxfw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^22.4.4", + "babel-plugin-istanbul": "^4.1.5", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^22.4.4", + "jest-haste-map": "^22.4.2", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "json-stable-stringify": "^1.0.1", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^10.0.3" + } + }, + "jest-validate": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz", + "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-config": "^22.4.4", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^22.4.0" + } + }, + "jest-worker": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", + "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "realpath-native": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.1.tgz", + "integrity": "sha512-W14EcXuqUvKP8dkWkD7B95iMy77lpMnlFXbbk409bQtNCbeu0kvRE5reo+yIZ3JXxg6frbGsz2DLQ39lrCB40g==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + } + } + } + }, + "jest-jasmine2": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz", + "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.4.0", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.4.0", + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "source-map-support": "^0.5.0" } }, "kind-of": { @@ -5502,6 +6123,12 @@ "is-buffer": "^1.1.5" } }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -5523,6 +6150,47 @@ "regex-cache": "^0.4.2" } }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "source-map-support": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", + "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -5560,15 +6228,6 @@ } } }, - "jest-changed-files": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", - "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", - "dev": true, - "requires": { - "throat": "^4.0.0" - } - }, "jest-config": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", @@ -5592,156 +6251,50 @@ "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff": "^3.2.0", - "jest-get-type": "^22.4.3", - "pretty-format": "^22.4.3" - } - }, - "jest-docblock": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", - "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-environment-jsdom": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", - "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", - "dev": true, - "requires": { - "jest-mock": "^22.4.3", - "jest-util": "^22.4.3", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", - "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", - "dev": true, - "requires": { - "jest-mock": "^22.4.3", - "jest-util": "^22.4.3" - } - }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", - "dev": true - }, - "jest-haste-map": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", - "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", - "dev": true, - "requires": { - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.1.11", - "jest-docblock": "^22.4.3", - "jest-serializer": "^22.4.3", - "jest-worker": "^22.4.3", - "micromatch": "^2.3.11", - "sane": "^2.0.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - } + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + } + }, + "jest-docblock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", + "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-environment-jsdom": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", + "dev": true, + "requires": { + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", + "dev": true, + "requires": { + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" } }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, "jest-jasmine2": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", @@ -5870,259 +6423,60 @@ "is-extglob": "^1.0.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - } - } - }, - "jest-mock": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", - "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", - "dev": true - }, - "jest-regex-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", - "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", - "dev": true - }, - "jest-resolve": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", - "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", - "dev": true, - "requires": { - "browser-resolve": "^1.11.2", - "chalk": "^2.0.1" - } - }, - "jest-resolve-dependencies": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", - "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", - "dev": true, - "requires": { - "jest-regex-util": "^22.4.3" - } - }, - "jest-runner": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.3.tgz", - "integrity": "sha512-U7PLlQPRlWNbvOHWOrrVay9sqhBJmiKeAdKIkvX4n1G2tsvzLlf77nBD28GL1N6tGv4RmuTfI8R8JrkvCa+IBg==", - "dev": true, - "requires": { - "exit": "^0.1.2", - "jest-config": "^22.4.3", - "jest-docblock": "^22.4.3", - "jest-haste-map": "^22.4.3", - "jest-jasmine2": "^22.4.3", - "jest-leak-detector": "^22.4.3", - "jest-message-util": "^22.4.3", - "jest-runtime": "^22.4.3", - "jest-util": "^22.4.3", - "jest-worker": "^22.4.3", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.3.tgz", - "integrity": "sha512-Eat/esQjevhx9BgJEC8udye+FfoJ2qvxAZfOAWshYGS22HydHn5BgsvPdTtt9cp0fSl5LxYOFA1Pja9Iz2Zt8g==", - "dev": true, - "requires": { - "babel-core": "^6.0.0", - "babel-jest": "^22.4.3", - "babel-plugin-istanbul": "^4.1.5", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "exit": "^0.1.2", - "graceful-fs": "^4.1.11", - "jest-config": "^22.4.3", - "jest-haste-map": "^22.4.3", - "jest-regex-util": "^22.4.3", - "jest-resolve": "^22.4.3", - "jest-util": "^22.4.3", - "jest-validate": "^22.4.3", - "json-stable-stringify": "^1.0.1", - "micromatch": "^2.3.11", - "realpath-native": "^1.0.0", - "slash": "^1.0.0", - "strip-bom": "3.0.0", - "write-file-atomic": "^2.1.0", - "yargs": "^10.0.3" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" } }, - "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "camelcase": "^4.1.0" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } }, + "jest-mock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", + "dev": true + }, + "jest-regex-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", + "dev": true + }, + "jest-resolve": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" + } + }, "jest-serializer": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", @@ -6179,15 +6533,6 @@ "pretty-format": "^22.4.3" } }, - "jest-worker": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", - "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", - "dev": true, - "requires": { - "merge-stream": "^1.0.1" - } - }, "js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -6201,9 +6546,9 @@ "dev": true }, "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6496,6 +6841,12 @@ "type-check": "~0.3.2" } }, + "limiter": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", + "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==", + "dev": true + }, "listr": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", @@ -6797,6 +7148,211 @@ "json5": "^0.5.0" } }, + "localtunnel": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz", + "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==", + "dev": true, + "requires": { + "axios": "0.17.1", + "debug": "2.6.8", + "openurl": "1.1.1", + "yargs": "6.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -6813,6 +7369,12 @@ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", "dev": true }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -6935,6 +7497,12 @@ "object-visit": "^1.0.0" } }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -7085,6 +7653,12 @@ "brorand": "^1.0.1" } }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, "mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", @@ -7258,6 +7832,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, "neo-async": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", @@ -7312,31 +7892,11 @@ "util": "^0.10.3", "vm-browserify": "0.0.4" }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-notifier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", - "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "semver": "^5.4.1", - "shellwords": "^0.1.1", - "which": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true } } @@ -7441,6 +8001,12 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -7510,9 +8076,15 @@ } }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", "dev": true }, "object-visit": { @@ -7553,6 +8125,15 @@ "isobject": "^3.0.1" } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7571,6 +8152,22 @@ "mimic-fn": "^1.0.0" } }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -7876,6 +8473,30 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -8031,6 +8652,16 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -8209,27 +8840,6 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", @@ -8249,6 +8859,35 @@ "safe-buffer": "^5.1.0" } }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "read-chunk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", @@ -8307,15 +8946,6 @@ "set-immediate-shim": "^1.0.1" } }, - "realpath-native": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.0.tgz", - "integrity": "sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, "recast": { "version": "0.14.7", "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", @@ -8508,6 +9138,12 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, "resolve": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", @@ -8548,6 +9184,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + } + }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -8602,6 +9248,12 @@ "inherits": "^2.0.1" } }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -8620,6 +9272,12 @@ "aproba": "^1.1.1" } }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -8659,16 +9317,23 @@ "ret": "~0.1.10" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "sane": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.0.tgz", - "integrity": "sha512-glfKd7YH4UCrh/7dD+UESsr8ylKWRE7UQPoXuz28FgmcF0ViJQhCTCCZHICRKxf8G8O1KdLEn20dcICK54c7ew==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", "dev": true, "requires": { "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", "exec-sh": "^0.2.0", "fb-watchman": "^2.0.0", - "fsevents": "^1.1.1", + "fsevents": "^1.2.3", "micromatch": "^3.1.4", "minimist": "^1.1.1", "walker": "~1.0.5", @@ -8711,12 +9376,74 @@ "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=", "dev": true }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, "serialize-javascript": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", "dev": true }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -8758,6 +9485,12 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -8980,6 +9713,156 @@ "hoek": "4.x.x" } }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.1.1", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -9194,6 +10077,12 @@ } } }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -9239,6 +10128,16 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, "stream-to-observable": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", @@ -9254,16 +10153,6 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - } - }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -9497,6 +10386,58 @@ "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", "dev": true }, + "tfunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", + "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "object-path": "^0.9.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "throat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", @@ -9549,6 +10490,12 @@ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", "dev": true }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -9716,6 +10663,12 @@ "integrity": "sha512-Ao/f6d/4EPLq0YwzsQz8iXflezpTkQzqAyenTiw4kCUGr1uPiFLC3+fZ+gMZz6eeI/qdRUqvC+HxIJzUAzEFdg==", "dev": true }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "dev": true + }, "uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", @@ -9765,6 +10718,12 @@ } } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, "underscore": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", @@ -9830,6 +10789,12 @@ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -9972,6 +10937,12 @@ "object.getownpropertydescriptors": "^2.0.3" } }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, "uuid": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", @@ -10475,6 +11446,12 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -10530,6 +11507,12 @@ "camelcase": "^4.1.0" } }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, "yeoman-environment": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", diff --git a/package.json b/package.json index d291384..ee24860 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "timeline", - "version": "2.4.2", + "version": "2.5.0", "description": "", "main": "build/bundle.js", "types": "build/src/index.d.ts", @@ -11,10 +11,12 @@ "build": "webpack --mode production", "test": "jest", "prewatch": "rm -rf build", + "server:dev": "browser-sync start -s --no-open -f \"build\" \"index.html\"", "watch": "webpack -w --mode development" }, "devDependencies": { "@types/jest": "^22.2.2", + "browser-sync": "^2.24.5", "jest": "^22.4.3", "pg": "^7.4.1", "ts-jest": "^22.4.2", diff --git a/src/constants.ts b/src/constants.ts index 2d2cf42..8349fdd 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -18,8 +18,6 @@ export const CENTER_CHANGE_DONE = 'CENTER_CHANGE_DONE' export type Milliseconds = number export type Grid = [Milliseconds, Milliseconds][][] -export type ComponentType = 'EVENTS' | 'MINIMAP' | 'RULERS' | 'SPARKLINE' - /** A Ratio is a number between 0 and 1 */ export type Ratio = number @@ -30,3 +28,11 @@ export class RawSegment { from: Milliseconds to: Milliseconds } + +export type Color = (opacity: number) => string +export const colors: Color[] = [ + 'rgba(211,84,0', + 'rgba(219,10,91', + 'rgba(31,58,147', + 'rgba(0,128,0' +].map(color => (opacity: number = 1) => `${color},${opacity})`) \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 09596ba..d1c79a3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,19 +4,21 @@ import Band from './views/band' import Indicator from './views/indicator' import createElement from './utils/create-element' import { debounce } from './utils/index' -import { orderEvents } from './utils/events.worker' +import { orderEvents, OrderedEvents } from './utils/events.worker' import Api from './api' import eventBus from './event-bus' -export { orderEvents, Config as TimelineConfig } +export { Config as TimelineConfig, orderEvents, OrderedEvents } // TODO add zoom func // TODO Add open ranges (ie: people still alive) // TODO If event granularity is equal to band granularity a point in time should be rendered as an interval (as unsure?) // TODO flip PiT when on edge of timeline // TODO Scroll vertical when events higher than viewportHeight -// TODO Make the timeline standalone, so it does not need the server -// TODO make multiple bands with seperate events possible +// TODO keep the labels visible when the event is still visible but the label outside the viewport +// TODO remove topOffsetRatio +// TODO make it possible to have only minimap bands (see index.floods.html) +// TODO add check if `type` prop is present in config export default class Timeline extends Api { private wrapper: HTMLElement @@ -56,7 +58,6 @@ export default class Timeline extends Api { 'div', 'wrapper', [ - 'background-color: teal', 'box-sizing: border-box', 'height: 100%', 'overflow: hidden', @@ -75,15 +76,39 @@ export default class Timeline extends Api { this.bands = props.domains.map(d => new Band(d)) this.bands.forEach(this.appendToWrapper) + this.renderLabels() this.renderIndicators() } private renderIndicators(): void { this.bands - .filter(band => band.domain.config.hasIndicatorFor != null) - .map(band => new Indicator(band.domain, this.bands[band.domain.config.hasIndicatorFor].domain)) + .filter(band => band.domain.config.targets != null) + .map(band => new Indicator(band.domain)) .forEach(this.appendToWrapper) } + private renderLabels() { + props.domains + .filter(d => d.config.label != null) + .map(d => { + const eventsLabel: HTMLDivElement = createElement('div', 'events-label', + [ + 'border-bottom-right-radius: 4px', + 'color: #444', + 'font-size: .8em', + 'font-family: sans-serif', + 'padding: 2px 4px', + 'position: absolute', + ], + [ + `top: ${d.config.topOffsetRatio * 100}%` + ] + ) + eventsLabel.innerText = d.config.label + this.wrapper.appendChild(eventsLabel) + }) + + } + private appendToWrapper = (child) => this.wrapper.appendChild(child.render()) } diff --git a/src/models/config.ts b/src/models/config.ts index 8d00741..29b1aad 100644 --- a/src/models/config.ts +++ b/src/models/config.ts @@ -1,28 +1,25 @@ -import { Ratio, Milliseconds } from "../constants" -import { RawEv3nt } from "./event" +import { Ratio } from "../constants" import DomainConfig from "./domain.config" -export class AggregateEntry { - count: number - year: number -} +// export class AggregateEntry { +// count: number +// year: number +// } export default class Config { - aggregate?: AggregateEntry[] = [] + // aggregate?: AggregateEntry[] = [] center?: Ratio = .5 - domains: DomainConfig[] = [] + domains?: DomainConfig[] = [] - events: RawEv3nt[] = [] - - from: Milliseconds + // from: Milliseconds // The HTML element where the Timeline will be attached to. The element should be a // block element with a width and height. - rootElement: HTMLElement = null + rootElement?: HTMLElement = null - rowCount: number + // rowCount: number - to: Milliseconds + // to: Milliseconds } \ No newline at end of file diff --git a/src/models/domain.config.ts b/src/models/domain.config.ts index 1c1ea89..6488213 100644 --- a/src/models/domain.config.ts +++ b/src/models/domain.config.ts @@ -1,38 +1,46 @@ -import { Ratio, ComponentType } from "../constants"; +import { Ratio, Pixels } from "../constants" +import { OrderedEvents, orderEvents } from "../utils/events.worker" +import { RawEv3nt } from "./event" export default class DomainConfig { - components: Set = new Set() + events?: RawEv3nt[] = [] - hasEvents?: boolean = true - - hasIndicatorFor?: number = null + // When type is 'minimap' this is where the target domains are given + targets?: number[] = null // Part of the horizontal space available to this domain. // If the ratio is .1 only 10% of the heigth is used for this domain. heightRatio?: Ratio = 1 - hasRulers?: boolean = true + label?: string = null + + orderedEvents?: OrderedEvents = null - hasSparkline?: boolean = true + rulers?: boolean = true // Number between 0 and 1 representing the offset from the top // at which the domain should start. A ratio of .3 would make the // domain start at 30% from the top. topOffsetRatio?: Ratio = 0 + type?: 'events' | 'minimap' = 'events' + // Number between 0 and 1 representing the visible ratio of the domain - // in relation to the total. If the total is 1 year, a ratio of .75 - // would show 9 months and hide 3 months. + // in relation to the total. If the total is 8 months, a ratio of .75 + // would show 6 months and hide 2 months. Ie (with center at .5): -[------]- visibleRatio?: Ratio = 1 + constructor(config: DomainConfig, viewportWidth: Pixels) { + if (config.type === 'events') { + if (config.events == null && config.orderedEvents == null) console.error('[DomainConfig] No events in config!') - constructor(props) { - Object.keys(props).forEach(k => { - if (k === 'components') this[k] = new Set(props[k]) - else if (this.hasOwnProperty(k)) this[k] = props[k] + this.orderedEvents = (config.orderedEvents == null) ? + orderEvents(config.events, viewportWidth, this.visibleRatio) : + config.orderedEvents + } + + Object.keys(config).forEach(k => { + if (this.hasOwnProperty(k)) this[k] = config[k] }) } - - // domainLabels?: boolean - // rulerLabels?: boolean -} \ No newline at end of file +} diff --git a/src/models/domain.ts b/src/models/domain.ts index 5f7b7a2..d177833 100644 --- a/src/models/domain.ts +++ b/src/models/domain.ts @@ -2,19 +2,21 @@ import { getGranularity, Granularity } from '../utils/dates' import { subsequentDate } from '../utils/dates' import props from './props' import DomainConfig from './domain.config' -import { Pixels, Milliseconds, Ratio } from '../constants'; +import { Pixels, Milliseconds, Ratio, Color } from '../constants'; class Domain { - config: DomainConfig // Level of detail (ie century, year, month, week, day, etc) granularity: Granularity + // Total height of the domain + height: number + // The amount of pixels taken by one day. Metric used for calculating // the x-position of an event or ruler on the timeline. pixelsPerMillisecond: number + // Total width of the domain width: number - height: number private _left: Pixels get left() { return this._left } @@ -26,11 +28,10 @@ class Domain { nextDate: (d: Milliseconds) => Milliseconds - constructor(configProps) { - this.config = new DomainConfig(configProps) + constructor(public config: DomainConfig, public color: Color) { this.height = props.viewportHeight * this.config.heightRatio this.width = props.viewportWidth / this.config.visibleRatio - this.granularity = getGranularity(props.config.from, props.config.to, this.config.visibleRatio) + this.granularity = getGranularity(props.from, props.to, this.config.visibleRatio) this.nextDate = subsequentDate(this.granularity) this.pixelsPerMillisecond = this.width / props.time this.updateLeft() @@ -42,7 +43,7 @@ class Domain { } positionAtDate(date: Milliseconds): Pixels { - return (date - props.config.from) * this.pixelsPerMillisecond + return (date - props.from) * this.pixelsPerMillisecond } proportionAtPosition(position: Pixels): Ratio { @@ -50,13 +51,13 @@ class Domain { } dateAtProportion(proportion: Ratio): Milliseconds { - return props.config.from + (props.time * proportion) + return props.from + (props.time * proportion) } get fromTo(): [Milliseconds, Milliseconds] { const visibleTime = this.config.visibleRatio * props.time - const from = props.config.from + (props.center * (props.time - visibleTime)) - const to = props.config.from + (props.center * (props.time - visibleTime)) + visibleTime + const from = props.from + (props.center * (props.time - visibleTime)) + const to = props.from + (props.center * (props.time - visibleTime)) + visibleTime return [from, to] } } diff --git a/src/models/props.ts b/src/models/props.ts index bb95050..5f8c7d1 100644 --- a/src/models/props.ts +++ b/src/models/props.ts @@ -1,22 +1,82 @@ -import { CENTER_CHANGE, CENTER_CHANGE_DONE, Ratio, Milliseconds } from "../constants" +import { CENTER_CHANGE, CENTER_CHANGE_DONE, Ratio, Milliseconds, Pixels, colors } from "../constants" import Config from "./config" import { debounce } from "../utils" import Domain from "./domain" +import DomainConfig from "./domain.config"; + +/** + * Create a range from 0 up to, but not including n + * ie: 3 => [0, 1, 2] + * ie: 6 => [0, 1, 2, 3, 4, 5] + */ +function createRange(n: number) { + return Array.apply(null, {length: n}).map(Number.call, Number) +} + +/** + * Random select an given amount from a set + * ['a', 'b', 'c', 'd'], 2 => ['d', 'a'] + * [1, 2, 3, 4, 5, 6, 7, 8], 4 => [2, 1, 8, 4] + */ +function selectRandom(set: (string | number)[], amount: number) { + const selected = [] + + while(selected.length < amount) { + const randomIndex = Math.floor(Math.random() * set.length) + const nextItem = set[randomIndex] + if (selected.indexOf(nextItem) === -1 || set.length < amount) selected.push(nextItem) + } + + return selected +} export class Props { private readonly defaultCenter = .5 config: Config domains: Domain[] + + // Timestamp of the start date of the timeline + from: Milliseconds + + // Total time of the timeline time: Milliseconds - viewportHeight: number - viewportWidth: number + + // Timestamp of the end date of the timeline + to: Milliseconds + + viewportHeight: Pixels + viewportWidth: Pixels init(config: Config) { - this.config = config - if (config.center != null) this.center = config.center - this.time = config.to - config.from this.dimensions = config.rootElement - this.domains = config.domains.map(d => new Domain(d)) + + this.config = { + ...config, + domains: config.domains.map(d => new DomainConfig(d, this.viewportWidth)) + } + + const dates: number[] = this.config.domains + .filter(d => d.type === 'events') + .reduce((prev, curr) => { + const { events } = curr.orderedEvents + const firstEvent = events[0] + const lastEvent = events[events.length - 1] + prev.push(firstEvent.date_min, firstEvent.date, firstEvent.end_date, firstEvent.end_date_max) + prev.push(lastEvent.date_min, lastEvent.date, lastEvent.end_date, lastEvent.end_date_max) + return prev + }, []) + .filter(d => d != null) + + this.from = Math.min(...dates) + this.to = Math.max(...dates) + this.time = this.to - this.from + + if (config.center != null) this.center = config.center + + // Last, but not least, initiate the Domains. This depends on almost all the data + // in this class, so keep it last (after viewport size, from, to, time, etc are set) + const indices = selectRandom(createRange(colors.length), this.config.domains.filter(d => d.type === 'events').length) + this.domains = this.config.domains.map((d, i) => new Domain(d, colors[indices[i]])) } /** Current center of the timeline by ratio [0, 1] */ diff --git a/src/utils/aggregate.worker.ts b/src/utils/aggregate.worker.ts index e7bd03b..6c30d0a 100644 --- a/src/utils/aggregate.worker.ts +++ b/src/utils/aggregate.worker.ts @@ -1,39 +1,39 @@ -import { AggregateEntry } from "../models/config" +// import { AggregateEntry } from "../models/config" -function aggregateWorker(e) { - let prevYear - const run1 = e.data - .reduce((prev, curr, index, array) => { - // Worker receives the raw Ev3nt Object, not the Ev3nt class, - // so getters and setters are not available, hence curr._date - const year = new Date(curr.date).getFullYear() - if (prev.hasOwnProperty(year)) { - prev[year]++ - } else { - while (prevYear < year) { - prevYear += 1 - prev[prevYear] = 0 - } - prev[year] = 1 - } - prevYear = year - return prev - }, {}) - const run2 = Object.keys(run1).map((year, index) => ({ year, count: run1[year]})) - //@ts-ignore Typescript wants the second parameter (targetOrigin), but the browser will throw - postMessage(run2) -} +// function aggregateWorker(e) { +// let prevYear +// const run1 = e.data +// .reduce((prev, curr, index, array) => { +// // Worker receives the raw Ev3nt Object, not the Ev3nt class, +// // so getters and setters are not available, hence curr._date +// const year = new Date(curr.date).getFullYear() +// if (prev.hasOwnProperty(year)) { +// prev[year]++ +// } else { +// while (prevYear < year) { +// prevYear += 1 +// prev[prevYear] = 0 +// } +// prev[year] = 1 +// } +// prevYear = year +// return prev +// }, {}) +// const run2 = Object.keys(run1).map((year, index) => ({ year, count: run1[year]})) +// //@ts-ignore Typescript wants the second parameter (targetOrigin), but the browser will throw +// postMessage(run2) +// } -const func = `onmessage = ${aggregateWorker.toString()}` +// const func = `onmessage = ${aggregateWorker.toString()}` -export default (events, done: (response: AggregateEntry[]) => void) => { - const objectURL = URL.createObjectURL(new Blob([func])) - let worker: Worker = new Worker(objectURL) - worker.postMessage(events) - worker.onmessage = (e) => { - URL.revokeObjectURL(objectURL) - worker.terminate() - done(e.data) - } -} \ No newline at end of file +// export default (events, done: (response: AggregateEntry[]) => void) => { +// const objectURL = URL.createObjectURL(new Blob([func])) +// let worker: Worker = new Worker(objectURL) +// worker.postMessage(events) +// worker.onmessage = (e) => { +// URL.revokeObjectURL(objectURL) +// worker.terminate() +// done(e.data) +// } +// } \ No newline at end of file diff --git a/src/utils/create-element.ts b/src/utils/create-element.ts index 1dcb8a7..6a56d51 100644 --- a/src/utils/create-element.ts +++ b/src/utils/create-element.ts @@ -16,6 +16,7 @@ if (typeof window !== 'undefined') { } const rules = {} +// TODO add return type export default (name: string, className?: string, style?: string[], dynamicStyle?: string[]) => { if (!className) return document.createElement(name) diff --git a/src/utils/events.worker.ts b/src/utils/events.worker.ts index 75f6888..8b06179 100644 --- a/src/utils/events.worker.ts +++ b/src/utils/events.worker.ts @@ -1,9 +1,16 @@ import { Milliseconds, Grid, Pixels, Ratio } from "../constants" import { RawEv3nt } from "../models/event"; -export type OrderedEvents = [RawEv3nt[], Milliseconds, Milliseconds, Grid, number] +export class OrderedEvents { + events: RawEv3nt[] = [] + from: Milliseconds = null + to: Milliseconds = null + grid: Grid = [] + rowCount: number = 0 +} + export function orderEvents(events: RawEv3nt[], viewportWidth: Pixels, visibleRatio: Ratio): OrderedEvents { - if (!events.length) return [[], null, null, [], null] + if (!events.length) return new OrderedEvents() /** Keep a count the number of rows. It's returned to the main thread to construct the events bar and indicators */ let rowCount: number = 0 /** @@ -65,7 +72,13 @@ export function orderEvents(events: RawEv3nt[], viewportWidth: Pixels, visibleRa return event } - return [events.map(addRow), from, to, grid, rowCount] + return { + events: events.map(addRow), + from, + to, + grid, + rowCount + } } export function eventsWorker(e: { data: { events: RawEv3nt[], orderEventsURL: string } }) { diff --git a/src/views/band/events/event-segment.ts b/src/views/band/events/event-segment.ts index cdde2d4..782000a 100644 --- a/src/views/band/events/event-segment.ts +++ b/src/views/band/events/event-segment.ts @@ -20,7 +20,7 @@ export default class Segment { ) { this.rawEvents = segmentData.events this.from = segmentData.from - this.left = ((props.config.from - this.from) / props.time) * this.domain.width + this.left = ((props.from - this.from) / props.time) * this.domain.width } render() { @@ -57,7 +57,7 @@ export default class Segment { for (let i = 0; i < this.rawEvents.length; i++) { const event = new DomainEvent(this.rawEvents[i], this.domain) const EventClass = event.isInterval() ? Interval : PointInTime - const view = new EventClass(event, this.left) + const view = new EventClass(this.domain, event, this.left) ul.appendChild(view.render()) } diff --git a/src/views/band/events/event/interval/index.ts b/src/views/band/events/event/interval/index.ts index 01ed6b3..cbf269b 100644 --- a/src/views/band/events/event/interval/index.ts +++ b/src/views/band/events/event/interval/index.ts @@ -1,13 +1,14 @@ import DomainEvent from "../../../../../models/event" import createElement from '../../../../../utils/create-element' import { EVENT_ROW_HEIGHT } from "../../../../../constants" -import props from "../../../../../models/props"; +import props from "../../../../../models/props" +import Domain from "../../../../../models/domain"; -export default class PointInTime { - constructor(private event: DomainEvent, private segmentOffset: number) {} +export default class Interval { + constructor(private domain: Domain, private event: DomainEvent, private segmentOffset: number) {} public render() { - const backgroundColor = this.event.row % 2 === 0 ? 'rgb(235, 235, 255)' : 'rgb(215, 215, 255)' + // const backgroundColor = this.event.row % 2 === 0 ? 'rgb(235, 235, 255)' : 'rgb(215, 215, 255)' const li = createElement( 'li', @@ -18,9 +19,10 @@ export default class PointInTime { `height: ${EVENT_ROW_HEIGHT - 6}px`, 'position: absolute', 'white-space: nowrap', + 'z-index: 1', ], [ - `background-color: ${backgroundColor}`, + `background-color: ${this.domain.color(.25)}`, `left: ${this.event.left - this.segmentOffset}px`, `bottom: ${(this.event.row) * EVENT_ROW_HEIGHT}px`, `width: ${this.event.width}px`, diff --git a/src/views/band/events/event/point-in-time/index.ts b/src/views/band/events/event/point-in-time/index.ts index 84357a2..12dc9ad 100644 --- a/src/views/band/events/event/point-in-time/index.ts +++ b/src/views/band/events/event/point-in-time/index.ts @@ -2,11 +2,14 @@ import DomainEvent from "../../../../../models/event" import { EVENT_MIN_SPACE, EVENT_HEIGHT, EVENT_ROW_HEIGHT } from "../../../../../constants" import createElement from '../../../../../utils/create-element' import props from "../../../../../models/props"; +import Domain from "../../../../../models/domain"; export default class PointInTime { - constructor(private event: DomainEvent, private segmentOffset: number) {} + constructor(private domain: Domain, private event: DomainEvent, private segmentOffset: number) {} public render() { + // TODO add _ before unused parameters in tsconfig + this.domain const li = createElement( 'li', 'pit-wrap', diff --git a/src/views/band/events/index.ts b/src/views/band/events/index.ts index 0f93268..be49cdf 100644 --- a/src/views/band/events/index.ts +++ b/src/views/band/events/index.ts @@ -40,10 +40,10 @@ export default class Events { segmentsWorker( { - events: props.config.events, + events: this.domain.config.orderedEvents.events, center: props.center, visibleRatio: this.domain.config.visibleRatio, - from: new Date(props.config.from).getTime(), + from: new Date(props.from).getTime(), time: props.time }, (segments) => { diff --git a/src/views/band/events/ruler-segment.ts b/src/views/band/events/ruler-segment.ts index d1c2a57..2ba5ab5 100644 --- a/src/views/band/events/ruler-segment.ts +++ b/src/views/band/events/ruler-segment.ts @@ -19,7 +19,7 @@ export default class Segment { ) { this.from = segmentData.from this.to = segmentData.to - this.left = ((props.config.from - this.from) / props.time) * this.domain.width + this.left = ((props.from - this.from) / props.time) * this.domain.width } render() { diff --git a/src/views/band/index.ts b/src/views/band/index.ts index 431505f..da33460 100644 --- a/src/views/band/index.ts +++ b/src/views/band/index.ts @@ -2,11 +2,10 @@ import Domain from '../../models/domain' import props from '../../models/props' import createElement from '../../utils/create-element' import { CENTER_CHANGE } from '../../constants' -import Sparkline from './sparkline' -import Rulers from './rulers' import MiniMap from './minimap' import EventsBand from './events' import eventBus from '../../event-bus'; +import Rulers from './rulers'; export default class Band { private dragStart: number @@ -24,10 +23,10 @@ export default class Band { 'band-wrap', [ 'background-color: white', - 'box-shadow: inset 0 6px 20px #eee', 'position: absolute', ], [ + `box-shadow: inset 0 6px 20px ${this.domain.color != null ? this.domain.color(.1) : '#eee'}`, `height: ${this.domain.config.heightRatio * 100}%`, `top: ${this.domain.config.topOffsetRatio * 100}%`, `transform: translate3d(${this.domain.left}px, 0, 0)`, @@ -35,21 +34,16 @@ export default class Band { ] ) - if (this.domain.config.components.has('SPARKLINE')) { - const sparkline = new Sparkline(this.domain, props.config.aggregate) - this.rootElement.appendChild(sparkline.render()) - } - - if (this.domain.config.components.has('RULERS') && !this.domain.config.components.has('EVENTS')) { - this.rootElement.appendChild(new Rulers(this.domain).render()) - } + if (this.domain.config.type === 'minimap') { + if (this.domain.config.rulers) { + this.rootElement.appendChild(new Rulers(this.domain).render()) + } - if (this.domain.config.components.has('MINIMAP')) { const minimap = new MiniMap(this.domain) this.rootElement.appendChild(minimap.render()) } - if (this.domain.config.components.has('EVENTS')) { + if (this.domain.config.type === 'events') { this.eventsBand = new EventsBand(this.domain) this.rootElement.appendChild(this.eventsBand.render()) } diff --git a/src/views/band/minimap/index.ts b/src/views/band/minimap/index.ts index d160e2b..101164f 100644 --- a/src/views/band/minimap/index.ts +++ b/src/views/band/minimap/index.ts @@ -25,11 +25,13 @@ export default class MiniMap { constructor(private domain: Domain) { this.maxHeight = this.domain.height - DATE_BAR_HEIGHT - this.eventHeight = this.maxHeight / props.config.rowCount + const rowCounts = this.domain.config.targets.map(index => props.domains[index].config.orderedEvents.rowCount) + this.eventHeight = this.maxHeight / Math.max(...rowCounts) if (this.eventHeight < 1) this.eventHeight = 1 if (this.domain.config.visibleRatio < 1) { eventBus.register(CENTER_CHANGE_DONE, this.drawEvents) } + } render() { @@ -40,7 +42,6 @@ export default class MiniMap { this.canvas.width = props.viewportWidth this.canvas.height = this.domain.height this.context = this.canvas.getContext('2d') - this.context.fillStyle = 'rgba(180, 180, 255, 1)' this.drawEvents() @@ -50,17 +51,23 @@ export default class MiniMap { private drawEvents = () => { this.context.clearRect(0, 0, this.canvas.width, this.canvas.height) - const left = this.domain.positionAtDate(this.domain.fromTo[0]) + const [from, to] = this.domain.fromTo + const left = this.domain.positionAtDate(from) this.canvas.style.left = `${left}px` - const [from, to] = this.domain.fromTo - const visibleEvents = props.config.events.filter(onVisible(from, to)) - for (let i = 0; i < visibleEvents.length; i++) { - const event = new DomainEvent(visibleEvents[i], this.domain) - const y = this.maxHeight - ((event.row + 1) * this.eventHeight) - const width = event.width < 1 ? 1 : event.width - this.context.fillRect(event.left - left, y, width, this.eventHeight) - } + this.domain.config.targets.forEach(targetIndex => { + const domain = props.domains[targetIndex] + const { events } = domain.config.orderedEvents + this.context.fillStyle = domain.color(.5) + + const visibleEvents = events.filter(onVisible(from, to)) + for (let i = 0; i < visibleEvents.length; i++) { + const event = new DomainEvent(visibleEvents[i], this.domain) + const y = this.maxHeight - ((event.row + 1) * this.eventHeight) + const width = event.width < 1 ? 1 : event.width + this.context.fillRect(event.left - left, y, width, this.eventHeight) + } + }) } -} \ No newline at end of file +} diff --git a/src/views/band/rulers/index.ts b/src/views/band/rulers/index.ts index 2744b50..5c24b5a 100644 --- a/src/views/band/rulers/index.ts +++ b/src/views/band/rulers/index.ts @@ -6,8 +6,13 @@ import { Granularity } from '../../../utils/dates' import props from '../../../models/props' import { Milliseconds } from '../../../constants'; -export function findClosestRulerDate(d: Milliseconds, granularity: Granularity): Milliseconds { - const date = new Date(d) +export function findClosestRulerDate(timestamp: Milliseconds, granularity: Granularity): Milliseconds { + if (timestamp == null || isNaN(timestamp)) { + console.error('[findClosestRulerDate] start timestamp is not defined') + return + } + + const date = new Date(timestamp) let year = date.getFullYear() if (granularity >= Granularity.YEAR) { @@ -21,7 +26,7 @@ export function findClosestRulerDate(d: Milliseconds, granularity: Granularity): return Date.UTC(year, date.getMonth(), date.getDate() + 1) } - return d + return timestamp } export default class Rulers { @@ -46,8 +51,8 @@ export default class Rulers { ] ) - let date = findClosestRulerDate(props.config.from, this.domain.granularity) - while(date < props.config.to) { + let date = findClosestRulerDate(props.from, this.domain.granularity) + while(date < props.to) { this.ul.appendChild(new Ruler(date, this.domain).render()) date = this.domain.nextDate(date) } diff --git a/src/views/band/sparkline/index.ts b/src/views/band/sparkline/index.ts deleted file mode 100644 index a52b27a..0000000 --- a/src/views/band/sparkline/index.ts +++ /dev/null @@ -1,68 +0,0 @@ -import Domain from '../../../models/domain' -import { createSvg } from '../../../utils/create-element' -import aggregateWorker from '../../../utils/aggregate.worker' -import { AggregateEntry } from '../../../models/config' -import props from '../../../models/props'; - -export default class Sparkline { - private svg: SVGElement - - constructor(private domain: Domain, private aggregate: AggregateEntry[]) {} - - render() { - this.svg = createSvg('svg', null, { - height: `${this.domain.height}px`, - preserveAspectRatio: "none", - viewBox: `0 0 ${this.domain.width} ${this.domain.height}`, - width: `${this.domain.width}px`, - }) - - if (this.aggregate.length) { - this.renderPath() - } - else if (props.config.events.length) { - aggregateWorker(props.config.events, (aggregate) => { - this.aggregate = aggregate - this.renderPath() - }) - } - - return this.svg - } - - protected renderChildren() {} - - private createPath(): string { - // Find the highest count (in math: the range), other counts will - // be relative to the highest count. - const countMax = this.aggregate.reduce((prev, curr) => { return Math.max(prev, curr.count) }, 0) - - // Generate a path from the aggregation points - const path = this.aggregate.reduce((prev, curr, index) => { - const curveType = index === 0 ? 'M' : 'L' - const x = (this.domain.width / (this.aggregate.length - 1)) * index - const y = this.domain.height - ((curr.count / countMax) * this.domain.height) - return `${prev} ${curveType} ${x} ${y}` - }, '') - - // The (auto)fill of the path goes straight from the last position to the first - // position, but it should go to the lower right corner and then to the lower - // left corner, just (1px) out of the viewport. So a two lines are added on the - // right and on the bottom to close the path manually. - const pathCloser = ` L ${this.domain.width + 1} ${this.domain.height + 1} L -1 ${this.domain.height + 1}` - - return path + pathCloser - } - - private renderPath() { - const pathElement = createSvg( - 'path', - [ - 'fill: rgba(245, 245, 255, .7)', - 'stroke: rgb(180, 180, 255)', - ], - { d: this.createPath() } - ) - this.svg.appendChild(pathElement) - } -} \ No newline at end of file diff --git a/src/views/band/sparklineOLD/index.ts b/src/views/band/sparklineOLD/index.ts new file mode 100644 index 0000000..b00b884 --- /dev/null +++ b/src/views/band/sparklineOLD/index.ts @@ -0,0 +1,68 @@ +// import Domain from '../../../models/domain' +// import { createSvg } from '../../../utils/create-element' +// import aggregateWorker from '../../../utils/aggregate.worker' +// import { AggregateEntry } from '../../../models/config' +// import props from '../../../models/props'; + +// export default class Sparkline { +// private svg: SVGElement + +// constructor(private domain: Domain, private aggregate: AggregateEntry[]) {} + +// render() { +// this.svg = createSvg('svg', null, { +// height: `${this.domain.height}px`, +// preserveAspectRatio: "none", +// viewBox: `0 0 ${this.domain.width} ${this.domain.height}`, +// width: `${this.domain.width}px`, +// }) + +// if (this.aggregate.length) { +// this.renderPath() +// } +// else if (props.config.events.length) { +// aggregateWorker(props.config.events, (aggregate) => { +// this.aggregate = aggregate +// this.renderPath() +// }) +// } + +// return this.svg +// } + +// protected renderChildren() {} + +// private createPath(): string { +// // Find the highest count (in math: the range), other counts will +// // be relative to the highest count. +// const countMax = this.aggregate.reduce((prev, curr) => { return Math.max(prev, curr.count) }, 0) + +// // Generate a path from the aggregation points +// const path = this.aggregate.reduce((prev, curr, index) => { +// const curveType = index === 0 ? 'M' : 'L' +// const x = (this.domain.width / (this.aggregate.length - 1)) * index +// const y = this.domain.height - ((curr.count / countMax) * this.domain.height) +// return `${prev} ${curveType} ${x} ${y}` +// }, '') + +// // The (auto)fill of the path goes straight from the last position to the first +// // position, but it should go to the lower right corner and then to the lower +// // left corner, just (1px) out of the viewport. So a two lines are added on the +// // right and on the bottom to close the path manually. +// const pathCloser = ` L ${this.domain.width + 1} ${this.domain.height + 1} L -1 ${this.domain.height + 1}` + +// return path + pathCloser +// } + +// private renderPath() { +// const pathElement = createSvg( +// 'path', +// [ +// 'fill: rgba(245, 245, 255, .7)', +// 'stroke: rgb(180, 180, 255)', +// ], +// { d: this.createPath() } +// ) +// this.svg.appendChild(pathElement) +// } +// } \ No newline at end of file diff --git a/src/views/indicator/index.ts b/src/views/indicator/index.ts index 29627d0..913d7ba 100644 --- a/src/views/indicator/index.ts +++ b/src/views/indicator/index.ts @@ -1,6 +1,6 @@ import createElement from '../../utils/create-element' import Domain from '../../models/domain' -import { CENTER_CHANGE, DATE_BAR_HEIGHT, EVENT_ROW_HEIGHT, Pixels } from '../../constants' +import { CENTER_CHANGE, Pixels } from '../../constants' import props from '../../models/props' import eventBus from '../../event-bus'; @@ -12,14 +12,10 @@ export default class Indicator { private rightWidth: Pixels private offset: Pixels - constructor(private hostDomain: Domain, private targetDomain: Domain) { - this.width = this.hostDomain.width / this.targetDomain.width * props.viewportWidth + constructor(private hostDomain: Domain) { + this.width = this.hostDomain.width / props.domains[this.hostDomain.config.targets[0]].width * props.viewportWidth if (this.width < 2) this.width = 2 - let heightRatio = (this.targetDomain.height - DATE_BAR_HEIGHT) / (props.config.rowCount * EVENT_ROW_HEIGHT) - if (heightRatio > 1) heightRatio = 1 - // this.height = (this.hostDomain.height) * heightRatio - this.offset = props.viewportWidth - this.width this.leftWidth = this.nextLeftWidth()