]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5884 Finish measures window
authorStas Vilchik <vilchiks@gmail.com>
Tue, 16 Dec 2014 12:25:55 +0000 (13:25 +0100)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 16 Dec 2014 12:26:03 +0000 (13:26 +0100)
server/sonar-web/src/main/hbs/source-viewer/measures/_source-viewer-measures-all.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/source-viewer/measures/_source-viewer-measures-test-cases.hbs
server/sonar-web/src/main/hbs/source-viewer/source-viewer-measures.hbs
server/sonar-web/src/main/js/common/handlebars-extensions.js
server/sonar-web/src/main/js/source-viewer/measures-overlay.js
server/sonar-web/src/main/less/components/source.less

diff --git a/server/sonar-web/src/main/hbs/source-viewer/measures/_source-viewer-measures-all.hbs b/server/sonar-web/src/main/hbs/source-viewer/measures/_source-viewer-measures-all.hbs
new file mode 100644 (file)
index 0000000..e38b18a
--- /dev/null
@@ -0,0 +1,40 @@
+<div class="source-viewer-measures-section source-viewer-measures-section-big">
+  {{#eachEven measuresToDisplay}}
+    <div class="source-viewer-measures-card">
+      <div class="measures">
+        <div class="measures-list">
+          <div class="measure measure-one-line measure-big">
+            <span class="measure-name">{{name}}</span>
+          </div>
+          {{#each metrics}}
+              <div class="measure measure-one-line" data-metric="{{key}}">
+                <span class="measure-name">{{name}}</span>
+                <span class="measure-value">&nbsp;{{value}}</span>
+              </div>
+          {{/each}}
+        </div>
+      </div>
+    </div>
+  {{/eachEven}}
+</div>
+
+<div class="source-viewer-measures-section source-viewer-measures-section-big">
+  {{#eachOdd measuresToDisplay}}
+    <div class="source-viewer-measures-card">
+      <div class="measures">
+        <div class="measures-list">
+          <div class="measure measure-one-line measure-big">
+            <span class="measure-name">{{name}}</span>
+          </div>
+          {{#each metrics}}
+            <div class="measure measure-one-line" data-metric="{{key}}">
+              <span class="measure-name">{{name}}</span>
+              <span class="measure-value">&nbsp;{{value}}</span>
+            </div>
+          {{/each}}
+        </div>
+      </div>
+    </div>
+  {{/eachOdd}}
+</div>
+
index 50b6eecf3af16ffef5953046091db4ad831d0c0f..cda0b9112d0413a113c4b83c9e98e6cede617072 100644 (file)
@@ -43,9 +43,9 @@
   </div>
 </div>
 
-<div class="source-viewer-measures-section source-viewer-measures-section-big">
-  <div class="source-viewer-measures-card source-viewer-measures-card-overflow">
-    {{#if selectedTest}}
+{{#if selectedTest}}
+  <div class="source-viewer-measures-section source-viewer-measures-section-full">
+    <div class="source-viewer-measures-card source-viewer-measures-card-overflow">
       {{#notEq selectedTest.status 'ERROR'}}
         {{#notEq selectedTest.status 'FAILURE'}}
           <div class="bubble-popup-title">{{t 'component_viewer.transition.covers'}}</div>
@@ -67,6 +67,6 @@
         {{/if}}
         <pre>{{selectedTest.stackTrace}}</pre>
       {{/notEq}}
-    {{/if}}
+    </div>
   </div>
-</div>
+{{/if}}
index 2f0799868150f239fdcec176175ad37db5ef14de..f119164a5a29ff3ce80bc012eafdc52277ecd659 100644 (file)
     <div class="source-viewer-measures-section">
       {{> '_source-viewer-measures-tests'}}
     </div>
-    <div class="source-viewer-measures-section">
-      {{> '_source-viewer-measures-issues'}}
-    </div>
+    {{> '_source-viewer-measures-test-cases'}}
   {{/unless}}
 
 </div>
 
-{{#if isUnitTest}}
-  <div class="source-viewer-measures">
-    {{> '_source-viewer-measures-test-cases'}}
-  </div>
-{{/if}}
+<div class="source-viewer-measures">
+  {{> '_source-viewer-measures-all'}}
+</div>
 
 <div class="modal-foot">
   <a class="overlay-popup-close" title="{{t 'close'}}">{{t 'close'}}</a>
index 2d0bd715144c624a20e1e018215604f894a93f1f..f5e8e3cfe0b26380c19b08c65ab230dd6ffcbd9f 100644 (file)
@@ -132,6 +132,26 @@ define(['handlebars'], function (Handlebars) {
     return ret;
   });
 
+  Handlebars.registerHelper('eachEven', function (context, options) {
+    var ret = '';
+    context.forEach(function (d, i) {
+      if (i % 2 === 0) {
+        ret += options.fn(d);
+      }
+    });
+    return ret;
+  });
+
+  Handlebars.registerHelper('eachOdd', function (context, options) {
+    var ret = '';
+    context.forEach(function (d, i) {
+      if (i % 2 === 1) {
+        ret += options.fn(d);
+      }
+    });
+    return ret;
+  });
+
   Handlebars.registerHelper('eq', function(v1, v2, options) {
     // use `==` instead of `===` to ignore types
     return v1 == v2 ? options.fn(this) : options.inverse(this);
index 588a962cb729609a35bec91752c4bf6ba47de013..f104ef3922059ba874f11d0e525edd1a3222f352 100644 (file)
@@ -99,24 +99,34 @@ define([
       });
     },
 
+    getMetrics: function () {
+      var metrics = '',
+          url = baseUrl + '/api/metrics';
+      $.ajax({
+        url: url,
+        async: false
+      }).done(function (data) {
+        metrics = _.filter(data, function (metric) {
+          return !metric.hidden && metric.val_type !== 'DATA';
+        });
+      });
+      return metrics;
+    },
+
     requestMeasures: function () {
       var that = this,
           url = baseUrl + '/api/resources',
+          metrics = this.getMetrics(),
           options = {
             resource: this.model.key(),
-            metrics: [].concat(
-                SOURCE_METRIC_LIST,
-                COVERAGE_METRIC_LIST,
-                ISSUES_METRIC_LIST,
-                DUPLICATIONS_METRIC_LIST,
-                TESTS_METRIC_LIST
-            ).join()
-            //metrics: 'true'
+            metrics: _.pluck(metrics, 'key').join()
           };
       return $.get(url, options).done(function (data) {
         var measuresList = data[0].msr || [],
             measures = that.model.get('measures') || {};
         measuresList.forEach(function (m) {
+          var metric = _.findWhere(metrics, {key: m.key});
+          metric.value = m.frmt_val || m.data;
           measures[m.key] = m.frmt_val || m.data;
           measures[m.key + '_raw'] = m.val;
         });
@@ -132,7 +142,20 @@ define([
         if (measures.it_conditions_to_cover && measures.it_uncovered_conditions) {
           measures.it_covered_conditions = measures.it_conditions_to_cover - measures.it_uncovered_conditions;
         }
-        that.model.set({ measures: measures });
+        metrics = _.filter(metrics, function (metric) {
+              return metric.value != null;
+            });
+        metrics = _.map(_.pairs(_.groupBy(metrics, 'domain')), function (domain) {
+          return {
+            name: domain[0],
+            metrics: domain[1]
+          };
+        });
+        console.log(metrics);
+        that.model.set({
+          measures: measures,
+          measuresToDisplay: metrics
+        });
       });
     },
 
@@ -147,7 +170,7 @@ define([
           };
       return $.get(url, options).done(function (data) {
         var issuesFacets = {};
-        data.facets.forEach(function(facet) {
+        data.facets.forEach(function (facet) {
           issuesFacets[facet.property] = facet.values;
         });
         var severityOrder = ['BLOCKER', 'CRITICAL', 'MAJOR', 'MINOR', 'INFO'],
@@ -172,9 +195,9 @@ define([
     requestTests: function () {
       var that = this,
           url = baseUrl + '/api/tests/show',
-          options = { key: this.model.key() };
+          options = {key: this.model.key()};
       return $.get(url, options).done(function (data) {
-        that.model.set({ tests: data.tests });
+        that.model.set({tests: data.tests});
         that.sortTests('name');
         that.testSorting = 'name';
       });
@@ -183,7 +206,7 @@ define([
     sortTests: function (condition) {
       var tests = this.model.get('tests');
       if (_.isArray(tests)) {
-        this.model.set({ tests: _.sortBy(tests, condition) });
+        this.model.set({tests: _.sortBy(tests, condition)});
       }
     },
 
@@ -215,7 +238,7 @@ define([
           };
       return $.get(url, options).done(function (data) {
         that.coveredFiles = data.files;
-        that.selectedTest = _.findWhere(that.model.get('tests'), { name: name });
+        that.selectedTest = _.findWhere(that.model.get('tests'), {name: name});
         that.render();
       });
     },
index b715d1b85300d3fc13ff33ad35029f04fce0b9ee..0468b6f0377b85cecf5382b7c7879c04b82fa439 100644 (file)
   width: 100%;
 }
 
+.source-viewer-measures-section + .source-viewer-measures-section-full {
+  margin-top: 20px;
+}
+
 .source-viewer-measures-card {
   margin: 20px 10px;
   padding: 10px;