diff --git a/CHANGELOG.md b/CHANGELOG.md index f907cd43ee38310aa52751c20750ccd298f61f80..566b5e91ecaf627c80f2c94599498302fed5b5d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] ### Changed - Cursor location / tooltip defaults to last point in the time series. +- Date labels moved to and centered in areas between midnight tick marks ## [0.7.0] - 2018-04-23 diff --git a/assets/src/scripts/components/hydrograph/axes.js b/assets/src/scripts/components/hydrograph/axes.js index e6e7d9c096e44b7676866a071fef79aea3a7faab..93a61c27798053f31d4c724dbc736b98e1d9685d 100644 --- a/assets/src/scripts/components/hydrograph/axes.js +++ b/assets/src/scripts/components/hydrograph/axes.js @@ -10,6 +10,7 @@ const { layoutSelector } = require('./layout'); const { xScaleSelector, yScaleSelector } = require('./scales'); const { currentVariableSelector, yLabelSelector } = require('./timeseries'); +const dateFormatter = timeFormat('%b %d'); /** * Create an x and y axis for hydrograph @@ -20,13 +21,28 @@ const { currentVariableSelector, yLabelSelector } = require('./timeseries'); * @return {Object} {xAxis, yAxis} - D3 Axis */ export const createAxes = function({xScale, yScale}, yTickSize, parmCd) { - // Create x-axis + const formatter = function(d) { + if(d.getHours() === 12) { + return dateFormatter(d); + } else { + return null; + } + }; + + // Create x-axis with ticks at midnight but no visible date/time labels const xAxis = axisBottom() .scale(xScale) .ticks(timeDay) - .tickFormat(timeFormat('%b %d')) + .tickFormat('') .tickSizeOuter(0); - + // Create a second x-axis. This x-axis will overlay the first x-axis and have labels every 12 hours but no ticks. + // Labels not on the 12 hour points are removed with formatting. + const xAxisWithDateTimeLabels = axisBottom() + .scale(xScale) + .ticks(timeDay.hour) + .tickPadding(5) + .tickSize(0) + .tickFormat(formatter); // Create y-axis const tickDetails = getYTickDetails(yScale.domain(), parmCd); const yAxis = axisLeft() @@ -37,7 +53,7 @@ export const createAxes = function({xScale, yScale}, yTickSize, parmCd) { .tickPadding(3) .tickSizeOuter(0); - return {xAxis, yAxis}; + return {xAxis, xAxisWithDateTimeLabels, yAxis}; }; @@ -65,7 +81,7 @@ export const axesSelector = createSelector( /** * Add x and y axes to the given svg node. */ -export const appendAxes = function(elem, {xAxis, yAxis, layout, yTitle}) { +export const appendAxes = function(elem, {xAxis, xAxisWithDateTimeLabels, yAxis, layout, yTitle}) { const xLoc = { x: 0, y: layout.height - (layout.margin.top + layout.margin.bottom) @@ -77,7 +93,7 @@ export const appendAxes = function(elem, {xAxis, yAxis, layout, yTitle}) { }; // Remove existing axes before adding the new ones. - elem.selectAll('.x-axis, .y-axis').remove(); + elem.selectAll('.x-axis, .x-axis-date-time-label, .y-axis').remove(); // Add x-axis elem.append('g') @@ -85,6 +101,12 @@ export const appendAxes = function(elem, {xAxis, yAxis, layout, yTitle}) { .attr('transform', `translate(${xLoc.x}, ${xLoc.y})`) .call(xAxis); + // Add the second x-axis, the one with the centered date/time labels, on top of the first x-axis + elem.append('g') + .attr('class', 'x-axis-date-time-label') + .attr('transform', `translate(${xLoc.x}, ${xLoc.y})`) + .call(xAxisWithDateTimeLabels); + // Add y-axis and a text label elem.append('g') .attr('class', 'y-axis') diff --git a/assets/src/scripts/components/hydrograph/axes.spec.js b/assets/src/scripts/components/hydrograph/axes.spec.js index 072a1d0aabc87f1ba75d05fa35a2192de48611a6..29f9a980d85cc9fb5bd728ecefe7f35f07eaa3c0 100644 --- a/assets/src/scripts/components/hydrograph/axes.spec.js +++ b/assets/src/scripts/components/hydrograph/axes.spec.js @@ -1,4 +1,4 @@ -const { scaleLinear } = require('d3-scale'); +const { scaleLinear, scaleTime } = require('d3-scale'); const { select } = require('d3-selection'); const { createAxes, appendAxes } = require('./axes'); @@ -6,7 +6,7 @@ const { createAxes, appendAxes } = require('./axes'); describe('Chart axes', () => { // xScale is oriented on the left - const xScale = scaleLinear().range([0, 10]).domain([0, 10]); + const xScale = scaleTime().range([0, 10]).domain([new Date('2011-10-10'), new Date('2012-10-10')]); const yScale = scaleLinear().range([0, 10]).domain([0, 10]); const layout = { width: 400, @@ -18,13 +18,14 @@ describe('Chart axes', () => { left: 65 } }; - const {xAxis, yAxis} = createAxes({xScale, yScale}, 100); + const {xAxis, xAxisWithDateTimeLabels, yAxis} = createAxes({xScale, yScale}, 100); let svg; beforeEach(() => { svg = select(document.body).append('svg'); appendAxes(svg, { xAxis, + xAxisWithDateTimeLabels, yAxis, layout, yTitle: 'Label title' @@ -37,6 +38,7 @@ describe('Chart axes', () => { it('axes created', () => { expect(xAxis).toEqual(jasmine.any(Function)); + expect(xAxisWithDateTimeLabels).toEqual(jasmine.any(Function)); expect(yAxis).toEqual(jasmine.any(Function)); expect(yAxis.tickSizeInner()).toBe(100); expect(xAxis.scale()).toBe(xScale); diff --git a/assets/src/styles/_common.scss b/assets/src/styles/_common.scss new file mode 100644 index 0000000000000000000000000000000000000000..4b8b8fd0b745fb7618cfa0722b230e879781f7d3 --- /dev/null +++ b/assets/src/styles/_common.scss @@ -0,0 +1,13 @@ +$font-path: './fonts'; +$image-path: './img'; + +// Layout +// NOTE: If you change this, also change DESKTOP_BREAKPOINT_PX in layout.js! +$desktop-screen: 800px !default; + +// Override default of 4rem +$h1-font-size: 3.25rem !default; + +@import 'uswds'; + +$usgs-blue: #00264c; diff --git a/assets/src/styles/components/_hydrograph.scss b/assets/src/styles/components/hydrograph/_app.scss similarity index 98% rename from assets/src/styles/components/_hydrograph.scss rename to assets/src/styles/components/hydrograph/_app.scss index 4e7a2571e14183bcf700919c81deb02516c76c51..6cb9d1e3f16992ca0f3a927c669bfe86ab13e70f 100644 --- a/assets/src/styles/components/_hydrograph.scss +++ b/assets/src/styles/components/hydrograph/_app.scss @@ -1,8 +1,8 @@ -$approved-timeseries: #2db92d; -$estimated-timeseries: black; -$default-timeseries: blue; -$selected: $color-aqua-lightest; -$highlight: $color-gray-lightest; +/** + * Hydrograph component SCSS to be used in front-end application. + */ + +@import './graph'; #select-timeseries { label { diff --git a/assets/src/styles/components/hydrograph/_graph.scss b/assets/src/styles/components/hydrograph/_graph.scss new file mode 100644 index 0000000000000000000000000000000000000000..22b34ee3739c800ba10a1ba87fd5f4f5afca0a51 --- /dev/null +++ b/assets/src/styles/components/hydrograph/_graph.scss @@ -0,0 +1,154 @@ +/** + * Hydrograph component SCSS to be used directly by graph-server, and imported + * by the client-side app. + */ + +$approved-timeseries: #2db92d; +$estimated-timeseries: black; +$default-timeseries: blue; +$selected: $color-aqua-lightest; +$highlight: $color-gray-lightest; + +svg.hydrograph-svg { + .overlay { + fill: none; + pointer-events: all; + } + circle.focus { + fill: #436BAF; + opacity: .6; + } + .focus { + line { + opacity: .5; + stroke: #436BAF; + stroke-width: 1px; + stroke-dasharray: 5, 5 + } + } + .line-segment { + fill: none; + stroke-width: 3px; + stroke: $default-timeseries; + &.approved { + stroke: $approved-timeseries; + } + &.estimated { + stroke: $estimated-timeseries; + stroke-dasharray: 1, 3; + } + } + .ts-compare { + stroke-width: 1px; + } + .axis { + path { + fill: none; + } + } + .tick { + text { + font-size: 1.05em; + @include media($small-screen) { + font-size: 1.2em; + } + @include media($medium-screen) { + font-size: 1.4em; + } + } + } + .y-axis { + text { + fill: black; + &.y-axis-label { + text-anchor: middle; + display: none; + font-size: 1.5em; + font-style: italic; + @include media($site-max-width) { + display: block; + } + } + } + .tick { + line { + fill: none; + stroke: lightgrey; + stroke-opacity: 0.7; + } + } + } + .x-axis { + .tick { + line { + fill: none; + stroke: black; + stroke-opacity: 0.7; + } + } + } + #median-points { + .median-data-series { + cursor: pointer; + } + } + .median-data-series { + &.median-modulo-0 { + fill: #f96713; + } + &.median-modulo-1 { + fill: #0c7d40; + } + &.median-modulo-2 { + fill: #0557fc; + } + &.median-modulo-3 { + fill: #f4f727; + } + &.median-modulo-4 { + fill: #01fab6; + } + &.median-modulo-5 { + fill: #9a9b77; + } + } + .mask { + opacity: 0.2; + } + .ice-affected-mask { + fill: #33daff; + } + .flood-mask { + fill: #0c7d40; + } + .zeroflow-mask { + fill: #f4f727; + } + .dry-mask { + fill: #9a9b77; + } + .seasonal-mask { + fill: #17fc04; + } + .partial-record-mask { + fill: #ec14fe; + } + .rating-development-mask { + fill: #fe141b; + } + .equipment-malfunction-mask { + fill: #0557fc; + } + .maintenance-mask { + fill: #01fab6; + } + .unavailable-mask { + fill: #abb2b9; + } + .test-mask { + fill: #4729a5; + } + .pump-mask { + fill: #3498db; + } +} diff --git a/assets/src/styles/graph.scss b/assets/src/styles/graph.scss new file mode 100644 index 0000000000000000000000000000000000000000..49d9c463c19908c30bee4c24d380a32c3e9ed46f --- /dev/null +++ b/assets/src/styles/graph.scss @@ -0,0 +1,2 @@ +@import './common'; +@import './components/hydrograph/graph'; diff --git a/assets/src/styles/main.scss b/assets/src/styles/main.scss index f078ea28858d13e20e3d47522e38d506017b22a8..7c837d81ffe271267b840a2d080ad7891565a225 100644 --- a/assets/src/styles/main.scss +++ b/assets/src/styles/main.scss @@ -1,20 +1,9 @@ @import 'leaflet'; -$font-path: './fonts'; -$image-path: './img'; -$fa-font-path: './fonts' !default; - -// Layout -// NOTE: If you change this, also change DESKTOP_BREAKPOINT_PX in layout.js! -$desktop-screen: 800px !default; - -// Override default of 4rem -$h1-font-size: 3.25rem !default; +@import './common'; +$fa-font-path: './fonts' !default; @import '../../../node_modules/font-awesome/scss/font-awesome'; -@import 'uswds'; - -$usgs-blue: #00264c; @import './partials/footer'; @import './partials/header'; @@ -25,7 +14,7 @@ $usgs-blue: #00264c; .wdfn-component { &[data-component='hydrograph'] { - @import './components/hydrograph'; + @import './components/hydrograph/app'; } &[data-component='map'] { @import './components/map'; diff --git a/package-lock.json b/package-lock.json index cf76317b322096a09d9094a0b82be4a1e3ae937c..6c27b7c8fe3cf4c868b2d39b6395d09d3b0694a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "waterdataui-assets", - "version": "0.7.0dev", + "version": "0.8.0dev", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -451,8 +451,7 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, "asynckit": { "version": "0.4.0", @@ -2258,6 +2257,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.2.2", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -3146,7 +3146,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -3706,6 +3705,19 @@ "event-emitter": "0.3.5" } }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "4.2.4" + } + }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -4270,6 +4282,42 @@ "is-extglob": "1.0.0" } }, + "extract-zip": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "requires": { + "concat-stream": "1.6.0", + "debug": "2.6.9", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "requires": { + "minimist": "0.0.8" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -4345,6 +4393,14 @@ "websocket-driver": "0.7.0" } }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "1.2.0" + } + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -4910,6 +4966,535 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.2.tgz", + "integrity": "sha512-iownA+hC4uHFp+7gwP/y5SzaiUo7m2vpa0dhpzw8YuKtiZsz7cIXsFbXpLEeBM6WuCQyw1MH4RRe6XI8GFUctQ==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.9.2", + "node-pre-gyp": "0.9.1" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "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" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.9.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.6", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "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": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "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" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "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.2" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, "fstream": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", @@ -8441,8 +9026,7 @@ "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.33.0", @@ -8624,8 +9208,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multi-stage-sourcemap": { "version": "0.2.1", @@ -9172,6 +9755,7 @@ "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.1", + "fsevents": "1.2.2", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -10293,6 +10877,11 @@ "sha.js": "2.4.10" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -10502,6 +11091,7 @@ "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.1", + "fsevents": "1.2.2", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -10982,8 +11572,7 @@ "progress": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" }, "proxy-agent": { "version": "2.0.0", @@ -11011,6 +11600,11 @@ } } }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, "proxy-middleware": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", @@ -11104,6 +11698,50 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, + "puppeteer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.3.0.tgz", + "integrity": "sha512-wx10aPQPpGJVxdB6yoDSLm9p4rCwARUSLMVV0bx++owuqkvviXKyiFM3EWsywaFmjOKNPXacIjplF7xhHiFP3w==", + "requires": { + "debug": "2.6.9", + "extract-zip": "1.6.6", + "https-proxy-agent": "2.2.1", + "mime": "1.6.0", + "progress": "2.0.0", + "proxy-from-env": "1.0.0", + "rimraf": "2.6.2", + "ws": "3.3.3" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "requires": { + "es6-promisify": "5.0.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "requires": { + "agent-base": "4.2.0", + "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==", + "requires": { + "ms": "2.0.0" + } + } + } + } + } + }, "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", @@ -11635,7 +12273,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, "requires": { "glob": "7.1.2" } @@ -13197,8 +13834,7 @@ "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 + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "umd": { "version": "3.0.2", @@ -13959,7 +14595,6 @@ "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.1", @@ -14033,6 +14668,14 @@ "camelcase": "4.1.0" } }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "1.0.1" + } + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json index 864121c3e8394f419c660cb827e7e4de2d8b750e..ee7eb426d711fc7769d8abb4181d99db775a8d79 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "test:watch": "karma start --debug --no-single-run --auto-watch --browsers Chrome", "clean": "rm -rf assets/dist && mkdir assets/dist", "build": "npm run clean && run-p build:* && npm run hash-assets", - "build:css": "node-sass --include-path node_modules/leaflet/dist --include-path node_modules/uswds/src/stylesheets assets/src/styles/main.scss assets/dist/main.css && uglifycss --output assets/dist/main.css assets/dist/main.css && postcss assets/dist/main.css --no-map --use autoprefixer -o assets/dist/main.css", + "build:css": "run-p build:css:*", + "build:css:main": "node-sass --include-path node_modules/leaflet/dist --include-path node_modules/uswds/src/stylesheets assets/src/styles/main.scss assets/dist/main.css && uglifycss --output assets/dist/main.css assets/dist/main.css && postcss assets/dist/main.css --no-map --use autoprefixer -o assets/dist/main.css", + "build:css:graph": "node-sass --include-path node_modules/uswds/src/stylesheets assets/src/styles/graph.scss assets/dist/graph.css && uglifycss --output assets/dist/graph.css assets/dist/graph.css && postcss assets/dist/graph.css --no-map --use autoprefixer -o assets/dist/graph.css", "build:fonts": "mkdir -p assets/dist/fonts && cp node_modules/uswds/src/fonts/* assets/dist/fonts && cp node_modules/font-awesome/fonts/* assets/dist/fonts", "build:images": "mkdir -p assets/dist/img && mkdir -p assets/dist/images && cp -r node_modules/uswds/src/img/* assets/dist/img && cp -r node_modules/leaflet/dist/images/* assets/dist/images && cp -r assets/src/img/* assets/dist/img", "build:js": "browserify -p tinyify assets/src/scripts/index.js > assets/dist/bundle.js && uglifyjs -c drop_console=true --output assets/dist/bundle.js assets/dist/bundle.js",