Permalink
Browse files

Merge branch 'feature/dashboard_event_filters' of dev.gitlabhq.com:gi…

…tlabhq
  • Loading branch information...
2 parents ba567c8 + 949233a commit 8b489ba7759009ea5731db82a57ee3a36386287e @randx randx committed Nov 6, 2012
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -27,6 +27,9 @@ $ ->
# Initialize chosen selects
$('select.chosen').chosen()
+ # Initialize tooltips
+ $('.has_tooltip').tooltip()
+
# Disable form buttons while a form is submitting
$('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
buttons = $('[type="submit"]', @)
@@ -115,3 +115,29 @@
margin: -3px;
}
}
+
+/**
+ * Event filter
+ *
+ */
+.event_filter {
+ position: absolute;
+ width: 40px;
+ margin-left: -50px;
+
+ .filter_icon {
+ float: left;
+ border-left: 3px solid #4bc;
+ padding: 7px;
+ background: #f9f9f9;
+ margin-bottom: 10px;
+ img {
+ width:20px;
+ }
+
+ &.inactive {
+ border-left: 3px solid #EEE;
+ opacity: 0.5;
+ }
+ }
+}
@@ -1,12 +1,17 @@
class DashboardController < ApplicationController
respond_to :html
+ before_filter :event_filter, only: :index
+
def index
@groups = Group.where(id: current_user.projects.pluck(:group_id))
@projects = current_user.projects_with_events
@projects = @projects.page(params[:page]).per(30)
- @events = Event.in_projects(current_user.project_ids).limit(20).offset(params[:offset] || 0)
+ @events = Event.in_projects(current_user.project_ids)
+ @events = @event_filter.apply_filter(@events)
+ @events = @events.limit(20).offset(params[:offset] || 0)
+
@last_push = current_user.recent_push
respond_to do |format|
@@ -34,4 +39,8 @@ def issues
format.atom { render layout: false }
end
end
+
+ def event_filter
+ @event_filter ||= EventFilter.new(params[:event_filter])
+ end
end
@@ -36,7 +36,7 @@ def gravatar_icon(user_email = '', size = 40)
else
gravatar_prefix = request.ssl? ? "https://secure" : "http://www"
user_email.strip!
- "#{gravatar_prefix}.gravatar.com/avatar/#{Digest::MD5.hexdigest(user_email.downcase)}?s=#{size}&d=identicon"
+ "#{gravatar_prefix}.gravatar.com/avatar/#{Digest::MD5.hexdigest(user_email.downcase)}?s=#{size}&d=mm"
end
end
@@ -33,4 +33,22 @@ def event_image event
image_tag event_image_path
end
end
+
+ def event_filter_link key, tooltip
+ key = key.to_s
+
+ filter = @event_filter.options key
+
+ inactive = if @event_filter.active? key
+ nil
+ else
+ 'inactive'
+ end
+
+ content_tag :div, class: "filter_icon #{inactive}" do
+ link_to dashboard_path(event_filter: filter), class: 'has_tooltip', 'data-original-title' => tooltip do
+ image_tag "event_filter_#{key}.png"
+ end
+ end
+ end
end
@@ -3,10 +3,17 @@
.activities.span8
= render "events/event_last_push", event: @last_push
= render 'shared/no_ssh'
+
+ .event_filter
+ = event_filter_link EventFilter.push, 'Push events'
+ = event_filter_link EventFilter.merged, 'Merge events'
+ = event_filter_link EventFilter.comments, 'Comments'
+ = event_filter_link EventFilter.team, 'Team'
+
- if @events.any?
.content_list= render @events
- else
- %h4.nothing_here_message Projects activity will be displayed here
+ %p.nothing_here_message Projects activity will be displayed here
.loading.hide
.side
- if @groups.present?
View
@@ -0,0 +1,68 @@
+class EventFilter
+ attr_accessor :params
+
+ class << self
+ def default_filter
+ %w{ push issues merge_requests team}
+ end
+
+ def push
+ 'push'
+ end
+
+ def merged
+ 'merged'
+ end
+
+ def comments
+ 'comments'
+ end
+
+ def team
+ 'team'
+ end
+ end
+
+ def initialize params
+ @params = if params
+ params.dup
+ else
+ []#EventFilter.default_filter
+ end
+ end
+
+ def apply_filter events
+ return events unless params.present?
+
+ filter = params.dup
+
+ actions = []
+ actions << Event::Pushed if filter.include? 'push'
+ actions << Event::Merged if filter.include? 'merged'
+
+ if filter.include? 'team'
+ actions << Event::Joined
+ actions << Event::Left
+ end
+
+ actions << Event::Commented if filter.include? 'comments'
+
+ events = events.where(action: actions)
+ end
+
+ def options key
+ filter = params.dup
+
+ if filter.include? key
+ filter.delete key
+ else
+ filter << key
+ end
+
+ filter
+ end
+
+ def active? key
+ params.include? key
+ end
+end

1 comment on commit 8b489ba

Hey,

Did you see this issue: #1888

How hard is this to implement?

Please sign in to comment.