]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5007 Display quality profiles on which a rule is activated and related actions
authorStas Vilchik <vilchiks@gmail.com>
Mon, 17 Mar 2014 13:21:52 +0000 (19:21 +0600)
committerStas Vilchik <vilchiks@gmail.com>
Mon, 17 Mar 2014 13:22:04 +0000 (19:22 +0600)
15 files changed:
sonar-server/src/main/webapp/WEB-INF/app/views/coding_rules/index.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/coding_rules/templates/_coding_rules_detail_quality_profile_template.hbs.erb [new file with mode: 0644]
sonar-server/src/main/webapp/WEB-INF/app/views/coding_rules/templates/_coding_rules_detail_template.hbs.erb
sonar-server/src/main/webapp/javascripts/coding-rules/mockjax.coffee
sonar-server/src/main/webapp/javascripts/coding-rules/mockjax.js
sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profile-view.coffee [new file with mode: 0644]
sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profile-view.js [new file with mode: 0644]
sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profiles-view.coffee [new file with mode: 0644]
sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profiles-view.js [new file with mode: 0644]
sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-view.coffee
sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-view.js
sonar-server/src/main/webapp/stylesheets/coding-rules.css
sonar-server/src/main/webapp/stylesheets/coding-rules.less
sonar-server/src/main/webapp/stylesheets/icons.css
sonar-server/src/main/webapp/stylesheets/icons.less

index 66438a28820a6e52bb6c6f290e5a5b4d07c268ff..4755ba39bfbf715a601cf2e6bd93602cf1615e4d 100644 (file)
@@ -16,5 +16,6 @@
 <%= render :partial => '/coding_rules/templates/coding_rules_list_item_template.hbs' -%>
 <%= render :partial => '/coding_rules/templates/coding_rules_list_empty_template.hbs' -%>
 <%= render :partial => '/coding_rules/templates/coding_rules_detail_template.hbs' -%>
+<%= render :partial => '/coding_rules/templates/coding_rules_detail_quality_profile_template.hbs' -%>
 <%= render :partial => '/coding_rules/templates/coding_rules_facets_item_template.hbs' -%>
 <%= render :partial => '/coding_rules/templates/coding_rules_bulk_change_template.hbs' -%>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/coding_rules/templates/_coding_rules_detail_quality_profile_template.hbs.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/coding_rules/templates/_coding_rules_detail_quality_profile_template.hbs.erb
new file mode 100644 (file)
index 0000000..61127ee
--- /dev/null
@@ -0,0 +1,48 @@
+<script id="coding-rules-detail-quality-profile-template" type="text/x-handlebars-template">
+  <div class="coding-rules-detail-quality-profile-name">{{name}}</div>
+
+  {{#if parent}}
+    <div class="coding-rules-detail-quality-profile-inheritance">
+      <i class="icon-inheritance"></i> {{t 'coding_rules.inherits'}} <strong>{{parent.name}}</strong>
+    </div>
+  {{/if}}
+
+  <ul class="coding-rules-detail-parameters coding-rules-detail-quality-profile-parameters">
+    <li class="coding-rules-detail-parameter">
+      <h3 class="coding-rules-detail-parameter-name">{{t 'severity'}}</h3>
+      <div class="coding-rules-detail-parameter-description">
+        <select class="coding-rules-detail-quality-profile-severity">
+          {{#each severities}}
+            <option value="{{this}}">{{t 'severity' this}}</option>
+          {{/each}}
+        </select>
+        {{#if parent}}
+          {{#notEq severity parent.severity}}
+            {{t 'coding_rules.original'}} {{severityIcon parent.severity}}{{t 'severity' parent.severity}}
+          {{/notEq}}
+        {{/if}}
+      </div>
+    </li>
+    {{#each parameters}}
+      <li class="coding-rules-detail-parameter">
+        <h3 class="coding-rules-detail-parameter-name">{{key}}</h3>
+        <div class="coding-rules-detail-parameter-description">
+          <input type="text" value="{{value}}">
+          {{#if ../parent}}
+            {{#notEq value original}}
+              {{t 'coding_rules.original'}} {{original}}
+            {{/notEq}}
+          {{/if}}
+        </div>
+      </li>
+    {{/each}}
+  </ul>
+
+  <div class="button-group coding-rules-detail-quality-profile-actions">
+    <button>{{t 'update'}}</button>
+    {{#if parent}}
+      <button class="button-red">{{t 'coding_rules.revert_to_parent_definition'}}</button>
+    {{/if}}
+    <button class="button-red">{{t 'coding_rules.deactivate_quality_profile'}}</button>
+  </div>
+</script>
index d0abf0748a16885ad4e44e131cffbeeb244cf0ba..2b6c9651cecbaa967f5ecbfc47163b580ee0b6a0 100644 (file)
   {{/if}}
 
 
-  {{!--
-  <h3 class="coding-rules-detail-header coding-rules-detail-quality-profiles-header">
-    {{t 'coding_rules.quality_profiles'}}
-
-    <div class="button-group coding-rules-detail-quality-profiles-activation">
-      <button>{{t 'coding_rules.activate_quality_profile'}}</button>
-    </div>
-  </h3>
-
-  <ul class="coding-rules-detail-quality-profiles">
-    {{#each qualityProfiles}}
-      <li class="coding-rules-detail-quality-profile">
-        <div class="coding-rules-detail-quality-profile-name">{{name}}</div>
-        <div class="coding-rules-detail-quality-profile-severity">{{severityIcon severity}}{{t 'severity' severity}}</div>
-        <ul class="coding-rules-detail-quality-profile-parameters">
-          {{#each parameters}}
-            <li class="coding-rules-detail-quality-profile-parameter">
-              {{#if ../canUpdate}}
-                <label class="coding-rules-detail-quality-profile-parameter-key">{{key}}</label>
-                <input class="coding-rules-detail-quality-profile-parameter-value" type="text" value="{{value}}">
-                 <div class="button-group coding-rules-detail-quality-profile-parameter-actions">
-                   <button class="coding-rules-detail-quality-profile-parameter-update">{{t 'update'}}</button>
-                 </div>
-              {{else}}
-                {{key}}: {{value}}
-              {{/if}}
-            </li>
-          {{/each}}
-        </ul>
-        {{#if canDeactivate}}
-          <div class="button-group coding-rules-detail-quality-profile-actions">
-            <button class="button-red">{{t 'coding_rules.deactivate_quality_profile'}}</button>
-          </div>
-        {{/if}}
-      </li>
-    {{/each}}
-  </ul>
-  --}}
+  <h3 class="coding-rules-detail-title">{{t 'coding_rules.quality_profiles'}}</h3>
+  <div id="coding-rules-detail-quality-profiles"></div>
 </script>
index e3bf41d9fbe420019c3715127bf24fce34485328..09e73d0bb2e0c05251cac398277cd23713e9f384 100644 (file)
@@ -52,6 +52,7 @@ define ['jquery.mockjax'], ->
         'done': 'Done'
         'moreCriteria': '+ More Criteria'
         'search_verb': 'Search'
+        'severity': 'Severity'
         'update': 'Update'
 
         'severity.BLOCKER': 'Blocker'
@@ -66,16 +67,19 @@ define ['jquery.mockjax'], ->
         'coding_rules.extend_description': 'Extend Description'
         'coding_rules.deactivate_quality_profile': 'Deactivate'
         'coding_rules.found': 'Found'
+        'coding_rules.inherits': 'Inherits'
         'coding_rules.key': 'Key:'
         'coding_rules.new_search': 'New Search'
         'coding_rules.no_results': 'No Coding Rules'
         'coding_rules.order': 'Order'
         'coding_rules.ordered_by': 'Ordered By'
+        'coding_rules.original': 'Original:'
         'coding_rules.page': 'Coding Rules'
         'coding_rules.parameters': 'Parameters'
         'coding_rules.parameters.default_value': 'Default Value:'
         'coding_rules.quality_profiles': 'Quality Profiles'
         'coding_rules.repository': 'Repository:'
+        'coding_rules.revert_to_parent_definition': 'Revert to Parent Definition'
         'coding_rules._rules': 'rule(s)'
         'coding_rules.select_tag': 'Select Tag'
 
@@ -187,23 +191,24 @@ define ['jquery.mockjax'], ->
         qualityProfiles: [
           {
             name: 'SonarWay'
+            key: 'sonarway'
             severity: 'MINOR'
             canDeactivate: true
             canUpdate: true
             parameters: [
               { key: 'max', value: 8 }
             ]
-
           },
           {
             name: 'Quality Profile 1'
+            key: 'qualityprofile1'
             severity: 'MAJOR'
             canDeactivate: false
             canUpdate: false
             parameters: [
               { key: 'max', value: 6 }
             ]
-
+            inherits: 'sonarway'
           }
         ]
 
index 44442353b375babd2483d2f952690e936b714faf..469a4841a34136398c9bd4fcb92bf94f276b5a65 100644 (file)
@@ -68,6 +68,7 @@
           'done': 'Done',
           'moreCriteria': '+ More Criteria',
           'search_verb': 'Search',
+          'severity': 'Severity',
           'update': 'Update',
           'severity.BLOCKER': 'Blocker',
           'severity.CRITICAL': 'Critical',
           'coding_rules.extend_description': 'Extend Description',
           'coding_rules.deactivate_quality_profile': 'Deactivate',
           'coding_rules.found': 'Found',
+          'coding_rules.inherits': 'Inherits',
           'coding_rules.key': 'Key:',
           'coding_rules.new_search': 'New Search',
           'coding_rules.no_results': 'No Coding Rules',
           'coding_rules.order': 'Order',
           'coding_rules.ordered_by': 'Ordered By',
+          'coding_rules.original': 'Original:',
           'coding_rules.page': 'Coding Rules',
           'coding_rules.parameters': 'Parameters',
           'coding_rules.parameters.default_value': 'Default Value:',
           'coding_rules.quality_profiles': 'Quality Profiles',
           'coding_rules.repository': 'Repository:',
+          'coding_rules.revert_to_parent_definition': 'Revert to Parent Definition',
           'coding_rules._rules': 'rule(s)',
           'coding_rules.select_tag': 'Select Tag',
           'coding_rules.filters.availableSince': 'Available Since',
           qualityProfiles: [
             {
               name: 'SonarWay',
+              key: 'sonarway',
               severity: 'MINOR',
               canDeactivate: true,
               canUpdate: true,
               ]
             }, {
               name: 'Quality Profile 1',
+              key: 'qualityprofile1',
               severity: 'MAJOR',
               canDeactivate: false,
               canUpdate: false,
                   key: 'max',
                   value: 6
                 }
-              ]
+              ],
+              inherits: 'sonarway'
             }
           ]
         }
diff --git a/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profile-view.coffee b/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profile-view.coffee
new file mode 100644 (file)
index 0000000..3b4dd7a
--- /dev/null
@@ -0,0 +1,48 @@
+define [
+  'backbone.marionette',
+  'common/handlebars-extensions'
+], (
+  Marionette
+) ->
+
+  class CodingRulesDetailQualityProfilesView extends Marionette.ItemView
+    className: 'coding-rules-detail-quality-profile'
+    template: getTemplate '#coding-rules-detail-quality-profile-template'
+
+
+    ui:
+      severitySelect: '.coding-rules-detail-quality-profile-severity'
+
+
+    onRender: ->
+      format = (state) ->
+        return state.text unless state.id
+        "<i class='icon-severity-#{state.id.toLowerCase()}'></i> #{state.text}"
+
+      @ui.severitySelect.val @model.get 'severity'
+      @ui.severitySelect.select2
+        width: '200px'
+        minimumResultsForSearch: 999
+        formatResult: format
+        formatSelection: format
+        escapeMarkup: (m) -> m
+
+
+    getParent: ->
+      return null unless @model.get 'inherits'
+      @options.qualityProfiles.findWhere(key: @model.get('inherits')).toJSON()
+
+
+    enhanceParameters: ->
+      parent = @getParent()
+      parameters = @model.get 'parameters'
+      return parameters unless parent
+      parameters.map (p) ->
+        _.extend p, original: _.findWhere(parent.parameters, key: p.key).value
+
+
+    serializeData: ->
+      _.extend super,
+        parent: @getParent()
+        parameters: @enhanceParameters()
+        severities: ['BLOCKER', 'CRITICAL', 'MAJOR', 'MINOR', 'INFO']
\ No newline at end of file
diff --git a/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profile-view.js b/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profile-view.js
new file mode 100644 (file)
index 0000000..4020695
--- /dev/null
@@ -0,0 +1,82 @@
+// Generated by CoffeeScript 1.6.3
+(function() {
+  var __hasProp = {}.hasOwnProperty,
+    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+  define(['backbone.marionette', 'common/handlebars-extensions'], function(Marionette) {
+    var CodingRulesDetailQualityProfilesView, _ref;
+    return CodingRulesDetailQualityProfilesView = (function(_super) {
+      __extends(CodingRulesDetailQualityProfilesView, _super);
+
+      function CodingRulesDetailQualityProfilesView() {
+        _ref = CodingRulesDetailQualityProfilesView.__super__.constructor.apply(this, arguments);
+        return _ref;
+      }
+
+      CodingRulesDetailQualityProfilesView.prototype.className = 'coding-rules-detail-quality-profile';
+
+      CodingRulesDetailQualityProfilesView.prototype.template = getTemplate('#coding-rules-detail-quality-profile-template');
+
+      CodingRulesDetailQualityProfilesView.prototype.ui = {
+        severitySelect: '.coding-rules-detail-quality-profile-severity'
+      };
+
+      CodingRulesDetailQualityProfilesView.prototype.onRender = function() {
+        var format;
+        format = function(state) {
+          if (!state.id) {
+            return state.text;
+          }
+          return "<i class='icon-severity-" + (state.id.toLowerCase()) + "'></i> " + state.text;
+        };
+        this.ui.severitySelect.val(this.model.get('severity'));
+        return this.ui.severitySelect.select2({
+          width: '200px',
+          minimumResultsForSearch: 999,
+          formatResult: format,
+          formatSelection: format,
+          escapeMarkup: function(m) {
+            return m;
+          }
+        });
+      };
+
+      CodingRulesDetailQualityProfilesView.prototype.getParent = function() {
+        if (!this.model.get('inherits')) {
+          return null;
+        }
+        return this.options.qualityProfiles.findWhere({
+          key: this.model.get('inherits')
+        }).toJSON();
+      };
+
+      CodingRulesDetailQualityProfilesView.prototype.enhanceParameters = function() {
+        var parameters, parent;
+        parent = this.getParent();
+        parameters = this.model.get('parameters');
+        if (!parent) {
+          return parameters;
+        }
+        return parameters.map(function(p) {
+          return _.extend(p, {
+            original: _.findWhere(parent.parameters, {
+              key: p.key
+            }).value
+          });
+        });
+      };
+
+      CodingRulesDetailQualityProfilesView.prototype.serializeData = function() {
+        return _.extend(CodingRulesDetailQualityProfilesView.__super__.serializeData.apply(this, arguments), {
+          parent: this.getParent(),
+          parameters: this.enhanceParameters(),
+          severities: ['BLOCKER', 'CRITICAL', 'MAJOR', 'MINOR', 'INFO']
+        });
+      };
+
+      return CodingRulesDetailQualityProfilesView;
+
+    })(Marionette.ItemView);
+  });
+
+}).call(this);
diff --git a/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profiles-view.coffee b/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profiles-view.coffee
new file mode 100644 (file)
index 0000000..0b6f7ec
--- /dev/null
@@ -0,0 +1,13 @@
+define [
+  'backbone.marionette'
+  'coding-rules/views/coding-rules-detail-quality-profile-view'
+], (
+  Marionette,
+  CodingRulesDetailQualityProfileView
+) ->
+
+  class CodingRulesDetailQualityProfilesView extends Marionette.CollectionView
+    itemView: CodingRulesDetailQualityProfileView
+
+    itemViewOptions: ->
+      qualityProfiles: @collection
\ No newline at end of file
diff --git a/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profiles-view.js b/sonar-server/src/main/webapp/javascripts/coding-rules/views/coding-rules-detail-quality-profiles-view.js
new file mode 100644 (file)
index 0000000..75cda1e
--- /dev/null
@@ -0,0 +1,29 @@
+// Generated by CoffeeScript 1.6.3
+(function() {
+  var __hasProp = {}.hasOwnProperty,
+    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+  define(['backbone.marionette', 'coding-rules/views/coding-rules-detail-quality-profile-view'], function(Marionette, CodingRulesDetailQualityProfileView) {
+    var CodingRulesDetailQualityProfilesView, _ref;
+    return CodingRulesDetailQualityProfilesView = (function(_super) {
+      __extends(CodingRulesDetailQualityProfilesView, _super);
+
+      function CodingRulesDetailQualityProfilesView() {
+        _ref = CodingRulesDetailQualityProfilesView.__super__.constructor.apply(this, arguments);
+        return _ref;
+      }
+
+      CodingRulesDetailQualityProfilesView.prototype.itemView = CodingRulesDetailQualityProfileView;
+
+      CodingRulesDetailQualityProfilesView.prototype.itemViewOptions = function() {
+        return {
+          qualityProfiles: this.collection
+        };
+      };
+
+      return CodingRulesDetailQualityProfilesView;
+
+    })(Marionette.CollectionView);
+  });
+
+}).call(this);
index 2c0e74937e3d2f4da215da140a1c8005662cb7a9..919eee0c6ce42bc3858731e4f01e8abef12c246d 100644 (file)
@@ -1,14 +1,22 @@
 define [
+  'backbone',
   'backbone.marionette',
+  'coding-rules/views/coding-rules-detail-quality-profiles-view'
   'common/handlebars-extensions'
 ], (
-  Marionette
+  Backbone,
+  Marionette,
+  CodingRulesDetailQualityProfilesView
 ) ->
 
-  class CodingRulesDetailView extends Marionette.ItemView
+  class CodingRulesDetailView extends Marionette.Layout
     template: getTemplate '#coding-rules-detail-template'
 
 
+    regions:
+      qualityProfilesRegion: '#coding-rules-detail-quality-profiles'
+
+
     ui:
       tagsChange: '.coding-rules-detail-tags-change'
       tagInput: '.coding-rules-detail-tag-input'
@@ -34,7 +42,14 @@ define [
       'click @ui.extendDescriptionSubmit': 'submitExtendDescription'
 
 
+    initialize: (options) ->
+      @qualityProfilesView = new CodingRulesDetailQualityProfilesView
+        collection: new Backbone.Collection options.model.get 'qualityProfiles'
+
+
     onRender: ->
+      @qualityProfilesRegion.show @qualityProfilesView
+
       @ui.tagInput.select2
         tags: _.difference @options.app.tags, @model.get 'tags'
         width: '500px'
index 9e1a0c335ff44cb66d2e898fac0ca2db606904fe..a62422642b71525b02611150b0c5fa147215074f 100644 (file)
@@ -3,7 +3,7 @@
   var __hasProp = {}.hasOwnProperty,
     __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
 
-  define(['backbone.marionette', 'common/handlebars-extensions'], function(Marionette) {
+  define(['backbone', 'backbone.marionette', 'coding-rules/views/coding-rules-detail-quality-profiles-view', 'common/handlebars-extensions'], function(Backbone, Marionette, CodingRulesDetailQualityProfilesView) {
     var CodingRulesDetailView, _ref;
     return CodingRulesDetailView = (function(_super) {
       __extends(CodingRulesDetailView, _super);
 
       CodingRulesDetailView.prototype.template = getTemplate('#coding-rules-detail-template');
 
+      CodingRulesDetailView.prototype.regions = {
+        qualityProfilesRegion: '#coding-rules-detail-quality-profiles'
+      };
+
       CodingRulesDetailView.prototype.ui = {
         tagsChange: '.coding-rules-detail-tags-change',
         tagInput: '.coding-rules-detail-tag-input',
         'click @ui.extendDescriptionSubmit': 'submitExtendDescription'
       };
 
+      CodingRulesDetailView.prototype.initialize = function(options) {
+        return this.qualityProfilesView = new CodingRulesDetailQualityProfilesView({
+          collection: new Backbone.Collection(options.model.get('qualityProfiles'))
+        });
+      };
+
       CodingRulesDetailView.prototype.onRender = function() {
         var qp;
+        this.qualityProfilesRegion.show(this.qualityProfilesView);
         this.ui.tagInput.select2({
           tags: _.difference(this.options.app.tags, this.model.get('tags')),
           width: '500px'
 
       return CodingRulesDetailView;
 
-    })(Marionette.ItemView);
+    })(Marionette.Layout);
   });
 
 }).call(this);
index 11d7539c91d535ace10a7ddd264676139821c911..eea426560a6e1fd0503e631501946f2347b4cd50 100644 (file)
   font-size: 0;
 }
 .coding-rules-detail-quality-profile {
-  display: inline-block;
-  vertical-align: top;
-  width: 240px;
-  margin-right: 20px;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  font-size: 13px;
+  border: 1px solid transparent;
 }
 .coding-rules-detail-quality-profile.active {
-  background-color: #CAE3F2;
   border-color: #4b9fd5;
 }
 .coding-rules-detail-quality-profile.active .coding-rules-detail-quality-profile-name {
   background-color: #4b9fd5;
   color: #fff;
 }
-.coding-rules-detail-quality-profile-severity {
-  padding: 5px;
-  font-size: 11px;
+.coding-rules-detail-quality-profile + .coding-rules-detail-quality-profile {
+  margin-top: 20px;
 }
 .coding-rules-detail-quality-profile-name {
   padding: 5px;
 .coding-rules-detail-quality-profile-actions {
   padding: 5px;
 }
-.coding-rules-detail-quality-profile-parameters {
-  padding: 5px;
-}
-.coding-rules-detail-quality-profile-parameter {
-  white-space: nowrap;
-}
-.coding-rules-detail-quality-profile-parameter-key,
-.coding-rules-detail-quality-profile-parameter-value,
-.coding-rules-detail-quality-profile-parameter-actions {
+.coding-rules-detail-quality-profile-parameters .coding-rules-detail-parameter-name,
+.coding-rules-detail-quality-profile-parameters .coding-rules-detail-parameter-description {
   vertical-align: middle;
 }
-.coding-rules-detail-quality-profile-parameter-key:after {
-  content: ":";
+.coding-rules-detail-quality-profile-parameters .coding-rules-detail-parameter-description input {
+  width: 200px;
 }
-.coding-rules-detail-quality-profile-parameter-value {
-  width: 110px;
+.coding-rules-detail-quality-profile-inheritance {
+  margin: 10px 0;
 }
-.coding-rules-detail-quality-profile-parameter-actions {
-  float: right;
+.coding-rules-detail-quality-profile-inheritance strong {
+  font-weight: bold;
 }
 .coding-rules-detail-quality-profiles-activation {
   margin-top: -3px;
index bd5cb1cd4a8864d0e64a80b7c3ca73ddde0be1c6..31da7ea9b5b6c44623ef2e6834fd67e42e62323c 100644 (file)
 }
 
 .coding-rules-detail-quality-profile {
-  display: inline-block;
-  vertical-align: top;
-  width: 240px;
-  margin-right: 2 * @navigatorPadding;
-  .box-sizing(border-box);
-  font-size: @baseFontSize;
+  border: 1px solid transparent;
 
   &.active {
-    background-color: #CAE3F2;
     border-color: @highlighted;
 
     .coding-rules-detail-quality-profile-name {
   }
 }
 
-.coding-rules-detail-quality-profile-severity {
-  padding: @navigatorPadding / 2;
-  font-size: @smallFontSize;
+.coding-rules-detail-quality-profile + .coding-rules-detail-quality-profile {
+  margin-top: 2 * @navigatorPadding;
 }
 
 .coding-rules-detail-quality-profile-name {
 }
 
 .coding-rules-detail-quality-profile-parameters {
-  padding: @navigatorPadding / 2;
-}
 
-.coding-rules-detail-quality-profile-parameter {
-  white-space: nowrap;
-}
-
-.coding-rules-detail-quality-profile-parameter-key,
-.coding-rules-detail-quality-profile-parameter-value,
-.coding-rules-detail-quality-profile-parameter-actions {
-  vertical-align: middle;
-}
+  .coding-rules-detail-parameter-name,
+  .coding-rules-detail-parameter-description {
+    vertical-align: middle;
+  }
 
-.coding-rules-detail-quality-profile-parameter-key {
-  &:after {
-    content: ":";
+  .coding-rules-detail-parameter-description input {
+    width: 200px;
   }
 }
 
-.coding-rules-detail-quality-profile-parameter-value {
-  width: 110px;
-}
+.coding-rules-detail-quality-profile-inheritance {
+  margin: @navigatorPadding 0;
 
-.coding-rules-detail-quality-profile-parameter-actions {
-  float: right;
+  strong { font-weight: bold; }
 }
 
 .coding-rules-detail-quality-profiles-activation {
index aa150eafb4d7e272b7c6254f63416fd3920c1817..cbeeb7190ca12ac05cc9f7989533e2a53b3b6bd8 100644 (file)
@@ -264,6 +264,7 @@ a[class*=" icon-"] {
 }
 .icon-inheritance:before {
   content: "\f126";
+  font-size: 16px;
 }
 .icon-plus:before {
   content: "\f067";
index 5c8bc983bd16471feb1bba769b035239c72cbe4e..aca5c15c06d135d4b57d68b701709e1002ec6b91 100644 (file)
@@ -273,6 +273,7 @@ a[class^="icon-"], a[class*=" icon-"] {
 }
 .icon-inheritance:before {
   content: "\f126";
+  font-size: @iconFontSize;
 }
 .icon-plus:before {
   content: "\f067";