Skip to content

Commit

Permalink
Merge branch 'feature/dashboard_event_filters' of dev.gitlabhq.com:gi…
Browse files Browse the repository at this point in the history
…tlabhq
  • Loading branch information
dzaporozhets committed Nov 6, 2012
2 parents ba567c8 + 949233a commit 8b489ba
Show file tree
Hide file tree
Showing 11 changed files with 134 additions and 3 deletions.
Binary file added app/assets/images/event_filter_comments.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/assets/images/event_filter_merged.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/assets/images/event_filter_push.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/assets/images/event_filter_team.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions app/assets/javascripts/main.js.coffee
Expand Up @@ -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"]', @)
Expand Down
26 changes: 26 additions & 0 deletions app/assets/stylesheets/sections/events.scss
Expand Up @@ -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;
}
}
}
11 changes: 10 additions & 1 deletion app/controllers/dashboard_controller.rb
@@ -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|
Expand Down Expand Up @@ -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
2 changes: 1 addition & 1 deletion app/helpers/application_helper.rb
Expand Up @@ -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

Expand Down
18 changes: 18 additions & 0 deletions app/helpers/events_helper.rb
Expand Up @@ -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
9 changes: 8 additions & 1 deletion app/views/dashboard/index.html.haml
Expand Up @@ -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?
Expand Down
68 changes: 68 additions & 0 deletions lib/event_filter.rb
@@ -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

@remcoros
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey,

Did you see this issue: https://github.com/gitlabhq/gitlabhq/issues/1888

How hard is this to implement?

Please sign in to comment.