From f555578414347855be452cc8ee095c1304768c2b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 5 Nov 2012 20:12:26 +0200 Subject: [PATCH 1/2] Added EventFilter class. Compeleted first version of dashbaord filtering --- app/assets/images/event_filter_comments.png | Bin 0 -> 750 bytes app/assets/images/event_filter_merged.png | Bin 0 -> 463 bytes app/assets/images/event_filter_push.png | Bin 0 -> 632 bytes app/assets/images/event_filter_team.png | Bin 0 -> 1337 bytes app/assets/javascripts/main.js.coffee | 3 + app/assets/stylesheets/sections/events.scss | 31 +++++++++ app/controllers/dashboard_controller.rb | 11 +++- app/helpers/events_helper.rb | 18 ++++++ app/views/dashboard/index.html.haml | 7 ++ lib/event_filter.rb | 68 ++++++++++++++++++++ 10 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 app/assets/images/event_filter_comments.png create mode 100644 app/assets/images/event_filter_merged.png create mode 100644 app/assets/images/event_filter_push.png create mode 100644 app/assets/images/event_filter_team.png create mode 100644 lib/event_filter.rb diff --git a/app/assets/images/event_filter_comments.png b/app/assets/images/event_filter_comments.png new file mode 100644 index 0000000000000000000000000000000000000000..aed113faa7ae70e5c5fbe307ff24d5be39258d1f GIT binary patch literal 750 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyw< z5E>e|PZtIN00M4FL_t(Y$F-GBh>lSd$AAB~x1o&kvA{yc*1|}N#iWsh)hv_+&m9XE zLXsjZrYtm?Qj$VR={#9j84Dj%YFH_=o5{*Xp?u_HiWt)z3-_7s`*eLY!>Omz+%~gI(*#9Ptd}$hEMXSr z-jevqvMkRkgdpIeyC0C$vOWrMcYh6xNqPW$0y=@sz%qBAC&`nFRQuk$`>JNF`I?Lx zNg4;vNjh(44d?3&8%Q$v+9|;4y>I8sR|l8{l{pb{MD# zKF3%KU^9CirR6okeo3F){e+~sz;#J)fG5eac{#D!5&=D_Q&$HIcjF<1&<5Oc_wC6=t8i8{ zV%NXddLVb7V%A(%{_9bHlU>vvxJOgf; z*;_Kh>8~w>&<)%N+F~Zp&1_}v1)7nW*)XsLcvs8h-w;HSN5BqupZL`~J}ZKXMABAZ glK*KTgw9<22g1kw?GASPt^fc407*qoM6N<$g1Qw^R{#J2 literal 0 HcmV?d00001 diff --git a/app/assets/images/event_filter_merged.png b/app/assets/images/event_filter_merged.png new file mode 100644 index 0000000000000000000000000000000000000000..30aea0b6e55985cc8e881d952d1f4282cc80a046 GIT binary patch literal 463 zcmV;=0WkiFP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye{ z2@)MQM<#Fp00B=)L_t(I%iWW)N&`U>B?r-G$o6;>qnTBxX}7J`_wnZUB-%q4aXEZoff`|bRG>s4j@B>kWXKTjC0O|k$002ovPDHLk FV1kZ7yrKXA literal 0 HcmV?d00001 diff --git a/app/assets/images/event_filter_push.png b/app/assets/images/event_filter_push.png new file mode 100644 index 0000000000000000000000000000000000000000..930faee6aa2a441ab0805910cf815212f95cfe83 GIT binary patch literal 632 zcmV-;0*C#HP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye{ z2@)=dmq%s*00H<(L_t(I%dOPEYZOrs2k_5rB!qySkQ9rWUSc5#Tck)33yF|2!Y#qG zNm8Xxy88ptd5wwDhdL)eaTyKl;~k!2x6HHe)whirusJ-#2oCWWUG#7jO^o3f3uT_YI1w-n#X45- z2JJG>-k(sxHLPI{oifjs>w?zPQ1sGJEY;j4X()zj{H-(;f6`EN`o3hK%oQw`dDf{( z>H!{Aon@YFqJ_mY6isME0zTtynP;;#Smm4Gx9<9Hd_?OPAe(@0wKX}6#Cj3vRjQL?IdvpEnqGUMXM6{6W{P9 zp0CkYRnk0`$~-%23|!pDB3gs;iqafp|3?Mv3AV~SyH~fqIuZ1BTwmQ&dbS!f+w6m# zv|yXqh>F;c3g|D`$=IHW*t4ZF&o)lo*b($Rrs6ow#0?Dx*hauknP*4Uw|@aR*tis< Sh#*h^0000002t}0ssI2w=C_w00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyw< z5&{UyX)1XD00g;7L_t(|+TB~rZt5@)C5}TvLWo<0D4=#j|NnQoVON1lQ4vY=bnN&p zA|Z4Gf#5L>%&v$UAJ5~=jK|tyvFJRspw6Sq<0Hhk`5Df6Q52kWA;kVeP1AH;M+oV< zey<3H5R}q9&kuneN}lH>RMRvK!?-hqS(Z^si=w#X%W)j*x^5VTX_|L{PzVvnF=MQ$ zC3DUhW43K;n%3S(BZP>es42X?Fvg-NI<#uedAks%X)3uV&UqZi`#&Y)5C&1&-l!<0 zS(eGKndf7n(+zroCS8k9BzHB$DoT zH0rd7Ef`}U9(X8}QpOm@_>cW??=~u^Reo78gy1F$wJZV*42sgDw)o+Hb;G0SPza$; zhmtG9=&&dXMF`8qWfC_S9U_D%r7GYt#t=e(Z>43mu1JTHl@wT{!5FI`3`x3&WDCo( zRJfviUWx&?;`=_Vt#Z!)KJ$jEQ`IetTIDk;P7QKTmSr7wALOOm?Y5%E-;3iofZ?<# z3deEUg%Fl77-N=YwF@DXUBP-aaBKi{MX199)}iA#aKt+rCe7!*SIdke!b z_l)Io8*DjkB@7$mQ%K!`Dx>3_p! z@Je*p@At2EMInT3+igeay6)ANDruS$LLd#QqeeW>3&XG}r*X~)g8^(Yt!iRuG#XvO zib;~Zyu85fL={3^*WcdWeBZzD&a@~B-}hf%U%|T}3a7q2&zsF=zVDX9d zo56Y@ydS1%`d=b>I`@3GRd%YeZL?*?NMHq(R zZnxXt)M}bGolZ{`K53ffc^*Yk$(c1XUP+RyR;zuDVp$d;q~Gt~4q-X?^z-vmt#@@@ zpUq}6X&0q*xm;Fr28{7=IPCZPjgsER2!#+q5Nx;G8csJ1V>+E)2a-}++H*}#_w@AS zy6%Nhw*f-Vc@PA<-R_cn1tByZkDJ<67>4Wh`VxXc2oXXEA!l)3iZBer&1TcI2QwH9 zo}ZsDQ6{ByyWIvs(2VO48V-kqkQ%!^k1)^k@9*z2JY3h0ux)!V7}&O5J@0ZzF9?D- zj<4>0bi3WjWO6EKok5tU>2kRQnN2FUQjP<6I-M-b$_Zka#08JVmG_WAj# zXix@RN}{TQL^W|`wOZW^yfVmteSK9ojA~M0MT1=GB+v6|9L6=Arfy0`of@kH|8=#6 zqUQnXELamj@e~ # 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 From 949233aa1f205d81283e21c6804975ee2481bd54 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Tue, 6 Nov 2012 13:47:43 +0200 Subject: [PATCH 2/2] Changed default icon for gravatar. Moved filter out of layout --- app/assets/stylesheets/sections/events.scss | 7 +------ app/helpers/application_helper.rb | 2 +- app/views/dashboard/index.html.haml | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/sections/events.scss b/app/assets/stylesheets/sections/events.scss index f39796e9949..99523639fe7 100644 --- a/app/assets/stylesheets/sections/events.scss +++ b/app/assets/stylesheets/sections/events.scss @@ -123,6 +123,7 @@ .event_filter { position: absolute; width: 40px; + margin-left: -50px; .filter_icon { float: left; @@ -140,9 +141,3 @@ } } } - -.activities { - .content_list { - margin-left:50px; - } -} diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a4d36c9bbc8..cba34c963a0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -36,7 +36,7 @@ module ApplicationHelper 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 diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml index 023d3213ff0..d0882c6dab7 100644 --- a/app/views/dashboard/index.html.haml +++ b/app/views/dashboard/index.html.haml @@ -13,7 +13,7 @@ - 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?