]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5482 The list of languages in the "Size" widget can be too long on views
authorStas Vilchik <vilchiks@gmail.com>
Tue, 29 Jul 2014 15:12:05 +0000 (17:12 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 29 Jul 2014 15:12:11 +0000 (17:12 +0200)
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/size.html.erb
server/sonar-web/src/main/less/dashboard.less

index 7ee4fb0e2292adb383bc8966535d756ea96a144c..8ea173543c579d6662670c76b35a02d1e2605db5 100644 (file)
 
         <% if ncloc_language_dist_hash %>
           <% if ncloc_language_dist_hash.size > 1 %>
-            <table class="data widget-barchar">
+            <table class="data widget-barchar" id="size-widget-language-dist">
               <%
-                 max = ncloc_language_dist_hash.max_by{|_k,v| v.to_i}[1].to_i
+                 max = Math.sqrt(ncloc_language_dist_hash.max_by{|_k,v| v.to_i}[1].to_i)
 
-                 # Sort lines language distribution by language name
+                 # Sort lines language distribution by lines count
                  languages_by_key = Hash[languages.collect { |l| [l.getKey(), l.getName] }]
-                 ncloc_language_dist_hash.sort {|v1,v2| (languages_by_key[v1[0]] ? languages_by_key[v1[0]].to_s : v1[0]) <=> (languages_by_key[v2[0]] ? languages_by_key[v2[0]].to_s : v2[0]) }.each do |language_key, language_ncloc|
+                 ncloc_language_dist_hash.sort {|v1,v2| v2[1].to_i <=> v1[1].to_i }.each do |language_key, language_ncloc|
               %>
                 <tr>
                   <td>
                     <%= ncloc.format_numeric_value(language_ncloc) %>
                   </td>
                   <td>
-                    <%= barchart(:width => 70, :percent => (40 * language_ncloc.to_i / max).to_i) %>
+                    <%= barchart(:width => 70, :percent => (40 * Math.sqrt(language_ncloc.to_i) / max).to_i) %>
                   </td>
                 </tr>
               <% end %>
             </table>
+            <script>
+              jQuery(function () {
+                var chart = jQuery('#size-widget-language-dist'),
+                    count = chart.find('tr').length;
+                if (count > 3) {
+                  chart.find('tr:gt(2)').hide();
+                  var moreLinkBox = jQuery('<div></div>').addClass('widget-barchart-more').insertAfter(chart),
+                      moreLink = jQuery('<a><%= message('more') -%></a>').appendTo(moreLinkBox).on('click', function () {
+                    jQuery(this).hide();
+                    chart.find('tr').show();
+                  });
+                }
+              });
+            </script>
           <% else %>
             <%
               language_key = ncloc_language_dist_hash.first[0]
index 97fdda25b68d1317739721c1dd5a3a4a0735ad00..575d71276a4d066601d4c76cef8e3283637c9773 100644 (file)
     vertical-align: middle !important;
   }
 
-  div.barchart div { height: 1em; }
+  div.barchart div {
+    min-width: 1px;
+    height: 1em;
+  }
 }
 
 .widget-measure-container .widget-barchar { margin-bottom: 10px; }
 
+.widget-measure-container .widget-barchart-more {
+  margin-top: -5px;
+  margin-bottom: 10px;
+  padding-left: 5px;
+}
+
 // Description Widget
 
 .description-widget-project {