Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/images/event_filter_comments.pngbin0 -> 750 bytes
-rw-r--r--app/assets/images/event_filter_merged.pngbin0 -> 463 bytes
-rw-r--r--app/assets/images/event_filter_push.pngbin0 -> 632 bytes
-rw-r--r--app/assets/images/event_filter_team.pngbin0 -> 1337 bytes
-rw-r--r--app/assets/javascripts/main.js.coffee3
-rw-r--r--app/assets/stylesheets/sections/events.scss31
-rw-r--r--app/controllers/dashboard_controller.rb11
-rw-r--r--app/helpers/events_helper.rb18
-rw-r--r--app/views/dashboard/index.html.haml7
-rw-r--r--lib/event_filter.rb68
10 files changed, 137 insertions, 1 deletions
diff --git a/app/assets/images/event_filter_comments.png b/app/assets/images/event_filter_comments.png
new file mode 100644
index 00000000000..aed113faa7a
--- /dev/null
+++ b/app/assets/images/event_filter_comments.png
Binary files differ
diff --git a/app/assets/images/event_filter_merged.png b/app/assets/images/event_filter_merged.png
new file mode 100644
index 00000000000..30aea0b6e55
--- /dev/null
+++ b/app/assets/images/event_filter_merged.png
Binary files differ
diff --git a/app/assets/images/event_filter_push.png b/app/assets/images/event_filter_push.png
new file mode 100644
index 00000000000..930faee6aa2
--- /dev/null
+++ b/app/assets/images/event_filter_push.png
Binary files differ
diff --git a/app/assets/images/event_filter_team.png b/app/assets/images/event_filter_team.png
new file mode 100644
index 00000000000..2dc66c85165
--- /dev/null
+++ b/app/assets/images/event_filter_team.png
Binary files differ
diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee
index fb82f799007..04e6b2ef9d1 100644
--- a/app/assets/javascripts/main.js.coffee
+++ b/app/assets/javascripts/main.js.coffee
@@ -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"]', @)
diff --git a/app/assets/stylesheets/sections/events.scss b/app/assets/stylesheets/sections/events.scss
index 17df600c1af..f39796e9949 100644
--- a/app/assets/stylesheets/sections/events.scss
+++ b/app/assets/stylesheets/sections/events.scss
@@ -115,3 +115,34 @@
margin: -3px;
}
}
+
+/**
+ * Event filter
+ *
+ */
+.event_filter {
+ position: absolute;
+ width: 40px;
+
+ .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;
+ }
+ }
+}
+
+.activities {
+ .content_list {
+ margin-left:50px;
+ }
+}
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index af23f970a6d..012d86764ab 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/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|
@@ -34,4 +39,8 @@ class DashboardController < ApplicationController
format.atom { render layout: false }
end
end
+
+ def event_filter
+ @event_filter ||= EventFilter.new(params[:event_filter])
+ end
end
diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb
index 0eb87caadd7..a2548a23e5e 100644
--- a/app/helpers/events_helper.rb
+++ b/app/helpers/events_helper.rb
@@ -33,4 +33,22 @@ module EventsHelper
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
diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml
index 6c4ff96bb50..023d3213ff0 100644
--- a/app/views/dashboard/index.html.haml
+++ b/app/views/dashboard/index.html.haml
@@ -3,6 +3,13 @@
.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
diff --git a/lib/event_filter.rb b/lib/event_filter.rb
new file mode 100644
index 00000000000..14ab0193bf1
--- /dev/null
+++ b/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