]> source.dussan.org Git - sonarqube.git/commitdiff
New Issues Page: Modal windows for management saved filters
authorStas Vilchik <vilchiks@gmail.com>
Fri, 17 Jan 2014 06:33:07 +0000 (12:33 +0600)
committerStas Vilchik <vilchiks@gmail.com>
Fri, 17 Jan 2014 06:33:07 +0000 (12:33 +0600)
sonar-server/src/main/webapp/WEB-INF/app/views/issues/_filter_copy_form.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/_filter_edit_form.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/_filter_save_as_form.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/manage.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb
sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_header.hbs.erb
sonar-server/src/main/webapp/javascripts/navigator/issues-app.js
sonar-server/src/main/webapp/javascripts/navigator/issues.js
sonar-server/src/main/webapp/stylesheets/navigator.css
sonar-server/src/main/webapp/stylesheets/navigator/base.css
sonar-server/src/main/webapp/stylesheets/navigator/base.less

index 8f4d1a26f6dfbdebbbcb166ee4ff2c8e53b34bf7..ad34992b2884deeea086284bfce55c3af4210610 100644 (file)
@@ -14,7 +14,7 @@
 <script>
   $j("#copy-filter-form").modalForm({
     success: function (data) {
-      window.location = baseUrl + '/issues/filter/' + data;
+      return onCopy(data);
     }
   });
-</script>
\ No newline at end of file
+</script>
index f12ef26050bbfd7adabd84000d72abd427236034..650e7e19993aea0e9eb53b5540f800d383193c19 100644 (file)
@@ -14,7 +14,7 @@
 <script>
   $j("#edit-filter-form").modalForm({
     success: function (data) {
-      window.location = baseUrl + '/issues/filter/' + data;
+      return onEdit(data);
     }
   });
-</script>
\ No newline at end of file
+</script>
index 40dcc6cd48454b861741a3acc493500a33534651..a771f24bd01ead91e2bdd827d8ba4fb4fabe336e 100644 (file)
@@ -14,7 +14,7 @@
 <script>
   $j("#save-as-filter-form").modalForm({
     success: function (data) {
-      window.location = baseUrl + '/issues/filter/' + data;
+      return onSaveAs(data);
     }
   });
-</script>
\ No newline at end of file
+</script>
index 5b2dc5b04316f6fe87cd702a6badfda9a3542849..ad0e29e8fdab6b1a63848e6be4b3c95b00a28a51 100644 (file)
         });
       });
     });
+
+    function onSaveAs(data) {
+      window.location = baseUrl + '/issues/filter/' + data;
+    }
+
+    function onCopy(data) {
+      window.location = baseUrl + '/issues/filter/' + data;
+    }
+
+    function onEdit(data) {
+      window.location = baseUrl + '/issues/filter/' + data;
+    }
   </script>
 <% end %>
 <div>
index c40e41a7bd9286814107a8326720717dfccee97d..875baa43d86bdb0433f1cfec578ec8d7ee532ec6 100644 (file)
     delete issues_query_params.pageIndex;
     window.location = baseUrl + '/issues/search?' + jQuery.param(issues_query_params);
   }
+
+  function onSaveAs(data) {
+    window.location = baseUrl + '/issues/filter/' + data;
+  }
+
+  function onCopy(data) {
+    window.location = baseUrl + '/issues/filter/' + data;
+  }
+
+  function onEdit(data) {
+    window.location = baseUrl + '/issues/filter/' + data;
+  }
 </script>
 
 <script id="filterBarTemplate" type="text/template">
index 4ab77829259da3f583f33a168f2036eb97e149db..baba017f437129522bfca949efee5c22f5b0434a 100644 (file)
@@ -4,8 +4,10 @@
   <div class="navigator-header-actions">
     <button id="issues-new-search"><%= message ('issue_filter.new_search') -%></button>
     {{#if canSave}}<button id="issues-filter-save"><%= message('save') -%></button>{{/if}}
-    {{#if canSaveAs}}<button id="issues-filter-save-as"><%= message('save_as') -%></button>{{/if}}
-    {{#if canCopy}}<button id="issues-filter-copy"><%= message('copy') -%></button>{{/if}}
-    {{#if canEdit}}<button id="issues-filter-edit"><%= message('edit') -%></button>{{/if}}
+
+    {{#unless id}}<button id="issues-filter-save-as"><%= message('save_as') -%></button>{{/unless}}
+
+    {{#if id}}<button id="issues-filter-copy"><%= message('copy') -%></button>{{/if}}
+    {{#if id}}<button id="issues-filter-edit"><%= message('edit') -%></button>{{/if}}
   </div>
 </script>
index d47cca1947c555c8764bbe0eecea724e068f42fe..1a472de0ba561e41954e6f19b4eee2f2b57c0704 100644 (file)
@@ -8,7 +8,6 @@ jQuery(function() {
   window.SS.IssuesNavigatorApp = NavigatorApp;
 
 
-
   NavigatorApp.addRegions({
     headerRegion: '.navigator-header',
     filtersRegion: '.navigator-filters',
@@ -18,9 +17,15 @@ jQuery(function() {
 
 
   NavigatorApp.addInitializer(function() {
+    this.state = new Backbone.Model({
+      query: ''
+    });
+
     this.issues = new window.SS.Issues();
     this.issuesPage = 1;
 
+    this.filters = new window.SS.Filters();
+
     this.favoriteFilter = new window.SS.FavoriteFilter();
     this.issuesHeaderView = new window.SS.IssuesHeaderView({
       app: this,
@@ -42,8 +47,6 @@ jQuery(function() {
 
 
   NavigatorApp.addInitializer(function() {
-    this.filters = new window.SS.Filters();
-
     this.filters.add([
       new window.SS.Filter({
         name: window.SS.phrases.project,
@@ -179,13 +182,29 @@ jQuery(function() {
 
   NavigatorApp.addInitializer(function() {
     var app = this;
+
     window.onBulkIssues = function() {
       app.fetchFirstPage();
       jQuery('.ui-dialog, .ui-widget-overlay').remove();
-    }
+    };
+
+    window.onSaveAs = window.onCopy = window.onEdit = function(id) {
+      app.favoriteFilters.fetch({ reset: true });
+      app.router.navigate('id=' + id, { trigger: true });
+      jQuery('#modal').dialog('close');
+    };
   });
 
 
+  NavigatorApp.getQuery = function(withoutId) {
+    var query = this.filterBarView.getQuery();
+    if (!withoutId && this.favoriteFilter.id) {
+      query['id'] = this.favoriteFilter.id;
+    }
+    return query;
+  };
+
+
   NavigatorApp.storeQuery = function(query, sorting) {
     var fullQuery = query;
     if (sorting) {
@@ -217,7 +236,7 @@ jQuery(function() {
 
 
   NavigatorApp.fetchIssues = function(firstPage) {
-    var query = this.filterBarView.getQuery(),
+    var query = this.getQuery(),
         fetchQuery =_.extend({
           pageIndex: this.issuesPage
         }, query);
@@ -229,6 +248,11 @@ jQuery(function() {
       });
     }
 
+    if (this.favoriteFilter.id) {
+      query['id'] = this.favoriteFilter.id;
+      fetchQuery['id'] = this.favoriteFilter.id;
+    }
+
     this.storeQuery(query, this.issues.sorting);
 
     var that = this;
index fea1bebe48034559faab633bcfad5dbafaced6c1..99a95bbe6c6e7f94f7672ae988e4a2f51cd08488 100644 (file)
@@ -204,7 +204,7 @@ jQuery(function() {
       return _.extend(data || {}, {
         paging: this.collection.paging,
         sorting: this.collection.sorting,
-        query: Backbone.history.fragment || ''
+        query: (Backbone.history.fragment || '').replace(/|/g, '&')
       });
     }
   });
@@ -233,6 +233,10 @@ jQuery(function() {
 
 
     search: function() {
+      this.options.app.state.set({
+        query: this.options.app.getQuery(),
+        search: true
+      });
       this.options.app.fetchFirstPage();
     },
 
@@ -255,12 +259,60 @@ jQuery(function() {
 
 
     events: {
-      'click #issues-new-search': 'newSearch'
+      'click #issues-new-search': 'newSearch',
+      'click #issues-filter-save-as': 'saveAs',
+      'click #issues-filter-save': 'save',
+      'click #issues-filter-copy': 'copy',
+      'click #issues-filter-edit': 'edit'
+    },
+
+
+    initialize: function(options) {
+      Backbone.Marionette.ItemView.prototype.initialize.apply(this, arguments);
+      this.listenTo(options.app.state, 'change', this.render);
     },
 
 
     newSearch: function() {
+      this.model.clear();
       this.options.app.router.navigate('', { trigger: true });
+    },
+
+
+    saveAs: function() {
+      var url = baseUrl + '/issues/save_as_form?' + (Backbone.history.fragment || '').replace(/\|/g, '&');
+      openModalWindow(url, {});
+    },
+
+
+    save: function() {
+      var that = this;
+          url = baseUrl + '/issues/save/' + this.model.id + '?' + (Backbone.history.fragment || '').replace(/\|/g, '&');
+      jQuery.ajax({
+        type: 'POST',
+        url: url
+      }).done(function() {
+            that.options.app.state.set('search', false);
+          });
+    },
+
+
+    copy: function() {
+      var url = baseUrl + '/issues/copy_form/' + this.model.id;
+      openModalWindow(url, {});
+    },
+
+
+    edit: function() {
+      var url = baseUrl + '/issues/edit_form/' + this.model.id;
+      openModalWindow(url, {});
+    },
+
+
+    serializeData: function() {
+      return _.extend({
+        canSave: this.model.id && this.options.app.state.get('search')
+      }, this.model.toJSON());
     }
 
   });
@@ -278,6 +330,7 @@ jQuery(function() {
 
       filter.fetch({
         success: function() {
+          app.state.set('search', false);
           app.favoriteFilter.set(filter.toJSON());
         }
       });
@@ -321,17 +374,43 @@ jQuery(function() {
     },
 
 
-    index: function(query) {
-      var params = (query || '').split('|').map(function(t) {
+    parseQuery: function(query) {
+      return (query || '').split('|').map(function(t) {
         return {
           key: t.split('=')[0],
           value: decodeURIComponent(t.split('=')[1])
         }
       });
+    },
+
+
+    index: function(query) {
+      var params = this.parseQuery(query);
+
+      var idObj = _.findWhere(params, { key: 'id' });
+      if (idObj) {
+        var that = this,
+            f = this.app.favoriteFilter;
+        this.app.canSave = false;
+        f.set('id', idObj.value);
+        f.fetch({
+          success: function() {
+            params = _.extend({}, that.parseQuery(f.get('query')), params);
+            that.loadResults(params);
+          }
+        });
+      } else {
+        this.loadResults(params);
+      }
+    },
+
+
+    loadResults: function(params) {
       this.app.filterBarView.restoreFromQuery(params);
       this.app.restoreSorting(params);
       this.app.fetchFirstPage();
     }
+
   });
 
 
index ce63a7ec412d5d4c8b7d60dc599eef281d54e7c2..5a6d6c77c6cd3ac0aeb9eace4256952d32de0d28 100644 (file)
   z-index: 3;
 }
 .navigator-header-actions > button + button {
-  left: -1px;
+  margin-left: -1px;
 }
 .navigator-results {
   border-right: 1px solid #e1e1e1;
index 2db6f1fd15a820e286bccf603d6e9f78c7ce9165..5e901beb70949acaac85449f0273705ce7671206 100644 (file)
   z-index: 3;
 }
 .navigator-header-actions > button + button {
-  left: -1px;
+  margin-left: -1px;
 }
 .navigator-results {
   border-right: 1px solid #e1e1e1;
index 2546e3477160b3916d77075bb16bbb345be90386..7ebc5ff953f37d6ddfe714a396ae7ab97a4c01a7 100644 (file)
   }
 
   & > button + button {
-    left: -1px;
+    margin-left: -1px;
   }
 }