]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6331 update the style of the overview page
authorStas Vilchik <vilchiks@gmail.com>
Wed, 1 Apr 2015 11:22:06 +0000 (13:22 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Wed, 1 Apr 2015 12:50:44 +0000 (14:50 +0200)
17 files changed:
server/sonar-web/src/main/hbs/overview/overview-coverage.hbs
server/sonar-web/src/main/hbs/overview/overview-debt.hbs [deleted file]
server/sonar-web/src/main/hbs/overview/overview-duplications.hbs
server/sonar-web/src/main/hbs/overview/overview-issues.hbs
server/sonar-web/src/main/hbs/overview/overview-layout.hbs
server/sonar-web/src/main/hbs/overview/overview-size.hbs
server/sonar-web/src/main/js/graphics/sparkline.js
server/sonar-web/src/main/js/overview/app.js
server/sonar-web/src/main/js/overview/layout.js
server/sonar-web/src/main/js/overview/models/state.js
server/sonar-web/src/main/js/overview/views/coverage-view.js
server/sonar-web/src/main/js/overview/views/debt-view.js [deleted file]
server/sonar-web/src/main/js/overview/views/duplications-view.js
server/sonar-web/src/main/js/overview/views/issues-view.js
server/sonar-web/src/main/js/overview/views/size-view.js
server/sonar-web/src/main/less/pages/overview.less
server/sonar-web/src/test/js/overview.js

index a46eb394a9470d0ef51c791c0ca103c2c0e7726e..bdca7c4d95b39f69cfeadd92d389b05e9cfced30 100644 (file)
@@ -1,68 +1,26 @@
-<h6 class="note">{{t 'overview.coverage'}}</h6>
+<div class="overview-highlight">
+  <h6 class="note">{{t 'overview.coverage'}}</h6>
+  <div class="overview-main-measure">
+    {{#notNull coverage}}
+      <a href="{{urlForDrilldown componentKey 'overall_coverage'}}">{{formatMeasure coverage 'PERCENT'}}</a>
+    {{else}}
+      –
+    {{/notNull}}
+  </div>
+  {{#notNull coverage3}}
+    <div class="spacer-top">
+      <span class="overview-measure {{#gt coverage3 0}}text-success{{/gt}}{{#lt coverage3 0}}text-danger{{/lt}}">{{formatMeasureVariation coverage3 'PERCENT'}}</span>
+      <span class="note">{{period3Name}}</span>
+    </div>
+  {{/notNull}}
+  {{#notNull newCoverage3}}
+    <div class="spacer-top">
+      <a class="overview-measure spacer-top" href="{{urlForDrilldown componentKey 'new_overall_coverage' 3}}">{{formatMeasure newCoverage3 'PERCENT'}}</a>
+      <span class="note">on new code</span>
+    </div>
+  {{/notNull}}
+</div>
 
-<table class="width100">
-  <tr>
-    <td class="width-55">
-      <div class="overview-main-measure">
-        <a href="{{urlForDrilldown componentKey 'overall_coverage'}}">{{formatMeasure coverage 'PERCENT'}}</a>
-      </div>
-      <div class="overview-trend">
-        <div id="overview-coverage-trend" data-width="100" data-height="30" data-color="#4b9fd5"></div>
-      </div>
-    </td>
-    <td class="width-15">
-      {{#notNull coverage1}}
-        <a class="overview-measure" href="{{urlForDrilldown componentKey 'overall_coverage' 1}}">
-          {{formatMeasureVariation coverage1 'PERCENT'}}
-        </a>
-        <p class="note">{{period1Name}}</p>
-      {{/notNull}}
-    </td>
-    <td class="width-15">
-      {{#notNull coverage2}}
-        <a class="overview-measure" href="{{urlForDrilldown componentKey 'overall_coverage' 2}}">
-          {{formatMeasureVariation coverage2 'PERCENT'}}
-        </a>
-        <p class="note">{{period2Name}}</p>
-      {{/notNull}}
-    </td>
-    <td class="width-15">
-      {{#notNull coverage3}}
-        <a class="overview-measure" href="{{urlForDrilldown componentKey 'overall_coverage' 3}}">
-          {{formatMeasureVariation coverage3 'PERCENT'}}
-        </a>
-        <p class="note">{{period3Name}}</p>
-      {{/notNull}}
-    </td>
-  </tr>
-  <tr>
-    <td class="width-55"></td>
-    <td class="width-15">
-      {{#notNull newCoverage1}}
-        <div class="spacer-top"></div>
-        <a class="overview-measure" href="{{urlForDrilldown componentKey 'new_overall_coverage' 1}}">
-          {{formatMeasure newCoverage1 'PERCENT'}}
-        </a>
-        <p class="note">on new code</p>
-      {{/notNull}}
-    </td>
-    <td class="width-15">
-      {{#notNull newCoverage2}}
-        <div class="spacer-top"></div>
-        <a class="overview-measure spacer-top" href="{{urlForDrilldown componentKey 'new_overall_coverage' 2}}">
-          {{formatMeasure newCoverage2 'PERCENT'}}
-        </a>
-        <p class="note">on new code</p>
-      {{/notNull}}
-    </td>
-    <td class="width-15">
-      {{#notNull newCoverage3}}
-        <div class="spacer-top"></div>
-        <a class="overview-measure spacer-top" href="{{urlForDrilldown componentKey 'new_overall_coverage' 3}}">
-          {{formatMeasure newCoverage3 'PERCENT'}}
-        </a>
-        <p class="note">on new code</p>
-      {{/notNull}}
-    </td>
-  </tr>
-</table>
+<div class="overview-trend">
+  <div class="overview-sparkline" id="overview-coverage-trend" data-width="300" data-height="50" data-color="#f3ca8e" data-type="PERCENT"></div>
+</div>
diff --git a/server/sonar-web/src/main/hbs/overview/overview-debt.hbs b/server/sonar-web/src/main/hbs/overview/overview-debt.hbs
deleted file mode 100644 (file)
index 132f040..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<h6 class="note">{{t 'overview.debt'}}</h6>
-
-<table class="width100">
-  <tr>
-    <td class="width-55">
-      <div class="overview-main-measure">
-        {{#notNull sqaleRating}}
-          <a href="{{urlForDrilldown componentKey 'sqale_rating'}}"><span class="rating rating-{{formatMeasure sqaleRating 'RATING'}}">{{formatMeasure sqaleRating 'RATING'}}</span></a>
-        {{/notNull}}
-        <a href="{{urlForDrilldown componentKey 'sqale_index'}}">{{formatMeasure debt 'WORK_DUR'}}</a>
-      </div>
-      <div class="overview-trend">
-        <div id="overview-debt-trend" data-width="100" data-height="30" data-color="#4b9fd5"></div>
-      </div>
-    </td>
-    <td class="width-15">
-      <a href="{{urlForDrilldown componentKey 'sqale_index' 1}}"
-         class="overview-measure {{#gt deb1 0}}text-danger{{/gt}}{{#lt debt1 0}}text-success{{/lt}}">
-        {{formatMeasureVariation debt1 'WORK_DUR'}}
-      </a>
-      <p class="note">{{period1Name}}</p>
-    </td>
-    <td class="width-15">
-      <a href="{{urlForDrilldown componentKey 'sqale_index' 2}}"
-         class="overview-measure {{#gt debt2 0}}text-danger{{/gt}}{{#lt debt2 0}}text-success{{/lt}}">
-        {{formatMeasureVariation debt2 'WORK_DUR'}}
-      </a>
-      <p class="note">{{period2Name}}</p>
-    </td>
-    <td class="width-15">
-      <a href="{{urlForDrilldown componentKey 'sqale_index' 3}}"
-         class="overview-measure {{#gt debt3 0}}text-danger{{/gt}}{{#lt debt3 0}}text-success{{/lt}}">
-        {{formatMeasureVariation debt3 'WORK_DUR'}}
-      </a>
-      <p class="note">{{period3Name}}</p>
-    </td>
-  </tr>
-</table>
index 2f670d35cc4a9e10276fcacada91d981ca71ff73..68b7ecf174821db0907a8ce8bce628564a0ba508 100644 (file)
@@ -1,34 +1,19 @@
-<h6 class="note">{{t 'overview.duplications'}}</h6>
+<div class="overview-highlight">
+  <h6 class="note">{{t 'overview.duplications'}}</h6>
+  <div class="overview-main-measure">
+    <a href="{{urlForDrilldown componentKey 'duplicated_lines_density'}}">
+      {{formatMeasure duplications 'PERCENT'}}
+    </a>
+  </div>
+  {{#notNull duplications3}}
+    <div class="spacer-top">
+      <a class="overview-measure {{#gt duplications3 0}}text-danger{{/gt}}{{#lt duplications3 0}}text-success{{/lt}}"
+         href="{{urlForDrilldown componentKey 'duplicated_lines_density' 3}}">{{formatMeasureVariation duplications3 'PERCENT'}}</a>
+      <span class="note">{{period3Name}}</span>
+    </div>
+  {{/notNull}}
+</div>
 
-<table class="width100">
-  <tr>
-    <td class="width-55">
-      <div class="overview-main-measure">
-        <a href="{{urlForDrilldown componentKey 'duplicated_lines_density'}}">
-          {{formatMeasure duplications 'PERCENT'}}
-        </a>
-      </div>
-      <div class="overview-trend">
-        <div id="overview-duplications-trend" data-width="100" data-height="30" data-color="#4b9fd5"></div>
-      </div>
-    </td>
-    <td class="width-15">
-      <a class="overview-measure" href="{{urlForDrilldown componentKey 'duplicated_lines_density' 1}}">
-        {{formatMeasureVariation duplications1 'PERCENT'}}
-      </a>
-      <p class="note">{{period1Name}}</p>
-    </td>
-    <td class="width-15">
-      <a class="overview-measure" href="{{urlForDrilldown componentKey 'duplicated_lines_density' 2}}">
-        {{formatMeasureVariation duplications2 'PERCENT'}}
-      </a>
-      <p class="note">{{period2Name}}</p>
-    </td>
-    <td class="width-15">
-      <a class="overview-measure" href="{{urlForDrilldown componentKey 'duplicated_lines_density' 3}}">
-        {{formatMeasureVariation duplications3 'PERCENT'}}
-      </a>
-      <p class="note">{{period3Name}}</p>
-    </td>
-  </tr>
-</table>
+<div class="overview-trend">
+  <div class="overview-sparkline" id="overview-duplications-trend" data-width="300" data-height="50" data-color="#f3ca8e" data-type="PERCENT"></div>
+</div>
index 5a7ba8090c3e22187c50c7af9c33a854b3ff144e..ddc1ebdc3508432530cbab153e7e709822f37335 100644 (file)
@@ -1,44 +1,24 @@
-<h6 class="note">{{t 'overview.issues'}}</h6>
+<div class="overview-highlight">
+  <h6 class="note">{{t 'overview.issues'}}</h6>
+  <div class="overview-main-measure">
+    <a href="{{urlForIssuesOverview componentKey}}">{{formatMeasure issues 'INT'}}</a>
+  </div>
+  <div class="spacer-top">
+    {{#notNull sqaleRating}}
+      <a class="overview-measure" href="{{urlForDrilldown componentKey 'sqale_rating'}}"><span class="rating rating-{{formatMeasure sqaleRating 'RATING'}}">{{formatMeasure sqaleRating 'RATING'}}</span></a>
+    {{/notNull}}
+    &nbsp;&nbsp;
+    <a class="overview-measure" href="{{urlForDrilldown componentKey 'sqale_index'}}">{{formatMeasure debt 'WORK_DUR'}}</a>
+  </div>
+  {{#notNull issues3}}
+    <div class="spacer-top">
+      <a href="{{urlForIssuesOverview componentKey period3Date}}"
+         class="overview-measure {{#gt issues3 0}}text-danger{{else}}text-success{{/gt}}">{{formatMeasureVariation issues3 'INT'}}</a>
+      <span class="note">new {{period3Name}}</span>
+    </div>
+  {{/notNull}}
+</div>
 
-<table class="width100">
-  <tr>
-    <td class="width-55">
-      <div class="overview-main-measure">
-        <a href="{{urlForIssuesOverview componentKey}}">{{formatMeasure issues 'INT'}}</a>
-      </div>
-      <div class="overview-trend">
-        <div id="overview-issues-trend" data-width="100" data-height="30" data-color="#4b9fd5"></div>
-      </div>
-    </td>
-    <td class="width-15">
-      {{#notNull issues1}}
-        <a href="{{urlForIssuesOverview componentKey period1Date}}"
-           class="overview-measure {{#gt issues1 0}}text-danger{{else}}text-success{{/gt}}">
-          {{formatMeasureVariation issues1 'INT'}}
-        </a>
-        <span class="note">new</span>
-        <p class="note">{{period1Name}}</p>
-      {{/notNull}}
-    </td>
-    <td class="width-15">
-      {{#notNull issues2}}
-        <a href="{{urlForIssuesOverview componentKey period2Date}}"
-           class="overview-measure {{#gt issues2 0}}text-danger{{else}}text-success{{/gt}}">
-          {{formatMeasureVariation issues2 'INT'}}
-        </a>
-        <span class="note">new</span>
-        <p class="note">{{period2Name}}</p>
-      {{/notNull}}
-    </td>
-    <td class="width-15">
-      {{#notNull issues3}}
-        <a href="{{urlForIssuesOverview componentKey period3Date}}"
-           class="overview-measure {{#gt issues3 0}}text-danger{{else}}text-success{{/gt}}">
-          {{formatMeasureVariation issues3 'INT'}}
-        </a>
-        <span class="note">new</span>
-        <p class="note">{{period3Name}}</p>
-      {{/notNull}}
-    </td>
-  </tr>
-</table>
+<div class="overview-trend">
+  <div class="overview-sparkline" id="overview-issues-trend" data-width="300" data-height="50" data-color="#f3ca8e" data-type="INT"></div>
+</div>
index 46bf13084f5f677b3a6d0039470b157890e801bb..8ce2a7d4e4f40b9ba53fc8f8e3ab04f9bdd61044 100644 (file)
@@ -1,6 +1,18 @@
-<div class="overview-card" id="overview-gate"></div>
-<div class="overview-card" id="overview-size"></div>
-<div class="overview-card" id="overview-issues"></div>
-<div class="overview-card" id="overview-debt"></div>
-<div class="overview-card" id="overview-coverage"></div>
-<div class="overview-card" id="overview-duplications"></div>
+<div class="overview-card overview-gate" id="overview-gate"></div>
+
+<div class="overview-container columns">
+  <div class="column-half">
+    <div class="overview-card" id="overview-size"></div>
+  </div>
+  <div class="column-half">
+    <div class="overview-card" id="overview-issues"></div>
+  </div>
+</div>
+<div class="overview-container columns">
+  <div class="column-half">
+    <div class="overview-card" id="overview-coverage"></div>
+  </div>
+  <div class="column-half">
+    <div class="overview-card" id="overview-duplications"></div>
+  </div>
+</div>
index f3e18a8ef6f70aa9966b44cba81448d5c2d114c4..b06b14ed706fe1857414a3e10f5127189e7c098b 100644 (file)
@@ -1,28 +1,16 @@
-<h6 class="note">{{t 'overview.lines_of_code'}}</h6>
-
-<table class="width100">
-  <tr>
-    <td class="width-55">
-      <div>
-        <div class="overview-main-measure">
-          <a href="{{urlForDrilldown componentKey 'ncloc'}}">{{formatMeasure ncloc 'INT'}}</a>
-        </div>
-        <div class="overview-trend">
-          <div id="overview-size-trend" data-width="100" data-height="30" data-color="#4b9fd5"></div>
-        </div>
-      </div>
-    </td>
-    <td class="width-15">
-      <span class="overview-measure">{{formatMeasureVariation ncloc1 'INT'}}</span>
-      <p class="note">{{period1Name}}</p>
-    </td>
-    <td class="width-15">
-      <span class="overview-measure">{{formatMeasureVariation ncloc2 'INT'}}</span>
-      <p class="note">{{period2Name}}</p>
-    </td>
-    <td class="width-15">
+<div class="overview-highlight">
+  <h6 class="note">{{t 'overview.lines_of_code'}}</h6>
+  <div class="overview-main-measure">
+    <a href="{{urlForDrilldown componentKey 'ncloc'}}">{{formatMeasure ncloc 'INT'}}</a>
+  </div>
+  {{#notNull ncloc3}}
+    <div class="spacer-top">
       <span class="overview-measure">{{formatMeasureVariation ncloc3 'INT'}}</span>
-      <p class="note">{{period3Name}}</p>
-    </td>
-  </tr>
-</table>
+      <span class="note">{{period3Name}}</span>
+    </div>
+  {{/notNull}}
+</div>
+
+<div class="overview-trend">
+  <div class="overview-sparkline" id="overview-size-trend" data-width="300" data-height="50" data-color="#f3ca8e" data-type="INT"></div>
+</div>
index 461c03e13c434e6a9ccd214ce0307379865e16e6..986011c0e5885daa167912bcf16ba953e4acb4ea 100644 (file)
@@ -27,7 +27,8 @@
     height: 30,
     color: '#1f77b4',
     interpolate: 'bundle',
-    tension: 1
+    tension: 1,
+    type: 'INT'
   };
 
   /*
@@ -46,8 +47,8 @@
 
           var container = d3.select(this),
               svg = container.append('svg')
-                  .attr('width', options.width + 1)
-                  .attr('height', options.height + 1)
+                  .attr('width', options.width)
+                  .attr('height', options.height)
                   .classed('sonar-d3', true),
 
               plot = svg.append('g')
@@ -63,6 +64,9 @@
                     return d.count;
                   })),
 
+              minValue = yScale.domain()[0],
+              maxValue = yScale.domain()[1],
+
               line = d3.svg.line()
                   .x(function (d) {
                     return xScale(moment(d.val).toDate());
                     return yScale(d.count);
                   })
                   .interpolate(options.interpolate)
-                  .tension(options.tension);
+                  .tension(options.tension),
+
+              minLabel = plot.append('text')
+                  .text(window.formatMeasure(minValue, options.type))
+                  .attr('dy', '3px')
+                  .style('text-anchor', 'end')
+                  .style('font-size', '10px')
+                  .style('font-weight', '300')
+                  .style('fill', '#aaa'),
+
+              maxLabel = plot.append('text')
+                  .text(window.formatMeasure(maxValue, options.type))
+                  .attr('dy', '5px')
+                  .style('text-anchor', 'end')
+                  .style('font-size', '10px')
+                  .style('font-weight', '300')
+                  .style('fill', '#aaa'),
+
+              maxLabelWidth = Math.max(minLabel.node().getBBox().width, maxLabel.node().getBBox().width) + 3;
 
           _.extend(options, {
             marginLeft: 1,
-            marginRight: 1,
+            marginRight: 1 + maxLabelWidth,
             marginTop: 6,
             marginBottom: 6
           });
               .attr('d', line)
               .classed('line', true)
               .style('stroke', options.color);
+
+          minLabel
+              .attr('x', options.availableWidth + maxLabelWidth)
+              .attr('y', yScale(minValue));
+          maxLabel
+              .attr('x', options.availableWidth + maxLabelWidth)
+              .attr('y', yScale(maxValue));
         }
     );
   };
index e0aa11a6e7abb4fe3381c7e46ee184c79e84409f..9470914d2711f28c53cc99ec20271792e030ed2d 100644 (file)
@@ -23,7 +23,6 @@ requirejs([
   'overview/views/gate-view',
   'overview/views/size-view',
   'overview/views/issues-view',
-  'overview/views/debt-view',
   'overview/views/coverage-view',
   'overview/views/duplications-view'
 ], function (Layout,
@@ -31,7 +30,6 @@ requirejs([
              GateView,
              SizeView,
              IssuesView,
-             DebtView,
              CoverageView,
              DuplicationsView) {
 
@@ -48,7 +46,6 @@ requirejs([
     this.layout.gateRegion.show(new GateView({ model: this.state }));
     this.layout.sizeRegion.show(new SizeView({ model: this.state }));
     this.layout.issuesRegion.show(new IssuesView({ model: this.state }));
-    this.layout.debtRegion.show(new DebtView({ model: this.state }));
     this.layout.coverageRegion.show(new CoverageView({ model: this.state }));
     this.layout.duplicationsRegion.show(new DuplicationsView({ model: this.state }));
     this.state.fetch();
index 5e83b9334fdd65a293aed6527b4b4e83ea45c370..ba70f756f626c7d101e6ebbf4360ae686b5a2e88 100644 (file)
@@ -28,7 +28,6 @@ define([
       gateRegion: '#overview-gate',
       sizeRegion: '#overview-size',
       issuesRegion: '#overview-issues',
-      debtRegion: '#overview-debt',
       coverageRegion: '#overview-coverage',
       duplicationsRegion: '#overview-duplications'
     },
@@ -39,10 +38,8 @@ define([
 
     toggleRegions: function () {
       var conditions = this.model.get('gateConditions'),
-          hasGate = _.isArray(conditions) && conditions.length > 0,
-          hasCoverage = !!this.model.get('coverage');
+          hasGate = _.isArray(conditions) && conditions.length > 0;
       this.$(this.gateRegion.el).toggle(hasGate);
-      this.$(this.coverageRegion.el).toggle(hasCoverage);
     }
   });
 
index 44964c6815787113ef1ac671281ff494b048a3f1..6b19a4152873b6eaad4b8b3f74d80cba34003d63 100644 (file)
@@ -117,8 +117,6 @@ define(function () {
       if (nclocMeasure != null) {
         this.set({
           ncloc: nclocMeasure.val,
-          ncloc1: nclocMeasure.var1,
-          ncloc2: nclocMeasure.var2,
           ncloc3: nclocMeasure.var3
         });
       }
@@ -143,12 +141,6 @@ define(function () {
       }
 
       fetchIssuesByPeriod('issues', null);
-      if (this.hasPeriod(1)) {
-        fetchIssuesByPeriod('issues1', this.get('period1Date'));
-      }
-      if (this.hasPeriod(2)) {
-        fetchIssuesByPeriod('issues2', this.get('period2Date'));
-      }
       if (this.hasPeriod(3)) {
         fetchIssuesByPeriod('issues3', this.get('period3Date'));
       }
@@ -158,12 +150,7 @@ define(function () {
       var debtMeasure = _.findWhere(msr, { key: DEBT_METRIC }),
           sqaleRatingMeasure = _.findWhere(msr, { key: SQALE_RATING_METRIC });
       if (debtMeasure != null) {
-        this.set({
-          debt: debtMeasure.val,
-          debt1: debtMeasure.var1,
-          debt2: debtMeasure.var2,
-          debt3: debtMeasure.var3
-        });
+        this.set({ debt: debtMeasure.val });
       }
       if (sqaleRatingMeasure != null) {
         this.set({ sqaleRating: sqaleRatingMeasure.val });
@@ -176,15 +163,11 @@ define(function () {
       if (coverageMeasure != null) {
         this.set({
           coverage: coverageMeasure.val,
-          coverage1: coverageMeasure.var1,
-          coverage2: coverageMeasure.var2,
           coverage3: coverageMeasure.var3
         });
       }
       if (newCoverageMeasure != null) {
         this.set({
-          newCoverage1: newCoverageMeasure.var1,
-          newCoverage2: newCoverageMeasure.var2,
           newCoverage3: newCoverageMeasure.var3
         });
       }
@@ -195,8 +178,6 @@ define(function () {
       if (duplicationsMeasure != null) {
         this.set({
           duplications: duplicationsMeasure.val,
-          duplications1: duplicationsMeasure.var1,
-          duplications2: duplicationsMeasure.var2,
           duplications3: duplicationsMeasure.var3
         });
       }
@@ -210,7 +191,6 @@ define(function () {
             metrics: [
               SIZE_METRIC,
               ISSUES_METRIC,
-              DEBT_METRIC,
               COVERAGE_METRIC,
               DUPLICATIONS_METRIC
             ].join(',')
@@ -219,7 +199,6 @@ define(function () {
         if (_.isArray(r)) {
           that.parseSizeTrend(r[0]);
           that.parseIssuesTrend(r[0]);
-          that.parseDebtTrend(r[0]);
           that.parseCoverageTrend(r[0]);
           that.parseDuplicationsTrend(r[0]);
         }
@@ -231,12 +210,9 @@ define(function () {
           index = _.pluck(r.cols, 'metric').indexOf(metric);
       if (index !== -1) {
         var trend = r.cells.map(function (cell) {
-              return { val: cell.d, count: cell.v[index] };
-            }),
-            filteredTrend = trend.filter(function (t) {
-              return t.val != null && t.count != null;
-            });
-        that.set(property, filteredTrend);
+          return { val: cell.d, count: cell.v[index] || 0 };
+        });
+        that.set(property, trend);
       }
     },
 
@@ -248,10 +224,6 @@ define(function () {
       this.parseTrend(r, 'issuesTrend', ISSUES_METRIC);
     },
 
-    parseDebtTrend: function (r) {
-      this.parseTrend(r, 'debtTrend', DEBT_METRIC);
-    },
-
     parseCoverageTrend: function (r) {
       this.parseTrend(r, 'coverageTrend', COVERAGE_METRIC);
     },
index f83fbed79bfc16266ca16f177889efa74b81cf6f..ee5b7ff186d4b8b9a8bd77e7a7ea30583707e4d1 100644 (file)
@@ -29,8 +29,7 @@ define([
     },
 
     onRender: function () {
-      this.$('.js-pie-chart').pieChart();
-      if (this.model.has('coverageTrend')) {
+      if (this.model.has('coverageTrend') && this.model.get('coverage') != null) {
         this.$('#overview-coverage-trend').sparkline(this.model.get('coverageTrend'));
       }
     }
diff --git a/server/sonar-web/src/main/js/overview/views/debt-view.js b/server/sonar-web/src/main/js/overview/views/debt-view.js
deleted file mode 100644 (file)
index 40f4c06..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-define([
-  'templates/overview'
-], function () {
-
-  return Marionette.Layout.extend({
-    template: Templates['overview-debt'],
-
-    modelEvents: {
-      'change': 'render'
-    },
-
-    onRender: function () {
-      if (this.model.has('debtTrend')) {
-        this.$('#overview-debt-trend').sparkline(this.model.get('debtTrend'));
-      }
-      this.$('[data-toggle="tooltip"]').tooltip({ container: 'body', placement: 'bottom' });
-    },
-
-    onClose: function () {
-      this.$('[data-toggle="tooltip"]').tooltip('destroy');
-    }
-  });
-
-});
index b2738e44d4fc7fe2bcd53f657f2d07e505812158..51821a67da1c9badd01255771c9fa2120541d575 100644 (file)
@@ -29,8 +29,7 @@ define([
     },
 
     onRender: function () {
-      this.$('.js-pie-chart').pieChart();
-      if (this.model.has('duplicationsTrend')) {
+      if (this.model.has('duplicationsTrend') && this.model.get('duplications') != null) {
         this.$('#overview-duplications-trend').sparkline(this.model.get('duplicationsTrend'));
       }
     }
index c96f57963f8daf0b6feebcf84859ddcefd76e4e1..658ba05b7a45bd69cabd350b84f4ac8a0438a059 100644 (file)
@@ -29,14 +29,9 @@ define([
     },
 
     onRender: function () {
-      if (this.model.has('issuesTrend')) {
+      if (this.model.has('issuesTrend') && this.model.get('issues') != null) {
         this.$('#overview-issues-trend').sparkline(this.model.get('issuesTrend'));
       }
-      this.$('[data-toggle="tooltip"]').tooltip({ container: 'body', placement: 'bottom' });
-    },
-
-    onClose: function () {
-      this.$('[data-toggle="tooltip"]').tooltip('destroy');
     }
   });
 
index 43d6b9f2ba6940629bc09b0098483a0896e66f97..e09e8a2e7c86ca690a7006b5b7b31f7bf3f78118 100644 (file)
@@ -29,7 +29,7 @@ define([
     },
 
     onRender: function () {
-      if (this.model.has('sizeTrend')) {
+      if (this.model.has('sizeTrend') && this.model.get('ncloc') != null) {
         this.$('#overview-size-trend').sparkline(this.model.get('sizeTrend'));
       }
     }
index 57d7f35b39ce6ab301433b42bce0374ab773d4a1..311e5bb6bc4f988bd931bb5751b007b421523625 100644 (file)
 }
 
 .overview-card {
-  padding: 10px;
+  padding-top: 5px;
   background: @white;
   border: 1px solid @barBorderColor;
 }
 
-.overview-card + .overview-card {
-  margin-top: 10px;
+.overview-gate {
+  padding: 10px;
 }
 
 .overview-gate-ok { border: 2px solid @green; }
 
 .overview-gate-error { border: 2px solid @red; }
 
+.overview-container {
+  margin-top: 20px;
+  text-align: center;
+}
+
 .overview-card-header {
   padding-bottom: 5px;
   border-bottom: 1px solid @barBorderColor;
 .overview-status-WARN { background-color: @orange; }
 .overview-status-ERROR { background-color: @red; }
 
+.overview-highlight {
+  height: 145px;
+}
+
 .overview-main-measure {
-  display: inline-block;
-  vertical-align: middle;
+  line-height: 1.3;
   font-size: 36px;
   font-weight: 300;
 }
 
 .overview-trend {
+  height: 50px;
+  margin-top: 15px;
+  padding: 5px 10px;
+  border-top: 1px solid @barBorderColor;
+  background-color: #fdfdfd;
+
+  .note { font-size: 10px; }
+}
+
+.overview-sparkline {
   display: inline-block;
   vertical-align: middle;
-  margin-left: 15px;
 }
 
 .overview-measure {
   font-size: 16px;
-}
-
-.overview-measure ~ .note:last-child {
-  padding-top: 3px;
+  font-weight: 300;
 }
index 73e931133ebe0f8250434558df1d6d68553b91f6..0a1cb43e0f1cfbc7f8dcf489a2b027c26e45e033 100644 (file)
@@ -26,7 +26,7 @@ lib.changeWorkingDirectory('overview');
 lib.configureCasper();
 
 
-casper.test.begin(testName(), 34, function (test) {
+casper.test.begin(testName(), 23, function (test) {
   casper
       .start(lib.buildUrl('overview'), function () {
         lib.setDefaultViewport();
@@ -59,32 +59,20 @@ casper.test.begin(testName(), 34, function (test) {
         test.assertElementCount('#overview-gate .overview-status-OK', 5);
 
         test.assertSelectorContains('#overview-size', '165,077');
-        test.assertSelectorContains('#overview-size', '+14');
-        test.assertSelectorContains('#overview-size', '+62,886');
         test.assertSelectorContains('#overview-size', '+3,916');
         test.assertExists('#overview-size-trend path');
 
         test.assertSelectorContains('#overview-issues', '1,605');
+        test.assertSelectorContains('#overview-issues', 'A');
+        test.assertSelectorContains('#overview-issues', '66');
         test.assertExists('#overview-issues-trend path');
 
-        test.assertSelectorContains('#overview-debt', 'A');
-        test.assertSelectorContains('#overview-debt', '66');
-        test.assertSelectorContains('#overview-debt', '-2');
-        test.assertSelectorContains('#overview-debt', '-49');
-        test.assertSelectorContains('#overview-debt', '-64');
-        test.assertExists('#overview-debt-trend path');
-
         test.assertSelectorContains('#overview-coverage', '83.9%');
-        test.assertSelectorContains('#overview-coverage', '0%');
         test.assertSelectorContains('#overview-coverage', '+0.6%');
-        test.assertSelectorContains('#overview-coverage', '88.2%');
-        test.assertSelectorContains('#overview-coverage', '87.9%');
         test.assertSelectorContains('#overview-coverage', '90.0%');
         test.assertExists('#overview-coverage-trend path');
 
         test.assertSelectorContains('#overview-duplications', '1.0%');
-        test.assertSelectorContains('#overview-duplications', '0%');
-        test.assertSelectorContains('#overview-duplications', '-0.1%');
         test.assertSelectorContains('#overview-duplications', '+0.1%');
         test.assertExists('#overview-duplications-trend path');
       })