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..a7b70bf85 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,31 +1,78 @@ { - "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, - "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/Gruntfile.js b/Gruntfile.js index 36ea97942..847af2540 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,22 +36,21 @@ 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' } }, jscs: { - old: { - src: ['<%= conf.spec %>/**/*.js'], - options: { - validateIndentation: 4 - } - }, source: { - src: ['<%= conf.src %>/**/*.js', '!<%= conf.src %>/{banner,footer}.js', 'Gruntfile.js', - 'grunt/*.js', '<%= conf.web %>/stock.js'], + src: [ + '<%= conf.src %>/**/*.js', + '!<%= conf.src %>/{banner,footer}.js', + '<%= conf.spec %>/**/*.js', + 'Gruntfile.js', + 'grunt/*.js', + '<%= conf.web %>/stock.js'], options: { config: '.jscsrc' } @@ -59,10 +58,16 @@ module.exports = function (grunt) { }, jshint: { source: { - src: ['<%= conf.src %>/**/*.js', 'Gruntfile.js', 'grunt/*.js', '<%= conf.web %>/stock.js'], + src: [ + '<%= conf.src %>/**/*.js', + '!<%= conf.src %>/{banner,footer}.js', + '<%= conf.spec %>/**/*.js', + 'Gruntfile.js', + 'grunt/*.js', + '<%= conf.web %>/stock.js' + ], options: { - jshintrc: '.jshintrc', - ignores: ['<%= conf.src %>/banner.js', '<%= conf.src %>/footer.js'] + jshintrc: '.jshintrc' } } }, @@ -104,7 +109,10 @@ module.exports = function (grunt) { display: 'short', summary: true, specs: '<%= conf.spec %>/*-spec.js', - helpers: '<%= conf.spec %>/helpers/*.js', + helpers: [ + '<%= conf.spec %>/helpers/*.js', + 'node_modules/grunt-saucelabs/examples/jasmine/lib/jasmine-jsreporter/jasmine-jsreporter.js' + ], version: '2.0.0', outfile: '<%= conf.spec %>/index.html', keepRunner: true @@ -116,9 +124,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 +209,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/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 "
There are 38.5 Total Widgets.
')); - }); - afterEach(function() { + describe('Inline nonspan element' , function () { + beforeEach(function () { + var div = d3.select('body').append('div').attr('id','number-display-test-section'); + div.append('p').html('There are Total Widgets.'); + buildChart('#nonspan'); + }); + it('should have text value in child', function () { + expect(d3.select('body').select('#number-display-test-section').html()) + .toMatch(new RegExp('There are ' + + '38.5 Total Widgets.
')); + }); + afterEach(function () { countryDimension.filterAll(); d3.select('#number-display-test-section').remove(); }); diff --git a/spec/pie-chart-spec.js b/spec/pie-chart-spec.js index 01d24bb70..a757f769c 100644 --- a/spec/pie-chart-spec.js +++ b/spec/pie-chart-spec.js @@ -1,4 +1,5 @@ -describe('dc.pieChart', function() { +/* global appendChartID, loadDateFixture, makeDate */ +describe('dc.pieChart', function () { var width = 200; var height = 200; var radius = 100; @@ -9,51 +10,51 @@ describe('dc.pieChart', function() { var regionDimension, statusDimension; var countryDimension, countryGroup, dateDimension; var statusGroup, statusMultiGroup; - beforeEach(function() { + beforeEach(function () { data = crossfilter(loadDateFixture()); - valueDimension = data.dimension(function(d) { + valueDimension = data.dimension(function (d) { return d.value; }); valueGroup = valueDimension.group(); - regionDimension = data.dimension(function(d) { + regionDimension = data.dimension(function (d) { return d.region; }); - statusDimension = data.dimension(function(d) { + statusDimension = data.dimension(function (d) { return d.status; }); - countryDimension = data.dimension(function(d) { + countryDimension = data.dimension(function (d) { return d.countrycode; }); countryGroup = countryDimension.group(); - dateDimension = data.dimension(function(d) { + dateDimension = data.dimension(function (d) { return d3.time.day.utc(d.dd); }); statusGroup = statusDimension.group(); statusMultiGroup = statusGroup.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}; } ); }); - 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.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) @@ -63,547 +64,548 @@ describe('dc.pieChart', function() { return chart; } - describe('generation', function() { + describe('generation', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart-age"); + beforeEach(function () { + chart = buildChart('pie-chart-age'); chart.innerRadius(innerRadius); chart.render(); }); - it('we get something', function() { + it('we get something', function () { expect(chart).not.toBeNull(); }); - it('should be registered', function() { + it('should be registered', function () { expect(dc.hasChart(chart)).toBeTruthy(); }); - it('dc-chart class should be turned on for parent div', function() { - expect(d3.select("#pie-chart-age").attr("class")).toEqual("dc-chart"); + it('dc-chart class should be turned on for parent div', function () { + expect(d3.select('#pie-chart-age').attr('class')).toEqual('dc-chart'); }); - it('inner radius can be set', function() { + it('inner radius can be set', function () { expect(chart.innerRadius()).toEqual(innerRadius); }); - it('svg should be created', function() { - expect(chart.select("svg").empty()).toBeFalsy(); + it('svg should be created', function () { + expect(chart.select('svg').empty()).toBeFalsy(); }); - it('default color scheme should be created', function() { + it('default color scheme should be created', function () { expect(chart.colors().length > 0).toBeTruthy(); }); - it('dimension should be set', function() { + it('dimension should be set', function () { expect(chart.dimension()).toBe(valueDimension); }); - it('group should be set', function() { + it('group should be set', function () { expect(chart.group()).toEqual(valueGroup); }); - it('width should be set', function() { + it('width should be set', function () { expect(chart.width()).toEqual(width); }); - it('height should be set', function() { + it('height should be set', function () { expect(chart.height()).toEqual(height); }); - it('radius should be set', function() { + it('radius should be set', function () { expect(chart.radius()).toEqual(radius); }); - it('cx should be set', function() { + it('cx should be set', function () { expect(chart.cx()).toEqual(defaultCenter.x); }); - it('cy should be set', function() { + it('cy should be set', function () { expect(chart.cy()).toEqual(defaultCenter.y); }); - it('height should be used for svg', function() { - expect(chart.select("svg").attr("height")).toEqual(String(height)); + it('height should be used for svg', function () { + expect(chart.select('svg').attr('height')).toEqual(String(height)); }); - it('root g should be created', function() { - expect(chart.select("svg g").empty()).toBeFalsy(); + it('root g should be created', function () { + expect(chart.select('svg g').empty()).toBeFalsy(); }); - it('root g should be translated to center', function() { - expect(chart.select("svg g").attr("transform")).toMatchTranslate(defaultCenter.x, defaultCenter.y); + it('root g should be translated to center', function () { + expect(chart.select('svg g').attr('transform')).toMatchTranslate(defaultCenter.x, defaultCenter.y); }); - it('slice g should be created with class', function() { - expect(chart.selectAll("svg g g.pie-slice").data().length).toEqual(5); + it('slice g should be created with class', function () { + expect(chart.selectAll('svg g g.pie-slice').data().length).toEqual(5); }); - it('slice path should be created', function() { - expect(chart.selectAll("svg g g.pie-slice path").data().length).toEqual(5); + it('slice path should be created', function () { + expect(chart.selectAll('svg g g.pie-slice path').data().length).toEqual(5); }); - it('slice css class should be numbered with index', function() { - chart.selectAll("g.pie-slice").each(function(p, i) { - expect(d3.select(this).attr("class")).toEqual("pie-slice _" + i); + it('slice css class should be numbered with index', function () { + chart.selectAll('g.pie-slice').each(function (p, i) { + expect(d3.select(this).attr('class')).toEqual('pie-slice _' + i); }); }); - it('slice path should be filled', function() { - chart.selectAll("svg g g.pie-slice path").each(function(p) { - expect(d3.select(this).attr("fill") !== "").toBeTruthy(); + it('slice path should be filled', function () { + chart.selectAll('svg g g.pie-slice path').each(function (p) { + expect(d3.select(this).attr('fill') !== '').toBeTruthy(); }); }); - it('slice path d should be created', function() { - chart.selectAll("svg g g.pie-slice path").each(function(p) { - expect(d3.select(this).attr("d") !== "").toBeTruthy(); + it('slice path d should be created', function () { + chart.selectAll('svg g g.pie-slice path').each(function (p) { + expect(d3.select(this).attr('d') !== '').toBeTruthy(); }); }); - it('slice path fill should be set correctly', function() { - expect(d3.select(chart.selectAll("g.pie-slice path")[0][0]).attr("fill")).toEqual("#3182bd"); - expect(d3.select(chart.selectAll("g.pie-slice path")[0][1]).attr("fill")).toEqual("#6baed6"); - expect(d3.select(chart.selectAll("g.pie-slice path")[0][2]).attr("fill")).toEqual("#9ecae1"); - expect(d3.select(chart.selectAll("g.pie-slice path")[0][3]).attr("fill")).toEqual("#c6dbef"); + it('slice path fill should be set correctly', function () { + expect(d3.select(chart.selectAll('g.pie-slice path')[0][0]).attr('fill')).toEqual('#3182bd'); + expect(d3.select(chart.selectAll('g.pie-slice path')[0][1]).attr('fill')).toEqual('#6baed6'); + expect(d3.select(chart.selectAll('g.pie-slice path')[0][2]).attr('fill')).toEqual('#9ecae1'); + expect(d3.select(chart.selectAll('g.pie-slice path')[0][3]).attr('fill')).toEqual('#c6dbef'); }); - it('slice label should be created', function() { - expect(chart.selectAll("svg text.pie-slice").data().length).toEqual(5); + it('slice label should be created', function () { + expect(chart.selectAll('svg text.pie-slice').data().length).toEqual(5); }); - it('slice label transform to centroid', function() { - expect(chart.selectAll("svg g text.pie-slice").attr("transform")) + it('slice label transform to centroid', function () { + expect(chart.selectAll('svg g text.pie-slice').attr('transform')) .toMatchTranslate(38.20604139901076, -52.58610463437158, 3); }); - it('slice label text should be set', function() { - chart.selectAll("svg g text.pie-slice").call(function(p) { + it('slice label text should be set', function () { + chart.selectAll('svg g text.pie-slice').call(function (p) { expect(p.text()).toEqual(p.datum().data.key); }); }); - it('slice label should be middle anchored', function() { - chart.selectAll("svg g text.pie-slice").each(function(p) { - expect(d3.select(this).attr("text-anchor")).toEqual("middle"); + it('slice label should be middle anchored', function () { + chart.selectAll('svg g text.pie-slice').each(function (p) { + expect(d3.select(this).attr('text-anchor')).toEqual('middle'); }); }); - it('reset link hidden after init rendering', function() { - expect(chart.select("a.reset").style("display")).toEqual("none"); + it('reset link hidden after init rendering', function () { + expect(chart.select('a.reset').style('display')).toEqual('none'); }); - it('filter printer should be set', function() { + it('filter printer should be set', function () { expect(chart.filterPrinter()).not.toBeNull(); }); - it('filter info should be hidden after init rendering', function() { - expect(chart.select("span.filter").style("display")).toEqual("none"); + it('filter info should be hidden after init rendering', function () { + expect(chart.select('span.filter').style('display')).toEqual('none'); }); - describe('center positioning', function() { - beforeEach(function() { + describe('center positioning', function () { + beforeEach(function () { chart .cx(newCenter.x) .cy(newCenter.y) .render(); return chart; }); - afterEach(function() { + afterEach(function () { chart .cx(defaultCenter.x) .cy(defaultCenter.y) .render(); return chart; }); - it('root g should be translated to ' + newCenter.x + ',' + newCenter.y, function() { - expect(chart.select("svg g").attr("transform")).toMatchTranslate(newCenter.x, newCenter.y); + it('root g should be translated to ' + newCenter.x + ',' + newCenter.y, function () { + expect(chart.select('svg g').attr('transform')).toMatchTranslate(newCenter.x, newCenter.y); }); }); - describe('with radius padding', function() { - beforeEach(function() { + describe('with radius padding', function () { + beforeEach(function () { chart.externalRadiusPadding(17) .render(); return chart; }); - it('should not change center', function() { - expect(chart.select("svg g").attr("transform")).toMatchTranslate(defaultCenter.x, defaultCenter.y); + it('should not change center', function () { + expect(chart.select('svg g').attr('transform')).toMatchTranslate(defaultCenter.x, defaultCenter.y); }); - it('should decrease outer radius', function() { - expect(chart.select("svg g.pie-slice path").attr('d')).toContainPath("A83,83 0 0,1 78,-25"); + it('should decrease outer radius', function () { + expect(chart.select('svg g.pie-slice path').attr('d')).toContainPath('A83,83 0 0,1 78,-25'); }); }); - describe('re-render', function() { - beforeEach(function() { + describe('re-render', function () { + beforeEach(function () { chart.render(); return chart; }); - it('multiple invocation of render should update chart', function() { - expect(d3.selectAll("#pie-chart-age svg")[0].length).toEqual(1); + it('multiple invocation of render should update chart', function () { + expect(d3.selectAll('#pie-chart-age svg')[0].length).toEqual(1); }); }); - describe('filter', function() { - beforeEach(function() { - regionDimension.filter("East"); + describe('filter', function () { + beforeEach(function () { + regionDimension.filter('East'); chart.render(); }); - it('label should be hidden if filtered out', function() { - expect(chart.selectAll("svg g text.pie-slice")[0][0].textContent).toEqual("22"); - expect(chart.selectAll("svg g text.pie-slice")[0][1].textContent).toEqual(""); + it('label should be hidden if filtered out', function () { + expect(chart.selectAll('svg g text.pie-slice')[0][0].textContent).toEqual('22'); + expect(chart.selectAll('svg g text.pie-slice')[0][1].textContent).toEqual(''); }); - afterEach(function() { + afterEach(function () { regionDimension.filterAll(); }); }); - describe('n/a filter', function() { - beforeEach(function() { - statusDimension.filter("E"); + describe('n/a filter', function () { + beforeEach(function () { + statusDimension.filter('E'); chart.render(); return chart; }); - it('should draw an empty chart', function() { + it('should draw an empty chart', function () { expect(chart.select('g').classed('empty-chart')).toBeTruthy(); }); - it('should have one slice', function() { - expect(chart.selectAll("svg g text.pie-slice").length).toBe(1); + it('should have one slice', function () { + expect(chart.selectAll('svg g text.pie-slice').length).toBe(1); }); - afterEach(function() { + afterEach(function () { statusDimension.filterAll(); }); }); - describe('slice selection', function() { - it('on click function should be defined', function() { - expect(chart.selectAll("svg g g.pie-slice path").on("click") !== undefined).toBeTruthy(); + describe('slice selection', function () { + it('on click function should be defined', function () { + expect(chart.selectAll('svg g g.pie-slice path').on('click') !== undefined).toBeTruthy(); }); - it('by default no slice should be selected', function() { + it('by default no slice should be selected', function () { expect(chart.hasFilter()).toBeFalsy(); }); - it('be able to set selected slice', function() { - expect(chart.filter("66").filter()).toEqual("66"); + it('be able to set selected slice', function () { + expect(chart.filter('66').filter()).toEqual('66'); expect(chart.hasFilter()).toBeTruthy(); chart.filterAll(); }); - it('should filter dimension by single selection', function() { - chart.filter("22"); + it('should filter dimension by single selection', function () { + chart.filter('22'); expect(countryGroup.all()[0].value).toEqual(1); expect(countryGroup.all()[1].value).toEqual(1); chart.filterAll(); }); - it('should filter dimension by multiple selections', function() { - chart.filter("66"); - chart.filter("22"); + it('should filter dimension by multiple selections', function () { + chart.filter('66'); + chart.filter('22'); expect(countryGroup.all()[0].value).toEqual(1); expect(countryGroup.all()[1].value).toEqual(2); chart.filterAll(); }); - it('should filter dimension with deselection', function() { - chart.filter("22"); - chart.filter("66"); - chart.filter("22"); + it('should filter dimension with deselection', function () { + chart.filter('22'); + chart.filter('66'); + chart.filter('22'); expect(countryGroup.all()[0].value).toEqual(0); expect(countryGroup.all()[1].value).toEqual(1); chart.filterAll(); }); - it('should highlight selected slices', function() { - chart.filter("66"); - chart.filter("22"); + it('should highlight selected slices', function () { + chart.filter('66'); + chart.filter('22'); chart.render(); - chart.selectAll("g.pie-slice").each(function(d) { - if (d.data.key === "66" || d.data.key === "22") - expect(d3.select(this).attr("class").indexOf("selected") > 0).toBeTruthy(); - else - expect(d3.select(this).attr("class").indexOf("deselected") > 0).toBeTruthy(); + chart.selectAll('g.pie-slice').each(function (d) { + if (d.data.key === '66' || d.data.key === '22') { + expect(d3.select(this).attr('class').indexOf('selected') > 0).toBeTruthy(); + } else { + expect(d3.select(this).attr('class').indexOf('deselected') > 0).toBeTruthy(); + } }); chart.filterAll(); }); - it('reset link generated after slice selection', function() { - chart.filter("66"); - expect(chart.select("a.reset").style("display")).not.toEqual('none'); + it('reset link generated after slice selection', function () { + chart.filter('66'); + expect(chart.select('a.reset').style('display')).not.toEqual('none'); }); - it('filter info generated after slice selection', function() { + it('filter info generated after slice selection', function () { chart.filter(null); - chart.filter("66"); - expect(chart.select("span.filter").style("display")).not.toEqual('none'); - expect(chart.select("span.filter").text()).toEqual("66"); + chart.filter('66'); + expect(chart.select('span.filter').style('display')).not.toEqual('none'); + expect(chart.select('span.filter').text()).toEqual('66'); }); - it('should remove highlight if no slice selected', function() { + it('should remove highlight if no slice selected', function () { chart.filterAll(); chart.redraw(); - chart.selectAll(".pie-slice path").each(function(d) { - var cls = d3.select(this).attr("class"); - expect(cls === null || cls === "").toBeTruthy(); + chart.selectAll('.pie-slice path').each(function (d) { + var cls = d3.select(this).attr('class'); + expect(cls === null || cls === '').toBeTruthy(); }); }); }); - describe('filter through clicking', function() { - it('onClick should trigger filtering of according group', function() { + describe('filter through clicking', function () { + it('onClick should trigger filtering of according group', function () { chart.onClick(chart.group().all()[0]); - expect(chart.filter()).toEqual("22"); + expect(chart.filter()).toEqual('22'); }); - it('onClick should reset filter if clicked twice', function() { + it('onClick should reset filter if clicked twice', function () { chart.onClick(chart.group().all()[0]); chart.onClick(chart.group().all()[0]); expect(chart.filter()).toEqual(null); }); - it('multiple onClick should trigger filtering of according groups', function() { + it('multiple onClick should trigger filtering of according groups', function () { chart.onClick(chart.group().all()[0]); chart.onClick(chart.group().all()[1]); - expect(chart.hasFilter("22")).toBeTruthy(); - expect(chart.hasFilter("33")).toBeTruthy(); + expect(chart.hasFilter('22')).toBeTruthy(); + expect(chart.hasFilter('33')).toBeTruthy(); }); }); - describe('group order', function() { - beforeEach(function() { + describe('group order', function () { + beforeEach(function () { chart.cap(4).ordering(dc.pluck('value')); }); - it('group should be orderd', function() { - expect([ '33','55','22','44','Others']).toEqual(chart.data().map(dc.pluck('key'))); + it('group should be orderd', function () { + expect(['33','55','22','44','Others']).toEqual(chart.data().map(dc.pluck('key'))); chart.ordering(dc.pluck('key')); - expect([ '22','33','44','55','Others']).toEqual(chart.data().map(dc.pluck('key'))); + expect(['22','33','44','55','Others']).toEqual(chart.data().map(dc.pluck('key'))); }); - afterEach(function() { + afterEach(function () { chart.cap(Infinity).ordering(dc.pluck('key')); }); }); }); - describe('redraw after empty selection', function() { + describe('redraw after empty selection', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart2"); + beforeEach(function () { + chart = buildChart('pie-chart2'); dateDimension.filter([makeDate(2010, 0, 1), makeDate(2010, 0, 3)]); chart.redraw(); dateDimension.filter([makeDate(2012, 0, 1), makeDate(2012, 11, 30)]); chart.redraw(); }); - it('pie chart should be restored', function() { - chart.selectAll("g.pie-slice path").each(function(p) { - expect(d3.select(this).attr("d").indexOf("NaN") < 0).toBeTruthy(); + it('pie chart should be restored', function () { + chart.selectAll('g.pie-slice path').each(function (p) { + expect(d3.select(this).attr('d').indexOf('NaN') < 0).toBeTruthy(); }); }); - afterEach(function() { + afterEach(function () { dateDimension.filterAll(); }); }); - describe('small slices', function() { + describe('small slices', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart3"); + beforeEach(function () { + chart = buildChart('pie-chart3'); chart.minAngleForLabel(1) .renderTitle(true); chart.render(); }); - it('label should not be generated if the slice is too small', function() { + it('label should not be generated if the slice is too small', function () { // slice '66' - expect(d3.select(chart.selectAll("text.pie-slice")[0][4]).text()).toEqual(""); + expect(d3.select(chart.selectAll('text.pie-slice')[0][4]).text()).toEqual(''); }); - describe('selected', function() { - beforeEach(function() { + describe('selected', function () { + beforeEach(function () { chart.filter('66').redraw(); }); - it('a small slice should be labelled if it is selected', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][4]).text()).toEqual("66"); + it('a small slice should be labelled if it is selected', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][4]).text()).toEqual('66'); }); - afterEach(function() { + afterEach(function () { chart.filter(null); }); }); }); - describe('custom label & title generation', function() { + describe('custom label & title generation', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart3"); - chart.label(function(d) { - return "custom"; + beforeEach(function () { + chart = buildChart('pie-chart3'); + chart.label(function (d) { + return 'custom'; }) - .title(function(d) { - return "custom"; + .title(function (d) { + return 'custom'; }) .minAngleForLabel(1) .renderTitle(true); chart.render(); }); - it('should render correct number of text', function() { - expect(chart.selectAll("text.pie-slice")[0].length).toEqual(5); + it('should render correct number of text', function () { + expect(chart.selectAll('text.pie-slice')[0].length).toEqual(5); }); - it('custom function should be used to dynamically generate label', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][0]).text()).toEqual("custom"); + it('custom function should be used to dynamically generate label', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][0]).text()).toEqual('custom'); }); - it('label should not be generated if the slice is too small', function() { + it('label should not be generated if the slice is too small', function () { // slice '66' - expect(d3.select(chart.selectAll("text.pie-slice")[0][4]).text()).toEqual(""); + expect(d3.select(chart.selectAll('text.pie-slice')[0][4]).text()).toEqual(''); }); - it('should render correct number of title', function() { - expect(chart.selectAll("g.pie-slice title")[0].length).toEqual(5); + it('should render correct number of title', function () { + expect(chart.selectAll('g.pie-slice title')[0].length).toEqual(5); }); - it('custom function should be used to dynamically generate title', function() { - chart.selectAll("g.pie-slice title").each(function(p) { - expect(d3.select(this).text()).toEqual("custom"); + it('custom function should be used to dynamically generate title', function () { + chart.selectAll('g.pie-slice title').each(function (p) { + expect(d3.select(this).text()).toEqual('custom'); }); }); }); - describe('pie chart slices cap and group switching', function() { + describe('pie chart slices cap and group switching', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart4"); + beforeEach(function () { + chart = buildChart('pie-chart4'); chart.slicesCap(2) .renderTitle(true) - .othersLabel("small"); + .othersLabel('small'); chart.render(); }); - describe('with normal valueAccessor', function() { - beforeEach(function() { + describe('with normal valueAccessor', function () { + beforeEach(function () { chart.dimension(valueDimension).group(valueGroup) .valueAccessor(dc.pluck('value')) .render(); }); - it('produce expected number of slices', function() { - expect(chart.selectAll("text.pie-slice")[0].length).toEqual(3); + it('produce expected number of slices', function () { + expect(chart.selectAll('text.pie-slice')[0].length).toEqual(3); }); - it('others slice should use custom name', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][2]).text()).toEqual("small"); + it('others slice should use custom name', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][2]).text()).toEqual('small'); }); - it('remaining slices should be in numerical order', function() { - expect(chart.selectAll("text.pie-slice").data().map(dc.pluck('value'))) + it('remaining slices should be in numerical order', function () { + expect(chart.selectAll('text.pie-slice').data().map(dc.pluck('value'))) .toEqual([2,3,5]); }); - it('clicking others slice should filter all groups slices', function() { - var event = document.createEvent("MouseEvents"); - event.initEvent("click",true,true); - chart.selectAll(".pie-slice path")[0][2].dispatchEvent(event); - expect(chart.filters()).toEqual(["22","55","66","small"]); - chart.selectAll(".pie-slice path")[0][2].dispatchEvent(event); + it('clicking others slice should filter all groups slices', function () { + var event = document.createEvent('MouseEvents'); + event.initEvent('click',true,true); + chart.selectAll('.pie-slice path')[0][2].dispatchEvent(event); + expect(chart.filters()).toEqual(['22','55','66','small']); + chart.selectAll('.pie-slice path')[0][2].dispatchEvent(event); expect(chart.filters()).toEqual([]); }); }); - describe('with custom valueAccessor', function() { - beforeEach(function() { + describe('with custom valueAccessor', function () { + beforeEach(function () { chart.dimension(statusDimension).group(statusMultiGroup) - .valueAccessor(function(d) {return d.value.value;}) + .valueAccessor(function (d) {return d.value.value;}) .render(); return chart; }); - it('correct values, no others row', function() { - expect(chart.selectAll("g.pie-slice").data().map(dc.pluck('value'))) + it('correct values, no others row', function () { + expect(chart.selectAll('g.pie-slice').data().map(dc.pluck('value'))) .toEqual([220, 198]); }); - it('correct values, others row', function() { + it('correct values, others row', function () { chart.cap(1).render(); - expect(chart.selectAll("title")[0].map(function(t) {return d3.select(t).text();})) - .toEqual([ 'F: 220', 'small: 198' ]); + expect(chart.selectAll('title')[0].map(function (t) {return d3.select(t).text();})) + .toEqual(['F: 220', 'small: 198']); chart.cap(3); //teardown }); }); - afterEach(function() { + afterEach(function () { valueDimension.filterAll(); }); }); - describe('pie chart wo/ label', function() { + describe('pie chart wo/ label', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart4"); + beforeEach(function () { + chart = buildChart('pie-chart4'); chart.innerRadius(innerRadius); chart.renderLabel(false); chart.render(); }); - it('slice label should not be created', function() { - expect(chart.selectAll("svg g text.pie-slice").data().length).toEqual(0); + it('slice label should not be created', function () { + expect(chart.selectAll('svg g text.pie-slice').data().length).toEqual(0); }); }); - describe('renderlet', function() { + describe('renderlet', function () { var chart; - beforeEach(function() { - chart = buildChart("chart-renderlet"); - chart.on("renderlet", function() { - chart.selectAll("path").attr("fill", "red"); + beforeEach(function () { + chart = buildChart('chart-renderlet'); + chart.on('renderlet', function () { + chart.selectAll('path').attr('fill', 'red'); }); }); - it('custom renderlet should be invoked with render', function() { + it('custom renderlet should be invoked with render', function () { chart.render(); - expect(chart.selectAll("path").attr("fill")).toEqual("red"); + expect(chart.selectAll('path').attr('fill')).toEqual('red'); }); - it('custom renderlet should be invoked with redraw', function() { + it('custom renderlet should be invoked with redraw', function () { chart.redraw(); - expect(chart.selectAll("path").attr("fill")).toEqual("red"); + expect(chart.selectAll('path').attr('fill')).toEqual('red'); }); }); - describe('pie chart label and title w/ value accessor', function() { + describe('pie chart label and title w/ value accessor', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart-default-label-title"); + beforeEach(function () { + chart = buildChart('pie-chart-default-label-title'); chart.dimension(statusGroup) .group(statusMultiGroup) - .valueAccessor(function(d) { + .valueAccessor(function (d) { return d.value.count; }) .renderLabel(true).renderTitle(true); chart.render(); return chart; }); - it('default function should be used to dynamically generate label', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][0]).text()).toEqual("F"); + it('default function should be used to dynamically generate label', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][0]).text()).toEqual('F'); }); - it('default function should be used to dynamically generate title', function() { - expect(d3.select(chart.selectAll("g.pie-slice title")[0][0]).text()).toEqual("F: 5"); + it('default function should be used to dynamically generate title', function () { + expect(d3.select(chart.selectAll('g.pie-slice title')[0][0]).text()).toEqual('F: 5'); }); - describe('with n/a filter', function() { - beforeEach(function() { - regionDimension.filter("nowhere"); + describe('with n/a filter', function () { + beforeEach(function () { + regionDimension.filter('nowhere'); chart.render(); return chart; }); - it('should draw an empty chart', function() { + it('should draw an empty chart', function () { expect(chart.select('g').classed('empty-chart')).toBeTruthy(); }); - it('should have one slice', function() { - expect(chart.selectAll("svg g text.pie-slice").length).toBe(1); + it('should have one slice', function () { + expect(chart.selectAll('svg g text.pie-slice').length).toBe(1); }); - it('should have slice labeled empty', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][0]).text()).toEqual("empty"); + it('should have slice labeled empty', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][0]).text()).toEqual('empty'); }); - describe('with emptyTitle', function() { - beforeEach(function() { + describe('with emptyTitle', function () { + beforeEach(function () { chart.emptyTitle('nothing').render(); }); - it('should respect the emptyTitle', function() { - expect(d3.select(chart.selectAll("text.pie-slice")[0][0]).text()).toEqual("nothing"); + it('should respect the emptyTitle', function () { + expect(d3.select(chart.selectAll('text.pie-slice')[0][0]).text()).toEqual('nothing'); }); - afterEach(function() { + afterEach(function () { chart.emptyTitle('empty'); }); }); - afterEach(function() { + afterEach(function () { regionDimension.filterAll(); }); }); }); - describe('custom filter handler', function() { + describe('custom filter handler', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart-filter-handler"); - chart.filterHandler(function(dimension, filters) { - dimension.filter("66"); - return ["66"]; + beforeEach(function () { + chart = buildChart('pie-chart-filter-handler'); + chart.filterHandler(function (dimension, filters) { + dimension.filter('66'); + return ['66']; }); return chart; }); - it('default function should be used to dynamically generate label', function() { + it('default function should be used to dynamically generate label', function () { chart.filter(6); expect(chart.filter()).toEqual('66'); }); - afterEach(function() { + afterEach(function () { valueDimension.filterAll(); }); }); - describe('external labeling', function() { + describe('external labeling', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart-external-labeling") + beforeEach(function () { + chart = buildChart('pie-chart-external-labeling') .externalLabels(10) .render(); }); - it('should place labels outside of pie offset by given radius', function() { - var label = d3.select("#pie-chart-external-labeling svg g text.pie-slice"); + it('should place labels outside of pie offset by given radius', function () { + var label = d3.select('#pie-chart-external-labeling svg g text.pie-slice'); var centroid = d3.svg.arc() .outerRadius(chart.radius() + 10) .innerRadius(chart.radius() + 10) .centroid(label.datum()); - expect(label.attr("transform")).toMatchTranslate(centroid[0], centroid[1], 3); + expect(label.attr('transform')).toMatchTranslate(centroid[0], centroid[1], 3); }); - it('gives labels class "external"', function() { - d3.selectAll("#pie-chart-external-labeling svg g text.pie-slice").each(function() { - expect(d3.select(this).classed("external")).toBeTruthy(); + it('gives labels class "external"', function () { + d3.selectAll('#pie-chart-external-labeling svg g text.pie-slice').each(function () { + expect(d3.select(this).classed('external')).toBeTruthy(); }); }); - it('returns radius when given no arguments', function() { + it('returns radius when given no arguments', function () { expect(chart.externalLabels()).toEqual(10); }); - it('resets to default when given falsey argument', function() { + it('resets to default when given falsey argument', function () { chart.externalLabels(false).render(); - d3.selectAll("#pie-chart-external-labeling svg g text.pie-slice").each(function() { + d3.selectAll('#pie-chart-external-labeling svg g text.pie-slice').each(function () { var label = d3.select(this); var centroid = d3.svg.arc() @@ -611,66 +613,65 @@ describe('dc.pieChart', function() { .innerRadius(chart.innerRadius()) .centroid(label.datum()); - expect(label.attr("transform")).toMatchTranslate(centroid[0], centroid[1], 3); - expect(label.classed("external")).toBeFalsy(); + expect(label.attr('transform')).toMatchTranslate(centroid[0], centroid[1], 3); + expect(label.classed('external')).toBeFalsy(); }); }); }); - describe('legends', function() { + describe('legends', function () { var chart; - beforeEach(function() { - chart = buildChart("pie-chart-legend") + beforeEach(function () { + chart = buildChart('pie-chart-legend') .cap(3) .legend(dc.legend()) .render(); }); - it('should generate items for each slice', function() { + it('should generate items for each slice', function () { expect(chart.selectAll('g.dc-legend g.dc-legend-item').size()).toEqual(chart.data().length); }); - it('should include "others" item', function() { - var numOthersGroups = chart.selectAll('g.dc-legend g.dc-legend-item text').filter(function(d, i) { - return d.name == "Others"; + it('should include "others" item', function () { + var numOthersGroups = chart.selectAll('g.dc-legend g.dc-legend-item text').filter(function (d, i) { + return d.name === 'Others'; }).size(); expect(numOthersGroups).toEqual(1); }); - it('items should be colored', function() { - chart.selectAll('g.dc-legend g.dc-legend-item').each(function() { + it('items should be colored', function () { + chart.selectAll('g.dc-legend g.dc-legend-item').each(function () { expect(d3.select(this).select('rect').attr('fill')).not.toEqual(undefined); }); }); - it('hovering on items should highlight corresponding slice', function() { - chart.selectAll('g.dc-legend g.dc-legend-item').each(function(d, i) { + it('hovering on items should highlight corresponding slice', function () { + chart.selectAll('g.dc-legend g.dc-legend-item').each(function (d, i) { var legendItem = d3.select(this); - legendItem.on("mouseover")(legendItem.datum()); + legendItem.on('mouseover')(legendItem.datum()); - expect(chart.select('.pie-slice._' + i).classed("highlight")).toBeTruthy(); - legendItem.on("mouseout")(legendItem.datum()); + expect(chart.select('.pie-slice._' + i).classed('highlight')).toBeTruthy(); + legendItem.on('mouseout')(legendItem.datum()); }); }); - it('unhovering removes highlight from corresponding slice', function() { - chart.selectAll('g.dc-legend g.dc-legend-item').each(function(d, i) { + it('unhovering removes highlight from corresponding slice', function () { + chart.selectAll('g.dc-legend g.dc-legend-item').each(function (d, i) { var legendItem = d3.select(this); - legendItem.on("mouseover")(legendItem.datum()); - legendItem.on("mouseout")(legendItem.datum()); + legendItem.on('mouseover')(legendItem.datum()); + legendItem.on('mouseout')(legendItem.datum()); - expect(chart.select('.pie-slice._' + i).classed("highlight")).toBeFalsy(); + expect(chart.select('.pie-slice._' + i).classed('highlight')).toBeFalsy(); }); }); - it('clicking on items filters them', function() { - chart.selectAll('g.dc-legend g.dc-legend-item').each(function(d, i) { + it('clicking on items filters them', function () { + chart.selectAll('g.dc-legend g.dc-legend-item').each(function (d, i) { var legendItem = d3.select(this); - legendItem.on("click")(legendItem.datum()); + legendItem.on('click')(legendItem.datum()); expect(chart.hasFilter(d.name)).toBeTruthy(); }); }); - afterEach(function() { + afterEach(function () { valueDimension.filterAll(); }); }); }); - diff --git a/spec/row-chart-spec.js b/spec/row-chart-spec.js index 1c321854e..687e99082 100644 --- a/spec/row-chart-spec.js +++ b/spec/row-chart-spec.js @@ -1,40 +1,36 @@ -describe('dc.rowChart', function() { +/* global appendChartID, loadDateFixture, makeDate */ +describe('dc.rowChart', function () { var id, chart; var data, dimension, nvdimension; - var positiveGroupHolder = { groupType: "positive signed" }; - var negativeGroupHolder = { groupType: "negative signed" }; - var mixedGroupHolder = { groupType: "mixed signed" }; - var largerGroupHolder = { groupType: "larger" }; + var positiveGroupHolder = {groupType: 'positive signed'}; + var negativeGroupHolder = {groupType: 'negative signed'}; + var mixedGroupHolder = {groupType: 'mixed signed'}; + var largerGroupHolder = {groupType: 'larger'}; beforeEach(function () { data = crossfilter(loadDateFixture()); - dimension = data.dimension(function(d) { return +d.value; }); + dimension = data.dimension(function (d) { return +d.value; }); - positiveGroupHolder.group = dimension.group().reduceSum(function(d){return Math.abs(+d.nvalue);}); + positiveGroupHolder.group = dimension.group().reduceSum(function (d) {return Math.abs(+d.nvalue);}); positiveGroupHolder.dimension = dimension; - negativeGroupHolder.group = dimension.group().reduceSum(function(d){return -Math.abs(+d.nvalue);}); + negativeGroupHolder.group = dimension.group().reduceSum(function (d) {return -Math.abs(+d.nvalue);}); negativeGroupHolder.dimension = dimension; - mixedGroupHolder.group = dimension.group().reduceSum(function(d){return +d.nvalue;}); + mixedGroupHolder.group = dimension.group().reduceSum(function (d) {return +d.nvalue;}); mixedGroupHolder.dimension = dimension; - nvdimension = data.dimension(function(d) { return +d.nvalue; }); - largerGroupHolder.group = nvdimension.group().reduceSum(function(d){return +d.value;}); + nvdimension = data.dimension(function (d) { return +d.nvalue; }); + largerGroupHolder.group = nvdimension.group().reduceSum(function (d) {return +d.value;}); largerGroupHolder.dimension = nvdimension; id = 'row-chart'; appendChartID(id); - chart = dc.rowChart("#" + id); + chart = dc.rowChart('#' + id); chart.dimension(dimension) .width(600).height(200).gap(10) .transitionDuration(0); }); - itShouldBehaveLikeARowChartWithGroup(positiveGroupHolder, 5); - itShouldBehaveLikeARowChartWithGroup(negativeGroupHolder, 5); - itShouldBehaveLikeARowChartWithGroup(mixedGroupHolder, 5); - itShouldBehaveLikeARowChartWithGroup(largerGroupHolder, 7); - describe('enabling the chart title and label with a value accessor', function () { beforeEach(function () { chart.group(mixedGroupHolder.group); @@ -48,7 +44,7 @@ describe('dc.rowChart', function() { }); it('should use the default function to dynamically generate the title', function () { - expect(chart.select("g.row title").text()).toBe('22: 108'); + expect(chart.select('g.row title').text()).toBe('22: 108'); }); }); @@ -79,10 +75,8 @@ describe('dc.rowChart', function() { }); }); - function itShouldBehaveLikeARowChartWithGroup(groupHolder, N) { + function itShouldBehaveLikeARowChartWithGroup (groupHolder, N) { describe('for ' + groupHolder.groupType + ' data', function () { - var group; - beforeEach(function () { chart.group(groupHolder.group); }); @@ -93,52 +87,53 @@ describe('dc.rowChart', function() { }); it('should create a root svg node', function () { - expect(chart.select("svg").size()).toBe(1); + expect(chart.select('svg').size()).toBe(1); }); it('should create a row group for each datum', function () { - expect(chart.selectAll("svg g g.row").size()).toBe(N); + expect(chart.selectAll('svg g g.row').size()).toBe(N); }); it('should number each row sequentially with classes', function () { - chart.selectAll("svg g g.row").each(function (r, i) { - expect(d3.select(this).attr("class")).toBe("row _" + i); + chart.selectAll('svg g g.row').each(function (r, i) { + expect(d3.select(this).attr('class')).toBe('row _' + i); }); }); it('should fill each row rect with pre-defined colors', function () { - expect(d3.select(chart.selectAll("g.row rect")[0][0]).attr("fill")).toBe("#3182bd"); - expect(d3.select(chart.selectAll("g.row rect")[0][1]).attr("fill")).toBe("#6baed6"); - expect(d3.select(chart.selectAll("g.row rect")[0][2]).attr("fill")).toBe("#9ecae1"); - expect(d3.select(chart.selectAll("g.row rect")[0][3]).attr("fill")).toBe("#c6dbef"); - expect(d3.select(chart.selectAll("g.row rect")[0][4]).attr("fill")).toBe("#e6550d"); + expect(d3.select(chart.selectAll('g.row rect')[0][0]).attr('fill')).toBe('#3182bd'); + expect(d3.select(chart.selectAll('g.row rect')[0][1]).attr('fill')).toBe('#6baed6'); + expect(d3.select(chart.selectAll('g.row rect')[0][2]).attr('fill')).toBe('#9ecae1'); + expect(d3.select(chart.selectAll('g.row rect')[0][3]).attr('fill')).toBe('#c6dbef'); + expect(d3.select(chart.selectAll('g.row rect')[0][4]).attr('fill')).toBe('#e6550d'); }); it('should create a row label from the data for each row', function () { - expect(chart.selectAll("svg text.row").size()).toBe(N); + expect(chart.selectAll('svg text.row').size()).toBe(N); chart.selectAll('svg g text.row').call(function (t) { expect(+t.text()).toBe(t.datum().key); }); }); - describe('row label vertical position', function() { + describe('row label vertical position', function () { var labels, rows; - beforeEach(function() { - labels = chart.selectAll("svg text.row"); - rows = chart.selectAll("g.row rect"); + beforeEach(function () { + labels = chart.selectAll('svg text.row'); + rows = chart.selectAll('g.row rect'); }); - function itShouldVerticallyCenterLabelWithinRow(i) { - it('should place label ' + i + ' within row ' + i, function() { + function itShouldVerticallyCenterLabelWithinRow (i) { + it('should place label ' + i + ' within row ' + i, function () { var rowpos = rows[0][i].getBoundingClientRect(), textpos = labels[0][i].getBoundingClientRect(); - expect((textpos.top+textpos.bottom)/2) - .toBeWithinDelta((rowpos.top+rowpos.bottom)/2, 2); + expect((textpos.top + textpos.bottom) / 2) + .toBeWithinDelta((rowpos.top + rowpos.bottom) / 2, 2); }); } - for(var i=0; i