From 013eba744d10556057dcc7aa17ab9dcd8443fcea Mon Sep 17 00:00:00 2001 From: Pete Richards Date: Fri, 29 Jun 2018 15:52:15 -0700 Subject: [PATCH] Basic sprintf support (#1965) Implement optional format strings for valueMetadata which allows developers to use c-style sprintf formatters as desired. Fixes #1562 --- example/generator/GeneratorMetadataProvider.js | 2 ++ karma.conf.js | 1 + openmct.js | 3 ++- package.json | 1 + src/api/telemetry/TelemetryValueFormatter.js | 14 ++++++++++++-- test-main.js | 3 ++- 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/example/generator/GeneratorMetadataProvider.js b/example/generator/GeneratorMetadataProvider.js index d8faf26088..1668d72d4c 100644 --- a/example/generator/GeneratorMetadataProvider.js +++ b/example/generator/GeneratorMetadataProvider.js @@ -30,6 +30,7 @@ define([ { key: "sin", name: "Sine", + formatString: '%0.2f', hints: { range: 1 } @@ -37,6 +38,7 @@ define([ { key: "cos", name: "Cosine", + formatString: '%0.2f', hints: { range: 2 } diff --git a/karma.conf.js b/karma.conf.js index 9003e86d26..085d3b3a00 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -37,6 +37,7 @@ module.exports = function(config) { {pattern: 'bower_components/**/*.js', included: false}, {pattern: 'node_modules/d3-*/**/*.js', included: false}, {pattern: 'node_modules/vue/**/*.js', included: false}, + {pattern: 'node_modules/printj/dist/*.js', included: false}, {pattern: 'src/**/*', included: false}, {pattern: 'node_modules/painterro/build/*.js', included: false}, {pattern: 'node_modules/html2canvas/dist/*', included: false}, diff --git a/openmct.js b/openmct.js index 118cc0c625..ae6da66a3c 100644 --- a/openmct.js +++ b/openmct.js @@ -50,7 +50,8 @@ requirejs.config({ "d3-time": "node_modules/d3-time/build/d3-time.min", "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min", "html2canvas": "node_modules/html2canvas/dist/html2canvas.min", - "painterro": "node_modules/painterro/build/painterro.min" + "painterro": "node_modules/painterro/build/painterro.min", + "printj": "node_modules/printj/dist/printj.min" }, "shim": { "angular": { diff --git a/package.json b/package.json index 47b3b5d693..6742214a47 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "mkdirp": "^0.5.1", "moment": "^2.11.1", "node-bourbon": "^4.2.3", + "printj": "^1.1.0", "requirejs": "2.1.x", "split": "^1.0.0", "v8-compile-cache": "^1.1.0" diff --git a/src/api/telemetry/TelemetryValueFormatter.js b/src/api/telemetry/TelemetryValueFormatter.js index 7834ea1618..57ed3d565b 100644 --- a/src/api/telemetry/TelemetryValueFormatter.js +++ b/src/api/telemetry/TelemetryValueFormatter.js @@ -21,9 +21,11 @@ *****************************************************************************/ define([ - 'lodash' + 'lodash', + 'printj' ], function ( - _ + _, + printj ) { // TODO: needs reference to formatService; @@ -71,6 +73,14 @@ define([ return Number(string); }.bind(this); } + // Check for formatString support once instead of per format call. + if (valueMetadata.formatString) { + var baseFormat = this.formatter.format; + var formatString = valueMetadata.formatString; + this.formatter.format = function (value) { + return printj.sprintf(formatString, baseFormat.call(this, value)); + }; + } } TelemetryValueFormatter.prototype.parse = function (datum) { diff --git a/test-main.js b/test-main.js index 1ea279f660..fe24a57a95 100644 --- a/test-main.js +++ b/test-main.js @@ -76,7 +76,8 @@ requirejs.config({ "d3-time": "node_modules/d3-time/build/d3-time.min", "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min", "html2canvas": "node_modules/html2canvas/dist/html2canvas.min", - "painterro": "node_modules/painterro/build/painterro.min" + "painterro": "node_modules/painterro/build/painterro.min", + "printj": "node_modules/printj/dist/printj.min" }, "shim": {