Nuria has submitted this change and it was merged.

Change subject: Make number format configurable
......................................................................


Make number format configurable

Right now, this only makes sense for the timeseries graphs, since the
other ones transform the numbers and are formatting on their own.

Bug: T131965
Change-Id: I9059496a50df5f68235ce273cf9d07d8af7f5848
---
M src/app/utils/numbers.js
M src/components/a-b-compare/compare-timeseries.html
M src/components/compare-layout/compare-layout.html
M src/components/compare-layout/compare-layout.js
M src/components/visualizers/dygraphs-timeseries/bindings.js
M src/components/visualizers/dygraphs-timeseries/dygraphs-timeseries.html
M src/components/visualizers/filter-timeseries/filter-timeseries.html
M src/components/visualizers/filter-timeseries/filter-timeseries.js
M src/components/visualizers/sunburst/bindings.js
M src/components/visualizers/table-timeseries/table-timeseries.html
M src/components/visualizers/table-timeseries/table-timeseries.js
M src/components/visualizers/visualizer/visualizer.js
M src/components/visualizers/wikimetrics/wikimetrics.html
M src/components/visualizers/wikimetrics/wikimetrics.js
14 files changed, 56 insertions(+), 18 deletions(-)

Approvals:
  Nuria: Verified; Looks good to me, approved



diff --git a/src/app/utils/numbers.js b/src/app/utils/numbers.js
index 3ca6ba0..17fd871 100644
--- a/src/app/utils/numbers.js
+++ b/src/app/utils/numbers.js
@@ -11,12 +11,19 @@
         numberFormatter: function (numeralFormatter) {
             var niceNames = {
                 'percent': '0.0%',
+                // thousands / millions / billions formatter
                 'kmb': '0.0a',
             };
 
             numeralFormatter = niceNames[numeralFormatter] || numeralFormatter;
 
             return function (n) {
+                if (typeof n === 'string') {
+                    return n;
+                }
+                if(!numeralFormatter) {
+                    numeralFormatter = n <= 1 ? '0.0%' : '0.0a';
+                }
                 return numeral(n).format(numeralFormatter);
             };
         },
diff --git a/src/components/a-b-compare/compare-timeseries.html 
b/src/components/a-b-compare/compare-timeseries.html
index 26b5b6b..9947d0b 100644
--- a/src/components/a-b-compare/compare-timeseries.html
+++ b/src/components/a-b-compare/compare-timeseries.html
@@ -1 +1,6 @@
-<filter-timeseries params="data: data, colors: colors, annotations: 
annotations"></filter-timeseries>
+<filter-timeseries params="
+    data: data,
+    colors: colors,
+    annotations: annotations,
+    format: format
+"></filter-timeseries>
diff --git a/src/components/compare-layout/compare-layout.html 
b/src/components/compare-layout/compare-layout.html
index c802d3f..3026366 100644
--- a/src/components/compare-layout/compare-layout.html
+++ b/src/components/compare-layout/compare-layout.html
@@ -21,7 +21,13 @@
             <span class="ui small label" data-bind="text: 
$parent.timespan"></span>
         </div>
         <div class="ui attached raised segment">
-            <a-b-compare params="type: type, data: data, colors: $data.colors, 
annotations: $data.annotations"/>
+            <a-b-compare params="
+                type: type,
+                data: data,
+                colors: $data.colors,
+                annotations: $data.annotations,
+                format: format
+            "/>
         </div>
         <!-- /ko -->
     </comparisons>
diff --git a/src/components/compare-layout/compare-layout.js 
b/src/components/compare-layout/compare-layout.js
index a1d6353..fbf2fb2 100644
--- a/src/components/compare-layout/compare-layout.js
+++ b/src/components/compare-layout/compare-layout.js
@@ -12,6 +12,7 @@
         moment = require('moment'),
         dateUtils = require('utils.datetime'),
         colorUtils = require('utils.colors'),
+        numberUtils = require('utils.numbers'),
         asyncObs = require('observables.async'),
         TimeseriesData = require('converters.timeseries');
 
@@ -194,6 +195,8 @@
                     }
                     c.colors = colorScale;
 
+                    c.format = numberUtils.numberFormatter(c.format || 
'percent');
+
                     return c;
                 }, this));
 
diff --git a/src/components/visualizers/dygraphs-timeseries/bindings.js 
b/src/components/visualizers/dygraphs-timeseries/bindings.js
index 18dff84..963d794 100644
--- a/src/components/visualizers/dygraphs-timeseries/bindings.js
+++ b/src/components/visualizers/dygraphs-timeseries/bindings.js
@@ -39,14 +39,10 @@
                                 axisLabelWidth: 77,
                             },
                             y: {
-                                valueFormatter: function(d) {
-                                    return numeral(d).format(d < 1 ? '0.00' : 
'0.0a');
-                                },
+                                valueFormatter: val.format,
                             },
                         },
                         labels: ['Date'],
-                        labelsKMB: true,
-                        // labelsDivStyles: defined as CSS in 
dygraphs-timeseries.html
                         strokeWidth: 1.8,
                         gridLineColor: '#cacaca',
                         gridLinePattern: [10, 5],
diff --git 
a/src/components/visualizers/dygraphs-timeseries/dygraphs-timeseries.html 
b/src/components/visualizers/dygraphs-timeseries/dygraphs-timeseries.html
index 27db935..93e7dd2 100644
--- a/src/components/visualizers/dygraphs-timeseries/dygraphs-timeseries.html
+++ b/src/components/visualizers/dygraphs-timeseries/dygraphs-timeseries.html
@@ -33,5 +33,6 @@
         data: data,
         annotations: $data.annotations,
         colors: colors,
+        format: format,
     }">
 </div>
diff --git 
a/src/components/visualizers/filter-timeseries/filter-timeseries.html 
b/src/components/visualizers/filter-timeseries/filter-timeseries.html
index 4686ca3..a5b4f63 100644
--- a/src/components/visualizers/filter-timeseries/filter-timeseries.html
+++ b/src/components/visualizers/filter-timeseries/filter-timeseries.html
@@ -16,4 +16,10 @@
     </div>
 </div>
 
-<dygraphs-timeseries params="height: 500, data: filteredData, colors: colors, 
annotations: annotations" />
+<dygraphs-timeseries params="
+    height: 500,
+    data: filteredData,
+    colors: colors,
+    annotations: annotations,
+    format: format
+"/>
diff --git a/src/components/visualizers/filter-timeseries/filter-timeseries.js 
b/src/components/visualizers/filter-timeseries/filter-timeseries.js
index c78353a..33053ab 100644
--- a/src/components/visualizers/filter-timeseries/filter-timeseries.js
+++ b/src/components/visualizers/filter-timeseries/filter-timeseries.js
@@ -63,6 +63,7 @@
 
         this.colors = params.colors;
         this.annotations = params.annotations;
+        this.format = params.format;
     }
 
     return {
diff --git a/src/components/visualizers/sunburst/bindings.js 
b/src/components/visualizers/sunburst/bindings.js
index 9fd4428..2a45bfc 100644
--- a/src/components/visualizers/sunburst/bindings.js
+++ b/src/components/visualizers/sunburst/bindings.js
@@ -1,9 +1,16 @@
+'use strict';
 define(function (require) {
 
     var d3 = require('d3'),
-        ko = require('knockout');
+        ko = require('knockout'),
+        numberUtils = require('utils.numbers');
 
     require('lib.polyfills');
+
+        // thousands / millions / billions formatter
+    var kmb = numberUtils.numberFormatter('kmb'),
+        // percent formatter
+        pct = numberUtils.numberFormatter('0.0%');
 
     // Given a node in a partition layout, return an array of all of its 
ancestor
     // nodes, highest first, but excluding the root.
@@ -19,8 +26,8 @@
 
     function hoverPath (d) {
 
-        var percentage = (100 * d.value / this.totalSize).toPrecision(3);
-        var percentageString = percentage + '%';
+        var percentage = d.value / this.totalSize;
+        var percentageString = pct(percentage);
         if (percentage < 0.1) {
             percentageString = '< 0.1%';
         }
@@ -28,15 +35,15 @@
         var sequenceArray = getAncestors(d);
         this.bindingContext.steps(sequenceArray);
         this.bindingContext.percentage(percentageString);
-        this.bindingContext.ratio('(' + d.value + ' out of ' + this.totalSize 
+ ')');
+        this.bindingContext.ratio('(' + kmb(d.value) + ' out of ' + 
kmb(this.totalSize) + ')');
 
         // Highlight only those that are an ancestor of the current segment.
         // The transition is necessary because it allows d3 to resolve the 
hoverOut
         //   transition properly.  Without it, race conditions would create an
         //   inconsistent state
         this.container.selectAll('path').transition().duration(50)
-            .style('opacity', function (d) {
-                return sequenceArray.indexOf(d) >= 0 ? 1 : 0.2;
+            .style('opacity', function (d1) {
+                return sequenceArray.indexOf(d1) >= 0 ? 1 : 0.2;
             });
     }
 
@@ -63,7 +70,7 @@
                     .attr('width', width)
                     .attr('height', height)
                     .append('g')
-                        .attr('transform', 'translate(' + width/2 + ',' + 
height/2 + ')'),
+                        .attr('transform', 'translate(' + width / 2 + ',' + 
height / 2 + ')'),
 
                 partition = d3.layout.partition()
                     .size([2 * Math.PI, radius * radius])
diff --git a/src/components/visualizers/table-timeseries/table-timeseries.html 
b/src/components/visualizers/table-timeseries/table-timeseries.html
index 28666b4..24c47f9 100644
--- a/src/components/visualizers/table-timeseries/table-timeseries.html
+++ b/src/components/visualizers/table-timeseries/table-timeseries.html
@@ -13,11 +13,11 @@
                 <!-- /ko -->
             </tr>
         </thead>
-        <tbody>
+        <tbody class="right aligned">
             <!-- ko foreach: rows -->
             <tr>
                 <!-- ko foreach: $data -->
-                <td data-bind="text: $data"></td>
+                <td data-bind="text: $parents[1].format($data)"></td>
                 <!-- /ko -->
             </tr>
             <!-- /ko -->
diff --git a/src/components/visualizers/table-timeseries/table-timeseries.js 
b/src/components/visualizers/table-timeseries/table-timeseries.js
index 037472d..cb741ef 100644
--- a/src/components/visualizers/table-timeseries/table-timeseries.js
+++ b/src/components/visualizers/table-timeseries/table-timeseries.js
@@ -23,6 +23,7 @@
             return ko.unwrap(this.data).header;
         }, this);
         this.colors = params.colors;
+        this.format = params.format;
         this.containerHeight = params.height + 'px';
     }
 
diff --git a/src/components/visualizers/visualizer/visualizer.js 
b/src/components/visualizers/visualizer/visualizer.js
index ec0e348..fb59095 100644
--- a/src/components/visualizers/visualizer/visualizer.js
+++ b/src/components/visualizers/visualizer/visualizer.js
@@ -6,6 +6,7 @@
         _ = require('lodash'),
         apiFinder = require('api-finder'),
         colorUtils = require('utils.colors'),
+        numberUtils = require('utils.numbers'),
         TimeseriesData = require('converters.timeseries');
 
     require('datepicker-binding');
@@ -99,6 +100,7 @@
         this.params = {
             data: this.filteredData,
             colors: colorScale,
+            format: numberUtils.numberFormatter(graph.format),
             height: 500,
             id: _.kebabCase([graph.metric, graph.submetric].join('-')),
         };
diff --git a/src/components/visualizers/wikimetrics/wikimetrics.html 
b/src/components/visualizers/wikimetrics/wikimetrics.html
index 7f62d92..b8d6e99 100644
--- a/src/components/visualizers/wikimetrics/wikimetrics.html
+++ b/src/components/visualizers/wikimetrics/wikimetrics.html
@@ -11,6 +11,7 @@
     data: mergedData,
     colors: colorScale,
     annotations: annotations,
+    format: format,
 "></dygraphs-timeseries>
 
 <!-- /ko -->
diff --git a/src/components/visualizers/wikimetrics/wikimetrics.js 
b/src/components/visualizers/wikimetrics/wikimetrics.js
index ec47866..6c76776 100644
--- a/src/components/visualizers/wikimetrics/wikimetrics.js
+++ b/src/components/visualizers/wikimetrics/wikimetrics.js
@@ -18,7 +18,8 @@
         TimeseriesData = require('converters.timeseries'),
         templateMarkup = require('text!./wikimetrics.html'),
         annotationsApi = require('apis.annotations'),
-        apiFinder = require('app/apis/api-finder');
+        apiFinder = require('app/apis/api-finder'),
+        numberUtils = require('utils.numbers');
 
     function WikimetricsVisualizer(params) {
         var visualizer = this;
@@ -77,6 +78,7 @@
             }
             return visualizer.colors[i % visualizer.colors.length];
         };
+        this.format = numberUtils.numberFormatter('kmb');
 
         this.applyColors = function (projects) {
             projects.forEach(function (project) {

-- 
To view, visit https://gerrit.wikimedia.org/r/282200
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I9059496a50df5f68235ce273cf9d07d8af7f5848
Gerrit-PatchSet: 3
Gerrit-Project: analytics/dashiki
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>
Gerrit-Reviewer: Mforns <[email protected]>
Gerrit-Reviewer: Nuria <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to