]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4851 3rd feedback changes
authorStas Vilchik <vilchiks@gmail.com>
Thu, 14 Nov 2013 05:53:15 +0000 (11:53 +0600)
committerStas Vilchik <vilchiks@gmail.com>
Thu, 14 Nov 2013 06:55:02 +0000 (12:55 +0600)
sonar-server/src/main/webapp/WEB-INF/app/views/issues/search2.html.erb
sonar-server/src/main/webapp/javascripts/navigator/app.js
sonar-server/src/main/webapp/javascripts/navigator/filters/base-filters.js
sonar-server/src/main/webapp/javascripts/navigator/filters/favorite-filters.js
sonar-server/src/main/webapp/javascripts/navigator/filters/more-criteria-filters.js
sonar-server/src/main/webapp/javascripts/navigator/filters/select-filters.js
sonar-server/src/main/webapp/stylesheets/navigator.css
sonar-server/src/main/webapp/stylesheets/navigator.less

index 32d95d37e275a572b4a86653a5fbd32807659424..136a990112bc9345f63df1b2c1eb8c5d8268169d 100644 (file)
@@ -21,6 +21,9 @@
 <script id="baseFilterTemplate" type="text/template">
   <div class="navigator-filter-label">{{ name }}</div>
   <div class="navigator-filter-value {[ if (defaultValue) { ]}default{[ } ]}">{{ value }}</div>
+  {[ if (optional) { ]}
+  <div class="navigator-filter-disable">&times;</div>
+  {[ } ]}
 </script>
 
 <script id="detailsFilterTemplate" type="text/template">
@@ -74,7 +77,7 @@
 </script>
 
 <script id="favoriteFilterTemplate" type="text/template">
-  <div class="navigator-filter-favorite"></div>
+  <div class="navigator-filter-favorite-toggle"></div>
 </script>
 
 <script id="detailsFavoriteFilterTemplate" type="text/template">
index 5b2a5104f108155c9aa889205d8cd0539c3bd6fb..0d092b7c0bf3ab1e9424abee02022a0cb1cfa1e0 100644 (file)
@@ -23,6 +23,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         new window.SS.Filter({
           type: window.SS.FavoriteFilterView,
           enabled: true,
+          optional: false,
           choices: window.SS.favorites
         })]);
     }
@@ -32,7 +33,8 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         name: 'Project',
         property: 'componentRoots',
         type: window.SS.ProjectFilterView,
-        enabled: true
+        enabled: true,
+        optional: false,
       }),
 
       new window.SS.Filter({
@@ -40,6 +42,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         property: 'severities[]',
         type: window.SS.SelectFilterView,
         enabled: true,
+        optional: false,
         choices: {
           'BLOCKER': 'Blocker',
           'CRITICAL': 'Critical',
@@ -54,6 +57,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         property: 'statuses[]',
         type: window.SS.SelectFilterView,
         enabled: true,
+        optional: false,
         choices: {
           'OPEN': 'Open',
           'CONFIRMED': 'Confirmed',
@@ -68,6 +72,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         property: 'resolutions[]',
         type: window.SS.SelectFilterView,
         enabled: false,
+        optional: true,
         choices: {
           'FALSE-POSITIVE': 'False positive',
           'FIXED': 'Fixed',
@@ -79,14 +84,16 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         name: 'Assignee',
         property: 'assignees',
         type: window.SS.AssigneeFilterView,
-        enabled: true
+        enabled: true,
+        optional: false
       }),
 
       new window.SS.Filter({
         name: 'Reporter',
         property: 'reporters',
         type: window.SS.ReporterFilterView,
-        enabled: false
+        enabled: false,
+        optional: true
       }),
 
       new window.SS.Filter({
@@ -94,7 +101,8 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
         propertyFrom: 'createdAfter',
         propertyTo: 'createdBefore',
         type: window.SS.DateRangeFilterView,
-        enabled: false
+        enabled: false,
+        optional: true
       })
     ]);
 
index 14a87f85754d6ae8f8a24abe2b4e646db9be1d23..d34300fbd60732d1dae5d87f53f245236d0ad1cb 100644 (file)
@@ -31,7 +31,8 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
 
     events: function() {
       return {
-        'click': 'toggleDetails'
+        'click': 'toggleDetails',
+        'click .navigator-filter-disable': 'disable'
       };
     },
 
@@ -71,6 +72,10 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
       this.$el.toggleClass(
           'navigator-filter-disabled',
           !this.model.get('enabled'));
+
+      this.$el.toggleClass(
+          'navigator-filter-optional',
+          this.model.get('optional'));
     },
 
 
@@ -98,7 +103,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
     showDetails: function() {
       this.registerShowedDetails();
 
-      var top = this.$el.offset().top + this.$el.outerHeight(),
+      var top = this.$el.offset().top + this.$el.outerHeight() - 1,
           left = this.$el.offset().left;
 
       this.detailsView.$el.css({ top: top, left: left }).addClass('active');
@@ -137,6 +142,11 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
     },
 
 
+    disable: function() {
+      this.model.set('enabled', false);
+    },
+
+
     serializeData: function() {
       return _.extend({}, this.model.toJSON(), {
         value: this.renderValue(),
@@ -154,7 +164,8 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
 
 
     collectionEvents: {
-      'change:value': 'changeFilters'
+      'change:value': 'changeFilters',
+      'change:enabled': 'changeEnabled'
     },
 
 
@@ -174,7 +185,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
       Backbone.Marionette.CompositeView.prototype.initialize.apply(this, arguments);
 
       var that = this;
-      $('body').on('click', function() {
+      $j('body').on('click', function() {
         that.hideDetails();
       });
 
@@ -182,6 +193,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
       this.moreCriteriaFilter = new window.SS.Filter({
         type: window.SS.MoreCriteriaFilterView,
         enabled: true,
+        optional: false,
         filters: disabledFilters
       });
       this.collection.add(this.moreCriteriaFilter);
@@ -190,6 +202,10 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
 
     render: function() {
       Backbone.Marionette.CompositeView.prototype.render.apply(this, arguments);
+
+      if (this.collection.where({ type: window.SS.FavoriteFilterView }).length > 0) {
+        this.$el.addClass('navigator-filter-list-favorite');
+      }
     },
 
 
@@ -205,19 +221,33 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
           filterView = filter.view;
 
       filterView.$el.detach().insertBefore(this.$('.navigator-filter-more-criteria'));
-      filter.set('enabled', 'true');
+      filter.set('enabled', true);
+    },
+
+
+    changeEnabled: function() {
+      var disabledFilters = this.collection
+          .where({ enabled: false })
+          .reject(function(filter) {
+            return filter.get('type') === window.SS.MoreCriteriaFilterView;
+          });
 
-      var disabledFilters = this.collection.where({ enabled: false });
       if (disabledFilters.length === 0) {
         this.moreCriteriaFilter.set({ enabled: false }, { silent: true });
+      } else {
+        this.moreCriteriaFilter.set({ enabled: true }, { silent: true });
       }
       this.moreCriteriaFilter.set('filters', disabledFilters);
+
+      this.changeFilters();
     },
 
 
     changeFilters: function() {
-      var query = _.clone(this.options.extra);
-      this.collection.each(function(item) {
+      var query = _.clone(this.options.extra),
+          enabledFilters = this.collection.where({ enabled: true });
+
+      _.each(enabledFilters, function(item) {
         var value = item.get('value');
 
         if (value) {
index 52971fe30020de4459597806c40df317f74af4ae..b93ac381b14259f88811be6b6d33c62bdea8d0a9 100644 (file)
@@ -30,6 +30,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
 
   var FavoriteFilterView = window.SS.SelectFilterView.extend({
     template: '#favoriteFilterTemplate',
+    className: 'navigator-filter navigator-filter-favorite',
 
 
     initialize: function() {
index 853f0fe4ee0b031c5f5663bc8d703e013242c75d..416f0d0898dadc29399a6203ef041f8602408066 100644 (file)
@@ -25,6 +25,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
 
   var MoreCriteriaFilterView = window.SS.SelectFilterView.extend({
     template: '#moreCriteriaFilterTemplate',
+    className: 'navigator-filter navigator-filter-more-criteria',
 
 
     initialize: function() {
index 93611947241ac56eb305bf285b0d7bc888a1d151..0422c4b0edd09e3273a843b002720ac74f483bfb 100644 (file)
@@ -24,7 +24,7 @@ window.SS = typeof window.SS === 'object' ? window.SS : {};
 
 
   var SelectFilterView = window.SS.BaseFilterView.extend({
-    className: 'navigator-filter navigator-filter-more-criteria',
+    className: 'navigator-filter',
 
     initialize: function() {
       window.SS.BaseFilterView.prototype.initialize.call(this, {
index b4cb96b4db04db10903507b515d9ec40a8ce8033..1aa9d41b4bd25222dfa5535fc60929dc1cccc2b1 100644 (file)
   vertical-align: middle;
   font-size: 0;
 }
+.navigator-filter-list-favorite {
+  position: relative;
+  padding-left: 36px;
+  overflow: hidden;
+}
 .navigator-filters-actions {
   display: inline-block;
   vertical-align: middle;
@@ -29,7 +34,9 @@
   vertical-align: top;
   height: 36px;
   line-height: 36px;
+  margin: -1px 0 0;
   padding: 0 10px;
+  border: 1px solid transparent;
   white-space: nowrap;
   cursor: pointer;
   transition: background 0.3s ease;
   background-color: #e2e2e2;
 }
 .navigator-filter.active {
-  position: relative;
-  padding: 0 9px;
-  border-left: 1px solid #cdcdcd;
-  border-right: 1px solid #cdcdcd;
+  border-color: #cdcdcd;
   background: #fff;
 }
 .navigator-filter-disabled {
   display: none;
 }
+.navigator-filter-optional {
+  padding-right: 0;
+}
 .navigator-filter-label {
   display: inline-block;
   vertical-align: middle;
 .navigator-filter-value.default {
   color: #666;
 }
+.navigator-filter-disable {
+  display: inline-block;
+  vertical-align: middle;
+  width: 20px;
+  height: 20px;
+  line-height: 20px;
+  margin: 0 0 0 5px;
+  font-size: 18px;
+  text-align: center;
+  transition: background 0.3s ease;
+}
+.navigator-filter-disable:hover {
+  background-color: #d0d0d0;
+}
 .navigator-filter-range-input {
   width: 120px;
 }
   background-color: #dddddd;
 }
 .navigator-filter-favorite {
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+.navigator-filter-favorite-toggle {
   width: 16px;
   height: 36px;
   background: url('../images/star.png') no-repeat center center;
index 4afa0b675613008bb48eb6411f33f5f735dec1a1..2041c98c63872b75735ca04af75e8136cd03544f 100644 (file)
   font-size: 0;
 }
 
+.navigator-filter-list-favorite {
+  position: relative;
+  padding-left: 36px;
+  overflow: hidden;
+}
+
 .navigator-filters-actions {
   display: inline-block;
   vertical-align: middle;
@@ -38,7 +44,9 @@
   vertical-align: top;
   height: @navigatorHeight;
   line-height: @navigatorHeight;
+  margin: -1px 0 0;
   padding: 0 @navigatorFilterPadding;
+  border: 1px solid transparent;
   white-space: nowrap;
   cursor: pointer;
   transition: background 0.3s ease;
   }
 
   &.active {
-    position: relative;
-    padding: 0 @navigatorFilterPadding - 1px;
-    border-left: 1px solid #cdcdcd;
-    border-right: 1px solid #cdcdcd;
+    border-color: @darkGrey;
     background: #fff;
   }
 }
   display: none;
 }
 
+.navigator-filter-optional {
+  padding-right: 0;
+}
+
 .navigator-filter-label {
   display: inline-block;
   vertical-align: middle;
   }
 }
 
+.navigator-filter-disable {
+  display: inline-block;
+  vertical-align: middle;
+  .square(20px);
+  line-height: 20px;
+  margin: 0 0 0 5px;
+  font-size: 18px;
+  text-align: center;
+  transition: background 0.3s ease;
+
+  &:hover {
+    background-color: darken(@navigatorHover, 7%);
+  }
+}
+
 .navigator-filter-range-input {
   width: 120px;
 }
   position: absolute;
   z-index: 1200;
   min-width: 100px;
-  border: 1px solid #cdcdcd;
+  border: 1px solid @darkGrey;
   background: #fff;
   font-size: @baseFontSize;
   transition: opacity 0.3s ease;
   .line {
     height: 1px;
     margin: 5px 0;
-    background: #cdcdcd;
+    background: @darkGrey;
   }
 }
 
 .navigator-filter-select-list + .navigator-filter-select-list {
-  border-top: 1px solid #cdcdcd;
+  border-top: 1px solid @darkGrey;
 }
 
 .navigator-filter-search {
   input {
     .size(100%, 26px);
     padding: 0 7px;
-    border: 1px solid #cdcdcd;
+    border: 1px solid @darkGrey;
     .box-sizing(border-box);
   }
 }
 }
 
 .navigator-filter-favorite {
+  position: absolute;
+  top: 0; left: 0;
+}
+
+.navigator-filter-favorite-toggle {
   .size(16px, @navigatorHeight);
   background: url('../images/star.png') no-repeat center center;
 }