Ejegg has submitted this change and it was merged.

Change subject: make gauge range selection more clear
......................................................................


make gauge range selection more clear

edit: there were issues with the arrangement of the slices so they were
incorrect. fixed that. need to flip the chart.

needs attention:
why knockout's textInput doesn't appear to work in
fraud-gauge.html, how to approach issue with Chartjs library update. WIP

Change-Id: I9079383ca715951a1bc3240f33210a22ac402316
---
M src/components/widgets/fraud-gauge/fraud-gauge.html
M src/components/widgets/fraud-gauge/fraud-gauge.js
M src/css/style.css
3 files changed, 114 insertions(+), 31 deletions(-)

Approvals:
  Ejegg: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/components/widgets/fraud-gauge/fraud-gauge.html 
b/src/components/widgets/fraud-gauge/fraud-gauge.html
index 514b80b..da0d34a 100644
--- a/src/components/widgets/fraud-gauge/fraud-gauge.html
+++ b/src/components/widgets/fraud-gauge/fraud-gauge.html
@@ -1,3 +1,4 @@
+
 <div class="panel panel-purple" id="fraudGaugeWidget">
     <div class="panel-heading">
         Fraud Rejections
@@ -43,14 +44,35 @@
                                         <div class="form-group">
                                             <label 
for="fraudPercentSlider">Fraud Percent Ranges</label>
                                             <p>set up the colors as they'll 
appear in the gauge.</p>
-                                            <div id="fraudPercentSlider"></div>
-                                            <table class="table sliderTable 
text-center">
-                                              <tr>
-                                                  <td data-bind="attr: { 
width: lowRange() + '%' }">0 - <span data-bind="text: lowRange"></span>%</td>
-                                                  <td data-bind="attr: { 
width: ( highRange() - lowRange() ) + '%' }"><span data-bind="text: 
lowRange"></span> - <span data-bind="text: highRange"></span>%</td>
-                                                  <td data-bind="attr: { 
width: ( 100 - highRange()) + '%' }"><span data-bind="text: highRange"></span> 
- 100%</td>
-                                              </tr>
-                                            </table>
+                                            <canvas id="fraudPercentSlider" 
width="200" height="120"></canvas>
+                                            <div class="row">
+                                                <div class="col-md-4 col-sm-4 
col-lg-4">
+                                                    <label>low fraud score: up 
to</label>
+                                                    <div class="input-group">
+                                                      <input type="text" 
class="form-control" data-bind="textInput: yellowRange().low">
+                                                      <span 
class="input-group-btn">
+                                                        <button class="btn 
btn-success percentBtn" type="button"><i class="fa fa-refresh"></i></button>
+                                                      </span>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-4 col-sm-4 
col-lg-4">
+                                                    <label>mid-level 
score:</label>
+                                                    <div class="input-group">
+                                                      <span 
class="input-group-btn">
+                                                        <button class="btn 
btn-warning percentBtn" type="button"><span data-bind="text:yellowRange().low + 
'% to ' + yellowRange().high + '%'"></button>
+                                                      </span>
+                                                    </div>
+                                                </div>
+                                                <div class="col-md-4 col-sm-4 
col-lg-4">
+                                                    <label>high fraud score: 
from</label>
+                                                    <div class="input-group">
+                                                    <input type="text" 
class="form-control" data-bind="textInput: yellowRange().high">
+                                                      <span 
class="input-group-btn">
+                                                        <button class="btn 
btn-danger percentBtn" type="button"><i class="fa fa-refresh"></i></button>
+                                                      </span>
+                                                    </div>
+                                                </div>
+                                            </div>
                                         </div>
 
                                         <!--Call Date Pickers Component to 
handle date range-->
diff --git a/src/components/widgets/fraud-gauge/fraud-gauge.js 
b/src/components/widgets/fraud-gauge/fraud-gauge.js
index 78b840a..39ba617 100644
--- a/src/components/widgets/fraud-gauge/fraud-gauge.js
+++ b/src/components/widgets/fraud-gauge/fraud-gauge.js
@@ -2,12 +2,10 @@
     'knockout',
     'text!components/widgets/fraud-gauge/fraud-gauge.html',
     'gauge',
-    'noUISlider',
     'c3',
-    'selectize',
-    'bootstrap-datepicker'
+    'chartjs'
     ],
-function( ko, template, datePickersTemplate, noUISlider, c3 ){
+function( ko, template, datePickersTemplate, c3, chartjs ){
 
   function FraudGaugeViewModel( params ){
 
@@ -40,23 +38,71 @@
     });
 
     //default range slider settings
-    self.lowRange = ko.observable(33);
-    self.highRange = ko.observable(66);
-    $('#fraudPercentSlider').noUiSlider({
-      start: [ self.lowRange(), self.highRange() ],
-      range: {
-        'min': [0],
-        'max': [100]
-      },
-      step: 1,
-      connect: true
-    });
-    $('#fraudPercentSlider').on({
-      slide: function(){
-        var sliderValArray = $('#fraudPercentSlider').val();
-        self.lowRange(parseInt(sliderValArray[0]));
-        self.highRange(parseInt(sliderValArray[1]));
-      },
+    self.greenRange = ko.observable({ low: 0, high: 17 });
+    self.yellowRange = ko.observable({ low: 17, high: 68 });
+    self.redRange = ko.observable({ low: 68, high: 100 });
+
+    //color selection inside modal
+    var canvas = $('#fraudPercentSlider')[0];
+    var ctx = canvas.getContext('2d');
+
+    var placeholder = document.createElement('canvas');
+    placeholder.width = 200;
+    placeholder.height = placeholder.width;
+    var placeholderctx = placeholder.getContext('2d');
+
+    var ddata = [{
+        value: 90,
+        color: '#000000'
+    },{
+        value: 1.8 * (self.greenRange().high - self.greenRange().low),
+        color: '#4cae4c'
+    },{
+        value: 1.8 * (self.yellowRange().high - self.yellowRange().low),
+        color: '#eea236'
+    }, {
+        value: 1.8 * (self.redRange().high - self.redRange().low),
+        color: '#c9302c'
+    },{
+        value: 90,
+        color: '#000000'
+    }, ];
+
+    new Chart(placeholderctx).Doughnut(ddata, {
+        animation: false,
+        segmentShowStroke: false,
+        onAnimationComplete: function() {
+          function drawLine(color,left,top,bottom){
+            placeholderctx.strokeStyle = color;
+            placeholderctx.lineWidth = 1;
+
+            placeholderctx.beginPath();
+
+            placeholderctx.moveTo(left, top);
+            placeholderctx.lineTo(left,bottom);
+
+            placeholderctx.stroke();
+            placeholderctx.closePath();
+          }
+
+          var center = Math.round($(placeholder).width() / 2);
+          var offset1 = center / 40;
+          var offset2 = center / 80;
+
+          var cropHeight = Math.round(placeholder.height/2);
+          ctx.clearRect(0,0,canvas.width,canvas.height);
+          ctx.drawImage(
+            placeholder,
+            0,
+            0,
+            placeholder.width,
+            cropHeight,
+            0,
+            0,
+            placeholder.width,
+            cropHeight
+          );
+        }
     });
 
     self.validateSubmission = function( times, filters ){
@@ -213,7 +259,7 @@
               }
           });
         });
-      };
+      }
 
 
     };
diff --git a/src/css/style.css b/src/css/style.css
index 86d896a..9a0e228 100644
--- a/src/css/style.css
+++ b/src/css/style.css
@@ -207,7 +207,8 @@
 }
 
 #fraudPercentSlider {
-    margin: 10px 0;
+    margin: 0 auto;
+    display: inherit;
 }
 
 #queryButton {
@@ -263,6 +264,14 @@
 
 #unspecifiedFraudGauge.row{
     margin: 10px;
+}
+
+.btn.percentBtn {
+    padding: .44em;
+}
+
+.btn.btn-warning.percentBtn {
+    width: 100%;
 }
 
 /* BOOTSTRAP OVERRIDES */
@@ -341,6 +350,12 @@
     width: 100px;
 }
 
+.sliderTable {
+    width: 50%;
+    margin-top: -30px;
+    font-weight: bold;
+}
+
 .sliderTable > tbody > tr > td {
     border-top: none;
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I9079383ca715951a1bc3240f33210a22ac402316
Gerrit-PatchSet: 5
Gerrit-Project: wikimedia/fundraising/dash
Gerrit-Branch: master
Gerrit-Owner: Ssmith <ssm...@wikimedia.org>
Gerrit-Reviewer: Awight <awi...@wikimedia.org>
Gerrit-Reviewer: Ejegg <eeggles...@wikimedia.org>
Gerrit-Reviewer: Ssmith <ssm...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to