]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3675 Refactor the Events widget to prevent using AJAX
authorFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Mon, 24 Sep 2012 11:55:44 +0000 (13:55 +0200)
committerFabrice Bellingard <fabrice.bellingard@sonarsource.com>
Mon, 24 Sep 2012 12:04:00 +0000 (14:04 +0200)
plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/events.html.erb

index 1fa003ce9189540a6cf8875dd127cd34b93274ba..4b7af1791e712a6a920e0a66c9dc69cff96142f9 100644 (file)
@@ -763,6 +763,10 @@ widget.description.links=Links
 
 widget.events.name=Events
 widget.events.description=Reports events on the project life cycle such as versions and alerts.
+widget.events.title=Events
+widget.events.all=All
+widget.events.no_event=No event
+widget.events.show_more=Show more
 
 widget.rules.name=Rules Compliance
 widget.rules.description=Reports violations and compliance index on coding standards.
index c9fb693c91f5e477a4ea1d075b349bcf10ac4d03..a60adbb151d13304930ae1987726379471fbcbcb 100644 (file)
@@ -1,6 +1,108 @@
-<% if @project.scope=='PRJ' %>
-<div id="widget_events"><div id="events_portlet"></div></div>
-<script>
-<%= remote_function(:update => "events_portlet", :url => { :controller => :project, :action => :events, :id => @snapshot.id }, :method => 'get') %>
+<% 
+  if @resource.scope=='PRJ'
+
+    conditions = "resource_id=:resource_id"
+    values = {:resource_id => @resource.id}
+    # in order to not display events linked to deleted snapshot, we build the SQL request with 'NOT IN' as most of the time, there won't be unprocessed snapshots
+    snapshots_to_be_deleted = Snapshot.find(:all, :conditions => ["status='U' AND project_id=?", @resource.id])
+    unless snapshots_to_be_deleted.empty?
+      conditions << " AND snapshot_id NOT IN (:sids)"
+      values[:sids] = snapshots_to_be_deleted.map { |s| s.id }
+    end
+
+    events=Event.find(:all, :conditions => [conditions, values], :order => 'event_date desc')
+    
+    categories = EventCategory.categories(true)
+%>
+
+<script type="text/javascript">
+  function changeCategory(categoryId, widgetId) {
+    var eventTableMaxSize = 8;
+    $$('#events_' + widgetId + ' tr.event').invoke('hide');
+    var elements;
+    if (categoryId=='all') {
+      elements = $$('#events_' + widgetId + ' tr.event');
+    } else {
+      elements = $$('#events_' + widgetId + ' tr.cat_' + categoryId);
+    }
+    var elementsToDisplay = elements.slice(0,eventTableMaxSize);
+    if (elementsToDisplay.size()==0) {
+      $('events_' + widgetId).hide();
+      $('show_more_events_' + widgetId).hide();
+      $('no_event_message_' + widgetId).show();
+    } else {
+      $('events_' + widgetId).show();
+      $('no_event_message_' + widgetId).hide();
+      elementsToDisplay.invoke('show');
+      if (elements.size() > eventTableMaxSize) {
+        $('show_more_events_' + widgetId).show();
+      } else {
+        $('show_more_events_' + widgetId).hide();
+      }
+    }
+  }
+  
+  function showAllEvents(widgetId) {
+    var selectedCategory = $('select_category_' + widgetId).value;
+    if (selectedCategory=='all') {
+      $$('#events_' + widgetId + ' tr.event').invoke('show');
+    } else {
+      $$('#events_' + widgetId + ' tr.cat_' + selectedCategory).invoke('show');
+    }
+    $('show_more_events_' + widgetId).hide();
+  }
 </script>
+
+
+<h3><%= message('widget.events.title') -%> &nbsp;&nbsp;
+
+  <select class="small" id="select_category_<%= widget.id -%>" onchange="changeCategory(this.value, <%= widget.id -%>);">
+    <option value="all"><%= message('widget.events.all') -%></option>
+    <% categories.each do |categ| %>
+    <option value="<%= categ.name.parameterize -%>"><%= h message('event.category.' + categ.name, :default => categ.name) %></option>
+    <% end %>
+  </select>
+
+</h3>
+
+<table id="events_<%= widget.id -%>" class="spaced data">
+  <thead>
+    <tr>
+      <th colspan="4"></th>
+    </tr>
+  </thead>
+  
+  <tbody>
+<%
+   events.each do |event|
+     categ = event.category
+%>
+<tr class="<%= cycle 'even','odd' -%> event cat_<%= categ.parameterize -%>">
+    <td x="<%= event.event_date -%>"><%= l(event.event_date.to_date) %></td>
+    <td><%= h message('event.category.' + categ, :default => categ) %></td>
+    <td><%= event.name %></td>
+    <td>
+      <% unless event.description.blank? %>
+      <a href="#" class="nolink" title="<%= h event.description -%>" alt="<%= h event.description -%>">
+        <img src="<%= ApplicationController.root_context -%>/images/information.png" />
+      </a>
+      <% end %>
+    </td>
+</tr>
+<%
+   end
+%>
+  </tbody>
+</table>
+
+<div id="no_event_message_<%= widget.id -%>" style="margin: 5px">
+  <span class="empty_widget"><%= message('widget.events.no_event') -%></span>
+</div>
+
+<a href="#" onclick="showAllEvents(<%= widget.id -%>);" id="show_more_events_<%= widget.id -%>" class="action"><%= message('widget.events.show_more') -%></a>
+
+<script type="text/javascript">
+  changeCategory('all', <%= widget.id -%>);
+</script>
+
 <% end %>
\ No newline at end of file