Commit 28c193d4053eceaa19d147b8bc3124484d61b442
Committed by
Antonio Terceiro
1 parent
5bf571f1
Exists in
master
and in
29 other branches
Join community and add member through ajax
Also: * Adding links to the profile-image balloon. * Removing add-friend and join-community confirmation steps.
Showing
19 changed files
with
222 additions
and
318 deletions
Show diff stats
app/controllers/my_profile/friends_controller.rb
... | ... | @@ -8,18 +8,6 @@ class FriendsController < MyProfileController |
8 | 8 | end |
9 | 9 | end |
10 | 10 | |
11 | - def add | |
12 | - @friend = Person.find(params[:id]) | |
13 | - if request.post? && params[:confirmation] | |
14 | - # FIXME this shouldn't be in Person model? | |
15 | - AddFriend.create!(:person => profile, :friend => @friend, :group_for_person => params[:group]) | |
16 | - | |
17 | - session[:notice] = _('%s still needs to accept being your friend.') % @friend.name | |
18 | - # FIXME shouldn't redirect to the friend's page? | |
19 | - redirect_to :action => 'index' | |
20 | - end | |
21 | - end | |
22 | - | |
23 | 11 | def remove |
24 | 12 | @friend = profile.friends.find(params[:id]) |
25 | 13 | if request.post? && params[:confirmation] | ... | ... |
app/controllers/public/profile_controller.rb
1 | 1 | class ProfileController < PublicController |
2 | 2 | |
3 | 3 | needs_profile |
4 | - before_filter :check_access_to_profile, :except => [:join, :index] | |
5 | - before_filter :store_before_join, :only => [:join] | |
6 | - before_filter :login_required, :only => [:join, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_scraps, :view_more_activities, :view_more_network_activities] | |
4 | + before_filter :check_access_to_profile, :except => [:join, :join_not_logged, :index] | |
5 | + before_filter :store_before_join, :only => [:join, :join_not_logged] | |
6 | + before_filter :login_required, :only => [:join, :join_not_logged, :leave, :unblock, :leave_scrap, :remove_scrap, :remove_activity, :view_more_scraps, :view_more_activities, :view_more_network_activities] | |
7 | 7 | |
8 | 8 | helper TagsHelper |
9 | 9 | |
... | ... | @@ -82,18 +82,26 @@ class ProfileController < PublicController |
82 | 82 | end |
83 | 83 | |
84 | 84 | def join |
85 | - @wizard = params[:wizard] | |
86 | - if request.post? && params[:confirmation] | |
87 | - profile.add_member(current_user.person) | |
88 | - session[:notice] = _('%s administrator still needs to accept you as member.') % profile.name if profile.closed? | |
89 | - if @wizard | |
90 | - redirect_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true | |
85 | + if !user.memberships.include?(profile) | |
86 | + profile.add_member(user) | |
87 | + if profile.closed? | |
88 | + render :text => _('%s administrator still needs to accept you as member.') % profile.name | |
91 | 89 | else |
92 | - redirect_to_before_join | |
90 | + render :text => _('You just became a member of %s.') % profile.name | |
93 | 91 | end |
94 | 92 | else |
95 | - if current_user.person.memberships.include?(profile) | |
96 | - session[:notice] = _('You are already a member of "%s"') % profile.name | |
93 | + render :text => _('You are already a member of %s.') % profile.name | |
94 | + end | |
95 | + end | |
96 | + | |
97 | + def join_not_logged | |
98 | + if request.post? | |
99 | + profile.add_member(user) | |
100 | + session[:notice] = _('%s administrator still needs to accept you as member.') % profile.name if profile.closed? | |
101 | + redirect_to_before_join | |
102 | + else | |
103 | + if user.memberships.include?(profile) | |
104 | + session[:notice] = _('You are already a member of %s') % profile.name | |
97 | 105 | redirect_to profile.url |
98 | 106 | return |
99 | 107 | end |
... | ... | @@ -104,20 +112,37 @@ class ProfileController < PublicController |
104 | 112 | end |
105 | 113 | |
106 | 114 | def leave |
107 | - @wizard = params[:wizard] | |
108 | - @back_to = params[:back_to] || request.referer | |
109 | - if request.post? && params[:confirmation] | |
115 | + if user.memberships.include?(profile) | |
110 | 116 | profile.remove_member(current_user.person) |
111 | - if @wizard | |
112 | - redirect_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true | |
113 | - else | |
114 | - back = @back_to || profile.url | |
115 | - redirect_to back | |
116 | - end | |
117 | + render :text => _('You just left %s.') % profile.name | |
117 | 118 | else |
118 | - if request.xhr? | |
119 | - render :layout => false | |
120 | - end | |
119 | + render :text => _('You are already a member of %s.') % profile.name | |
120 | + end | |
121 | + end | |
122 | + | |
123 | + def check_membership | |
124 | + if user.memberships.include?(profile) | |
125 | + render :text => 'true' | |
126 | + else | |
127 | + render :text => 'false' | |
128 | + end | |
129 | + end | |
130 | + | |
131 | + def add | |
132 | + # FIXME this shouldn't be in Person model? | |
133 | + if !user.memberships.include?(profile) | |
134 | + AddFriend.create!(:person => user, :friend => profile) | |
135 | + render :text => _('%s still needs to accept being your friend.') % profile.name | |
136 | + else | |
137 | + render :text => _('You are already a friend of %s.') % profile.name | |
138 | + end | |
139 | + end | |
140 | + | |
141 | + def check_friendship | |
142 | + if user == profile || user.already_request_friendship?(profile) || user.is_a_friend?(profile) | |
143 | + render :text => 'true' | |
144 | + else | |
145 | + render :text => 'false' | |
121 | 146 | end |
122 | 147 | end |
123 | 148 | ... | ... |
app/helpers/application_helper.rb
... | ... | @@ -515,24 +515,27 @@ module ApplicationHelper |
515 | 515 | if environment.enabled?(:show_balloon_with_profile_links_when_clicked) |
516 | 516 | if profile.kind_of?(Person) |
517 | 517 | [ |
518 | - {_('Home Page') => url_for(profile.url)}, | |
519 | - {_('Wall') => url_for(profile.public_profile_url)}, | |
520 | - {_('Friends') => url_for(:controller => :profile, :action => :friends, :profile => profile.identifier)}, | |
521 | - {_('Communities') => url_for(:controller => :profile, :action => :communities, :profile => profile.identifier)} | |
518 | + {_('Wall') => {:href => url_for(profile.public_profile_url)}}, | |
519 | + {_('Friends') => {:href => url_for(:controller => :profile, :action => :friends, :profile => profile.identifier)}}, | |
520 | + {_('Communities') => {:href => url_for(:controller => :profile, :action => :communities, :profile => profile.identifier)}}, | |
521 | + {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email'}}, | |
522 | + {_('Add') => {:href => url_for(profile.add_url), :class => 'add-friend'}} | |
522 | 523 | ] |
523 | 524 | elsif profile.kind_of?(Community) |
524 | 525 | [ |
525 | - {_('Home Page') => url_for(profile.url)}, | |
526 | - {_('Wall') => url_for(profile.public_profile_url)}, | |
527 | - {_('Members') => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}, | |
528 | - {_('Agenda') => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)} | |
526 | + {_('Wall') => {:href => url_for(profile.public_profile_url)}}, | |
527 | + {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, | |
528 | + {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, | |
529 | + {_('Join') => {:href => url_for(profile.join_url), :class => 'join-community'}}, | |
530 | + {_('Leave') => {:href => url_for(profile.leave_url), :class => 'leave-community'}}, | |
531 | + {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email'}} | |
529 | 532 | ] |
530 | 533 | elsif profile.kind_of?(Enterprise) |
531 | 534 | [ |
532 | - {_('Home Page') => url_for(profile.url)}, | |
533 | - {_('Products') => catalog_path(profile.identifier)}, | |
534 | - {_('Members') => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}, | |
535 | - {_('Agenda') => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)} | |
535 | + {_('Products') => {:href => catalog_path(profile.identifier)}}, | |
536 | + {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, | |
537 | + {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, | |
538 | + {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email'}}, | |
536 | 539 | ] |
537 | 540 | else |
538 | 541 | [] |
... | ... | @@ -543,17 +546,24 @@ module ApplicationHelper |
543 | 546 | # displays a link to the profile homepage with its image (as generated by |
544 | 547 | # #profile_image) and its name below it. |
545 | 548 | def profile_image_link( profile, size=:portrait, tag='li', extra_info = nil ) |
546 | - if profile.class == Person | |
547 | - name = profile.short_name | |
549 | + name = profile.short_name | |
550 | + if profile.person? | |
548 | 551 | city = content_tag 'span', content_tag( 'span', profile.city, :class => 'locality' ), :class => 'adr' |
552 | + url = url_for(profile.check_friendship_url) | |
553 | + trigger_class = 'person-trigger' | |
549 | 554 | else |
550 | - name = profile.short_name | |
551 | 555 | city = '' |
556 | + url = url_for(profile.check_membership_url) | |
557 | + if profile.community? | |
558 | + trigger_class = 'community-trigger' | |
559 | + elsif profile.enterprise? | |
560 | + trigger_class = 'enterprise-trigger' | |
561 | + end | |
552 | 562 | end |
553 | 563 | extra_info = extra_info.nil? ? '' : content_tag( 'span', extra_info, :class => 'extra_info' ) |
554 | 564 | links = links_for_balloon(profile) |
555 | 565 | content_tag tag, |
556 | - (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? link_to( content_tag( 'span', _('Profile links')), '#', :onclick => "toggleSubmenu(this, '#{profile.short_name}', #{links.to_json}); return false", :class => 'menu-submenu-trigger' ) : "") + | |
566 | + (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? link_to( content_tag( 'span', _('Profile links')), '#', :onclick => "toggleSubmenu(this, '#{profile.short_name}', #{links.to_json}); return false", :class => "menu-submenu-trigger #{trigger_class}", :url => url) : "") + | |
557 | 567 | link_to( |
558 | 568 | content_tag( 'span', profile_image( profile, size ), :class => 'profile-image' ) + |
559 | 569 | content_tag( 'span', h(name), :class => ( profile.class == Person ? 'fn' : 'org' ) ) + |
... | ... | @@ -571,8 +581,9 @@ module ApplicationHelper |
571 | 581 | def community_image_link( profile, size=:portrait, tag='li' ) |
572 | 582 | name = h(profile.name) |
573 | 583 | links = links_for_balloon(profile) |
584 | + url = url_for(profile.check_membership_url) | |
574 | 585 | content_tag tag, |
575 | - (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? link_to( content_tag( 'span', _('Profile links')), '#', :onclick => "toggleSubmenu(this, '#{profile.short_name}', #{links.to_json}); return false", :class => 'menu-submenu-trigger' ) : "") + | |
586 | + (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? link_to( content_tag( 'span', _('Profile links')), '#', :onclick => "toggleSubmenu(this, '#{profile.short_name}', #{links.to_json}); return false", :class => 'menu-submenu-trigger community-trigger', :url => url) : "") + | |
576 | 587 | link_to( |
577 | 588 | content_tag( 'span', profile_image( profile, size ), :class => 'profile-image' ) + |
578 | 589 | content_tag( 'span', name, :class => 'org' ) + | ... | ... |
app/models/profile.rb
... | ... | @@ -426,6 +426,22 @@ class Profile < ActiveRecord::Base |
426 | 426 | { :profile => identifier, :controller => 'profile', :action => 'join' } |
427 | 427 | end |
428 | 428 | |
429 | + def join_not_logged_url | |
430 | + { :profile => identifier, :controller => 'profile', :action => 'join_not_logged' } | |
431 | + end | |
432 | + | |
433 | + def check_membership_url | |
434 | + { :profile => identifier, :controller => 'profile', :action => 'check_membership' } | |
435 | + end | |
436 | + | |
437 | + def add_url | |
438 | + { :profile => identifier, :controller => 'profile', :action => 'add' } | |
439 | + end | |
440 | + | |
441 | + def check_friendship_url | |
442 | + { :profile => identifier, :controller => 'profile', :action => 'check_friendship' } | |
443 | + end | |
444 | + | |
429 | 445 | def public_profile_url |
430 | 446 | generate_url(:profile => identifier, :controller => 'profile', :action => 'index') |
431 | 447 | end | ... | ... |
app/views/blocks/profile_info_actions/community.rhtml
... | ... | @@ -3,12 +3,14 @@ |
3 | 3 | |
4 | 4 | <% if profile.members.include?(user) %> |
5 | 5 | <li> |
6 | - <%= lightbox_link_to content_tag('span', _('Leave')), profile.leave_url, :class => 'button with-text icon-delete', :title => _('Leave this community') %> | |
6 | + <%= button(:delete, content_tag('span', __('Leave')), profile.leave_url, :class => 'leave-community', :title => _("Leave community"), :style => 'position: relative;') %> | |
7 | + <%= button(:add, content_tag('span', __('Join')), profile.join_url, :class => 'join-community', :title => _("Join community"), :style => 'position: relative; display: none;') %> | |
7 | 8 | </li> |
8 | 9 | <% else %> |
9 | 10 | <% unless profile.already_request_membership?(user) %> |
10 | 11 | <li> |
11 | - <%= lightbox_link_to content_tag('span', _('Join')), profile.join_url, :class => 'button with-text icon-add', :title => _('Join this community') %> | |
12 | + <%= button(:delete, content_tag('span', __('Leave')), profile.leave_url, :class => 'leave-community', :title => _("Leave community"), :style => 'position: relative; display: none;') %> | |
13 | + <%= button(:add, content_tag('span', __('Join')), profile.join_url, :class => 'join-community', :title => _("Join community"), :style => 'position: relative;') %> | |
12 | 14 | </li> |
13 | 15 | <% end %> |
14 | 16 | <% end %> |
... | ... | @@ -22,7 +24,7 @@ |
22 | 24 | <% else %> |
23 | 25 | |
24 | 26 | <li> |
25 | - <%= link_to content_tag('span', _('Join')), profile.join_url, :class => 'button with-text icon-add', :title => _('Join this community') %> | |
27 | + <%= link_to content_tag('span', _('Join')), profile.join_not_logged_url, :class => 'button with-text icon-add', :title => _('Join this community') %> | |
26 | 28 | </li> |
27 | 29 | |
28 | 30 | <% end %> | ... | ... |
app/views/blocks/profile_info_actions/person.rhtml
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 | <%if logged_in? && (user != profile) %> |
3 | 3 | |
4 | 4 | <% if !user.already_request_friendship?(profile) and !user.is_a_friend?(profile) %> |
5 | - <li><%= link_to content_tag('span', __('Add friend')), user.url.merge(:controller => 'friends', :action => 'add', :id => profile.id), :class => 'button with-text icon-add' %></li> | |
5 | + <li> | |
6 | + <%= button(:add, content_tag('span', __('Add friend')), profile.add_url, :class => 'add-friend', :title => _("Add friend"), :style => 'position: relative;') %> | |
7 | + </li> | |
6 | 8 | <% end %> |
7 | 9 | |
8 | 10 | <% if user.is_a_friend?(profile) && profile.enable_contact? %> | ... | ... |
app/views/friends/add.rhtml
... | ... | @@ -1,26 +0,0 @@ |
1 | -<h1><%= __('Adding %s as a friend') % @friend.name %></h1> | |
2 | - | |
3 | -<p> | |
4 | -<%= __('Are you sure you want to add %s as your friend?') % @friend.name %> | |
5 | -</p> | |
6 | - | |
7 | -<p> | |
8 | -<em> | |
9 | -<%= __('Note that %s will need to accept being added as your friend.') % @friend.name %> | |
10 | -</em> | |
11 | -</p> | |
12 | - | |
13 | -<% form_tag do %> | |
14 | - <%= hidden_field_tag(:confirmation, 1) %> | |
15 | - | |
16 | - <div class="add-friend-tags"> | |
17 | - <%= __('Classify your new friend %s: ') % @friend.name %> | |
18 | - <%= text_field_with_local_autocomplete('group', profile.suggested_friend_groups, :maxlength => 150) %> | |
19 | - <p> | |
20 | - <%= _('Suggestions: %s') % profile.suggested_friend_groups.join(', ') %> | |
21 | - </p> | |
22 | - </div> | |
23 | - | |
24 | - <%= submit_button(:ok, __("Yes, I want to add %s as my friend") % @friend.name) %> | |
25 | - <%= button(:cancel, _("No, I don't want"), :action => 'index') %> | |
26 | -<% end %> |
app/views/layouts/_javascript.rhtml
1 | -<%= javascript_include_tag :defaults, 'jquery-latest.js', 'jquery.noconflict.js', 'jquery.cycle.all.min.js', 'thickbox.js', 'lightbox', 'jquery-ui-1.8.2.custom.min', 'jquery.scrollTo', 'jquery.form.js', 'jquery.cookie', 'reflection', :cache => 'cache-general' %> | |
1 | +<%= javascript_include_tag :defaults, 'jquery-latest.js', 'jquery.noconflict.js', 'jquery.cycle.all.min.js', 'thickbox.js', 'lightbox', 'jquery-ui-1.8.2.custom.min', 'jquery.scrollTo', 'jquery.form.js', 'jquery.cookie', 'reflection', 'add-and-join', :cache => 'cache-general' %> | ... | ... |
app/views/profile/_private_profile.rhtml
... | ... | @@ -7,10 +7,10 @@ |
7 | 7 | |
8 | 8 | <% button_bar do %> |
9 | 9 | <% if @action == :join && logged_in? %> |
10 | - <%= lightbox_link_to content_tag('span', _('Join')), profile.join_url, :class => 'button with-text icon-add', :title => _('Join this community') %> | |
10 | + <%= button(:add, content_tag('span', __('Join')), profile.join_url, :class => 'join-community', :title => _("Join community"), :style => 'position: relative;') %> | |
11 | 11 | <% end %> |
12 | 12 | <% if @action == :add_friend && logged_in? && !user.already_request_friendship?(profile) %> |
13 | - <%= link_to content_tag('span', __('Add friend')), user.url.merge(:controller => 'friends', :action => 'add', :id => profile.id), :class => 'button with-text icon-add' %> | |
13 | + <%= button(:add, content_tag('span', __('Add friend')), profile.add_url, :class => 'add-friend', :title => _("Add friend"), :style => 'position: relative;') %> | |
14 | 14 | <% end %> |
15 | 15 | <%= button :back, _('Go back'), :back %> |
16 | 16 | <%= button :home, _("Go to %s home page") % environment.name, :controller => 'home' %> | ... | ... |
features/balloon.feature
... | ... | @@ -38,7 +38,6 @@ Feature: balloon |
38 | 38 | When I click ".menu-submenu-trigger" |
39 | 39 | Then I should see "Profile" |
40 | 40 | And I should see "Friends" |
41 | - And I should see "Home Page" | |
42 | 41 | |
43 | 42 | @selenium |
44 | 43 | Scenario: I should see balloon when clicked on community block trigger |
... | ... | @@ -71,4 +70,3 @@ Feature: balloon |
71 | 70 | When I click ".menu-submenu-trigger" |
72 | 71 | Then I should see "Members" |
73 | 72 | And I should see "Agenda" |
74 | - And I should see "Home Page" | ... | ... |
features/join_community.feature
... | ... | @@ -1,24 +0,0 @@ |
1 | -Feature: join a community | |
2 | - As a user | |
3 | - I want to join a community | |
4 | - In order to interact with other people | |
5 | - | |
6 | - Background: | |
7 | - Given the following users | |
8 | - | login | name | | |
9 | - | joaosilva | Joao Silva | | |
10 | - Given the following communities | |
11 | - | identifier | name | | |
12 | - | sample-community | Sample Community | | |
13 | - | |
14 | - Scenario: ask confirmation before join community | |
15 | - Given I am logged in as "joaosilva" | |
16 | - And I am on Sample Community's homepage | |
17 | - When I follow "Join" | |
18 | - Then I should see "Are you sure you want to join Sample Community" | |
19 | - | |
20 | - Scenario: dont ask confirmation before join community if already member | |
21 | - Given joaosilva is member of sample-community | |
22 | - And I am logged in as "joaosilva" | |
23 | - When I go to /profile/sample-community | |
24 | - Then I should not see "Are you sure you want to join Community to join" |
features/my_network_block.feature
... | ... | @@ -23,7 +23,6 @@ Feature: my_network_block |
23 | 23 | Then I should see "2 communities" |
24 | 24 | When I go to Public Community's homepage |
25 | 25 | And I follow "Join" |
26 | - And I press "Yes, I want to join." | |
27 | 26 | When I go to Joao Silva's homepage |
28 | 27 | Then I should see "3 communities" |
29 | 28 | |
... | ... | @@ -37,7 +36,6 @@ Feature: my_network_block |
37 | 36 | Then I should see "One community" |
38 | 37 | When I go to Public Community's homepage |
39 | 38 | And I follow "Join" |
40 | - And I press "Yes, I want to join." | |
41 | 39 | When I go to Joao Silva's homepage |
42 | 40 | Then I should see "2 communities" |
43 | 41 | ... | ... |
features/private_profile.feature
... | ... | @@ -17,7 +17,6 @@ Feature: private profiles |
17 | 17 | When I go to Safernet's homepage |
18 | 18 | Then I should see "members only" |
19 | 19 | When I follow "Join" |
20 | - And I press "Yes, I want to join" | |
21 | 20 | And "joao" is accepted on community "Safernet" |
22 | 21 | Then "joao" should be a member of "Safernet" |
23 | 22 | When I go to Safernet's homepage |
... | ... | @@ -27,5 +26,4 @@ Feature: private profiles |
27 | 26 | Given I am logged in as "joao" |
28 | 27 | When I go to shygirl's homepage |
29 | 28 | Then I should see "friends only" |
30 | - When I follow "Add friend" | |
31 | - And I press "Yes, I want" | |
29 | + And I follow "Add friend" | ... | ... |
... | ... | @@ -0,0 +1,94 @@ |
1 | +jQuery(function($) { | |
2 | + | |
3 | + $(".add-friend").live('click', function(){ | |
4 | + clicked = $(this) | |
5 | + url = clicked.attr("href"); | |
6 | + loading_for_button(this); | |
7 | + $.post(url, function(data){ | |
8 | + clicked.fadeOut(); | |
9 | + display_notice(data); | |
10 | + }); | |
11 | + return false; | |
12 | + }) | |
13 | + | |
14 | + $(".join-community").live('click', function(){ | |
15 | + clicked = $(this) | |
16 | + url = clicked.attr("href"); | |
17 | + loading_for_button(this); | |
18 | + $.post(url, function(data){ | |
19 | + clicked.fadeOut(function(){ | |
20 | + clicked.css("display","none"); | |
21 | + clicked.parent().parent().find(".leave-community").fadeIn(); | |
22 | + clicked.parent().parent().find(".leave-community").css("display", ""); | |
23 | + }); | |
24 | + clicked.css("cursor",""); | |
25 | + $(".small-loading").remove(); | |
26 | + display_notice(data); | |
27 | + }); | |
28 | + return false; | |
29 | + }) | |
30 | + | |
31 | + $(".leave-community").live('click', function(){ | |
32 | + clicked = $(this) | |
33 | + url = clicked.attr("href"); | |
34 | + loading_for_button(this); | |
35 | + $.post(url, function(data){ | |
36 | + clicked.fadeOut(function(){ | |
37 | + clicked.css("display","none"); | |
38 | + clicked.parent().parent().find(".join-community").fadeIn(); | |
39 | + clicked.parent().parent().find(".join-community").css("display", ""); | |
40 | + }); | |
41 | + clicked.css("cursor",""); | |
42 | + $(".small-loading").remove(); | |
43 | + display_notice(data); | |
44 | + }); | |
45 | + return false; | |
46 | + }) | |
47 | + | |
48 | + $(".person-trigger").click(function(){ | |
49 | + clicked = $(this); | |
50 | + url = clicked.attr("url"); | |
51 | + $.get(url, function(data){ | |
52 | + if(data == "true"){ | |
53 | + clicked.parent().find(".add-friend").fadeOut(function(){ | |
54 | + clicked.parent().find(".send-an-email").fadeIn(); | |
55 | + }) | |
56 | + } | |
57 | + else if(data == "false"){ | |
58 | + clicked.parent().find(".send-an-email").fadeOut(function(){ | |
59 | + clicked.parent().find(".add-friend").fadeIn(); | |
60 | + }); | |
61 | + } | |
62 | + }) | |
63 | + }) | |
64 | + | |
65 | + $(".community-trigger").click(function(){ | |
66 | + clicked = $(this); | |
67 | + url = clicked.attr("url"); | |
68 | + $.get(url, function(data){ | |
69 | + if(data == "true"){ | |
70 | + clicked.parent().find(".join-community").fadeOut(function(){ | |
71 | + clicked.parent().find(".leave-community").fadeIn(); | |
72 | + clicked.parent().find(".send-an-email").fadeIn(); | |
73 | + }); | |
74 | + } | |
75 | + else if(data == "false"){ | |
76 | + clicked.parent().find(".send-an-email").fadeOut(); | |
77 | + clicked.parent().find(".leave-community").fadeOut(function(){ | |
78 | + clicked.parent().find(".join-community").fadeIn(); | |
79 | + }); | |
80 | + } | |
81 | + }) | |
82 | + }) | |
83 | + | |
84 | + $(".enterprise-trigger").click(function(){ | |
85 | + clicked = $(this); | |
86 | + url = clicked.attr("url"); | |
87 | + $.get(url, function(data){ | |
88 | + if(data == "true") | |
89 | + clicked.parent().find(".send-an-email").fadeIn(); | |
90 | + else if(data == "false") | |
91 | + clicked.parent().find(".send-an-email").fadeOut(); | |
92 | + }) | |
93 | + }) | |
94 | +}); | ... | ... |
public/javascripts/application.js
... | ... | @@ -263,7 +263,11 @@ function toggleSubmenu(trigger, title, link_list) { |
263 | 263 | content.append('<h4>' + title + '</h4>'); |
264 | 264 | jQuery.each(link_list, function(index, link_hash) { |
265 | 265 | for (label in link_hash) { |
266 | - list.append('<li><a href="' + link_hash[label] + '">' + label + '</a></li>'); | |
266 | + options = ""; | |
267 | + jQuery.each(link_hash[label], function(option, value){ | |
268 | + options += option +'="'+ value + '" '; | |
269 | + }) | |
270 | + list.append('<li><a '+ options +'">' + label + '</a></li>'); | |
267 | 271 | } |
268 | 272 | }); |
269 | 273 | content.append(list); | ... | ... |
public/stylesheets/application.css
test/functional/friends_controller_test.rb
... | ... | @@ -34,23 +34,6 @@ class FriendsControllerTest < Test::Unit::TestCase |
34 | 34 | assert_kind_of Array, assigns(:friends) |
35 | 35 | end |
36 | 36 | |
37 | - should 'confirm addition of new friend' do | |
38 | - get :add, :id => friend.id | |
39 | - | |
40 | - assert_response :success | |
41 | - assert_template 'add' | |
42 | - | |
43 | - ok("must load the friend being added to display") { friend == assigns(:friend) } | |
44 | - | |
45 | - end | |
46 | - | |
47 | - should 'actually add friend' do | |
48 | - assert_difference AddFriend, :count do | |
49 | - post :add, :id => friend.id, :confirmation => '1' | |
50 | - assert_response :redirect | |
51 | - end | |
52 | - end | |
53 | - | |
54 | 37 | should 'confirm removal of friend' do |
55 | 38 | profile.add_friend(friend) |
56 | 39 | ... | ... |
test/functional/profile_controller_test.rb
... | ... | @@ -76,49 +76,22 @@ class ProfileControllerTest < Test::Unit::TestCase |
76 | 76 | assert_kind_of Array, assigns(:favorite_enterprises) |
77 | 77 | end |
78 | 78 | |
79 | - should 'render join template without layout when called with AJAX' do | |
79 | + should 'not render any template when joining community due to Ajax request' do | |
80 | 80 | community = Community.create!(:name => 'my test community') |
81 | 81 | login_as(@profile.identifier) |
82 | - @request.expects(:xhr?).returns(true).at_least_once | |
83 | 82 | |
84 | 83 | get :join, :profile => community.identifier |
85 | 84 | assert_response :success |
86 | - assert_template 'join' | |
85 | + assert_template nil | |
87 | 86 | assert_no_tag :tag => 'html' |
88 | 87 | end |
89 | 88 | |
90 | - should 'render join template with layout in general' do | |
91 | - community = Community.create!(:name => 'my test community') | |
92 | - login_as(@profile.identifier) | |
93 | - @request.expects(:xhr?).returns(false).at_least_once | |
94 | - | |
95 | - get :join, :profile => community.identifier | |
96 | - assert_response :success | |
97 | - assert_template 'join' | |
98 | - assert_tag :tag => 'html' | |
99 | - end | |
100 | - | |
101 | - should 'show Join This Community button for non-member users' do | |
102 | - login_as(@profile.identifier) | |
103 | - community = Community.create!(:name => 'my test community') | |
104 | - get :index, :profile => community.identifier | |
105 | - assert_tag :tag => 'a', :attributes => { :href => "/profile/#{community.identifier}/join" } | |
106 | - end | |
107 | - | |
108 | - should 'not show Join This Community button for member users' do | |
89 | + should 'actually add friend' do | |
109 | 90 | login_as(@profile.identifier) |
110 | - community = Community.create!(:name => 'my test community') | |
111 | - community.add_member(@profile) | |
112 | - get :index, :profile => community.identifier | |
113 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{@profile.identifier}/memberships/join/#{community.id}" } | |
114 | - | |
115 | - end | |
116 | - | |
117 | - should 'not show Join This Community button for non-registered users' do | |
118 | - community = Community.create!(:name => 'my test community') | |
119 | - get :index, :profile => community.identifier | |
120 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{@profile.identifier}/memberships/leave/#{community.id}" } | |
121 | - | |
91 | + person = fast_create(Person) | |
92 | + assert_difference AddFriend, :count do | |
93 | + post :add, :profile => person.identifier | |
94 | + end | |
122 | 95 | end |
123 | 96 | |
124 | 97 | should 'not show enterprises link to enterprise' do |
... | ... | @@ -199,26 +172,10 @@ class ProfileControllerTest < Test::Unit::TestCase |
199 | 172 | assert_no_tag :tag => 'a', :child => { :tag => 'span', :content => 'Create a new community' } |
200 | 173 | end |
201 | 174 | |
202 | - should 'not show Leave This Community button for non-member users' do | |
203 | - login_as(@profile.identifier) | |
204 | - community = Community.create!(:name => 'my test community') | |
205 | - get :index, :profile => community.identifier | |
206 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{@profile.identifier}/memberships/leave/#{community.id}" } | |
207 | - end | |
208 | - | |
209 | - should 'show Leave This Community button for member users' do | |
210 | - login_as(@profile.identifier) | |
211 | - community = Community.create!(:name => 'my test community') | |
212 | - community.add_member(@profile) | |
213 | - get :index, :profile => community.identifier | |
214 | - assert_tag :tag => 'a', | |
215 | - :attributes => { :href => "/profile/#{community.identifier}/leave" } | |
216 | - end | |
217 | - | |
218 | 175 | should 'not show Leave This Community button for non-registered users' do |
219 | 176 | community = Community.create!(:name => 'my test community') |
220 | 177 | get :index, :profile => community.identifier |
221 | - assert_no_tag :tag => 'a', :attributes => { :href => "/myprofile/#{@profile.identifier}/memberships/leave/#{community.id}" } | |
178 | + assert_no_tag :tag => 'a', :attributes => { :href => "/profile/#{@profile.identifier}/leave" } | |
222 | 179 | end |
223 | 180 | |
224 | 181 | should 'check access before displaying profile' do |
... | ... | @@ -414,34 +371,13 @@ class ProfileControllerTest < Test::Unit::TestCase |
414 | 371 | assert_no_tag :tag => 'a', :attributes => { :href => "/contact/#{community.identifier}/new" } |
415 | 372 | end |
416 | 373 | |
417 | - should 'present confirmation before joining a profile' do | |
418 | - community = Community.create!(:name => 'my test community') | |
419 | - login_as @profile.identifier | |
420 | - get :join, :profile => community.identifier | |
421 | - | |
422 | - assert_response :success | |
423 | - assert_template 'join' | |
424 | - end | |
425 | - | |
426 | 374 | should 'actually join profile' do |
427 | 375 | community = Community.create!(:name => 'my test community') |
428 | 376 | login_as @profile.identifier |
429 | - post :join, :profile => community.identifier, :confirmation => '1' | |
430 | - | |
431 | - assert_response :redirect | |
432 | - assert_redirected_to community.url | |
433 | - | |
434 | - profile = Profile.find(@profile.id) | |
435 | - assert profile.memberships.include?(community), 'profile should be actually added to the community' | |
436 | - end | |
377 | + post :join, :profile => community.identifier | |
437 | 378 | |
438 | - should 'join profile from wizard' do | |
439 | - community = Community.create!(:name => 'my test community') | |
440 | - login_as @profile.identifier | |
441 | - post :join, :profile => community.identifier, :confirmation => '1', :wizard => true | |
442 | - | |
443 | - assert_response :redirect | |
444 | - assert_redirected_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true | |
379 | + assert_response :success | |
380 | + assert_template nil | |
445 | 381 | |
446 | 382 | profile = Profile.find(@profile.id) |
447 | 383 | assert profile.memberships.include?(community), 'profile should be actually added to the community' |
... | ... | @@ -451,7 +387,7 @@ class ProfileControllerTest < Test::Unit::TestCase |
451 | 387 | community = Community.create!(:name => 'my test community', :closed => true) |
452 | 388 | login_as @profile.identifier |
453 | 389 | assert_difference AddMember, :count do |
454 | - post :join, :profile => community.identifier, :confirmation => '1' | |
390 | + post :join, :profile => community.identifier | |
455 | 391 | end |
456 | 392 | end |
457 | 393 | |
... | ... | @@ -462,74 +398,18 @@ class ProfileControllerTest < Test::Unit::TestCase |
462 | 398 | assert_redirected_to :controller => 'account', :action => 'login' |
463 | 399 | end |
464 | 400 | |
465 | - should 'present confirmation before leaving a profile' do | |
466 | - community = Community.create!(:name => 'my test community') | |
467 | - community.add_member(profile) | |
468 | - | |
469 | - login_as(profile.identifier) | |
470 | - get :leave, :profile => community.identifier | |
471 | - | |
472 | - assert_template 'leave' | |
473 | - assert_tag :tag => 'input', :attributes => {:value => 'Yes, I want to leave.', :type => 'submit'} | |
474 | - end | |
475 | - | |
476 | 401 | should 'actually leave profile' do |
477 | 402 | community = Community.create!(:name => 'my test community') |
478 | 403 | community.add_member(profile) |
479 | 404 | assert_includes profile.memberships, community |
480 | 405 | |
481 | 406 | login_as(profile.identifier) |
482 | - post :leave, :profile => community.identifier, :confirmation => '1' | |
483 | - | |
484 | - profile = Profile.find(@profile.id) | |
485 | - assert_not_includes profile.memberships, community | |
486 | - end | |
487 | - | |
488 | - should 'leave profile when on wizard' do | |
489 | - community = Community.create!(:name => 'my test community') | |
490 | - community.add_member(profile) | |
491 | - | |
492 | - login_as(profile.identifier) | |
493 | - post :leave, :profile => community.identifier, :confirmation => '1', :wizard => true | |
494 | - | |
495 | - assert_response :redirect | |
496 | - assert_redirected_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true | |
407 | + post :leave, :profile => community.identifier | |
497 | 408 | |
498 | 409 | profile = Profile.find(@profile.id) |
499 | 410 | assert_not_includes profile.memberships, community |
500 | 411 | end |
501 | 412 | |
502 | - should "offer button to close 'leave community' lightbox" do | |
503 | - community = Community.create!(:name => 'my test community') | |
504 | - community.add_member(profile) | |
505 | - | |
506 | - login_as(profile.identifier) | |
507 | - get :index, :profile => community.identifier | |
508 | - | |
509 | - assert_tag :tag => 'a', :content => 'Leave', :attributes => { :href => "/profile/#{community.identifier}/leave", :class => /^lbOn/ } | |
510 | - end | |
511 | - | |
512 | - should 'offer button to cancel leaving community' do | |
513 | - community = Community.create!(:name => 'my test community') | |
514 | - community.add_member(profile) | |
515 | - | |
516 | - login_as(profile.identifier) | |
517 | - get :leave, :profile => community.identifier | |
518 | - | |
519 | - assert_tag :tag => 'a', :content => "No, I don't want." | |
520 | - end | |
521 | - | |
522 | - should 'render without layout when use lightbox to leave community' do | |
523 | - community = Community.create!(:name => 'my test community') | |
524 | - community.add_member(profile) | |
525 | - | |
526 | - @request.stubs(:xhr?).returns(true) | |
527 | - login_as(profile.identifier) | |
528 | - get :leave, :profile => community.identifier | |
529 | - | |
530 | - assert_no_tag :tag => 'body' # e.g. no layout | |
531 | - end | |
532 | - | |
533 | 413 | should 'require login to leave community' do |
534 | 414 | community = Community.create!(:name => 'my test community') |
535 | 415 | get :leave, :profile => community.identifier |
... | ... | @@ -537,51 +417,6 @@ class ProfileControllerTest < Test::Unit::TestCase |
537 | 417 | assert_redirected_to :controller => 'account', :action => 'login' |
538 | 418 | end |
539 | 419 | |
540 | - should 'redirect to stored location after leave community' do | |
541 | - community = Community.create!(:name => 'my test community') | |
542 | - community.add_member(profile) | |
543 | - | |
544 | - @request.expects(:referer).returns("/profile/#{community.identifier}/to_go").at_least_once | |
545 | - login_as(profile.identifier) | |
546 | - | |
547 | - post :leave, :profile => community.identifier, :confirmation => '1', :back_to => @request.referer | |
548 | - | |
549 | - assert_redirected_to "/profile/#{community.identifier}/to_go" | |
550 | - end | |
551 | - | |
552 | - should 'store referer location when request leave via get' do | |
553 | - community = Community.create!(:name => 'my test community') | |
554 | - login_as(profile.identifier) | |
555 | - | |
556 | - @request.expects(:referer).returns("/profile/redirect_to").at_least_once | |
557 | - | |
558 | - get :leave, :profile => community.identifier | |
559 | - | |
560 | - assert_tag :tag => 'input', :attributes => { :type => 'hidden', :name => 'back_to', :value => @request.referer } | |
561 | - end | |
562 | - | |
563 | - should 'store referer location when request join via get' do | |
564 | - community = Community.create!(:name => 'my test community') | |
565 | - login_as(profile.identifier) | |
566 | - | |
567 | - @request.session[:before_join] = "/profile/redirect_to" | |
568 | - | |
569 | - get :join, :profile => community.identifier | |
570 | - | |
571 | - assert_equal '/profile/redirect_to', @request.session[:before_join] | |
572 | - end | |
573 | - | |
574 | - should 'redirect to stored location after join community' do | |
575 | - community = Community.create!(:name => 'my test community') | |
576 | - | |
577 | - @request.expects(:referer).returns("/profile/#{community.identifier}/to_go") | |
578 | - login_as(profile.identifier) | |
579 | - | |
580 | - post :join, :profile => community.identifier, :confirmation => '1' | |
581 | - | |
582 | - assert_redirected_to "/profile/#{community.identifier}/to_go" | |
583 | - end | |
584 | - | |
585 | 420 | should 'store location before login when request join via get not logged' do |
586 | 421 | community = Community.create!(:name => 'my test community') |
587 | 422 | |
... | ... | @@ -598,7 +433,7 @@ class ProfileControllerTest < Test::Unit::TestCase |
598 | 433 | @request.expects(:referer).returns("/profile/#{community.identifier}/to_go") |
599 | 434 | login_as(profile.identifier) |
600 | 435 | |
601 | - post :join, :profile => community.identifier, :confirmation => '1' | |
436 | + post :join_not_logged, :profile => community.identifier | |
602 | 437 | |
603 | 438 | assert_redirected_to "/profile/#{community.identifier}/to_go" |
604 | 439 | ... | ... |
test/unit/application_helper_test.rb
... | ... | @@ -484,7 +484,7 @@ class ApplicationHelperTest < Test::Unit::TestCase |
484 | 484 | person.stubs(:url).returns('url for person') |
485 | 485 | person.stubs(:public_profile_url).returns('url for person') |
486 | 486 | links = links_for_balloon(person) |
487 | - assert_equal ['Home Page', 'Wall', 'Friends', 'Communities'], links.map{|i| i.keys.first} | |
487 | + assert_equal ['Wall', 'Friends', 'Communities', 'Send an e-mail', 'Add'], links.map{|i| i.keys.first} | |
488 | 488 | end |
489 | 489 | |
490 | 490 | should 'return ordered list of links to balloon to Community' do |
... | ... | @@ -495,7 +495,7 @@ class ApplicationHelperTest < Test::Unit::TestCase |
495 | 495 | community.stubs(:url).returns('url for community') |
496 | 496 | community.stubs(:public_profile_url).returns('url for community') |
497 | 497 | links = links_for_balloon(community) |
498 | - assert_equal ['Home Page', 'Wall', 'Members', 'Agenda'], links.map{|i| i.keys.first} | |
498 | + assert_equal ['Wall', 'Members', 'Agenda', 'Join', 'Leave', 'Send an e-mail'], links.map{|i| i.keys.first} | |
499 | 499 | end |
500 | 500 | |
501 | 501 | should 'return ordered list of links to balloon to Enterprise' do |
... | ... | @@ -507,7 +507,7 @@ class ApplicationHelperTest < Test::Unit::TestCase |
507 | 507 | enterprise.stubs(:public_profile_url).returns('url for enterprise') |
508 | 508 | stubs(:catalog_path) |
509 | 509 | links = links_for_balloon(enterprise) |
510 | - assert_equal ['Home Page', 'Products', 'Members', 'Agenda'], links.map{|i| i.keys.first} | |
510 | + assert_equal ['Products', 'Members', 'Agenda', 'Send an e-mail'], links.map{|i| i.keys.first} | |
511 | 511 | end |
512 | 512 | |
513 | 513 | should 'use favicon from environment theme if does not have profile' do | ... | ... |