Commit f555578414347855be452cc8ee095c1304768c2b

Authored by Dmitriy Zaporozhets
1 parent ba567c8d

Added EventFilter class. Compeleted first version of dashbaord filtering

app/assets/images/event_filter_comments.png 0 → 100644

750 Bytes

app/assets/images/event_filter_merged.png 0 → 100644

463 Bytes

app/assets/images/event_filter_push.png 0 → 100644

632 Bytes

app/assets/images/event_filter_team.png 0 → 100644

1.31 KB

app/assets/javascripts/main.js.coffee
... ... @@ -27,6 +27,9 @@ $ ->
27 27 # Initialize chosen selects
28 28 $('select.chosen').chosen()
29 29  
  30 + # Initialize tooltips
  31 + $('.has_tooltip').tooltip()
  32 +
30 33 # Disable form buttons while a form is submitting
31 34 $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
32 35 buttons = $('[type="submit"]', @)
... ...
app/assets/stylesheets/sections/events.scss
... ... @@ -115,3 +115,34 @@
115 115 margin: -3px;
116 116 }
117 117 }
  118 +
  119 +/**
  120 + * Event filter
  121 + *
  122 + */
  123 +.event_filter {
  124 + position: absolute;
  125 + width: 40px;
  126 +
  127 + .filter_icon {
  128 + float: left;
  129 + border-left: 3px solid #4bc;
  130 + padding: 7px;
  131 + background: #f9f9f9;
  132 + margin-bottom: 10px;
  133 + img {
  134 + width:20px;
  135 + }
  136 +
  137 + &.inactive {
  138 + border-left: 3px solid #EEE;
  139 + opacity: 0.5;
  140 + }
  141 + }
  142 +}
  143 +
  144 +.activities {
  145 + .content_list {
  146 + margin-left:50px;
  147 + }
  148 +}
... ...
app/controllers/dashboard_controller.rb
1 1 class DashboardController < ApplicationController
2 2 respond_to :html
3 3  
  4 + before_filter :event_filter, only: :index
  5 +
4 6 def index
5 7 @groups = Group.where(id: current_user.projects.pluck(:group_id))
6 8 @projects = current_user.projects_with_events
7 9 @projects = @projects.page(params[:page]).per(30)
8 10  
9   - @events = Event.in_projects(current_user.project_ids).limit(20).offset(params[:offset] || 0)
  11 + @events = Event.in_projects(current_user.project_ids)
  12 + @events = @event_filter.apply_filter(@events)
  13 + @events = @events.limit(20).offset(params[:offset] || 0)
  14 +
10 15 @last_push = current_user.recent_push
11 16  
12 17 respond_to do |format|
... ... @@ -34,4 +39,8 @@ class DashboardController &lt; ApplicationController
34 39 format.atom { render layout: false }
35 40 end
36 41 end
  42 +
  43 + def event_filter
  44 + @event_filter ||= EventFilter.new(params[:event_filter])
  45 + end
37 46 end
... ...
app/helpers/events_helper.rb
... ... @@ -33,4 +33,22 @@ module EventsHelper
33 33 image_tag event_image_path
34 34 end
35 35 end
  36 +
  37 + def event_filter_link key, tooltip
  38 + key = key.to_s
  39 +
  40 + filter = @event_filter.options key
  41 +
  42 + inactive = if @event_filter.active? key
  43 + nil
  44 + else
  45 + 'inactive'
  46 + end
  47 +
  48 + content_tag :div, class: "filter_icon #{inactive}" do
  49 + link_to dashboard_path(event_filter: filter), class: 'has_tooltip', 'data-original-title' => tooltip do
  50 + image_tag "event_filter_#{key}.png"
  51 + end
  52 + end
  53 + end
36 54 end
... ...
app/views/dashboard/index.html.haml
... ... @@ -3,6 +3,13 @@
3 3 .activities.span8
4 4 = render "events/event_last_push", event: @last_push
5 5 = render 'shared/no_ssh'
  6 +
  7 + .event_filter
  8 + = event_filter_link EventFilter.push, 'Push events'
  9 + = event_filter_link EventFilter.merged, 'Merge events'
  10 + = event_filter_link EventFilter.comments, 'Comments'
  11 + = event_filter_link EventFilter.team, 'Team'
  12 +
6 13 - if @events.any?
7 14 .content_list= render @events
8 15 - else
... ...
lib/event_filter.rb 0 → 100644
... ... @@ -0,0 +1,68 @@
  1 +class EventFilter
  2 + attr_accessor :params
  3 +
  4 + class << self
  5 + def default_filter
  6 + %w{ push issues merge_requests team}
  7 + end
  8 +
  9 + def push
  10 + 'push'
  11 + end
  12 +
  13 + def merged
  14 + 'merged'
  15 + end
  16 +
  17 + def comments
  18 + 'comments'
  19 + end
  20 +
  21 + def team
  22 + 'team'
  23 + end
  24 + end
  25 +
  26 + def initialize params
  27 + @params = if params
  28 + params.dup
  29 + else
  30 + []#EventFilter.default_filter
  31 + end
  32 + end
  33 +
  34 + def apply_filter events
  35 + return events unless params.present?
  36 +
  37 + filter = params.dup
  38 +
  39 + actions = []
  40 + actions << Event::Pushed if filter.include? 'push'
  41 + actions << Event::Merged if filter.include? 'merged'
  42 +
  43 + if filter.include? 'team'
  44 + actions << Event::Joined
  45 + actions << Event::Left
  46 + end
  47 +
  48 + actions << Event::Commented if filter.include? 'comments'
  49 +
  50 + events = events.where(action: actions)
  51 + end
  52 +
  53 + def options key
  54 + filter = params.dup
  55 +
  56 + if filter.include? key
  57 + filter.delete key
  58 + else
  59 + filter << key
  60 + end
  61 +
  62 + filter
  63 + end
  64 +
  65 + def active? key
  66 + params.include? key
  67 + end
  68 +end
... ...