From a7227d14af4b77f3a810024b3980c79e1cab5e56 Mon Sep 17 00:00:00 2001 From: Hunter Trujillo Date: Mon, 16 Oct 2017 18:02:45 -0600 Subject: [PATCH 1/4] Add milliseconds granularity wtih changes from #777 with suggestions taken into account and mergeable with master. --- src/dygraph-tickers.js | 16 +++++++++++++++- src/dygraph-utils.js | 5 +++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/dygraph-tickers.js b/src/dygraph-tickers.js index f152bf996..6f7c70591 100644 --- a/src/dygraph-tickers.js +++ b/src/dygraph-tickers.js @@ -220,6 +220,13 @@ export var dateTicker = function(a, b, pixels, opts, dygraph, vals) { // Time granularity enumeration export var Granularity = { + MILLISECONDLY: 22, + TWO_MILLISECONDLY: 23, + FIVE_MILLISECONDLY: 24, + TEN_MILLISECONDLY: 25, + FIFTY_MILLISECONDLY: 26, + HUNDRED_MILLISECONDLY: 27, + FIVE_HUNDRED_MILLISECONDLY: 28, SECONDLY: 0, TWO_SECONDLY: 1, FIVE_SECONDLY: 2, @@ -242,7 +249,7 @@ export var Granularity = { ANNUAL: 19, DECADAL: 20, CENTENNIAL: 21, - NUM_GRANULARITIES: 22 + NUM_GRANULARITIES: 29 } // Date components enumeration (in the order of the arguments in Date) @@ -273,6 +280,13 @@ var DateField = { * @type {Array.<{datefield:number, step:number, spacing:number}>} */ var TICK_PLACEMENT = []; +TICK_PLACEMENT[Granularity.MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 1, spacing: 1}; +TICK_PLACEMENT[Granularity.TWO_MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 2, spacing: 2}; +TICK_PLACEMENT[Granularity.FIVE_MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 5, spacing: 5}; +TICK_PLACEMENT[Granularity.TEN_MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 10, spacing: 10}; +TICK_PLACEMENT[Granularity.FIFTY_MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 50, spacing: 50}; +TICK_PLACEMENT[Granularity.HUNDRED_MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 100, spacing: 100}; +TICK_PLACEMENT[Granularity.FIVE_HUNDRED_MILLISECONDLY] = {datefield: DateField.DATEFIELD_MS, step: 500, spacing: 500}; TICK_PLACEMENT[Granularity.SECONDLY] = {datefield: DateField.DATEFIELD_SS, step: 1, spacing: 1000 * 1}; TICK_PLACEMENT[Granularity.TWO_SECONDLY] = {datefield: DateField.DATEFIELD_SS, step: 2, spacing: 1000 * 2}; TICK_PLACEMENT[Granularity.FIVE_SECONDLY] = {datefield: DateField.DATEFIELD_SS, step: 5, spacing: 1000 * 5}; diff --git a/src/dygraph-utils.js b/src/dygraph-utils.js index dabd4ea97..ba68b7c23 100644 --- a/src/dygraph-utils.js +++ b/src/dygraph-utils.js @@ -1214,6 +1214,11 @@ export function dateAxisLabelFormatter(date, granularity, opts) { if (frac === 0 || granularity >= DygraphTickers.Granularity.DAILY) { // e.g. '21 Jan' (%d%b) return zeropad(day) + ' ' + SHORT_MONTH_NAMES_[month]; + } else if (granularity < DygraphTickers.Granularity.SECONDLY) { + var str = "" + millis; + return zeropad(secs) + "." + ('000'+str).substring(str.length); + } else if (granularity > DygraphTickers.Granularity.MINUTELY) { + return hmsString_(hours, mins, secs, 0); } else { return hmsString_(hours, mins, secs, millis); } From 37d8b0170762f5b1d9ac25684c1bee8a61eb8d3d Mon Sep 17 00:00:00 2001 From: Hunter Trujillo Date: Tue, 17 Oct 2017 13:19:05 -0600 Subject: [PATCH 2/4] Fix granularities according to original PR. --- src/dygraph-tickers.js | 58 +++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/dygraph-tickers.js b/src/dygraph-tickers.js index 6f7c70591..13cc74514 100644 --- a/src/dygraph-tickers.js +++ b/src/dygraph-tickers.js @@ -220,35 +220,35 @@ export var dateTicker = function(a, b, pixels, opts, dygraph, vals) { // Time granularity enumeration export var Granularity = { - MILLISECONDLY: 22, - TWO_MILLISECONDLY: 23, - FIVE_MILLISECONDLY: 24, - TEN_MILLISECONDLY: 25, - FIFTY_MILLISECONDLY: 26, - HUNDRED_MILLISECONDLY: 27, - FIVE_HUNDRED_MILLISECONDLY: 28, - SECONDLY: 0, - TWO_SECONDLY: 1, - FIVE_SECONDLY: 2, - TEN_SECONDLY: 3, - THIRTY_SECONDLY : 4, - MINUTELY: 5, - TWO_MINUTELY: 6, - FIVE_MINUTELY: 7, - TEN_MINUTELY: 8, - THIRTY_MINUTELY: 9, - HOURLY: 10, - TWO_HOURLY: 11, - SIX_HOURLY: 12, - DAILY: 13, - TWO_DAILY: 14, - WEEKLY: 15, - MONTHLY: 16, - QUARTERLY: 17, - BIANNUAL: 18, - ANNUAL: 19, - DECADAL: 20, - CENTENNIAL: 21, + MILLISECONDLY: 0, + TWO_MILLISECONDLY: 1, + FIVE_MILLISECONDLY: 2, + TEN_MILLISECONDLY: 3, + FIFTY_MILLISECONDLY: 4, + HUNDRED_MILLISECONDLY: 5, + FIVE_HUNDRED_MILLISECONDLY: 6, + SECONDLY: 7, + TWO_SECONDLY: 8, + FIVE_SECONDLY: 9, + TEN_SECONDLY: 10, + THIRTY_SECONDLY: 11, + MINUTELY: 12, + TWO_MINUTELY: 13, + FIVE_MINUTELY: 14, + TEN_MINUTELY: 15, + THIRTY_MINUTELY: 16, + HOURLY: 17, + TWO_HOURLY: 18, + SIX_HOURLY: 19, + DAILY: 20, + TWO_DAILY: 21, + WEEKLY: 22, + MONTHLY: 23, + QUARTERLY: 24, + BIANNUAL: 25, + ANNUAL: 26, + DECADAL: 27, + CENTENNIAL: 28, NUM_GRANULARITIES: 29 } From 3fc342f5450f57bd0adb5730ca6f7fc9c7f13b8d Mon Sep 17 00:00:00 2001 From: Luke Morris Date: Thu, 7 Dec 2017 12:43:59 -0800 Subject: [PATCH 3/4] Add assertions for millisecond granularities --- auto_tests/tests/date_ticker.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/auto_tests/tests/date_ticker.js b/auto_tests/tests/date_ticker.js index c02331dc7..fc18733ed 100644 --- a/auto_tests/tests/date_ticker.js +++ b/auto_tests/tests/date_ticker.js @@ -263,6 +263,19 @@ it('testAllDateTickers', function() { assert.deepEqual([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"},{"v":1307908170000,"label":"19:49:30"}], ticker(1307908000112, 1307908172259, 800, options)); assert.deepEqual([{"v":1307908020000,"label":"19:47"},{"v":1307908050000,"label":"19:47:30"},{"v":1307908080000,"label":"19:48"},{"v":1307908110000,"label":"19:48:30"},{"v":1307908140000,"label":"19:49"},{"v":1307908170000,"label":"19:49:30"}], ticker(1307908000112, 1307908173260, 800, options)); assert.deepEqual([{"v":978307200000,"label":"Jan 2001"},{"v":986083200000,"label":"Apr 2001"},{"v":993945600000,"label":"Jul 2001"},{"v":1001894400000,"label":"Oct 2001"}], ticker(978307200000, 1001894400000, 400, options)); + + assert.deepEqual([{"v":1307908000110,"label":"40.110"},{"v":1307908000111,"label":"40.111"},{"v":1307908000112,"label":"40.112"},{"v":1307908000113,"label":"40.113"}], ticker(1307908000110, 1307908000113, 200, options)); + assert.deepEqual([{"v":1307908000110,"label":"40.110"},{"v":1307908000112,"label":"40.112"},{"v":1307908000114,"label":"40.114"},{"v":1307908000116,"label":"40.116"}], ticker(1307908000110, 1307908000116, 200, options)); + assert.deepEqual([{"v":1307908000110,"label":"40.110"},{"v":1307908000115,"label":"40.115"},{"v":1307908000120,"label":"40.120"},{"v":1307908000125,"label":"40.125"}], ticker(1307908000110, 1307908000125, 200, options)); + assert.deepEqual([{"v":1307908000110,"label":"40.110"},{"v":1307908000120,"label":"40.120"},{"v":1307908000130,"label":"40.130"},{"v":1307908000140,"label":"40.140"}], ticker(1307908000110, 1307908000140, 200, options)); + + assert.deepEqual([{"v":1307908000100,"label":"40.100"},{"v":1307908000150,"label":"40.150"},{"v":1307908000200,"label":"40.200"},{"v":1307908000250,"label":"40.250"}], ticker(1307908000100, 1307908000250, 200, options)); + assert.deepEqual([{"v":1307908000100,"label":"40.100"},{"v":1307908000150,"label":"40.150"},{"v":1307908000200,"label":"40.200"},{"v":1307908000250,"label":"40.250"}], ticker(1307908000090, 1307908000260, 200, options)); + + assert.deepEqual([{"v":1307908000100,"label":"40.100"},{"v":1307908000200,"label":"40.200"},{"v":1307908000300,"label":"40.300"},{"v":1307908000400,"label":"40.400"}], ticker(1307908000100, 1307908000400, 200, options)); + assert.deepEqual([{"v":1307908000100,"label":"40.100"},{"v":1307908000200,"label":"40.200"},{"v":1307908000300,"label":"40.300"},{"v":1307908000400,"label":"40.400"}], ticker(1307908000100, 1307908000410, 200, options)); + + assert.deepEqual([{"v":1307908000000,"label":"40.000"},{"v":1307908000500,"label":"40.500"},{"v":1307908001000,"label":"41.000"},{"v":1307908001500,"label":"41.500"}], ticker(1307908000000, 1307908001500, 200, options)); }); }); From 5f712e82e0a5f1ff36baf708264360e44357f954 Mon Sep 17 00:00:00 2001 From: Luke Morris Date: Thu, 7 Dec 2017 13:01:25 -0800 Subject: [PATCH 4/4] Add an example for labels below SECONDLY granularity --- src/dygraph-utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dygraph-utils.js b/src/dygraph-utils.js index ba68b7c23..c0b8f34b6 100644 --- a/src/dygraph-utils.js +++ b/src/dygraph-utils.js @@ -1215,6 +1215,7 @@ export function dateAxisLabelFormatter(date, granularity, opts) { // e.g. '21 Jan' (%d%b) return zeropad(day) + ' ' + SHORT_MONTH_NAMES_[month]; } else if (granularity < DygraphTickers.Granularity.SECONDLY) { + // e.g. 40.310 (meaning 40 seconds and 310 milliseconds) var str = "" + millis; return zeropad(secs) + "." + ('000'+str).substring(str.length); } else if (granularity > DygraphTickers.Granularity.MINUTELY) {