From 509ff83a7d9393a4f314667631991d8e2cdadd51 Mon Sep 17 00:00:00 2001 From: Matthew Traynham Date: Thu, 6 Aug 2015 23:13:39 -0400 Subject: [PATCH 1/4] Update dependencies to latest. Added all jshint options, updated jscs options. --- .jscsrc | 100 ++++++++--------------------------- .jshintrc | 64 +++++++++++++++++----- Gruntfile.js | 12 ++--- package.json | 22 ++++---- src/bar-chart.js | 8 +-- src/base-mixin.js | 12 ++--- src/box-plot.js | 6 +-- src/bubble-chart.js | 10 ++-- src/bubble-overlay.js | 10 ++-- src/composite-chart.js | 32 ++++++----- src/coordinate-grid-mixin.js | 39 ++++++-------- src/core.js | 5 +- src/d3.box.js | 6 +-- src/data-count.js | 2 +- src/data-grid.js | 6 +-- src/data-table.js | 18 +++---- src/geo-choropleth-chart.js | 22 ++++---- src/heatmap.js | 8 +-- src/legend.js | 5 +- src/line-chart.js | 24 ++++----- src/logger.js | 2 +- src/number-display.js | 2 +- src/pie-chart.js | 54 +++++++++---------- src/row-chart.js | 26 ++++----- src/scatter-plot.js | 4 +- src/series-chart.js | 8 +-- src/stack-mixin.js | 16 +++--- web/stock.js | 8 +-- 28 files changed, 252 insertions(+), 279 deletions(-) diff --git a/.jscsrc b/.jscsrc index 30ab6b917..001efbdbf 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,87 +1,31 @@ { - "requireCurlyBraces": [ - "if", - "else", - "for", - "while", - "do", - "try", - "catch" - ], - "requireOperatorBeforeLineBreak": true, + "preset": "google", "maximumLineLength": { - "value": 120, - "allowComments": true, - "allowRegex": true + "value": 140 }, "validateIndentation": 4, - "validateQuoteMarks": "'", - "disallowMultipleLineStrings": true, - "disallowMixedSpacesAndTabs": true, - "disallowTrailingWhitespace": true, - "disallowSpaceAfterPrefixUnaryOperators": true, - "requireSpaceAfterKeywords": [ - "if", - "else", - "for", - "while", - "do", - "switch", - "return", - "try", - "catch" - ], - "requireSpaceBeforeBinaryOperators": [ - "=", - "+=", - "-=", - "*=", - "/=", - "%=", - "<<=", - ">>=", - ">>>=", - "&=", - "|=", - "^=", - "+=", - "+", - "-", - "*", - "/", - "%", - "<<", - ">>", - ">>>", - "&", - "|", - "^", - "&&", - "||", - "===", - "==", - ">=", - "<=", - "<", - ">", - "!=", - "!==" - ], - "requireSpaceAfterBinaryOperators": true, - "requireSpacesInConditionalExpression": true, - "requireSpaceBeforeBlockStatements": true, - "requireSpacesInForStatement": true, - "requireLineFeedAtFileEnd": true, + "disallowMultipleVarDecl": null, "requireSpacesInFunctionExpression": { - "beforeOpeningRoundBrace": true, - "beforeOpeningCurlyBrace": true + "beforeOpeningRoundBrace": true, + "beforeOpeningCurlyBrace": true }, - "disallowSpacesInsideObjectBrackets": "all", - "disallowSpacesInsideArrayBrackets": "all", - "disallowSpacesInsideParentheses": true, - "validateJSDoc": { + "requireSpacesInFunctionDeclaration": { + "beforeOpeningRoundBrace": true, + "beforeOpeningCurlyBrace": true + }, + "disallowSpacesInFunctionExpression": null, + "disallowSpacesInAnonymousFunctionExpression": null, + "disallowSpacesInFunctionDeclaration": null, + "jsDoc": { + "checkAnnotations": "closurecompiler", "checkParamNames": true, - "requireParamTypes": true + "requireParamTypes": true, + "checkRedundantParams": true, + "checkReturnTypes": true, + "checkRedundantReturns": true, + "requireReturnTypes": true, + "checkTypes": "capitalizedNativeCase", + "checkRedundantAccess": true }, - "disallowMultipleLineBreaks": true + "esnext": true } diff --git a/.jshintrc b/.jshintrc index fce610c96..e0741a892 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,28 +1,68 @@ { - "browser": true, + "bitwise": false, "camelcase": true, "curly": true, "eqeqeq": true, - "evil": false, + "forin": false, + "freeze": true, "immed": true, + "indent": 4, "latedef": true, - "loopfunc": true, - "maxlen": 120, - "multistr": true, "newcap": true, "noarg": true, - "noempty": true, "nonbsp": true, "nonew": true, - "quotmark": "single", - "sub": true, + "noempty": true, + "plusplus": false, "undef": true, "unused": "vars", - "globals" : { + "strict": false, + "maxparams": 5, + "maxdepth": 4, + "maxstatements": false, + "maxcomplexity": 10, + "maxlen": 140, + "quotmark": "single", + "asi": false, + "boss": false, + "debug": false, + "eqnull": false, + "esnext": true, + "evil": false, + "expr": false, + "funcscope": false, + "globalstrict": false, + "iterator": false, + "lastsemic": false, + "loopfunc": false, + "maxerr": 50, + "multistr": false, + "notypeof": false, + "proto": false, + "scripturl": false, + "shadow": false, + "supernew": false, + "sub": true, + "validthis": false, + "noyield": false, + "browser": true, + "couch": false, + "devel": false, + "dojo": false, + "jquery": false, + "mootools": false, + "node": true, + "nonstandard": false, + "prototypejs": false, + "rhino": false, + "worker": false, + "wsh": false, + "yui": false, + "globals": { "console": false, - "crossfilter" : false, - "d3" : false, - "dc" : false, + "crossfilter": false, + "d3": false, + "dc": false, "global": false, "module": false, "process": false, diff --git a/Gruntfile.js b/Gruntfile.js index 36ea97942..4c80bef8e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -20,10 +20,10 @@ module.exports = function (grunt) { conf: config, concat: { - options : { + options: { process: true, sourceMap: true, - banner : '<%= conf.banner %>' + banner: '<%= conf.banner %>' }, js: { src: '<%= conf.jsFiles %>', @@ -36,7 +36,7 @@ module.exports = function (grunt) { mangle: true, compress: true, sourceMap: true, - banner : '<%= conf.banner %>' + banner: '<%= conf.banner %>' }, src: '<%= conf.pkg.name %>.js', dest: '<%= conf.pkg.name %>.min.js' @@ -116,9 +116,9 @@ module.exports = function (grunt) { '<%= conf.pkg.name %>.js' ] }, - coverage:{ + coverage: { src: '<%= jasmine.specs.src %>', - options:{ + options: { specs: '<%= jasmine.specs.options.specs %>', helpers: '<%= jasmine.specs.options.helpers %>', version: '<%= jasmine.specs.options.version %>', @@ -201,7 +201,7 @@ module.exports = function (grunt) { docco: { options: { dst: '<%= conf.web %>/docs', - basepath:'<%= conf.web %>' + basepath: '<%= conf.web %>' }, howto: { files: [ diff --git a/package.json b/package.json index 4a6f8449b..fb19d2654 100644 --- a/package.json +++ b/package.json @@ -31,31 +31,31 @@ "devDependencies": { "emu": "~0.0.2", "grunt": "~0.4.5", - "grunt-browserify": "~3.3.0", + "grunt-browserify": "~4.0.0", "grunt-changed": "~0.1.x", "grunt-cli": "~0.1.13", "grunt-contrib-concat": "~0.5.0", - "grunt-contrib-connect": "~0.9.0", - "grunt-contrib-copy": "~0.7.0", - "grunt-contrib-jasmine": "~0.8.2", + "grunt-contrib-connect": "~0.11.2", + "grunt-contrib-copy": "~0.8.0", + "grunt-contrib-jasmine": "~0.9.1", "grunt-contrib-jshint": "~0.11.0", - "grunt-contrib-uglify": "~0.8.0", + "grunt-contrib-uglify": "~0.9.1", "grunt-contrib-watch": "~0.6.1", "grunt-debug-task": "~0.1.5", "grunt-docco2": "~0.2.0", "grunt-fileindex": "^0.1.0", - "grunt-gh-pages": "~0.9.1", - "grunt-jscs": "~1.2.0", - "grunt-lib-phantomjs": "~0.6.0", + "grunt-gh-pages": "~0.10.0", + "grunt-jscs": "~2.0.0", + "grunt-lib-phantomjs": "~0.7.1", "grunt-markdown": "~0.7.0", - "grunt-saucelabs": "~8.5.0", + "grunt-saucelabs": "~8.6.1", "grunt-shell": "~1.1.1", "grunt-template-jasmine-istanbul": "~0.3.2", - "load-grunt-tasks": "~3.0.0", + "load-grunt-tasks": "~3.2.0", "jsdifflib": "~1.1.0", "marked": "~0.3.3", "uglify-js": "2.4.x", - "time-grunt": "~1.0.0" + "time-grunt": "~1.2.1" }, "scripts": { "test": "grunt test" diff --git a/src/bar-chart.js b/src/bar-chart.js index ca0226d4a..4814b2c3f 100644 --- a/src/bar-chart.js +++ b/src/bar-chart.js @@ -80,11 +80,11 @@ dc.barChart = function (parent, chartGroup) { }); }; - function barHeight(d) { + function barHeight (d) { return dc.utils.safeNumber(Math.abs(_chart.y()(d.y + d.y0) - _chart.y()(d.y0))); } - function renderBars(layer, layerIndex, d) { + function renderBars (layer, layerIndex, d) { var bars = layer.selectAll('rect.bar') .data(d.values, dc.pluck('x')); @@ -135,7 +135,7 @@ dc.barChart = function (parent, chartGroup) { .remove(); } - function calculateBarWidth() { + function calculateBarWidth () { if (_barWidth === undefined) { var numberOfBars = _chart.xUnitCount(); @@ -279,7 +279,7 @@ dc.barChart = function (parent, chartGroup) { return _chart; }; - function colorFilter(color, inv) { + function colorFilter (color, inv) { return function () { var item = d3.select(this); var match = item.attr('fill') === color; diff --git a/src/base-mixin.js b/src/base-mixin.js index ad18f42a6..bf4718406 100644 --- a/src/base-mixin.js +++ b/src/base-mixin.js @@ -369,7 +369,7 @@ dc.baseMixin = function (_chart) { return generateSvg(); }; - function sizeSvg() { + function sizeSvg () { if (_svg) { _svg .attr('width', _chart.width()) @@ -377,7 +377,7 @@ dc.baseMixin = function (_chart) { } } - function generateSvg() { + function generateSvg () { _svg = _chart.root().append('svg'); sizeSvg(); return _svg; @@ -450,7 +450,7 @@ dc.baseMixin = function (_chart) { return _chart; }; - function checkForMandatoryAttributes(a) { + function checkForMandatoryAttributes (a) { if (!_chart[a] || !_chart[a]()) { throw new dc.errors.InvalidStateException('Mandatory attribute chart.' + a + ' is missing on chart[#' + _chart.anchorName() + ']'); @@ -488,13 +488,13 @@ dc.baseMixin = function (_chart) { if (_chart.transitionDuration() > 0 && _svg) { _svg.transition().duration(_chart.transitionDuration()) .each('end', function () { - _listeners['renderlet'](_chart); + _listeners.renderlet(_chart); if (event) { _listeners[event](_chart); } }); } else { - _listeners['renderlet'](_chart); + _listeners.renderlet(_chart); if (event) { _listeners[event](_chart); } @@ -707,7 +707,7 @@ dc.baseMixin = function (_chart) { return _chart; }; - function applyFilters() { + function applyFilters () { if (_chart.dimension() && _chart.dimension().filter) { var fs = _filterHandler(_chart.dimension(), _filters); _filters = fs ? fs : _filters; diff --git a/src/box-plot.js b/src/box-plot.js index d4ef5ccea..fa78450b6 100644 --- a/src/box-plot.js +++ b/src/box-plot.js @@ -148,7 +148,7 @@ dc.boxPlot = function (parent, chartGroup) { _chart.fadeDeselectedArea(); }; - function renderBoxes(boxesG) { + function renderBoxes (boxesG) { var boxesGEnter = boxesG.enter().append('g'); boxesGEnter @@ -161,7 +161,7 @@ dc.boxPlot = function (parent, chartGroup) { }); } - function updateBoxes(boxesG) { + function updateBoxes (boxesG) { dc.transition(boxesG, _chart.transitionDuration()) .attr('transform', boxTransform) .call(_box) @@ -170,7 +170,7 @@ dc.boxPlot = function (parent, chartGroup) { }); } - function removeBoxes(boxesG) { + function removeBoxes (boxesG) { boxesG.exit().remove().call(_box); } diff --git a/src/bubble-chart.js b/src/bubble-chart.js index 1d64adf5f..f6956d8c3 100644 --- a/src/bubble-chart.js +++ b/src/bubble-chart.js @@ -78,7 +78,7 @@ dc.bubbleChart = function (parent, chartGroup) { _chart.fadeDeselectedArea(); }; - function renderNodes(bubbleG) { + function renderNodes (bubbleG) { var bubbleGEnter = bubbleG.enter().append('g'); bubbleGEnter @@ -104,7 +104,7 @@ dc.bubbleChart = function (parent, chartGroup) { _chart._doRenderTitles(bubbleGEnter); } - function updateNodes(bubbleG) { + function updateNodes (bubbleG) { dc.transition(bubbleG, _chart.transitionDuration()) .attr('transform', bubbleLocator) .selectAll('circle.' + _chart.BUBBLE_CLASS) @@ -120,11 +120,11 @@ dc.bubbleChart = function (parent, chartGroup) { _chart.doUpdateTitles(bubbleG); } - function removeNodes(bubbleG) { + function removeNodes (bubbleG) { bubbleG.exit().remove(); } - function bubbleX(d) { + function bubbleX (d) { var x = _chart.x()(_chart.keyAccessor()(d)); if (isNaN(x)) { x = 0; @@ -132,7 +132,7 @@ dc.bubbleChart = function (parent, chartGroup) { return x; } - function bubbleY(d) { + function bubbleY (d) { var y = _chart.y()(_chart.valueAccessor()(d)); if (isNaN(y)) { y = 0; diff --git a/src/bubble-overlay.js b/src/bubble-overlay.js index 3bc801775..0c7758ed2 100644 --- a/src/bubble-overlay.js +++ b/src/bubble-overlay.js @@ -80,7 +80,7 @@ dc.bubbleOverlay = function (root, chartGroup) { return _chart; }; - function initOverlayG() { + function initOverlayG () { _g = _chart.select('g.' + BUBBLE_OVERLAY_CLASS); if (_g.empty()) { _g = _chart.svg().append('g').attr('class', BUBBLE_OVERLAY_CLASS); @@ -88,7 +88,7 @@ dc.bubbleOverlay = function (root, chartGroup) { return _g; } - function initializeBubbles() { + function initializeBubbles () { var data = mapData(); _points.forEach(function (point) { @@ -115,7 +115,7 @@ dc.bubbleOverlay = function (root, chartGroup) { }); } - function mapData() { + function mapData () { var data = {}; _chart.data().forEach(function (datum) { data[_chart.keyAccessor()(datum)] = datum; @@ -123,7 +123,7 @@ dc.bubbleOverlay = function (root, chartGroup) { return data; } - function getNodeG(point, data) { + function getNodeG (point, data) { var bubbleNodeClass = BUBBLE_NODE_CLASS + ' ' + dc.utils.nameToId(point.name); var nodeG = _g.select('g.' + dc.utils.nameToId(point.name)); @@ -147,7 +147,7 @@ dc.bubbleOverlay = function (root, chartGroup) { return _chart; }; - function updateBubbles() { + function updateBubbles () { var data = mapData(); _points.forEach(function (point) { diff --git a/src/composite-chart.js b/src/composite-chart.js index 8375c347b..3019ad160 100644 --- a/src/composite-chart.js +++ b/src/composite-chart.js @@ -93,8 +93,7 @@ dc.compositeChart = function (parent, chartGroup) { if (leftYAxisChildren().length > 0 && !_rightAxisGridLines) { _chart._renderHorizontalGridLinesForAxis(_chart.g(), _chart.y(), _chart.yAxis()); - } - else if (rightYAxisChildren().length > 0) { + } else if (rightYAxisChildren().length > 0) { _chart._renderHorizontalGridLinesForAxis(_chart.g(), _rightY, _rightYAxis); } }; @@ -111,7 +110,7 @@ dc.compositeChart = function (parent, chartGroup) { } }; - function prepareRightYAxis() { + function prepareRightYAxis () { if (_chart.rightY() === undefined || _chart.elasticY()) { if (_chart.rightY() === undefined) { _chart.rightY(d3.scale.linear()); @@ -125,7 +124,7 @@ dc.compositeChart = function (parent, chartGroup) { _chart.rightYAxis().orient('right'); } - function prepareLeftYAxis() { + function prepareLeftYAxis () { if (_chart.y() === undefined || _chart.elasticY()) { if (_chart.y() === undefined) { _chart.y(d3.scale.linear()); @@ -139,7 +138,7 @@ dc.compositeChart = function (parent, chartGroup) { _chart.yAxis().orient('left'); } - function generateChildG(child, i) { + function generateChildG (child, i) { child._generateG(_chart.g()); child.g().attr('class', SUB_CHART_CLASS + ' _' + i); } @@ -163,8 +162,7 @@ dc.compositeChart = function (parent, chartGroup) { if (child.useRightYAxis()) { child.y(_chart.rightY()); child.yAxis(_chart.rightYAxis()); - } - else { + } else { child.y(_chart.y()); child.yAxis(_chart.yAxis()); } @@ -323,49 +321,49 @@ dc.compositeChart = function (parent, chartGroup) { return _chart; }; - function leftYAxisChildren() { + function leftYAxisChildren () { return _children.filter(function (child) { return !child.useRightYAxis(); }); } - function rightYAxisChildren() { + function rightYAxisChildren () { return _children.filter(function (child) { return child.useRightYAxis(); }); } - function getYAxisMin(charts) { + function getYAxisMin (charts) { return charts.map(function (c) { return c.yAxisMin(); }); } delete _chart.yAxisMin; - function yAxisMin() { + function yAxisMin () { return d3.min(getYAxisMin(leftYAxisChildren())); } - function rightYAxisMin() { + function rightYAxisMin () { return d3.min(getYAxisMin(rightYAxisChildren())); } - function getYAxisMax(charts) { + function getYAxisMax (charts) { return charts.map(function (c) { return c.yAxisMax(); }); } delete _chart.yAxisMax; - function yAxisMax() { + function yAxisMax () { return dc.utils.add(d3.max(getYAxisMax(leftYAxisChildren())), _chart.yAxisPadding()); } - function rightYAxisMax() { + function rightYAxisMax () { return dc.utils.add(d3.max(getYAxisMax(rightYAxisChildren())), _chart.yAxisPadding()); } - function getAllXAxisMinFromChildCharts() { + function getAllXAxisMinFromChildCharts () { return _children.map(function (c) { return c.xAxisMin(); }); @@ -375,7 +373,7 @@ dc.compositeChart = function (parent, chartGroup) { return dc.utils.subtract(d3.min(getAllXAxisMinFromChildCharts()), _chart.xAxisPadding()); }); - function getAllXAxisMaxFromChildCharts() { + function getAllXAxisMaxFromChildCharts () { return _children.map(function (c) { return c.xAxisMax(); }); diff --git a/src/coordinate-grid-mixin.js b/src/coordinate-grid-mixin.js index 1b05f4658..d2bb50c9d 100644 --- a/src/coordinate-grid-mixin.js +++ b/src/coordinate-grid-mixin.js @@ -388,18 +388,17 @@ dc.coordinateGridMixin = function (_chart) { return groups.map(_chart.keyAccessor()); }; - function compareDomains(d1, d2) { + function compareDomains (d1, d2) { return !d1 || !d2 || d1.length !== d2.length || d1.some(function (elem, i) { return elem.toString() !== d2[i].toString(); }); } - function prepareXAxis(g, render) { + function prepareXAxis (g, render) { if (!_chart.isOrdinal()) { if (_chart.elasticX()) { _x.domain([_chart.xAxisMin(), _chart.xAxisMax()]); } - } - else { // _chart.isOrdinal() + } else { // _chart.isOrdinal() if (_chart.elasticX() || _x.domain().length === 0) { _x.domain(_chart._ordinalXDomain()); } @@ -454,7 +453,7 @@ dc.coordinateGridMixin = function (_chart) { (_chart.height() - _xAxisLabelPadding) + ')'); }; - function renderVerticalGridLines(g) { + function renderVerticalGridLines (g) { var gridLineG = g.selectAll('g.' + VERTICAL_CLASS); if (_renderVerticalGridLine) { @@ -498,8 +497,7 @@ dc.coordinateGridMixin = function (_chart) { // exit lines.exit().remove(); - } - else { + } else { gridLineG.selectAll('line').remove(); } } @@ -631,8 +629,7 @@ dc.coordinateGridMixin = function (_chart) { // exit lines.exit().remove(); - } - else { + } else { gridLineG.selectAll('line').remove(); } }; @@ -859,7 +856,7 @@ dc.coordinateGridMixin = function (_chart) { return _chart; }; - function brushHeight() { + function brushHeight () { return _chart._xAxisY() - _chart.margins().top; } @@ -963,7 +960,7 @@ dc.coordinateGridMixin = function (_chart) { 'V' + (2 * y - 8); }; - function getClipPathId() { + function getClipPathId () { return _chart.anchorName().replace(/[ .#=\[\]]/g, '-') + '-clip'; } @@ -982,7 +979,7 @@ dc.coordinateGridMixin = function (_chart) { return _chart; }; - function generateClipPath() { + function generateClipPath () { var defs = dc.utils.appendOrSelect(_parent, 'defs'); // cannot select elements; bug in WebKit, must select by id // https://groups.google.com/forum/#!topic/d3-js/6EpAzQ2gU9I @@ -1053,8 +1050,7 @@ dc.coordinateGridMixin = function (_chart) { function configureMouseZoom () { if (_mouseZoomable) { _chart._enableMouseZoom(); - } - else if (_hasBeenMouseZoomable) { + } else if (_hasBeenMouseZoomable) { _chart._disableMouseZoom(); } } @@ -1072,7 +1068,7 @@ dc.coordinateGridMixin = function (_chart) { _chart.root().call(_nullZoom); }; - function constrainRange(range, constraint) { + function constrainRange (range, constraint) { var constrainedRange = []; constrainedRange[0] = d3.max([range[0], constraint[0]]); constrainedRange[1] = d3.min([range[1], constraint[1]]); @@ -1130,17 +1126,14 @@ dc.coordinateGridMixin = function (_chart) { return _chart; }; - function rangesEqual(range1, range2) { + function rangesEqual (range1, range2) { if (!range1 && !range2) { return true; - } - else if (!range1 || !range2) { + } else if (!range1 || !range2) { return false; - } - else if (range1.length === 0 && range2.length === 0) { + } else if (range1.length === 0 && range2.length === 0) { return true; - } - else if (range1[0].valueOf() === range2[0].valueOf() && + } else if (range1[0].valueOf() === range2[0].valueOf() && range1[1].valueOf() === range2[1].valueOf()) { return true; } @@ -1165,7 +1158,7 @@ dc.coordinateGridMixin = function (_chart) { return _chart; }; - function hasRangeSelected(range) { + function hasRangeSelected (range) { return range instanceof Array && range.length > 1; } diff --git a/src/core.js b/src/core.js index 563b793a2..54031b134 100644 --- a/src/core.js +++ b/src/core.js @@ -40,7 +40,7 @@ dc.chartRegistry = function () { // chartGroup:string => charts:array var _chartMap = {}; - function initializeChartGroup(group) { + function initializeChartGroup (group) { if (!group) { group = dc.constants.DEFAULT_CHART_GROUP; } @@ -203,8 +203,7 @@ dc.optionalTransition = function (enable, duration, callback, name) { return function (selection) { return dc.transition(selection, duration, callback, name); }; - } - else { + } else { return function (selection) { return selection; }; diff --git a/src/d3.box.js b/src/d3.box.js index 961317bb3..f8f198d19 100644 --- a/src/d3.box.js +++ b/src/d3.box.js @@ -13,7 +13,7 @@ tickFormat = null; // For each small multiple… - function box(g) { + function box (g) { g.each(function (d, i) { d = d.map(value).sort(d3.ascending); var g = d3.select(this), @@ -302,11 +302,11 @@ return box; }; - function boxWhiskers(d) { + function boxWhiskers (d) { return [0, d.length - 1]; } - function boxQuartiles(d) { + function boxQuartiles (d) { return [ d3.quantile(d, 0.25), d3.quantile(d, 0.5), diff --git a/src/data-count.js b/src/data-count.js index be8e5ff37..797a89035 100644 --- a/src/data-count.js +++ b/src/data-count.js @@ -43,7 +43,7 @@ dc.dataCount('.dc-data-count') dc.dataCount = function (parent, chartGroup) { var _formatNumber = d3.format(',d'); var _chart = dc.baseMixin({}); - var _html = {some:'', all:''}; + var _html = {some: '', all: ''}; /** #### html([object]) diff --git a/src/data-grid.js b/src/data-grid.js index b75f2bf12..a14907733 100644 --- a/src/data-grid.js +++ b/src/data-grid.js @@ -57,7 +57,7 @@ dc.dataGrid = function (parent, chartGroup) { return _chart; }; - function renderGroups() { + function renderGroups () { var groups = _chart.root().selectAll('div.' + GRID_CSS_CLASS) .data(nestEntries(), function (d) { return _chart.keyAccessor()(d); @@ -79,7 +79,7 @@ dc.dataGrid = function (parent, chartGroup) { return itemGroup; } - function nestEntries() { + function nestEntries () { var entries = _chart.dimension().top(_size); return d3.nest() @@ -90,7 +90,7 @@ dc.dataGrid = function (parent, chartGroup) { }).slice(_beginSlice, _endSlice)); } - function renderItems(groups) { + function renderItems (groups) { var items = groups.order() .selectAll('div.' + ITEM_CSS_CLASS) .data(function (d) { diff --git a/src/data-table.js b/src/data-table.js index 8a10d400b..43bfcc3fe 100644 --- a/src/data-table.js +++ b/src/data-table.js @@ -93,14 +93,14 @@ dc.dataTable = function (parent, chartGroup) { return s; }; - function renderGroups() { + function renderGroups () { // The 'original' example uses all 'functions'. - // If all 'functions' are used, then don't remove/add a header, and leave - // the html alone. This preserves the functionality of earlier releases. - // A 2nd option is a string representing a field in the data. - // A third option is to supply an Object such as an array of 'information', and - // supply your own _doColumnHeaderFormat and _doColumnValueFormat functions to - // create what you need. + // If all 'functions' are used, then don't remove/add a header, and leave + // the html alone. This preserves the functionality of earlier releases. + // A 2nd option is a string representing a field in the data. + // A third option is to supply an Object such as an array of 'information', and + // supply your own _doColumnHeaderFormat and _doColumnValueFormat functions to + // create what you need. var bAllFunctions = true; _columns.forEach(function (f) { bAllFunctions = bAllFunctions & (typeof f === 'function'); @@ -149,7 +149,7 @@ dc.dataTable = function (parent, chartGroup) { return rowGroup; } - function nestEntries() { + function nestEntries () { var entries; if (_order === d3.ascending) { entries = _chart.dimension().bottom(_size); @@ -165,7 +165,7 @@ dc.dataTable = function (parent, chartGroup) { })); } - function renderRows(groups) { + function renderRows (groups) { var rows = groups.order() .selectAll('tr.' + ROW_CSS_CLASS) .data(function (d) { diff --git a/src/geo-choropleth-chart.js b/src/geo-choropleth-chart.js index 2843d1033..00ac4ec63 100644 --- a/src/geo-choropleth-chart.js +++ b/src/geo-choropleth-chart.js @@ -66,7 +66,7 @@ dc.geoChoroplethChart = function (parent, chartGroup) { _projectionFlag = false; }; - function plotData(layerIndex) { + function plotData (layerIndex) { var data = generateLayeredData(); if (isDataLayer(layerIndex)) { @@ -78,7 +78,7 @@ dc.geoChoroplethChart = function (parent, chartGroup) { } } - function generateLayeredData() { + function generateLayeredData () { var data = {}; var groupAll = _chart.data(); for (var i = 0; i < groupAll.length; ++i) { @@ -87,11 +87,11 @@ dc.geoChoroplethChart = function (parent, chartGroup) { return data; } - function isDataLayer(layerIndex) { + function isDataLayer (layerIndex) { return geoJson(layerIndex).keyAccessor; } - function renderRegionG(layerIndex) { + function renderRegionG (layerIndex) { var regionG = _chart.svg() .selectAll(layerSelector(layerIndex)) .classed('selected', function (d) { @@ -115,27 +115,27 @@ dc.geoChoroplethChart = function (parent, chartGroup) { return regionG; } - function layerSelector(layerIndex) { + function layerSelector (layerIndex) { return 'g.layer' + layerIndex + ' g.' + geoJson(layerIndex).name; } - function isSelected(layerIndex, d) { + function isSelected (layerIndex, d) { return _chart.hasFilter() && _chart.hasFilter(getKey(layerIndex, d)); } - function isDeselected(layerIndex, d) { + function isDeselected (layerIndex, d) { return _chart.hasFilter() && !_chart.hasFilter(getKey(layerIndex, d)); } - function getKey(layerIndex, d) { + function getKey (layerIndex, d) { return geoJson(layerIndex).keyAccessor(d); } - function geoJson(index) { + function geoJson (index) { return _geoJsons[index]; } - function renderPaths(regionG, layerIndex, data) { + function renderPaths (regionG, layerIndex, data) { var paths = regionG .select('path') .attr('fill', function () { @@ -162,7 +162,7 @@ dc.geoChoroplethChart = function (parent, chartGroup) { }); }; - function renderTitle(regionG, layerIndex, data) { + function renderTitle (regionG, layerIndex, data) { if (_chart.renderTitle()) { regionG.selectAll('title').text(function (d) { var key = getKey(layerIndex, d); diff --git a/src/heatmap.js b/src/heatmap.js index ae33c3b5d..55a4cb9ab 100644 --- a/src/heatmap.js +++ b/src/heatmap.js @@ -49,7 +49,7 @@ dc.heatMap = function (parent, chartGroup) { return d; }; - /** + /** #### .colsLabel([labelFunction]) Set or get the column label function. The chart class uses this function to render column labels on the X axis. It is passed the column name. @@ -66,7 +66,7 @@ dc.heatMap = function (parent, chartGroup) { return _chart; }; - /** + /** #### .rowsLabel([labelFunction]) Set or get the row label function. The chart class uses this function to render row labels on the Y axis. It is passed the row name. @@ -93,7 +93,7 @@ dc.heatMap = function (parent, chartGroup) { }); }; - function filterAxis(axis, value) { + function filterAxis (axis, value) { var cellsOnAxis = _chart.selectAll('.box-group').filter(function (d) { return d.key[axis] === value; }); @@ -122,7 +122,7 @@ dc.heatMap = function (parent, chartGroup) { return _chart._filter(dc.filters.TwoDimensionalFilter(filter)); }); - function uniq(d, i, a) { + function uniq (d, i, a) { return !i || a[i - 1] !== d; } diff --git a/src/legend.js b/src/legend.js index ab60dd992..dc527d725 100644 --- a/src/legend.js +++ b/src/legend.js @@ -102,14 +102,13 @@ dc.legend = function () { _cumulativeLegendTextWidth += itemWidth; } return translateBy; - } - else { + } else { return 'translate(0,' + i * legendItemHeight() + ')'; } }); }; - function legendItemHeight() { + function legendItemHeight () { return _gap + _itemHeight; } diff --git a/src/line-chart.js b/src/line-chart.js index 1c1965171..2514fc169 100644 --- a/src/line-chart.js +++ b/src/line-chart.js @@ -163,11 +163,11 @@ dc.lineChart = function (parent, chartGroup) { return _chart; }; - function colors(d, i) { + function colors (d, i) { return _chart.getColor.call(d, d.values, i); } - function drawLine(layersEnter, layers) { + function drawLine (layersEnter, layers) { var line = d3.svg.line() .x(function (d) { return _chart.x()(d.x); @@ -196,7 +196,7 @@ dc.lineChart = function (parent, chartGroup) { }); } - function drawArea(layersEnter, layers) { + function drawArea (layersEnter, layers) { if (_renderArea) { var area = d3.svg.area() .x(function (d) { @@ -234,7 +234,7 @@ dc.lineChart = function (parent, chartGroup) { return (!d || d.indexOf('NaN') >= 0) ? 'M0,0' : d; } - function drawDots(chartBody, layers) { + function drawDots (chartBody, layers) { if (!_chart.brushOn() && _chart.xyTipsOn()) { var tooltipListClass = TOOLTIP_G_CLASS + '-list'; var tooltips = chartBody.select('g.' + tooltipListClass); @@ -291,7 +291,7 @@ dc.lineChart = function (parent, chartGroup) { } } - function createRefLines(g) { + function createRefLines (g) { var yRefLine = g.select('path.' + Y_AXIS_REF_LINE_CLASS).empty() ? g.append('path').attr('class', Y_AXIS_REF_LINE_CLASS) : g.select('path.' + Y_AXIS_REF_LINE_CLASS); yRefLine.style('display', 'none').attr('stroke-dasharray', '5,5'); @@ -301,14 +301,14 @@ dc.lineChart = function (parent, chartGroup) { xRefLine.style('display', 'none').attr('stroke-dasharray', '5,5'); } - function showDot(dot) { + function showDot (dot) { dot.style('fill-opacity', 0.8); dot.style('stroke-opacity', 0.8); dot.attr('r', _dotRadius); return dot; } - function showRefLines(dot, g) { + function showRefLines (dot, g) { var x = dot.attr('cx'); var y = dot.attr('cy'); var yAxisX = (_chart._yAxisX() - _chart.margins().left); @@ -318,22 +318,22 @@ dc.lineChart = function (parent, chartGroup) { g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', '').attr('d', xAxisRefPathD); } - function getDotRadius() { + function getDotRadius () { return _dataPointRadius || _dotRadius; } - function hideDot(dot) { + function hideDot (dot) { dot.style('fill-opacity', _dataPointFillOpacity) .style('stroke-opacity', _dataPointStrokeOpacity) .attr('r', getDotRadius()); } - function hideRefLines(g) { + function hideRefLines (g) { g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', 'none'); g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', 'none'); } - function renderTitle(dot, d) { + function renderTitle (dot, d) { if (_chart.renderTitle()) { dot.selectAll('title').remove(); dot.append('title').text(dc.pluck('data', _chart.title(d.name))); @@ -404,7 +404,7 @@ dc.lineChart = function (parent, chartGroup) { return _chart; }; - function colorFilter(color, dashstyle, inv) { + function colorFilter (color, dashstyle, inv) { return function () { var item = d3.select(this); var match = (item.attr('stroke') === color && diff --git a/src/logger.js b/src/logger.js index 15a10277c..4e0f732e4 100644 --- a/src/logger.js +++ b/src/logger.js @@ -29,7 +29,7 @@ dc.logger.debug = function (msg) { dc.logger.deprecate = function (fn, msg) { // Allow logging of deprecation var warned = false; - function deprecated() { + function deprecated () { if (!warned) { dc.logger.warn(msg); warned = true; diff --git a/src/number-display.js b/src/number-display.js index cb2046e57..8d906c234 100644 --- a/src/number-display.js +++ b/src/number-display.js @@ -34,7 +34,7 @@ dc.numberDisplay = function (parent, chartGroup) { var SPAN_CLASS = 'number-display'; var _formatNumber = d3.format('.2s'); var _chart = dc.baseMixin({}); - var _html = {one:'', some:'', none:''}; + var _html = {one: '', some: '', none: ''}; // dimension not required _chart._mandatoryAttributes(['group']); diff --git a/src/pie-chart.js b/src/pie-chart.js index 7fad66c1b..3321f4bb7 100644 --- a/src/pie-chart.js +++ b/src/pie-chart.js @@ -84,7 +84,7 @@ dc.pieChart = function (parent, chartGroup) { return _chart; }; - function drawChart() { + function drawChart () { // set radius on basis of chart dimension if missing _radius = _givenRadius ? _givenRadius : d3.min([_chart.width(), _chart.height()]) / 2; @@ -99,7 +99,7 @@ dc.pieChart = function (parent, chartGroup) { } else { // otherwise we'd be getting NaNs, so override // note: abuse others for its ignoring the value accessor - pieData = pie([{key:_emptyTitle, value:1, others: [_emptyTitle]}]); + pieData = pie([{key: _emptyTitle, value: 1, others: [_emptyTitle]}]); _g.classed(_emptyCssClass, true); } @@ -120,7 +120,7 @@ dc.pieChart = function (parent, chartGroup) { } } - function createElements(slices, arc, pieData) { + function createElements (slices, arc, pieData) { var slicesEnter = createSliceNodes(slices); createSlicePath(slicesEnter, arc); @@ -130,7 +130,7 @@ dc.pieChart = function (parent, chartGroup) { createLabels(pieData, arc); } - function createSliceNodes(slices) { + function createSliceNodes (slices) { var slicesEnter = slices .enter() .append('g') @@ -140,7 +140,7 @@ dc.pieChart = function (parent, chartGroup) { return slicesEnter; } - function createSlicePath(slicesEnter, arc) { + function createSlicePath (slicesEnter, arc) { var slicePath = slicesEnter.append('path') .attr('fill', fill) .on('click', onClick) @@ -153,7 +153,7 @@ dc.pieChart = function (parent, chartGroup) { }); } - function createTitles(slicesEnter) { + function createTitles (slicesEnter) { if (_chart.renderTitle()) { slicesEnter.append('title').text(function (d) { return _chart.title()(d.data); @@ -161,7 +161,7 @@ dc.pieChart = function (parent, chartGroup) { } } - function positionLabels(labelsEnter, arc) { + function positionLabels (labelsEnter, arc) { dc.transition(labelsEnter, _chart.transitionDuration()) .attr('transform', function (d) { return labelPosition(d, arc); @@ -176,7 +176,7 @@ dc.pieChart = function (parent, chartGroup) { }); } - function createLabels(pieData, arc) { + function createLabels (pieData, arc) { if (_chart.renderLabel()) { var labels = _g.selectAll('text.' + _sliceCssClass) .data(pieData); @@ -198,13 +198,13 @@ dc.pieChart = function (parent, chartGroup) { } } - function updateElements(pieData, arc) { + function updateElements (pieData, arc) { updateSlicePaths(pieData, arc); updateLabels(pieData, arc); updateTitles(pieData); } - function updateSlicePaths(pieData, arc) { + function updateSlicePaths (pieData, arc) { var slicePaths = _g.selectAll('g.' + _sliceCssClass) .data(pieData) .select('path') @@ -217,7 +217,7 @@ dc.pieChart = function (parent, chartGroup) { }).attr('fill', fill); } - function updateLabels(pieData, arc) { + function updateLabels (pieData, arc) { if (_chart.renderLabel()) { var labels = _g.selectAll('text.' + _sliceCssClass) .data(pieData); @@ -225,7 +225,7 @@ dc.pieChart = function (parent, chartGroup) { } } - function updateTitles(pieData) { + function updateTitles (pieData) { if (_chart.renderTitle()) { _g.selectAll('g.' + _sliceCssClass) .data(pieData) @@ -236,11 +236,11 @@ dc.pieChart = function (parent, chartGroup) { } } - function removeElements(slices) { + function removeElements (slices) { slices.exit().remove(); } - function highlightFilter() { + function highlightFilter () { if (_chart.hasFilter()) { _chart.selectAll('g.' + _sliceCssClass).each(function (d) { if (isSelectedSlice(d)) { @@ -324,11 +324,11 @@ dc.pieChart = function (parent, chartGroup) { return _chart; }; - function buildArcs() { + function buildArcs () { return d3.svg.arc().outerRadius(_radius - _externalRadiusPadding).innerRadius(_innerRadius); } - function isSelectedSlice(d) { + function isSelectedSlice (d) { return _chart.hasFilter(_chart.cappedKeyAccessor(d.data)); } @@ -350,20 +350,20 @@ dc.pieChart = function (parent, chartGroup) { return _chart; }; - function pieLayout() { + function pieLayout () { return d3.layout.pie().sort(null).value(_chart.cappedValueAccessor); } - function sliceTooSmall(d) { + function sliceTooSmall (d) { var angle = (d.endAngle - d.startAngle); return isNaN(angle) || angle < _minAngleForLabel; } - function sliceHasNoData(d) { + function sliceHasNoData (d) { return _chart.cappedValueAccessor(d) === 0; } - function tweenPie(b) { + function tweenPie (b) { b.innerRadius = _innerRadius; var current = this._current; if (isOffCanvas(current)) { @@ -376,21 +376,21 @@ dc.pieChart = function (parent, chartGroup) { }; } - function isOffCanvas(current) { + function isOffCanvas (current) { return !current || isNaN(current.startAngle) || isNaN(current.endAngle); } - function fill(d, i) { + function fill (d, i) { return _chart.getColor(d.data, i); } - function onClick(d, i) { + function onClick (d, i) { if (_g.attr('class') !== _emptyCssClass) { _chart.onClick(d.data, i); } } - function safeArc(d, i, arc) { + function safeArc (d, i, arc) { var path = arc(d, i); if (path.indexOf('NaN') >= 0) { path = 'M0,0'; @@ -428,7 +428,7 @@ dc.pieChart = function (parent, chartGroup) { return _chart; }; - function labelPosition(d, arc) { + function labelPosition (d, arc) { var centroid; if (_externalLabelRadius) { centroid = d3.svg.arc() @@ -447,7 +447,7 @@ dc.pieChart = function (parent, chartGroup) { _chart.legendables = function () { return _chart.data().map(function (d, i) { - var legendable = {name: d.key, data: d.value, others: d.others, chart:_chart}; + var legendable = {name: d.key, data: d.value, others: d.others, chart: _chart}; legendable.color = _chart.getColor(d, i); return legendable; }); @@ -465,7 +465,7 @@ dc.pieChart = function (parent, chartGroup) { _chart.onClick({key: d.name, others: d.others}); }; - function highlightSliceFromLegendable(legendable, highlighted) { + function highlightSliceFromLegendable (legendable, highlighted) { _chart.selectAll('g.pie-slice').each(function (d) { if (legendable.name === d.data.key) { d3.select(this).classed('highlight', highlighted); diff --git a/src/row-chart.js b/src/row-chart.js index d7a16decc..d1d20b5aa 100644 --- a/src/row-chart.js +++ b/src/row-chart.js @@ -55,7 +55,7 @@ dc.rowChart = function (parent, chartGroup) { _chart.rowsCap = _chart.cap; - function calculateAxisScale() { + function calculateAxisScale () { if (!_x || _elasticX) { var extent = d3.extent(_rowData, _chart.cappedValueAccessor); if (extent[0] > 0) { @@ -67,7 +67,7 @@ dc.rowChart = function (parent, chartGroup) { _xAxis.scale(_x); } - function drawAxis() { + function drawAxis () { var axisG = _g.select('g.axis'); calculateAxisScale(); @@ -112,7 +112,7 @@ dc.rowChart = function (parent, chartGroup) { return _chart; }; - function drawGridLines() { + function drawGridLines () { _g.selectAll('g.tick') .select('line.grid-line') .remove(); @@ -128,7 +128,7 @@ dc.rowChart = function (parent, chartGroup) { }); } - function drawChart() { + function drawChart () { _rowData = _chart.data(); drawAxis(); @@ -142,7 +142,7 @@ dc.rowChart = function (parent, chartGroup) { updateElements(rows); } - function createElements(rows) { + function createElements (rows) { var rowEnter = rows.enter() .append('g') .attr('class', function (d, i) { @@ -155,16 +155,16 @@ dc.rowChart = function (parent, chartGroup) { updateLabels(rows); } - function removeElements(rows) { + function removeElements (rows) { rows.exit().remove(); } - function rootValue() { + function rootValue () { var root = _x(0); return (root === -Infinity || root !== root) ? _x(1) : root; } - function updateElements(rows) { + function updateElements (rows) { var n = _rowData.length; var height; @@ -202,14 +202,14 @@ dc.rowChart = function (parent, chartGroup) { updateLabels(rows); } - function createTitles(rows) { + function createTitles (rows) { if (_chart.renderTitle()) { rows.selectAll('title').remove(); rows.append('title').text(_chart.title()); } } - function createLabels(rowEnter) { + function createLabels (rowEnter) { if (_chart.renderLabel()) { rowEnter.append('text') .on('click', onClick); @@ -221,7 +221,7 @@ dc.rowChart = function (parent, chartGroup) { } } - function updateLabels(rows) { + function updateLabels (rows) { if (_chart.renderLabel()) { var lab = rows.select('text') .attr('x', _labelOffsetX) @@ -267,11 +267,11 @@ dc.rowChart = function (parent, chartGroup) { return _chart; }; - function onClick(d) { + function onClick (d) { _chart.onClick(d); } - function translateX(d) { + function translateX (d) { var x = _x(_chart.cappedValueAccessor(d)), x0 = rootValue(), s = x > x0 ? x0 : x; diff --git a/src/scatter-plot.js b/src/scatter-plot.js index 55aaf04aa..0a2107ac1 100644 --- a/src/scatter-plot.js +++ b/src/scatter-plot.js @@ -181,7 +181,7 @@ dc.scatterPlot = function (parent, chartGroup) { }).classed('fadeout', false); }; - function resizeSymbolsWhere(condition, size) { + function resizeSymbolsWhere (condition, size) { var symbols = _chart.selectAll('.chart-body path.symbol').filter(function () { return condition(d3.select(this)); }); @@ -211,7 +211,7 @@ dc.scatterPlot = function (parent, chartGroup) { return _chart.brush().empty() || !extent || extent[0][0] >= extent[1][0] || extent[0][1] >= extent[1][1]; }; - function resizeFiltered(filter) { + function resizeFiltered (filter) { var symbols = _chart.selectAll('.chart-body path.symbol').each(function (d) { this.filtered = filter && filter.isFiltered(d.key); }); diff --git a/src/series-chart.js b/src/series-chart.js index 244eaf349..d390cf4ff 100644 --- a/src/series-chart.js +++ b/src/series-chart.js @@ -32,7 +32,7 @@ dc.seriesChart = function (parent, chartGroup) { var _chart = dc.compositeChart(parent, chartGroup); - function keySort(a, b) { + function keySort (a, b) { return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b)); } @@ -66,7 +66,7 @@ dc.seriesChart = function (parent, chartGroup) { keep.push(sub.key); return subChart .dimension(_chart.dimension()) - .group({all:d3.functor(sub.values)}, sub.key) + .group({all: d3.functor(sub.values)}, sub.key) .keyAccessor(_chart.keyAccessor()) .valueAccessor(_chart.valueAccessor()) .brushOn(_chart.brushOn()); @@ -85,14 +85,14 @@ dc.seriesChart = function (parent, chartGroup) { } }; - function clearChart(c) { + function clearChart (c) { if (_charts[c].g()) { _charts[c].g().remove(); } delete _charts[c]; } - function resetChildren() { + function resetChildren () { Object.keys(_charts).map(clearChart); _charts = {}; } diff --git a/src/stack-mixin.js b/src/stack-mixin.js index 7252ac3bc..2957348e4 100644 --- a/src/stack-mixin.js +++ b/src/stack-mixin.js @@ -30,7 +30,7 @@ dc.stackMixin = function (_chart) { var _hidableStacks = false; - function domainFilter() { + function domainFilter () { if (!_chart.x()) { return d3.functor(true); } @@ -76,7 +76,7 @@ dc.stackMixin = function (_chart) { accessor = name; } - var layer = {group:group}; + var layer = {group: group}; if (typeof name === 'string') { layer.name = name; } @@ -115,7 +115,7 @@ dc.stackMixin = function (_chart) { return _chart; }; - function findLayerByName(n) { + function findLayerByName (n) { var i = _stack.map(dc.pluck('name')).indexOf(n); return _stack[i]; } @@ -169,7 +169,7 @@ dc.stackMixin = function (_chart) { return dc.utils.add(max, _chart.yAxisPadding()); }; - function flattenStack() { + function flattenStack () { var valueses = _chart.data().map(function (layer) { return layer.values; }); return Array.prototype.concat.apply([], valueses); } @@ -236,7 +236,7 @@ dc.stackMixin = function (_chart) { return _chart; }; - function visability(l) { + function visability (l) { return !l.hidden; } @@ -259,10 +259,10 @@ dc.stackMixin = function (_chart) { _chart.legendables = function () { return _stack.map(function (layer, i) { return { - chart:_chart, - name:layer.name, + chart: _chart, + name: layer.name, hidden: layer.hidden || false, - color:_chart.getColor.call(layer, layer.values, i) + color: _chart.getColor.call(layer, layer.values, i) }; }); }; diff --git a/web/stock.js b/web/stock.js index fdfc8cbaf..7b63dca7a 100644 --- a/web/stock.js +++ b/web/stock.js @@ -482,9 +482,9 @@ d3.csv('ndx.csv', function (data) { // `.html` replaces everything in the anchor with the html given using the following function. // `%filter-count` and `%total-count` are replaced with the values obtained. .html({ - some:'%filter-count selected out of %total-count records' + + some: '%filter-count selected out of %total-count records' + ' | Reset All', - all:'All records selected. Please click on the graph to apply filters.' + all: 'All records selected. Please click on the graph to apply filters.' }); //#### Data Table @@ -553,7 +553,7 @@ d3.csv('ndx.csv', function (data) { table.selectAll('.dc-table-group').classed('info', true); }); -/* + /* //#### Geo Choropleth Chart //Create a choropleth chart and use the given css selector as anchor. You can also specify @@ -677,5 +677,5 @@ d3.selectAll('#version').text(dc.version); // Determine latest stable version in the repo via Github API d3.json('https://api.github.com/repos/dc-js/dc.js/releases/latest', function (error, latestRelease) { /*jshint camelcase: false */ - d3.selectAll('#latest').text(latestRelease.tag_name); + d3.selectAll('#latest').text(latestRelease.tag_name); /* jscs:disable */ }); From b3135e3754a9db2525887fad2297726944a64a1b Mon Sep 17 00:00:00 2001 From: Matt Traynham Date: Fri, 7 Aug 2015 13:36:09 -0400 Subject: [PATCH 2/4] Fix linter errors with specs --- .jshintrc | 9 +- spec/bar-chart-spec.js | 630 +++++++++++++++-------------- spec/base-mixin-spec.js | 45 ++- spec/biggish-data-spec.js | 39 +- spec/box-plot-spec.js | 91 ++--- spec/bubble-chart-spec.js | 225 ++++++----- spec/bubble-overlay-spec.js | 100 ++--- spec/color-spec.js | 51 +-- spec/composite-chart-spec.js | 176 ++++---- spec/coordinate-grid-chart-spec.js | 359 ++++++++-------- spec/core-spec.js | 191 ++++----- spec/data-addition-spec.js | 81 ++-- spec/data-count-spec.js | 163 ++++---- spec/data-grid-spec.js | 107 +++-- spec/data-table-spec.js | 158 ++++---- spec/event-spec.js | 24 +- spec/filter-dates-spec.js | 33 +- spec/filters-spec.js | 11 +- spec/geo-choropleth-chart-spec.js | 215 +++++----- spec/heatmap-spec.js | 234 +++++------ spec/helpers/custom_matchers.js | 122 +++--- spec/helpers/spec-helper.js | 28 +- spec/legend-spec.js | 179 ++++---- spec/line-chart-spec.js | 339 ++++++++-------- spec/logger-spec.js | 44 +- spec/number-display-spec.js | 154 +++---- spec/pie-chart-spec.js | 583 +++++++++++++------------- spec/row-chart-spec.js | 100 ++--- spec/scatter-plot-spec.js | 92 ++--- spec/series-chart-spec.js | 95 +++-- spec/utils-spec.js | 102 ++--- 31 files changed, 2420 insertions(+), 2360 deletions(-) diff --git a/.jshintrc b/.jshintrc index e0741a892..a7b70bf85 100644 --- a/.jshintrc +++ b/.jshintrc @@ -66,6 +66,13 @@ "global": false, "module": false, "process": false, - "require": false + "require": false, + "jasmine": false, + "expect": false, + "describe": false, + "it": false, + "beforeEach": false, + "afterEach": false, + "spyOn": false } } \ No newline at end of file diff --git a/spec/bar-chart-spec.js b/spec/bar-chart-spec.js index 5c2923d2f..de6891fa4 100644 --- a/spec/bar-chart-spec.js +++ b/spec/bar-chart-spec.js @@ -1,10 +1,11 @@ -describe('dc.barChart', function() { +/* global appendChartID, loadDateFixture, makeDate */ +describe('dc.barChart', function () { var id, chart, data; var dimension, group; beforeEach(function () { data = crossfilter(loadDateFixture()); - dimension = data.dimension(function(d) { return d3.time.day.utc(d.dd); }); + dimension = data.dimension(function (d) { return d3.time.day.utc(d.dd); }); group = dimension.group(); id = 'bar-chart'; @@ -22,28 +23,28 @@ describe('dc.barChart', function() { chart.render(); }); - it("should set bar height using y-values from data", function() { + it('should set bar height using y-values from data', function () { forEachBar(function (bar, datum) { expect(+bar.attr('y')).toBe(chart.y()(datum.data.value)); }); }); - it("should set bar width to the minimum for a relatively small chart", function() { + it('should set bar width to the minimum for a relatively small chart', function () { forEachBar(function (bar) { expect(+bar.attr('width')).toBe(1); }); }); - it("should preserve method chaining", function() { + it('should preserve method chaining', function () { expect(chart.render()).toEqual(chart); }); - describe("with centered bars", function() { - beforeEach(function() { + describe('with centered bars', function () { + beforeEach(function () { chart.centerBar(true).render(); }); - it("should position bars centered around their data points", function() { + it('should position bars centered around their data points', function () { var halfBarWidth = 0.5; forEachBar(function (bar, datum) { var barPosition = chart.x()(datum.data.key); @@ -52,8 +53,8 @@ describe('dc.barChart', function() { }); }); - describe("without centered bars", function() { - it("should position bars starting at their data points", function() { + describe('without centered bars', function () { + it('should position bars starting at their data points', function () { forEachBar(function (bar, datum) { var barPosition = chart.x()(datum.data.key); expect(+bar.attr('x')).toBeCloseTo(barPosition, 3); @@ -61,14 +62,14 @@ describe('dc.barChart', function() { }); }); - describe('and then switching the group at runtime', function() { - beforeEach(function() { + describe('and then switching the group at runtime', function () { + beforeEach(function () { chart.rescale(); // BUG: barWidth cannot change after initial rendering var domain = [makeDate(2012, 4, 20), makeDate(2012, 7, 15)]; chart.x(d3.time.scale.utc().domain(domain)) - .group(dimension.group().reduceSum(function(d) { + .group(dimension.group().reduceSum(function (d) { return +d.nvalue; })) .elasticY(true) @@ -79,50 +80,47 @@ describe('dc.barChart', function() { chart.render(); }); - it('should generate a bar for each datum', function() { - expect(chart.selectAll("rect.bar").size()).toBe(6); + it('should generate a bar for each datum', function () { + expect(chart.selectAll('rect.bar').size()).toBe(6); }); - it('should automatically resize the bar widths', function() { - forEachBar(function(bar) { - expect(bar.attr("width")).toBe("9"); + it('should automatically resize the bar widths', function () { + forEachBar(function (bar) { + expect(bar.attr('width')).toBe('9'); }); }); + function nthYAxisText (n) { + return d3.select(chart.selectAll('g.y text')[0][n]); + } + it('should generate bars with positions corresponding to their data', function () { + expect(nthStack(0).nthBar(0).attr('x')).toBeWithinDelta(58, 1); + expect(nthStack(0).nthBar(0).attr('y')).toBeWithinDelta(84, 1); + expect(nthStack(0).nthBar(0).attr('height')).toBeWithinDelta(30, 1); - it('should generate bars with positions corresponding to their data', function() { - expect(nthStack(0).nthBar(0).attr("x")).toBeWithinDelta(58, 1); - expect(nthStack(0).nthBar(0).attr("y")).toBeWithinDelta(84, 1); - expect(nthStack(0).nthBar(0).attr("height")).toBeWithinDelta(30, 1); - - expect(nthStack(0).nthBar(3).attr("x")).toBeWithinDelta(492, 1); - expect(nthStack(0).nthBar(3).attr("y")).toBeWithinDelta(84, 1); - expect(nthStack(0).nthBar(3).attr("height")).toBeWithinDelta(23, 1); + expect(nthStack(0).nthBar(3).attr('x')).toBeWithinDelta(492, 1); + expect(nthStack(0).nthBar(3).attr('y')).toBeWithinDelta(84, 1); + expect(nthStack(0).nthBar(3).attr('height')).toBeWithinDelta(23, 1); - expect(nthStack(0).nthBar(5).attr("x")).toBeWithinDelta(961, 1); - expect(nthStack(0).nthBar(5).attr("y")).toBeWithinDelta(61, 1); - expect(nthStack(0).nthBar(5).attr("height")).toBeWithinDelta(23, 1); + expect(nthStack(0).nthBar(5).attr('x')).toBeWithinDelta(961, 1); + expect(nthStack(0).nthBar(5).attr('y')).toBeWithinDelta(61, 1); + expect(nthStack(0).nthBar(5).attr('height')).toBeWithinDelta(23, 1); }); - it('should generate the y-axis domain dynamically', function() { + it('should generate the y-axis domain dynamically', function () { expect(nthYAxisText(0).text()).toMatch(/-10/); expect(nthYAxisText(1).text()).toMatch(/-5/); - expect(nthYAxisText(2).text()).toBe("0"); - - function nthYAxisText(n) { - return d3.select(chart.selectAll("g.y text")[0][n]); - } + expect(nthYAxisText(2).text()).toBe('0'); }); - }); describe('with an ordinal x domain', function () { var stateDimension; beforeEach(function () { - stateDimension = data.dimension(function(d){ return d.state; }); + stateDimension = data.dimension(function (d) { return d.state; }); var stateGroup = stateDimension.group(); - var ordinalDomainValues = ["California", "Colorado", "Delaware", "Ontario", "Mississippi", "Oklahoma"]; + var ordinalDomainValues = ['California', 'Colorado', 'Delaware', 'Ontario', 'Mississippi', 'Oklahoma']; chart.rescale(); // BUG: barWidth cannot change after initial rendering @@ -139,29 +137,29 @@ describe('dc.barChart', function() { expect(chart.brushOn()).toBeFalsy(); }); - it("should generate a bar for each ordinal domain value", function() { - expect(chart.selectAll("rect.bar").size()).toBe(6); + it('should generate a bar for each ordinal domain value', function () { + expect(chart.selectAll('rect.bar').size()).toBe(6); }); - it("should size the bars proportionally to the graph", function() { - expect(+chart.select("rect.bar").attr("width")).toBe(164); + it('should size the bars proportionally to the graph', function () { + expect(+chart.select('rect.bar').attr('width')).toBe(164); }); - it("should position the bar based on the ordinal range", function() { + it('should position the bar based on the ordinal range', function () { expect(nthStack(0).nthBar(0).attr('x')).toBeWithinDelta(16, 1); expect(nthStack(0).nthBar(3).attr('x')).toBeWithinDelta(674, 1); expect(nthStack(0).nthBar(5).attr('x')).toBeWithinDelta(509, 1); }); - it('should fade deselected bars', function() { - chart.filter("Ontario").filter("Colorado").redraw(); - expect(nthStack(0).nthBar(0).classed("deselected")).toBeTruthy(); - expect(nthStack(0).nthBar(1).classed("deselected")).toBeFalsy(); - expect(nthStack(0).nthBar(5).classed("deselected")).toBeFalsy(); + it('should fade deselected bars', function () { + chart.filter('Ontario').filter('Colorado').redraw(); + expect(nthStack(0).nthBar(0).classed('deselected')).toBeTruthy(); + expect(nthStack(0).nthBar(1).classed('deselected')).toBeFalsy(); + expect(nthStack(0).nthBar(5).classed('deselected')).toBeFalsy(); expect(stateDimension.top(Infinity).length).toBe(3); }); - it('should respect the ordering of the specified domain', function() { + it('should respect the ordering of the specified domain', function () { // Note that bar chart works differently from pie chart. The bar objects (the // actual DOM nodes) don't get reordered by the custom ordering, but they are // placed so that they are drawn in the order specified. @@ -173,26 +171,26 @@ describe('dc.barChart', function() { expect(mississippiXPos).toBeLessThan(oklahomaXPos); }); - describe('with elasticY enabled', function() { - beforeEach(function() { + describe('with elasticY enabled', function () { + beforeEach(function () { chart.elasticY(true).render(); }); - it('should use all ordinal keys to determine the maximum y', function() { + it('should use all ordinal keys to determine the maximum y', function () { expect(chart.y().domain()).toEqual([0, 3]); }); }); - describe("with an unspecified domain", function() { - beforeEach(function() { + describe('with an unspecified domain', function () { + beforeEach(function () { chart.x(d3.scale.ordinal()).render(); }); - it("should use alphabetical ordering", function() { - var data = chart.selectAll("rect.bar").data(); - var expectedData = ["California", "Colorado", "Delaware", "Mississippi", "Oklahoma", "Ontario"]; + it('should use alphabetical ordering', function () { + var data = chart.selectAll('rect.bar').data(); + var expectedData = ['California', 'Colorado', 'Delaware', 'Mississippi', 'Oklahoma', 'Ontario']; - expect(data.map(function(datum) { return datum.x; })).toEqual(expectedData); + expect(data.map(function (datum) { return datum.x; })).toEqual(expectedData); var oldX = -Infinity; forEachBar(function (bar) { @@ -202,21 +200,21 @@ describe('dc.barChart', function() { }); }); - describe('redrawing after changing the value accessor', function() { - beforeEach(function() { - chart.valueAccessor(function() { return 30; }); + describe('redrawing after changing the value accessor', function () { + beforeEach(function () { + chart.valueAccessor(function () { return 30; }); chart.redraw(); }); - it('should position bars based on ordinal range', function() { - expect(nthStack(0).nthBar(0).attr("height")).toBe("1600"); - expect(nthStack(0).nthBar(1).attr("height")).toBe("1600"); - expect(nthStack(0).nthBar(2).attr("height")).toBe("1600"); + it('should position bars based on ordinal range', function () { + expect(nthStack(0).nthBar(0).attr('height')).toBe('1600'); + expect(nthStack(0).nthBar(1).attr('height')).toBe('1600'); + expect(nthStack(0).nthBar(2).attr('height')).toBe('1600'); }); }); - describe('clicking', function() { - it('causes other dimension to be filtered', function() { + describe('clicking', function () { + it('causes other dimension to be filtered', function () { expect(dimension.top(Infinity).length).toEqual(10); // fake a click var abar = chart.selectAll('rect.bar:nth-child(3)'); @@ -228,7 +226,7 @@ describe('dc.barChart', function() { describe('with a linear x domain', function () { beforeEach(function () { - var linearDimension = data.dimension(function(d){ return +d.value; }); + var linearDimension = data.dimension(function (d) { return +d.value; }); var linearGroup = linearDimension.group(); chart.rescale(); // BUG: barWidth cannot change after initial rendering @@ -240,31 +238,31 @@ describe('dc.barChart', function() { .render(); }); - it('should generate the correct number of bars', function() { - expect(chart.selectAll("rect.bar").size()).toBe(5); + it('should generate the correct number of bars', function () { + expect(chart.selectAll('rect.bar').size()).toBe(5); }); - it('should auto size bar width', function() { - forEachBar(function(bar) { - expect(bar.attr("width")).toBe("18"); + it('should auto size bar width', function () { + forEachBar(function (bar) { + expect(bar.attr('width')).toBe('18'); }); }); - it('should position bars based on linear range', function() { + it('should position bars based on linear range', function () { expect(nthStack(0).nthBar(0).attr('x')).toBeWithinDelta(40, 1); expect(nthStack(0).nthBar(2).attr('x')).toBeWithinDelta(489, 1); expect(nthStack(0).nthBar(4).attr('x')).toBeWithinDelta(938, 1); }); - describe('with a custom click handler', function() { - beforeEach(function() { + describe('with a custom click handler', function () { + beforeEach(function () { chart.brushOn(false) - .on('renderlet', function(_chart) { - _chart.selectAll("rect.bar").on("click", _chart.onClick); + .on('renderlet', function (_chart) { + _chart.selectAll('rect.bar').on('click', _chart.onClick); }) .render(); }); - it('clicking causes another dimension to be filtered', function() { + it('clicking causes another dimension to be filtered', function () { expect(dimension.top(Infinity).length).toEqual(10); var abar = chart.selectAll('rect.bar:nth-child(3)'); abar.on('click')(abar.datum()); @@ -273,40 +271,39 @@ describe('dc.barChart', function() { }); }); - describe('with stacked data', function () { describe('with positive data', function () { beforeEach(function () { - var idGroup = dimension.group().reduceSum(function(d) { return d.id; }); - var sumGroup = dimension.group().reduceSum(function(d) { return d.value; }); + var idGroup = dimension.group().reduceSum(function (d) { return d.id; }); + var sumGroup = dimension.group().reduceSum(function (d) { return d.value; }); chart .brushOn(false) .x(d3.time.scale.utc().domain([makeDate(2012, 4, 20), makeDate(2012, 7, 15)])) - .group(idGroup, "stack 0") - .title("stack 0", function (d) { return "stack 0: " + d.value; }) - .stack(sumGroup, "stack 1") - .title("stack 1", function (d) { return "stack 1: " + d.value; }) - .stack(sumGroup, "stack 2", function (d) { return 3; }) + .group(idGroup, 'stack 0') + .title('stack 0', function (d) { return 'stack 0: ' + d.value; }) + .stack(sumGroup, 'stack 1') + .title('stack 1', function (d) { return 'stack 1: ' + d.value; }) + .stack(sumGroup, 'stack 2', function (d) { return 3; }) .elasticY(true) .render(); }); - it("should set the y domain to encompass all stacks", function() { + it('should set the y domain to encompass all stacks', function () { expect(chart.y().domain()).toEqual([0, 152]); }); - it("should generate each stack using its associated group", function() { - expect(nthStack(0).selectAll("rect.bar").size()).toBe(6); - expect(nthStack(1).selectAll("rect.bar").size()).toBe(6); - expect(nthStack(2).selectAll("rect.bar").size()).toBe(6); + it('should generate each stack using its associated group', function () { + expect(nthStack(0).selectAll('rect.bar').size()).toBe(6); + expect(nthStack(1).selectAll('rect.bar').size()).toBe(6); + expect(nthStack(2).selectAll('rect.bar').size()).toBe(6); }); it('should render the correct number of stacks', function () { expect(chart.selectAll('.stack').size()).toBe(3); }); - it("should stack the bars", function() { + it('should stack the bars', function () { expect(+nthStack(0).nthBar(2).attr('y')).toBe(142); expect(+nthStack(0).nthBar(4).attr('y')).toBe(144); @@ -318,43 +315,43 @@ describe('dc.barChart', function() { }); it('should have its own title accessor', function () { - expect(chart.title()({value: 1})).toBe("stack 0: 1"); - expect(chart.title("stack 0")({value: 2})).toBe("stack 0: 2"); - expect(chart.title("stack 1")({value: 3})).toBe("stack 1: 3"); + expect(chart.title()({value: 1})).toBe('stack 0: 1'); + expect(chart.title('stack 0')({value: 2})).toBe('stack 0: 2'); + expect(chart.title('stack 1')({value: 3})).toBe('stack 1: 3'); }); it('should have titles rendered for extra stacks', function () { nthStack(1).forEachBar(function (bar, datum) { expect(bar.selectAll('title')[0].length).toBe(1); - expect(bar.select("title").text()).toBe("stack 1: " + datum.data.value); + expect(bar.select('title').text()).toBe('stack 1: ' + datum.data.value); }); }); it('should default to first stack title for untitled stacks', function () { nthStack(2).forEachBar(function (bar, datum) { - expect(bar.select("title").text()).toBe("stack 0: " + datum.data.value); + expect(bar.select('title').text()).toBe('stack 0: ' + datum.data.value); }); }); - describe("extra redraws", function() { - beforeEach(function() { + describe('extra redraws', function () { + beforeEach(function () { chart.redraw(); chart.redraw(); }); - it('should not create extra title elements', function() { + it('should not create extra title elements', function () { nthStack(1).forEachBar(function (bar, datum) { expect(bar.selectAll('title')[0].length).toBe(1); }); }); }); - describe("with title rendering disabled", function() { - beforeEach(function() { + describe('with title rendering disabled', function () { + beforeEach(function () { chart.renderTitle(false).render(); }); - it("should not generate title elements", function() { + it('should not generate title elements', function () { expect(chart.selectAll('rect.bar title').empty()).toBeTruthy(); }); }); @@ -362,50 +359,50 @@ describe('dc.barChart', function() { describe('stack hiding', function () { describe('first stack', function () { beforeEach(function () { - chart.hideStack("stack 0").render(); + chart.hideStack('stack 0').render(); }); it('should hide the stack', function () { - expect(nthStack(0).nthBar(0).attr("height")).toBe('52'); - expect(nthStack(0).nthBar(1).attr("height")).toBe('78'); + expect(nthStack(0).nthBar(0).attr('height')).toBe('52'); + expect(nthStack(0).nthBar(1).attr('height')).toBe('78'); }); it('should show the stack', function () { - chart.showStack("stack 0").render(); - expect(nthStack(0).nthBar(0).attr("height")).toBe('1'); - expect(nthStack(0).nthBar(1).attr("height")).toBe('6'); + chart.showStack('stack 0').render(); + expect(nthStack(0).nthBar(0).attr('height')).toBe('1'); + expect(nthStack(0).nthBar(1).attr('height')).toBe('6'); }); }); describe('any other stack', function () { beforeEach(function () { - chart.title("stack 2", function (d) { return "stack 2: " + d.value; }); - chart.hideStack("stack 1").render(); + chart.title('stack 2', function (d) { return 'stack 2: ' + d.value; }); + chart.hideStack('stack 1').render(); }); it('should hide the stack', function () { - expect(nthStack(1).nthBar(0).attr("height")).toBe('24'); - expect(nthStack(1).nthBar(1).attr("height")).toBe('24'); + expect(nthStack(1).nthBar(0).attr('height')).toBe('24'); + expect(nthStack(1).nthBar(1).attr('height')).toBe('24'); }); it('should show the stack', function () { - chart.showStack("stack 1").render(); - expect(nthStack(1).nthBar(0).attr("height")).toBe('46'); - expect(nthStack(1).nthBar(1).attr("height")).toBe('70'); + chart.showStack('stack 1').render(); + expect(nthStack(1).nthBar(0).attr('height')).toBe('46'); + expect(nthStack(1).nthBar(1).attr('height')).toBe('70'); }); it('should still show the title for a visible stack', function () { nthStack(1).forEachBar(function (bar, datum) { - expect(bar.select("title").text()).toBe("stack 2: " + datum.data.value); + expect(bar.select('title').text()).toBe('stack 2: ' + datum.data.value); }); }); }); describe('hiding all the stacks', function () { beforeEach(function () { - chart.hideStack("stack 0") - .hideStack("stack 1") - .hideStack("stack 2") + chart.hideStack('stack 0') + .hideStack('stack 1') + .hideStack('stack 2') .render(); }); @@ -418,7 +415,7 @@ describe('dc.barChart', function() { describe('with negative data', function () { beforeEach(function () { - var negativeGroup = dimension.group().reduceSum(function(d){ return d.nvalue; }); + var negativeGroup = dimension.group().reduceSum(function (d) { return d.nvalue; }); chart.group(negativeGroup).stack(negativeGroup).stack(negativeGroup); chart.x(d3.time.scale.utc().domain([makeDate(2012, 4, 20), makeDate(2012, 7, 15)])); @@ -438,99 +435,99 @@ describe('dc.barChart', function() { expect(chart.selectAll('rect.bar').size()).toBe(18); }); - it('should automatically size the bar widths', function() { + it('should automatically size the bar widths', function () { forEachBar(function (bar) { - expect(bar.attr("width")).toBe("9"); + expect(bar.attr('width')).toBe('9'); }); }); it('should generate negative bars for stack 0', function () { expect(nthStack(0).nthBar(0).attr('x')).toBeWithinDelta(58, 1); expect(nthStack(0).nthBar(0).attr('y')).toBeWithinDelta(73, 1); - expect(nthStack(0).nthBar(0).attr("height")).toBeWithinDelta(8, 1); + expect(nthStack(0).nthBar(0).attr('height')).toBeWithinDelta(8, 1); expect(nthStack(0).nthBar(3).attr('x')).toBeWithinDelta(492, 1); expect(nthStack(0).nthBar(3).attr('y')).toBeWithinDelta(73, 1); - expect(nthStack(0).nthBar(3).attr("height")).toBeWithinDelta(6, 1); + expect(nthStack(0).nthBar(3).attr('height')).toBeWithinDelta(6, 1); expect(nthStack(0).nthBar(5).attr('x')).toBeWithinDelta(961, 1); expect(nthStack(0).nthBar(5).attr('y')).toBeWithinDelta(67, 1); - expect(nthStack(0).nthBar(5).attr("height")).toBeWithinDelta(6, 1); + expect(nthStack(0).nthBar(5).attr('height')).toBeWithinDelta(6, 1); }); it('should generate negative bar for stack 1', function () { expect(nthStack(1).nthBar(0).attr('x')).toBeWithinDelta(58, 1); expect(nthStack(1).nthBar(0).attr('y')).toBeWithinDelta(81, 1); - expect(nthStack(1).nthBar(0).attr("height")).toBeWithinDelta(7, 1); + expect(nthStack(1).nthBar(0).attr('height')).toBeWithinDelta(7, 1); expect(nthStack(1).nthBar(3).attr('x')).toBeWithinDelta(492, 1); expect(nthStack(1).nthBar(3).attr('y')).toBeWithinDelta(79, 1); - expect(nthStack(1).nthBar(3).attr("height")).toBeWithinDelta(5, 1); + expect(nthStack(1).nthBar(3).attr('height')).toBeWithinDelta(5, 1); expect(nthStack(1).nthBar(5).attr('x')).toBeWithinDelta(961, 1); expect(nthStack(1).nthBar(5).attr('y')).toBeWithinDelta(61, 1); - expect(nthStack(1).nthBar(5).attr("height")).toBeWithinDelta(6, 1); + expect(nthStack(1).nthBar(5).attr('height')).toBeWithinDelta(6, 1); }); it('should generate y axis domain dynamically', function () { - var nthText = function(n) { return d3.select(chart.selectAll("g.y text")[0][n]); }; + var nthText = function (n) { return d3.select(chart.selectAll('g.y text')[0][n]); }; - expect(nthText(0).text()).toBe("-20"); - expect(nthText(1).text()).toBe("0"); - expect(nthText(2).text()).toBe("20"); + expect(nthText(0).text()).toBe('-20'); + expect(nthText(1).text()).toBe('0'); + expect(nthText(2).text()).toBe('20'); }); }); }); - it('should not be focused by default', function() { + it('should not be focused by default', function () { expect(chart.refocused()).toBeFalsy(); }); - describe('when focused', function() { - beforeEach(function() { + describe('when focused', function () { + beforeEach(function () { chart.elasticY(true).gap(1).xUnits(d3.time.days.utc); chart.focus([makeDate(2012, 5, 11), makeDate(2012, 6, 9)]); }); - it('should render the one (focused) bar', function() { - expect(chart.selectAll("rect.bar").size()).toBe(1); + it('should render the one (focused) bar', function () { + expect(chart.selectAll('rect.bar').size()).toBe(1); }); - it('should resize the bar width according to the focused width', function() { - expect(chart.select("rect.bar").attr("width")).toBe("35"); + it('should resize the bar width according to the focused width', function () { + expect(chart.select('rect.bar').attr('width')).toBe('35'); }); - it('should reset the y-axis domain based on the focus range', function() { + it('should reset the y-axis domain based on the focus range', function () { expect(chart.y().domain()).toEqual([0, 1]); }); - it('should redraw the x-axis scale and ticks', function() { - expect(xAxisText().slice(0,4)).toEqual(["Mon 11", "Wed 13", "Fri 15", "Jun 17"]); + it('should redraw the x-axis scale and ticks', function () { + expect(xAxisText().slice(0,4)).toEqual(['Mon 11', 'Wed 13', 'Fri 15', 'Jun 17']); }); - it('should set its focus flag', function() { + it('should set its focus flag', function () { expect(chart.refocused()).toBeTruthy(); }); - it('should reset the focus when focused to null', function() { + it('should reset the focus when focused to null', function () { chart.focus(null); itBehavesLikeItWasReset(); }); - it('should reset the focus when focused to []', function() { + it('should reset the focus when focused to []', function () { chart.focus([]); itBehavesLikeItWasReset(); }); - function itBehavesLikeItWasReset() { + function itBehavesLikeItWasReset () { expect(chart.refocused()).toBeFalsy(); expect(chart.x().domain()).toEqual([makeDate(2012, 0, 1), makeDate(2012, 11, 31)]); - expect(xAxisText().slice(0,4)).toEqual(["2012", "February", "March", "April"]); + expect(xAxisText().slice(0,4)).toEqual(['2012', 'February', 'March', 'April']); } - function xAxisText() { - return chart.selectAll("g.x text")[0].map(function(x) { return d3.select(x).text(); }); + function xAxisText () { + return chart.selectAll('g.x text')[0].map(function (x) { return d3.select(x).text(); }); } }); @@ -543,35 +540,35 @@ describe('dc.barChart', function() { .render(); firstItem = chart.select('g.dc-legend g.dc-legend-item'); - firstItem.on("mouseover")(firstItem.datum()); + firstItem.on('mouseover')(firstItem.datum()); }); describe('when a legend item is hovered over', function () { it('should highlight corresponding lines and areas', function () { nthStack(0).forEachBar(function (bar) { - expect(bar.classed("highlight")).toBeTruthy(); + expect(bar.classed('highlight')).toBeTruthy(); }); }); it('should fade out non-corresponding lines and areas', function () { nthStack(1).forEachBar(function (bar) { - expect(bar.classed("fadeout")).toBeTruthy(); + expect(bar.classed('fadeout')).toBeTruthy(); }); }); }); describe('when a legend item is hovered out', function () { it('should remove highlighting from corresponding lines and areas', function () { - firstItem.on("mouseout")(firstItem.datum()); + firstItem.on('mouseout')(firstItem.datum()); nthStack(0).forEachBar(function (bar) { - expect(bar.classed("highlight")).toBeFalsy(); + expect(bar.classed('highlight')).toBeFalsy(); }); }); it('should fade in non-corresponding lines and areas', function () { - firstItem.on("mouseout")(firstItem.datum()); + firstItem.on('mouseout')(firstItem.datum()); nthStack(1).forEachBar(function (bar) { - expect(bar.classed("fadeout")).toBeFalsy(); + expect(bar.classed('fadeout')).toBeFalsy(); }); }); }); @@ -579,10 +576,10 @@ describe('dc.barChart', function() { describe('filtering', function () { beforeEach(function () { - d3.select("#" + id).append("span").attr("class", "filter").style("display", "none"); - d3.select("#" + id).append("a").attr("class", "reset").style("display", "none"); + d3.select('#' + id).append('span').attr('class', 'filter').style('display', 'none'); + d3.select('#' + id).append('a').attr('class', 'reset').style('display', 'none'); chart.filter([makeDate(2012, 5, 1), makeDate(2012, 5, 30)]).redraw(); - dc.dateFormat = d3.time.format.utc("%m/%d/%Y"); + dc.dateFormat = d3.time.format.utc('%m/%d/%Y'); chart.redraw(); }); @@ -590,132 +587,131 @@ describe('dc.barChart', function() { expect(chart.filter()).toEqual([makeDate(2012, 5, 1), makeDate(2012, 5, 30)]); }); - it("should enable the reset link after rendering", function() { - expect(chart.select("a.reset").style("display")).not.toBe("none"); + it('should enable the reset link after rendering', function () { + expect(chart.select('a.reset').style('display')).not.toBe('none'); }); it('should set the filter printer', function () { expect(chart.filterPrinter()).not.toBeNull(); }); - it("should turn the filter info on", function() { - expect(chart.select("span.filter").style("display")).not.toBe("none"); + it('should turn the filter info on', function () { + expect(chart.select('span.filter').style('display')).not.toBe('none'); }); - it("should set filter text after slice selection", function() { - expect(chart.select("span.filter").text()).toBe("[06/01/2012 -> 06/30/2012]"); + it('should set filter text after slice selection', function () { + expect(chart.select('span.filter').text()).toBe('[06/01/2012 -> 06/30/2012]'); }); describe('when a brush is defined', function () { it('should position the brush with an offset', function () { - expect(chart.select("g.brush").attr("transform")).toMatchTranslate(chart.margins().left, 10); + expect(chart.select('g.brush').attr('transform')).toMatchTranslate(chart.margins().left, 10); }); it('should create a fancy brush resize handle', function () { - chart.select("g.brush").selectAll(".resize path").each(function (d, i) { + chart.select('g.brush').selectAll('.resize path').each(function (d, i) { if (i === 0) { - expect(d3.select(this).attr("d")) - .toMatchPath("M0.5,53 A6,6 0 0 1 6.5,59 V100 A6,6 0 0 1 0.5,106 ZM2.5,61 V98 M4.5,61 V98"); - } - else{ - expect(d3.select(this).attr("d")) - .toMatchPath("M-0.5,53 A6,6 0 0 0 -6.5,59 V100 A6,6 0 0 0 -0.5,106 ZM-2.5,61 V98 M-4.5,61 V98"); + expect(d3.select(this).attr('d')) + .toMatchPath('M0.5,53 A6,6 0 0 1 6.5,59 V100 A6,6 0 0 1 0.5,106 ZM2.5,61 V98 M4.5,61 V98'); + } else { + expect(d3.select(this).attr('d')) + .toMatchPath('M-0.5,53 A6,6 0 0 0 -6.5,59 V100 A6,6 0 0 0 -0.5,106 ZM-2.5,61 V98 M-4.5,61 V98'); } }); }); it('should stretch the background', function () { - expect(+chart.select("g.brush rect.background").attr("width")).toBe(1020); + expect(+chart.select('g.brush rect.background').attr('width')).toBe(1020); }); it('should set the background height to the chart height', function () { - expect(+chart.select("g.brush rect.background").attr("height")).toBe(160); + expect(+chart.select('g.brush rect.background').attr('height')).toBe(160); }); it('should set extent height to the chart height', function () { - expect(+chart.select("g.brush rect.extent").attr("height")).toBe(160); + expect(+chart.select('g.brush rect.extent').attr('height')).toBe(160); }); it('should set extent width based on filter set', function () { - expect(chart.select("g.brush rect.extent").attr("width")).toBeWithinDelta(81, 1); + expect(chart.select('g.brush rect.extent').attr('width')).toBeWithinDelta(81, 1); }); - it("should push unselected bars to the background", function() { - expect(nthStack(0).nthBar(0).classed("deselected")).toBeTruthy(); - expect(nthStack(0).nthBar(1).classed("deselected")).toBeFalsy(); - expect(nthStack(0).nthBar(3).classed("deselected")).toBeTruthy(); + it('should push unselected bars to the background', function () { + expect(nthStack(0).nthBar(0).classed('deselected')).toBeTruthy(); + expect(nthStack(0).nthBar(1).classed('deselected')).toBeFalsy(); + expect(nthStack(0).nthBar(3).classed('deselected')).toBeTruthy(); }); - it("should push the selected bars to the foreground", function() { - expect(nthStack(0).nthBar(1).classed("deselected")).toBeFalsy(); + it('should push the selected bars to the foreground', function () { + expect(nthStack(0).nthBar(1).classed('deselected')).toBeFalsy(); }); - describe("after reset", function() { - beforeEach(function() { + describe('after reset', function () { + beforeEach(function () { chart.filterAll(); chart.redraw(); }); - it("should push all bars to the foreground", function() { - chart.selectAll("rect.bar").each(function () { + it('should push all bars to the foreground', function () { + chart.selectAll('rect.bar').each(function () { var bar = d3.select(this); - expect(bar.classed("deselected")).toBeFalsy(); + expect(bar.classed('deselected')).toBeFalsy(); }); }); }); }); }); - describe("a chart with a large domain", function() { - beforeEach(function() { + describe('a chart with a large domain', function () { + beforeEach(function () { chart.x(d3.time.scale.utc().domain([makeDate(2000, 0, 1), makeDate(2012, 11, 31)])); }); - describe("when filters are applied", function() { - beforeEach(function() { - data.dimension(function(d){ return d.value; }).filter(66); + describe('when filters are applied', function () { + beforeEach(function () { + data.dimension(function (d) { return d.value; }).filter(66); chart.redraw(); }); - it("should not deselect any bars", function() { + it('should not deselect any bars', function () { forEachBar(function (bar) { - expect(bar.classed("deselected")).toBeFalsy(); + expect(bar.classed('deselected')).toBeFalsy(); }); }); - it("should set the bars to the minimum bar width", function() { + it('should set the bars to the minimum bar width', function () { forEachBar(function (bar) { - expect(+bar.attr("width")).toBe(1); + expect(+bar.attr('width')).toBe(1); }); }); }); }); - describe("a chart with a linear numerical domain", function() { - beforeEach(function() { - var numericalDimension = data.dimension(function(d) { return +d.value; }); + describe('a chart with a linear numerical domain', function () { + beforeEach(function () { + var numericalDimension = data.dimension(function (d) { return +d.value; }); chart.dimension(numericalDimension).group(numericalDimension.group()); chart.x(d3.scale.linear().domain([10, 80])).elasticY(true); chart.render(); }); - it("should base the y-axis height on the maximum value in the data", function() { + it('should base the y-axis height on the maximum value in the data', function () { var yAxisMax = 3.0; - var ticks = chart.selectAll("g.y g.tick"); + var ticks = chart.selectAll('g.y g.tick'); var tickValues = ticks[0].map(function (tick) { return +d3.select(tick).text(); }); var maxTickValue = Math.max.apply(this, tickValues); expect(maxTickValue).toBe(yAxisMax); }); - describe("when filters are applied", function() { - beforeEach(function() { - data.dimension(function(d) { return d.countrycode; }).filter("CA"); + describe('when filters are applied', function () { + beforeEach(function () { + data.dimension(function (d) { return d.countrycode; }).filter('CA'); chart.redraw(); }); - it("should rescale the y-axis after applying a filter", function() { + it('should rescale the y-axis after applying a filter', function () { var yAxisMax = 1.0; - var ticks = chart.selectAll("g.y g.tick"); + var ticks = chart.selectAll('g.y g.tick'); var tickValues = ticks[0].map(function (tick) { return +d3.select(tick).text(); }); var maxTickValue = Math.max.apply(this, tickValues); expect(maxTickValue).toBe(yAxisMax); @@ -724,11 +720,11 @@ describe('dc.barChart', function() { }); }); - describe('with another ordinal domain', function() { - beforeEach(function() { + describe('with another ordinal domain', function () { + beforeEach(function () { var rows = []; - rows.push({State:'CA', 'Population': 2704659}); - rows.push({State:'TX', 'Population': 1827307}); + rows.push({State: 'CA', 'Population': 2704659}); + rows.push({State: 'TX', 'Population': 1827307}); data = crossfilter(rows); dimension = data.dimension(dc.pluck('State')); group = dimension.group().reduceSum(dc.pluck('Population')); @@ -738,18 +734,18 @@ describe('dc.barChart', function() { .x(d3.scale.ordinal()) .transitionDuration(0) .dimension(dimension) - .group(group, "Population"); + .group(group, 'Population'); chart.render(); }); - it('should not overlap bars', function() { + it('should not overlap bars', function () { var x = numAttr('x'), wid = numAttr('width'); expect(x(nthStack(0).nthBar(0)) + wid(nthStack(0).nthBar(0))) .toBeLessThan(x(nthStack(0).nthBar(1))); }); }); - describe('with yetnother ordinal domain', function() { - beforeEach(function() { + describe('with yetnother ordinal domain', function () { + beforeEach(function () { var rows = [{ name: 'Venezuela', sale: 300 @@ -791,14 +787,15 @@ describe('dc.barChart', function() { .xUnits(dc.units.ordinal); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<7; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 7; ++i) { checkBarOverlap(i); + } }); }); - describe('with changing number of bars', function() { - beforeEach(function() { + describe('with changing number of bars', function () { + beforeEach(function () { var rows1 = [ {x: 1, y: 3}, {x: 2, y: 9}, @@ -807,10 +804,10 @@ describe('dc.barChart', function() { ]; data = crossfilter(rows1); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d.x; }); - group = dimension.group().reduceSum(function(d) { + group = dimension.group().reduceSum(function (d) { return d.y; }); @@ -822,30 +819,32 @@ describe('dc.barChart', function() { .group(group); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<3; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 3; ++i) { checkBarOverlap(i); + } }); - describe('with bars added', function() { - beforeEach(function() { + describe('with bars added', function () { + beforeEach(function () { var rows2 = [ - {x: 7, y:4}, - {x: 12, y:9} + {x: 7, y: 4}, + {x: 12, y: 9} ]; data.add(rows2); chart.x().domain([0,13]); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<5; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 5; ++i) { checkBarOverlap(i); + } }); }); }); - describe('with changing number of bars and elasticX', function() { - beforeEach(function() { + describe('with changing number of bars and elasticX', function () { + beforeEach(function () { var rows1 = [ {x: 1, y: 3}, {x: 2, y: 9}, @@ -854,10 +853,10 @@ describe('dc.barChart', function() { ]; data = crossfilter(rows1); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d.x; }); - group = dimension.group().reduceSum(function(d) { + group = dimension.group().reduceSum(function (d) { return d.y; }); @@ -869,29 +868,31 @@ describe('dc.barChart', function() { .group(group); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<3; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 3; ++i) { checkBarOverlap(i); + } }); - describe('with bars added', function() { - beforeEach(function() { + describe('with bars added', function () { + beforeEach(function () { var rows2 = [ - {x: 7, y:4}, - {x: 12, y:9} + {x: 7, y: 4}, + {x: 12, y: 9} ]; data.add(rows2); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<5; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 5; ++i) { checkBarOverlap(i); + } }); }); }); - describe('with changing number of ordinal bars and elasticX', function() { - beforeEach(function() { + describe('with changing number of ordinal bars and elasticX', function () { + beforeEach(function () { var rows1 = [ {x: 'a', y: 3}, {x: 'b', y: 9}, @@ -900,10 +901,10 @@ describe('dc.barChart', function() { ]; data = crossfilter(rows1); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d.x; }); - group = dimension.group().reduceSum(function(d) { + group = dimension.group().reduceSum(function (d) { return d.y; }); @@ -916,28 +917,30 @@ describe('dc.barChart', function() { .group(group); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<3; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 3; ++i) { checkBarOverlap(i); + } }); - describe('with bars added', function() { - beforeEach(function() { + describe('with bars added', function () { + beforeEach(function () { var rows2 = [ - {x: 'g', y:4}, - {x: 'l', y:9} + {x: 'g', y: 4}, + {x: 'l', y: 9} ]; data.add(rows2); chart.render(); }); - it('should not overlap bars', function() { - for(var i=0; i<5; ++i) + it('should not overlap bars', function () { + for (var i = 0; i < 5; ++i) { checkBarOverlap(i); + } }); }); }); - describe("brushing with bars centered and rounding enabled", function () { + describe('brushing with bars centered and rounding enabled', function () { beforeEach(function () { chart .brushOn(true) @@ -945,22 +948,22 @@ describe('dc.barChart', function() { .centerBar(true); }); - describe("with alwaysUseRounding disabled", function() { + describe('with alwaysUseRounding disabled', function () { var consoleWarnSpy; - beforeEach(function() { + beforeEach(function () { chart.alwaysUseRounding(false); - consoleWarnSpy = spyOn(console, "warn"); + consoleWarnSpy = spyOn(console, 'warn'); chart.render(); chart.brush().extent([makeDate(2012, 6, 1), makeDate(2012, 7, 15)]); chart.brush().event(chart.root()); }); - it("should log a warning indicating that brush rounding was disabled", function () { + it('should log a warning indicating that brush rounding was disabled', function () { expect(consoleWarnSpy.calls.mostRecent().args[0]).toMatch(/brush rounding is disabled/); }); - it("should not round the brush", function () { + it('should not round the brush', function () { jasmine.clock().tick(100); var filter = chart.filter(); delete filter.isFiltered; @@ -968,23 +971,23 @@ describe('dc.barChart', function() { }); }); - describe("with alwaysUseRounding enabled", function() { - beforeEach(function() { + describe('with alwaysUseRounding enabled', function () { + beforeEach(function () { chart.alwaysUseRounding(true); chart.render(); chart.brush().extent([makeDate(2012, 6, 1), makeDate(2012, 7, 15)]); chart.brush().event(chart.root()); }); - it("should round the brush", function () { + it('should round the brush', function () { jasmine.clock().tick(100); expect(chart.brush().extent()).toEqual([makeDate(2012, 6, 1), makeDate(2012, 7, 1)]); }); }); }); - describe('check ordering option of the x axis', function() { - beforeEach(function() { + describe('check ordering option of the x axis', function () { + beforeEach(function () { var rows = [ {x: 'a', y: 1}, {x: 'b', y: 3}, @@ -995,10 +998,10 @@ describe('dc.barChart', function() { id = 'bar-chart'; appendChartID(id); data = crossfilter(rows); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d.x; }); - group = dimension.group().reduceSum(function(d) { + group = dimension.group().reduceSum(function (d) { return d.y; }); @@ -1012,38 +1015,37 @@ describe('dc.barChart', function() { chart.render(); }); - it('should be ordered by default alphabetical order', function() { - var data = chart.data()["0"].values; - var expectedData = ["a", "b", "c", "d"]; - expect(data.map(function(d) { return d.x; })).toEqual(expectedData); + it('should be ordered by default alphabetical order', function () { + var data = chart.data()['0'].values; + var expectedData = ['a', 'b', 'c', 'd']; + expect(data.map(function (d) { return d.x; })).toEqual(expectedData); }); - it('should be ordered by value increasing', function() { - chart.ordering(function(d) { return d.value; }); + it('should be ordered by value increasing', function () { + chart.ordering(function (d) { return d.value; }); chart.redraw(); - expect(xAxisText()).toEqual(["a", "c", "b", "d"]); + expect(xAxisText()).toEqual(['a', 'c', 'b', 'd']); }); - it('should be ordered by value decreasing', function() { - chart.ordering(function(d) { return -d.value; }); + it('should be ordered by value decreasing', function () { + chart.ordering(function (d) { return -d.value; }); chart.redraw(); - expect(xAxisText()).toEqual(["d", "b", "c", "a"]); + expect(xAxisText()).toEqual(['d', 'b', 'c', 'a']); }); - it('should be ordered by alphabetical order', function() { - chart.ordering(function(d) { return d.key; }); + it('should be ordered by alphabetical order', function () { + chart.ordering(function (d) { return d.key; }); chart.redraw(); - expect(xAxisText()).toEqual(["a", "b", "c", "d"]); + expect(xAxisText()).toEqual(['a', 'b', 'c', 'd']); }); - function xAxisText() { - return chart.selectAll("g.x text")[0].map(function(x) { return d3.select(x).text(); }); + function xAxisText () { + return chart.selectAll('g.x text')[0].map(function (x) { return d3.select(x).text(); }); } }); - describe('ordering with stacks', function() { - var group2; - beforeEach(function() { + describe('ordering with stacks', function () { + beforeEach(function () { var rows = [ {x: 'a', y: 1, z: 10}, {x: 'b', y: 3, z: 20}, @@ -1054,13 +1056,13 @@ describe('dc.barChart', function() { id = 'bar-chart'; appendChartID(id); data = crossfilter(rows); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d.x; }); - group = dimension.group().reduceSum(function(d) { + group = dimension.group().reduceSum(function (d) { return d.y; }); - var group2 = dimension.group().reduceSum(function(d) { + var group2 = dimension.group().reduceSum(function (d) { return d.z; }); @@ -1075,46 +1077,46 @@ describe('dc.barChart', function() { chart.render(); }); - it('should be ordered by default alphabetical order', function() { - var data = chart.data()["0"].values; - var expectedData = ["a", "b", "c", "d"]; - expect(data.map(function(d) { return d.x; })).toEqual(expectedData); + it('should be ordered by default alphabetical order', function () { + var data = chart.data()['0'].values; + var expectedData = ['a', 'b', 'c', 'd']; + expect(data.map(function (d) { return d.x; })).toEqual(expectedData); }); // note: semantics are kind of screwy here: which stack do you want to sort // by when you order by value? right now it's all of them together. - it('should be ordered by value increasing', function() { - chart.ordering(function(d) { return d.value; }); + it('should be ordered by value increasing', function () { + chart.ordering(function (d) { return d.value; }); chart.redraw(); - expect(xAxisText()).toEqual(["a", "c", "b", "d"]); + expect(xAxisText()).toEqual(['a', 'c', 'b', 'd']); }); - it('should be ordered by value decreasing', function() { - chart.ordering(function(d) { return -d.value; }); + it('should be ordered by value decreasing', function () { + chart.ordering(function (d) { return -d.value; }); chart.redraw(); - expect(xAxisText()).toEqual(["c", "d", "b", "a"]); + expect(xAxisText()).toEqual(['c', 'd', 'b', 'a']); }); - it('should be ordered by alphabetical order', function() { - chart.ordering(function(d) { return d.key; }); + it('should be ordered by alphabetical order', function () { + chart.ordering(function (d) { return d.key; }); chart.redraw(); - expect(xAxisText()).toEqual(["a", "b", "c", "d"]); + expect(xAxisText()).toEqual(['a', 'b', 'c', 'd']); }); - function xAxisText() { - return chart.selectAll("g.x text")[0].map(function(x) { return d3.select(x).text(); }); + function xAxisText () { + return chart.selectAll('g.x text')[0].map(function (x) { return d3.select(x).text(); }); } }); - function nthStack(n) { - var stack = d3.select(chart.selectAll(".stack")[0][n]); + function nthStack (n) { + var stack = d3.select(chart.selectAll('.stack')[0][n]); stack.nthBar = function (n) { - return d3.select(this.selectAll("rect.bar")[0][n]); + return d3.select(this.selectAll('rect.bar')[0][n]); }; stack.forEachBar = function (assertions) { - this.selectAll("rect.bar").each(function (d) { + this.selectAll('rect.bar').each(function (d) { assertions(d3.select(this), d); }); }; @@ -1122,22 +1124,22 @@ describe('dc.barChart', function() { return stack; } - function forEachBar(assertions) { - chart.selectAll("rect.bar").each(function (d) { + function forEachBar (assertions) { + chart.selectAll('rect.bar').each(function (d) { assertions(d3.select(this), d); }); } // mostly because jshint complains about the + - function numAttr(attr) { - return function(selection) { + function numAttr (attr) { + return function (selection) { return +selection.attr(attr); }; } - function checkBarOverlap(n) { + function checkBarOverlap (n) { var x = numAttr('x'), wid = numAttr('width'); expect(x(nthStack(0).nthBar(n)) + wid(nthStack(0).nthBar(n))) - .toBeLessThan(x(nthStack(0).nthBar(n+1))); + .toBeLessThan(x(nthStack(0).nthBar(n + 1))); } }); diff --git a/spec/base-mixin-spec.js b/spec/base-mixin-spec.js index 0a7f8461e..a883c27f2 100644 --- a/spec/base-mixin-spec.js +++ b/spec/base-mixin-spec.js @@ -1,4 +1,5 @@ -describe("dc.baseMixin", function () { +/* global appendChartID, flushAllD3Transitions, loadDateFixture */ +describe('dc.baseMixin', function () { var id, chart, dimension, group, addFilterHandler, removeFilterHandler, hasFilterHandler, resetFilterHandler; beforeEach(function () { @@ -43,27 +44,27 @@ describe("dc.baseMixin", function () { chart.on('pretransition.pret', pretransition); }); - it('should not execute a renderlet until after the render transitions', function() { + it('should not execute a renderlet until after the render transitions', function () { chart.render(); expect(firstRenderlet).not.toHaveBeenCalled(); flushAllD3Transitions(); expect(firstRenderlet).toHaveBeenCalled(); }); - it('should not execute a renderlet until after the redraw transitions', function() { + it('should not execute a renderlet until after the redraw transitions', function () { chart.redraw(); expect(firstRenderlet).not.toHaveBeenCalled(); flushAllD3Transitions(); expect(firstRenderlet).toHaveBeenCalled(); }); - it('should execute pretransition event before the render transitions', function() { + it('should execute pretransition event before the render transitions', function () { chart.render(); expect(pretransition).toHaveBeenCalled(); flushAllD3Transitions(); }); - it('should execute pretransition event before the redraw transitions', function() { + it('should execute pretransition event before the redraw transitions', function () { chart.redraw(); expect(pretransition).toHaveBeenCalled(); flushAllD3Transitions(); @@ -143,7 +144,7 @@ describe("dc.baseMixin", function () { describe('on filter double', function () { var filterSpy, filterSpy2, filter; beforeEach(function () { - filter = "1"; + filter = '1'; var expectedCallbackSignature = function (callbackChart, callbackFilter) { expect(callbackChart).toBe(chart); @@ -152,8 +153,8 @@ describe("dc.baseMixin", function () { filterSpy = jasmine.createSpy().and.callFake(expectedCallbackSignature); filterSpy2 = jasmine.createSpy().and.callFake(expectedCallbackSignature); - chart.on("filtered.one", filterSpy); - chart.on("filtered.two", filterSpy2); + chart.on('filtered.one', filterSpy); + chart.on('filtered.two', filterSpy2); }); it('should execute first callback after setting through #filter', function () { @@ -175,7 +176,7 @@ describe("dc.baseMixin", function () { describe('on filter', function () { var filterSpy, filter; beforeEach(function () { - filter = "1"; + filter = '1'; var expectedCallbackSignature = function (callbackChart, callbackFilter) { expect(callbackChart).toBe(chart); @@ -183,7 +184,7 @@ describe("dc.baseMixin", function () { }; filterSpy = jasmine.createSpy().and.callFake(expectedCallbackSignature); - chart.on("filtered", filterSpy); + chart.on('filtered', filterSpy); }); it('should execute callback after setting through #filter', function () { @@ -207,8 +208,8 @@ describe("dc.baseMixin", function () { preRedrawSpy = jasmine.createSpy().and.callFake(expectedCallbackSignature); postRedrawSpy = jasmine.createSpy().and.callFake(expectedCallbackSignature); - chart.on("preRedraw", preRedrawSpy); - chart.on("postRedraw", postRedrawSpy); + chart.on('preRedraw', preRedrawSpy); + chart.on('postRedraw', postRedrawSpy); }); it('should execute the preRedraw callback before transitions', function () { @@ -231,7 +232,7 @@ describe("dc.baseMixin", function () { it('should require dimension', function () { try { dc.baseMixin({}).group(group).render(); - throw new Error("That should've thrown"); + throw new Error('That should\'ve thrown'); } catch (e) { expect(e instanceof dc.errors.InvalidStateException).toBeTruthy(); } @@ -240,7 +241,7 @@ describe("dc.baseMixin", function () { it('should require group', function () { try { dc.baseMixin({}).dimension(dimension).render(); - throw new Error("That should've thrown"); + throw new Error('That should\'ve thrown'); } catch (e) { expect(e instanceof dc.errors.InvalidStateException).toBeTruthy(); } @@ -251,14 +252,14 @@ describe("dc.baseMixin", function () { var id; beforeEach(function () { - id = "chart-id"; + id = 'chart-id'; }); describe('using a d3 node', function () { var anchorDiv; beforeEach(function () { - anchorDiv = d3.select("body").append("div").attr("id", id).node(); + anchorDiv = d3.select('body').append('div').attr('id', id).node(); chart.anchor(anchorDiv); }); @@ -276,8 +277,8 @@ describe("dc.baseMixin", function () { describe('without an id', function () { beforeEach(function () { - d3.select("#" + id).remove(); - anchorDiv = d3.select("body").append("div").attr("class", "no-id").node(); + d3.select('#' + id).remove(); + anchorDiv = d3.select('body').append('div').attr('class', 'no-id').node(); chart.anchor(anchorDiv); }); @@ -295,12 +296,12 @@ describe("dc.baseMixin", function () { describe('using an id selector', function () { beforeEach(function () { - d3.select("body").append("div").attr("id", id); + d3.select('body').append('div').attr('id', id); chart.anchor('#' + id); }); it('should add the dc chart class to its parent div', function () { - expect(chart.root().classed("dc-chart")).toBeTruthy(); + expect(chart.root().classed('dc-chart')).toBeTruthy(); }); it('should return the id selector when anchor is called', function () { @@ -351,11 +352,11 @@ describe("dc.baseMixin", function () { chart.width(300).height(301).render(); }); - it("should set the height", function () { + it('should set the height', function () { expect(chart.height()).toEqual(301); }); - it("should set the width", function () { + it('should set the width', function () { expect(chart.width()).toEqual(300); }); }); diff --git a/spec/biggish-data-spec.js b/spec/biggish-data-spec.js index bf3d7ef48..27d0653ed 100644 --- a/spec/biggish-data-spec.js +++ b/spec/biggish-data-spec.js @@ -1,9 +1,13 @@ -function biggish_data() { - var fixture = JSON.parse('[{"k":1,"t":"2015-01-09T20:00:00.0000000","n":65},{"k":1,"t":"2015-01-09T21:00:00.0000000","n":0},{"k":1,"t":"2015-01-09T22:00:00.0000000","n":22},{"k":1,"t":"2015-01-09T23:00:00.0000000","n":0},{"k":1,"t":"2015-01-12T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-12T20:00:00.0000000","n":49},{"k":1,"t":"2015-01-12T21:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T15:00:00.0000000","n":98},{"k":1,"t":"2015-01-13T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T18:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T19:00:00.0000000","n":420},{"k":1,"t":"2015-01-13T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-14T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-14T17:00:00.0000000","n":62},{"k":1,"t":"2015-01-14T18:00:00.0000000","n":50},{"k":1,"t":"2015-01-14T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-15T13:00:00.0000000","n":0},{"k":1,"t":"2015-01-15T14:00:00.0000000","n":23},{"k":1,"t":"2015-01-15T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T16:00:00.0000000","n":91},{"k":1,"t":"2015-01-16T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T21:00:00.0000000","n":20},{"k":1,"t":"2015-01-16T22:00:00.0000000","n":0},{"k":1,"t":"2015-01-19T13:00:00.0000000","n":0},{"k":1,"t":"2015-01-19T14:00:00.0000000","n":64},{"k":1,"t":"2015-01-19T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-19T16:00:00.0000000","n":65},{"k":1,"t":"2015-01-19T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T15:00:00.0000000","n":57},{"k":1,"t":"2015-01-21T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T18:00:00.0000000","n":58},{"k":1,"t":"2015-01-21T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T13:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T14:00:00.0000000","n":59},{"k":1,"t":"2015-01-22T15:00:00.0000000","n":101},{"k":1,"t":"2015-01-22T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T18:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T19:00:00.0000000","n":94},{"k":1,"t":"2015-01-22T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T16:00:00.0000000","n":355},{"k":1,"t":"2015-01-23T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T18:00:00.0000000","n":91},{"k":1,"t":"2015-01-23T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T21:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T22:00:00.0000000","n":112},{"k":1,"t":"2015-01-23T23:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T15:00:00.0000000","n":107},{"k":1,"t":"2015-01-28T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T18:00:00.0000000","n":78},{"k":1,"t":"2015-01-28T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T01:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T02:00:00.0000000","n":135},{"k":1,"t":"2015-01-29T03:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T15:00:00.0000000","n":67},{"k":1,"t":"2015-01-29T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T21:00:00.0000000","n":49},{"k":1,"t":"2015-01-29T22:00:00.0000000","n":0},{"k":1,"t":"2015-01-30T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-30T15:00:00.0000000","n":57},{"k":1,"t":"2015-01-30T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-03T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-03T16:00:00.0000000","n":144},{"k":1,"t":"2015-02-03T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T15:00:00.0000000","n":210},{"k":1,"t":"2015-02-04T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T18:00:00.0000000","n":62},{"k":1,"t":"2015-02-04T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T15:00:00.0000000","n":105},{"k":1,"t":"2015-02-05T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T18:00:00.0000000","n":277},{"k":1,"t":"2015-02-05T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-06T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-06T16:00:00.0000000","n":253},{"k":1,"t":"2015-02-06T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-06T18:00:00.0000000","n":64},{"k":1,"t":"2015-02-06T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-09T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-09T15:00:00.0000000","n":123},{"k":1,"t":"2015-02-09T16:00:00.0000000","n":184},{"k":1,"t":"2015-02-09T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T15:00:00.0000000","n":100},{"k":1,"t":"2015-02-10T16:00:00.0000000","n":271},{"k":1,"t":"2015-02-10T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T20:00:00.0000000","n":72},{"k":1,"t":"2015-02-10T21:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T15:00:00.0000000","n":117},{"k":1,"t":"2015-02-11T16:00:00.0000000","n":294},{"k":1,"t":"2015-02-11T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T18:00:00.0000000","n":61},{"k":1,"t":"2015-02-11T19:00:00.0000000","n":624},{"k":1,"t":"2015-02-11T20:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T21:00:00.0000000","n":56},{"k":1,"t":"2015-02-11T22:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T15:00:00.0000000","n":112},{"k":1,"t":"2015-02-12T16:00:00.0000000","n":295},{"k":1,"t":"2015-02-12T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T18:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T19:00:00.0000000","n":126},{"k":1,"t":"2015-02-12T20:00:00.0000000","n":513},{"k":1,"t":"2015-02-12T21:00:00.0000000","n":0},{"k":1,"t":"2015-02-13T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-13T15:00:00.0000000","n":198},{"k":1,"t":"2015-02-13T16:00:00.0000000","n":270},{"k":1,"t":"2015-02-13T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-13T18:00:00.0000000","n":528},{"k":1,"t":"2015-02-13T19:00:00.0000000","n":2274},{"k":1,"t":"2015-02-13T20:00:00.0000000","n":834},{"k":1,"t":"2015-02-13T21:00:00.0000000","n":372},{"k":1,"t":"2015-02-13T22:00:00.0000000","n":372},{"k":1,"t":"2015-02-13T23:00:00.0000000","n":0},{"k":1,"t":"2015-02-17T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-17T15:00:00.0000000","n":119},{"k":1,"t":"2015-02-17T16:00:00.0000000","n":135},{"k":1,"t":"2015-02-17T17:00:00.0000000","n":67},{"k":1,"t":"2015-02-17T18:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T15:00:00.0000000","n":137},{"k":1,"t":"2015-02-18T16:00:00.0000000","n":254},{"k":1,"t":"2015-02-18T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T18:00:00.0000000","n":64},{"k":1,"t":"2015-02-18T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T20:00:00.0000000","n":53},{"k":1,"t":"2015-02-18T21:00:00.0000000","n":0},{"k":1,"t":"2015-02-19T12:00:00.0000000","n":0},{"k":1,"t":"2015-02-19T13:00:00.0000000","n":86},{"k":1,"t":"2015-02-19T14:00:00.0000000","n":210},{"k":1,"t":"2015-02-19T15:00:00.0000000","n":338},{"k":1,"t":"2015-02-19T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-19T17:00:00.0000000","n":149},{"k":1,"t":"2015-02-19T18:00:00.0000000","n":0},{"k":1,"t":"2015-02-20T11:00:00.0000000","n":0},{"k":1,"t":"2015-02-20T12:00:00.0000000","n":44},{"k":1,"t":"2015-02-20T13:00:00.0000000","n":0},{"k":1,"t":"2015-02-22T00:00:00.0000000","n":0},{"k":1,"t":"2015-02-22T01:00:00.0000000","n":458},{"k":1,"t":"2015-02-22T02:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T12:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T13:00:00.0000000","n":87},{"k":1,"t":"2015-02-23T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T16:00:00.0000000","n":142},{"k":1,"t":"2015-02-23T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T01:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T02:00:00.0000000","n":235},{"k":1,"t":"2015-02-24T03:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T13:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T14:00:00.0000000","n":638},{"k":1,"t":"2015-02-24T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-25T11:00:00.0000000","n":0},{"k":1,"t":"2015-02-25T12:00:00.0000000","n":56},{"k":1,"t":"2015-02-25T13:00:00.0000000","n":0},{"k":1,"t":"2015-02-25T14:00:00.0000000","n":1083},{"k":1,"t":"2015-02-25T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-27T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-27T17:00:00.0000000","n":196},{"k":1,"t":"2015-02-27T18:00:00.0000000","n":50},{"k":1,"t":"2015-02-27T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T13:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T14:00:00.0000000","n":207},{"k":1,"t":"2015-03-03T15:00:00.0000000","n":526},{"k":1,"t":"2015-03-03T16:00:00.0000000","n":270},{"k":1,"t":"2015-03-03T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T21:00:00.0000000","n":60},{"k":1,"t":"2015-03-03T22:00:00.0000000","n":0},{"k":1,"t":"2015-03-04T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-04T18:00:00.0000000","n":62},{"k":1,"t":"2015-03-04T19:00:00.0000000","n":532},{"k":1,"t":"2015-03-04T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T18:00:00.0000000","n":478},{"k":1,"t":"2015-03-05T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T21:00:00.0000000","n":42},{"k":1,"t":"2015-03-05T22:00:00.0000000","n":0},{"k":1,"t":"2015-03-06T02:00:00.0000000","n":0},{"k":1,"t":"2015-03-06T03:00:00.0000000","n":74},{"k":1,"t":"2015-03-06T04:00:00.0000000","n":0},{"k":1,"t":"2015-03-09T11:00:00.0000000","n":0},{"k":1,"t":"2015-03-09T12:00:00.0000000","n":61},{"k":1,"t":"2015-03-09T13:00:00.0000000","n":107},{"k":1,"t":"2015-03-09T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-09T15:00:00.0000000","n":70},{"k":1,"t":"2015-03-09T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T01:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T02:00:00.0000000","n":70},{"k":1,"t":"2015-03-10T03:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T18:00:00.0000000","n":141},{"k":1,"t":"2015-03-10T19:00:00.0000000","n":98},{"k":1,"t":"2015-03-10T20:00:00.0000000","n":94},{"k":1,"t":"2015-03-10T21:00:00.0000000","n":0},{"k":1,"t":"2015-03-12T15:00:00.0000000","n":0},{"k":1,"t":"2015-03-12T16:00:00.0000000","n":133},{"k":1,"t":"2015-03-12T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-16T13:00:00.0000000","n":0},{"k":1,"t":"2015-03-16T14:00:00.0000000","n":45},{"k":1,"t":"2015-03-16T15:00:00.0000000","n":0},{"k":1,"t":"2015-03-17T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-17T13:00:00.0000000","n":274},{"k":1,"t":"2015-03-17T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-17T15:00:00.0000000","n":55},{"k":1,"t":"2015-03-17T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T15:00:00.0000000","n":50},{"k":1,"t":"2015-03-18T16:00:00.0000000","n":50},{"k":1,"t":"2015-03-18T17:00:00.0000000","n":803},{"k":1,"t":"2015-03-18T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T20:00:00.0000000","n":611},{"k":1,"t":"2015-03-18T21:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T11:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T12:00:00.0000000","n":185},{"k":1,"t":"2015-03-19T13:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T15:00:00.0000000","n":158},{"k":1,"t":"2015-03-19T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-20T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-20T18:00:00.0000000","n":19},{"k":1,"t":"2015-03-20T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-23T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-23T19:00:00.0000000","n":67},{"k":1,"t":"2015-03-23T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-24T10:00:00.0000000","n":0},{"k":1,"t":"2015-03-24T11:00:00.0000000","n":134},{"k":1,"t":"2015-03-24T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T13:00:00.0000000","n":93},{"k":1,"t":"2015-03-25T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T15:00:00.0000000","n":121},{"k":1,"t":"2015-03-25T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T17:00:00.0000000","n":452},{"k":1,"t":"2015-03-25T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T13:00:00.0000000","n":731},{"k":1,"t":"2015-03-26T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T18:00:00.0000000","n":207},{"k":1,"t":"2015-03-26T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-30T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-30T20:00:00.0000000","n":83},{"k":1,"t":"2015-03-30T21:00:00.0000000","n":0},{"k":1,"t":"2015-03-31T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-31T19:00:00.0000000","n":56},{"k":1,"t":"2015-03-31T20:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T11:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T12:00:00.0000000","n":49},{"k":1,"t":"2015-04-01T13:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T16:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T17:00:00.0000000","n":94},{"k":1,"t":"2015-04-01T18:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T20:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T21:00:00.0000000","n":356},{"k":1,"t":"2015-04-01T22:00:00.0000000","n":0},{"k":1,"t":"2015-04-02T14:00:00.0000000","n":0},{"k":1,"t":"2015-04-02T15:00:00.0000000","n":136},{"k":1,"t":"2015-04-02T16:00:00.0000000","n":61},{"k":1,"t":"2015-04-02T17:00:00.0000000","n":640},{"k":1,"t":"2015-04-02T18:00:00.0000000","n":0},{"k":1,"t":"2015-04-03T11:00:00.0000000","n":0},{"k":1,"t":"2015-04-03T12:00:00.0000000","n":95},{"k":1,"t":"2015-04-03T13:00:00.0000000","n":78},{"k":1,"t":"2015-04-03T14:00:00.0000000","n":101},{"k":1,"t":"2015-04-03T15:00:00.0000000","n":0},{"k":1,"t":"2015-04-03T16:00:00.0000000","n":270},{"k":1,"t":"2015-04-03T17:00:00.0000000","n":21},{"k":1,"t":"2015-04-03T18:00:00.0000000","n":0},{"k":1,"t":"2015-04-07T14:00:00.0000000","n":0},{"k":1,"t":"2015-04-07T15:00:00.0000000","n":264},{"k":2,"t":"2015-01-10T01:00:00.0000000","n":90},{"k":2,"t":"2015-01-10T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-10T03:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T04:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T05:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T06:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T07:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T08:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T09:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T10:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T11:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T12:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T13:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T14:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T15:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T16:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T17:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T18:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T19:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T20:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T21:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T22:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T23:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T00:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T01:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T02:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T03:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T04:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T05:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T06:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T07:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T08:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T09:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T10:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T11:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T12:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T13:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T14:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T15:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T16:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T17:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T18:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T19:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T20:00:00.0000000","n":1163},{"k":2,"t":"2015-01-11T21:00:00.0000000","n":1163},{"k":2,"t":"2015-01-11T22:00:00.0000000","n":1173},{"k":2,"t":"2015-01-11T23:00:00.0000000","n":406},{"k":2,"t":"2015-01-12T00:00:00.0000000","n":2102},{"k":2,"t":"2015-01-12T01:00:00.0000000","n":1584},{"k":2,"t":"2015-01-12T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T13:00:00.0000000","n":116},{"k":2,"t":"2015-01-12T14:00:00.0000000","n":336},{"k":2,"t":"2015-01-12T15:00:00.0000000","n":412},{"k":2,"t":"2015-01-12T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T18:00:00.0000000","n":101},{"k":2,"t":"2015-01-12T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T20:00:00.0000000","n":124},{"k":2,"t":"2015-01-12T21:00:00.0000000","n":136},{"k":2,"t":"2015-01-12T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T14:00:00.0000000","n":146},{"k":2,"t":"2015-01-13T15:00:00.0000000","n":181},{"k":2,"t":"2015-01-13T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T17:00:00.0000000","n":44},{"k":2,"t":"2015-01-13T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T19:00:00.0000000","n":114},{"k":2,"t":"2015-01-13T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T14:00:00.0000000","n":66},{"k":2,"t":"2015-01-14T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T16:00:00.0000000","n":132},{"k":2,"t":"2015-01-14T17:00:00.0000000","n":294},{"k":2,"t":"2015-01-14T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T19:00:00.0000000","n":180},{"k":2,"t":"2015-01-14T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T00:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T01:00:00.0000000","n":136},{"k":2,"t":"2015-01-15T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T16:00:00.0000000","n":50},{"k":2,"t":"2015-01-15T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T21:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T22:00:00.0000000","n":80},{"k":2,"t":"2015-01-15T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-16T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-16T14:00:00.0000000","n":256},{"k":2,"t":"2015-01-16T15:00:00.0000000","n":529},{"k":2,"t":"2015-01-16T16:00:00.0000000","n":583},{"k":2,"t":"2015-01-16T17:00:00.0000000","n":529},{"k":2,"t":"2015-01-16T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-16T19:00:00.0000000","n":597},{"k":2,"t":"2015-01-16T20:00:00.0000000","n":769},{"k":2,"t":"2015-01-16T21:00:00.0000000","n":597},{"k":2,"t":"2015-01-16T22:00:00.0000000","n":597},{"k":2,"t":"2015-01-16T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-17T10:00:00.0000000","n":0},{"k":2,"t":"2015-01-17T11:00:00.0000000","n":120},{"k":2,"t":"2015-01-17T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T13:00:00.0000000","n":54},{"k":2,"t":"2015-01-19T14:00:00.0000000","n":116},{"k":2,"t":"2015-01-19T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T16:00:00.0000000","n":204},{"k":2,"t":"2015-01-19T17:00:00.0000000","n":49},{"k":2,"t":"2015-01-19T18:00:00.0000000","n":128},{"k":2,"t":"2015-01-19T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T20:00:00.0000000","n":50},{"k":2,"t":"2015-01-19T21:00:00.0000000","n":0},{"k":2,"t":"2015-01-20T09:00:00.0000000","n":0},{"k":2,"t":"2015-01-20T10:00:00.0000000","n":413},{"k":2,"t":"2015-01-20T11:00:00.0000000","n":990},{"k":2,"t":"2015-01-20T12:00:00.0000000","n":603},{"k":2,"t":"2015-01-20T13:00:00.0000000","n":603},{"k":2,"t":"2015-01-20T14:00:00.0000000","n":603},{"k":2,"t":"2015-01-20T15:00:00.0000000","n":717},{"k":2,"t":"2015-01-20T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-20T17:00:00.0000000","n":43},{"k":2,"t":"2015-01-20T18:00:00.0000000","n":90},{"k":2,"t":"2015-01-20T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-21T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-21T13:00:00.0000000","n":1268},{"k":2,"t":"2015-01-21T14:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T15:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T16:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T17:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T18:00:00.0000000","n":420},{"k":2,"t":"2015-01-21T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T01:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T02:00:00.0000000","n":68},{"k":2,"t":"2015-01-22T03:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T14:00:00.0000000","n":60},{"k":2,"t":"2015-01-22T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T19:00:00.0000000","n":45},{"k":2,"t":"2015-01-22T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-23T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-23T12:00:00.0000000","n":927},{"k":2,"t":"2015-01-23T13:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T14:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T15:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T16:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T17:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T18:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T19:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T20:00:00.0000000","n":713},{"k":2,"t":"2015-01-23T21:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-24T21:00:00.0000000","n":0},{"k":2,"t":"2015-01-24T22:00:00.0000000","n":46},{"k":2,"t":"2015-01-24T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T09:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T10:00:00.0000000","n":59},{"k":2,"t":"2015-01-26T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T13:00:00.0000000","n":927},{"k":2,"t":"2015-01-26T14:00:00.0000000","n":753},{"k":2,"t":"2015-01-26T15:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T16:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T17:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T18:00:00.0000000","n":801},{"k":2,"t":"2015-01-26T19:00:00.0000000","n":811},{"k":2,"t":"2015-01-26T20:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T21:00:00.0000000","n":727},{"k":2,"t":"2015-01-26T22:00:00.0000000","n":82},{"k":2,"t":"2015-01-26T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T03:00:00.0000000","n":52},{"k":2,"t":"2015-01-27T04:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T12:00:00.0000000","n":363},{"k":2,"t":"2015-01-27T13:00:00.0000000","n":58},{"k":2,"t":"2015-01-27T14:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T15:00:00.0000000","n":58},{"k":2,"t":"2015-01-27T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T18:00:00.0000000","n":44},{"k":2,"t":"2015-01-27T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T21:00:00.0000000","n":54},{"k":2,"t":"2015-01-27T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-28T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-28T13:00:00.0000000","n":326},{"k":2,"t":"2015-01-28T14:00:00.0000000","n":490},{"k":2,"t":"2015-01-28T15:00:00.0000000","n":66},{"k":2,"t":"2015-01-28T16:00:00.0000000","n":44},{"k":2,"t":"2015-01-28T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-28T18:00:00.0000000","n":168},{"k":2,"t":"2015-01-28T19:00:00.0000000","n":362},{"k":2,"t":"2015-01-28T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T00:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T01:00:00.0000000","n":54},{"k":2,"t":"2015-01-29T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T13:00:00.0000000","n":60},{"k":2,"t":"2015-01-29T14:00:00.0000000","n":152},{"k":2,"t":"2015-01-29T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T16:00:00.0000000","n":80},{"k":2,"t":"2015-01-29T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T18:00:00.0000000","n":70},{"k":2,"t":"2015-01-29T19:00:00.0000000","n":254},{"k":2,"t":"2015-01-29T20:00:00.0000000","n":171},{"k":2,"t":"2015-01-29T21:00:00.0000000","n":40},{"k":2,"t":"2015-01-29T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T00:00:00.0000000","n":150},{"k":2,"t":"2015-01-30T01:00:00.0000000","n":40},{"k":2,"t":"2015-01-30T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T07:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T08:00:00.0000000","n":52},{"k":2,"t":"2015-01-30T09:00:00.0000000","n":51},{"k":2,"t":"2015-01-30T10:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T12:00:00.0000000","n":243},{"k":2,"t":"2015-01-30T13:00:00.0000000","n":678},{"k":2,"t":"2015-01-30T14:00:00.0000000","n":678},{"k":2,"t":"2015-01-30T15:00:00.0000000","n":892},{"k":2,"t":"2015-01-30T16:00:00.0000000","n":852},{"k":2,"t":"2015-01-30T17:00:00.0000000","n":678},{"k":2,"t":"2015-01-30T18:00:00.0000000","n":741},{"k":2,"t":"2015-01-30T19:00:00.0000000","n":801},{"k":2,"t":"2015-01-30T20:00:00.0000000","n":709},{"k":2,"t":"2015-01-30T21:00:00.0000000","n":755},{"k":2,"t":"2015-01-30T22:00:00.0000000","n":98},{"k":2,"t":"2015-01-30T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T14:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T15:00:00.0000000","n":149},{"k":2,"t":"2015-02-01T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T18:00:00.0000000","n":62},{"k":2,"t":"2015-02-01T19:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T03:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T04:00:00.0000000","n":40},{"k":2,"t":"2015-02-02T05:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T13:00:00.0000000","n":889},{"k":2,"t":"2015-02-02T14:00:00.0000000","n":673},{"k":2,"t":"2015-02-02T15:00:00.0000000","n":44},{"k":2,"t":"2015-02-02T16:00:00.0000000","n":330},{"k":2,"t":"2015-02-02T17:00:00.0000000","n":766},{"k":2,"t":"2015-02-02T18:00:00.0000000","n":578},{"k":2,"t":"2015-02-02T19:00:00.0000000","n":750},{"k":2,"t":"2015-02-02T20:00:00.0000000","n":975},{"k":2,"t":"2015-02-02T21:00:00.0000000","n":692},{"k":2,"t":"2015-02-02T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T01:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T02:00:00.0000000","n":64},{"k":2,"t":"2015-02-03T03:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T13:00:00.0000000","n":311},{"k":2,"t":"2015-02-03T14:00:00.0000000","n":472},{"k":2,"t":"2015-02-03T15:00:00.0000000","n":210},{"k":2,"t":"2015-02-03T16:00:00.0000000","n":513},{"k":2,"t":"2015-02-03T17:00:00.0000000","n":184},{"k":2,"t":"2015-02-03T18:00:00.0000000","n":174},{"k":2,"t":"2015-02-03T19:00:00.0000000","n":152},{"k":2,"t":"2015-02-03T20:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T21:00:00.0000000","n":74},{"k":2,"t":"2015-02-03T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T00:00:00.0000000","n":44},{"k":2,"t":"2015-02-04T01:00:00.0000000","n":66},{"k":2,"t":"2015-02-04T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T13:00:00.0000000","n":225},{"k":2,"t":"2015-02-04T14:00:00.0000000","n":96},{"k":2,"t":"2015-02-04T15:00:00.0000000","n":234},{"k":2,"t":"2015-02-04T16:00:00.0000000","n":184},{"k":2,"t":"2015-02-04T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T18:00:00.0000000","n":580},{"k":2,"t":"2015-02-04T19:00:00.0000000","n":140},{"k":2,"t":"2015-02-04T20:00:00.0000000","n":204},{"k":2,"t":"2015-02-04T21:00:00.0000000","n":366},{"k":2,"t":"2015-02-04T22:00:00.0000000","n":62},{"k":2,"t":"2015-02-04T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T03:00:00.0000000","n":112},{"k":2,"t":"2015-02-05T04:00:00.0000000","n":64},{"k":2,"t":"2015-02-05T05:00:00.0000000","n":192},{"k":2,"t":"2015-02-05T06:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T13:00:00.0000000","n":227},{"k":2,"t":"2015-02-05T14:00:00.0000000","n":48},{"k":2,"t":"2015-02-05T15:00:00.0000000","n":341},{"k":2,"t":"2015-02-05T16:00:00.0000000","n":42},{"k":2,"t":"2015-02-05T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T18:00:00.0000000","n":431},{"k":2,"t":"2015-02-05T19:00:00.0000000","n":178},{"k":2,"t":"2015-02-05T20:00:00.0000000","n":48},{"k":2,"t":"2015-02-05T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-06T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-06T13:00:00.0000000","n":182},{"k":2,"t":"2015-02-06T14:00:00.0000000","n":98},{"k":2,"t":"2015-02-06T15:00:00.0000000","n":67},{"k":2,"t":"2015-02-06T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-06T17:00:00.0000000","n":54},{"k":2,"t":"2015-02-06T18:00:00.0000000","n":40},{"k":2,"t":"2015-02-06T19:00:00.0000000","n":164},{"k":2,"t":"2015-02-06T20:00:00.0000000","n":72},{"k":2,"t":"2015-02-06T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T03:00:00.0000000","n":90},{"k":2,"t":"2015-02-09T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T13:00:00.0000000","n":312},{"k":2,"t":"2015-02-09T14:00:00.0000000","n":56},{"k":2,"t":"2015-02-09T15:00:00.0000000","n":107},{"k":2,"t":"2015-02-09T16:00:00.0000000","n":96},{"k":2,"t":"2015-02-09T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T18:00:00.0000000","n":135},{"k":2,"t":"2015-02-09T19:00:00.0000000","n":171},{"k":2,"t":"2015-02-09T20:00:00.0000000","n":253},{"k":2,"t":"2015-02-09T21:00:00.0000000","n":260},{"k":2,"t":"2015-02-09T22:00:00.0000000","n":328},{"k":2,"t":"2015-02-09T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T00:00:00.0000000","n":169},{"k":2,"t":"2015-02-10T01:00:00.0000000","n":178},{"k":2,"t":"2015-02-10T02:00:00.0000000","n":81},{"k":2,"t":"2015-02-10T03:00:00.0000000","n":408},{"k":2,"t":"2015-02-10T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T05:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T06:00:00.0000000","n":184},{"k":2,"t":"2015-02-10T07:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T09:00:00.0000000","n":151},{"k":2,"t":"2015-02-10T10:00:00.0000000","n":192},{"k":2,"t":"2015-02-10T11:00:00.0000000","n":48},{"k":2,"t":"2015-02-10T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T14:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T15:00:00.0000000","n":84},{"k":2,"t":"2015-02-10T16:00:00.0000000","n":422},{"k":2,"t":"2015-02-10T17:00:00.0000000","n":360},{"k":2,"t":"2015-02-10T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T19:00:00.0000000","n":170},{"k":2,"t":"2015-02-10T20:00:00.0000000","n":475},{"k":2,"t":"2015-02-10T21:00:00.0000000","n":528},{"k":2,"t":"2015-02-10T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-11T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-11T18:00:00.0000000","n":512},{"k":2,"t":"2015-02-11T19:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T03:00:00.0000000","n":56},{"k":2,"t":"2015-02-12T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T13:00:00.0000000","n":82},{"k":2,"t":"2015-02-12T14:00:00.0000000","n":152},{"k":2,"t":"2015-02-12T15:00:00.0000000","n":42},{"k":2,"t":"2015-02-12T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T19:00:00.0000000","n":42},{"k":2,"t":"2015-02-12T20:00:00.0000000","n":82},{"k":2,"t":"2015-02-12T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T01:00:00.0000000","n":54},{"k":2,"t":"2015-02-13T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T14:00:00.0000000","n":41},{"k":2,"t":"2015-02-13T15:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T19:00:00.0000000","n":40},{"k":2,"t":"2015-02-13T20:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T14:00:00.0000000","n":84},{"k":2,"t":"2015-02-16T15:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T19:00:00.0000000","n":70},{"k":2,"t":"2015-02-16T20:00:00.0000000","n":64},{"k":2,"t":"2015-02-16T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T03:00:00.0000000","n":86},{"k":2,"t":"2015-02-17T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T14:00:00.0000000","n":188},{"k":2,"t":"2015-02-17T15:00:00.0000000","n":144},{"k":2,"t":"2015-02-17T16:00:00.0000000","n":490},{"k":2,"t":"2015-02-17T17:00:00.0000000","n":155},{"k":2,"t":"2015-02-17T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T19:00:00.0000000","n":398},{"k":2,"t":"2015-02-17T20:00:00.0000000","n":224},{"k":2,"t":"2015-02-17T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T09:00:00.0000000","n":886},{"k":2,"t":"2015-02-18T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T13:00:00.0000000","n":452},{"k":2,"t":"2015-02-18T14:00:00.0000000","n":44},{"k":2,"t":"2015-02-18T15:00:00.0000000","n":70},{"k":2,"t":"2015-02-18T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T17:00:00.0000000","n":98},{"k":2,"t":"2015-02-18T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T19:00:00.0000000","n":356},{"k":2,"t":"2015-02-18T20:00:00.0000000","n":44},{"k":2,"t":"2015-02-18T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-19T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T09:00:00.0000000","n":885},{"k":2,"t":"2015-02-19T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T11:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T12:00:00.0000000","n":859},{"k":2,"t":"2015-02-19T13:00:00.0000000","n":662},{"k":2,"t":"2015-02-19T14:00:00.0000000","n":662},{"k":2,"t":"2015-02-19T15:00:00.0000000","n":80},{"k":2,"t":"2015-02-19T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T18:00:00.0000000","n":140},{"k":2,"t":"2015-02-19T19:00:00.0000000","n":52},{"k":2,"t":"2015-02-19T20:00:00.0000000","n":62},{"k":2,"t":"2015-02-19T21:00:00.0000000","n":128},{"k":2,"t":"2015-02-19T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T23:00:00.0000000","n":47},{"k":2,"t":"2015-02-20T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T09:00:00.0000000","n":1806},{"k":2,"t":"2015-02-20T10:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T11:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T12:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T13:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T14:00:00.0000000","n":717},{"k":2,"t":"2015-02-20T15:00:00.0000000","n":732},{"k":2,"t":"2015-02-20T16:00:00.0000000","n":653},{"k":2,"t":"2015-02-20T17:00:00.0000000","n":735},{"k":2,"t":"2015-02-20T18:00:00.0000000","n":58},{"k":2,"t":"2015-02-20T19:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T20:00:00.0000000","n":44},{"k":2,"t":"2015-02-20T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-21T00:00:00.0000000","n":120},{"k":2,"t":"2015-02-21T01:00:00.0000000","n":147},{"k":2,"t":"2015-02-21T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T05:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T06:00:00.0000000","n":144},{"k":2,"t":"2015-02-21T07:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T09:00:00.0000000","n":887},{"k":2,"t":"2015-02-21T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-22T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T09:00:00.0000000","n":887},{"k":2,"t":"2015-02-22T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T17:00:00.0000000","n":65},{"k":2,"t":"2015-02-22T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T00:00:00.0000000","n":70},{"k":2,"t":"2015-02-23T01:00:00.0000000","n":134},{"k":2,"t":"2015-02-23T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T05:00:00.0000000","n":272},{"k":2,"t":"2015-02-23T06:00:00.0000000","n":622},{"k":2,"t":"2015-02-23T07:00:00.0000000","n":622},{"k":2,"t":"2015-02-23T08:00:00.0000000","n":795},{"k":2,"t":"2015-02-23T09:00:00.0000000","n":1615},{"k":2,"t":"2015-02-23T10:00:00.0000000","n":1017},{"k":2,"t":"2015-02-23T11:00:00.0000000","n":537},{"k":2,"t":"2015-02-23T12:00:00.0000000","n":537},{"k":2,"t":"2015-02-23T13:00:00.0000000","n":637},{"k":2,"t":"2015-02-23T14:00:00.0000000","n":575},{"k":2,"t":"2015-02-23T15:00:00.0000000","n":1345},{"k":2,"t":"2015-02-23T16:00:00.0000000","n":633},{"k":2,"t":"2015-02-23T17:00:00.0000000","n":158},{"k":2,"t":"2015-02-23T18:00:00.0000000","n":164},{"k":2,"t":"2015-02-23T19:00:00.0000000","n":240},{"k":2,"t":"2015-02-23T20:00:00.0000000","n":98},{"k":2,"t":"2015-02-23T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-24T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T09:00:00.0000000","n":887},{"k":2,"t":"2015-02-24T10:00:00.0000000","n":577},{"k":2,"t":"2015-02-24T11:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T15:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T16:00:00.0000000","n":62},{"k":2,"t":"2015-02-24T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-25T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T09:00:00.0000000","n":890},{"k":2,"t":"2015-02-25T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T17:00:00.0000000","n":138},{"k":2,"t":"2015-02-25T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T14:00:00.0000000","n":202},{"k":2,"t":"2015-02-26T15:00:00.0000000","n":40},{"k":2,"t":"2015-02-26T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T17:00:00.0000000","n":40},{"k":2,"t":"2015-02-26T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-27T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T19:00:00.0000000","n":172},{"k":2,"t":"2015-02-27T20:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-28T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-28T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-28T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-01T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-01T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-01T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-02T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T16:00:00.0000000","n":50},{"k":2,"t":"2015-03-02T17:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T19:00:00.0000000","n":42},{"k":2,"t":"2015-03-02T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T21:00:00.0000000","n":102},{"k":2,"t":"2015-03-02T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-03T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T08:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T09:00:00.0000000","n":891},{"k":2,"t":"2015-03-03T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T13:00:00.0000000","n":64},{"k":2,"t":"2015-03-03T14:00:00.0000000","n":491},{"k":2,"t":"2015-03-03T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T21:00:00.0000000","n":156},{"k":2,"t":"2015-03-03T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-04T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T02:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T03:00:00.0000000","n":54},{"k":2,"t":"2015-03-04T04:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T08:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T09:00:00.0000000","n":889},{"k":2,"t":"2015-03-04T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T13:00:00.0000000","n":224},{"k":2,"t":"2015-03-04T14:00:00.0000000","n":116},{"k":2,"t":"2015-03-04T15:00:00.0000000","n":90},{"k":2,"t":"2015-03-04T16:00:00.0000000","n":160},{"k":2,"t":"2015-03-04T17:00:00.0000000","n":61},{"k":2,"t":"2015-03-04T18:00:00.0000000","n":531},{"k":2,"t":"2015-03-04T19:00:00.0000000","n":326},{"k":2,"t":"2015-03-04T20:00:00.0000000","n":58},{"k":2,"t":"2015-03-04T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-05T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T17:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T18:00:00.0000000","n":62},{"k":2,"t":"2015-03-05T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T22:00:00.0000000","n":54},{"k":2,"t":"2015-03-05T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T15:00:00.0000000","n":56},{"k":2,"t":"2015-03-06T16:00:00.0000000","n":1120},{"k":2,"t":"2015-03-06T17:00:00.0000000","n":48},{"k":2,"t":"2015-03-06T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T19:00:00.0000000","n":198},{"k":2,"t":"2015-03-06T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T21:00:00.0000000","n":105},{"k":2,"t":"2015-03-06T22:00:00.0000000","n":52},{"k":2,"t":"2015-03-06T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-07T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T11:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T12:00:00.0000000","n":181},{"k":2,"t":"2015-03-09T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T16:00:00.0000000","n":280},{"k":2,"t":"2015-03-09T17:00:00.0000000","n":393},{"k":2,"t":"2015-03-09T18:00:00.0000000","n":123},{"k":2,"t":"2015-03-09T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T20:00:00.0000000","n":156},{"k":2,"t":"2015-03-09T21:00:00.0000000","n":47},{"k":2,"t":"2015-03-09T22:00:00.0000000","n":43},{"k":2,"t":"2015-03-09T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T13:00:00.0000000","n":286},{"k":2,"t":"2015-03-10T14:00:00.0000000","n":327},{"k":2,"t":"2015-03-10T15:00:00.0000000","n":307},{"k":2,"t":"2015-03-10T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T19:00:00.0000000","n":40},{"k":2,"t":"2015-03-10T20:00:00.0000000","n":40},{"k":2,"t":"2015-03-10T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T23:00:00.0000000","n":207},{"k":2,"t":"2015-03-11T00:00:00.0000000","n":96},{"k":2,"t":"2015-03-11T01:00:00.0000000","n":0},{"k":2,"t":"2015-03-11T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-11T13:00:00.0000000","n":139},{"k":2,"t":"2015-03-11T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T14:00:00.0000000","n":440},{"k":2,"t":"2015-03-12T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T20:00:00.0000000","n":175},{"k":2,"t":"2015-03-12T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-13T08:00:00.0000000","n":0},{"k":2,"t":"2015-03-13T09:00:00.0000000","n":166},{"k":2,"t":"2015-03-13T10:00:00.0000000","n":956},{"k":2,"t":"2015-03-13T11:00:00.0000000","n":979},{"k":2,"t":"2015-03-13T12:00:00.0000000","n":70},{"k":2,"t":"2015-03-13T13:00:00.0000000","n":244},{"k":2,"t":"2015-03-13T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-13T15:00:00.0000000","n":42},{"k":2,"t":"2015-03-13T16:00:00.0000000","n":48},{"k":2,"t":"2015-03-13T17:00:00.0000000","n":425},{"k":2,"t":"2015-03-13T18:00:00.0000000","n":491},{"k":2,"t":"2015-03-13T19:00:00.0000000","n":141},{"k":2,"t":"2015-03-13T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T15:00:00.0000000","n":46},{"k":2,"t":"2015-03-16T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T17:00:00.0000000","n":195},{"k":2,"t":"2015-03-16T18:00:00.0000000","n":1968},{"k":2,"t":"2015-03-16T19:00:00.0000000","n":48},{"k":2,"t":"2015-03-16T20:00:00.0000000","n":168},{"k":2,"t":"2015-03-16T21:00:00.0000000","n":225},{"k":2,"t":"2015-03-16T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T23:00:00.0000000","n":213},{"k":2,"t":"2015-03-17T00:00:00.0000000","n":343},{"k":2,"t":"2015-03-17T01:00:00.0000000","n":224},{"k":2,"t":"2015-03-17T02:00:00.0000000","n":216},{"k":2,"t":"2015-03-17T03:00:00.0000000","n":0},{"k":2,"t":"2015-03-17T04:00:00.0000000","n":213},{"k":2,"t":"2015-03-17T05:00:00.0000000","n":168},{"k":2,"t":"2015-03-17T06:00:00.0000000","n":360},{"k":2,"t":"2015-03-17T07:00:00.0000000","n":150},{"k":2,"t":"2015-03-17T08:00:00.0000000","n":264},{"k":2,"t":"2015-03-17T09:00:00.0000000","n":158},{"k":2,"t":"2015-03-17T10:00:00.0000000","n":153},{"k":2,"t":"2015-03-17T11:00:00.0000000","n":310},{"k":2,"t":"2015-03-17T12:00:00.0000000","n":348},{"k":2,"t":"2015-03-17T13:00:00.0000000","n":631},{"k":2,"t":"2015-03-17T14:00:00.0000000","n":237},{"k":2,"t":"2015-03-17T15:00:00.0000000","n":103},{"k":2,"t":"2015-03-17T16:00:00.0000000","n":289},{"k":2,"t":"2015-03-17T17:00:00.0000000","n":54},{"k":2,"t":"2015-03-17T18:00:00.0000000","n":42},{"k":2,"t":"2015-03-17T19:00:00.0000000","n":158},{"k":2,"t":"2015-03-17T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-17T21:00:00.0000000","n":241},{"k":2,"t":"2015-03-17T22:00:00.0000000","n":43},{"k":2,"t":"2015-03-17T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T14:00:00.0000000","n":88},{"k":2,"t":"2015-03-18T15:00:00.0000000","n":48},{"k":2,"t":"2015-03-18T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T17:00:00.0000000","n":533},{"k":2,"t":"2015-03-18T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T19:00:00.0000000","n":62},{"k":2,"t":"2015-03-18T20:00:00.0000000","n":498},{"k":2,"t":"2015-03-18T21:00:00.0000000","n":48},{"k":2,"t":"2015-03-18T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T23:00:00.0000000","n":528},{"k":2,"t":"2015-03-19T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T01:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T02:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T03:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T04:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T05:00:00.0000000","n":532},{"k":2,"t":"2015-03-19T06:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T07:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T08:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T09:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T11:00:00.0000000","n":1239},{"k":2,"t":"2015-03-19T12:00:00.0000000","n":754},{"k":2,"t":"2015-03-19T13:00:00.0000000","n":697},{"k":2,"t":"2015-03-19T14:00:00.0000000","n":537},{"k":2,"t":"2015-03-19T15:00:00.0000000","n":98},{"k":2,"t":"2015-03-19T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T17:00:00.0000000","n":584},{"k":2,"t":"2015-03-19T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T20:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T14:00:00.0000000","n":66},{"k":2,"t":"2015-03-20T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T16:00:00.0000000","n":42},{"k":2,"t":"2015-03-20T17:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-21T00:00:00.0000000","n":120},{"k":2,"t":"2015-03-21T01:00:00.0000000","n":144},{"k":2,"t":"2015-03-21T02:00:00.0000000","n":0},{"k":2,"t":"2015-03-21T05:00:00.0000000","n":0},{"k":2,"t":"2015-03-21T06:00:00.0000000","n":144},{"k":2,"t":"2015-03-21T07:00:00.0000000","n":0},{"k":2,"t":"2015-03-22T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-22T21:00:00.0000000","n":398},{"k":2,"t":"2015-03-22T22:00:00.0000000","n":602},{"k":2,"t":"2015-03-22T23:00:00.0000000","n":575},{"k":2,"t":"2015-03-23T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-23T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-23T19:00:00.0000000","n":41},{"k":2,"t":"2015-03-23T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T13:00:00.0000000","n":120},{"k":2,"t":"2015-03-24T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T16:00:00.0000000","n":40},{"k":2,"t":"2015-03-24T17:00:00.0000000","n":40},{"k":2,"t":"2015-03-24T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T19:00:00.0000000","n":363},{"k":2,"t":"2015-03-24T20:00:00.0000000","n":363},{"k":2,"t":"2015-03-24T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T23:00:00.0000000","n":42},{"k":2,"t":"2015-03-25T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T17:00:00.0000000","n":216},{"k":2,"t":"2015-03-25T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T20:00:00.0000000","n":82},{"k":2,"t":"2015-03-25T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T00:00:00.0000000","n":264},{"k":2,"t":"2015-03-26T01:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T13:00:00.0000000","n":257},{"k":2,"t":"2015-03-26T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T17:00:00.0000000","n":42},{"k":2,"t":"2015-03-26T18:00:00.0000000","n":42},{"k":2,"t":"2015-03-26T19:00:00.0000000","n":383},{"k":2,"t":"2015-03-26T20:00:00.0000000","n":382},{"k":2,"t":"2015-03-26T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-27T00:00:00.0000000","n":196},{"k":2,"t":"2015-03-27T01:00:00.0000000","n":41},{"k":2,"t":"2015-03-27T02:00:00.0000000","n":0},{"k":2,"t":"2015-03-27T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-27T11:00:00.0000000","n":104},{"k":2,"t":"2015-03-27T12:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T13:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T14:00:00.0000000","n":164},{"k":2,"t":"2015-03-27T15:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T16:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T17:00:00.0000000","n":143},{"k":2,"t":"2015-03-27T18:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-28T11:00:00.0000000","n":0},{"k":2,"t":"2015-03-28T12:00:00.0000000","n":85},{"k":2,"t":"2015-03-28T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-30T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-30T13:00:00.0000000","n":59},{"k":2,"t":"2015-03-30T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T13:00:00.0000000","n":64},{"k":2,"t":"2015-03-31T14:00:00.0000000","n":83},{"k":2,"t":"2015-03-31T15:00:00.0000000","n":62},{"k":2,"t":"2015-03-31T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T19:00:00.0000000","n":126},{"k":2,"t":"2015-03-31T20:00:00.0000000","n":0},{"k":2,"t":"2015-04-01T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-01T12:00:00.0000000","n":95},{"k":2,"t":"2015-04-01T13:00:00.0000000","n":95},{"k":2,"t":"2015-04-01T14:00:00.0000000","n":144},{"k":2,"t":"2015-04-01T15:00:00.0000000","n":137},{"k":2,"t":"2015-04-01T16:00:00.0000000","n":0},{"k":2,"t":"2015-04-01T17:00:00.0000000","n":462},{"k":2,"t":"2015-04-01T18:00:00.0000000","n":0},{"k":2,"t":"2015-04-02T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-02T12:00:00.0000000","n":177},{"k":2,"t":"2015-04-02T13:00:00.0000000","n":0},{"k":2,"t":"2015-04-03T12:00:00.0000000","n":0},{"k":2,"t":"2015-04-03T13:00:00.0000000","n":128},{"k":2,"t":"2015-04-03T14:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T12:00:00.0000000","n":40},{"k":2,"t":"2015-04-06T13:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T14:00:00.0000000","n":72},{"k":2,"t":"2015-04-06T15:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T16:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T17:00:00.0000000","n":130},{"k":2,"t":"2015-04-06T18:00:00.0000000","n":0},{"k":2,"t":"2015-04-07T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-07T12:00:00.0000000","n":176},{"k":2,"t":"2015-04-07T13:00:00.0000000","n":0},{"k":2,"t":"2015-04-08T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-08T12:00:00.0000000","n":66},{"k":3,"t":"2015-01-10T01:00:00.0000000","n":86},{"k":3,"t":"2015-01-10T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-10T03:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T04:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T05:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T06:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T07:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T08:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T09:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T10:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T11:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T12:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T13:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T14:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T15:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T16:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T17:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T18:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T19:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T20:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T21:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T22:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T23:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T00:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T01:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T02:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T03:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T04:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T05:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T06:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T07:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T08:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T09:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T10:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T11:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T12:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T13:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T14:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T15:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T16:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T17:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T18:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T19:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T20:00:00.0000000","n":1189},{"k":3,"t":"2015-01-11T21:00:00.0000000","n":1189},{"k":3,"t":"2015-01-11T22:00:00.0000000","n":1196},{"k":3,"t":"2015-01-11T23:00:00.0000000","n":429},{"k":3,"t":"2015-01-12T00:00:00.0000000","n":2118},{"k":3,"t":"2015-01-12T01:00:00.0000000","n":1590},{"k":3,"t":"2015-01-12T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T13:00:00.0000000","n":125},{"k":3,"t":"2015-01-12T14:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T15:00:00.0000000","n":76},{"k":3,"t":"2015-01-12T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T18:00:00.0000000","n":101},{"k":3,"t":"2015-01-12T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T13:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T14:00:00.0000000","n":52},{"k":3,"t":"2015-01-13T15:00:00.0000000","n":63},{"k":3,"t":"2015-01-13T16:00:00.0000000","n":62},{"k":3,"t":"2015-01-13T17:00:00.0000000","n":44},{"k":3,"t":"2015-01-13T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T19:00:00.0000000","n":230},{"k":3,"t":"2015-01-13T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T00:00:00.0000000","n":60},{"k":3,"t":"2015-01-14T01:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T13:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T14:00:00.0000000","n":66},{"k":3,"t":"2015-01-14T15:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T16:00:00.0000000","n":130},{"k":3,"t":"2015-01-14T17:00:00.0000000","n":294},{"k":3,"t":"2015-01-14T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T19:00:00.0000000","n":180},{"k":3,"t":"2015-01-14T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T00:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T01:00:00.0000000","n":136},{"k":3,"t":"2015-01-15T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T15:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T16:00:00.0000000","n":50},{"k":3,"t":"2015-01-15T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T20:00:00.0000000","n":40},{"k":3,"t":"2015-01-15T21:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T22:00:00.0000000","n":80},{"k":3,"t":"2015-01-15T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T13:00:00.0000000","n":62},{"k":3,"t":"2015-01-16T14:00:00.0000000","n":701},{"k":3,"t":"2015-01-16T15:00:00.0000000","n":628},{"k":3,"t":"2015-01-16T16:00:00.0000000","n":769},{"k":3,"t":"2015-01-16T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T19:00:00.0000000","n":606},{"k":3,"t":"2015-01-16T20:00:00.0000000","n":804},{"k":3,"t":"2015-01-16T21:00:00.0000000","n":606},{"k":3,"t":"2015-01-16T22:00:00.0000000","n":606},{"k":3,"t":"2015-01-16T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-17T10:00:00.0000000","n":0},{"k":3,"t":"2015-01-17T11:00:00.0000000","n":127},{"k":3,"t":"2015-01-17T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-18T14:00:00.0000000","n":0},{"k":3,"t":"2015-01-18T15:00:00.0000000","n":75},{"k":3,"t":"2015-01-18T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T13:00:00.0000000","n":54},{"k":3,"t":"2015-01-19T14:00:00.0000000","n":142},{"k":3,"t":"2015-01-19T15:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T16:00:00.0000000","n":220},{"k":3,"t":"2015-01-19T17:00:00.0000000","n":49},{"k":3,"t":"2015-01-19T18:00:00.0000000","n":128},{"k":3,"t":"2015-01-19T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T20:00:00.0000000","n":50},{"k":3,"t":"2015-01-19T21:00:00.0000000","n":0},{"k":3,"t":"2015-01-20T09:00:00.0000000","n":0},{"k":3,"t":"2015-01-20T10:00:00.0000000","n":823},{"k":3,"t":"2015-01-20T11:00:00.0000000","n":604},{"k":3,"t":"2015-01-20T12:00:00.0000000","n":604},{"k":3,"t":"2015-01-20T13:00:00.0000000","n":650},{"k":3,"t":"2015-01-20T14:00:00.0000000","n":604},{"k":3,"t":"2015-01-20T15:00:00.0000000","n":727},{"k":3,"t":"2015-01-20T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-20T17:00:00.0000000","n":43},{"k":3,"t":"2015-01-20T18:00:00.0000000","n":90},{"k":3,"t":"2015-01-20T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-21T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-21T13:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T14:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T15:00:00.0000000","n":875},{"k":3,"t":"2015-01-21T16:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T17:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T18:00:00.0000000","n":494},{"k":3,"t":"2015-01-21T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T01:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T02:00:00.0000000","n":68},{"k":3,"t":"2015-01-22T03:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T13:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T14:00:00.0000000","n":71},{"k":3,"t":"2015-01-22T15:00:00.0000000","n":171},{"k":3,"t":"2015-01-22T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T19:00:00.0000000","n":101},{"k":3,"t":"2015-01-22T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-23T11:00:00.0000000","n":0},{"k":3,"t":"2015-01-23T12:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T13:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T14:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T15:00:00.0000000","n":883},{"k":3,"t":"2015-01-23T16:00:00.0000000","n":1230},{"k":3,"t":"2015-01-23T17:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T18:00:00.0000000","n":882},{"k":3,"t":"2015-01-23T19:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T20:00:00.0000000","n":850},{"k":3,"t":"2015-01-23T21:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T22:00:00.0000000","n":112},{"k":3,"t":"2015-01-23T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-24T21:00:00.0000000","n":0},{"k":3,"t":"2015-01-24T22:00:00.0000000","n":46},{"k":3,"t":"2015-01-24T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-25T08:00:00.0000000","n":0},{"k":3,"t":"2015-01-25T09:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T10:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T11:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T12:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T13:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T14:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T15:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T16:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T17:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T18:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T19:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T20:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T21:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T22:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T23:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T00:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T01:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T02:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T03:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T04:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T05:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T06:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T07:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T08:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T09:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T10:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T11:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T12:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T13:00:00.0000000","n":1129},{"k":3,"t":"2015-01-26T14:00:00.0000000","n":1201},{"k":3,"t":"2015-01-26T15:00:00.0000000","n":1441},{"k":3,"t":"2015-01-26T16:00:00.0000000","n":834},{"k":3,"t":"2015-01-26T17:00:00.0000000","n":720},{"k":3,"t":"2015-01-26T18:00:00.0000000","n":840},{"k":3,"t":"2015-01-26T19:00:00.0000000","n":850},{"k":3,"t":"2015-01-26T20:00:00.0000000","n":720},{"k":3,"t":"2015-01-26T21:00:00.0000000","n":766},{"k":3,"t":"2015-01-26T22:00:00.0000000","n":132},{"k":3,"t":"2015-01-26T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T03:00:00.0000000","n":52},{"k":3,"t":"2015-01-27T04:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T11:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T12:00:00.0000000","n":444},{"k":3,"t":"2015-01-27T13:00:00.0000000","n":502},{"k":3,"t":"2015-01-27T14:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T15:00:00.0000000","n":58},{"k":3,"t":"2015-01-27T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T18:00:00.0000000","n":44},{"k":3,"t":"2015-01-27T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T21:00:00.0000000","n":68},{"k":3,"t":"2015-01-27T22:00:00.0000000","n":0},{"k":3,"t":"2015-01-28T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-28T13:00:00.0000000","n":326},{"k":3,"t":"2015-01-28T14:00:00.0000000","n":490},{"k":3,"t":"2015-01-28T15:00:00.0000000","n":136},{"k":3,"t":"2015-01-28T16:00:00.0000000","n":44},{"k":3,"t":"2015-01-28T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-28T18:00:00.0000000","n":168},{"k":3,"t":"2015-01-28T19:00:00.0000000","n":378},{"k":3,"t":"2015-01-28T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T00:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T01:00:00.0000000","n":54},{"k":3,"t":"2015-01-29T02:00:00.0000000","n":96},{"k":3,"t":"2015-01-29T03:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T13:00:00.0000000","n":60},{"k":3,"t":"2015-01-29T14:00:00.0000000","n":152},{"k":3,"t":"2015-01-29T15:00:00.0000000","n":303},{"k":3,"t":"2015-01-29T16:00:00.0000000","n":80},{"k":3,"t":"2015-01-29T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T18:00:00.0000000","n":70},{"k":3,"t":"2015-01-29T19:00:00.0000000","n":298},{"k":3,"t":"2015-01-29T20:00:00.0000000","n":171},{"k":3,"t":"2015-01-29T21:00:00.0000000","n":40},{"k":3,"t":"2015-01-29T22:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T00:00:00.0000000","n":150},{"k":3,"t":"2015-01-30T01:00:00.0000000","n":40},{"k":3,"t":"2015-01-30T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T07:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T08:00:00.0000000","n":130},{"k":3,"t":"2015-01-30T09:00:00.0000000","n":51},{"k":3,"t":"2015-01-30T10:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T11:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T12:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T13:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T14:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T15:00:00.0000000","n":905},{"k":3,"t":"2015-01-30T16:00:00.0000000","n":1073},{"k":3,"t":"2015-01-30T17:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T18:00:00.0000000","n":896},{"k":3,"t":"2015-01-30T19:00:00.0000000","n":836},{"k":3,"t":"2015-01-30T20:00:00.0000000","n":744},{"k":3,"t":"2015-01-30T21:00:00.0000000","n":946},{"k":3,"t":"2015-01-30T22:00:00.0000000","n":108},{"k":3,"t":"2015-01-30T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T15:00:00.0000000","n":149},{"k":3,"t":"2015-02-01T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T18:00:00.0000000","n":62},{"k":3,"t":"2015-02-01T19:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T03:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T04:00:00.0000000","n":40},{"k":3,"t":"2015-02-02T05:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T13:00:00.0000000","n":566},{"k":3,"t":"2015-02-02T14:00:00.0000000","n":558},{"k":3,"t":"2015-02-02T15:00:00.0000000","n":627},{"k":3,"t":"2015-02-02T16:00:00.0000000","n":741},{"k":3,"t":"2015-02-02T17:00:00.0000000","n":850},{"k":3,"t":"2015-02-02T18:00:00.0000000","n":662},{"k":3,"t":"2015-02-02T19:00:00.0000000","n":249},{"k":3,"t":"2015-02-02T20:00:00.0000000","n":857},{"k":3,"t":"2015-02-02T21:00:00.0000000","n":815},{"k":3,"t":"2015-02-02T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T01:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T02:00:00.0000000","n":64},{"k":3,"t":"2015-02-03T03:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T13:00:00.0000000","n":160},{"k":3,"t":"2015-02-03T14:00:00.0000000","n":502},{"k":3,"t":"2015-02-03T15:00:00.0000000","n":304},{"k":3,"t":"2015-02-03T16:00:00.0000000","n":482},{"k":3,"t":"2015-02-03T17:00:00.0000000","n":244},{"k":3,"t":"2015-02-03T18:00:00.0000000","n":174},{"k":3,"t":"2015-02-03T19:00:00.0000000","n":152},{"k":3,"t":"2015-02-03T20:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T21:00:00.0000000","n":74},{"k":3,"t":"2015-02-03T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T00:00:00.0000000","n":44},{"k":3,"t":"2015-02-04T01:00:00.0000000","n":66},{"k":3,"t":"2015-02-04T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T15:00:00.0000000","n":356},{"k":3,"t":"2015-02-04T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T18:00:00.0000000","n":468},{"k":3,"t":"2015-02-04T19:00:00.0000000","n":92},{"k":3,"t":"2015-02-04T20:00:00.0000000","n":108},{"k":3,"t":"2015-02-04T21:00:00.0000000","n":342},{"k":3,"t":"2015-02-04T22:00:00.0000000","n":62},{"k":3,"t":"2015-02-04T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T03:00:00.0000000","n":118},{"k":3,"t":"2015-02-05T04:00:00.0000000","n":64},{"k":3,"t":"2015-02-05T05:00:00.0000000","n":192},{"k":3,"t":"2015-02-05T06:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T13:00:00.0000000","n":120},{"k":3,"t":"2015-02-05T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T15:00:00.0000000","n":78},{"k":3,"t":"2015-02-05T16:00:00.0000000","n":42},{"k":3,"t":"2015-02-05T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T18:00:00.0000000","n":580},{"k":3,"t":"2015-02-05T19:00:00.0000000","n":0},{"k":3,"t":"2015-02-06T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-06T13:00:00.0000000","n":182},{"k":3,"t":"2015-02-06T14:00:00.0000000","n":98},{"k":3,"t":"2015-02-06T15:00:00.0000000","n":65},{"k":3,"t":"2015-02-06T16:00:00.0000000","n":209},{"k":3,"t":"2015-02-06T17:00:00.0000000","n":54},{"k":3,"t":"2015-02-06T18:00:00.0000000","n":40},{"k":3,"t":"2015-02-06T19:00:00.0000000","n":180},{"k":3,"t":"2015-02-06T20:00:00.0000000","n":72},{"k":3,"t":"2015-02-06T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-07T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-07T16:00:00.0000000","n":69},{"k":3,"t":"2015-02-07T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-08T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-08T16:00:00.0000000","n":69},{"k":3,"t":"2015-02-08T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T03:00:00.0000000","n":90},{"k":3,"t":"2015-02-09T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T13:00:00.0000000","n":256},{"k":3,"t":"2015-02-09T14:00:00.0000000","n":106},{"k":3,"t":"2015-02-09T15:00:00.0000000","n":192},{"k":3,"t":"2015-02-09T16:00:00.0000000","n":222},{"k":3,"t":"2015-02-09T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T19:00:00.0000000","n":44},{"k":3,"t":"2015-02-09T20:00:00.0000000","n":194},{"k":3,"t":"2015-02-09T21:00:00.0000000","n":212},{"k":3,"t":"2015-02-09T22:00:00.0000000","n":183},{"k":3,"t":"2015-02-09T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T03:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T09:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T10:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T11:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T15:00:00.0000000","n":159},{"k":3,"t":"2015-02-10T16:00:00.0000000","n":414},{"k":3,"t":"2015-02-10T17:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T19:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T20:00:00.0000000","n":268},{"k":3,"t":"2015-02-10T21:00:00.0000000","n":312},{"k":3,"t":"2015-02-10T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-11T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-11T15:00:00.0000000","n":168},{"k":3,"t":"2015-02-11T16:00:00.0000000","n":238},{"k":3,"t":"2015-02-11T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-11T18:00:00.0000000","n":558},{"k":3,"t":"2015-02-11T19:00:00.0000000","n":504},{"k":3,"t":"2015-02-11T20:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T03:00:00.0000000","n":56},{"k":3,"t":"2015-02-12T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T13:00:00.0000000","n":142},{"k":3,"t":"2015-02-12T14:00:00.0000000","n":166},{"k":3,"t":"2015-02-12T15:00:00.0000000","n":194},{"k":3,"t":"2015-02-12T16:00:00.0000000","n":317},{"k":3,"t":"2015-02-12T17:00:00.0000000","n":60},{"k":3,"t":"2015-02-12T18:00:00.0000000","n":122},{"k":3,"t":"2015-02-12T19:00:00.0000000","n":113},{"k":3,"t":"2015-02-12T20:00:00.0000000","n":686},{"k":3,"t":"2015-02-12T21:00:00.0000000","n":60},{"k":3,"t":"2015-02-12T22:00:00.0000000","n":76},{"k":3,"t":"2015-02-12T23:00:00.0000000","n":76},{"k":3,"t":"2015-02-13T00:00:00.0000000","n":44},{"k":3,"t":"2015-02-13T01:00:00.0000000","n":62},{"k":3,"t":"2015-02-13T02:00:00.0000000","n":79},{"k":3,"t":"2015-02-13T03:00:00.0000000","n":119},{"k":3,"t":"2015-02-13T04:00:00.0000000","n":48},{"k":3,"t":"2015-02-13T05:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T06:00:00.0000000","n":49},{"k":3,"t":"2015-02-13T07:00:00.0000000","n":56},{"k":3,"t":"2015-02-13T08:00:00.0000000","n":100},{"k":3,"t":"2015-02-13T09:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T14:00:00.0000000","n":41},{"k":3,"t":"2015-02-13T15:00:00.0000000","n":92},{"k":3,"t":"2015-02-13T16:00:00.0000000","n":210},{"k":3,"t":"2015-02-13T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T18:00:00.0000000","n":333},{"k":3,"t":"2015-02-13T19:00:00.0000000","n":373},{"k":3,"t":"2015-02-13T20:00:00.0000000","n":715},{"k":3,"t":"2015-02-13T21:00:00.0000000","n":438},{"k":3,"t":"2015-02-13T22:00:00.0000000","n":333},{"k":3,"t":"2015-02-13T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-14T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-14T15:00:00.0000000","n":50},{"k":3,"t":"2015-02-14T16:00:00.0000000","n":66},{"k":3,"t":"2015-02-14T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-15T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-15T16:00:00.0000000","n":140},{"k":3,"t":"2015-02-15T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T07:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T08:00:00.0000000","n":68},{"k":3,"t":"2015-02-16T09:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T14:00:00.0000000","n":84},{"k":3,"t":"2015-02-16T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T19:00:00.0000000","n":70},{"k":3,"t":"2015-02-16T20:00:00.0000000","n":64},{"k":3,"t":"2015-02-16T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T03:00:00.0000000","n":86},{"k":3,"t":"2015-02-17T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T13:00:00.0000000","n":363},{"k":3,"t":"2015-02-17T14:00:00.0000000","n":404},{"k":3,"t":"2015-02-17T15:00:00.0000000","n":78},{"k":3,"t":"2015-02-17T16:00:00.0000000","n":545},{"k":3,"t":"2015-02-17T17:00:00.0000000","n":56},{"k":3,"t":"2015-02-17T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T19:00:00.0000000","n":225},{"k":3,"t":"2015-02-17T20:00:00.0000000","n":116},{"k":3,"t":"2015-02-17T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T09:00:00.0000000","n":886},{"k":3,"t":"2015-02-18T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T13:00:00.0000000","n":655},{"k":3,"t":"2015-02-18T14:00:00.0000000","n":44},{"k":3,"t":"2015-02-18T15:00:00.0000000","n":201},{"k":3,"t":"2015-02-18T16:00:00.0000000","n":254},{"k":3,"t":"2015-02-18T17:00:00.0000000","n":98},{"k":3,"t":"2015-02-18T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T19:00:00.0000000","n":424},{"k":3,"t":"2015-02-18T20:00:00.0000000","n":44},{"k":3,"t":"2015-02-18T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T22:00:00.0000000","n":48},{"k":3,"t":"2015-02-18T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-19T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T09:00:00.0000000","n":885},{"k":3,"t":"2015-02-19T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T11:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T12:00:00.0000000","n":927},{"k":3,"t":"2015-02-19T13:00:00.0000000","n":910},{"k":3,"t":"2015-02-19T14:00:00.0000000","n":954},{"k":3,"t":"2015-02-19T15:00:00.0000000","n":418},{"k":3,"t":"2015-02-19T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T17:00:00.0000000","n":149},{"k":3,"t":"2015-02-19T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T19:00:00.0000000","n":52},{"k":3,"t":"2015-02-19T20:00:00.0000000","n":62},{"k":3,"t":"2015-02-19T21:00:00.0000000","n":139},{"k":3,"t":"2015-02-19T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T23:00:00.0000000","n":47},{"k":3,"t":"2015-02-20T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T09:00:00.0000000","n":1644},{"k":3,"t":"2015-02-20T10:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T11:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T12:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T13:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T14:00:00.0000000","n":813},{"k":3,"t":"2015-02-20T15:00:00.0000000","n":926},{"k":3,"t":"2015-02-20T16:00:00.0000000","n":808},{"k":3,"t":"2015-02-20T17:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T18:00:00.0000000","n":68},{"k":3,"t":"2015-02-20T19:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T20:00:00.0000000","n":60},{"k":3,"t":"2015-02-20T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-21T00:00:00.0000000","n":117},{"k":3,"t":"2015-02-21T01:00:00.0000000","n":143},{"k":3,"t":"2015-02-21T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T05:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T06:00:00.0000000","n":140},{"k":3,"t":"2015-02-21T07:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T09:00:00.0000000","n":887},{"k":3,"t":"2015-02-21T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-22T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T01:00:00.0000000","n":376},{"k":3,"t":"2015-02-22T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T09:00:00.0000000","n":887},{"k":3,"t":"2015-02-22T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T17:00:00.0000000","n":65},{"k":3,"t":"2015-02-22T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T00:00:00.0000000","n":80},{"k":3,"t":"2015-02-23T01:00:00.0000000","n":134},{"k":3,"t":"2015-02-23T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T05:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T06:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T07:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T08:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T09:00:00.0000000","n":1621},{"k":3,"t":"2015-02-23T10:00:00.0000000","n":702},{"k":3,"t":"2015-02-23T11:00:00.0000000","n":702},{"k":3,"t":"2015-02-23T12:00:00.0000000","n":826},{"k":3,"t":"2015-02-23T13:00:00.0000000","n":633},{"k":3,"t":"2015-02-23T14:00:00.0000000","n":633},{"k":3,"t":"2015-02-23T15:00:00.0000000","n":1171},{"k":3,"t":"2015-02-23T16:00:00.0000000","n":844},{"k":3,"t":"2015-02-23T17:00:00.0000000","n":633},{"k":3,"t":"2015-02-23T18:00:00.0000000","n":164},{"k":3,"t":"2015-02-23T19:00:00.0000000","n":246},{"k":3,"t":"2015-02-23T20:00:00.0000000","n":98},{"k":3,"t":"2015-02-23T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-24T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T01:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T02:00:00.0000000","n":235},{"k":3,"t":"2015-02-24T03:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T09:00:00.0000000","n":887},{"k":3,"t":"2015-02-24T10:00:00.0000000","n":580},{"k":3,"t":"2015-02-24T11:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T14:00:00.0000000","n":645},{"k":3,"t":"2015-02-24T15:00:00.0000000","n":88},{"k":3,"t":"2015-02-24T16:00:00.0000000","n":62},{"k":3,"t":"2015-02-24T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-25T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T09:00:00.0000000","n":890},{"k":3,"t":"2015-02-25T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T14:00:00.0000000","n":1083},{"k":3,"t":"2015-02-25T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T17:00:00.0000000","n":138},{"k":3,"t":"2015-02-25T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T14:00:00.0000000","n":208},{"k":3,"t":"2015-02-26T15:00:00.0000000","n":40},{"k":3,"t":"2015-02-26T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T17:00:00.0000000","n":40},{"k":3,"t":"2015-02-26T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-27T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T17:00:00.0000000","n":158},{"k":3,"t":"2015-02-27T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T19:00:00.0000000","n":172},{"k":3,"t":"2015-02-27T20:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-28T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-28T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-28T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-01T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-01T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-01T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-02T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T16:00:00.0000000","n":50},{"k":3,"t":"2015-03-02T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T19:00:00.0000000","n":61},{"k":3,"t":"2015-03-02T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T21:00:00.0000000","n":102},{"k":3,"t":"2015-03-02T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-03T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T04:00:00.0000000","n":57},{"k":3,"t":"2015-03-03T05:00:00.0000000","n":45},{"k":3,"t":"2015-03-03T06:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T08:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T09:00:00.0000000","n":891},{"k":3,"t":"2015-03-03T10:00:00.0000000","n":44},{"k":3,"t":"2015-03-03T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T13:00:00.0000000","n":64},{"k":3,"t":"2015-03-03T14:00:00.0000000","n":705},{"k":3,"t":"2015-03-03T15:00:00.0000000","n":532},{"k":3,"t":"2015-03-03T16:00:00.0000000","n":233},{"k":3,"t":"2015-03-03T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T20:00:00.0000000","n":48},{"k":3,"t":"2015-03-03T21:00:00.0000000","n":167},{"k":3,"t":"2015-03-03T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-04T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T03:00:00.0000000","n":54},{"k":3,"t":"2015-03-04T04:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T07:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T08:00:00.0000000","n":57},{"k":3,"t":"2015-03-04T09:00:00.0000000","n":889},{"k":3,"t":"2015-03-04T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T13:00:00.0000000","n":276},{"k":3,"t":"2015-03-04T14:00:00.0000000","n":68},{"k":3,"t":"2015-03-04T15:00:00.0000000","n":90},{"k":3,"t":"2015-03-04T16:00:00.0000000","n":160},{"k":3,"t":"2015-03-04T17:00:00.0000000","n":61},{"k":3,"t":"2015-03-04T18:00:00.0000000","n":563},{"k":3,"t":"2015-03-04T19:00:00.0000000","n":326},{"k":3,"t":"2015-03-04T20:00:00.0000000","n":58},{"k":3,"t":"2015-03-04T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-05T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T12:00:00.0000000","n":52},{"k":3,"t":"2015-03-05T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T18:00:00.0000000","n":502},{"k":3,"t":"2015-03-05T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T22:00:00.0000000","n":54},{"k":3,"t":"2015-03-05T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T03:00:00.0000000","n":74},{"k":3,"t":"2015-03-06T04:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T15:00:00.0000000","n":61},{"k":3,"t":"2015-03-06T16:00:00.0000000","n":1120},{"k":3,"t":"2015-03-06T17:00:00.0000000","n":48},{"k":3,"t":"2015-03-06T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T19:00:00.0000000","n":273},{"k":3,"t":"2015-03-06T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T21:00:00.0000000","n":105},{"k":3,"t":"2015-03-06T22:00:00.0000000","n":52},{"k":3,"t":"2015-03-06T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-07T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T11:00:00.0000000","n":45},{"k":3,"t":"2015-03-09T12:00:00.0000000","n":181},{"k":3,"t":"2015-03-09T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T15:00:00.0000000","n":70},{"k":3,"t":"2015-03-09T16:00:00.0000000","n":104},{"k":3,"t":"2015-03-09T17:00:00.0000000","n":393},{"k":3,"t":"2015-03-09T18:00:00.0000000","n":123},{"k":3,"t":"2015-03-09T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T20:00:00.0000000","n":156},{"k":3,"t":"2015-03-09T21:00:00.0000000","n":47},{"k":3,"t":"2015-03-09T22:00:00.0000000","n":43},{"k":3,"t":"2015-03-09T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T01:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T02:00:00.0000000","n":73},{"k":3,"t":"2015-03-10T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T13:00:00.0000000","n":302},{"k":3,"t":"2015-03-10T14:00:00.0000000","n":391},{"k":3,"t":"2015-03-10T15:00:00.0000000","n":307},{"k":3,"t":"2015-03-10T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T18:00:00.0000000","n":173},{"k":3,"t":"2015-03-10T19:00:00.0000000","n":138},{"k":3,"t":"2015-03-10T20:00:00.0000000","n":134},{"k":3,"t":"2015-03-10T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-11T00:00:00.0000000","n":48},{"k":3,"t":"2015-03-11T01:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T13:00:00.0000000","n":139},{"k":3,"t":"2015-03-11T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T20:00:00.0000000","n":549},{"k":3,"t":"2015-03-11T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T14:00:00.0000000","n":484},{"k":3,"t":"2015-03-12T15:00:00.0000000","n":46},{"k":3,"t":"2015-03-12T16:00:00.0000000","n":137},{"k":3,"t":"2015-03-12T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T20:00:00.0000000","n":175},{"k":3,"t":"2015-03-12T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-13T08:00:00.0000000","n":0},{"k":3,"t":"2015-03-13T09:00:00.0000000","n":184},{"k":3,"t":"2015-03-13T10:00:00.0000000","n":1076},{"k":3,"t":"2015-03-13T11:00:00.0000000","n":1216},{"k":3,"t":"2015-03-13T12:00:00.0000000","n":944},{"k":3,"t":"2015-03-13T13:00:00.0000000","n":630},{"k":3,"t":"2015-03-13T14:00:00.0000000","n":383},{"k":3,"t":"2015-03-13T15:00:00.0000000","n":425},{"k":3,"t":"2015-03-13T16:00:00.0000000","n":383},{"k":3,"t":"2015-03-13T17:00:00.0000000","n":808},{"k":3,"t":"2015-03-13T18:00:00.0000000","n":874},{"k":3,"t":"2015-03-13T19:00:00.0000000","n":524},{"k":3,"t":"2015-03-13T20:00:00.0000000","n":383},{"k":3,"t":"2015-03-13T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T15:00:00.0000000","n":87},{"k":3,"t":"2015-03-16T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T18:00:00.0000000","n":1755},{"k":3,"t":"2015-03-16T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T20:00:00.0000000","n":168},{"k":3,"t":"2015-03-16T21:00:00.0000000","n":96},{"k":3,"t":"2015-03-16T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T04:00:00.0000000","n":44},{"k":3,"t":"2015-03-17T05:00:00.0000000","n":48},{"k":3,"t":"2015-03-17T06:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T07:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T08:00:00.0000000","n":48},{"k":3,"t":"2015-03-17T09:00:00.0000000","n":48},{"k":3,"t":"2015-03-17T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T11:00:00.0000000","n":96},{"k":3,"t":"2015-03-17T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T13:00:00.0000000","n":819},{"k":3,"t":"2015-03-17T14:00:00.0000000","n":66},{"k":3,"t":"2015-03-17T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T16:00:00.0000000","n":49},{"k":3,"t":"2015-03-17T17:00:00.0000000","n":54},{"k":3,"t":"2015-03-17T18:00:00.0000000","n":42},{"k":3,"t":"2015-03-17T19:00:00.0000000","n":158},{"k":3,"t":"2015-03-17T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T22:00:00.0000000","n":43},{"k":3,"t":"2015-03-17T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T14:00:00.0000000","n":40},{"k":3,"t":"2015-03-18T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T17:00:00.0000000","n":56},{"k":3,"t":"2015-03-18T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T19:00:00.0000000","n":223},{"k":3,"t":"2015-03-18T20:00:00.0000000","n":812},{"k":3,"t":"2015-03-18T21:00:00.0000000","n":54},{"k":3,"t":"2015-03-18T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-19T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-19T11:00:00.0000000","n":697},{"k":3,"t":"2015-03-19T12:00:00.0000000","n":816},{"k":3,"t":"2015-03-19T13:00:00.0000000","n":697},{"k":3,"t":"2015-03-19T14:00:00.0000000","n":590},{"k":3,"t":"2015-03-19T15:00:00.0000000","n":98},{"k":3,"t":"2015-03-19T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-19T17:00:00.0000000","n":53},{"k":3,"t":"2015-03-19T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T14:00:00.0000000","n":66},{"k":3,"t":"2015-03-20T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T16:00:00.0000000","n":42},{"k":3,"t":"2015-03-20T17:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T18:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T19:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T20:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-21T00:00:00.0000000","n":117},{"k":3,"t":"2015-03-21T01:00:00.0000000","n":140},{"k":3,"t":"2015-03-21T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-21T05:00:00.0000000","n":0},{"k":3,"t":"2015-03-21T06:00:00.0000000","n":138},{"k":3,"t":"2015-03-21T07:00:00.0000000","n":0},{"k":3,"t":"2015-03-22T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-22T21:00:00.0000000","n":399},{"k":3,"t":"2015-03-22T22:00:00.0000000","n":639},{"k":3,"t":"2015-03-22T23:00:00.0000000","n":626},{"k":3,"t":"2015-03-23T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T13:00:00.0000000","n":68},{"k":3,"t":"2015-03-23T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T19:00:00.0000000","n":41},{"k":3,"t":"2015-03-23T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T12:00:00.0000000","n":63},{"k":3,"t":"2015-03-24T13:00:00.0000000","n":120},{"k":3,"t":"2015-03-24T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T16:00:00.0000000","n":40},{"k":3,"t":"2015-03-24T17:00:00.0000000","n":40},{"k":3,"t":"2015-03-24T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T19:00:00.0000000","n":369},{"k":3,"t":"2015-03-24T20:00:00.0000000","n":369},{"k":3,"t":"2015-03-24T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T23:00:00.0000000","n":42},{"k":3,"t":"2015-03-25T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T15:00:00.0000000","n":121},{"k":3,"t":"2015-03-25T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T17:00:00.0000000","n":783},{"k":3,"t":"2015-03-25T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T20:00:00.0000000","n":124},{"k":3,"t":"2015-03-25T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T00:00:00.0000000","n":264},{"k":3,"t":"2015-03-26T01:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T02:00:00.0000000","n":167},{"k":3,"t":"2015-03-26T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T13:00:00.0000000","n":505},{"k":3,"t":"2015-03-26T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T17:00:00.0000000","n":42},{"k":3,"t":"2015-03-26T18:00:00.0000000","n":249},{"k":3,"t":"2015-03-26T19:00:00.0000000","n":383},{"k":3,"t":"2015-03-26T20:00:00.0000000","n":382},{"k":3,"t":"2015-03-26T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-27T00:00:00.0000000","n":196},{"k":3,"t":"2015-03-27T01:00:00.0000000","n":41},{"k":3,"t":"2015-03-27T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-27T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-27T11:00:00.0000000","n":104},{"k":3,"t":"2015-03-27T12:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T13:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T14:00:00.0000000","n":184},{"k":3,"t":"2015-03-27T15:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T16:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T17:00:00.0000000","n":456},{"k":3,"t":"2015-03-27T18:00:00.0000000","n":456},{"k":3,"t":"2015-03-27T19:00:00.0000000","n":354},{"k":3,"t":"2015-03-27T20:00:00.0000000","n":354},{"k":3,"t":"2015-03-27T21:00:00.0000000","n":354},{"k":3,"t":"2015-03-27T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-28T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-28T12:00:00.0000000","n":85},{"k":3,"t":"2015-03-28T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-29T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-29T13:00:00.0000000","n":80},{"k":3,"t":"2015-03-29T14:00:00.0000000","n":56},{"k":3,"t":"2015-03-29T15:00:00.0000000","n":102},{"k":3,"t":"2015-03-29T16:00:00.0000000","n":140},{"k":3,"t":"2015-03-29T17:00:00.0000000","n":100},{"k":3,"t":"2015-03-29T18:00:00.0000000","n":156},{"k":3,"t":"2015-03-29T19:00:00.0000000","n":100},{"k":3,"t":"2015-03-29T20:00:00.0000000","n":124},{"k":3,"t":"2015-03-29T21:00:00.0000000","n":116},{"k":3,"t":"2015-03-29T22:00:00.0000000","n":72},{"k":3,"t":"2015-03-29T23:00:00.0000000","n":140},{"k":3,"t":"2015-03-30T00:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T01:00:00.0000000","n":132},{"k":3,"t":"2015-03-30T02:00:00.0000000","n":124},{"k":3,"t":"2015-03-30T03:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T04:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T05:00:00.0000000","n":116},{"k":3,"t":"2015-03-30T06:00:00.0000000","n":88},{"k":3,"t":"2015-03-30T07:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T08:00:00.0000000","n":116},{"k":3,"t":"2015-03-30T09:00:00.0000000","n":124},{"k":3,"t":"2015-03-30T10:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T11:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T12:00:00.0000000","n":116},{"k":3,"t":"2015-03-30T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T15:00:00.0000000","n":40},{"k":3,"t":"2015-03-30T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T20:00:00.0000000","n":90},{"k":3,"t":"2015-03-30T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T13:00:00.0000000","n":64},{"k":3,"t":"2015-03-31T14:00:00.0000000","n":143},{"k":3,"t":"2015-03-31T15:00:00.0000000","n":62},{"k":3,"t":"2015-03-31T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T19:00:00.0000000","n":237},{"k":3,"t":"2015-03-31T20:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T12:00:00.0000000","n":140},{"k":3,"t":"2015-04-01T13:00:00.0000000","n":95},{"k":3,"t":"2015-04-01T14:00:00.0000000","n":144},{"k":3,"t":"2015-04-01T15:00:00.0000000","n":277},{"k":3,"t":"2015-04-01T16:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T17:00:00.0000000","n":478},{"k":3,"t":"2015-04-01T18:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T23:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T00:00:00.0000000","n":74},{"k":3,"t":"2015-04-02T01:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T12:00:00.0000000","n":274},{"k":3,"t":"2015-04-02T13:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T14:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T15:00:00.0000000","n":134},{"k":3,"t":"2015-04-02T16:00:00.0000000","n":68},{"k":3,"t":"2015-04-02T17:00:00.0000000","n":264},{"k":3,"t":"2015-04-02T18:00:00.0000000","n":96},{"k":3,"t":"2015-04-02T19:00:00.0000000","n":0},{"k":3,"t":"2015-04-03T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-03T12:00:00.0000000","n":95},{"k":3,"t":"2015-04-03T13:00:00.0000000","n":206},{"k":3,"t":"2015-04-03T14:00:00.0000000","n":111},{"k":3,"t":"2015-04-03T15:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T12:00:00.0000000","n":40},{"k":3,"t":"2015-04-06T13:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T14:00:00.0000000","n":72},{"k":3,"t":"2015-04-06T15:00:00.0000000","n":58},{"k":3,"t":"2015-04-06T16:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T17:00:00.0000000","n":134},{"k":3,"t":"2015-04-06T18:00:00.0000000","n":0},{"k":3,"t":"2015-04-07T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-07T12:00:00.0000000","n":279},{"k":3,"t":"2015-04-07T13:00:00.0000000","n":0},{"k":3,"t":"2015-04-07T14:00:00.0000000","n":69},{"k":3,"t":"2015-04-07T15:00:00.0000000","n":264},{"k":3,"t":"2015-04-07T16:00:00.0000000","n":0},{"k":3,"t":"2015-04-08T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-08T12:00:00.0000000","n":66}]'); - return fixture; +/* global appendChartID */ +/* jscs:disable maximumLineLength*/ +/* jshint maxlen: false */ +function biggishData () { + return JSON.parse('[{"k":1,"t":"2015-01-09T20:00:00.0000000","n":65},{"k":1,"t":"2015-01-09T21:00:00.0000000","n":0},{"k":1,"t":"2015-01-09T22:00:00.0000000","n":22},{"k":1,"t":"2015-01-09T23:00:00.0000000","n":0},{"k":1,"t":"2015-01-12T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-12T20:00:00.0000000","n":49},{"k":1,"t":"2015-01-12T21:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T15:00:00.0000000","n":98},{"k":1,"t":"2015-01-13T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T18:00:00.0000000","n":0},{"k":1,"t":"2015-01-13T19:00:00.0000000","n":420},{"k":1,"t":"2015-01-13T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-14T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-14T17:00:00.0000000","n":62},{"k":1,"t":"2015-01-14T18:00:00.0000000","n":50},{"k":1,"t":"2015-01-14T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-15T13:00:00.0000000","n":0},{"k":1,"t":"2015-01-15T14:00:00.0000000","n":23},{"k":1,"t":"2015-01-15T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T16:00:00.0000000","n":91},{"k":1,"t":"2015-01-16T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-16T21:00:00.0000000","n":20},{"k":1,"t":"2015-01-16T22:00:00.0000000","n":0},{"k":1,"t":"2015-01-19T13:00:00.0000000","n":0},{"k":1,"t":"2015-01-19T14:00:00.0000000","n":64},{"k":1,"t":"2015-01-19T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-19T16:00:00.0000000","n":65},{"k":1,"t":"2015-01-19T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T15:00:00.0000000","n":57},{"k":1,"t":"2015-01-21T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-21T18:00:00.0000000","n":58},{"k":1,"t":"2015-01-21T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T13:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T14:00:00.0000000","n":59},{"k":1,"t":"2015-01-22T15:00:00.0000000","n":101},{"k":1,"t":"2015-01-22T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T18:00:00.0000000","n":0},{"k":1,"t":"2015-01-22T19:00:00.0000000","n":94},{"k":1,"t":"2015-01-22T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T15:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T16:00:00.0000000","n":355},{"k":1,"t":"2015-01-23T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T18:00:00.0000000","n":91},{"k":1,"t":"2015-01-23T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T21:00:00.0000000","n":0},{"k":1,"t":"2015-01-23T22:00:00.0000000","n":112},{"k":1,"t":"2015-01-23T23:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T15:00:00.0000000","n":107},{"k":1,"t":"2015-01-28T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T17:00:00.0000000","n":0},{"k":1,"t":"2015-01-28T18:00:00.0000000","n":78},{"k":1,"t":"2015-01-28T19:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T01:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T02:00:00.0000000","n":135},{"k":1,"t":"2015-01-29T03:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T15:00:00.0000000","n":67},{"k":1,"t":"2015-01-29T16:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T20:00:00.0000000","n":0},{"k":1,"t":"2015-01-29T21:00:00.0000000","n":49},{"k":1,"t":"2015-01-29T22:00:00.0000000","n":0},{"k":1,"t":"2015-01-30T14:00:00.0000000","n":0},{"k":1,"t":"2015-01-30T15:00:00.0000000","n":57},{"k":1,"t":"2015-01-30T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-03T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-03T16:00:00.0000000","n":144},{"k":1,"t":"2015-02-03T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T15:00:00.0000000","n":210},{"k":1,"t":"2015-02-04T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-04T18:00:00.0000000","n":62},{"k":1,"t":"2015-02-04T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T15:00:00.0000000","n":105},{"k":1,"t":"2015-02-05T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-05T18:00:00.0000000","n":277},{"k":1,"t":"2015-02-05T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-06T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-06T16:00:00.0000000","n":253},{"k":1,"t":"2015-02-06T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-06T18:00:00.0000000","n":64},{"k":1,"t":"2015-02-06T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-09T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-09T15:00:00.0000000","n":123},{"k":1,"t":"2015-02-09T16:00:00.0000000","n":184},{"k":1,"t":"2015-02-09T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T15:00:00.0000000","n":100},{"k":1,"t":"2015-02-10T16:00:00.0000000","n":271},{"k":1,"t":"2015-02-10T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-10T20:00:00.0000000","n":72},{"k":1,"t":"2015-02-10T21:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T15:00:00.0000000","n":117},{"k":1,"t":"2015-02-11T16:00:00.0000000","n":294},{"k":1,"t":"2015-02-11T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T18:00:00.0000000","n":61},{"k":1,"t":"2015-02-11T19:00:00.0000000","n":624},{"k":1,"t":"2015-02-11T20:00:00.0000000","n":0},{"k":1,"t":"2015-02-11T21:00:00.0000000","n":56},{"k":1,"t":"2015-02-11T22:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T15:00:00.0000000","n":112},{"k":1,"t":"2015-02-12T16:00:00.0000000","n":295},{"k":1,"t":"2015-02-12T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T18:00:00.0000000","n":0},{"k":1,"t":"2015-02-12T19:00:00.0000000","n":126},{"k":1,"t":"2015-02-12T20:00:00.0000000","n":513},{"k":1,"t":"2015-02-12T21:00:00.0000000","n":0},{"k":1,"t":"2015-02-13T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-13T15:00:00.0000000","n":198},{"k":1,"t":"2015-02-13T16:00:00.0000000","n":270},{"k":1,"t":"2015-02-13T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-13T18:00:00.0000000","n":528},{"k":1,"t":"2015-02-13T19:00:00.0000000","n":2274},{"k":1,"t":"2015-02-13T20:00:00.0000000","n":834},{"k":1,"t":"2015-02-13T21:00:00.0000000","n":372},{"k":1,"t":"2015-02-13T22:00:00.0000000","n":372},{"k":1,"t":"2015-02-13T23:00:00.0000000","n":0},{"k":1,"t":"2015-02-17T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-17T15:00:00.0000000","n":119},{"k":1,"t":"2015-02-17T16:00:00.0000000","n":135},{"k":1,"t":"2015-02-17T17:00:00.0000000","n":67},{"k":1,"t":"2015-02-17T18:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T15:00:00.0000000","n":137},{"k":1,"t":"2015-02-18T16:00:00.0000000","n":254},{"k":1,"t":"2015-02-18T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T18:00:00.0000000","n":64},{"k":1,"t":"2015-02-18T19:00:00.0000000","n":0},{"k":1,"t":"2015-02-18T20:00:00.0000000","n":53},{"k":1,"t":"2015-02-18T21:00:00.0000000","n":0},{"k":1,"t":"2015-02-19T12:00:00.0000000","n":0},{"k":1,"t":"2015-02-19T13:00:00.0000000","n":86},{"k":1,"t":"2015-02-19T14:00:00.0000000","n":210},{"k":1,"t":"2015-02-19T15:00:00.0000000","n":338},{"k":1,"t":"2015-02-19T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-19T17:00:00.0000000","n":149},{"k":1,"t":"2015-02-19T18:00:00.0000000","n":0},{"k":1,"t":"2015-02-20T11:00:00.0000000","n":0},{"k":1,"t":"2015-02-20T12:00:00.0000000","n":44},{"k":1,"t":"2015-02-20T13:00:00.0000000","n":0},{"k":1,"t":"2015-02-22T00:00:00.0000000","n":0},{"k":1,"t":"2015-02-22T01:00:00.0000000","n":458},{"k":1,"t":"2015-02-22T02:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T12:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T13:00:00.0000000","n":87},{"k":1,"t":"2015-02-23T14:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-23T16:00:00.0000000","n":142},{"k":1,"t":"2015-02-23T17:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T01:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T02:00:00.0000000","n":235},{"k":1,"t":"2015-02-24T03:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T13:00:00.0000000","n":0},{"k":1,"t":"2015-02-24T14:00:00.0000000","n":638},{"k":1,"t":"2015-02-24T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-25T11:00:00.0000000","n":0},{"k":1,"t":"2015-02-25T12:00:00.0000000","n":56},{"k":1,"t":"2015-02-25T13:00:00.0000000","n":0},{"k":1,"t":"2015-02-25T14:00:00.0000000","n":1083},{"k":1,"t":"2015-02-25T15:00:00.0000000","n":0},{"k":1,"t":"2015-02-27T16:00:00.0000000","n":0},{"k":1,"t":"2015-02-27T17:00:00.0000000","n":196},{"k":1,"t":"2015-02-27T18:00:00.0000000","n":50},{"k":1,"t":"2015-02-27T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T13:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T14:00:00.0000000","n":207},{"k":1,"t":"2015-03-03T15:00:00.0000000","n":526},{"k":1,"t":"2015-03-03T16:00:00.0000000","n":270},{"k":1,"t":"2015-03-03T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-03T21:00:00.0000000","n":60},{"k":1,"t":"2015-03-03T22:00:00.0000000","n":0},{"k":1,"t":"2015-03-04T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-04T18:00:00.0000000","n":62},{"k":1,"t":"2015-03-04T19:00:00.0000000","n":532},{"k":1,"t":"2015-03-04T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T18:00:00.0000000","n":478},{"k":1,"t":"2015-03-05T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-05T21:00:00.0000000","n":42},{"k":1,"t":"2015-03-05T22:00:00.0000000","n":0},{"k":1,"t":"2015-03-06T02:00:00.0000000","n":0},{"k":1,"t":"2015-03-06T03:00:00.0000000","n":74},{"k":1,"t":"2015-03-06T04:00:00.0000000","n":0},{"k":1,"t":"2015-03-09T11:00:00.0000000","n":0},{"k":1,"t":"2015-03-09T12:00:00.0000000","n":61},{"k":1,"t":"2015-03-09T13:00:00.0000000","n":107},{"k":1,"t":"2015-03-09T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-09T15:00:00.0000000","n":70},{"k":1,"t":"2015-03-09T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T01:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T02:00:00.0000000","n":70},{"k":1,"t":"2015-03-10T03:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-10T18:00:00.0000000","n":141},{"k":1,"t":"2015-03-10T19:00:00.0000000","n":98},{"k":1,"t":"2015-03-10T20:00:00.0000000","n":94},{"k":1,"t":"2015-03-10T21:00:00.0000000","n":0},{"k":1,"t":"2015-03-12T15:00:00.0000000","n":0},{"k":1,"t":"2015-03-12T16:00:00.0000000","n":133},{"k":1,"t":"2015-03-12T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-16T13:00:00.0000000","n":0},{"k":1,"t":"2015-03-16T14:00:00.0000000","n":45},{"k":1,"t":"2015-03-16T15:00:00.0000000","n":0},{"k":1,"t":"2015-03-17T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-17T13:00:00.0000000","n":274},{"k":1,"t":"2015-03-17T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-17T15:00:00.0000000","n":55},{"k":1,"t":"2015-03-17T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T15:00:00.0000000","n":50},{"k":1,"t":"2015-03-18T16:00:00.0000000","n":50},{"k":1,"t":"2015-03-18T17:00:00.0000000","n":803},{"k":1,"t":"2015-03-18T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-18T20:00:00.0000000","n":611},{"k":1,"t":"2015-03-18T21:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T11:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T12:00:00.0000000","n":185},{"k":1,"t":"2015-03-19T13:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-19T15:00:00.0000000","n":158},{"k":1,"t":"2015-03-19T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-20T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-20T18:00:00.0000000","n":19},{"k":1,"t":"2015-03-20T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-23T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-23T19:00:00.0000000","n":67},{"k":1,"t":"2015-03-23T20:00:00.0000000","n":0},{"k":1,"t":"2015-03-24T10:00:00.0000000","n":0},{"k":1,"t":"2015-03-24T11:00:00.0000000","n":134},{"k":1,"t":"2015-03-24T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T13:00:00.0000000","n":93},{"k":1,"t":"2015-03-25T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T15:00:00.0000000","n":121},{"k":1,"t":"2015-03-25T16:00:00.0000000","n":0},{"k":1,"t":"2015-03-25T17:00:00.0000000","n":452},{"k":1,"t":"2015-03-25T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T12:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T13:00:00.0000000","n":731},{"k":1,"t":"2015-03-26T14:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T17:00:00.0000000","n":0},{"k":1,"t":"2015-03-26T18:00:00.0000000","n":207},{"k":1,"t":"2015-03-26T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-30T19:00:00.0000000","n":0},{"k":1,"t":"2015-03-30T20:00:00.0000000","n":83},{"k":1,"t":"2015-03-30T21:00:00.0000000","n":0},{"k":1,"t":"2015-03-31T18:00:00.0000000","n":0},{"k":1,"t":"2015-03-31T19:00:00.0000000","n":56},{"k":1,"t":"2015-03-31T20:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T11:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T12:00:00.0000000","n":49},{"k":1,"t":"2015-04-01T13:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T16:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T17:00:00.0000000","n":94},{"k":1,"t":"2015-04-01T18:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T20:00:00.0000000","n":0},{"k":1,"t":"2015-04-01T21:00:00.0000000","n":356},{"k":1,"t":"2015-04-01T22:00:00.0000000","n":0},{"k":1,"t":"2015-04-02T14:00:00.0000000","n":0},{"k":1,"t":"2015-04-02T15:00:00.0000000","n":136},{"k":1,"t":"2015-04-02T16:00:00.0000000","n":61},{"k":1,"t":"2015-04-02T17:00:00.0000000","n":640},{"k":1,"t":"2015-04-02T18:00:00.0000000","n":0},{"k":1,"t":"2015-04-03T11:00:00.0000000","n":0},{"k":1,"t":"2015-04-03T12:00:00.0000000","n":95},{"k":1,"t":"2015-04-03T13:00:00.0000000","n":78},{"k":1,"t":"2015-04-03T14:00:00.0000000","n":101},{"k":1,"t":"2015-04-03T15:00:00.0000000","n":0},{"k":1,"t":"2015-04-03T16:00:00.0000000","n":270},{"k":1,"t":"2015-04-03T17:00:00.0000000","n":21},{"k":1,"t":"2015-04-03T18:00:00.0000000","n":0},{"k":1,"t":"2015-04-07T14:00:00.0000000","n":0},{"k":1,"t":"2015-04-07T15:00:00.0000000","n":264},{"k":2,"t":"2015-01-10T01:00:00.0000000","n":90},{"k":2,"t":"2015-01-10T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-10T03:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T04:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T05:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T06:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T07:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T08:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T09:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T10:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T11:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T12:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T13:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T14:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T15:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T16:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T17:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T18:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T19:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T20:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T21:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T22:00:00.0000000","n":2339},{"k":2,"t":"2015-01-10T23:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T00:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T01:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T02:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T03:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T04:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T05:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T06:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T07:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T08:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T09:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T10:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T11:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T12:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T13:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T14:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T15:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T16:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T17:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T18:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T19:00:00.0000000","n":2339},{"k":2,"t":"2015-01-11T20:00:00.0000000","n":1163},{"k":2,"t":"2015-01-11T21:00:00.0000000","n":1163},{"k":2,"t":"2015-01-11T22:00:00.0000000","n":1173},{"k":2,"t":"2015-01-11T23:00:00.0000000","n":406},{"k":2,"t":"2015-01-12T00:00:00.0000000","n":2102},{"k":2,"t":"2015-01-12T01:00:00.0000000","n":1584},{"k":2,"t":"2015-01-12T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T13:00:00.0000000","n":116},{"k":2,"t":"2015-01-12T14:00:00.0000000","n":336},{"k":2,"t":"2015-01-12T15:00:00.0000000","n":412},{"k":2,"t":"2015-01-12T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T18:00:00.0000000","n":101},{"k":2,"t":"2015-01-12T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-12T20:00:00.0000000","n":124},{"k":2,"t":"2015-01-12T21:00:00.0000000","n":136},{"k":2,"t":"2015-01-12T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T14:00:00.0000000","n":146},{"k":2,"t":"2015-01-13T15:00:00.0000000","n":181},{"k":2,"t":"2015-01-13T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T17:00:00.0000000","n":44},{"k":2,"t":"2015-01-13T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-13T19:00:00.0000000","n":114},{"k":2,"t":"2015-01-13T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T14:00:00.0000000","n":66},{"k":2,"t":"2015-01-14T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T16:00:00.0000000","n":132},{"k":2,"t":"2015-01-14T17:00:00.0000000","n":294},{"k":2,"t":"2015-01-14T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-14T19:00:00.0000000","n":180},{"k":2,"t":"2015-01-14T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T00:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T01:00:00.0000000","n":136},{"k":2,"t":"2015-01-15T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T16:00:00.0000000","n":50},{"k":2,"t":"2015-01-15T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T21:00:00.0000000","n":0},{"k":2,"t":"2015-01-15T22:00:00.0000000","n":80},{"k":2,"t":"2015-01-15T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-16T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-16T14:00:00.0000000","n":256},{"k":2,"t":"2015-01-16T15:00:00.0000000","n":529},{"k":2,"t":"2015-01-16T16:00:00.0000000","n":583},{"k":2,"t":"2015-01-16T17:00:00.0000000","n":529},{"k":2,"t":"2015-01-16T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-16T19:00:00.0000000","n":597},{"k":2,"t":"2015-01-16T20:00:00.0000000","n":769},{"k":2,"t":"2015-01-16T21:00:00.0000000","n":597},{"k":2,"t":"2015-01-16T22:00:00.0000000","n":597},{"k":2,"t":"2015-01-16T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-17T10:00:00.0000000","n":0},{"k":2,"t":"2015-01-17T11:00:00.0000000","n":120},{"k":2,"t":"2015-01-17T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T13:00:00.0000000","n":54},{"k":2,"t":"2015-01-19T14:00:00.0000000","n":116},{"k":2,"t":"2015-01-19T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T16:00:00.0000000","n":204},{"k":2,"t":"2015-01-19T17:00:00.0000000","n":49},{"k":2,"t":"2015-01-19T18:00:00.0000000","n":128},{"k":2,"t":"2015-01-19T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-19T20:00:00.0000000","n":50},{"k":2,"t":"2015-01-19T21:00:00.0000000","n":0},{"k":2,"t":"2015-01-20T09:00:00.0000000","n":0},{"k":2,"t":"2015-01-20T10:00:00.0000000","n":413},{"k":2,"t":"2015-01-20T11:00:00.0000000","n":990},{"k":2,"t":"2015-01-20T12:00:00.0000000","n":603},{"k":2,"t":"2015-01-20T13:00:00.0000000","n":603},{"k":2,"t":"2015-01-20T14:00:00.0000000","n":603},{"k":2,"t":"2015-01-20T15:00:00.0000000","n":717},{"k":2,"t":"2015-01-20T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-20T17:00:00.0000000","n":43},{"k":2,"t":"2015-01-20T18:00:00.0000000","n":90},{"k":2,"t":"2015-01-20T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-21T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-21T13:00:00.0000000","n":1268},{"k":2,"t":"2015-01-21T14:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T15:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T16:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T17:00:00.0000000","n":666},{"k":2,"t":"2015-01-21T18:00:00.0000000","n":420},{"k":2,"t":"2015-01-21T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T01:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T02:00:00.0000000","n":68},{"k":2,"t":"2015-01-22T03:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T13:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T14:00:00.0000000","n":60},{"k":2,"t":"2015-01-22T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T18:00:00.0000000","n":0},{"k":2,"t":"2015-01-22T19:00:00.0000000","n":45},{"k":2,"t":"2015-01-22T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-23T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-23T12:00:00.0000000","n":927},{"k":2,"t":"2015-01-23T13:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T14:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T15:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T16:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T17:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T18:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T19:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T20:00:00.0000000","n":713},{"k":2,"t":"2015-01-23T21:00:00.0000000","n":671},{"k":2,"t":"2015-01-23T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-24T21:00:00.0000000","n":0},{"k":2,"t":"2015-01-24T22:00:00.0000000","n":46},{"k":2,"t":"2015-01-24T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T09:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T10:00:00.0000000","n":59},{"k":2,"t":"2015-01-26T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-26T13:00:00.0000000","n":927},{"k":2,"t":"2015-01-26T14:00:00.0000000","n":753},{"k":2,"t":"2015-01-26T15:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T16:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T17:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T18:00:00.0000000","n":801},{"k":2,"t":"2015-01-26T19:00:00.0000000","n":811},{"k":2,"t":"2015-01-26T20:00:00.0000000","n":681},{"k":2,"t":"2015-01-26T21:00:00.0000000","n":727},{"k":2,"t":"2015-01-26T22:00:00.0000000","n":82},{"k":2,"t":"2015-01-26T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T03:00:00.0000000","n":52},{"k":2,"t":"2015-01-27T04:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T12:00:00.0000000","n":363},{"k":2,"t":"2015-01-27T13:00:00.0000000","n":58},{"k":2,"t":"2015-01-27T14:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T15:00:00.0000000","n":58},{"k":2,"t":"2015-01-27T16:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T18:00:00.0000000","n":44},{"k":2,"t":"2015-01-27T19:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-27T21:00:00.0000000","n":54},{"k":2,"t":"2015-01-27T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-28T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-28T13:00:00.0000000","n":326},{"k":2,"t":"2015-01-28T14:00:00.0000000","n":490},{"k":2,"t":"2015-01-28T15:00:00.0000000","n":66},{"k":2,"t":"2015-01-28T16:00:00.0000000","n":44},{"k":2,"t":"2015-01-28T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-28T18:00:00.0000000","n":168},{"k":2,"t":"2015-01-28T19:00:00.0000000","n":362},{"k":2,"t":"2015-01-28T20:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T00:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T01:00:00.0000000","n":54},{"k":2,"t":"2015-01-29T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T12:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T13:00:00.0000000","n":60},{"k":2,"t":"2015-01-29T14:00:00.0000000","n":152},{"k":2,"t":"2015-01-29T15:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T16:00:00.0000000","n":80},{"k":2,"t":"2015-01-29T17:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T18:00:00.0000000","n":70},{"k":2,"t":"2015-01-29T19:00:00.0000000","n":254},{"k":2,"t":"2015-01-29T20:00:00.0000000","n":171},{"k":2,"t":"2015-01-29T21:00:00.0000000","n":40},{"k":2,"t":"2015-01-29T22:00:00.0000000","n":0},{"k":2,"t":"2015-01-29T23:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T00:00:00.0000000","n":150},{"k":2,"t":"2015-01-30T01:00:00.0000000","n":40},{"k":2,"t":"2015-01-30T02:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T07:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T08:00:00.0000000","n":52},{"k":2,"t":"2015-01-30T09:00:00.0000000","n":51},{"k":2,"t":"2015-01-30T10:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T11:00:00.0000000","n":0},{"k":2,"t":"2015-01-30T12:00:00.0000000","n":243},{"k":2,"t":"2015-01-30T13:00:00.0000000","n":678},{"k":2,"t":"2015-01-30T14:00:00.0000000","n":678},{"k":2,"t":"2015-01-30T15:00:00.0000000","n":892},{"k":2,"t":"2015-01-30T16:00:00.0000000","n":852},{"k":2,"t":"2015-01-30T17:00:00.0000000","n":678},{"k":2,"t":"2015-01-30T18:00:00.0000000","n":741},{"k":2,"t":"2015-01-30T19:00:00.0000000","n":801},{"k":2,"t":"2015-01-30T20:00:00.0000000","n":709},{"k":2,"t":"2015-01-30T21:00:00.0000000","n":755},{"k":2,"t":"2015-01-30T22:00:00.0000000","n":98},{"k":2,"t":"2015-01-30T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T14:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T15:00:00.0000000","n":149},{"k":2,"t":"2015-02-01T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-01T18:00:00.0000000","n":62},{"k":2,"t":"2015-02-01T19:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T03:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T04:00:00.0000000","n":40},{"k":2,"t":"2015-02-02T05:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-02T13:00:00.0000000","n":889},{"k":2,"t":"2015-02-02T14:00:00.0000000","n":673},{"k":2,"t":"2015-02-02T15:00:00.0000000","n":44},{"k":2,"t":"2015-02-02T16:00:00.0000000","n":330},{"k":2,"t":"2015-02-02T17:00:00.0000000","n":766},{"k":2,"t":"2015-02-02T18:00:00.0000000","n":578},{"k":2,"t":"2015-02-02T19:00:00.0000000","n":750},{"k":2,"t":"2015-02-02T20:00:00.0000000","n":975},{"k":2,"t":"2015-02-02T21:00:00.0000000","n":692},{"k":2,"t":"2015-02-02T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T01:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T02:00:00.0000000","n":64},{"k":2,"t":"2015-02-03T03:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T13:00:00.0000000","n":311},{"k":2,"t":"2015-02-03T14:00:00.0000000","n":472},{"k":2,"t":"2015-02-03T15:00:00.0000000","n":210},{"k":2,"t":"2015-02-03T16:00:00.0000000","n":513},{"k":2,"t":"2015-02-03T17:00:00.0000000","n":184},{"k":2,"t":"2015-02-03T18:00:00.0000000","n":174},{"k":2,"t":"2015-02-03T19:00:00.0000000","n":152},{"k":2,"t":"2015-02-03T20:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T21:00:00.0000000","n":74},{"k":2,"t":"2015-02-03T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-03T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T00:00:00.0000000","n":44},{"k":2,"t":"2015-02-04T01:00:00.0000000","n":66},{"k":2,"t":"2015-02-04T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T13:00:00.0000000","n":225},{"k":2,"t":"2015-02-04T14:00:00.0000000","n":96},{"k":2,"t":"2015-02-04T15:00:00.0000000","n":234},{"k":2,"t":"2015-02-04T16:00:00.0000000","n":184},{"k":2,"t":"2015-02-04T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-04T18:00:00.0000000","n":580},{"k":2,"t":"2015-02-04T19:00:00.0000000","n":140},{"k":2,"t":"2015-02-04T20:00:00.0000000","n":204},{"k":2,"t":"2015-02-04T21:00:00.0000000","n":366},{"k":2,"t":"2015-02-04T22:00:00.0000000","n":62},{"k":2,"t":"2015-02-04T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T03:00:00.0000000","n":112},{"k":2,"t":"2015-02-05T04:00:00.0000000","n":64},{"k":2,"t":"2015-02-05T05:00:00.0000000","n":192},{"k":2,"t":"2015-02-05T06:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T13:00:00.0000000","n":227},{"k":2,"t":"2015-02-05T14:00:00.0000000","n":48},{"k":2,"t":"2015-02-05T15:00:00.0000000","n":341},{"k":2,"t":"2015-02-05T16:00:00.0000000","n":42},{"k":2,"t":"2015-02-05T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-05T18:00:00.0000000","n":431},{"k":2,"t":"2015-02-05T19:00:00.0000000","n":178},{"k":2,"t":"2015-02-05T20:00:00.0000000","n":48},{"k":2,"t":"2015-02-05T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-06T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-06T13:00:00.0000000","n":182},{"k":2,"t":"2015-02-06T14:00:00.0000000","n":98},{"k":2,"t":"2015-02-06T15:00:00.0000000","n":67},{"k":2,"t":"2015-02-06T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-06T17:00:00.0000000","n":54},{"k":2,"t":"2015-02-06T18:00:00.0000000","n":40},{"k":2,"t":"2015-02-06T19:00:00.0000000","n":164},{"k":2,"t":"2015-02-06T20:00:00.0000000","n":72},{"k":2,"t":"2015-02-06T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T03:00:00.0000000","n":90},{"k":2,"t":"2015-02-09T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T13:00:00.0000000","n":312},{"k":2,"t":"2015-02-09T14:00:00.0000000","n":56},{"k":2,"t":"2015-02-09T15:00:00.0000000","n":107},{"k":2,"t":"2015-02-09T16:00:00.0000000","n":96},{"k":2,"t":"2015-02-09T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-09T18:00:00.0000000","n":135},{"k":2,"t":"2015-02-09T19:00:00.0000000","n":171},{"k":2,"t":"2015-02-09T20:00:00.0000000","n":253},{"k":2,"t":"2015-02-09T21:00:00.0000000","n":260},{"k":2,"t":"2015-02-09T22:00:00.0000000","n":328},{"k":2,"t":"2015-02-09T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T00:00:00.0000000","n":169},{"k":2,"t":"2015-02-10T01:00:00.0000000","n":178},{"k":2,"t":"2015-02-10T02:00:00.0000000","n":81},{"k":2,"t":"2015-02-10T03:00:00.0000000","n":408},{"k":2,"t":"2015-02-10T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T05:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T06:00:00.0000000","n":184},{"k":2,"t":"2015-02-10T07:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T09:00:00.0000000","n":151},{"k":2,"t":"2015-02-10T10:00:00.0000000","n":192},{"k":2,"t":"2015-02-10T11:00:00.0000000","n":48},{"k":2,"t":"2015-02-10T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T14:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T15:00:00.0000000","n":84},{"k":2,"t":"2015-02-10T16:00:00.0000000","n":422},{"k":2,"t":"2015-02-10T17:00:00.0000000","n":360},{"k":2,"t":"2015-02-10T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-10T19:00:00.0000000","n":170},{"k":2,"t":"2015-02-10T20:00:00.0000000","n":475},{"k":2,"t":"2015-02-10T21:00:00.0000000","n":528},{"k":2,"t":"2015-02-10T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-11T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-11T18:00:00.0000000","n":512},{"k":2,"t":"2015-02-11T19:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T03:00:00.0000000","n":56},{"k":2,"t":"2015-02-12T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T13:00:00.0000000","n":82},{"k":2,"t":"2015-02-12T14:00:00.0000000","n":152},{"k":2,"t":"2015-02-12T15:00:00.0000000","n":42},{"k":2,"t":"2015-02-12T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-12T19:00:00.0000000","n":42},{"k":2,"t":"2015-02-12T20:00:00.0000000","n":82},{"k":2,"t":"2015-02-12T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T01:00:00.0000000","n":54},{"k":2,"t":"2015-02-13T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T14:00:00.0000000","n":41},{"k":2,"t":"2015-02-13T15:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-13T19:00:00.0000000","n":40},{"k":2,"t":"2015-02-13T20:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T14:00:00.0000000","n":84},{"k":2,"t":"2015-02-16T15:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-16T19:00:00.0000000","n":70},{"k":2,"t":"2015-02-16T20:00:00.0000000","n":64},{"k":2,"t":"2015-02-16T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T03:00:00.0000000","n":86},{"k":2,"t":"2015-02-17T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T14:00:00.0000000","n":188},{"k":2,"t":"2015-02-17T15:00:00.0000000","n":144},{"k":2,"t":"2015-02-17T16:00:00.0000000","n":490},{"k":2,"t":"2015-02-17T17:00:00.0000000","n":155},{"k":2,"t":"2015-02-17T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-17T19:00:00.0000000","n":398},{"k":2,"t":"2015-02-17T20:00:00.0000000","n":224},{"k":2,"t":"2015-02-17T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T09:00:00.0000000","n":886},{"k":2,"t":"2015-02-18T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T12:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T13:00:00.0000000","n":452},{"k":2,"t":"2015-02-18T14:00:00.0000000","n":44},{"k":2,"t":"2015-02-18T15:00:00.0000000","n":70},{"k":2,"t":"2015-02-18T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T17:00:00.0000000","n":98},{"k":2,"t":"2015-02-18T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T19:00:00.0000000","n":356},{"k":2,"t":"2015-02-18T20:00:00.0000000","n":44},{"k":2,"t":"2015-02-18T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-18T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-19T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T09:00:00.0000000","n":885},{"k":2,"t":"2015-02-19T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T11:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T12:00:00.0000000","n":859},{"k":2,"t":"2015-02-19T13:00:00.0000000","n":662},{"k":2,"t":"2015-02-19T14:00:00.0000000","n":662},{"k":2,"t":"2015-02-19T15:00:00.0000000","n":80},{"k":2,"t":"2015-02-19T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T18:00:00.0000000","n":140},{"k":2,"t":"2015-02-19T19:00:00.0000000","n":52},{"k":2,"t":"2015-02-19T20:00:00.0000000","n":62},{"k":2,"t":"2015-02-19T21:00:00.0000000","n":128},{"k":2,"t":"2015-02-19T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-19T23:00:00.0000000","n":47},{"k":2,"t":"2015-02-20T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T09:00:00.0000000","n":1806},{"k":2,"t":"2015-02-20T10:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T11:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T12:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T13:00:00.0000000","n":662},{"k":2,"t":"2015-02-20T14:00:00.0000000","n":717},{"k":2,"t":"2015-02-20T15:00:00.0000000","n":732},{"k":2,"t":"2015-02-20T16:00:00.0000000","n":653},{"k":2,"t":"2015-02-20T17:00:00.0000000","n":735},{"k":2,"t":"2015-02-20T18:00:00.0000000","n":58},{"k":2,"t":"2015-02-20T19:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T20:00:00.0000000","n":44},{"k":2,"t":"2015-02-20T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-20T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-21T00:00:00.0000000","n":120},{"k":2,"t":"2015-02-21T01:00:00.0000000","n":147},{"k":2,"t":"2015-02-21T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T05:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T06:00:00.0000000","n":144},{"k":2,"t":"2015-02-21T07:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T09:00:00.0000000","n":887},{"k":2,"t":"2015-02-21T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-21T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-22T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T09:00:00.0000000","n":887},{"k":2,"t":"2015-02-22T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T17:00:00.0000000","n":65},{"k":2,"t":"2015-02-22T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-22T23:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T00:00:00.0000000","n":70},{"k":2,"t":"2015-02-23T01:00:00.0000000","n":134},{"k":2,"t":"2015-02-23T02:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T04:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T05:00:00.0000000","n":272},{"k":2,"t":"2015-02-23T06:00:00.0000000","n":622},{"k":2,"t":"2015-02-23T07:00:00.0000000","n":622},{"k":2,"t":"2015-02-23T08:00:00.0000000","n":795},{"k":2,"t":"2015-02-23T09:00:00.0000000","n":1615},{"k":2,"t":"2015-02-23T10:00:00.0000000","n":1017},{"k":2,"t":"2015-02-23T11:00:00.0000000","n":537},{"k":2,"t":"2015-02-23T12:00:00.0000000","n":537},{"k":2,"t":"2015-02-23T13:00:00.0000000","n":637},{"k":2,"t":"2015-02-23T14:00:00.0000000","n":575},{"k":2,"t":"2015-02-23T15:00:00.0000000","n":1345},{"k":2,"t":"2015-02-23T16:00:00.0000000","n":633},{"k":2,"t":"2015-02-23T17:00:00.0000000","n":158},{"k":2,"t":"2015-02-23T18:00:00.0000000","n":164},{"k":2,"t":"2015-02-23T19:00:00.0000000","n":240},{"k":2,"t":"2015-02-23T20:00:00.0000000","n":98},{"k":2,"t":"2015-02-23T21:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-23T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-24T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T09:00:00.0000000","n":887},{"k":2,"t":"2015-02-24T10:00:00.0000000","n":577},{"k":2,"t":"2015-02-24T11:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T15:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T16:00:00.0000000","n":62},{"k":2,"t":"2015-02-24T17:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-24T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-25T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T08:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T09:00:00.0000000","n":890},{"k":2,"t":"2015-02-25T10:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-25T17:00:00.0000000","n":138},{"k":2,"t":"2015-02-25T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T13:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T14:00:00.0000000","n":202},{"k":2,"t":"2015-02-26T15:00:00.0000000","n":40},{"k":2,"t":"2015-02-26T16:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T17:00:00.0000000","n":40},{"k":2,"t":"2015-02-26T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-26T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-27T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T18:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T19:00:00.0000000","n":172},{"k":2,"t":"2015-02-27T20:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-27T23:00:00.0000000","n":43},{"k":2,"t":"2015-02-28T00:00:00.0000000","n":0},{"k":2,"t":"2015-02-28T22:00:00.0000000","n":0},{"k":2,"t":"2015-02-28T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-01T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-01T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-01T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-02T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T16:00:00.0000000","n":50},{"k":2,"t":"2015-03-02T17:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T19:00:00.0000000","n":42},{"k":2,"t":"2015-03-02T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T21:00:00.0000000","n":102},{"k":2,"t":"2015-03-02T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-02T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-03T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T08:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T09:00:00.0000000","n":891},{"k":2,"t":"2015-03-03T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T13:00:00.0000000","n":64},{"k":2,"t":"2015-03-03T14:00:00.0000000","n":491},{"k":2,"t":"2015-03-03T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T21:00:00.0000000","n":156},{"k":2,"t":"2015-03-03T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-03T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-04T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T02:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T03:00:00.0000000","n":54},{"k":2,"t":"2015-03-04T04:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T08:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T09:00:00.0000000","n":889},{"k":2,"t":"2015-03-04T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T13:00:00.0000000","n":224},{"k":2,"t":"2015-03-04T14:00:00.0000000","n":116},{"k":2,"t":"2015-03-04T15:00:00.0000000","n":90},{"k":2,"t":"2015-03-04T16:00:00.0000000","n":160},{"k":2,"t":"2015-03-04T17:00:00.0000000","n":61},{"k":2,"t":"2015-03-04T18:00:00.0000000","n":531},{"k":2,"t":"2015-03-04T19:00:00.0000000","n":326},{"k":2,"t":"2015-03-04T20:00:00.0000000","n":58},{"k":2,"t":"2015-03-04T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-04T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-05T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T17:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T18:00:00.0000000","n":62},{"k":2,"t":"2015-03-05T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-05T22:00:00.0000000","n":54},{"k":2,"t":"2015-03-05T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T15:00:00.0000000","n":56},{"k":2,"t":"2015-03-06T16:00:00.0000000","n":1120},{"k":2,"t":"2015-03-06T17:00:00.0000000","n":48},{"k":2,"t":"2015-03-06T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T19:00:00.0000000","n":198},{"k":2,"t":"2015-03-06T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-06T21:00:00.0000000","n":105},{"k":2,"t":"2015-03-06T22:00:00.0000000","n":52},{"k":2,"t":"2015-03-06T23:00:00.0000000","n":43},{"k":2,"t":"2015-03-07T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T11:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T12:00:00.0000000","n":181},{"k":2,"t":"2015-03-09T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T16:00:00.0000000","n":280},{"k":2,"t":"2015-03-09T17:00:00.0000000","n":393},{"k":2,"t":"2015-03-09T18:00:00.0000000","n":123},{"k":2,"t":"2015-03-09T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-09T20:00:00.0000000","n":156},{"k":2,"t":"2015-03-09T21:00:00.0000000","n":47},{"k":2,"t":"2015-03-09T22:00:00.0000000","n":43},{"k":2,"t":"2015-03-09T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T13:00:00.0000000","n":286},{"k":2,"t":"2015-03-10T14:00:00.0000000","n":327},{"k":2,"t":"2015-03-10T15:00:00.0000000","n":307},{"k":2,"t":"2015-03-10T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T19:00:00.0000000","n":40},{"k":2,"t":"2015-03-10T20:00:00.0000000","n":40},{"k":2,"t":"2015-03-10T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-10T23:00:00.0000000","n":207},{"k":2,"t":"2015-03-11T00:00:00.0000000","n":96},{"k":2,"t":"2015-03-11T01:00:00.0000000","n":0},{"k":2,"t":"2015-03-11T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-11T13:00:00.0000000","n":139},{"k":2,"t":"2015-03-11T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T14:00:00.0000000","n":440},{"k":2,"t":"2015-03-12T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-12T20:00:00.0000000","n":175},{"k":2,"t":"2015-03-12T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-13T08:00:00.0000000","n":0},{"k":2,"t":"2015-03-13T09:00:00.0000000","n":166},{"k":2,"t":"2015-03-13T10:00:00.0000000","n":956},{"k":2,"t":"2015-03-13T11:00:00.0000000","n":979},{"k":2,"t":"2015-03-13T12:00:00.0000000","n":70},{"k":2,"t":"2015-03-13T13:00:00.0000000","n":244},{"k":2,"t":"2015-03-13T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-13T15:00:00.0000000","n":42},{"k":2,"t":"2015-03-13T16:00:00.0000000","n":48},{"k":2,"t":"2015-03-13T17:00:00.0000000","n":425},{"k":2,"t":"2015-03-13T18:00:00.0000000","n":491},{"k":2,"t":"2015-03-13T19:00:00.0000000","n":141},{"k":2,"t":"2015-03-13T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T15:00:00.0000000","n":46},{"k":2,"t":"2015-03-16T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T17:00:00.0000000","n":195},{"k":2,"t":"2015-03-16T18:00:00.0000000","n":1968},{"k":2,"t":"2015-03-16T19:00:00.0000000","n":48},{"k":2,"t":"2015-03-16T20:00:00.0000000","n":168},{"k":2,"t":"2015-03-16T21:00:00.0000000","n":225},{"k":2,"t":"2015-03-16T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-16T23:00:00.0000000","n":213},{"k":2,"t":"2015-03-17T00:00:00.0000000","n":343},{"k":2,"t":"2015-03-17T01:00:00.0000000","n":224},{"k":2,"t":"2015-03-17T02:00:00.0000000","n":216},{"k":2,"t":"2015-03-17T03:00:00.0000000","n":0},{"k":2,"t":"2015-03-17T04:00:00.0000000","n":213},{"k":2,"t":"2015-03-17T05:00:00.0000000","n":168},{"k":2,"t":"2015-03-17T06:00:00.0000000","n":360},{"k":2,"t":"2015-03-17T07:00:00.0000000","n":150},{"k":2,"t":"2015-03-17T08:00:00.0000000","n":264},{"k":2,"t":"2015-03-17T09:00:00.0000000","n":158},{"k":2,"t":"2015-03-17T10:00:00.0000000","n":153},{"k":2,"t":"2015-03-17T11:00:00.0000000","n":310},{"k":2,"t":"2015-03-17T12:00:00.0000000","n":348},{"k":2,"t":"2015-03-17T13:00:00.0000000","n":631},{"k":2,"t":"2015-03-17T14:00:00.0000000","n":237},{"k":2,"t":"2015-03-17T15:00:00.0000000","n":103},{"k":2,"t":"2015-03-17T16:00:00.0000000","n":289},{"k":2,"t":"2015-03-17T17:00:00.0000000","n":54},{"k":2,"t":"2015-03-17T18:00:00.0000000","n":42},{"k":2,"t":"2015-03-17T19:00:00.0000000","n":158},{"k":2,"t":"2015-03-17T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-17T21:00:00.0000000","n":241},{"k":2,"t":"2015-03-17T22:00:00.0000000","n":43},{"k":2,"t":"2015-03-17T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T14:00:00.0000000","n":88},{"k":2,"t":"2015-03-18T15:00:00.0000000","n":48},{"k":2,"t":"2015-03-18T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T17:00:00.0000000","n":533},{"k":2,"t":"2015-03-18T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T19:00:00.0000000","n":62},{"k":2,"t":"2015-03-18T20:00:00.0000000","n":498},{"k":2,"t":"2015-03-18T21:00:00.0000000","n":48},{"k":2,"t":"2015-03-18T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-18T23:00:00.0000000","n":528},{"k":2,"t":"2015-03-19T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T01:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T02:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T03:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T04:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T05:00:00.0000000","n":532},{"k":2,"t":"2015-03-19T06:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T07:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T08:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T09:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T11:00:00.0000000","n":1239},{"k":2,"t":"2015-03-19T12:00:00.0000000","n":754},{"k":2,"t":"2015-03-19T13:00:00.0000000","n":697},{"k":2,"t":"2015-03-19T14:00:00.0000000","n":537},{"k":2,"t":"2015-03-19T15:00:00.0000000","n":98},{"k":2,"t":"2015-03-19T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T17:00:00.0000000","n":584},{"k":2,"t":"2015-03-19T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-19T20:00:00.0000000","n":48},{"k":2,"t":"2015-03-19T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T14:00:00.0000000","n":66},{"k":2,"t":"2015-03-20T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T16:00:00.0000000","n":42},{"k":2,"t":"2015-03-20T17:00:00.0000000","n":0},{"k":2,"t":"2015-03-20T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-21T00:00:00.0000000","n":120},{"k":2,"t":"2015-03-21T01:00:00.0000000","n":144},{"k":2,"t":"2015-03-21T02:00:00.0000000","n":0},{"k":2,"t":"2015-03-21T05:00:00.0000000","n":0},{"k":2,"t":"2015-03-21T06:00:00.0000000","n":144},{"k":2,"t":"2015-03-21T07:00:00.0000000","n":0},{"k":2,"t":"2015-03-22T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-22T21:00:00.0000000","n":398},{"k":2,"t":"2015-03-22T22:00:00.0000000","n":602},{"k":2,"t":"2015-03-22T23:00:00.0000000","n":575},{"k":2,"t":"2015-03-23T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-23T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-23T19:00:00.0000000","n":41},{"k":2,"t":"2015-03-23T20:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T13:00:00.0000000","n":120},{"k":2,"t":"2015-03-24T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T15:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T16:00:00.0000000","n":40},{"k":2,"t":"2015-03-24T17:00:00.0000000","n":40},{"k":2,"t":"2015-03-24T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T19:00:00.0000000","n":363},{"k":2,"t":"2015-03-24T20:00:00.0000000","n":363},{"k":2,"t":"2015-03-24T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T22:00:00.0000000","n":0},{"k":2,"t":"2015-03-24T23:00:00.0000000","n":42},{"k":2,"t":"2015-03-25T00:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T17:00:00.0000000","n":216},{"k":2,"t":"2015-03-25T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T20:00:00.0000000","n":82},{"k":2,"t":"2015-03-25T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-25T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T00:00:00.0000000","n":264},{"k":2,"t":"2015-03-26T01:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T13:00:00.0000000","n":257},{"k":2,"t":"2015-03-26T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T17:00:00.0000000","n":42},{"k":2,"t":"2015-03-26T18:00:00.0000000","n":42},{"k":2,"t":"2015-03-26T19:00:00.0000000","n":383},{"k":2,"t":"2015-03-26T20:00:00.0000000","n":382},{"k":2,"t":"2015-03-26T21:00:00.0000000","n":0},{"k":2,"t":"2015-03-26T23:00:00.0000000","n":0},{"k":2,"t":"2015-03-27T00:00:00.0000000","n":196},{"k":2,"t":"2015-03-27T01:00:00.0000000","n":41},{"k":2,"t":"2015-03-27T02:00:00.0000000","n":0},{"k":2,"t":"2015-03-27T10:00:00.0000000","n":0},{"k":2,"t":"2015-03-27T11:00:00.0000000","n":104},{"k":2,"t":"2015-03-27T12:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T13:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T14:00:00.0000000","n":164},{"k":2,"t":"2015-03-27T15:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T16:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T17:00:00.0000000","n":143},{"k":2,"t":"2015-03-27T18:00:00.0000000","n":82},{"k":2,"t":"2015-03-27T19:00:00.0000000","n":0},{"k":2,"t":"2015-03-28T11:00:00.0000000","n":0},{"k":2,"t":"2015-03-28T12:00:00.0000000","n":85},{"k":2,"t":"2015-03-28T13:00:00.0000000","n":0},{"k":2,"t":"2015-03-30T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-30T13:00:00.0000000","n":59},{"k":2,"t":"2015-03-30T14:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T12:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T13:00:00.0000000","n":64},{"k":2,"t":"2015-03-31T14:00:00.0000000","n":83},{"k":2,"t":"2015-03-31T15:00:00.0000000","n":62},{"k":2,"t":"2015-03-31T16:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T18:00:00.0000000","n":0},{"k":2,"t":"2015-03-31T19:00:00.0000000","n":126},{"k":2,"t":"2015-03-31T20:00:00.0000000","n":0},{"k":2,"t":"2015-04-01T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-01T12:00:00.0000000","n":95},{"k":2,"t":"2015-04-01T13:00:00.0000000","n":95},{"k":2,"t":"2015-04-01T14:00:00.0000000","n":144},{"k":2,"t":"2015-04-01T15:00:00.0000000","n":137},{"k":2,"t":"2015-04-01T16:00:00.0000000","n":0},{"k":2,"t":"2015-04-01T17:00:00.0000000","n":462},{"k":2,"t":"2015-04-01T18:00:00.0000000","n":0},{"k":2,"t":"2015-04-02T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-02T12:00:00.0000000","n":177},{"k":2,"t":"2015-04-02T13:00:00.0000000","n":0},{"k":2,"t":"2015-04-03T12:00:00.0000000","n":0},{"k":2,"t":"2015-04-03T13:00:00.0000000","n":128},{"k":2,"t":"2015-04-03T14:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T12:00:00.0000000","n":40},{"k":2,"t":"2015-04-06T13:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T14:00:00.0000000","n":72},{"k":2,"t":"2015-04-06T15:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T16:00:00.0000000","n":0},{"k":2,"t":"2015-04-06T17:00:00.0000000","n":130},{"k":2,"t":"2015-04-06T18:00:00.0000000","n":0},{"k":2,"t":"2015-04-07T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-07T12:00:00.0000000","n":176},{"k":2,"t":"2015-04-07T13:00:00.0000000","n":0},{"k":2,"t":"2015-04-08T11:00:00.0000000","n":0},{"k":2,"t":"2015-04-08T12:00:00.0000000","n":66},{"k":3,"t":"2015-01-10T01:00:00.0000000","n":86},{"k":3,"t":"2015-01-10T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-10T03:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T04:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T05:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T06:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T07:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T08:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T09:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T10:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T11:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T12:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T13:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T14:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T15:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T16:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T17:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T18:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T19:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T20:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T21:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T22:00:00.0000000","n":2334},{"k":3,"t":"2015-01-10T23:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T00:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T01:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T02:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T03:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T04:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T05:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T06:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T07:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T08:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T09:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T10:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T11:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T12:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T13:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T14:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T15:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T16:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T17:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T18:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T19:00:00.0000000","n":2334},{"k":3,"t":"2015-01-11T20:00:00.0000000","n":1189},{"k":3,"t":"2015-01-11T21:00:00.0000000","n":1189},{"k":3,"t":"2015-01-11T22:00:00.0000000","n":1196},{"k":3,"t":"2015-01-11T23:00:00.0000000","n":429},{"k":3,"t":"2015-01-12T00:00:00.0000000","n":2118},{"k":3,"t":"2015-01-12T01:00:00.0000000","n":1590},{"k":3,"t":"2015-01-12T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T13:00:00.0000000","n":125},{"k":3,"t":"2015-01-12T14:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T15:00:00.0000000","n":76},{"k":3,"t":"2015-01-12T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-12T18:00:00.0000000","n":101},{"k":3,"t":"2015-01-12T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T13:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T14:00:00.0000000","n":52},{"k":3,"t":"2015-01-13T15:00:00.0000000","n":63},{"k":3,"t":"2015-01-13T16:00:00.0000000","n":62},{"k":3,"t":"2015-01-13T17:00:00.0000000","n":44},{"k":3,"t":"2015-01-13T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T19:00:00.0000000","n":230},{"k":3,"t":"2015-01-13T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-13T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T00:00:00.0000000","n":60},{"k":3,"t":"2015-01-14T01:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T13:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T14:00:00.0000000","n":66},{"k":3,"t":"2015-01-14T15:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T16:00:00.0000000","n":130},{"k":3,"t":"2015-01-14T17:00:00.0000000","n":294},{"k":3,"t":"2015-01-14T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-14T19:00:00.0000000","n":180},{"k":3,"t":"2015-01-14T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T00:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T01:00:00.0000000","n":136},{"k":3,"t":"2015-01-15T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T15:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T16:00:00.0000000","n":50},{"k":3,"t":"2015-01-15T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T20:00:00.0000000","n":40},{"k":3,"t":"2015-01-15T21:00:00.0000000","n":0},{"k":3,"t":"2015-01-15T22:00:00.0000000","n":80},{"k":3,"t":"2015-01-15T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T13:00:00.0000000","n":62},{"k":3,"t":"2015-01-16T14:00:00.0000000","n":701},{"k":3,"t":"2015-01-16T15:00:00.0000000","n":628},{"k":3,"t":"2015-01-16T16:00:00.0000000","n":769},{"k":3,"t":"2015-01-16T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-16T19:00:00.0000000","n":606},{"k":3,"t":"2015-01-16T20:00:00.0000000","n":804},{"k":3,"t":"2015-01-16T21:00:00.0000000","n":606},{"k":3,"t":"2015-01-16T22:00:00.0000000","n":606},{"k":3,"t":"2015-01-16T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-17T10:00:00.0000000","n":0},{"k":3,"t":"2015-01-17T11:00:00.0000000","n":127},{"k":3,"t":"2015-01-17T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-18T14:00:00.0000000","n":0},{"k":3,"t":"2015-01-18T15:00:00.0000000","n":75},{"k":3,"t":"2015-01-18T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T13:00:00.0000000","n":54},{"k":3,"t":"2015-01-19T14:00:00.0000000","n":142},{"k":3,"t":"2015-01-19T15:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T16:00:00.0000000","n":220},{"k":3,"t":"2015-01-19T17:00:00.0000000","n":49},{"k":3,"t":"2015-01-19T18:00:00.0000000","n":128},{"k":3,"t":"2015-01-19T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-19T20:00:00.0000000","n":50},{"k":3,"t":"2015-01-19T21:00:00.0000000","n":0},{"k":3,"t":"2015-01-20T09:00:00.0000000","n":0},{"k":3,"t":"2015-01-20T10:00:00.0000000","n":823},{"k":3,"t":"2015-01-20T11:00:00.0000000","n":604},{"k":3,"t":"2015-01-20T12:00:00.0000000","n":604},{"k":3,"t":"2015-01-20T13:00:00.0000000","n":650},{"k":3,"t":"2015-01-20T14:00:00.0000000","n":604},{"k":3,"t":"2015-01-20T15:00:00.0000000","n":727},{"k":3,"t":"2015-01-20T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-20T17:00:00.0000000","n":43},{"k":3,"t":"2015-01-20T18:00:00.0000000","n":90},{"k":3,"t":"2015-01-20T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-21T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-21T13:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T14:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T15:00:00.0000000","n":875},{"k":3,"t":"2015-01-21T16:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T17:00:00.0000000","n":787},{"k":3,"t":"2015-01-21T18:00:00.0000000","n":494},{"k":3,"t":"2015-01-21T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T01:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T02:00:00.0000000","n":68},{"k":3,"t":"2015-01-22T03:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T13:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T14:00:00.0000000","n":71},{"k":3,"t":"2015-01-22T15:00:00.0000000","n":171},{"k":3,"t":"2015-01-22T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T18:00:00.0000000","n":0},{"k":3,"t":"2015-01-22T19:00:00.0000000","n":101},{"k":3,"t":"2015-01-22T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-23T11:00:00.0000000","n":0},{"k":3,"t":"2015-01-23T12:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T13:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T14:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T15:00:00.0000000","n":883},{"k":3,"t":"2015-01-23T16:00:00.0000000","n":1230},{"k":3,"t":"2015-01-23T17:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T18:00:00.0000000","n":882},{"k":3,"t":"2015-01-23T19:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T20:00:00.0000000","n":850},{"k":3,"t":"2015-01-23T21:00:00.0000000","n":708},{"k":3,"t":"2015-01-23T22:00:00.0000000","n":112},{"k":3,"t":"2015-01-23T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-24T21:00:00.0000000","n":0},{"k":3,"t":"2015-01-24T22:00:00.0000000","n":46},{"k":3,"t":"2015-01-24T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-25T08:00:00.0000000","n":0},{"k":3,"t":"2015-01-25T09:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T10:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T11:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T12:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T13:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T14:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T15:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T16:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T17:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T18:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T19:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T20:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T21:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T22:00:00.0000000","n":1124},{"k":3,"t":"2015-01-25T23:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T00:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T01:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T02:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T03:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T04:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T05:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T06:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T07:00:00.0000000","n":1124},{"k":3,"t":"2015-01-26T08:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T09:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T10:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T11:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T12:00:00.0000000","n":409},{"k":3,"t":"2015-01-26T13:00:00.0000000","n":1129},{"k":3,"t":"2015-01-26T14:00:00.0000000","n":1201},{"k":3,"t":"2015-01-26T15:00:00.0000000","n":1441},{"k":3,"t":"2015-01-26T16:00:00.0000000","n":834},{"k":3,"t":"2015-01-26T17:00:00.0000000","n":720},{"k":3,"t":"2015-01-26T18:00:00.0000000","n":840},{"k":3,"t":"2015-01-26T19:00:00.0000000","n":850},{"k":3,"t":"2015-01-26T20:00:00.0000000","n":720},{"k":3,"t":"2015-01-26T21:00:00.0000000","n":766},{"k":3,"t":"2015-01-26T22:00:00.0000000","n":132},{"k":3,"t":"2015-01-26T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T03:00:00.0000000","n":52},{"k":3,"t":"2015-01-27T04:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T11:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T12:00:00.0000000","n":444},{"k":3,"t":"2015-01-27T13:00:00.0000000","n":502},{"k":3,"t":"2015-01-27T14:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T15:00:00.0000000","n":58},{"k":3,"t":"2015-01-27T16:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T18:00:00.0000000","n":44},{"k":3,"t":"2015-01-27T19:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-27T21:00:00.0000000","n":68},{"k":3,"t":"2015-01-27T22:00:00.0000000","n":0},{"k":3,"t":"2015-01-28T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-28T13:00:00.0000000","n":326},{"k":3,"t":"2015-01-28T14:00:00.0000000","n":490},{"k":3,"t":"2015-01-28T15:00:00.0000000","n":136},{"k":3,"t":"2015-01-28T16:00:00.0000000","n":44},{"k":3,"t":"2015-01-28T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-28T18:00:00.0000000","n":168},{"k":3,"t":"2015-01-28T19:00:00.0000000","n":378},{"k":3,"t":"2015-01-28T20:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T00:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T01:00:00.0000000","n":54},{"k":3,"t":"2015-01-29T02:00:00.0000000","n":96},{"k":3,"t":"2015-01-29T03:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T12:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T13:00:00.0000000","n":60},{"k":3,"t":"2015-01-29T14:00:00.0000000","n":152},{"k":3,"t":"2015-01-29T15:00:00.0000000","n":303},{"k":3,"t":"2015-01-29T16:00:00.0000000","n":80},{"k":3,"t":"2015-01-29T17:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T18:00:00.0000000","n":70},{"k":3,"t":"2015-01-29T19:00:00.0000000","n":298},{"k":3,"t":"2015-01-29T20:00:00.0000000","n":171},{"k":3,"t":"2015-01-29T21:00:00.0000000","n":40},{"k":3,"t":"2015-01-29T22:00:00.0000000","n":0},{"k":3,"t":"2015-01-29T23:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T00:00:00.0000000","n":150},{"k":3,"t":"2015-01-30T01:00:00.0000000","n":40},{"k":3,"t":"2015-01-30T02:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T07:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T08:00:00.0000000","n":130},{"k":3,"t":"2015-01-30T09:00:00.0000000","n":51},{"k":3,"t":"2015-01-30T10:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T11:00:00.0000000","n":0},{"k":3,"t":"2015-01-30T12:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T13:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T14:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T15:00:00.0000000","n":905},{"k":3,"t":"2015-01-30T16:00:00.0000000","n":1073},{"k":3,"t":"2015-01-30T17:00:00.0000000","n":615},{"k":3,"t":"2015-01-30T18:00:00.0000000","n":896},{"k":3,"t":"2015-01-30T19:00:00.0000000","n":836},{"k":3,"t":"2015-01-30T20:00:00.0000000","n":744},{"k":3,"t":"2015-01-30T21:00:00.0000000","n":946},{"k":3,"t":"2015-01-30T22:00:00.0000000","n":108},{"k":3,"t":"2015-01-30T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T15:00:00.0000000","n":149},{"k":3,"t":"2015-02-01T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-01T18:00:00.0000000","n":62},{"k":3,"t":"2015-02-01T19:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T03:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T04:00:00.0000000","n":40},{"k":3,"t":"2015-02-02T05:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-02T13:00:00.0000000","n":566},{"k":3,"t":"2015-02-02T14:00:00.0000000","n":558},{"k":3,"t":"2015-02-02T15:00:00.0000000","n":627},{"k":3,"t":"2015-02-02T16:00:00.0000000","n":741},{"k":3,"t":"2015-02-02T17:00:00.0000000","n":850},{"k":3,"t":"2015-02-02T18:00:00.0000000","n":662},{"k":3,"t":"2015-02-02T19:00:00.0000000","n":249},{"k":3,"t":"2015-02-02T20:00:00.0000000","n":857},{"k":3,"t":"2015-02-02T21:00:00.0000000","n":815},{"k":3,"t":"2015-02-02T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T01:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T02:00:00.0000000","n":64},{"k":3,"t":"2015-02-03T03:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T13:00:00.0000000","n":160},{"k":3,"t":"2015-02-03T14:00:00.0000000","n":502},{"k":3,"t":"2015-02-03T15:00:00.0000000","n":304},{"k":3,"t":"2015-02-03T16:00:00.0000000","n":482},{"k":3,"t":"2015-02-03T17:00:00.0000000","n":244},{"k":3,"t":"2015-02-03T18:00:00.0000000","n":174},{"k":3,"t":"2015-02-03T19:00:00.0000000","n":152},{"k":3,"t":"2015-02-03T20:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T21:00:00.0000000","n":74},{"k":3,"t":"2015-02-03T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-03T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T00:00:00.0000000","n":44},{"k":3,"t":"2015-02-04T01:00:00.0000000","n":66},{"k":3,"t":"2015-02-04T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T15:00:00.0000000","n":356},{"k":3,"t":"2015-02-04T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-04T18:00:00.0000000","n":468},{"k":3,"t":"2015-02-04T19:00:00.0000000","n":92},{"k":3,"t":"2015-02-04T20:00:00.0000000","n":108},{"k":3,"t":"2015-02-04T21:00:00.0000000","n":342},{"k":3,"t":"2015-02-04T22:00:00.0000000","n":62},{"k":3,"t":"2015-02-04T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T03:00:00.0000000","n":118},{"k":3,"t":"2015-02-05T04:00:00.0000000","n":64},{"k":3,"t":"2015-02-05T05:00:00.0000000","n":192},{"k":3,"t":"2015-02-05T06:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T13:00:00.0000000","n":120},{"k":3,"t":"2015-02-05T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T15:00:00.0000000","n":78},{"k":3,"t":"2015-02-05T16:00:00.0000000","n":42},{"k":3,"t":"2015-02-05T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-05T18:00:00.0000000","n":580},{"k":3,"t":"2015-02-05T19:00:00.0000000","n":0},{"k":3,"t":"2015-02-06T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-06T13:00:00.0000000","n":182},{"k":3,"t":"2015-02-06T14:00:00.0000000","n":98},{"k":3,"t":"2015-02-06T15:00:00.0000000","n":65},{"k":3,"t":"2015-02-06T16:00:00.0000000","n":209},{"k":3,"t":"2015-02-06T17:00:00.0000000","n":54},{"k":3,"t":"2015-02-06T18:00:00.0000000","n":40},{"k":3,"t":"2015-02-06T19:00:00.0000000","n":180},{"k":3,"t":"2015-02-06T20:00:00.0000000","n":72},{"k":3,"t":"2015-02-06T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-07T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-07T16:00:00.0000000","n":69},{"k":3,"t":"2015-02-07T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-08T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-08T16:00:00.0000000","n":69},{"k":3,"t":"2015-02-08T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T03:00:00.0000000","n":90},{"k":3,"t":"2015-02-09T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T13:00:00.0000000","n":256},{"k":3,"t":"2015-02-09T14:00:00.0000000","n":106},{"k":3,"t":"2015-02-09T15:00:00.0000000","n":192},{"k":3,"t":"2015-02-09T16:00:00.0000000","n":222},{"k":3,"t":"2015-02-09T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-09T19:00:00.0000000","n":44},{"k":3,"t":"2015-02-09T20:00:00.0000000","n":194},{"k":3,"t":"2015-02-09T21:00:00.0000000","n":212},{"k":3,"t":"2015-02-09T22:00:00.0000000","n":183},{"k":3,"t":"2015-02-09T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T03:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T09:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T10:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T11:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T15:00:00.0000000","n":159},{"k":3,"t":"2015-02-10T16:00:00.0000000","n":414},{"k":3,"t":"2015-02-10T17:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-10T19:00:00.0000000","n":48},{"k":3,"t":"2015-02-10T20:00:00.0000000","n":268},{"k":3,"t":"2015-02-10T21:00:00.0000000","n":312},{"k":3,"t":"2015-02-10T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-11T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-11T15:00:00.0000000","n":168},{"k":3,"t":"2015-02-11T16:00:00.0000000","n":238},{"k":3,"t":"2015-02-11T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-11T18:00:00.0000000","n":558},{"k":3,"t":"2015-02-11T19:00:00.0000000","n":504},{"k":3,"t":"2015-02-11T20:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T03:00:00.0000000","n":56},{"k":3,"t":"2015-02-12T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-12T13:00:00.0000000","n":142},{"k":3,"t":"2015-02-12T14:00:00.0000000","n":166},{"k":3,"t":"2015-02-12T15:00:00.0000000","n":194},{"k":3,"t":"2015-02-12T16:00:00.0000000","n":317},{"k":3,"t":"2015-02-12T17:00:00.0000000","n":60},{"k":3,"t":"2015-02-12T18:00:00.0000000","n":122},{"k":3,"t":"2015-02-12T19:00:00.0000000","n":113},{"k":3,"t":"2015-02-12T20:00:00.0000000","n":686},{"k":3,"t":"2015-02-12T21:00:00.0000000","n":60},{"k":3,"t":"2015-02-12T22:00:00.0000000","n":76},{"k":3,"t":"2015-02-12T23:00:00.0000000","n":76},{"k":3,"t":"2015-02-13T00:00:00.0000000","n":44},{"k":3,"t":"2015-02-13T01:00:00.0000000","n":62},{"k":3,"t":"2015-02-13T02:00:00.0000000","n":79},{"k":3,"t":"2015-02-13T03:00:00.0000000","n":119},{"k":3,"t":"2015-02-13T04:00:00.0000000","n":48},{"k":3,"t":"2015-02-13T05:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T06:00:00.0000000","n":49},{"k":3,"t":"2015-02-13T07:00:00.0000000","n":56},{"k":3,"t":"2015-02-13T08:00:00.0000000","n":100},{"k":3,"t":"2015-02-13T09:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T14:00:00.0000000","n":41},{"k":3,"t":"2015-02-13T15:00:00.0000000","n":92},{"k":3,"t":"2015-02-13T16:00:00.0000000","n":210},{"k":3,"t":"2015-02-13T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-13T18:00:00.0000000","n":333},{"k":3,"t":"2015-02-13T19:00:00.0000000","n":373},{"k":3,"t":"2015-02-13T20:00:00.0000000","n":715},{"k":3,"t":"2015-02-13T21:00:00.0000000","n":438},{"k":3,"t":"2015-02-13T22:00:00.0000000","n":333},{"k":3,"t":"2015-02-13T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-14T14:00:00.0000000","n":0},{"k":3,"t":"2015-02-14T15:00:00.0000000","n":50},{"k":3,"t":"2015-02-14T16:00:00.0000000","n":66},{"k":3,"t":"2015-02-14T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-15T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-15T16:00:00.0000000","n":140},{"k":3,"t":"2015-02-15T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T07:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T08:00:00.0000000","n":68},{"k":3,"t":"2015-02-16T09:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T14:00:00.0000000","n":84},{"k":3,"t":"2015-02-16T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-16T19:00:00.0000000","n":70},{"k":3,"t":"2015-02-16T20:00:00.0000000","n":64},{"k":3,"t":"2015-02-16T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T03:00:00.0000000","n":86},{"k":3,"t":"2015-02-17T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T13:00:00.0000000","n":363},{"k":3,"t":"2015-02-17T14:00:00.0000000","n":404},{"k":3,"t":"2015-02-17T15:00:00.0000000","n":78},{"k":3,"t":"2015-02-17T16:00:00.0000000","n":545},{"k":3,"t":"2015-02-17T17:00:00.0000000","n":56},{"k":3,"t":"2015-02-17T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-17T19:00:00.0000000","n":225},{"k":3,"t":"2015-02-17T20:00:00.0000000","n":116},{"k":3,"t":"2015-02-17T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T09:00:00.0000000","n":886},{"k":3,"t":"2015-02-18T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T12:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T13:00:00.0000000","n":655},{"k":3,"t":"2015-02-18T14:00:00.0000000","n":44},{"k":3,"t":"2015-02-18T15:00:00.0000000","n":201},{"k":3,"t":"2015-02-18T16:00:00.0000000","n":254},{"k":3,"t":"2015-02-18T17:00:00.0000000","n":98},{"k":3,"t":"2015-02-18T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T19:00:00.0000000","n":424},{"k":3,"t":"2015-02-18T20:00:00.0000000","n":44},{"k":3,"t":"2015-02-18T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-18T22:00:00.0000000","n":48},{"k":3,"t":"2015-02-18T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-19T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T09:00:00.0000000","n":885},{"k":3,"t":"2015-02-19T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T11:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T12:00:00.0000000","n":927},{"k":3,"t":"2015-02-19T13:00:00.0000000","n":910},{"k":3,"t":"2015-02-19T14:00:00.0000000","n":954},{"k":3,"t":"2015-02-19T15:00:00.0000000","n":418},{"k":3,"t":"2015-02-19T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T17:00:00.0000000","n":149},{"k":3,"t":"2015-02-19T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T19:00:00.0000000","n":52},{"k":3,"t":"2015-02-19T20:00:00.0000000","n":62},{"k":3,"t":"2015-02-19T21:00:00.0000000","n":139},{"k":3,"t":"2015-02-19T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-19T23:00:00.0000000","n":47},{"k":3,"t":"2015-02-20T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T09:00:00.0000000","n":1644},{"k":3,"t":"2015-02-20T10:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T11:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T12:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T13:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T14:00:00.0000000","n":813},{"k":3,"t":"2015-02-20T15:00:00.0000000","n":926},{"k":3,"t":"2015-02-20T16:00:00.0000000","n":808},{"k":3,"t":"2015-02-20T17:00:00.0000000","n":758},{"k":3,"t":"2015-02-20T18:00:00.0000000","n":68},{"k":3,"t":"2015-02-20T19:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T20:00:00.0000000","n":60},{"k":3,"t":"2015-02-20T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-20T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-21T00:00:00.0000000","n":117},{"k":3,"t":"2015-02-21T01:00:00.0000000","n":143},{"k":3,"t":"2015-02-21T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T05:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T06:00:00.0000000","n":140},{"k":3,"t":"2015-02-21T07:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T09:00:00.0000000","n":887},{"k":3,"t":"2015-02-21T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-21T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-22T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T01:00:00.0000000","n":376},{"k":3,"t":"2015-02-22T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T09:00:00.0000000","n":887},{"k":3,"t":"2015-02-22T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T17:00:00.0000000","n":65},{"k":3,"t":"2015-02-22T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-22T23:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T00:00:00.0000000","n":80},{"k":3,"t":"2015-02-23T01:00:00.0000000","n":134},{"k":3,"t":"2015-02-23T02:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T04:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T05:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T06:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T07:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T08:00:00.0000000","n":734},{"k":3,"t":"2015-02-23T09:00:00.0000000","n":1621},{"k":3,"t":"2015-02-23T10:00:00.0000000","n":702},{"k":3,"t":"2015-02-23T11:00:00.0000000","n":702},{"k":3,"t":"2015-02-23T12:00:00.0000000","n":826},{"k":3,"t":"2015-02-23T13:00:00.0000000","n":633},{"k":3,"t":"2015-02-23T14:00:00.0000000","n":633},{"k":3,"t":"2015-02-23T15:00:00.0000000","n":1171},{"k":3,"t":"2015-02-23T16:00:00.0000000","n":844},{"k":3,"t":"2015-02-23T17:00:00.0000000","n":633},{"k":3,"t":"2015-02-23T18:00:00.0000000","n":164},{"k":3,"t":"2015-02-23T19:00:00.0000000","n":246},{"k":3,"t":"2015-02-23T20:00:00.0000000","n":98},{"k":3,"t":"2015-02-23T21:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-23T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-24T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T01:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T02:00:00.0000000","n":235},{"k":3,"t":"2015-02-24T03:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T09:00:00.0000000","n":887},{"k":3,"t":"2015-02-24T10:00:00.0000000","n":580},{"k":3,"t":"2015-02-24T11:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T14:00:00.0000000","n":645},{"k":3,"t":"2015-02-24T15:00:00.0000000","n":88},{"k":3,"t":"2015-02-24T16:00:00.0000000","n":62},{"k":3,"t":"2015-02-24T17:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-24T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-25T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T08:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T09:00:00.0000000","n":890},{"k":3,"t":"2015-02-25T10:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T14:00:00.0000000","n":1083},{"k":3,"t":"2015-02-25T15:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-25T17:00:00.0000000","n":138},{"k":3,"t":"2015-02-25T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T13:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T14:00:00.0000000","n":208},{"k":3,"t":"2015-02-26T15:00:00.0000000","n":40},{"k":3,"t":"2015-02-26T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T17:00:00.0000000","n":40},{"k":3,"t":"2015-02-26T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-26T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-27T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T16:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T17:00:00.0000000","n":158},{"k":3,"t":"2015-02-27T18:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T19:00:00.0000000","n":172},{"k":3,"t":"2015-02-27T20:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-27T23:00:00.0000000","n":43},{"k":3,"t":"2015-02-28T00:00:00.0000000","n":0},{"k":3,"t":"2015-02-28T22:00:00.0000000","n":0},{"k":3,"t":"2015-02-28T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-01T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-01T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-01T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-02T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T16:00:00.0000000","n":50},{"k":3,"t":"2015-03-02T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T19:00:00.0000000","n":61},{"k":3,"t":"2015-03-02T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T21:00:00.0000000","n":102},{"k":3,"t":"2015-03-02T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-02T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-03T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T04:00:00.0000000","n":57},{"k":3,"t":"2015-03-03T05:00:00.0000000","n":45},{"k":3,"t":"2015-03-03T06:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T08:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T09:00:00.0000000","n":891},{"k":3,"t":"2015-03-03T10:00:00.0000000","n":44},{"k":3,"t":"2015-03-03T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T13:00:00.0000000","n":64},{"k":3,"t":"2015-03-03T14:00:00.0000000","n":705},{"k":3,"t":"2015-03-03T15:00:00.0000000","n":532},{"k":3,"t":"2015-03-03T16:00:00.0000000","n":233},{"k":3,"t":"2015-03-03T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T20:00:00.0000000","n":48},{"k":3,"t":"2015-03-03T21:00:00.0000000","n":167},{"k":3,"t":"2015-03-03T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-03T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-04T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T03:00:00.0000000","n":54},{"k":3,"t":"2015-03-04T04:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T07:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T08:00:00.0000000","n":57},{"k":3,"t":"2015-03-04T09:00:00.0000000","n":889},{"k":3,"t":"2015-03-04T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T13:00:00.0000000","n":276},{"k":3,"t":"2015-03-04T14:00:00.0000000","n":68},{"k":3,"t":"2015-03-04T15:00:00.0000000","n":90},{"k":3,"t":"2015-03-04T16:00:00.0000000","n":160},{"k":3,"t":"2015-03-04T17:00:00.0000000","n":61},{"k":3,"t":"2015-03-04T18:00:00.0000000","n":563},{"k":3,"t":"2015-03-04T19:00:00.0000000","n":326},{"k":3,"t":"2015-03-04T20:00:00.0000000","n":58},{"k":3,"t":"2015-03-04T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-04T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-05T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T12:00:00.0000000","n":52},{"k":3,"t":"2015-03-05T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T18:00:00.0000000","n":502},{"k":3,"t":"2015-03-05T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-05T22:00:00.0000000","n":54},{"k":3,"t":"2015-03-05T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T03:00:00.0000000","n":74},{"k":3,"t":"2015-03-06T04:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T15:00:00.0000000","n":61},{"k":3,"t":"2015-03-06T16:00:00.0000000","n":1120},{"k":3,"t":"2015-03-06T17:00:00.0000000","n":48},{"k":3,"t":"2015-03-06T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T19:00:00.0000000","n":273},{"k":3,"t":"2015-03-06T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-06T21:00:00.0000000","n":105},{"k":3,"t":"2015-03-06T22:00:00.0000000","n":52},{"k":3,"t":"2015-03-06T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-07T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T11:00:00.0000000","n":45},{"k":3,"t":"2015-03-09T12:00:00.0000000","n":181},{"k":3,"t":"2015-03-09T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T15:00:00.0000000","n":70},{"k":3,"t":"2015-03-09T16:00:00.0000000","n":104},{"k":3,"t":"2015-03-09T17:00:00.0000000","n":393},{"k":3,"t":"2015-03-09T18:00:00.0000000","n":123},{"k":3,"t":"2015-03-09T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-09T20:00:00.0000000","n":156},{"k":3,"t":"2015-03-09T21:00:00.0000000","n":47},{"k":3,"t":"2015-03-09T22:00:00.0000000","n":43},{"k":3,"t":"2015-03-09T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T01:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T02:00:00.0000000","n":73},{"k":3,"t":"2015-03-10T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T13:00:00.0000000","n":302},{"k":3,"t":"2015-03-10T14:00:00.0000000","n":391},{"k":3,"t":"2015-03-10T15:00:00.0000000","n":307},{"k":3,"t":"2015-03-10T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T18:00:00.0000000","n":173},{"k":3,"t":"2015-03-10T19:00:00.0000000","n":138},{"k":3,"t":"2015-03-10T20:00:00.0000000","n":134},{"k":3,"t":"2015-03-10T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-10T23:00:00.0000000","n":43},{"k":3,"t":"2015-03-11T00:00:00.0000000","n":48},{"k":3,"t":"2015-03-11T01:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T13:00:00.0000000","n":139},{"k":3,"t":"2015-03-11T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-11T20:00:00.0000000","n":549},{"k":3,"t":"2015-03-11T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T14:00:00.0000000","n":484},{"k":3,"t":"2015-03-12T15:00:00.0000000","n":46},{"k":3,"t":"2015-03-12T16:00:00.0000000","n":137},{"k":3,"t":"2015-03-12T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-12T20:00:00.0000000","n":175},{"k":3,"t":"2015-03-12T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-13T08:00:00.0000000","n":0},{"k":3,"t":"2015-03-13T09:00:00.0000000","n":184},{"k":3,"t":"2015-03-13T10:00:00.0000000","n":1076},{"k":3,"t":"2015-03-13T11:00:00.0000000","n":1216},{"k":3,"t":"2015-03-13T12:00:00.0000000","n":944},{"k":3,"t":"2015-03-13T13:00:00.0000000","n":630},{"k":3,"t":"2015-03-13T14:00:00.0000000","n":383},{"k":3,"t":"2015-03-13T15:00:00.0000000","n":425},{"k":3,"t":"2015-03-13T16:00:00.0000000","n":383},{"k":3,"t":"2015-03-13T17:00:00.0000000","n":808},{"k":3,"t":"2015-03-13T18:00:00.0000000","n":874},{"k":3,"t":"2015-03-13T19:00:00.0000000","n":524},{"k":3,"t":"2015-03-13T20:00:00.0000000","n":383},{"k":3,"t":"2015-03-13T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T15:00:00.0000000","n":87},{"k":3,"t":"2015-03-16T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T17:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T18:00:00.0000000","n":1755},{"k":3,"t":"2015-03-16T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-16T20:00:00.0000000","n":168},{"k":3,"t":"2015-03-16T21:00:00.0000000","n":96},{"k":3,"t":"2015-03-16T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T04:00:00.0000000","n":44},{"k":3,"t":"2015-03-17T05:00:00.0000000","n":48},{"k":3,"t":"2015-03-17T06:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T07:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T08:00:00.0000000","n":48},{"k":3,"t":"2015-03-17T09:00:00.0000000","n":48},{"k":3,"t":"2015-03-17T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T11:00:00.0000000","n":96},{"k":3,"t":"2015-03-17T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T13:00:00.0000000","n":819},{"k":3,"t":"2015-03-17T14:00:00.0000000","n":66},{"k":3,"t":"2015-03-17T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T16:00:00.0000000","n":49},{"k":3,"t":"2015-03-17T17:00:00.0000000","n":54},{"k":3,"t":"2015-03-17T18:00:00.0000000","n":42},{"k":3,"t":"2015-03-17T19:00:00.0000000","n":158},{"k":3,"t":"2015-03-17T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-17T22:00:00.0000000","n":43},{"k":3,"t":"2015-03-17T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T14:00:00.0000000","n":40},{"k":3,"t":"2015-03-18T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T17:00:00.0000000","n":56},{"k":3,"t":"2015-03-18T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-18T19:00:00.0000000","n":223},{"k":3,"t":"2015-03-18T20:00:00.0000000","n":812},{"k":3,"t":"2015-03-18T21:00:00.0000000","n":54},{"k":3,"t":"2015-03-18T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-19T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-19T11:00:00.0000000","n":697},{"k":3,"t":"2015-03-19T12:00:00.0000000","n":816},{"k":3,"t":"2015-03-19T13:00:00.0000000","n":697},{"k":3,"t":"2015-03-19T14:00:00.0000000","n":590},{"k":3,"t":"2015-03-19T15:00:00.0000000","n":98},{"k":3,"t":"2015-03-19T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-19T17:00:00.0000000","n":53},{"k":3,"t":"2015-03-19T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T14:00:00.0000000","n":66},{"k":3,"t":"2015-03-20T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T16:00:00.0000000","n":42},{"k":3,"t":"2015-03-20T17:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T18:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T19:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T20:00:00.0000000","n":325},{"k":3,"t":"2015-03-20T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-20T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-21T00:00:00.0000000","n":117},{"k":3,"t":"2015-03-21T01:00:00.0000000","n":140},{"k":3,"t":"2015-03-21T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-21T05:00:00.0000000","n":0},{"k":3,"t":"2015-03-21T06:00:00.0000000","n":138},{"k":3,"t":"2015-03-21T07:00:00.0000000","n":0},{"k":3,"t":"2015-03-22T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-22T21:00:00.0000000","n":399},{"k":3,"t":"2015-03-22T22:00:00.0000000","n":639},{"k":3,"t":"2015-03-22T23:00:00.0000000","n":626},{"k":3,"t":"2015-03-23T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T13:00:00.0000000","n":68},{"k":3,"t":"2015-03-23T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-23T19:00:00.0000000","n":41},{"k":3,"t":"2015-03-23T20:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T12:00:00.0000000","n":63},{"k":3,"t":"2015-03-24T13:00:00.0000000","n":120},{"k":3,"t":"2015-03-24T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T15:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T16:00:00.0000000","n":40},{"k":3,"t":"2015-03-24T17:00:00.0000000","n":40},{"k":3,"t":"2015-03-24T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T19:00:00.0000000","n":369},{"k":3,"t":"2015-03-24T20:00:00.0000000","n":369},{"k":3,"t":"2015-03-24T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-24T23:00:00.0000000","n":42},{"k":3,"t":"2015-03-25T00:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T15:00:00.0000000","n":121},{"k":3,"t":"2015-03-25T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T17:00:00.0000000","n":783},{"k":3,"t":"2015-03-25T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T20:00:00.0000000","n":124},{"k":3,"t":"2015-03-25T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-25T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T00:00:00.0000000","n":264},{"k":3,"t":"2015-03-26T01:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T02:00:00.0000000","n":167},{"k":3,"t":"2015-03-26T03:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T13:00:00.0000000","n":505},{"k":3,"t":"2015-03-26T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T17:00:00.0000000","n":42},{"k":3,"t":"2015-03-26T18:00:00.0000000","n":249},{"k":3,"t":"2015-03-26T19:00:00.0000000","n":383},{"k":3,"t":"2015-03-26T20:00:00.0000000","n":382},{"k":3,"t":"2015-03-26T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-26T23:00:00.0000000","n":0},{"k":3,"t":"2015-03-27T00:00:00.0000000","n":196},{"k":3,"t":"2015-03-27T01:00:00.0000000","n":41},{"k":3,"t":"2015-03-27T02:00:00.0000000","n":0},{"k":3,"t":"2015-03-27T10:00:00.0000000","n":0},{"k":3,"t":"2015-03-27T11:00:00.0000000","n":104},{"k":3,"t":"2015-03-27T12:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T13:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T14:00:00.0000000","n":184},{"k":3,"t":"2015-03-27T15:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T16:00:00.0000000","n":102},{"k":3,"t":"2015-03-27T17:00:00.0000000","n":456},{"k":3,"t":"2015-03-27T18:00:00.0000000","n":456},{"k":3,"t":"2015-03-27T19:00:00.0000000","n":354},{"k":3,"t":"2015-03-27T20:00:00.0000000","n":354},{"k":3,"t":"2015-03-27T21:00:00.0000000","n":354},{"k":3,"t":"2015-03-27T22:00:00.0000000","n":0},{"k":3,"t":"2015-03-28T11:00:00.0000000","n":0},{"k":3,"t":"2015-03-28T12:00:00.0000000","n":85},{"k":3,"t":"2015-03-28T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-29T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-29T13:00:00.0000000","n":80},{"k":3,"t":"2015-03-29T14:00:00.0000000","n":56},{"k":3,"t":"2015-03-29T15:00:00.0000000","n":102},{"k":3,"t":"2015-03-29T16:00:00.0000000","n":140},{"k":3,"t":"2015-03-29T17:00:00.0000000","n":100},{"k":3,"t":"2015-03-29T18:00:00.0000000","n":156},{"k":3,"t":"2015-03-29T19:00:00.0000000","n":100},{"k":3,"t":"2015-03-29T20:00:00.0000000","n":124},{"k":3,"t":"2015-03-29T21:00:00.0000000","n":116},{"k":3,"t":"2015-03-29T22:00:00.0000000","n":72},{"k":3,"t":"2015-03-29T23:00:00.0000000","n":140},{"k":3,"t":"2015-03-30T00:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T01:00:00.0000000","n":132},{"k":3,"t":"2015-03-30T02:00:00.0000000","n":124},{"k":3,"t":"2015-03-30T03:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T04:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T05:00:00.0000000","n":116},{"k":3,"t":"2015-03-30T06:00:00.0000000","n":88},{"k":3,"t":"2015-03-30T07:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T08:00:00.0000000","n":116},{"k":3,"t":"2015-03-30T09:00:00.0000000","n":124},{"k":3,"t":"2015-03-30T10:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T11:00:00.0000000","n":92},{"k":3,"t":"2015-03-30T12:00:00.0000000","n":116},{"k":3,"t":"2015-03-30T13:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T14:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T15:00:00.0000000","n":40},{"k":3,"t":"2015-03-30T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T19:00:00.0000000","n":0},{"k":3,"t":"2015-03-30T20:00:00.0000000","n":90},{"k":3,"t":"2015-03-30T21:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T12:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T13:00:00.0000000","n":64},{"k":3,"t":"2015-03-31T14:00:00.0000000","n":143},{"k":3,"t":"2015-03-31T15:00:00.0000000","n":62},{"k":3,"t":"2015-03-31T16:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T18:00:00.0000000","n":0},{"k":3,"t":"2015-03-31T19:00:00.0000000","n":237},{"k":3,"t":"2015-03-31T20:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T12:00:00.0000000","n":140},{"k":3,"t":"2015-04-01T13:00:00.0000000","n":95},{"k":3,"t":"2015-04-01T14:00:00.0000000","n":144},{"k":3,"t":"2015-04-01T15:00:00.0000000","n":277},{"k":3,"t":"2015-04-01T16:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T17:00:00.0000000","n":478},{"k":3,"t":"2015-04-01T18:00:00.0000000","n":0},{"k":3,"t":"2015-04-01T23:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T00:00:00.0000000","n":74},{"k":3,"t":"2015-04-02T01:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T12:00:00.0000000","n":274},{"k":3,"t":"2015-04-02T13:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T14:00:00.0000000","n":0},{"k":3,"t":"2015-04-02T15:00:00.0000000","n":134},{"k":3,"t":"2015-04-02T16:00:00.0000000","n":68},{"k":3,"t":"2015-04-02T17:00:00.0000000","n":264},{"k":3,"t":"2015-04-02T18:00:00.0000000","n":96},{"k":3,"t":"2015-04-02T19:00:00.0000000","n":0},{"k":3,"t":"2015-04-03T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-03T12:00:00.0000000","n":95},{"k":3,"t":"2015-04-03T13:00:00.0000000","n":206},{"k":3,"t":"2015-04-03T14:00:00.0000000","n":111},{"k":3,"t":"2015-04-03T15:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T12:00:00.0000000","n":40},{"k":3,"t":"2015-04-06T13:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T14:00:00.0000000","n":72},{"k":3,"t":"2015-04-06T15:00:00.0000000","n":58},{"k":3,"t":"2015-04-06T16:00:00.0000000","n":0},{"k":3,"t":"2015-04-06T17:00:00.0000000","n":134},{"k":3,"t":"2015-04-06T18:00:00.0000000","n":0},{"k":3,"t":"2015-04-07T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-07T12:00:00.0000000","n":279},{"k":3,"t":"2015-04-07T13:00:00.0000000","n":0},{"k":3,"t":"2015-04-07T14:00:00.0000000","n":69},{"k":3,"t":"2015-04-07T15:00:00.0000000","n":264},{"k":3,"t":"2015-04-07T16:00:00.0000000","n":0},{"k":3,"t":"2015-04-08T11:00:00.0000000","n":0},{"k":3,"t":"2015-04-08T12:00:00.0000000","n":66}]'); } +/* jscs:enable maximumLineLength*/ +/* jshint maxlen: 140 */ -describe('dc.barChart.biggish', function() { +describe('dc.barChart.biggish', function () { beforeEach(function () { appendChartID('stack-chart'); appendChartID('range-chart'); @@ -14,12 +18,7 @@ describe('dc.barChart.biggish', function() { var xfilter; - var data = biggish_data(); - function daydiff(d1, d2) { - var t2 = d2.getTime(); - var t1 = d1.getTime(); - return parseInt((t2 - t1) / (24 * 3600 * 1000)); - } + var data = biggishData(); data.forEach(function (row) { // coerce k(ind) into a number @@ -55,7 +54,7 @@ describe('dc.barChart.biggish', function() { case 3: p.uha += v.n; break; - }; // switch + } // switch return p; }, function (p, v) { @@ -69,7 +68,7 @@ describe('dc.barChart.biggish', function() { case 3: p.uha -= v.n; break; - }; // switch + } // switch return p; }, function () { @@ -87,7 +86,7 @@ describe('dc.barChart.biggish', function() { extentDay[1] = d3.time.day.offset(extentDay[1], 1); chartAttemptSeries - .margins({ top: 30, right: 50, bottom: 25, left: 40 }) + .margins({top: 30, right: 50, bottom: 25, left: 40}) .renderArea(true) .height(200) .x(d3.time.scale().domain(extentDay)) @@ -100,10 +99,10 @@ describe('dc.barChart.biggish', function() { chartAttemptSeries .dimension(dimHour) - .group(groupHourSeries, "Brute Force") + .group(groupHourSeries, 'Brute Force') .valueAccessor(function (d) { return d.value.bfa; }) - .stack(groupHourSeries, "Horizontal Movement", function (d) { return d.value.hma; }) - .stack(groupHourSeries, "User Account Hacking", function (d) { return d.value.uha; }) + .stack(groupHourSeries, 'Horizontal Movement', function (d) { return d.value.hma; }) + .stack(groupHourSeries, 'User Account Hacking', function (d) { return d.value.uha; }) .xUnits(d3.time.hours); chartAttemptSeries.legend(dc.legend().horizontal(true).x(50).y(0).itemWidth(150).gap(5)); @@ -119,9 +118,9 @@ describe('dc.barChart.biggish', function() { .alwaysUseRounding(true) .x(d3.time.scale().domain(extentDay)) - // hide the range chart's y axis + // hide the range chart's y axis // note: breaks function chaining by returning the yAxis - .yAxis().tickFormat("") + .yAxis().tickFormat('') .tickValues([0]) .tickSize([0, 0]); @@ -129,8 +128,8 @@ describe('dc.barChart.biggish', function() { }); - describe('smoke test for #909', function() { - it("doesn't die", function() { + describe('smoke test for #909', function () { + it('doesn\'t die', function () { expect(true).toBeTruthy(); }); }); diff --git a/spec/box-plot-spec.js b/spec/box-plot-spec.js index 6a5910a62..b55cbffc7 100644 --- a/spec/box-plot-spec.js +++ b/spec/box-plot-spec.js @@ -1,4 +1,5 @@ -describe('dc.boxPlot', function() { +/* global appendChartID, loadBoxPlotFixture */ +describe('dc.boxPlot', function () { var id, chart; var data, dimension, group; @@ -33,44 +34,44 @@ describe('dc.boxPlot', function() { chart.render(); }); - it('should create a non-empty SVG node', function() { + it('should create a non-empty SVG node', function () { expect(chart.svg().empty()).toBeFalsy(); }); - it('should create one outlier circle per outlier', function() { + it('should create one outlier circle per outlier', function () { expect(chart.selectAll('circle.outlier').size()).toBe(2); }); - it('should create an offset box for each dimension in the group', function() { + it('should create an offset box for each dimension in the group', function () { expect(box(0).attr('transform')).toMatchTranslate(50,0); expect(box(1).attr('transform')).toMatchTranslate(150,0); }); - it('should correctly place median line', function() { + it('should correctly place median line', function () { expect(box(1).selectAll('line.median').attr('y1')).toBe('100'); expect(box(1).selectAll('line.median').attr('y2')).toBe('100'); }); - it('should set the median value correctly', function() { + it('should set the median value correctly', function () { expect(box(1).boxText(1).text()).toBe('44'); }); - it('should place the left box line at the x origin', function() { + it('should place the left box line at the x origin', function () { expect(box(1).select('rect.box').attr('x')).toBe('0'); }); describe('the width of the box plot', function () { - it('should default to being based on the rangeBand', function() { + it('should default to being based on the rangeBand', function () { expect(box(1).select('rect.box').attr('width')).toBe('100'); }); - it('should be settable to a number', function() { + it('should be settable to a number', function () { chart.boxWidth(150).render(); expect(box(1).select('rect.box').attr('width')).toBe('150'); }); - it('should be settable to a function', function() { - chart.boxWidth(function(innerChartWidth, xUnits) { + it('should be settable to a function', function () { + chart.boxWidth(function (innerChartWidth, xUnits) { return innerChartWidth / (xUnits + 2); }).render(); expect(box(1).select('rect.box').attr('width')).toBe('75'); @@ -78,82 +79,82 @@ describe('dc.boxPlot', function() { }); describe('the tickFormat of the box plot', function () { - it('should default to whole number', function() { + it('should default to whole number', function () { expect(box(1).boxText(1).text()).toBe('44'); expect(box(1).whiskerText(0).text()).toBe('22'); expect(box(1).whiskerText(1).text()).toBe('66'); }); - it('should be settable to a d3.format', function() { - chart.tickFormat(d3.format(".2f")).render(); + it('should be settable to a d3.format', function () { + chart.tickFormat(d3.format('.2f')).render(); expect(box(1).boxText(1).text()).toBe('44.00'); expect(box(1).whiskerText(0).text()).toBe('22.00'); expect(box(1).whiskerText(1).text()).toBe('66.00'); }); }); - it('should place interquartile range lines after the first and before the fourth quartile', function() { + it('should place interquartile range lines after the first and before the fourth quartile', function () { expect(box(1).select('rect.box').attr('y')).toBe('94.5'); expect(box(1).select('rect.box').attr('height')).toBe('16.5'); }); - it('should label the interquartile range lines using their calculated values', function() { + it('should label the interquartile range lines using their calculated values', function () { expect(box(1).boxText(0).text()).toBe('33'); expect(box(1).boxText(2).text()).toBe('50'); }); - it('should place the whiskers at 1.5x the interquartile range', function() { + it('should place the whiskers at 1.5x the interquartile range', function () { expect(box(1).whiskerLine(0).attr('y1')).toBe('122'); expect(box(1).whiskerLine(0).attr('y2')).toBe('122'); expect(box(1).whiskerLine(1).attr('y1')).toBeWithinDelta(78); expect(box(1).whiskerLine(1).attr('y2')).toBeWithinDelta(78); }); - it('should label the whiskers using their calculated values', function() { + it('should label the whiskers using their calculated values', function () { expect(box(1).whiskerText(0).text()).toBe('22'); expect(box(1).whiskerText(1).text()).toBe('66'); }); - it('should assign a fill color to the boxes', function() { - expect(box(0).select('rect.box').attr("fill")).toBe("#01"); - expect(box(1).select('rect.box').attr("fill")).toBe("#02"); + it('should assign a fill color to the boxes', function () { + expect(box(0).select('rect.box').attr('fill')).toBe('#01'); + expect(box(1).select('rect.box').attr('fill')).toBe('#02'); }); - describe('when a box has no data', function() { + describe('when a box has no data', function () { var firstBox; - beforeEach(function() { + beforeEach(function () { firstBox = chart.select('g.box').node(); var otherDimension = data.dimension(function (d) { return d.countrycode; }); - otherDimension.filter("US"); + otherDimension.filter('US'); chart.redraw(); }); - it('should not attempt to render that box', function() { + it('should not attempt to render that box', function () { expect(chart.selectAll('g.box').size()).toBe(1); }); - it('should not animate the removed box into another box', function() { + it('should not animate the removed box into another box', function () { expect(chart.select('g.box').node()).not.toBe(firstBox); }); - describe("with elasticX enabled", function() { - beforeEach(function() { + describe('with elasticX enabled', function () { + beforeEach(function () { chart.elasticX(true).render(); }); - it('should not represent the box in the chart domain', function() { - expect(chart.selectAll(".axis.x .tick").size()).toBe(1); + it('should not represent the box in the chart domain', function () { + expect(chart.selectAll('.axis.x .tick').size()).toBe(1); }); }); - describe("when elasticX is disabled", function() { - beforeEach(function() { + describe('when elasticX is disabled', function () { + beforeEach(function () { chart.elasticX(false).render(); }); - it('should represent the box in the chart domain', function() { - expect(chart.selectAll(".axis.x .tick").size()).toBe(2); + it('should represent the box in the chart domain', function () { + expect(chart.selectAll('.axis.x .tick').size()).toBe(2); }); }); }); @@ -166,18 +167,18 @@ describe('dc.boxPlot', function() { describe('filtering the box plot', function () { beforeEach(function () { - chart.filter("CA").redraw(); + chart.filter('CA').redraw(); }); - it('should select the boxes corresponding to the filtered value', function() { + it('should select the boxes corresponding to the filtered value', function () { box(0).each(function (d) { - expect(d3.select(this).classed("selected")).toBeTruthy(); + expect(d3.select(this).classed('selected')).toBeTruthy(); }); }); - it('should deselect the boxes not corresponding to the filtered value', function() { + it('should deselect the boxes not corresponding to the filtered value', function () { box(1).each(function (d) { - expect(d3.select(this).classed("deselected")).toBeTruthy(); + expect(d3.select(this).classed('deselected')).toBeTruthy(); }); }); }); @@ -187,21 +188,21 @@ describe('dc.boxPlot', function() { box(0).on('click').call(chart, box(0).datum()); }); - it('should apply a filter to the chart', function() { - expect(chart.hasFilter("CA")).toBeTruthy(); + it('should apply a filter to the chart', function () { + expect(chart.hasFilter('CA')).toBeTruthy(); }); }); }); - function box(n) { + function box (n) { var nthBox = d3.select(chart.selectAll('g.box')[0][n]); - nthBox.boxText = function(n) { + nthBox.boxText = function (n) { return d3.select(this.selectAll('text.box')[0][n]); }; - nthBox.whiskerLine = function(n) { + nthBox.whiskerLine = function (n) { return d3.select(this.selectAll('line.whisker')[0][n]); }; - nthBox.whiskerText = function(n) { + nthBox.whiskerText = function (n) { return d3.select(this.selectAll('text.whisker')[0][n]); }; return nthBox; diff --git a/spec/bubble-chart-spec.js b/spec/bubble-chart-spec.js index 59fd5c3fe..bb88c3956 100644 --- a/spec/bubble-chart-spec.js +++ b/spec/bubble-chart-spec.js @@ -1,37 +1,38 @@ -describe('dc.bubbleChart', function() { +/* global appendChartID, loadDateFixture */ +describe('dc.bubbleChart', function () { var id, chart, data; var dateFixture; var dimension, group; var countryDimension; var width = 900, height = 350; - beforeEach(function() { + beforeEach(function () { dateFixture = loadDateFixture(); data = crossfilter(dateFixture); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d.status; }); group = dimension.group() .reduce( //add - function(p, v) { + function (p, v) { ++p.count; p.value += +v.value; return p; }, //remove - function(p, v) { + function (p, v) { --p.count; p.value -= +v.value; return p; }, //init - function() { - return {count:0, value:0}; + function () { + return {count: 0, value: 0}; } ) - .order(function(d){return d.value;}); - countryDimension = data.dimension(function(d) { + .order(function (d) {return d.value;}); + countryDimension = data.dimension(function (d) { return d.countrycode; }); @@ -41,9 +42,9 @@ describe('dc.bubbleChart', function() { chart = dc.bubbleChart('#' + id); chart.dimension(dimension).group(group) .width(width).height(height) - .colors(["#a60000", "#ff0000", "#ff4040", "#ff7373", "#67e667", "#39e639", "#00cc00"]) + .colors(['#a60000', '#ff0000', '#ff4040', '#ff7373', '#67e667', '#39e639', '#00cc00']) .colorDomain([0,220]) - .colorAccessor(function(p) { + .colorAccessor(function (p) { return p.value.value; }) .keyAccessor(function (p) { @@ -63,7 +64,7 @@ describe('dc.bubbleChart', function() { .renderLabel(true) .renderTitle(true) .title(function (p) { - return p.key + ": {count:" + p.value.count + ",value:" + p.value.value + "}"; + return p.key + ': {count:' + p.value.count + ',value:' + p.value.value + '}'; }); }); @@ -91,162 +92,180 @@ describe('dc.bubbleChart', function() { expect(chart.yAxis()).not.toBeNull(); }); - describe('render', function() { - beforeEach(function() { + describe('render', function () { + beforeEach(function () { chart.render(); }); it('generates right number of bubbles', function () { - expect(chart.selectAll("circle.bubble")[0].length).toBe(2); + expect(chart.selectAll('circle.bubble')[0].length).toBe(2); }); it('calculates right cx for each bubble', function () { - chart.selectAll("g.node").each(function (d, i) { - if (i === 0) - expect(d3.select(this).attr("transform")).toMatchTranslate(601.3333333333334,155,3); - if (i === 1) - expect(d3.select(this).attr("transform")).toMatchTranslate(541.2,155); + chart.selectAll('g.node').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).attr('transform')).toMatchTranslate(601.3333333333334,155,3); + } + if (i === 1) { + expect(d3.select(this).attr('transform')).toMatchTranslate(541.2,155); + } }); }); it('generates opaque groups and circles for each bubble', function () { - chart.selectAll("g.node").each(function (d, i) { - expect(d3.select(this).attr("opacity")).toBeNull(); - expect(d3.select(this).select('circle').attr("opacity")).toBe('1'); + chart.selectAll('g.node').each(function (d, i) { + expect(d3.select(this).attr('opacity')).toBeNull(); + expect(d3.select(this).select('circle').attr('opacity')).toBe('1'); }); }); it('calculates right r for each bubble', function () { - chart.selectAll("circle.bubble").each(function (d, i) { - if (i === 0) - expect(Number(d3.select(this).attr("r"))).toBeCloseTo(49.33333333333333,3); - if (i === 1) - expect(Number(d3.select(this).attr("r"))).toBeCloseTo(49.33333333333333,3); + chart.selectAll('circle.bubble').each(function (d, i) { + if (i === 0) { + expect(Number(d3.select(this).attr('r'))).toBeCloseTo(49.33333333333333,3); + } + if (i === 1) { + expect(Number(d3.select(this).attr('r'))).toBeCloseTo(49.33333333333333,3); + } }); }); it('attaches each bubble with index based class', function () { - chart.selectAll("circle.bubble").each(function (d, i) { - if (i === 0) - expect(d3.select(this).attr("class")).toBe("bubble _0"); - if (i === 1) - expect(d3.select(this).attr("class")).toBe("bubble _1"); + chart.selectAll('circle.bubble').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).attr('class')).toBe('bubble _0'); + } + if (i === 1) { + expect(d3.select(this).attr('class')).toBe('bubble _1'); + } }); }); it('generates right number of labels', function () { - expect(chart.selectAll("g.node text")[0].length).toBe(2); + expect(chart.selectAll('g.node text')[0].length).toBe(2); }); it('creates correct label for each bubble', function () { - chart.selectAll("g.node text").each(function (d, i) { - if (i === 0) - expect(d3.select(this).text()).toBe("F"); - if (i === 1) - expect(d3.select(this).text()).toBe("T"); + chart.selectAll('g.node text').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).text()).toBe('F'); + } + if (i === 1) { + expect(d3.select(this).text()).toBe('T'); + } }); }); it('generates right number of titles', function () { - expect(chart.selectAll("g.node title")[0].length).toBe(2); + expect(chart.selectAll('g.node title')[0].length).toBe(2); }); it('creates correct title for each bubble', function () { - chart.selectAll("g.node title").each(function (d, i) { - if (i === 0) - expect(d3.select(this).text()).toBe("F: {count:5,value:220}"); - if (i === 1) - expect(d3.select(this).text()).toBe("T: {count:5,value:198}"); + chart.selectAll('g.node title').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).text()).toBe('F: {count:5,value:220}'); + } + if (i === 1) { + expect(d3.select(this).text()).toBe('T: {count:5,value:198}'); + } }); }); it('fills bubbles with correct colors', function () { - chart.selectAll("circle.bubble").each(function (d, i) { - if (i === 0) - expect(d3.select(this).attr("fill")).toBe("#00cc00"); - if (i === 1) - expect(d3.select(this).attr("fill")).toBe("#00cc00"); + chart.selectAll('circle.bubble').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).attr('fill')).toBe('#00cc00'); + } + if (i === 1) { + expect(d3.select(this).attr('fill')).toBe('#00cc00'); + } }); }); }); - describe('bubble chart w/o label & title', function() { + describe('bubble chart w/o label & title', function () { beforeEach(function () { chart.renderLabel(false).renderTitle(false).render(); }); it('generates right number of labels', function () { - expect(chart.selectAll("g.node text")[0].length).toBe(0); + expect(chart.selectAll('g.node text')[0].length).toBe(0); }); it('generates right number of titles', function () { - expect(chart.selectAll("g.node title")[0].length).toBe(0); + expect(chart.selectAll('g.node title')[0].length).toBe(0); }); }); - describe('with filter', function() { + describe('with filter', function () { beforeEach(function () { - chart.filter("F").render(); + chart.filter('F').render(); }); it('deselects bubble based on filter value', function () { - chart.selectAll("g.node").each(function (d, i) { - if (i === 0) - expect(d3.select(this).attr("class")).toBe("node selected"); - if (i === 1) - expect(d3.select(this).attr("class")).toBe("node deselected"); + chart.selectAll('g.node').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).attr('class')).toBe('node selected'); + } + if (i === 1) { + expect(d3.select(this).attr('class')).toBe('node deselected'); + } }); }); it('handles multi-selection highlight', function () { - chart.filter("T"); + chart.filter('T'); chart.redraw(); - chart.selectAll("g.node").each(function (d, i) { - expect(d3.select(this).attr("class")).toBe("node selected"); + chart.selectAll('g.node').each(function (d, i) { + expect(d3.select(this).attr('class')).toBe('node selected'); }); }); }); - describe('update', function() { + describe('update', function () { beforeEach(function () { chart.render(); - countryDimension.filter("CA"); + countryDimension.filter('CA'); chart.redraw(); }); it('creates correct label for each bubble', function () { - chart.selectAll("g.node title").each(function (d, i) { - if (i === 0) - expect(d3.select(this).text()).toBe("F: {count:0,value:0}"); - if (i === 1) - expect(d3.select(this).text()).toBe("T: {count:2,value:77}"); + chart.selectAll('g.node title').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).text()).toBe('F: {count:0,value:0}'); + } + if (i === 1) { + expect(d3.select(this).text()).toBe('T: {count:2,value:77}'); + } }); }); it('fills bubbles with correct colors', function () { - chart.selectAll("circle.bubble").each(function (d, i) { - if (i === 0) - expect(d3.select(this).attr("fill")).toBe("#a60000"); - if (i === 1) - expect(d3.select(this).attr("fill")).toBe("#ff4040"); + chart.selectAll('circle.bubble').each(function (d, i) { + if (i === 0) { + expect(d3.select(this).attr('fill')).toBe('#a60000'); + } + if (i === 1) { + expect(d3.select(this).attr('fill')).toBe('#ff4040'); + } }); }); }); - describe('with no filter', function() { + describe('with no filter', function () { beforeEach(function () { - countryDimension.filter("ZZ"); + countryDimension.filter('ZZ'); chart.render(); }); it('sets invisible if bubble has 0 r', function () { - chart.selectAll("g.node text").each(function (d, i) { - expect(Number(d3.select(this).attr("opacity"))).toBe(0); + chart.selectAll('g.node text').each(function (d, i) { + expect(Number(d3.select(this).attr('opacity'))).toBe(0); }); }); }); - describe('with elastic axises', function() { + describe('with elastic axises', function () { beforeEach(function () { chart.elasticY(true) .yAxisPadding(3) @@ -276,44 +295,44 @@ describe('dc.bubbleChart', function() { }); }); - describe('renderlet', function() { + describe('renderlet', function () { var renderlet; beforeEach(function () { // spyOn doesn't seem to work with plain functions renderlet = jasmine.createSpy('renderlet', function (chart) { - chart.selectAll("circle").attr("fill", "red"); + chart.selectAll('circle').attr('fill', 'red'); }); renderlet.and.callThrough(); - chart.on("renderlet", renderlet); + chart.on('renderlet', renderlet); }); it('is invoked with render', function () { chart.render(); - expect(chart.selectAll("circle").attr("fill")).toBe("red"); + expect(chart.selectAll('circle').attr('fill')).toBe('red'); expect(renderlet).toHaveBeenCalled(); }); it('is invoked with redraw', function () { chart.render().redraw(); - expect(chart.selectAll("circle").attr("fill")).toBe("red"); + expect(chart.selectAll('circle').attr('fill')).toBe('red'); expect(renderlet.calls.count()).toEqual(2); }); }); - describe('non-unique keys', function() { + describe('non-unique keys', function () { // plot all rows as (value, nvalue) - a common scatterplot scenario - beforeEach(function() { - var rowDimension = data.dimension(function(d, i) { + beforeEach(function () { + var rowDimension = data.dimension(function (d, i) { return i; }); var rowGroup = rowDimension.group(); chart.dimension(rowDimension).group(rowGroup) - .keyAccessor(function(kv) { + .keyAccessor(function (kv) { return +dateFixture[kv.key].value; }) - .valueAccessor(function(kv) { + .valueAccessor(function (kv) { return +dateFixture[kv.key].nvalue; }) .elasticY(true) @@ -325,7 +344,7 @@ describe('dc.bubbleChart', function() { }); it('generates right number of bubbles', function () { - expect(chart.selectAll("circle.bubble")[0].length).toBe(10); + expect(chart.selectAll('circle.bubble')[0].length).toBe(10); }); it('auto calculates x range based on width', function () { @@ -349,32 +368,32 @@ describe('dc.bubbleChart', function() { }); }); - describe('with logarithmic scales', function() { + describe('with logarithmic scales', function () { beforeEach(function () { - var rowDimension = data.dimension(function(d, i) { + var rowDimension = data.dimension(function (d, i) { return i; }); var rowGroup = rowDimension.group(); chart - .dimension(rowDimension).group(rowGroup) - .keyAccessor(function(kv) { + .dimension(rowDimension) + .group(rowGroup) + .keyAccessor(function (kv) { return 0; }) - .valueAccessor(function(kv) { + .valueAccessor(function (kv) { return 0; }) - .x(d3.scale.log().domain([1, 300])) - .y(d3.scale.log().domain([1, 10])) - .elasticX(false) - .elasticY(false) - ; + .x(d3.scale.log().domain([1, 300])) + .y(d3.scale.log().domain([1, 10])) + .elasticX(false) + .elasticY(false); }); it('renders without errors', function () { chart.render(); - chart.selectAll("g.node").each(function (d, i) { - expect(d3.select(this).attr("transform")).toMatchTranslate(0,0); + chart.selectAll('g.node').each(function (d, i) { + expect(d3.select(this).attr('transform')).toMatchTranslate(0,0); }); }); }); diff --git a/spec/bubble-overlay-spec.js b/spec/bubble-overlay-spec.js index da86c08bf..bd17afd65 100644 --- a/spec/bubble-overlay-spec.js +++ b/spec/bubble-overlay-spec.js @@ -1,102 +1,102 @@ -describe('dc.bubbleOverlay', function() { +/* global appendChartID, loadDateFixture */ +describe('dc.bubbleOverlay', function () { var chart, data; var dimension, group; - describe('creation', function() { - beforeEach(function() { + describe('creation', function () { + beforeEach(function () { data = crossfilter(loadDateFixture()); - dimension = data.dimension(function(d){return d.state;}); - group = dimension.group().reduceSum(function(d){return d.value;}); + dimension = data.dimension(function (d) {return d.state;}); + group = dimension.group().reduceSum(function (d) {return d.value;}); - var id = "bubble-overlay"; + var id = 'bubble-overlay'; var parent = appendChartID(id); - var svg = parent.append("svg"); + var svg = parent.append('svg'); - chart = dc.bubbleOverlay("#" + id) + chart = dc.bubbleOverlay('#' + id) .svg(svg) .dimension(dimension) .group(group) .width(300) .height(200) .transitionDuration(0) - .title(function(d){return "Title: " + d.key;}) + .title(function (d) {return 'Title: ' + d.key;}) .r(d3.scale.linear().domain([0, 500])) .ordinalColors(['blue']) - .point("California", 100, 120) - .point("Colorado", 300, 120) - .point("Delaware", 500, 220) - .point("Ontario", 180, 90) - .point("Mississippi", 120, 220) - .point("Oklahoma", 200, 350); + .point('California', 100, 120) + .point('Colorado', 300, 120) + .point('Delaware', 500, 220) + .point('Ontario', 180, 90) + .point('Mississippi', 120, 220) + .point('Oklahoma', 200, 350); chart.render(); }); - it('should generate an instance of the dc chart', function() { + it('should generate an instance of the dc chart', function () { expect(dc.instanceOfChart(chart)).toBeTruthy(); }); - it('should be registered', function() { + it('should be registered', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('should generate the correct number of overlay groups', function() { - expect(chart.selectAll("g.node")[0].length).toEqual(6); + it('should generate the correct number of overlay groups', function () { + expect(chart.selectAll('g.node')[0].length).toEqual(6); }); - it('should generate a correct class name for the overlay groups', function() { - expect(d3.select(chart.selectAll("g.node")[0][0]).attr("class")).toEqual("node california"); - expect(d3.select(chart.selectAll("g.node")[0][3]).attr("class")).toEqual("node ontario"); + it('should generate a correct class name for the overlay groups', function () { + expect(d3.select(chart.selectAll('g.node')[0][0]).attr('class')).toEqual('node california'); + expect(d3.select(chart.selectAll('g.node')[0][3]).attr('class')).toEqual('node ontario'); }); - it('should generate the correct number of overlay bubbles', function() { - expect(chart.selectAll("circle.bubble")[0].length).toEqual(6); + it('should generate the correct number of overlay bubbles', function () { + expect(chart.selectAll('circle.bubble')[0].length).toEqual(6); }); - it('should generate a correct translate for overlay groups', function() { - expect(d3.select(chart.selectAll("g.node")[0][0]).attr("transform")).toMatchTranslate(100, 120); - expect(d3.select(chart.selectAll("g.node")[0][3]).attr("transform")).toMatchTranslate(180, 90); + it('should generate a correct translate for overlay groups', function () { + expect(d3.select(chart.selectAll('g.node')[0][0]).attr('transform')).toMatchTranslate(100, 120); + expect(d3.select(chart.selectAll('g.node')[0][3]).attr('transform')).toMatchTranslate(180, 90); }); - it('should generate correct radii for circles', function() { - expect(d3.select(chart.selectAll("circle.bubble")[0][0]).attr("r")).toEqual("34.64"); - expect(d3.select(chart.selectAll("circle.bubble")[0][3]).attr("r")).toEqual("22.32"); + it('should generate correct radii for circles', function () { + expect(d3.select(chart.selectAll('circle.bubble')[0][0]).attr('r')).toEqual('34.64'); + expect(d3.select(chart.selectAll('circle.bubble')[0][3]).attr('r')).toEqual('22.32'); }); - it('should generate correct labels', function() { - expect(d3.select(chart.selectAll("g.node text")[0][0]).text()).toEqual("California"); - expect(d3.select(chart.selectAll("g.node text")[0][3]).text()).toEqual("Ontario"); + it('should generate correct labels', function () { + expect(d3.select(chart.selectAll('g.node text')[0][0]).text()).toEqual('California'); + expect(d3.select(chart.selectAll('g.node text')[0][3]).text()).toEqual('Ontario'); }); - it('should generate the label only once', function() { + it('should generate the label only once', function () { chart.redraw(); - expect(chart.selectAll("g.node text")[0].length).toEqual(6); + expect(chart.selectAll('g.node text')[0].length).toEqual(6); }); - it('generate the correct titles', function() { - expect(d3.select(chart.selectAll("g.node title")[0][0]).text()).toEqual("Title: California"); - expect(d3.select(chart.selectAll("g.node title")[0][3]).text()).toEqual("Title: Ontario"); + it('generate the correct titles', function () { + expect(d3.select(chart.selectAll('g.node title')[0][0]).text()).toEqual('Title: California'); + expect(d3.select(chart.selectAll('g.node title')[0][3]).text()).toEqual('Title: Ontario'); }); - it('should only generate titles once', function() { + it('should only generate titles once', function () { chart.redraw(); - expect(chart.selectAll("g.node title")[0].length).toEqual(6); + expect(chart.selectAll('g.node title')[0].length).toEqual(6); }); - it('should fill circles with the specified colors', function() { - expect(d3.select(chart.selectAll("circle.bubble")[0][0]).attr("fill")).toEqual("blue"); - expect(d3.select(chart.selectAll("circle.bubble")[0][3]).attr("fill")).toEqual("blue"); + it('should fill circles with the specified colors', function () { + expect(d3.select(chart.selectAll('circle.bubble')[0][0]).attr('fill')).toEqual('blue'); + expect(d3.select(chart.selectAll('circle.bubble')[0][3]).attr('fill')).toEqual('blue'); }); - it('should highlight the filtered bubbles', function() { - chart.filter("Colorado"); - chart.filter("California"); + it('should highlight the filtered bubbles', function () { + chart.filter('Colorado'); + chart.filter('California'); chart.redraw(); - expect(d3.select(chart.selectAll("g.node")[0][0]).attr("class")).toEqual("node california selected"); - expect(d3.select(chart.selectAll("g.node")[0][1]).attr("class")).toEqual("node colorado selected"); - expect(d3.select(chart.selectAll("g.node")[0][3]).attr("class")).toEqual("node ontario deselected"); + expect(d3.select(chart.selectAll('g.node')[0][0]).attr('class')).toEqual('node california selected'); + expect(d3.select(chart.selectAll('g.node')[0][1]).attr('class')).toEqual('node colorado selected'); + expect(d3.select(chart.selectAll('g.node')[0][3]).attr('class')).toEqual('node ontario deselected'); }); }); }); - diff --git a/spec/color-spec.js b/spec/color-spec.js index d81d4e4f0..e46924c5e 100644 --- a/spec/color-spec.js +++ b/spec/color-spec.js @@ -1,85 +1,86 @@ -describe('dc.colorMixin', function() { - function colorTest(chart, domain, test) { +/* global loadDateFixture */ +describe('dc.colorMixin', function () { + function colorTest (chart, domain, test) { chart.colorDomain(domain); return (test || domain).map(chart.getColor); } - function identity(d) { return d; } + function identity (d) { return d; } - describe('with ordinal domain' , function() { + describe('with ordinal domain' , function () { var chart, domain; - beforeEach(function() { + beforeEach(function () { chart = dc.colorMixin({}); chart.colorAccessor(identity); - domain = ["a","b","c","d","e"]; + domain = ['a','b','c','d','e']; }); - it('default', function() { + it('default', function () { expect(colorTest(chart,domain)).toEqual(['#3182bd','#6baed6','#9ecae1','#c6dbef','#e6550d']); }); - it('custom', function() { + it('custom', function () { chart.colors(d3.scale.category10()); expect(colorTest(chart,domain)).toEqual(['#1f77b4','#ff7f0e','#2ca02c','#d62728','#9467bd']); }); - it('ordinal', function() { + it('ordinal', function () { chart.ordinalColors(['red','green','blue']); expect(colorTest(chart,domain)).toEqual(['red','green','blue','red','green']); }); - it('linear', function() { + it('linear', function () { // GIGO: mapping ordinal domain to linear scale is nonsensical // actually it gets scaled to NaN and then d3 corrects it chart.linearColors(['#FF0000','#00FF00']); - expect(colorTest(chart,domain)).toEqual([ '#000000', '#000000', '#000000', '#000000', '#000000' ]); + expect(colorTest(chart,domain)).toEqual(['#000000', '#000000', '#000000', '#000000', '#000000']); }); }); - describe('with numeric domain' , function() { + describe('with numeric domain' , function () { var chart, domain, test; - beforeEach(function() { + beforeEach(function () { chart = dc.colorChart({}); chart.colorAccessor(identity); domain = [1,100]; test = [0,1,50,100,101,1]; }); - it('default', function() { + it('default', function () { expect(colorTest(chart,domain,test)).toEqual(['#9ecae1','#3182bd','#c6dbef','#6baed6','#e6550d','#3182bd']); }); - it('custom', function() { + it('custom', function () { chart.colors(d3.scale.category10()); - expect(colorTest(chart,domain,test)).toEqual(['#2ca02c', '#1f77b4', '#d62728', '#ff7f0e', '#9467bd', '#1f77b4' ]); + expect(colorTest(chart,domain,test)).toEqual(['#2ca02c', '#1f77b4', '#d62728', '#ff7f0e', '#9467bd', '#1f77b4']); }); - it('ordinal', function() { + it('ordinal', function () { chart.ordinalColors(['red','green','blue']); - expect(colorTest(chart,domain,test)).toEqual(['blue', 'red', 'red', 'green', 'green', 'red' ]); + expect(colorTest(chart,domain,test)).toEqual(['blue', 'red', 'red', 'green', 'green', 'red']); }); - it('linear', function() { + it('linear', function () { chart.linearColors(['#4575b4','#ffffbf']); - expect(colorTest(chart,domain,test)).toEqual(['#4773b3', '#4575b4', '#4dc6c1', '#ffffbf', '#ffffc0', '#4575b4' ]); + expect(colorTest(chart,domain,test)).toEqual(['#4773b3', '#4575b4', '#4dc6c1', '#ffffbf', '#ffffc0', '#4575b4']); }); }); - describe('calculateColorDomain' , function() { + describe('calculateColorDomain' , function () { var chart; - beforeEach(function() { + beforeEach(function () { var data = crossfilter(loadDateFixture()); - var valueDimension = data.dimension(function(d) { + var valueDimension = data.dimension(function (d) { return d.value; }); var valueGroup = valueDimension.group(); chart = dc.colorChart(dc.baseChart({})) - .colorAccessor(function(d){return d.value;}) + .colorAccessor(function (d) {return d.value;}) .group(valueGroup); }); - it('check domain', function() { + it('check domain', function () { chart.calculateColorDomain(); expect(chart.colorDomain()).toEqual([1,3]); }); diff --git a/spec/composite-chart-spec.js b/spec/composite-chart-spec.js index ac9a2a9e9..b35c13443 100644 --- a/spec/composite-chart-spec.js +++ b/spec/composite-chart-spec.js @@ -1,11 +1,12 @@ -describe('dc.compositeChart', function() { +/* global appendChartID, loadDateFixture, makeDate */ +describe('dc.compositeChart', function () { var id, chart, data, dateDimension, dateValueSumGroup, dateIdSumGroup, dateGroup; beforeEach(function () { data = crossfilter(loadDateFixture()); - dateDimension = data.dimension(function(d) { return d3.time.day.utc(d.dd); }); - dateValueSumGroup = dateDimension.group().reduceSum(function(d) { return d.value; }); - dateIdSumGroup = dateDimension.group().reduceSum(function(d) { return d.id; }); + dateDimension = data.dimension(function (d) { return d3.time.day.utc(d.dd); }); + dateValueSumGroup = dateDimension.group().reduceSum(function (d) { return d.value; }); + dateIdSumGroup = dateDimension.group().reduceSum(function (d) { return d.id; }); dateGroup = dateDimension.group(); id = 'composite-chart'; @@ -36,7 +37,7 @@ describe('dc.compositeChart', function() { ]); }); - it('should registered the chart with DC', function(){ + it('should registered the chart with DC', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); @@ -73,11 +74,11 @@ describe('dc.compositeChart', function() { expect(chart.x().domain()[1].getTime()).toBe(makeDate(2012, 7, 15).getTime()); }); - it('should set the x units', function(){ + it('should set the x units', function () { expect(chart.xUnits()).toBe(d3.time.days.utc); }); - it('should create the x axis', function(){ + it('should create the x axis', function () { expect(chart.xAxis()).not.toBeNull(); }); @@ -106,16 +107,16 @@ describe('dc.compositeChart', function() { expect(chart.valueAccessor()).not.toBeNull(); }); - describe('rendering the chart', function(){ - beforeEach(function(){ + describe('rendering the chart', function () { + beforeEach(function () { chart.render(); }); - it('should create a root SVG element', function(){ + it('should create a root SVG element', function () { expect(chart.svg().empty()).toBeFalsy(); }); - it('should create a root SVG group element', function(){ + it('should create a root SVG group element', function () { expect(chart.g().empty()).toBeFalsy(); }); @@ -139,11 +140,11 @@ describe('dc.compositeChart', function() { expect(chart.y().domain()).toEqual([0, 281]); }); - it('should place the x axis at the bottom', function(){ + it('should place the x axis at the bottom', function () { expect(chart.select('svg g g.x').attr('transform')).toMatchTranslate(30,120); }); - it('should place the y axis to the left', function(){ + it('should place the y axis to the left', function () { expect(chart.select('svg g g.y').attr('transform')).toMatchTranslate(30,10); }); @@ -158,27 +159,29 @@ describe('dc.compositeChart', function() { it('should generate sub line chart paths', function () { expect(chart.selectAll('g.sub path.line').size()).not.toBe(0); - chart.selectAll('g.sub path.line').each(function(d, i) { + chart.selectAll('g.sub path.line').each(function (d, i) { switch (i) { case 0: expect(d3.select(this).attr('d')) - .toMatchPath('M24.137931034482758,110L91.72413793103448,108L101.37931034482757,103L202.75862068965515,108L246.20689655172413,104L395.8620689655172,105'); + .toMatchPath('M24.137931034482758,110L91.72413793103448,108L101.37931034482757,103L202.75862068965515,' + + '108L246.20689655172413,104L395.8620689655172,105'); break; case 1: expect(d3.select(this).attr('d')) - .toMatchPath('M24.137931034482758,92L91.72413793103448,82L101.37931034482757,52L202.75862068965515,91L246.20689655172413,83L395.8620689655172,75'); + .toMatchPath('M24.137931034482758,92L91.72413793103448,82L101.37931034482757,52L202.75862068965515,' + + '91L246.20689655172413,83L395.8620689655172,75'); break; } }); }); - it('should generate sub bar charts', function(){ + it('should generate sub bar charts', function () { expect(chart.selectAll('g.sub g._0 rect').size()).toBe(6); }); it('should render sub bar chart', function () { expect(chart.selectAll('g.sub rect.bar').size()).not.toBe(0); - chart.selectAll('g.sub rect.bar').each(function(d, i) { + chart.selectAll('g.sub rect.bar').each(function (d, i) { switch (i) { case 0: expect(d3.select(this).attr('x')).toBeCloseTo('22.637931034482758', 3); @@ -216,9 +219,9 @@ describe('dc.compositeChart', function() { }); it('should have clip path refs', function () { - expect(chart.selectAll("g.chart-body").size()).not.toBe(0); - chart.selectAll("g.chart-body").each(function(){ - expect(d3.select(this).attr("clip-path")).toMatchUrl("#composite-chart-clip"); + expect(chart.selectAll('g.chart-body').size()).not.toBe(0); + chart.selectAll('g.chart-body').each(function () { + expect(d3.select(this).attr('clip-path')).toMatchUrl('#composite-chart-clip'); }); }); }); @@ -231,14 +234,17 @@ describe('dc.compositeChart', function() { it('should have a resize handle', function () { expect(chart.selectAll('g.brush .resize path').size()).not.toBe(0); - chart.selectAll('g.brush .resize path').each(function(d, i) { - if (i === 0){ + chart.selectAll('g.brush .resize path').each(function (d, i) { + if (i === 0) { expect(d3.select(this).attr('d')) - .toMatchPath('M0.5,36.666666666666664A6,6 0 0 1 6.5,42.666666666666664V67.33333333333333A6,6 0 0 1 0.5,73.33333333333333ZM2.5,44.666666666666664V65.33333333333333M4.5,44.666666666666664V65.33333333333333'); - } - else{ + .toMatchPath('M0.5,36.666666666666664A6,6 0 0 1 6.5,42.666666666666664V67.33333333333333A6,' + + '6 0 0 1 0.5,73.33333333333333ZM2.5,44.666666666666664V65.33333333333333M4.5,' + + '44.666666666666664V65.33333333333333'); + } else { expect(d3.select(this).attr('d')) - .toMatchPath('M-0.5,36.666666666666664A6,6 0 0 0 -6.5,42.666666666666664V67.33333333333333A6,6 0 0 0 -0.5,73.33333333333333ZM-2.5,44.666666666666664V65.33333333333333M-4.5,44.666666666666664V65.33333333333333'); + .toMatchPath('M-0.5,36.666666666666664A6,6 0 0 0 -6.5,42.666666666666664V67.33333333333333A6,' + + '6 0 0 0 -0.5,73.33333333333333ZM-2.5,44.666666666666664V65.33333333333333M-4.5,' + + '44.666666666666664V65.33333333333333'); } }); }); @@ -270,13 +276,13 @@ describe('dc.compositeChart', function() { }); describe('after filtering all', function () { - beforeEach(function(){ + beforeEach(function () { chart.filterAll(); chart.redraw(); }); it('should bring all bars to the foreground', function () { - chart.selectAll('g rect.bar').each(function(d) { + chart.selectAll('g rect.bar').each(function (d) { expect(d3.select(this).attr('class')).toBe('bar'); }); }); @@ -293,15 +299,15 @@ describe('dc.compositeChart', function() { }); it('should generate legend labels for each sub-chart', function () { - expect(chart.selectAll("g.dc-legend-item text").size()).toBe(5); + expect(chart.selectAll('g.dc-legend-item text').size()).toBe(5); }); it('should be placed according to its own legend option, ignoring the sub-charts', function () { - expect(chart.select("g.dc-legend").attr("transform")).toMatchTranslate(200,10); + expect(chart.select('g.dc-legend').attr('transform')).toMatchTranslate(200,10); }); it('should generate legend labels with their associated group text', function () { - function legendText(n) { + function legendText (n) { return d3.select(chart.selectAll('g.dc-legend g.dc-legend-item text')[0][n]).text(); } expect(legendText(0)).toBe('Date Value Group Bar'); @@ -314,28 +320,28 @@ describe('dc.compositeChart', function() { it('should properly delegate highlighting to its children', function () { var firstItem = chart.select('g.dc-legend g.dc-legend-item'); - firstItem.on("mouseover")(firstItem.datum()); - expect(chart.selectAll("rect.highlight").size()).toBe(6); - expect(chart.selectAll("path.fadeout").size()).toBe(4); - firstItem.on("mouseout")(firstItem.datum()); - expect(chart.selectAll("rect.highlight").size()).toBe(0); - expect(chart.selectAll("path.fadeout").size()).toBe(0); + firstItem.on('mouseover')(firstItem.datum()); + expect(chart.selectAll('rect.highlight').size()).toBe(6); + expect(chart.selectAll('path.fadeout').size()).toBe(4); + firstItem.on('mouseout')(firstItem.datum()); + expect(chart.selectAll('rect.highlight').size()).toBe(0); + expect(chart.selectAll('path.fadeout').size()).toBe(0); }); - it('should hide hidable child stacks', function() { + it('should hide hidable child stacks', function () { var dateValueGroupLine2 = d3.select(chart.selectAll('g.dc-legend g.dc-legend-item')[0][3]); - dateValueGroupLine2.on("click")(dateValueGroupLine2.datum()); + dateValueGroupLine2.on('click')(dateValueGroupLine2.datum()); expect(dateValueGroupLine2.text()).toBe('Date Value Group Line 2'); - expect(d3.select(chart.selectAll('g.dc-legend g.dc-legend-item')[0][3]).classed("fadeout")).toBeTruthy(); - expect(chart.selectAll("path.line").size()).toEqual(3); + expect(d3.select(chart.selectAll('g.dc-legend g.dc-legend-item')[0][3]).classed('fadeout')).toBeTruthy(); + expect(chart.selectAll('path.line').size()).toEqual(3); }); }); }); describe('elastic chart axes', function () { beforeEach(function () { - data.dimension(function(d) { + data.dimension(function (d) { return d.countrycode; }).filter('CA'); @@ -354,8 +360,8 @@ describe('dc.compositeChart', function() { describe('subchart renderlets', function () { beforeEach(function () { - chart.children()[0].on("renderlet", function(chart) { - chart.selectAll('rect.bar').attr('width', function(d) { + chart.children()[0].on('renderlet', function (chart) { + chart.selectAll('rect.bar').attr('width', function (d) { return 10; }); }); @@ -369,22 +375,22 @@ describe('dc.compositeChart', function() { describe('when two subcharts share the same group', function () { beforeEach(function () { - var dimension = data.dimension(function(d) { + var dimension = data.dimension(function (d) { return d.status; }); var group = dimension.group().reduce( - function(p, v) { + function (p, v) { ++p.count; p.value += +v.value; return p; }, - function(p, v) { + function (p, v) { --p.count; p.value -= +v.value; return p; }, - function() { - return { count: 0, value: 0 }; + function () { + return {count: 0, value: 0}; } ); chart @@ -395,32 +401,36 @@ describe('dc.compositeChart', function() { .xUnits(dc.units.ordinal) .compose([ dc.lineChart(chart) - .group(group, "Series 1") + .group(group, 'Series 1') .valueAccessor(function (d) { return d.value.count; }) .title(function (d) { var value = d.value.count; - if (isNaN(value)) value = 0; - return "Count: " + d3.format("d")(value); + if (isNaN(value)) { + value = 0; + } + return 'Count: ' + d3.format('d')(value); }), dc.lineChart(chart) - .group(group, "Series 2") + .group(group, 'Series 2') .valueAccessor(function (d) { return d.value.value; }) .title(function (d) { var value = d.value.value; - if (isNaN(value)) value = 0; - return "Value: " + d3.format("d")(value); + if (isNaN(value)) { + value = 0; + } + return 'Value: ' + d3.format('d')(value); }) ]).render(); }); it('should set a tooltip based on the shared group', function () { - expect(chart.select(".sub._0 .dc-tooltip._0 .dot title").text()).toBe("Count: 5"); - expect(chart.select(".sub._1 .dc-tooltip._0 .dot title").text()).toBe("Value: 220"); + expect(chart.select('.sub._0 .dc-tooltip._0 .dot title').text()).toBe('Count: 5'); + expect(chart.select('.sub._1 .dc-tooltip._0 .dot title').text()).toBe('Value: 220'); }); }); @@ -431,12 +441,12 @@ describe('dc.compositeChart', function() { }); it('should respect boolean flag when title not set', function () { - expect(chart.select(".sub._0 .dc-tooltip._0 .dot").empty()).toBeTruthy(); - expect(chart.select(".sub._1 .dc-tooltip._0 .dot").empty()).toBeTruthy(); + expect(chart.select('.sub._0 .dc-tooltip._0 .dot').empty()).toBeTruthy(); + expect(chart.select('.sub._1 .dc-tooltip._0 .dot').empty()).toBeTruthy(); }); }); - describe('the y-axes', function() { + describe('the y-axes', function () { describe('when composing charts with both left and right y-axes', function () { var rightChart; @@ -459,7 +469,7 @@ describe('dc.compositeChart', function() { }); it('should render a right and a left label', function () { - chart.yAxisLabel("Left Label").rightYAxisLabel("Right Label").render(); + chart.yAxisLabel('Left Label').rightYAxisLabel('Right Label').render(); expect(chart.selectAll('.y-axis-label').size()).toBe(2); expect(chart.selectAll('.y-axis-label.y-label').empty()).toBeFalsy(); @@ -484,26 +494,26 @@ describe('dc.compositeChart', function() { expect(rightChart.yAxis()).toBe(chart.rightYAxis()); }); - describe('horizontal gridlines', function() { - beforeEach(function() { + describe('horizontal gridlines', function () { + beforeEach(function () { chart.yAxis().ticks(3); chart.rightYAxis().ticks(6); chart.renderHorizontalGridLines(true).render(); }); - it('should draw left horizontal gridlines by default', function() { + it('should draw left horizontal gridlines by default', function () { expect(chart.selectAll('.grid-line.horizontal line').size()).toBe(3); }); - it('should allow right horizontal gridlines to be used', function() { + it('should allow right horizontal gridlines to be used', function () { chart.useRightAxisGridLines(true).render(); expect(chart.selectAll('.grid-line.horizontal line').size()).toBe(6); }); }); }); - describe('when composing charts with just a left axis', function() { - beforeEach(function() { + describe('when composing charts with just a left axis', function () { + beforeEach(function () { chart.yAxis().ticks(4); chart.compose([ dc.lineChart(chart).group(dateGroup) @@ -520,7 +530,7 @@ describe('dc.compositeChart', function() { }); }); - describe('when composing charts with just a right axis', function() { + describe('when composing charts with just a right axis', function () { beforeEach(function () { chart.yAxis().ticks(7); chart.compose([ @@ -537,23 +547,19 @@ describe('dc.compositeChart', function() { expect(chart.selectAll('.grid-line.horizontal line').size()).toBe(7); }); }); - - function nthGridLine(n) { - return d3.select(chart.selectAll('.grid-line.horizontal line')[0][n]); - } }); - describe('sub-charts with different filter types', function() { + describe('sub-charts with different filter types', function () { var scatterGroup, scatterDimension; var lineGroup, lineDimension; beforeEach(function () { data = crossfilter(loadDateFixture()); - scatterDimension = data.dimension(function(d) { return [+d.value, +d.nvalue]; }); + scatterDimension = data.dimension(function (d) { return [+d.value, +d.nvalue]; }); scatterGroup = scatterDimension.group(); - lineDimension = data.dimension(function(d) { return +d.value; }); + lineDimension = data.dimension(function (d) { return +d.value; }); lineGroup = lineDimension.group(); chart @@ -572,37 +578,37 @@ describe('dc.compositeChart', function() { var otherDimension; beforeEach(function () { - otherDimension = data.dimension(function(d) { return [+d.value, +d.nvalue]; }); + otherDimension = data.dimension(function (d) { return [+d.value, +d.nvalue]; }); chart.brush().extent([22, 35]); - chart.brush().on("brush")(); + chart.brush().on('brush')(); chart.redraw(); }); - it('should filter the child charts', function() { + it('should filter the child charts', function () { expect(otherDimension.top(Infinity).length).toBe(4); }); describe('brush decreases in size', function () { beforeEach(function () { chart.brush().extent([22, 33]); - chart.brush().on("brush")(); + chart.brush().on('brush')(); chart.redraw(); }); - it('should filter down to fewer points', function() { + it('should filter down to fewer points', function () { expect(otherDimension.top(Infinity).length).toBe(2); }); }); - describe('brush disappears', function() { - beforeEach(function() { + describe('brush disappears', function () { + beforeEach(function () { chart.brush().extent([22, 22]); - chart.brush().on("brush")(); + chart.brush().on('brush')(); chart.redraw(); }); - it('should clear all filters', function() { + it('should clear all filters', function () { expect(otherDimension.top(Infinity).length).toBe(10); }); }); diff --git a/spec/coordinate-grid-chart-spec.js b/spec/coordinate-grid-chart-spec.js index ffc05aecb..d9b5f5bf6 100644 --- a/spec/coordinate-grid-chart-spec.js +++ b/spec/coordinate-grid-chart-spec.js @@ -1,29 +1,29 @@ - -describe('dc.coordinateGridChart', function() { +/* global appendChartID, loadDateFixture, makeDate */ +describe('dc.coordinateGridChart', function () { var chart, id; var data, dimension, group; beforeEach(function () { data = crossfilter(loadDateFixture()); - dimension = data.dimension(function(d) { return d3.time.day.utc(d.dd); }); + dimension = data.dimension(function (d) { return d3.time.day.utc(d.dd); }); group = dimension.group(); - id = "coordinate-grid-chart"; + id = 'coordinate-grid-chart'; appendChartID(id); - chart = dc.lineChart("#" + id) + chart = dc.lineChart('#' + id) .width(500) .height(150) .dimension(dimension) .group(group) .transitionDuration(0) .brushOn(false) - .margins({ top: 20, bottom: 0, right: 10, left: 0 }) + .margins({top: 20, bottom: 0, right: 10, left: 0}) .x(d3.time.scale.utc().domain([makeDate(2012, 4, 20), makeDate(2012, 7, 15)])); }); - describe("rendering", function() { - beforeEach(function() { + describe('rendering', function () { + beforeEach(function () { chart.render(); }); @@ -117,54 +117,54 @@ describe('dc.coordinateGridChart', function() { describe('renderlets', function () { beforeEach(function () { - chart.on("renderlet", function (chart) { - chart.selectAll("path").attr("fill", "red"); + chart.on('renderlet', function (chart) { + chart.selectAll('path').attr('fill', 'red'); }); }); it('should not run immediately', function () { - expect(chart.selectAll("path").attr("fill")).not.toBe("red"); + expect(chart.selectAll('path').attr('fill')).not.toBe('red'); }); it('should run when render is invoked', function () { chart.render(); - expect(chart.selectAll("path").attr("fill")).toBe("red"); + expect(chart.selectAll('path').attr('fill')).toBe('red'); }); it('should run when redraw is invoked', function () { chart.redraw(); - expect(chart.selectAll("path").attr("fill")).toBe("red"); + expect(chart.selectAll('path').attr('fill')).toBe('red'); }); }); describe('clip paths', function () { it('should only create one def', function () { - expect(chart.selectAll("defs").size()).toBe(1); + expect(chart.selectAll('defs').size()).toBe(1); }); it('should only create one clip path', function () { // selecting on ID due to webkit bug #83438 - expect(chart.selectAll("defs #coordinate-grid-chart-clip").size()).toBe(1); + expect(chart.selectAll('defs #coordinate-grid-chart-clip').size()).toBe(1); }); it('should only create one clip rect', function () { - expect(chart.selectAll("defs #coordinate-grid-chart-clip rect").size()).toBe(1); + expect(chart.selectAll('defs #coordinate-grid-chart-clip rect').size()).toBe(1); }); it('should create a clip rect based on the graph size', function () { - var rect = chart.select("defs #coordinate-grid-chart-clip rect"); - expect(rect.attr("width")).toBe('490'); - expect(rect.attr("height")).toBe('130'); + var rect = chart.select('defs #coordinate-grid-chart-clip rect'); + expect(rect.attr('width')).toBe('490'); + expect(rect.attr('height')).toBe('130'); }); it('should translate the clip rect to 0,0', function () { - var rect = chart.select("defs #coordinate-grid-chart-clip rect"); + var rect = chart.select('defs #coordinate-grid-chart-clip rect'); expect(rect.attr('transform')).toMatchTranslate(0,0); }); it('should add clip path refs to the chart body', function () { - chart.selectAll("g.chart-body").each(function () { - expect(d3.select(this).attr("clip-path")).toMatchUrl("#coordinate-grid-chart-clip"); + chart.selectAll('g.chart-body').each(function () { + expect(d3.select(this).attr('clip-path')).toMatchUrl('#coordinate-grid-chart-clip'); }); }); @@ -176,66 +176,66 @@ describe('dc.coordinateGridChart', function() { }); it('should update the clip rect based on the graph size and clipPadding', function () { - var rect = chart.select("defs #coordinate-grid-chart-clip rect"); + var rect = chart.select('defs #coordinate-grid-chart-clip rect'); expect(rect.attr('width')).toBe('530'); expect(rect.attr('height')).toBe('170'); }); it('should translate the clip rect to -20,-20', function () { - var rect = chart.select("defs #coordinate-grid-chart-clip rect"); + var rect = chart.select('defs #coordinate-grid-chart-clip rect'); expect(rect.attr('transform')).toMatchTranslate(-20,-20); }); }); - describe('with a complex selector', function() { - beforeEach(function() { - var sel = appendChartID('coordinate-grid').append('div').attr('class', 'chart'); - chart = dc.lineChart("#coordinate-grid .chart") + describe('with a complex selector', function () { + beforeEach(function () { + appendChartID('coordinate-grid').append('div').attr('class', 'chart'); + chart = dc.lineChart('#coordinate-grid .chart') .width(500) .height(150) .dimension(dimension) .group(group) .transitionDuration(0) .brushOn(false) - .margins({ top: 20, bottom: 0, right: 10, left: 0 }) + .margins({top: 20, bottom: 0, right: 10, left: 0}) .x(d3.time.scale.utc().domain([makeDate(2012, 4, 20), makeDate(2012, 7, 15)])); chart.render(); }); - it('should generate a valid clippath id', function() { - var rect = chart.select("defs #coordinate-grid--chart-clip rect"); + it('should generate a valid clippath id', function () { + var rect = chart.select('defs #coordinate-grid--chart-clip rect'); expect(rect.empty()).toBeFalsy(); }); }); - describe('with a selector containing brackets', function() { - beforeEach(function() { - var sel = appendChartID('coordinate-grid').append('div').attr('class', 'chart').attr('foo', 'bar'); - chart = dc.lineChart("#coordinate-grid .chart[foo=bar]") + describe('with a selector containing brackets', function () { + beforeEach(function () { + appendChartID('coordinate-grid').append('div').attr('class', 'chart').attr('foo', 'bar'); + chart = dc.lineChart('#coordinate-grid .chart[foo=bar]') .width(500) .height(150) .dimension(dimension) .group(group) .transitionDuration(0) .brushOn(false) - .margins({ top: 20, bottom: 0, right: 10, left: 0 }) + .margins({top: 20, bottom: 0, right: 10, left: 0}) .x(d3.time.scale.utc().domain([makeDate(2012, 4, 20), makeDate(2012, 7, 15)])); chart.render(); }); - it('should generate a valid clippath id', function() { - var rect = chart.select("defs #coordinate-grid--chart-foo-bar--clip rect"); + it('should generate a valid clippath id', function () { + var rect = chart.select('defs #coordinate-grid--chart-foo-bar--clip rect'); expect(rect.empty()).toBeFalsy(); }); }); - describe('redrawing at a different size', function() { - beforeEach(function() { + describe('redrawing at a different size', function () { + beforeEach(function () { chart.width(300).height(400).redraw(); }); - it('should change the clippath to the new size', function() { - var rect = chart.select("defs #coordinate-grid-chart-clip rect"); - expect(rect.attr("width")).toBe('290'); - expect(rect.attr("height")).toBe('380'); + it('should change the clippath to the new size', function () { + var rect = chart.select('defs #coordinate-grid-chart-clip rect'); + expect(rect.attr('width')).toBe('290'); + expect(rect.attr('height')).toBe('380'); }); }); }); @@ -244,7 +244,7 @@ describe('dc.coordinateGridChart', function() { it('should trigger a descriptive exception', function () { try { dc.coordinateGridChart({}).group({}).dimension({}).render(); - expect("exception").toBe("thrown"); + expect('exception').toBe('thrown'); } catch (e) { expect(e instanceof dc.errors.InvalidStateException).toBeTruthy(); expect(e.message).toMatch(/Mandatory attribute chart.x is missing on chart\[#.+\]/); @@ -252,46 +252,46 @@ describe('dc.coordinateGridChart', function() { }); }); - describe("x-axis", function() { + describe('x-axis', function () { it('should place an x axis at the bottom', function () { - expect(chart.select("g.x").attr("transform")).toMatchTranslate(0,150); + expect(chart.select('g.x').attr('transform')).toMatchTranslate(0,150); }); - it('should update x axis position when the chart height is changed', function() { + it('should update x axis position when the chart height is changed', function () { chart.elasticX(true).height(400).redraw(); - expect(chart.select("g.x").attr("transform")).toMatchTranslate(0,400); + expect(chart.select('g.x').attr('transform')).toMatchTranslate(0,400); }); - describe("labels", function() { - beforeEach(function() { + describe('labels', function () { + beforeEach(function () { expect(chart.effectiveHeight()).toBe(130); - chart.xAxisLabel("X Label").render(); + chart.xAxisLabel('X Label').render(); }); - it("should set the x-axis label", function() { - expect(chart.selectAll("text.x-axis-label").text()).toBe("X Label"); + it('should set the x-axis label', function () { + expect(chart.selectAll('text.x-axis-label').text()).toBe('X Label'); }); - it("should adjust the chart height accordingly due to label padding", function() { + it('should adjust the chart height accordingly due to label padding', function () { expect(chart.effectiveHeight()).toBe(118); }); - describe("with custom padding", function() { - beforeEach(function() { - chart.xAxisLabel("Custom X Label", 50).render(); + describe('with custom padding', function () { + beforeEach(function () { + chart.xAxisLabel('Custom X Label', 50).render(); }); - it("should adjust the chart height with respect to the custom padding", function() { + it('should adjust the chart height with respect to the custom padding', function () { expect(chart.effectiveHeight()).toBe(80); }); }); - describe("reset axis label", function() { - beforeEach(function() { - chart.elasticX(true).xAxisLabel("New X Label").redraw(); + describe('reset axis label', function () { + beforeEach(function () { + chart.elasticX(true).xAxisLabel('New X Label').redraw(); }); - it("should change the x-axis label", function() { - expect(chart.selectAll("text.x-axis-label").text()).toBe("New X Label"); + it('should change the x-axis label', function () { + expect(chart.selectAll('text.x-axis-label').text()).toBe('New X Label'); }); }); }); @@ -377,13 +377,13 @@ describe('dc.coordinateGridChart', function() { }); }); - describe('with an ordinal x axis', function() { - beforeEach(function() { + describe('with an ordinal x axis', function () { + beforeEach(function () { chart.x(d3.scale.ordinal()) .xUnits(dc.units.ordinal) .render(); }); - it('should render without errors', function() { + it('should render without errors', function () { expect(chart.selectAll('.grid-line.vertical line').size()).toBe(6); }); }); @@ -400,37 +400,37 @@ describe('dc.coordinateGridChart', function() { }); it('should orient the y-axis text to the left by default', function () { - expect(chart.yAxis().orient()).toBe("left"); + expect(chart.yAxis().orient()).toBe('left'); }); it('should place the y axis to the left', function () { - expect(chart.select("g.y").attr("transform")).toMatchTranslate(0,20); + expect(chart.select('g.y').attr('transform')).toMatchTranslate(0,20); }); describe('y-axis labels', function () { beforeEach(function () { expect(chart.effectiveWidth()).toBe(490); - chart.yAxisLabel("The Y Axis Label").render(); + chart.yAxisLabel('The Y Axis Label').render(); }); it('should display provided label text', function () { - expect(chart.selectAll('text.y-axis-label.y-label').text()).toBe("The Y Axis Label"); + expect(chart.selectAll('text.y-axis-label.y-label').text()).toBe('The Y Axis Label'); }); - it("should change the effective width of the chart due to padding", function() { + it('should change the effective width of the chart due to padding', function () { expect(chart.effectiveWidth()).toBe(478); }); it('should position the label to the left of the chart', function () { - expect(chart.selectAll('text.y-axis-label.y-label').attr("transform")).toMatchTransRot(12,85,-90); + expect(chart.selectAll('text.y-axis-label.y-label').attr('transform')).toMatchTransRot(12,85,-90); }); - describe("with custom padding", function() { - beforeEach(function() { - chart.yAxisLabel("Custom Y Label", 50).render(); + describe('with custom padding', function () { + beforeEach(function () { + chart.yAxisLabel('Custom Y Label', 50).render(); }); - it("should adjust the chart height with respect to the custom padding", function() { + it('should adjust the chart height with respect to the custom padding', function () { expect(chart.effectiveWidth()).toBe(440); }); }); @@ -447,7 +447,7 @@ describe('dc.coordinateGridChart', function() { }); it('should orient the y-axis text to the right', function () { - expect(chart.yAxis().orient()).toBe("right"); + expect(chart.yAxis().orient()).toBe('right'); }); it('should position the axis to the right of the chart', function () { @@ -457,27 +457,27 @@ describe('dc.coordinateGridChart', function() { describe('y-axis labels', function () { beforeEach(function () { expect(chart.effectiveWidth()).toBe(490); - chart.yAxisLabel("Right Y Axis Label").render(); + chart.yAxisLabel('Right Y Axis Label').render(); }); it('should display provided label text', function () { - expect(chart.selectAll('text.y-axis-label.y-label').text()).toBe("Right Y Axis Label"); + expect(chart.selectAll('text.y-axis-label.y-label').text()).toBe('Right Y Axis Label'); }); - it("should change the effective width of the chart due to padding", function() { + it('should change the effective width of the chart due to padding', function () { expect(chart.effectiveWidth()).toBe(478); }); it('should position the label to the right of the chart', function () { - expect(chart.selectAll('text.y-axis-label.y-label').attr("transform")).toMatchTransRot(488,85,90); + expect(chart.selectAll('text.y-axis-label.y-label').attr('transform')).toMatchTransRot(488,85,90); }); - describe("with custom padding", function() { - beforeEach(function() { - chart.yAxisLabel("Custom Y Label", 50).render(); + describe('with custom padding', function () { + beforeEach(function () { + chart.yAxisLabel('Custom Y Label', 50).render(); }); - it("should adjust the chart height with respect to the custom padding", function() { + it('should adjust the chart height with respect to the custom padding', function () { expect(chart.effectiveWidth()).toBe(440); }); }); @@ -487,11 +487,11 @@ describe('dc.coordinateGridChart', function() { }); describe('elastic axis', function () { - describe("with data", function() { + describe('with data', function () { beforeEach(function () { - data.dimension(function(d) { + data.dimension(function (d) { return d.countrycode; - }).filter("CA"); + }).filter('CA'); chart.elasticX(true).elasticY(true).render(); }); @@ -505,16 +505,16 @@ describe('dc.coordinateGridChart', function() { }); }); - describe("with no data", function() { - beforeEach(function() { - data.dimension(function(d) { + describe('with no data', function () { + beforeEach(function () { + data.dimension(function (d) { return d.countrycode; - }).filter("INVALID CODE"); + }).filter('INVALID CODE'); chart.elasticX(true).elasticY(true).render(); }); - it("should set y-axis to be empty", function() { + it('should set y-axis to be empty', function () { expect(chart.y().domain()[0]).toBe(0); expect(chart.y().domain()[1]).toBe(0); }); @@ -522,7 +522,7 @@ describe('dc.coordinateGridChart', function() { }); }); - describe("rescaling", function () { + describe('rescaling', function () { var originalUnitCount; beforeEach(function () { chart.render(); @@ -531,12 +531,12 @@ describe('dc.coordinateGridChart', function() { chart.rescale(); }); - it("should reset x unit count to reflect updated x domain", function () { + it('should reset x unit count to reflect updated x domain', function () { expect(chart.xUnitCount()).not.toEqual(originalUnitCount); }); }); - describe("range chart setup", function () { + describe('range chart setup', function () { var rangeChart; beforeEach(function () { @@ -546,84 +546,84 @@ describe('dc.coordinateGridChart', function() { rangeChart.render(); }); - it("should set our chart as range chart's focus chart", function () { + it('should set our chart as range chart\'s focus chart', function () { expect(chart.rangeChart().focusChart()).toEqual(chart); }); }); - describe("restricting zoom out", function () { + describe('restricting zoom out', function () { beforeEach(function () { chart.zoomScale([-1,10]); chart.zoomOutRestrict(true); }); - it("should set the start of zoom scale extent to 1", function () { + it('should set the start of zoom scale extent to 1', function () { expect(chart.zoomScale()[0]).toEqual(1); }); - it("sohuld leave the end of zoom scale extent unchanged", function () { + it('sohuld leave the end of zoom scale extent unchanged', function () { expect(chart.zoomScale()[1]).toEqual(10); }); }); - describe("disabling zoom out restriction", function () { + describe('disabling zoom out restriction', function () { beforeEach(function () { chart.zoomScale([-1,10]); chart.zoomOutRestrict(false); }); - it("should set the start of zoom scale extent to 0", function () { + it('should set the start of zoom scale extent to 0', function () { expect(chart.zoomScale()[0]).toEqual(0); }); }); - describe("setting x", function () { + describe('setting x', function () { var newDomain = [1,10]; beforeEach(function () { chart.x(d3.scale.linear().domain(newDomain)); }); - it("should reset the original x domain", function () { + it('should reset the original x domain', function () { expect(chart.xOriginalDomain()).toEqual(newDomain); }); }); - describe("x unit count", function () { - it("reflects number of units in chart domain", function () { + describe('x unit count', function () { + it('reflects number of units in chart domain', function () { var domain = chart.x().domain(); expect(chart.xUnitCount()).toEqual(dc.units.integers(domain[0], domain[1], domain)); }); - describe("with fixed units", function () { + describe('with fixed units', function () { beforeEach(function () { chart.xUnits(function (start, end, xDomain) { return 10; }); }); - it("should return the fixed unit count", function () { + it('should return the fixed unit count', function () { expect(chart.xUnitCount()).toEqual(10); }); }); }); - describe("ordinality flag", function () { - describe("when x units are not ordinal", function () { - it("should be false", function () { + describe('ordinality flag', function () { + describe('when x units are not ordinal', function () { + it('should be false', function () { expect(chart.isOrdinal()).toBeFalsy(); }); }); - describe("when x units are ordinal", function () { + describe('when x units are ordinal', function () { beforeEach(function () { chart.xUnits(dc.units.ordinal); }); - it("should be true", function () { + it('should be true', function () { expect(chart.isOrdinal()).toBeTruthy(); }); }); }); - describe("applying a filter", function () { + describe('applying a filter', function () { var filter = [makeDate(2012, 5, 20), makeDate(2012, 6, 15)]; beforeEach(function () { chart.brushOn(true); @@ -631,12 +631,12 @@ describe('dc.coordinateGridChart', function() { chart.filter(filter); }); - it("should update the brush extent", function () { + it('should update the brush extent', function () { expect(chart.brush().extent()).toEqual(filter); }); }); - describe("removing the filter", function () { + describe('removing the filter', function () { beforeEach(function () { chart.brushOn(true); chart.render(); @@ -644,69 +644,69 @@ describe('dc.coordinateGridChart', function() { chart.filter(null); }); - it("should clear the brush extent", function () { + it('should clear the brush extent', function () { expect(chart.brush().empty()).toBeTruthy(); }); }); - describe("rendering for the first time with mouse zoom disabled when it wasn't previously enabled", function () { + describe('rendering for the first time with mouse zoom disabled when it wasn\'t previously enabled', function () { beforeEach(function () { chart.mouseZoomable(false); - spyOn(chart, "_disableMouseZoom"); + spyOn(chart, '_disableMouseZoom'); chart.render(); }); - it("should not explicitly disable mouse zooming", function () { + it('should not explicitly disable mouse zooming', function () { expect(chart._disableMouseZoom).not.toHaveBeenCalled(); }); }); - describe("rendering with mouse zoom disabled after it was previously enabled", function () { + describe('rendering with mouse zoom disabled after it was previously enabled', function () { beforeEach(function () { chart.mouseZoomable(true); chart.render(); chart.mouseZoomable(false); - spyOn(chart, "_disableMouseZoom"); + spyOn(chart, '_disableMouseZoom'); chart.render(); }); - it("should explicitly disable mouse zooming", function () { + it('should explicitly disable mouse zooming', function () { expect(chart._disableMouseZoom).toHaveBeenCalled(); }); }); - describe("with mouse zoom disabled", function () { + describe('with mouse zoom disabled', function () { beforeEach(function () { chart.mouseZoomable(false); chart.render(); }); - it("should not respond to double-click by refocusing", function () { + it('should not respond to double-click by refocusing', function () { doubleClick(chart); expect(chart.refocused()).toBeFalsy(); }); }); - describe("zooming", function () { + describe('zooming', function () { var rangeChart, zoomCallback, context; - context = function () { return { chart: chart, zoomCallback: zoomCallback }; }; + context = function () { return {chart: chart, zoomCallback: zoomCallback}; }; beforeEach(function () { zoomCallback = jasmine.createSpy(); - chart.on("zoomed", zoomCallback); + chart.on('zoomed', zoomCallback); chart.mouseZoomable(true); rangeChart = buildRangeChart(); chart.rangeChart(rangeChart); chart.render(); rangeChart.render(); - spyOn(dc, "redrawAll"); - spyOn(chart, "redraw"); - spyOn(rangeChart, "redraw"); + spyOn(dc, 'redrawAll'); + spyOn(chart, 'redraw'); + spyOn(rangeChart, 'redraw'); }); - describe("when chart is zoomed via mouse interaction", function () { + describe('when chart is zoomed via mouse interaction', function () { beforeEach(function () { doubleClick(chart); }); @@ -714,7 +714,7 @@ describe('dc.coordinateGridChart', function() { itActsLikeItZoomed(context); }); - describe("when chart is zoomed programatically via focus method", function () { + describe('when chart is zoomed programatically via focus method', function () { beforeEach(function () { chart.focus([makeDate(2012, 5, 1), makeDate(2012, 5, 15)]); }); @@ -722,47 +722,46 @@ describe('dc.coordinateGridChart', function() { itActsLikeItZoomed(context); }); - - function itActsLikeItZoomed(context) { + function itActsLikeItZoomed (context) { describe('(shared things that happen on zooming)', function () { var chart, zoomCallback; - beforeEach(function() { + beforeEach(function () { chart = context().chart; zoomCallback = context().zoomCallback; }); - it("should be flagged as refocused", function () { + it('should be flagged as refocused', function () { expect(chart.refocused()).toBeTruthy(); }); - it("should update chart filter to match new x domain", function () { + it('should update chart filter to match new x domain', function () { var filter = chart.filter(); delete filter.isFiltered; expect(filter).toEqual(chart.x().domain()); }); - it("should be rescaled", function () { + it('should be rescaled', function () { var domain = chart.x().domain(); expect(chart.xUnitCount()).toEqual(dc.units.integers(domain[0], domain[1], domain)); }); - it("should redraw itself", function () { + it('should redraw itself', function () { expect(chart.redraw).toHaveBeenCalled(); }); - it("should update its range chart's filter", function () { + it('should update its range chart\'s filter', function () { expect(chart.rangeChart().filter()).toEqual(chart.filter()); }); - it("should trigger redraw on its range chart", function () { + it('should trigger redraw on its range chart', function () { expect(chart.rangeChart().redraw).toHaveBeenCalled(); }); - it("should fire custom zoom listeners", function () { + it('should fire custom zoom listeners', function () { expect(zoomCallback).toHaveBeenCalled(); }); - it("should trigger redraw on other charts in group after a brief pause", function () { + it('should trigger redraw on other charts in group after a brief pause', function () { jasmine.clock().tick(100); expect(dc.redrawAll).toHaveBeenCalledWith(chart.chartGroup()); }); @@ -770,24 +769,24 @@ describe('dc.coordinateGridChart', function() { } }); - describe("when chart is zoomed in, then zoomed back out to original domain", function () { + describe('when chart is zoomed in, then zoomed back out to original domain', function () { beforeEach(function () { chart.render(); doubleClick(chart); chart.focus(chart.xOriginalDomain()); }); - it("should not be flagged as refocused", function () { + it('should not be flagged as refocused', function () { expect(chart.refocused()).toBeFalsy(); }); }); - describe("brushing", function () { + describe('brushing', function () { beforeEach(function () { chart.brushOn(true); }); - describe("with mouse zoom enabled", function () { + describe('with mouse zoom enabled', function () { beforeEach(function () { spyOn(chart, '_disableMouseZoom'); spyOn(chart, '_enableMouseZoom'); @@ -797,7 +796,7 @@ describe('dc.coordinateGridChart', function() { chart.brush().event(chart.root()); }); - it("should disable mouse zooming on brush start, and re-enables it afterwards", function () { + it('should disable mouse zooming on brush start, and re-enables it afterwards', function () { chart.brush().extent([makeDate(2012, 6, 1), makeDate(2012, 6, 15)]); chart.brush().event(chart.root()); expect(chart._disableMouseZoom).toHaveBeenCalled(); @@ -805,35 +804,35 @@ describe('dc.coordinateGridChart', function() { }); }); - describe("with mouse zoom disabled", function () { + describe('with mouse zoom disabled', function () { beforeEach(function () { - spyOn(chart, "_enableMouseZoom"); + spyOn(chart, '_enableMouseZoom'); chart.mouseZoomable(false); chart.render(); chart.brush().extent([makeDate(2012, 6, 1), makeDate(2012, 6, 15)]); chart.brush().event(chart.root()); }); - it("should not enable mouse zooming", function () { + it('should not enable mouse zooming', function () { expect(chart._enableMouseZoom).not.toHaveBeenCalled(); }); }); - describe("with equal dates", function () { + describe('with equal dates', function () { beforeEach(function () { - spyOn(chart, "filter"); + spyOn(chart, 'filter'); chart.brush().clear(); chart.render(); chart.brush().event(chart.root()); }); - it("should clear the chart filter", function () { + it('should clear the chart filter', function () { expect(chart.filter()).toEqual(undefined); }); }); }); - describe("with a range chart", function () { + describe('with a range chart', function () { var rangeChart; var selectedRange = [makeDate(2012, 6, 1), makeDate(2012, 6, 15)]; @@ -844,8 +843,8 @@ describe('dc.coordinateGridChart', function() { rangeChart.render(); }); - it("should zoom the focus chart when range chart is brushed", function () { - spyOn(chart, "focus").and.callThrough(); + it('should zoom the focus chart when range chart is brushed', function () { + spyOn(chart, 'focus').and.callThrough(); rangeChart.brush().extent(selectedRange); rangeChart.brush().event(rangeChart.g()); jasmine.clock().tick(100); @@ -855,7 +854,7 @@ describe('dc.coordinateGridChart', function() { expect(focus).toEqual(selectedRange); }); - it("should zoom the focus chart back out when range chart is un-brushed", function () { + it('should zoom the focus chart back out when range chart is un-brushed', function () { rangeChart.brush().extent(selectedRange); rangeChart.brush().event(rangeChart.g()); jasmine.clock().tick(100); @@ -866,8 +865,8 @@ describe('dc.coordinateGridChart', function() { expect(rangeChart.x().domain()).toEqual(rangeChart.xOriginalDomain()); }); - it("should update the range chart brush to match zoomed domain of focus chart", function () { - spyOn(rangeChart, "replaceFilter"); + it('should update the range chart brush to match zoomed domain of focus chart', function () { + spyOn(rangeChart, 'replaceFilter'); chart.focus(selectedRange); // expect(rangeChart.replaceFilter).toHaveBeenCalledWith(selectedRange); var replaceFilter = rangeChart.replaceFilter.calls.argsFor(0)[0]; @@ -876,19 +875,19 @@ describe('dc.coordinateGridChart', function() { }); }); - describe("with zoom restriction enabled", function () { + describe('with zoom restriction enabled', function () { beforeEach(function () { chart.zoomOutRestrict(true); chart.render(); chart.focus([makeDate(2012, 8, 20), makeDate(2012, 8, 25)]); }); - it("should not be able to zoom out past its original x domain", function () { + it('should not be able to zoom out past its original x domain', function () { chart.focus([makeDate(2012, 2, 20), makeDate(2012, 9, 15)]); expect(chart.x().domain()).toEqual(chart.xOriginalDomain()); }); - describe("with a range chart", function () { + describe('with a range chart', function () { beforeEach(function () { var rangeChart = buildRangeChart(); chart.rangeChart(rangeChart); @@ -897,70 +896,70 @@ describe('dc.coordinateGridChart', function() { chart.focus([makeDate(2012, 8, 20), makeDate(2012, 8, 25)]); }); - it("should not be able to zoom out past its range chart origin x domain", function () { + it('should not be able to zoom out past its range chart origin x domain', function () { chart.focus([makeDate(2012, 2, 20), makeDate(2012, 9, 15)]); expect(chart.x().domain()).toEqual(chart.rangeChart().xOriginalDomain()); }); }); }); - describe("with zoom restriction disabled", function () { + describe('with zoom restriction disabled', function () { beforeEach(function () { chart.zoomOutRestrict(false); chart.render(); chart.focus([makeDate(2012, 8, 20), makeDate(2012, 8, 25)]); }); - it("should be able to zoom out past its original x domain", function () { + it('should be able to zoom out past its original x domain', function () { chart.focus([makeDate(2012, 2, 20), makeDate(2012, 9, 15)]); chart.render(); expect(chart.x().domain()).toEqual([makeDate(2012, 2, 20), makeDate(2012, 9, 15)]); }); }); - describe("focus", function () { + describe('focus', function () { beforeEach(function () { chart.render(); }); - describe("when called with a range argument", function () { + describe('when called with a range argument', function () { var focusDomain = [makeDate(2012,5,20), makeDate(2012,5,30)]; beforeEach(function () { chart.focus(focusDomain); }); - it("should update the x domain to match specified domain", function () { + it('should update the x domain to match specified domain', function () { expect(chart.x().domain()).toEqual(focusDomain); }); }); - describe("when called with no arguments", function () { + describe('when called with no arguments', function () { beforeEach(function () { chart.focus([makeDate(2012,5,1), makeDate(2012,5,2)]); chart.focus(); }); - it("should revert the x domain to the original domain", function () { + it('should revert the x domain to the original domain', function () { expect(chart.x().domain()).toEqual(chart.xOriginalDomain()); }); }); }); - function buildRangeChart() { - var rangeId = "range-chart"; + function buildRangeChart () { + var rangeId = 'range-chart'; appendChartID(rangeId); - return dc.lineChart("#" + rangeId) + return dc.lineChart('#' + rangeId) .dimension(dimension) - .group(dimension.group().reduceSum(function(d) { return d.id; })) + .group(dimension.group().reduceSum(function (d) { return d.id; })) .x(d3.time.scale.utc().domain([makeDate(2012, 5, 20), makeDate(2012, 6, 15)])); } - function doubleClick(chart) { + function doubleClick (chart) { var centerX = chart.root().node().clientLeft + (chart.width() / 2); var centerY = chart.root().node().clientTop + (chart.height() / 2); - var event = document.createEvent("MouseEvents"); - event.initMouseEvent("dblclick", true, true, window, centerX, centerY, centerX, centerY, 0, false, false, false, false, 0, null); + var event = document.createEvent('MouseEvents'); + event.initMouseEvent('dblclick', true, true, window, centerX, centerY, centerX, centerY, 0, false, false, false, false, 0, null); chart.root().node().dispatchEvent(event); } }); diff --git a/spec/core-spec.js b/spec/core-spec.js index 2c51285c3..85a6889b1 100644 --- a/spec/core-spec.js +++ b/spec/core-spec.js @@ -1,16 +1,17 @@ -describe('dc.core', function() { +/* global loadDateFixture */ +describe('dc.core', function () { var valueDimension, valueGroup; - beforeEach(function() { + beforeEach(function () { var data = crossfilter(loadDateFixture()); - valueDimension = data.dimension(function(d) { + valueDimension = data.dimension(function (d) { return d.value; }); valueGroup = valueDimension.group(); }); - describe('version', function() { - it('should use semantic versions', function() { + describe('version', function () { + it('should use semantic versions', function () { // from https://raw.github.com/coolaj86/semver-utils/v1.0.3/semver-utils.js // |optional 'v' // | | 3 segment version @@ -21,62 +22,62 @@ describe('dc.core', function() { }); }); - describe('charts', function() { + describe('charts', function () { var chart; - beforeEach(function() { - chart = dc.pieChart("#id") + beforeEach(function () { + chart = dc.pieChart('#id') .dimension(valueDimension) .group(valueGroup); - spyOn(chart, "filterAll"); - spyOn(chart, "render"); - spyOn(chart, "redraw"); + spyOn(chart, 'filterAll'); + spyOn(chart, 'render'); + spyOn(chart, 'redraw'); return chart; }); - it('should register chart object', function() { + it('should register chart object', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('filterAll should invoke filter on each chart', function() { + it('filterAll should invoke filter on each chart', function () { dc.filterAll(); expect(chart.filterAll).toHaveBeenCalled(); }); - it('renderAll should invoke filter on each chart', function() { + it('renderAll should invoke filter on each chart', function () { dc.renderAll(); expect(chart.render).toHaveBeenCalled(); }); - it('should be gone after remove all', function() { + it('should be gone after remove all', function () { dc.deregisterAllCharts(); expect(dc.hasChart(chart)).toBeFalsy(); }); }); - describe('chartsRegistry', function() { + describe('chartsRegistry', function () { var chart; var chartGrouped; var chartGroup = 'testChartGroup'; - beforeEach(function() { - chart = dc.pieChart("#id") + beforeEach(function () { + chart = dc.pieChart('#id') .dimension(valueDimension) .group(valueGroup); - chartGrouped = dc.pieChart("#id2",chartGroup) + chartGrouped = dc.pieChart('#id2',chartGroup) .dimension(valueDimension) .group(valueGroup); return chart; }); - it('should register chart object', function() { + it('should register chart object', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('should not have ungrouped chart after remove', function() { + it('should not have ungrouped chart after remove', function () { dc.deregisterChart(chart); expect(dc.hasChart(chart)).toBeFalsy(); }); - it('should not have grouped chart after remove', function(){ + it('should not have grouped chart after remove', function () { dc.deregisterChart(chartGrouped, chartGroup); expect(dc.hasChart(chartGrouped)).toBeFalsy(); }); @@ -96,48 +97,48 @@ describe('dc.core', function() { }); }); - describe('transition', function() { + describe('transition', function () { var selections; - beforeEach(function() { + beforeEach(function () { selections = { - transition: function() { + transition: function () { return this; }, - duration: function() { + duration: function () { return this; } }; - spyOn(selections, "transition").and.callThrough(); - spyOn(selections, "duration").and.callThrough(); + spyOn(selections, 'transition').and.callThrough(); + spyOn(selections, 'duration').and.callThrough(); }); - describe('normal', function() { - it('transition should be activated with duration', function() { + describe('normal', function () { + it('transition should be activated with duration', function () { dc.transition(selections, 100); expect(selections.transition).toHaveBeenCalled(); expect(selections.duration).toHaveBeenCalled(); }); - it('transition callback should be triggered', function() { + it('transition callback should be triggered', function () { var triggered = false; - dc.transition(selections, 100, function() { + dc.transition(selections, 100, function () { triggered = true; }); expect(triggered).toBeTruthy(); }); }); - describe('skip', function() { - it('transition should not be activated with 0 duration', function() { + describe('skip', function () { + it('transition should not be activated with 0 duration', function () { dc.transition(selections, 0); expect(selections.transition).not.toHaveBeenCalled(); expect(selections.duration).not.toHaveBeenCalled(); }); - it('transition callback should not be triggered', function() { + it('transition callback should not be triggered', function () { var triggered = false; - dc.transition(selections, 0, function() { + dc.transition(selections, 0, function () { triggered = true; }); expect(triggered).toBeFalsy(); @@ -145,75 +146,75 @@ describe('dc.core', function() { }); }); - describe('units', function() { - describe('.integers', function() { + describe('units', function () { + describe('.integers', function () { var result; - beforeEach(function() { + beforeEach(function () { result = dc.units.integers(0, 100); }); - it('units should be based on subtraction', function() { + it('units should be based on subtraction', function () { expect(result).toEqual(100); }); }); - describe('.float', function() { + describe('.float', function () { var result; - beforeEach(function() { + beforeEach(function () { result = dc.units.fp.precision(0.001)(0.49999, 1.0); }); - it('units should be generated according to the precision', function() { + it('units should be generated according to the precision', function () { expect(result).toEqual(501); }); }); - describe('.ordinal', function() { + describe('.ordinal', function () { var result; - beforeEach(function() { - result = dc.units.ordinal("a", "d", ["a", "b", "c", "d"]); + beforeEach(function () { + result = dc.units.ordinal('a', 'd', ['a', 'b', 'c', 'd']); }); - it('units should be based on count', function() { + it('units should be based on count', function () { expect(result.length).toEqual(4); }); }); }); - describe('round', function() { - describe('.floor', function() { + describe('round', function () { + describe('.floor', function () { var result; - beforeEach(function() { + beforeEach(function () { result = dc.round.floor(0.33); }); - it('should floored number', function() { + it('should floored number', function () { expect(result).toEqual(0); }); }); }); - describe('override', function() { + describe('override', function () { var o; - beforeEach(function() { - o = {foo: function() { - return "foo"; - }, goo: function(i) { + beforeEach(function () { + o = {foo: function () { + return 'foo'; + }, goo: function (i) { return i; }}; }); - it('wo/ override function should work as expected', function() { - expect(o.foo()).toEqual("foo"); + it('wo/ override function should work as expected', function () { + expect(o.foo()).toEqual('foo'); }); - it('should expose existing function', function() { - dc.override(o, "foo", function() { - return this._foo() + "2"; + it('should expose existing function', function () { + dc.override(o, 'foo', function () { + return this._foo() + '2'; }); - expect(o.foo()).toEqual("foo2"); + expect(o.foo()).toEqual('foo2'); }); - it('should expose existing function with args', function() { - dc.override(o, "goo", function(i) { + it('should expose existing function with args', function () { + dc.override(o, 'goo', function (i) { return this._goo(i) + 2; }); @@ -221,80 +222,80 @@ describe('dc.core', function() { }); }); - describe('charts w/ grouping', function() { + describe('charts w/ grouping', function () { var chart; - beforeEach(function() { - chart = dc.pieChart("#a", "groupA").dimension(valueDimension).group(valueGroup); - spyOn(chart, "filterAll"); - spyOn(chart, "render"); - dc.pieChart("#b", "groupA").dimension(valueDimension).group(valueGroup); - dc.bubbleChart("#c", "groupB").dimension(valueDimension).group(valueGroup); - dc.barChart("#b1", "groupB").dimension(valueDimension).group(valueGroup); - dc.lineChart("#b2", "groupB").dimension(valueDimension).group(valueGroup); - dc.dataCount("#b3", "groupB").dimension(valueDimension).group(valueGroup); - dc.dataTable("#b4", "groupB").dimension(valueDimension).group(valueGroup); + beforeEach(function () { + chart = dc.pieChart('#a', 'groupA').dimension(valueDimension).group(valueGroup); + spyOn(chart, 'filterAll'); + spyOn(chart, 'render'); + dc.pieChart('#b', 'groupA').dimension(valueDimension).group(valueGroup); + dc.bubbleChart('#c', 'groupB').dimension(valueDimension).group(valueGroup); + dc.barChart('#b1', 'groupB').dimension(valueDimension).group(valueGroup); + dc.lineChart('#b2', 'groupB').dimension(valueDimension).group(valueGroup); + dc.dataCount('#b3', 'groupB').dimension(valueDimension).group(valueGroup); + dc.dataTable('#b4', 'groupB').dimension(valueDimension).group(valueGroup); return chart; }); - it('should register chart object', function() { + it('should register chart object', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('filterAll by group should invoke filter on each chart within the group', function() { - dc.filterAll("groupA"); + it('filterAll by group should invoke filter on each chart within the group', function () { + dc.filterAll('groupA'); expect(chart.filterAll).toHaveBeenCalled(); }); - it('renderAll by group should invoke filter on each chart within the group', function() { - dc.renderAll("groupA"); + it('renderAll by group should invoke filter on each chart within the group', function () { + dc.renderAll('groupA'); expect(chart.render).toHaveBeenCalled(); }); - it('filterAll should not invoke filter on chart in groupA', function() { + it('filterAll should not invoke filter on chart in groupA', function () { dc.filterAll(); expect(chart.filterAll).not.toHaveBeenCalled(); }); - it('renderAll should not invoke filter on chart in groupA', function() { + it('renderAll should not invoke filter on chart in groupA', function () { dc.renderAll(); expect(chart.render).not.toHaveBeenCalled(); }); - it('should be gone after remove all', function() { + it('should be gone after remove all', function () { dc.deregisterAllCharts(); expect(dc.hasChart(chart)).toBeFalsy(); }); }); - describe('render/redraw all call back', function() { + describe('render/redraw all call back', function () { var result; - beforeEach(function() { - dc.renderlet(function(group) { + beforeEach(function () { + dc.renderlet(function (group) { result.called = group ? group : true; }); result = {called: false}; }); - it('renderAll call back should be triggered', function() { + it('renderAll call back should be triggered', function () { dc.renderAll(); expect(result.called).toBeTruthy(); }); - it('redrawAll call back should be triggered', function() { + it('redrawAll call back should be triggered', function () { dc.redrawAll(); expect(result.called).toBeTruthy(); }); - it('renderAll by group call back should be triggered', function() { - dc.renderAll("group"); - expect("group").toEqual(result.called); + it('renderAll by group call back should be triggered', function () { + dc.renderAll('group'); + expect('group').toEqual(result.called); }); - it('redrawAll by group call back should be triggered', function() { - dc.redrawAll("group"); - expect("group").toEqual(result.called); + it('redrawAll by group call back should be triggered', function () { + dc.redrawAll('group'); + expect('group').toEqual(result.called); }); }); -}); \ No newline at end of file +}); diff --git a/spec/data-addition-spec.js b/spec/data-addition-spec.js index 48be0ca18..85bd1c224 100644 --- a/spec/data-addition-spec.js +++ b/spec/data-addition-spec.js @@ -1,26 +1,27 @@ -describe('Dynamic data addition in crossfilter', function() { +/* global appendChartID, loadDateFixture, loadDateFixture2, makeDate */ +describe('Dynamic data addition in crossfilter', function () { var width = 200; var height = 200; var radius = 100; var baseData, moreData; - beforeEach(function() { + beforeEach(function () { baseData = crossfilter(loadDateFixture()); moreData = loadDateFixture2(); }); - function occurrences(str, value) { + function occurrences (str, value) { return (str.split(value)).length - 1; } - describe('pie chart slice addition', function() { + describe('pie chart slice addition', function () { var valueDimension, valueGroup; var chart; - function buildPieChart(id) { + function buildPieChart (id) { var div = appendChartID(id); - div.append("a").attr("class", "reset").style("display", "none"); - div.append("span").attr("class", "filter").style("display", "none"); - var chart = dc.pieChart("#" + id); + div.append('a').attr('class', 'reset').style('display', 'none'); + div.append('span').attr('class', 'filter').style('display', 'none'); + var chart = dc.pieChart('#' + id); chart.dimension(valueDimension).group(valueGroup) .width(width) .height(height) @@ -31,40 +32,40 @@ describe('Dynamic data addition in crossfilter', function() { chart.expireCache(); return chart; } - beforeEach(function() { - valueDimension = baseData.dimension(function(d) { + beforeEach(function () { + valueDimension = baseData.dimension(function (d) { return d.value; }); valueGroup = valueDimension.group(); - chart = buildPieChart("pie-chart"); + chart = buildPieChart('pie-chart'); chart.redraw(); }); - it('slice g should be created with class', function() { - expect(chart.selectAll("svg g g.pie-slice").data().length).toEqual(7); + it('slice g should be created with class', function () { + expect(chart.selectAll('svg g g.pie-slice').data().length).toEqual(7); }); - it('slice path should be created', function() { - expect(chart.selectAll("svg g g.pie-slice path").data().length).toEqual(7); + it('slice path should be created', function () { + expect(chart.selectAll('svg g g.pie-slice path').data().length).toEqual(7); }); - it('default function should be used to dynamically generate label', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][0]).text()).toEqual("11"); + it('default function should be used to dynamically generate label', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][0]).text()).toEqual('11'); }); - it('pie chart slices should be in numerical order', function() { - expect(chart.selectAll("text.pie-slice").data().map(function(slice) { return slice.data.key; })) - .toEqual(["11","22","33","44","55","66","76"]); + it('pie chart slices should be in numerical order', function () { + expect(chart.selectAll('text.pie-slice').data().map(function (slice) { return slice.data.key; })) + .toEqual(['11','22','33','44','55','66','76']); }); - it('default function should be used to dynamically generate title', function() { - expect(d3.select(chart.selectAll("g.pie-slice title")[0][0]).text()).toEqual("11: 1"); + it('default function should be used to dynamically generate title', function () { + expect(d3.select(chart.selectAll('g.pie-slice title')[0][0]).text()).toEqual('11: 1'); }); - afterEach(function() { + afterEach(function () { valueDimension.filterAll(); }); }); - describe('line chart segment addition', function() { + describe('line chart segment addition', function () { var timeDimension, timeGroup; var chart; - function buildLineChart(id) { + function buildLineChart (id) { appendChartID(id); - var chart = dc.lineChart("#" + id); + var chart = dc.lineChart('#' + id); chart.dimension(timeDimension).group(timeGroup) .width(width).height(height) .x(d3.time.scale.utc().domain([makeDate(2012, 4, 20), makeDate(2012, 7, 15)])) @@ -78,29 +79,29 @@ describe('Dynamic data addition in crossfilter', function() { chart.expireCache(); return chart; } - beforeEach(function() { - timeDimension = baseData.dimension(function(d) { + beforeEach(function () { + timeDimension = baseData.dimension(function (d) { return d.dd; }); timeGroup = timeDimension.group(); - chart = buildLineChart("line-chart"); + chart = buildLineChart('line-chart'); chart.render(); }); - it('number of dots should equal the size of the group', function() { - expect(chart.selectAll("circle.dot")[0].length).toEqual(timeGroup.size()); + it('number of dots should equal the size of the group', function () { + expect(chart.selectAll('circle.dot')[0].length).toEqual(timeGroup.size()); }); - it('number of line segments should equal the size of the group', function() { - var path = chart.selectAll("path.line").attr("d"); + it('number of line segments should equal the size of the group', function () { + var path = chart.selectAll('path.line').attr('d'); expect(occurrences(path, 'L') + 1).toEqual(timeGroup.size()); }); - it('number of area segments should equal twice the size of the group', function() { - var path = chart.selectAll("path.area").attr("d"); + it('number of area segments should equal twice the size of the group', function () { + var path = chart.selectAll('path.area').attr('d'); expect(occurrences(path, 'L') + 1).toEqual(timeGroup.size() * 2); }); - describe('resetting line chart with fewer data points', function() { - beforeEach(function() { - var chart = buildLineChart("stackable-line-chart"); + describe('resetting line chart with fewer data points', function () { + beforeEach(function () { + var chart = buildLineChart('stackable-line-chart'); chart.render(); timeDimension.filterAll(); @@ -109,12 +110,12 @@ describe('Dynamic data addition in crossfilter', function() { chart.render(); }); - it('it should not contain stale data points', function() { + it('it should not contain stale data points', function () { expect(chart.data()[0].values.length).toEqual(2); }); }); - afterEach(function() { + afterEach(function () { timeDimension.filterAll(); }); }); diff --git a/spec/data-count-spec.js b/spec/data-count-spec.js index e62275e5a..bff0d789d 100644 --- a/spec/data-count-spec.js +++ b/spec/data-count-spec.js @@ -1,16 +1,17 @@ -describe('dc.dataCount', function() { +/* global appendChartID, loadDateFixture */ +describe('dc.dataCount', function () { var data, countryDimension, groupAll; var chart; - beforeEach(function() { + beforeEach(function () { data = crossfilter(loadDateFixture()); groupAll = data.groupAll(); - countryDimension = data.dimension(function(d) { + countryDimension = data.dimension(function (d) { return d.countrycode; }); - countryDimension.filter("CA"); + countryDimension.filter('CA'); }); - function buildChart(id){ - var chart = dc.dataCount("#" + id) + function buildChart (id) { + var chart = dc.dataCount('#' + id) .transitionDuration(0) .dimension(data) .group(groupAll); @@ -18,160 +19,160 @@ describe('dc.dataCount', function() { d3.timer.flush(); return chart; } - describe('creation', function() { - beforeEach(function() { - var id = "data-count"; + describe('creation', function () { + beforeEach(function () { + var id = 'data-count'; var div = appendChartID(id); - div.append("span").attr("class", "filter-count"); - div.append("span").attr("class", "total-count"); + div.append('span').attr('class', 'filter-count'); + div.append('span').attr('class', 'total-count'); chart = buildChart(id); }); - it('should generate something', function() { + it('should generate something', function () { expect(chart).not.toBeNull(); }); - it('should be registered', function() { + it('should be registered', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('should fill in the total count', function() { - expect(chart.select("span.total-count").text()).toEqual("10"); + it('should fill in the total count', function () { + expect(chart.select('span.total-count').text()).toEqual('10'); }); - it('should fill in the filter count', function() { - expect(chart.select("span.filter-count").text()).toEqual("2"); + it('should fill in the filter count', function () { + expect(chart.select('span.filter-count').text()).toEqual('2'); }); - describe('redraw', function() { - beforeEach(function() { + describe('redraw', function () { + beforeEach(function () { countryDimension.filterAll(); chart.redraw(); return chart; }); - it('should fill in the updated total count', function() { - expect(chart.select("span.total-count").text()).toEqual("10"); + it('should fill in the updated total count', function () { + expect(chart.select('span.total-count').text()).toEqual('10'); }); - it('should fill in the updated filter count', function() { - expect(chart.select("span.filter-count").text()).toEqual("10"); + it('should fill in the updated filter count', function () { + expect(chart.select('span.filter-count').text()).toEqual('10'); }); }); - afterEach(function() { + afterEach(function () { countryDimension.filterAll(); }); }); - describe('creation with html attribute', function() { - beforeEach(function() { - var id = "data-count"; + describe('creation with html attribute', function () { + beforeEach(function () { + var id = 'data-count'; var div = appendChartID(id); - div.append("span").attr("class", "filter-count"); - div.append("span").attr("class", "total-count"); + div.append('span').attr('class', 'filter-count'); + div.append('span').attr('class', 'total-count'); chart = buildChart(id); - chart.html({some:"%filter-count selected from %total-count",all:"All Records Selected"}); + chart.html({some: '%filter-count selected from %total-count',all: 'All Records Selected'}); chart.redraw(); }); - it('should generate something', function() { + it('should generate something', function () { expect(chart).not.toBeNull(); }); - it('should be registered', function() { + it('should be registered', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('should fill the element replacing %filter-count and %total-count', function() { - expect(chart.root().text()).toEqual("2 selected from 10"); + it('should fill the element replacing %filter-count and %total-count', function () { + expect(chart.root().text()).toEqual('2 selected from 10'); }); - describe('when all selected', function() { - beforeEach(function() { + describe('when all selected', function () { + beforeEach(function () { countryDimension.filterAll(); chart.redraw(); return chart; }); - it('should use html.all', function() { - expect(chart.root().text()).toEqual("All Records Selected"); + it('should use html.all', function () { + expect(chart.root().text()).toEqual('All Records Selected'); }); }); - afterEach(function() { + afterEach(function () { countryDimension.filterAll(); }); }); - describe('creation with just html.some attribute', function() { - beforeEach(function() { - var id = "data-count"; + describe('creation with just html.some attribute', function () { + beforeEach(function () { + var id = 'data-count'; var div = appendChartID(id); - div.append("span").attr("class", "filter-count"); - div.append("span").attr("class", "total-count"); + div.append('span').attr('class', 'filter-count'); + div.append('span').attr('class', 'total-count'); chart = buildChart(id); - chart.html({some:"%filter-count selected from %total-count"}); + chart.html({some: '%filter-count selected from %total-count'}); chart.redraw(); }); - it('should fill the element replacing %filter-count and %total-count', function() { - expect(chart.root().text()).toEqual("2 selected from 10"); + it('should fill the element replacing %filter-count and %total-count', function () { + expect(chart.root().text()).toEqual('2 selected from 10'); }); - describe('when all selected', function() { - beforeEach(function() { + describe('when all selected', function () { + beforeEach(function () { countryDimension.filterAll(); chart.redraw(); return chart; }); - it('should use html.some for all', function() { - expect(chart.root().text()).toEqual("10 selected from 10"); + it('should use html.some for all', function () { + expect(chart.root().text()).toEqual('10 selected from 10'); }); }); - afterEach(function() { + afterEach(function () { countryDimension.filterAll(); }); }); - describe('creation with just html.all attribute', function() { - beforeEach(function() { - var id = "data-count"; + describe('creation with just html.all attribute', function () { + beforeEach(function () { + var id = 'data-count'; var div = appendChartID(id); - div.append("span").attr("class", "filter-count"); - div.append("span").attr("class", "total-count"); + div.append('span').attr('class', 'filter-count'); + div.append('span').attr('class', 'total-count'); chart = buildChart(id); - chart.html({all:"All Records Selected"}); + chart.html({all: 'All Records Selected'}); chart.redraw(); }); - it('should fill in the total count', function() { - expect(chart.select("span.total-count").text()).toEqual("10"); + it('should fill in the total count', function () { + expect(chart.select('span.total-count').text()).toEqual('10'); }); - it('should fill in the filter count', function() { - expect(chart.select("span.filter-count").text()).toEqual("2"); + it('should fill in the filter count', function () { + expect(chart.select('span.filter-count').text()).toEqual('2'); }); - describe('when all selected', function() { - beforeEach(function() { + describe('when all selected', function () { + beforeEach(function () { countryDimension.filterAll(); chart.redraw(); return chart; }); - it('should use html.all for all', function() { - expect(chart.root().text()).toEqual("All Records Selected"); + it('should use html.all for all', function () { + expect(chart.root().text()).toEqual('All Records Selected'); }); }); - afterEach(function() { + afterEach(function () { countryDimension.filterAll(); }); }); - - describe('creation with formatNumber attribute', function() { - beforeEach(function() { - var id = "data-count"; + + describe('creation with formatNumber attribute', function () { + beforeEach(function () { + var id = 'data-count'; var div = appendChartID(id); - div.append("span").attr("class", "filter-count"); - div.append("span").attr("class", "total-count"); + div.append('span').attr('class', 'filter-count'); + div.append('span').attr('class', 'total-count'); chart = buildChart(id); - chart.formatNumber(d3.format("04.1g")); + chart.formatNumber(d3.format('04.1g')); chart.redraw(); }); - it('should generate something', function() { + it('should generate something', function () { expect(chart).not.toBeNull(); }); - it('should be registered', function() { + it('should be registered', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('should fill in the formatted total count', function() { - expect(chart.select("span.total-count").text()).toEqual("1e+1"); + it('should fill in the formatted total count', function () { + expect(chart.select('span.total-count').text()).toEqual('1e+1'); }); - it('should fill in the formatted filter count', function() { - expect(chart.select("span.filter-count").text()).toEqual("0002"); + it('should fill in the formatted filter count', function () { + expect(chart.select('span.filter-count').text()).toEqual('0002'); }); - afterEach(function() { + afterEach(function () { countryDimension.filterAll(); }); }); diff --git a/spec/data-grid-spec.js b/spec/data-grid-spec.js index 31af67ec9..759fa73cd 100644 --- a/spec/data-grid-spec.js +++ b/spec/data-grid-spec.js @@ -1,125 +1,124 @@ -describe('dc.dataGrid', function() { +/* global appendChartID, loadDateFixture */ +describe('dc.dataGrid', function () { var id, chart, data; var dateFixture; - var dimension, group; + var dimension; var countryDimension; - beforeEach(function() { + beforeEach(function () { dateFixture = loadDateFixture(); data = crossfilter(dateFixture); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d3.time.day.utc(d.dd); }); - countryDimension = data.dimension(function(d) { + countryDimension = data.dimension(function (d) { return d.countrycode; }); - id = "data-grid"; + id = 'data-grid'; appendChartID(id); - chart = dc.dataGrid("#" + id) + chart = dc.dataGrid('#' + id) .dimension(dimension) - .group(function(d) { - return "Data Grid"; + .group(function (d) { + return 'Data Grid'; }) .transitionDuration(0) .size(3) - .sortBy(function(d){return d.id;}) + .sortBy(function (d) {return d.id;}) .order(d3.descending) - .html(function(d) { - return "
"+d.state+":"+d.value+"
"; + .html(function (d) { + return '
' + d.state + ':' + d.value + '
'; }); chart.render(); - var pause="dummy"; }); - describe('creation', function() { - it('generates something', function() { + describe('creation', function () { + it('generates something', function () { expect(chart).not.toBeNull(); }); - it('registers', function() { + it('registers', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('sets size', function() { + it('sets size', function () { expect(chart.size()).toEqual(3); }); - it('sets sortBy', function() { + it('sets sortBy', function () { expect(chart.sortBy()).not.toBeNull(); }); - it('sets order', function() { + it('sets order', function () { expect(chart.order()).toBe(d3.descending); }); - it('sets the group label', function() { - expect(chart.selectAll(".dc-grid-group h1.dc-grid-label")[0][0].innerHTML).toEqual("Data Grid"); + it('sets the group label', function () { + expect(chart.selectAll('.dc-grid-group h1.dc-grid-label')[0][0].innerHTML).toEqual('Data Grid'); }); - it('creates id div', function() { - expect(chart.selectAll(".dc-grid-item div#id_9")[0].length).toEqual(1); - expect(chart.selectAll(".dc-grid-item div#id_8")[0].length).toEqual(1); - expect(chart.selectAll(".dc-grid-item div#id_3")[0].length).toEqual(1); + it('creates id div', function () { + expect(chart.selectAll('.dc-grid-item div#id_9')[0].length).toEqual(1); + expect(chart.selectAll('.dc-grid-item div#id_8')[0].length).toEqual(1); + expect(chart.selectAll('.dc-grid-item div#id_3')[0].length).toEqual(1); }); - it('creates div content', function() { - expect(chart.selectAll(".dc-grid-item div")[0][0].innerHTML).toEqual("Mississippi:44"); - expect(chart.selectAll(".dc-grid-item div")[0][1].innerHTML).toEqual("Mississippi:33"); - expect(chart.selectAll(".dc-grid-item div")[0][2].innerHTML).toEqual("Delaware:33"); + it('creates div content', function () { + expect(chart.selectAll('.dc-grid-item div')[0][0].innerHTML).toEqual('Mississippi:44'); + expect(chart.selectAll('.dc-grid-item div')[0][1].innerHTML).toEqual('Mississippi:33'); + expect(chart.selectAll('.dc-grid-item div')[0][2].innerHTML).toEqual('Delaware:33'); }); }); - describe('slicing entries', function() { - beforeEach(function() { + describe('slicing entries', function () { + beforeEach(function () { chart.beginSlice(1); chart.redraw(); }); - it('slice beginning', function() { - expect(chart.selectAll(".dc-grid-item")[0].length).toEqual(2); + it('slice beginning', function () { + expect(chart.selectAll('.dc-grid-item')[0].length).toEqual(2); }); - it('slice beginning and end', function() { + it('slice beginning and end', function () { chart.endSlice(2); chart.redraw(); - expect(chart.selectAll(".dc-grid-item")[0].length).toEqual(1); + expect(chart.selectAll('.dc-grid-item')[0].length).toEqual(1); }); }); - describe('external filter', function() { - beforeEach(function() { - countryDimension.filter("CA"); + describe('external filter', function () { + beforeEach(function () { + countryDimension.filter('CA'); chart.redraw(); }); - it('renders only filtered data set', function() { - expect(chart.selectAll(".dc-grid-item div")[0].length).toEqual(2); + it('renders only filtered data set', function () { + expect(chart.selectAll('.dc-grid-item div')[0].length).toEqual(2); }); - it('renders the correctly filtered records', function() { - expect(chart.selectAll(".dc-grid-item div")[0][0].innerHTML).toEqual('Ontario:22'); - expect(chart.selectAll(".dc-grid-item div")[0][1].innerHTML).toEqual('Ontario:55'); + it('renders the correctly filtered records', function () { + expect(chart.selectAll('.dc-grid-item div')[0][0].innerHTML).toEqual('Ontario:22'); + expect(chart.selectAll('.dc-grid-item div')[0][1].innerHTML).toEqual('Ontario:55'); }); }); - describe('renderlet', function() { + describe('renderlet', function () { var derlet; - beforeEach(function() { - derlet = jasmine.createSpy('renderlet', function(chart) { - chart.selectAll(".dc-grid-label").text("changed"); + beforeEach(function () { + derlet = jasmine.createSpy('renderlet', function (chart) { + chart.selectAll('.dc-grid-label').text('changed'); }); derlet.and.callThrough(); - chart.on("renderlet", derlet); + chart.on('renderlet', derlet); }); - it('custom renderlet should be invoked with render', function() { + it('custom renderlet should be invoked with render', function () { chart.render(); - expect(chart.selectAll(".dc-grid-label").text()).toEqual("changed"); + expect(chart.selectAll('.dc-grid-label').text()).toEqual('changed'); expect(derlet).toHaveBeenCalled(); }); - it('custom renderlet should be invoked with redraw', function() { + it('custom renderlet should be invoked with redraw', function () { chart.redraw(); - expect(chart.selectAll(".dc-grid-label").text()).toEqual("changed"); + expect(chart.selectAll('.dc-grid-label').text()).toEqual('changed'); expect(derlet).toHaveBeenCalled(); }); }); - afterEach(function() { + afterEach(function () { dimension.filterAll(); countryDimension.filterAll(); }); }); - diff --git a/spec/data-table-spec.js b/spec/data-table-spec.js index f903c0fd8..0cf4db0eb 100644 --- a/spec/data-table-spec.js +++ b/spec/data-table-spec.js @@ -1,195 +1,195 @@ -describe('dc.dataTable', function() { +/* global appendChartID, loadDateFixture */ +describe('dc.dataTable', function () { var id, chart, data; var dateFixture; - var dimension, group; + var dimension; var countryDimension; var valueGroup; - beforeEach(function() { + beforeEach(function () { dateFixture = loadDateFixture(); data = crossfilter(dateFixture); - dimension = data.dimension(function(d) { + dimension = data.dimension(function (d) { return d3.time.day.utc(d.dd); }); - countryDimension = data.dimension(function(d) { + countryDimension = data.dimension(function (d) { return d.countrycode; }); - valueGroup = function() { - return "Data Table"; + valueGroup = function () { + return 'Data Table'; }; - id = "data-table"; + id = 'data-table'; appendChartID(id); - chart = dc.dataTable("#" + id) + chart = dc.dataTable('#' + id) .dimension(dimension) .group(valueGroup) .transitionDuration(0) .size(3) - .sortBy(function(d){return d.id;}) + .sortBy(function (d) {return d.id;}) .order(d3.descending) .columns( - [function(d) { + [function (d) { return d.id; - }, function(d) { + }, function (d) { return d.status; }] ); chart.render(); }); - describe('creation', function() { - it('generates something', function() { + describe('creation', function () { + it('generates something', function () { expect(chart).not.toBeNull(); }); - it('registers', function() { + it('registers', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('sets size', function() { + it('sets size', function () { expect(chart.size()).toEqual(3); }); - it('sets sortBy', function() { + it('sets sortBy', function () { expect(chart.sortBy()).not.toBeNull(); }); - it('sets order', function() { + it('sets order', function () { expect(chart.order()).toBe(d3.descending); }); - it('group should be set', function() { + it('group should be set', function () { expect(chart.group()).toEqual(valueGroup); }); - it('group tr should not be undefined', function() { - expect(typeof(chart.selectAll("tr.dc-table-group")[0][0])).not.toBe('undefined'); + it('group tr should not be undefined', function () { + expect(typeof(chart.selectAll('tr.dc-table-group')[0][0])).not.toBe('undefined'); }); - it('sets column span set on group tr', function() { - expect(chart.selectAll("tr.dc-table-group td")[0][0].getAttribute("colspan")).toEqual("2"); + it('sets column span set on group tr', function () { + expect(chart.selectAll('tr.dc-table-group td')[0][0].getAttribute('colspan')).toEqual('2'); }); - it('creates id column', function() { - expect(chart.selectAll("td._0")[0][0].innerHTML).toEqual('9'); - expect(chart.selectAll("td._0")[0][1].innerHTML).toEqual('8'); - expect(chart.selectAll("td._0")[0][2].innerHTML).toEqual('3'); + it('creates id column', function () { + expect(chart.selectAll('td._0')[0][0].innerHTML).toEqual('9'); + expect(chart.selectAll('td._0')[0][1].innerHTML).toEqual('8'); + expect(chart.selectAll('td._0')[0][2].innerHTML).toEqual('3'); }); - it('creates status column', function() { - expect(chart.selectAll("td._1")[0][0].innerHTML).toEqual("T"); - expect(chart.selectAll("td._1")[0][1].innerHTML).toEqual("F"); - expect(chart.selectAll("td._1")[0][2].innerHTML).toEqual("T"); + it('creates status column', function () { + expect(chart.selectAll('td._1')[0][0].innerHTML).toEqual('T'); + expect(chart.selectAll('td._1')[0][1].innerHTML).toEqual('F'); + expect(chart.selectAll('td._1')[0][2].innerHTML).toEqual('T'); }); }); - describe('external filter', function() { - beforeEach(function() { - countryDimension.filter("CA"); + describe('external filter', function () { + beforeEach(function () { + countryDimension.filter('CA'); chart.redraw(); }); - it('renders only filtered data set', function() { - expect(chart.selectAll("td._0")[0].length).toEqual(2); + it('renders only filtered data set', function () { + expect(chart.selectAll('td._0')[0].length).toEqual(2); }); - it('renders the correctly filtered records', function() { - expect(chart.selectAll("td._0")[0][0].innerHTML).toEqual('7'); - expect(chart.selectAll("td._0")[0][1].innerHTML).toEqual('5'); + it('renders the correctly filtered records', function () { + expect(chart.selectAll('td._0')[0][0].innerHTML).toEqual('7'); + expect(chart.selectAll('td._0')[0][1].innerHTML).toEqual('5'); }); }); - describe('renderlet', function() { + describe('renderlet', function () { var derlet; - beforeEach(function() { - derlet = jasmine.createSpy('renderlet', function(chart) { - chart.selectAll("td.dc-table-label").text("changed"); + beforeEach(function () { + derlet = jasmine.createSpy('renderlet', function (chart) { + chart.selectAll('td.dc-table-label').text('changed'); }); derlet.and.callThrough(); - chart.on("renderlet", derlet); + chart.on('renderlet', derlet); }); - it('custom renderlet should be invoked with render', function() { + it('custom renderlet should be invoked with render', function () { chart.render(); - expect(chart.selectAll("td.dc-table-label").text()).toEqual("changed"); + expect(chart.selectAll('td.dc-table-label').text()).toEqual('changed'); expect(derlet).toHaveBeenCalled(); }); - it('custom renderlet should be invoked with redraw', function() { + it('custom renderlet should be invoked with redraw', function () { chart.redraw(); - expect(chart.selectAll("td.dc-table-label").text()).toEqual("changed"); + expect(chart.selectAll('td.dc-table-label').text()).toEqual('changed'); expect(derlet).toHaveBeenCalled(); }); }); describe('ascending order', function () { - beforeEach(function() { + beforeEach(function () { chart.order(d3.ascending); chart.redraw(); }); it('uses dimension.bottom() instead of top()', function () { - expect(chart.selectAll("td._0")[0][0].innerHTML).toEqual('1'); + expect(chart.selectAll('td._0')[0][0].innerHTML).toEqual('1'); }); }); describe('specifying chart columns with label', function () { - beforeEach(function() { - chart.columns(["state"]); + beforeEach(function () { + chart.columns(['state']); chart.render(); }); - it('should render value and capitalized header', function(){ - var cols = chart.selectAll("td.dc-table-column")[0].map(function(d){return d.textContent;}); - var expected = ["Mississippi", "Mississippi", "Delaware"]; + it('should render value and capitalized header', function () { + var cols = chart.selectAll('td.dc-table-column')[0].map(function (d) {return d.textContent;}); + var expected = ['Mississippi', 'Mississippi', 'Delaware']; expect(cols.length).toEqual(expected.length); - expected.forEach(function(d){ + expected.forEach(function (d) { expect(cols).toContain(d); }); - var colheader = chart.selectAll("th.dc-table-head")[0].map(function(d){return d.textContent;}); + var colheader = chart.selectAll('th.dc-table-head')[0].map(function (d) {return d.textContent;}); expect(colheader.length).toEqual(1); - expect(colheader[0]).toEqual("State"); + expect(colheader[0]).toEqual('State'); }); }); describe('specifying chart columns with function', function () { beforeEach(function () { - chart.columns([function(d){return "" + d.id + 'test';}]); + chart.columns([function (d) {return '' + d.id + 'test';}]); chart.render(); }); - it('should render function result and no header', function(){ - var cols = chart.selectAll("td.dc-table-column")[0].map(function(d){return d.textContent;}); - var expected = ["9test", "8test", "3test"]; + it('should render function result and no header', function () { + var cols = chart.selectAll('td.dc-table-column')[0].map(function (d) {return d.textContent;}); + var expected = ['9test', '8test', '3test']; expect(cols.length).toEqual(expected.length); - expected.forEach(function(d){ + expected.forEach(function (d) { expect(cols).toContain(d); }); - var colheader = chart.selectAll("th.dc-table-head")[0].map(function(d){return d.textContent;}); + var colheader = chart.selectAll('th.dc-table-head')[0].map(function (d) {return d.textContent;}); expect(colheader.length).toEqual(0); }); }); describe('specifying chart columns with object', function () { - beforeEach(function() { + beforeEach(function () { chart.columns([{ - label: "Test ID", - format: function(d){ - return "test" + d.id; + label: 'Test ID', + format: function (d) { + return 'test' + d.id; } }]); chart.render(); }); - it('should render result of calling function with field and header for label', function(){ - var cols = chart.selectAll("td.dc-table-column")[0].map(function(d){return d.textContent;}); - var expected = ["test9", "test8", "test3"]; + it('should render result of calling function with field and header for label', function () { + var cols = chart.selectAll('td.dc-table-column')[0].map(function (d) {return d.textContent;}); + var expected = ['test9', 'test8', 'test3']; expect(cols.length).toEqual(expected.length); - expected.forEach(function(d){ + expected.forEach(function (d) { expect(cols).toContain(d); }); - var colheader = chart.selectAll("th.dc-table-head")[0].map(function(d){return d.textContent;}); + var colheader = chart.selectAll('th.dc-table-head')[0].map(function (d) {return d.textContent;}); expect(colheader.length).toEqual(1); - expect(colheader[0]).toEqual("Test ID"); + expect(colheader[0]).toEqual('Test ID'); }); }); describe('specifying showGroups as false', function () { - beforeEach(function() { + beforeEach(function () { chart.showGroups(false); chart.render(); }); - it('group tr should be undefined', function() { - expect(typeof(chart.selectAll("tr.dc-table-group")[0][0])).toBe('undefined'); + it('group tr should be undefined', function () { + expect(typeof(chart.selectAll('tr.dc-table-group')[0][0])).toBe('undefined'); }); }); - afterEach(function() { + afterEach(function () { dimension.filterAll(); countryDimension.filterAll(); }); }); - diff --git a/spec/event-spec.js b/spec/event-spec.js index 05a1d82b6..1e5dc45b0 100644 --- a/spec/event-spec.js +++ b/spec/event-spec.js @@ -1,31 +1,32 @@ -describe('dc event engine', function() { - describe('event execution', function() { +describe('dc event engine', function () { + describe('event execution', function () { var engine, trigger; - beforeEach(function() { + beforeEach(function () { engine = dc.events; - trigger = jasmine.createSpy("trigger"); + trigger = jasmine.createSpy('trigger'); }); - it('event can be dispatched immediately', function() { + it('event can be dispatched immediately', function () { engine.trigger(trigger); expect(trigger).toHaveBeenCalled(); }); - it('event can be dispatched with delay', function() { + it('event can be dispatched with delay', function () { engine.trigger(trigger, 100); expect(trigger).not.toHaveBeenCalled(); jasmine.clock().tick(101); expect(trigger).toHaveBeenCalled(); }); - it('multiple events dispatched with delay should be throttled', function() { + it('multiple events dispatched with delay should be throttled', function () { var times = 0; var i = 0; + var increment = function () { + times++; + }; while (i < 10) { - engine.trigger(function() { - times++; - }, 10); + engine.trigger(increment.bind(null), 10); i++; } jasmine.clock().tick(5); @@ -33,9 +34,8 @@ describe('dc event engine', function() { jasmine.clock().tick(5); expect(times).toEqual(1); }); - afterEach(function() { + afterEach(function () { }); }); }); - diff --git a/spec/filter-dates-spec.js b/spec/filter-dates-spec.js index fd15f3844..bf8830cfc 100644 --- a/spec/filter-dates-spec.js +++ b/spec/filter-dates-spec.js @@ -1,11 +1,12 @@ -describe('dc.filter-dates', function() { +/* global appendChartID, makeDate */ +describe('dc.filter-dates', function () { // do date filters work correctly? // adapted from a fiddle demonstrating the problem by Matt Traynham // see it fail with 1.7.1: http://jsfiddle.net/gordonwoodhull/Q2H9C/4/ // see it win with 2.0: http://jsfiddle.net/gordonwoodhull/Q2H9C/3/ // (Thanks!!) - var group, dateDim1, dateDim2, group1, group2, + var dateDim1, dateDim2, group1, group2, row1, row2; var width = 400; var height = 200; @@ -18,7 +19,7 @@ describe('dc.filter-dates', function() { // Generate Random Data [Date, VowelString, Random Number, Random Measure] var data = []; - for(var i = 0; i < 2000; i++) { + for (var i = 0; i < 2000; i++) { data[i] = [ randomDate(start, end), randomVowelString(stringLength), @@ -28,16 +29,16 @@ describe('dc.filter-dates', function() { } var ndx = crossfilter(data); - dateDim1 = ndx.dimension(function(d) { return d[0]; }); - dateDim2 = ndx.dimension(function(d) { return d[0]; }); + dateDim1 = ndx.dimension(function (d) { return d[0]; }); + dateDim2 = ndx.dimension(function (d) { return d[0]; }); - group1 = dateDim1.group().reduceSum(function(d) { return d[3]; }); - group2 = dateDim2.group().reduceSum(function(d) { return d[3]; }); + group1 = dateDim1.group().reduceSum(function (d) { return d[3]; }); + group2 = dateDim2.group().reduceSum(function (d) { return d[3]; }); appendChartID(row1); appendChartID(row2); - row1 = dc.rowChart("row1") + row1 = dc.rowChart('row1') .width(width) .height(height) .margins(margins) @@ -46,7 +47,7 @@ describe('dc.filter-dates', function() { .gap(1) .render(); - row2 = dc.rowChart("row2") + row2 = dc.rowChart('row2') .width(width) .height(height) .margins(margins) @@ -56,7 +57,7 @@ describe('dc.filter-dates', function() { .render(); }); - it('filtering on 11/8 should keep only that row', function() { + it('filtering on 11/8 should keep only that row', function () { row1.filter(makeDate(2013, 10, 8)); expect(group1.all()[6].value).not.toEqual(0); expect(group2.all()[6].value).toEqual(0); @@ -64,7 +65,7 @@ describe('dc.filter-dates', function() { expect(group2.all()[8].value).toEqual(0); }); - it('filtering on 11/17 should keep only that row', function() { + it('filtering on 11/17 should keep only that row', function () { row1.filter(makeDate(2013, 10, 17)); expect(group1.all()[15].value).not.toEqual(0); expect(group2.all()[15].value).toEqual(0); @@ -73,17 +74,17 @@ describe('dc.filter-dates', function() { }); // Create a Random Date - function randomDate(start, end) { + function randomDate (start, end) { var d = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); d.setUTCHours(0,0,0,0); return d; } // Create a Random String of vowels - var vowels = ["a","e","i","o","u","y"]; - function randomVowelString(length) { - var val = ""; - for(var i = 0; i < length; i++) { + var vowels = ['a','e','i','o','u','y']; + function randomVowelString (length) { + var val = ''; + for (var i = 0; i < length; i++) { val = val + vowels[Math.floor(Math.random() * (vowels.length - 1))]; } return val; diff --git a/spec/filters-spec.js b/spec/filters-spec.js index cf1bfa04f..36014662d 100644 --- a/spec/filters-spec.js +++ b/spec/filters-spec.js @@ -9,7 +9,7 @@ describe('dc.filters', function () { expect([filter[0], filter[1]]).toEqual([0, 10]); }); - describe("isFiltered", function () { + describe('isFiltered', function () { it('should return false when the number is out of range', function () { expect(filter.isFiltered(1234)).toBeFalsy(); }); @@ -60,7 +60,6 @@ describe('dc.filters', function () { describe('RangedTwoDimensionalFilter', function () { var filter; - it('should return null if filtered with null', function () { expect(dc.filters.RangedTwoDimensionalFilter(null)).toBe(null); }); @@ -98,8 +97,8 @@ describe('dc.filters', function () { expect(filter.isFiltered([-1,-1])).toBeFalsy(); }); - describe('when a single value is considered', function() { - it('should filter that value using only x coordinates', function() { + describe('when a single value is considered', function () { + it('should filter that value using only x coordinates', function () { expect(filter.isFiltered(5)).toBeTruthy(); expect(filter.isFiltered(0)).toBeTruthy(); expect(filter.isFiltered(10)).toBeFalsy(); @@ -128,8 +127,8 @@ describe('dc.filters', function () { expect(filter.isFiltered([20,10])).toBeFalsy(); }); - describe('when a single value is considered', function() { - it('should filter that value using only x coordinates', function() { + describe('when a single value is considered', function () { + it('should filter that value using only x coordinates', function () { expect(filter.isFiltered(10)).toBeTruthy(); expect(filter.isFiltered(15)).toBeTruthy(); expect(filter.isFiltered(20)).toBeFalsy(); diff --git a/spec/geo-choropleth-chart-spec.js b/spec/geo-choropleth-chart-spec.js index 301c41880..f5dc40809 100644 --- a/spec/geo-choropleth-chart-spec.js +++ b/spec/geo-choropleth-chart-spec.js @@ -1,54 +1,55 @@ -describe('dc.geoChoropleth', function() { +/* global appendChartID, loadDateFixture, loadGeoFixture, loadGeoFixture2, loadGeoFixture3 */ +describe('dc.geoChoropleth', function () { var data; var stateDimension, stateValueSumGroup, districtDimension, districtValueEnrollGroup; var geoJson, geoJson2, geoJson3; - beforeEach(function() { + beforeEach(function () { data = crossfilter(loadDateFixture()); - stateDimension = data.dimension(function(d){return d.state;}); - stateValueSumGroup = stateDimension.group().reduceSum(function(d){return d.value;}); - districtDimension = data.dimension(function(d){return d.district;}); - districtValueEnrollGroup = districtDimension.group().reduceSum(function(d){return d.value;}); + stateDimension = data.dimension(function (d) {return d.state;}); + stateValueSumGroup = stateDimension.group().reduceSum(function (d) {return d.value;}); + districtDimension = data.dimension(function (d) {return d.district;}); + districtValueEnrollGroup = districtDimension.group().reduceSum(function (d) {return d.value;}); - if ( !geoJson ) { + if (!geoJson) { geoJson = loadGeoFixture(); } - if ( !geoJson2 ) { + if (!geoJson2) { geoJson2 = loadGeoFixture2(); } - if ( !geoJson3 ) { + if (!geoJson3) { geoJson3 = loadGeoFixture3(); } }); - function buildChart(id) { + function buildChart (id) { var div = appendChartID(id); - div.append("a").attr("class", "reset").style("display", "none"); - div.append("span").attr("class", "filter").style("display", "none"); - var chart = dc.geoChoroplethChart("#" + id); + div.append('a').attr('class', 'reset').style('display', 'none'); + div.append('span').attr('class', 'filter').style('display', 'none'); + var chart = dc.geoChoroplethChart('#' + id); chart.dimension(stateDimension) .group(stateValueSumGroup) .width(990) .height(600) - .colors(["#ccc", "#E2F2FF", "#C4E4FF", "#9ED2FF", "#81C5FF", "#6BBAFF", "#51AEFF", "#36A2FF", "#1E96FF", "#0089FF"]) + .colors(['#ccc', '#E2F2FF', '#C4E4FF', '#9ED2FF', '#81C5FF', '#6BBAFF', '#51AEFF', '#36A2FF', '#1E96FF', '#0089FF']) .colorDomain([0, 155]) - .overlayGeoJson(geoJson.features, "state", function(d) { + .overlayGeoJson(geoJson.features, 'state', function (d) { return d.properties.name; }) - .overlayGeoJson(geoJson2.features, "county") + .overlayGeoJson(geoJson2.features, 'county') .transitionDuration(0) - .title(function(d) { - return d.key + " : " + (d.value ? d.value : 0); + .title(function (d) { + return d.key + ' : ' + (d.value ? d.value : 0); }); chart.render(); return chart; } - function buildChartWithCustomProjection(id) { + function buildChartWithCustomProjection (id) { var div = appendChartID(id); - div.append("a").attr("class", "reset").style("display", "none"); - div.append("span").attr("class", "filter").style("display", "none"); - var chart = dc.geoChoroplethChart("#" + id); + div.append('a').attr('class', 'reset').style('display', 'none'); + div.append('span').attr('class', 'filter').style('display', 'none'); + var chart = dc.geoChoroplethChart('#' + id); chart.dimension(districtDimension) .group(districtValueEnrollGroup) .projection(d3.geo.mercator() @@ -56,167 +57,167 @@ describe('dc.geoChoropleth', function() { .translate([8227, 3207])) .width(990) .height(600) - .colors(["#ccc", "#E2F2FF", "#C4E4FF", "#9ED2FF", "#81C5FF", "#6BBAFF", "#51AEFF", "#36A2FF", "#1E96FF", "#0089FF"]) + .colors(['#ccc', '#E2F2FF', '#C4E4FF', '#9ED2FF', '#81C5FF', '#6BBAFF', '#51AEFF', '#36A2FF', '#1E96FF', '#0089FF']) .colorDomain([0, 155]) - .overlayGeoJson(geoJson3.features, "district", function(d) { + .overlayGeoJson(geoJson3.features, 'district', function (d) { return d.properties.NAME; }) .transitionDuration(0) - .title(function(d) { - return d.key + " : " + (d.value ? d.value : 0); + .title(function (d) { + return d.key + ' : ' + (d.value ? d.value : 0); }); chart.render(); return chart; } - describe('creation', function() { + describe('creation', function () { var chart; - beforeEach(function() { - chart = buildChart("choropleth-chart"); + beforeEach(function () { + chart = buildChart('choropleth-chart'); }); - it('should return not null', function() { + it('should return not null', function () { expect(chart).not.toBeNull(); }); - it('should have a d3.geo.path', function() { + it('should have a d3.geo.path', function () { expect(chart.geoPath()).not.toBeNull(); }); - it('svg is created', function() { - expect(chart.selectAll("svg").length).not.toEqual(0); + it('svg is created', function () { + expect(chart.selectAll('svg').length).not.toEqual(0); }); - it('geo layer0 g is created', function() { - expect(chart.selectAll("g.layer0").length).not.toEqual(0); + it('geo layer0 g is created', function () { + expect(chart.selectAll('g.layer0').length).not.toEqual(0); }); - it('correct number of states should be generated', function() { - expect(chart.selectAll("g.layer0 g.state")[0].length).toEqual(52); + it('correct number of states should be generated', function () { + expect(chart.selectAll('g.layer0 g.state')[0].length).toEqual(52); }); - it('correct css class should be set [Alaska]', function() { - expect(chart.selectAll("g.layer0 g.state")[0][1].getAttribute("class")).toEqual("state alaska"); + it('correct css class should be set [Alaska]', function () { + expect(chart.selectAll('g.layer0 g.state')[0][1].getAttribute('class')).toEqual('state alaska'); }); - it('correct title should be set [Alaska]', function() { - expect(chart.selectAll("g.layer0 g.state title")[0][1].textContent).toEqual("Alaska : 0"); + it('correct title should be set [Alaska]', function () { + expect(chart.selectAll('g.layer0 g.state title')[0][1].textContent).toEqual('Alaska : 0'); }); - it('correct color filling should be set [Alaska]', function() { - expect(chart.selectAll("g.layer0 g.state path")[0][1].getAttribute("fill")).toEqual("#ccc"); + it('correct color filling should be set [Alaska]', function () { + expect(chart.selectAll('g.layer0 g.state path')[0][1].getAttribute('fill')).toEqual('#ccc'); }); - it('correct state boundary should be rendered [Alaska]', function() { - expect(chart.selectAll("g.layer0 g.state path")[0][1].getAttribute("d").length).not.toEqual(0); + it('correct state boundary should be rendered [Alaska]', function () { + expect(chart.selectAll('g.layer0 g.state path')[0][1].getAttribute('d').length).not.toEqual(0); }); - it('correct css class should be set [California]', function() { - expect(chart.selectAll("g.layer0 g.state")[0][4].getAttribute("class")).toEqual("state california"); + it('correct css class should be set [California]', function () { + expect(chart.selectAll('g.layer0 g.state')[0][4].getAttribute('class')).toEqual('state california'); }); - it('correct css class should be set [District of Columbia]', function() { - expect(chart.selectAll("g.layer0 g.state")[0][8].getAttribute("class")).toEqual("state district_of_columbia"); + it('correct css class should be set [District of Columbia]', function () { + expect(chart.selectAll('g.layer0 g.state')[0][8].getAttribute('class')).toEqual('state district_of_columbia'); }); - it('correct title should be set [California]', function() { - expect(chart.selectAll("g.layer0 g.state title")[0][4].textContent).toEqual("California : 154"); + it('correct title should be set [California]', function () { + expect(chart.selectAll('g.layer0 g.state title')[0][4].textContent).toEqual('California : 154'); }); - it('correct color should be set [California]', function() { - expect(chart.selectAll("g.layer0 g.state path")[0][4].getAttribute("fill")).toMatch(/#0089FF/i); + it('correct color should be set [California]', function () { + expect(chart.selectAll('g.layer0 g.state path')[0][4].getAttribute('fill')).toMatch(/#0089FF/i); }); - it('correct state boundary should be rendered [California]', function() { - expect(chart.selectAll("g.layer0 g.state path")[0][4].getAttribute("d").length).not.toEqual(0); + it('correct state boundary should be rendered [California]', function () { + expect(chart.selectAll('g.layer0 g.state path')[0][4].getAttribute('d').length).not.toEqual(0); }); - it('correct css class should be set [Colorado]', function() { - expect(chart.selectAll("g.layer0 g.state")[0][5].getAttribute("class")).toEqual("state colorado"); + it('correct css class should be set [Colorado]', function () { + expect(chart.selectAll('g.layer0 g.state')[0][5].getAttribute('class')).toEqual('state colorado'); }); - it('correct title should be set [Colorado]', function() { - expect(chart.selectAll("g.layer0 g.state title")[0][5].textContent).toEqual("Colorado : 22"); + it('correct title should be set [Colorado]', function () { + expect(chart.selectAll('g.layer0 g.state title')[0][5].textContent).toEqual('Colorado : 22'); }); - it('correct color should be set [Colorado]', function() { - expect(chart.selectAll("g.layer0 g.state path")[0][5].getAttribute("fill")).toMatch(/#E2F2FF/i); + it('correct color should be set [Colorado]', function () { + expect(chart.selectAll('g.layer0 g.state path')[0][5].getAttribute('fill')).toMatch(/#E2F2FF/i); }); - it('correct state boundary should be rendered [Colorado]', function() { - expect(chart.selectAll("g.layer0 g.state path")[0][5].getAttribute("d").length).not.toEqual(0); + it('correct state boundary should be rendered [Colorado]', function () { + expect(chart.selectAll('g.layer0 g.state path')[0][5].getAttribute('d').length).not.toEqual(0); }); - it('geo layer1 g is created', function() { - expect(chart.selectAll("g.layer1").length).not.toEqual(0); + it('geo layer1 g is created', function () { + expect(chart.selectAll('g.layer1').length).not.toEqual(0); }); - it('correct number of counties should be generated', function() { - expect(chart.selectAll("g.layer1 g.county")[0].length).toEqual(5); + it('correct number of counties should be generated', function () { + expect(chart.selectAll('g.layer1 g.county')[0].length).toEqual(5); }); - it('correct css class should be set [county]', function() { - expect(chart.selectAll("g.layer1 g.county")[0][1].getAttribute("class")).toEqual("county"); + it('correct css class should be set [county]', function () { + expect(chart.selectAll('g.layer1 g.county')[0][1].getAttribute('class')).toEqual('county'); }); - it('correct title should be set [county]', function() { - expect(chart.selectAll("g.layer1 g.county title")[0][1].textContent).toEqual(""); + it('correct title should be set [county]', function () { + expect(chart.selectAll('g.layer1 g.county title')[0][1].textContent).toEqual(''); }); - it('correct color filling should be set [county]', function() { - expect(chart.selectAll("g.layer1 g.county path")[0][1].getAttribute("fill")).toEqual("white"); + it('correct color filling should be set [county]', function () { + expect(chart.selectAll('g.layer1 g.county path')[0][1].getAttribute('fill')).toEqual('white'); }); - it('correct state boundary should be rendered [county]', function() { - expect(chart.selectAll("g.layer1 g.county path")[0][1].getAttribute("d").length).not.toEqual(0); + it('correct state boundary should be rendered [county]', function () { + expect(chart.selectAll('g.layer1 g.county path')[0][1].getAttribute('d').length).not.toEqual(0); }); - afterEach(function() { + afterEach(function () { stateDimension.filterAll(); districtDimension.filterAll(); }); }); - describe('filter and highlight', function() { + describe('filter and highlight', function () { var chart; - beforeEach(function() { - chart = buildChart("choropleth-chart-with-filter"); - chart.filter("Colorado"); - chart.filter("California"); + beforeEach(function () { + chart = buildChart('choropleth-chart-with-filter'); + chart.filter('Colorado'); + chart.filter('California'); chart.redraw(); }); - it('correct color should be set [California]', function() { - expect(chart.selectAll("g.layer0 g.state")[0][0].getAttribute("class")).toEqual("state alabama deselected"); - expect(chart.selectAll("g.layer0 g.state")[0][1].getAttribute("class")).toEqual("state alaska deselected"); + it('correct color should be set [California]', function () { + expect(chart.selectAll('g.layer0 g.state')[0][0].getAttribute('class')).toEqual('state alabama deselected'); + expect(chart.selectAll('g.layer0 g.state')[0][1].getAttribute('class')).toEqual('state alaska deselected'); }); - it('correct color should be set [California, Colorado]', function() { - expect(chart.selectAll("g.layer0 g.state")[0][4].getAttribute("class")).toEqual("state california selected"); - expect(chart.selectAll("g.layer0 g.state")[0][5].getAttribute("class")).toEqual("state colorado selected"); + it('correct color should be set [California, Colorado]', function () { + expect(chart.selectAll('g.layer0 g.state')[0][4].getAttribute('class')).toEqual('state california selected'); + expect(chart.selectAll('g.layer0 g.state')[0][5].getAttribute('class')).toEqual('state colorado selected'); }); - afterEach(function() { + afterEach(function () { stateDimension.filterAll(); districtDimension.filterAll(); }); }); - describe('custom projection', function() { + describe('custom projection', function () { var chart; - beforeEach(function() { - chart = buildChartWithCustomProjection("choropleth-chart-with-projection"); + beforeEach(function () { + chart = buildChartWithCustomProjection('choropleth-chart-with-projection'); }); - it('should return not null', function() { + it('should return not null', function () { expect(chart).not.toBeNull(); }); - it('svg is created', function() { - expect(chart.selectAll("svg").length).not.toEqual(0); + it('svg is created', function () { + expect(chart.selectAll('svg').length).not.toEqual(0); }); - afterEach(function() { + afterEach(function () { stateDimension.filterAll(); districtDimension.filterAll(); }); }); - describe('replace and remove layer', function() { + describe('replace and remove layer', function () { var chart; - beforeEach(function() { - chart = buildChart("choropleth-chart-replace-layer"); - chart.overlayGeoJson(geoJson3.features, "state", function(d) { + beforeEach(function () { + chart = buildChart('choropleth-chart-replace-layer'); + chart.overlayGeoJson(geoJson3.features, 'state', function (d) { return d.properties.name; }); }); - it('geo json layer with the same name should be replaced', function() { - expect(chart.geoJsons().filter(function(e) { - return e.name == "state"; + it('geo json layer with the same name should be replaced', function () { + expect(chart.geoJsons().filter(function (e) { + return e.name === 'state'; })[0].data).toBe(geoJson3.features); }); - it('geo json layer can be removed by name', function() { - chart.removeGeoJson("state"); - expect(chart.geoJsons().filter(function(e) { - return e.name == "state"; + it('geo json layer can be removed by name', function () { + chart.removeGeoJson('state'); + expect(chart.geoJsons().filter(function (e) { + return e.name === 'state'; }).length).toEqual(0); }); - afterEach(function() { + afterEach(function () { stateDimension.filterAll(); districtDimension.filterAll(); }); diff --git a/spec/heatmap-spec.js b/spec/heatmap-spec.js index 66c3aa85c..7fa280a84 100644 --- a/spec/heatmap-spec.js +++ b/spec/heatmap-spec.js @@ -1,7 +1,8 @@ -describe("dc.heatmap", function() { +/* global appendChartID, loadColorFixture, loadColorFixture2 */ +describe('dc.heatmap', function () { var id, data, dimension, group, chart, chartHeight, chartWidth; - beforeEach(function() { + beforeEach(function () { data = crossfilter(loadColorFixture()); dimension = data.dimension(function (d) { return [+d.colData, +d.rowData]; }); group = dimension.group().reduceSum(function (d) { return +d.colorData; }); @@ -9,9 +10,9 @@ describe("dc.heatmap", function() { chartHeight = 210; chartWidth = 210; - id = "heatmap-chart"; + id = 'heatmap-chart'; appendChartID(id); - chart = dc.heatMap("#" + id); + chart = dc.heatMap('#' + id); chart .dimension(dimension) @@ -19,8 +20,8 @@ describe("dc.heatmap", function() { .keyAccessor(function (d) { return d.key[0]; }) .valueAccessor(function (d) { return d.key[1]; }) .colorAccessor(function (d) { return d.value; }) - .colors(["#000001", "#000002", "#000003", "#000004"]) - .title(function(d) {return d.key + ": " + d.value; }) + .colors(['#000001', '#000002', '#000003', '#000004']) + .title(function (d) {return d.key + ': ' + d.value; }) .height(chartHeight) .width(chartWidth) .transitionDuration(0) @@ -29,8 +30,8 @@ describe("dc.heatmap", function() { }); - describe('rendering the heatmap', function() { - beforeEach(function() { + describe('rendering the heatmap', function () { + beforeEach(function () { chart.render(); }); @@ -39,88 +40,88 @@ describe("dc.heatmap", function() { }); it('should transform the graph position using the graph margins', function () { - expect(chart.select("g.heatmap").attr("transform")).toMatchTranslate(5,5); + expect(chart.select('g.heatmap').attr('transform')).toMatchTranslate(5,5); }); it('should position the heatboxes in a matrix', function () { - var heatBoxes = chart.selectAll("rect.heat-box"); + var heatBoxes = chart.selectAll('rect.heat-box'); - expect(+heatBoxes[0][0].getAttribute("x")).toEqual(0); - expect(+heatBoxes[0][0].getAttribute("y")).toEqual(100); + expect(+heatBoxes[0][0].getAttribute('x')).toEqual(0); + expect(+heatBoxes[0][0].getAttribute('y')).toEqual(100); - expect(+heatBoxes[0][1].getAttribute("x")).toEqual(0); - expect(+heatBoxes[0][1].getAttribute("y")).toEqual(0); + expect(+heatBoxes[0][1].getAttribute('x')).toEqual(0); + expect(+heatBoxes[0][1].getAttribute('y')).toEqual(0); - expect(+heatBoxes[0][2].getAttribute("x")).toEqual(100); - expect(+heatBoxes[0][2].getAttribute("y")).toEqual(100); + expect(+heatBoxes[0][2].getAttribute('x')).toEqual(100); + expect(+heatBoxes[0][2].getAttribute('y')).toEqual(100); - expect(+heatBoxes[0][3].getAttribute("x")).toEqual(100); - expect(+heatBoxes[0][3].getAttribute("y")).toEqual(0); + expect(+heatBoxes[0][3].getAttribute('x')).toEqual(100); + expect(+heatBoxes[0][3].getAttribute('y')).toEqual(0); }); it('should color heatboxes using the provided color option', function () { - var heatBoxes = chart.selectAll("rect.heat-box"); + var heatBoxes = chart.selectAll('rect.heat-box'); - expect(heatBoxes[0][0].getAttribute("fill")).toEqual("#000001"); - expect(heatBoxes[0][1].getAttribute("fill")).toEqual("#000002"); - expect(heatBoxes[0][2].getAttribute("fill")).toEqual("#000003"); - expect(heatBoxes[0][3].getAttribute("fill")).toEqual("#000004"); + expect(heatBoxes[0][0].getAttribute('fill')).toEqual('#000001'); + expect(heatBoxes[0][1].getAttribute('fill')).toEqual('#000002'); + expect(heatBoxes[0][2].getAttribute('fill')).toEqual('#000003'); + expect(heatBoxes[0][3].getAttribute('fill')).toEqual('#000004'); }); it('should size heatboxes based on the size of the matrix', function () { - chart.selectAll("rect.heat-box").each(function() { - expect(+this.getAttribute("height")).toEqual(100); - expect(+this.getAttribute("width")).toEqual(100); + chart.selectAll('rect.heat-box').each(function () { + expect(+this.getAttribute('height')).toEqual(100); + expect(+this.getAttribute('width')).toEqual(100); }); }); - it('should position the y-axis labels with their associated rows', function() { - var yaxisTexts = chart.selectAll(".rows.axis text"); - expect(+yaxisTexts[0][0].getAttribute("y")).toEqual(150 ); - expect(+yaxisTexts[0][0].getAttribute("x")).toEqual(0); - expect(+yaxisTexts[0][1].getAttribute("y")).toEqual(50); - expect(+yaxisTexts[0][1].getAttribute("x")).toEqual(0); + it('should position the y-axis labels with their associated rows', function () { + var yaxisTexts = chart.selectAll('.rows.axis text'); + expect(+yaxisTexts[0][0].getAttribute('y')).toEqual(150); + expect(+yaxisTexts[0][0].getAttribute('x')).toEqual(0); + expect(+yaxisTexts[0][1].getAttribute('y')).toEqual(50); + expect(+yaxisTexts[0][1].getAttribute('x')).toEqual(0); }); - it('should have labels on the y-axis corresponding to the row values', function() { - var yaxisTexts = chart.selectAll(".rows.axis text"); + it('should have labels on the y-axis corresponding to the row values', function () { + var yaxisTexts = chart.selectAll('.rows.axis text'); expect(yaxisTexts[0][0].textContent).toEqual('1'); expect(yaxisTexts[0][1].textContent).toEqual('2'); }); - it('should position the x-axis labels with their associated columns', function() { - var xaxisTexts = chart.selectAll(".cols.axis text"); - expect(+xaxisTexts[0][0].getAttribute("y")).toEqual(200); - expect(+xaxisTexts[0][0].getAttribute("x")).toEqual(50); - expect(+xaxisTexts[0][1].getAttribute("y")).toEqual(200); - expect(+xaxisTexts[0][1].getAttribute("x")).toEqual(150); + it('should position the x-axis labels with their associated columns', function () { + var xaxisTexts = chart.selectAll('.cols.axis text'); + expect(+xaxisTexts[0][0].getAttribute('y')).toEqual(200); + expect(+xaxisTexts[0][0].getAttribute('x')).toEqual(50); + expect(+xaxisTexts[0][1].getAttribute('y')).toEqual(200); + expect(+xaxisTexts[0][1].getAttribute('x')).toEqual(150); }); - it('should have labels on the x-axis corresponding to the row values', function() { - var xaxisTexts = chart.selectAll(".cols.axis text"); + it('should have labels on the x-axis corresponding to the row values', function () { + var xaxisTexts = chart.selectAll('.cols.axis text'); expect(xaxisTexts[0][0].textContent).toEqual('1'); expect(xaxisTexts[0][1].textContent).toEqual('2'); }); - describe('with custom labels', function() { - beforeEach(function() { - chart.colsLabel(function(x) { return 'col ' + x;}) - .rowsLabel(function(x) { return 'row ' + x;}) + describe('with custom labels', function () { + beforeEach(function () { + chart.colsLabel(function (x) { return 'col ' + x;}) + .rowsLabel(function (x) { return 'row ' + x;}) .redraw(); }); - it('should display the custom labels on the x axis', function() { - var xaxisTexts = chart.selectAll(".cols.axis text"); + it('should display the custom labels on the x axis', function () { + var xaxisTexts = chart.selectAll('.cols.axis text'); expect(xaxisTexts[0][0].textContent).toEqual('col 1'); expect(xaxisTexts[0][1].textContent).toEqual('col 2'); }); - it('should display the custom labels on the y axis', function() { - var yaxisTexts = chart.selectAll(".rows.axis text"); + it('should display the custom labels on the y axis', function () { + var yaxisTexts = chart.selectAll('.rows.axis text'); expect(yaxisTexts[0][0].textContent).toEqual('row 1'); expect(yaxisTexts[0][1].textContent).toEqual('row 2'); }); }); - describe('box radius', function() { + describe('box radius', function () { it('should default the x', function () { chart.select('rect.heat-box').each(function () { expect(this.getAttribute('rx')).toBe('6.75'); @@ -133,7 +134,7 @@ describe("dc.heatmap", function() { }); }); - it('should set the radius to an overridden x', function(){ + it('should set the radius to an overridden x', function () { chart.xBorderRadius(7); chart.render(); @@ -142,7 +143,7 @@ describe("dc.heatmap", function() { }); }); - it('should set the radius to an overridden y', function() { + it('should set the radius to an overridden y', function () { chart.yBorderRadius(7); chart.render(); @@ -157,7 +158,7 @@ describe("dc.heatmap", function() { describe('change crossfilter', function () { var data2, dimension2, group2, originalDomain, newDomain; - var reduceDimensionValues = function(dimension) { + var reduceDimensionValues = function (dimension) { return dimension.top(Infinity).reduce(function (p, d) { p.cols.add(d.colData); p.rows.add(d.rowData); @@ -179,30 +180,30 @@ describe("dc.heatmap", function() { }); it('should have the correct number of columns', function () { - chart.selectAll(".box-group").each(function (d) { + chart.selectAll('.box-group').each(function (d) { expect(originalDomain.cols.has(d.key[0])).toBeTruthy(); }); - chart.selectAll(".cols.axis text").each(function (d) { + chart.selectAll('.cols.axis text').each(function (d) { expect(originalDomain.cols.has(d)).toBeTruthy(); }); }); it('should have the correct number of rows', function () { - chart.selectAll(".box-group").each(function (d) { + chart.selectAll('.box-group').each(function (d) { expect(originalDomain.rows.has(d.key[1])).toBeTruthy(); }); - chart.selectAll(".rows.axis text").each(function (d) { + chart.selectAll('.rows.axis text').each(function (d) { expect(originalDomain.rows.has(d)).toBeTruthy(); }); }); }); - describe('indirect filtering', function(){ + describe('indirect filtering', function () { var dimension2, group2; beforeEach(function () { - dimension2 = data.dimension(function(d){ return +d.colorData; }); + dimension2 = data.dimension(function (d) { return +d.colorData; }); group2 = dimension2.group().reduceSum(function (d) { return +d.colorData; }); chart.dimension(dimension).group(group); @@ -211,43 +212,43 @@ describe("dc.heatmap", function() { chart.redraw(); }); - it('should update the title of the boxes', function(){ - var titles = chart.selectAll(".box-group title"); - var expected = ["1,1: 0", "1,2: 0", "2,1: 6", "2,2: 0"]; - titles.each(function(d){ + it('should update the title of the boxes', function () { + var titles = chart.selectAll('.box-group title'); + var expected = ['1,1: 0', '1,2: 0', '2,1: 6', '2,2: 0']; + titles.each(function (d) { expect(this.textContent).toBe(expected.shift()); }); }); }); - describe('filtering', function() { + describe('filtering', function () { var filterX, filterY; var otherDimension; - beforeEach( function() { + beforeEach(function () { filterX = Math.ceil(Math.random() * 2); filterY = Math.ceil(Math.random() * 2); otherDimension = data.dimension(function (d) { return +d.colData; }); chart.render(); }); - function clickCellOnChart(chart, x, y) { - var oneCell = chart.selectAll(".box-group").filter(function (d) { - return d.key[0] == x && d.key[1] == y; + function clickCellOnChart (chart, x, y) { + var oneCell = chart.selectAll('.box-group').filter(function (d) { + return d.key[0] === x && d.key[1] === y; }); - oneCell.select("rect").on("click")(oneCell.datum()); + oneCell.select('rect').on('click')(oneCell.datum()); return oneCell; } - it('cells should have the appropriate class', function() { + it('cells should have the appropriate class', function () { clickCellOnChart(chart, filterX, filterY); - chart.selectAll(".box-group").each( function(d) { + chart.selectAll('.box-group').each(function (d) { var cell = d3.select(this); - if (d.key[0] == filterX && d.key[1] == filterY) { - expect(cell.classed("selected")).toBeTruthy(); + if (d.key[0] === filterX && d.key[1] === filterY) { + expect(cell.classed('selected')).toBeTruthy(); expect(chart.hasFilter(d.key)).toBeTruthy(); } else { - expect(cell.classed("deselected")).toBeTruthy(); + expect(cell.classed('deselected')).toBeTruthy(); expect(chart.hasFilter(d.key)).toBeFalsy(); } }); @@ -262,7 +263,7 @@ describe("dc.heatmap", function() { expect(otherChart.data()[filterX - 1].value).toEqual(clickedCell.datum().value); }); - it('should be able to clear filters by filtering with null', function() { + it('should be able to clear filters by filtering with null', function () { clickCellOnChart(chart, filterX, filterY); expect(otherDimension.top(Infinity).length).toBe(2); chart.filter(null); @@ -270,79 +271,89 @@ describe("dc.heatmap", function() { }); }); - describe('click events', function() { - beforeEach(function() { + describe('click events', function () { + beforeEach(function () { chart.render(); }); - it('should toggle a filter for the clicked box', function() { - chart.selectAll(".box-group").each( function(d) { - var cell = d3.select(this).select("rect"); - cell.on("click")(d); + it('should toggle a filter for the clicked box', function () { + chart.selectAll('.box-group').each(function (d) { + var cell = d3.select(this).select('rect'); + cell.on('click')(d); expect(chart.hasFilter(d.key)).toBeTruthy(); - cell.on("click")(d); + cell.on('click')(d); expect(chart.hasFilter(d.key)).toBeFalsy(); }); }); - describe('on axis labels', function() { + describe('on axis labels', function () { + function assertOnlyThisAxisIsFiltered (chart, axis, value) { + chart.selectAll('.box-group').each(function (d) { + if (d.key[axis] === value) { + expect(chart.hasFilter(d.key)).toBeTruthy(); + } else { + expect(chart.hasFilter(d.key)).toBeFalsy(); + } + }); + } + describe('with nothing previously filtered', function () { it('should filter all cells on that axis', function () { - chart.selectAll(".cols.axis text").each( function(d) { + chart.selectAll('.cols.axis text').each(function (d) { var axisLabel = d3.select(this); - axisLabel.on("click")(d); + axisLabel.on('click')(d); assertOnlyThisAxisIsFiltered(chart, 0, d); - axisLabel.on("click")(d); + axisLabel.on('click')(d); }); - chart.selectAll(".rows.axis text").each( function(d) { + chart.selectAll('.rows.axis text').each(function (d) { var axisLabel = d3.select(this); - axisLabel.on("click")(d); + axisLabel.on('click')(d); assertOnlyThisAxisIsFiltered(chart, 1, d); - axisLabel.on("click")(d); + axisLabel.on('click')(d); }); }); }); - describe('with one cell on that axis already filtered', function() { + describe('with one cell on that axis already filtered', function () { it('should filter all cells on that axis (and the original cell should remain filtered)', function () { - var boxes = chart.selectAll(".box-group"); + var boxes = chart.selectAll('.box-group'); var box = d3.select(boxes[0][Math.floor(Math.random() * boxes.length)]); - box.select("rect").on("click")(box.datum()); + box.select('rect').on('click')(box.datum()); expect(chart.hasFilter(box.datum().key)).toBeTruthy(); var xVal = box.datum().key[0]; - var columns = chart.selectAll(".cols.axis text"); - var column = columns.filter( function (columnData) { - return columnData == xVal; + var columns = chart.selectAll('.cols.axis text'); + var column = columns.filter(function (columnData) { + return columnData === xVal; }); - column.on("click")(column.datum()); + column.on('click')(column.datum()); assertOnlyThisAxisIsFiltered(chart, 0, xVal); - column.on("click")(column.datum()); + column.on('click')(column.datum()); }); }); describe('with all cells on that axis already filtered', function () { it('should remove all filters on that axis', function () { var xVal = 1; - chart.selectAll(".box-group").each( function(d) { + chart.selectAll('.box-group').each(function (d) { var box = d3.select(this); - if (d.key[0] == xVal) { - box.select("rect").on("click")(box.datum()); + if (d.key[0] === xVal) { + box.select('rect').on('click')(box.datum()); } }); assertOnlyThisAxisIsFiltered(chart, 0, xVal); - var columns = chart.selectAll(".cols.axis text"); - var column = columns.filter( function (columnData) { - return columnData == xVal; + var columns = chart.selectAll('.cols.axis text'); + var column = columns.filter(function (columnData) { + return columnData === xVal; }); - column.on("click")(column.datum()); + column.on('click')(column.datum()); - chart.select(".box-group").each( function(d) { + chart.select('.box-group').each(function (d) { expect(chart.hasFilter(d.key)).toBeFalsy(); }); }); @@ -350,14 +361,3 @@ describe("dc.heatmap", function() { }); }); }); - -function assertOnlyThisAxisIsFiltered(chart, axis, value) { - chart.selectAll(".box-group").each( function(d) { - if (d.key[axis] == value) { - expect(chart.hasFilter(d.key)).toBeTruthy(); - } else { - expect(chart.hasFilter(d.key)).toBeFalsy(); - } - }); -} - diff --git a/spec/helpers/custom_matchers.js b/spec/helpers/custom_matchers.js index 91d5e7d72..6d7168242 100644 --- a/spec/helpers/custom_matchers.js +++ b/spec/helpers/custom_matchers.js @@ -1,58 +1,64 @@ -function parseTranslate(actual) { +function parseTranslate (actual) { var parts = /translate\((-?[\d\.]*)(?:[, ](.*))?\)/.exec(actual); - if(!parts) + if (!parts) { return null; - if(parts[2]===undefined) + } + if (parts[2] === undefined) { parts[2] = 0; + } expect(parts.length).toEqual(3); return parts; } -function parseTranslateRotate(actual) { +function parseTranslateRotate (actual) { var parts = /translate\((-?[\d\.]*)(?:[, ](.*))?\)[, ]rotate\((-?[\d\.]*)\)/.exec(actual); - if(!parts) + if (!parts) { return null; - if(parts[2]===undefined) + } + if (parts[2] === undefined) { parts[2] = 0; + } expect(parts.length).toEqual(4); return parts; } -function parsePath(path) { +function parsePath (path) { // an svg path is a string of any number of letters // each followed by zero or more numbers separated by spaces or commas var instrexp = /([a-z])[^a-z]*/gi, argexp = /(-?\d+(?:\.\d*)?)[, ]*/gi; var match, result = [], die = 99; - while((match = instrexp.exec(path))) { + while ((match = instrexp.exec(path))) { var instr = match[0]; var cmd = {op: match[1], args: []}; argexp.lastIndex = 0; - while((match = argexp.exec(instr))) + while ((match = argexp.exec(instr))) { cmd.args.push(match[1]); + } result.push(cmd); - if(!--die) throw "give up"; + if (!--die) { + throw 'give up'; + } } return result; } // there doesn't seem to be any way to access jasmine custom matchers -function compareWithinDelta(actual, expected, delta){ +function compareWithinDelta (actual, expected, delta) { if (delta === undefined) { delta = 1e-6; } var result = {}; - result.pass = actual >= (+expected-delta) && actual <= (+expected+delta); + result.pass = actual >= (+expected - delta) && actual <= (+expected + delta); - var pre = "Expected " + actual + " to ", - post = "be within [" + (+expected-delta) + "/" + (+expected+delta) + "]"; + var pre = 'Expected ' + actual + ' to ', + post = 'be within [' + (+expected - delta) + '/' + (+expected + delta) + ']'; - if(result.pass){ - result.message = pre + "not " + post; - } - else{ + if (result.pass) { + result.message = pre + 'not ' + post; + } else { result.message = pre + post; } @@ -62,86 +68,92 @@ function compareWithinDelta(actual, expected, delta){ // note: to make these reusable as boolean predicates, they only returns the first // failure instead of using expect -function compareSubPath(got, wanted, i, j, delta) { - for(var k = 0; k!=wanted.length; ++k) { - var command_num = "path command #" + i+k; - if(got[i+k].op.toUpperCase() != wanted[j+k].op.toUpperCase()) +function compareSubPath (got, wanted, i, j, delta) { + for (var k = 0; k !== wanted.length; ++k) { + var commandNum = 'path command #' + i + k; + if (got[i + k].op.toUpperCase() !== wanted[j + k].op.toUpperCase()) { return { pass: false, - message: command_num + " actual '" + got[i+k].op.toUpperCase() + - "' != expected '" + wanted[j+k].op.toUpperCase() + "'" + message: commandNum + ' actual \'' + got[i + k].op.toUpperCase() + + '\' != expected \'' + wanted[j + k].op.toUpperCase() + '\'' }; - if(got[i+k].args.length != wanted[j+k].args.length) + } + if (got[i + k].args.length !== wanted[j + k].args.length) { return { pass: false, - message: command_num + " number of arguments " + - got[i+k].args.length + " != expected " + wanted[j+k].args.length + message: commandNum + ' number of arguments ' + + got[i + k].args.length + ' != expected ' + wanted[j + k].args.length }; - for(var h = 0; h