Commit 67a7dc468942e21f3de6dd4545cf00121399ed43

Authored by Caio SBA
Committed by Antonio Terceiro
1 parent fcbf4304

Unify code for generating speech bubbles (ActionItem1696)

app/helpers/application_helper.rb
@@ -1194,4 +1194,11 @@ module ApplicationHelper @@ -1194,4 +1194,11 @@ module ApplicationHelper
1194 end 1194 end
1195 end 1195 end
1196 1196
  1197 + def comment_balloon(options = {}, &block)
  1198 + wrapper = content_tag(:div, capture(&block), :class => 'comment-balloon-content')
  1199 + (1..8).to_a.reverse.each { |i| wrapper = content_tag(:div, wrapper, :class => "comment-wrapper-#{i}") }
  1200 + classes = options.delete(:class) || options.delete("class") || ''
  1201 + concat(content_tag('div', wrapper + tag('br', :style => 'clear: both;'), { :class => 'comment-balloon ' + classes.to_s }.merge(options)), block.binding)
  1202 + end
  1203 +
1197 end 1204 end
app/views/content_viewer/_comment.rhtml
1 <%= content_tag('a', '', :name => comment.anchor) %> 1 <%= content_tag('a', '', :name => comment.anchor) %>
2 <div class="article-comment<%= ' comment-from-owner' if ( comment.author && (@page.profile.name == comment.author.name) ) %> comment-logged-<%= comment.author ? 'in' : 'out' %>"> 2 <div class="article-comment<%= ' comment-from-owner' if ( comment.author && (@page.profile.name == comment.author.name) ) %> comment-logged-<%= comment.author ? 'in' : 'out' %>">
3 3
4 - <% if logged_in? && (user == @page.profile || user == comment.author || user.has_permission?(:moderate_comments, @page.profile)) %>  
5 - <% button_bar(:style => 'float: right; margin-top: 0px;') do %>  
6 - <%= icon_button(:delete, _('Remove this comment'), { :profile => params[:profile], :remove_comment => comment.id, :view => params[:view] }, :method => :post, :confirm => _('Are you sure you want to remove this comment?')) %>  
7 - <% end %>  
8 - <% end %>  
9 -  
10 <% if comment.author %> 4 <% if comment.author %>
11 <%= link_to content_tag( 'span', comment.author_name, :class => 'comment-info' ), comment.author.url, 5 <%= link_to content_tag( 'span', comment.author_name, :class => 'comment-info' ), comment.author.url,
12 :class => 'comment-picture', 6 :class => 'comment-picture',
@@ -21,14 +15,13 @@ @@ -21,14 +15,13 @@
21 %> 15 %>
22 <% end %> 16 <% end %>
23 17
24 - <div class='comment-wrapper-1'>  
25 - <div class='comment-wrapper-2'>  
26 - <div class='comment-wrapper-3'>  
27 - <div class='comment-wrapper-4'>  
28 - <div class='comment-wrapper-5'>  
29 - <div class='comment-wrapper-6'>  
30 - <div class='comment-wrapper-7'>  
31 - <div class='comment-wrapper-8'> 18 + <% comment_balloon do %>
  19 + <% if logged_in? && (user == @page.profile || user == comment.author || user.has_permission?(:moderate_comments, @page.profile)) %>
  20 + <% button_bar(:style => 'float: right; margin-top: 0px;') do %>
  21 + <%= icon_button(:delete, _('Remove this comment'), { :profile => params[:profile], :remove_comment => comment.id, :view => params[:view] }, :method => :post, :confirm => _('Are you sure you want to remove this comment?')) %>
  22 + <% end %>
  23 + <% end %>
  24 +
32 <div class="comment-details"> 25 <div class="comment-details">
33 <div class="comment-created-at"> 26 <div class="comment-created-at">
34 <%= show_time(comment.created_at) %> 27 <%= show_time(comment.created_at) %>
@@ -39,7 +32,6 @@ @@ -39,7 +32,6 @@
39 <%= txt2html comment.body %> 32 <%= txt2html comment.body %>
40 </div> 33 </div>
41 </div> 34 </div>
42 - </div></div></div></div>  
43 - </div></div></div></div>  
44 - <br style='clear: both'/> 35 + <% end %>
  36 +
45 </div> 37 </div>
app/views/profile/_organization.rhtml
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <div class='ui-tabs'> 4 <div class='ui-tabs'>
5 5
6 <ul> 6 <ul>
7 - <li class='tab'><a href='#profile-network'><%= _('Network') %></a></li> 7 + <li class='tab'><a href='#profile-network'><%= _('What\'s new') %></a></li>
8 <li class='tab'><a href='#community-profile'><%= _('Profile') %></a></li> 8 <li class='tab'><a href='#community-profile'><%= _('Profile') %></a></li>
9 </ul> 9 </ul>
10 10
app/views/profile/_person.rhtml
@@ -22,6 +22,15 @@ @@ -22,6 +22,15 @@
22 <%= render :partial => 'profile_activity' %> 22 <%= render :partial => 'profile_activity' %>
23 <% end %> 23 <% end %>
24 24
  25 + <script type="text/javascript">
  26 + jQuery( function() {
  27 + var parent_selector = '.profile-wall-description, .profile-activity-description, .profile-network-description';
  28 + var child_selector = '.icon-delete, .icon-reply, .icon-scrap';
  29 + jQuery(parent_selector).live('mouseover', function () { jQuery(this).find(child_selector).css('visibility', 'visible'); });
  30 + jQuery(parent_selector).live('mouseout', function () { jQuery(this).find(child_selector).css('visibility', 'hidden'); });
  31 + });
  32 + </script>
  33 +
25 <div id='person-profile'> 34 <div id='person-profile'>
26 <table> 35 <table>
27 <tr> 36 <tr>
app/views/profile/_profile_scrap.rhtml
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <p class='profile-wall-send-message'><%= link_to_function _('Scrap'), "hide_and_show(['#profile-wall-message-response-#{scrap.id}'],['#profile-wall-message-#{scrap.id}', '#profile-wall-form-#{scrap.id}']);$('content_#{scrap.id}').value='';return false", :class => "profile-send-message icon-scrap" %></p> 5 <p class='profile-wall-send-message'><%= link_to_function _('Scrap'), "hide_and_show(['#profile-wall-message-response-#{scrap.id}'],['#profile-wall-message-#{scrap.id}', '#profile-wall-form-#{scrap.id}']);$('content_#{scrap.id}').value='';return false", :class => "profile-send-message icon-scrap" %></p>
6 <% end %> 6 <% end %>
7 </div> 7 </div>
8 - <div class='profile-wall-description'> 8 + <% comment_balloon :class => 'profile-wall-description' do %>
9 <p class='profile-wall-sender'><%= link_to scrap.sender.name, scrap.sender.url %></p> 9 <p class='profile-wall-sender'><%= link_to scrap.sender.name, scrap.sender.url %></p>
10 <p class='profile-wall-time'><%= time_ago_as_sentence(scrap.created_at) + ' ' + _('ago') %></p> 10 <p class='profile-wall-time'><%= time_ago_as_sentence(scrap.created_at) + ' ' + _('ago') %></p>
11 <p class='profile-wall-text'><%= auto_link_urls scrap.content %></p> 11 <p class='profile-wall-text'><%= auto_link_urls scrap.content %></p>
@@ -13,12 +13,12 @@ @@ -13,12 +13,12 @@
13 <% if logged_in? && current_person.follows?(scrap.sender) && scrap.root.nil? %> 13 <% if logged_in? && current_person.follows?(scrap.sender) && scrap.root.nil? %>
14 <p class='profile-wall-send-reply'><%= link_to_function _('Reply'), "hide_and_show(['#profile-wall-reply-response-#{scrap.id}'],['#profile-wall-reply-#{scrap.id}', '#profile-wall-reply-form-#{scrap.id}']);$('reply_content_#{scrap.id}').value='';$('scrap_id_#{scrap.id}').value='#{scrap.id}';return false", :class => "profile-send-reply icon-reply" %></p> 14 <p class='profile-wall-send-reply'><%= link_to_function _('Reply'), "hide_and_show(['#profile-wall-reply-response-#{scrap.id}'],['#profile-wall-reply-#{scrap.id}', '#profile-wall-reply-form-#{scrap.id}']);$('reply_content_#{scrap.id}').value='';$('scrap_id_#{scrap.id}').value='#{scrap.id}';return false", :class => "profile-send-reply icon-reply" %></p>
15 <% end %> 15 <% end %>
16 - <ul>  
17 - <% scrap.replies.map do |reply| %>  
18 - <%= render :partial => 'profile_scrap', :locals => {:scrap => reply} %>  
19 - <% end %>  
20 - </ul>  
21 - </div> 16 + <% end %>
  17 + <ul class="profile-wall-scrap-replies">
  18 + <% scrap.replies.map do |reply| %>
  19 + <%= render :partial => 'profile_scrap', :locals => {:scrap => reply} %>
  20 + <% end %>
  21 + </ul>
22 <div id='profile-wall-message-<%= scrap.id%>' style='display:none;'> 22 <div id='profile-wall-message-<%= scrap.id%>' style='display:none;'>
23 <div id='profile-wall-form-<%= scrap.id%>' style='display:none;'> 23 <div id='profile-wall-form-<%= scrap.id%>' style='display:none;'>
24 <p class='profile-wall-message'> 24 <p class='profile-wall-message'>
public/designs/icons/tango/style.css
@@ -72,4 +72,4 @@ @@ -72,4 +72,4 @@
72 .icon-lock { background-image: url(Tango/16x16/actions/lock.png) } 72 .icon-lock { background-image: url(Tango/16x16/actions/lock.png) }
73 .icon-chat { background-image: url(Tango/16x16/apps/internet-group-chat.png) } 73 .icon-chat { background-image: url(Tango/16x16/apps/internet-group-chat.png) }
74 .icon-scrap { background-image: url(Tango/16x16/actions/format-justify-left.png) } 74 .icon-scrap { background-image: url(Tango/16x16/actions/format-justify-left.png) }
75 -.icon-reply { background-image: url(Tango/16x16/actions/edit-redo.png) } 75 +.icon-reply { background-image: url(Tango/16x16/actions/mail-reply-sender.png) }
public/stylesheets/application.css
@@ -3445,8 +3445,8 @@ h1#agenda-title { @@ -3445,8 +3445,8 @@ h1#agenda-title {
3445 3445
3446 .controller-profile .public-profile-description { 3446 .controller-profile .public-profile-description {
3447 font-style: italic; 3447 font-style: italic;
3448 - border: 1px solid #ccc;  
3449 - background: #eeeeec; 3448 + border: 0;
  3449 + background: transparent;
3450 color: black; 3450 color: black;
3451 padding: 10px; 3451 padding: 10px;
3452 } 3452 }
@@ -4657,6 +4657,10 @@ h1#agenda-title { @@ -4657,6 +4657,10 @@ h1#agenda-title {
4657 position: relative; 4657 position: relative;
4658 } 4658 }
4659 4659
  4660 +#profile-wall .profile-wall-description {
  4661 + border: 0;
  4662 +}
  4663 +
4660 #profile-activity .profile-activity-description .icon-delete span, 4664 #profile-activity .profile-activity-description .icon-delete span,
4661 #profile-network .profile-network-description .icon-delete span, 4665 #profile-network .profile-network-description .icon-delete span,
4662 #profile-wall .profile-wall-description .icon-delete span { 4666 #profile-wall .profile-wall-description .icon-delete span {
@@ -4670,6 +4674,10 @@ h1#agenda-title { @@ -4670,6 +4674,10 @@ h1#agenda-title {
4670 top: 4px; 4674 top: 4px;
4671 right: 4px; 4675 right: 4px;
4672 background-position: center center; 4676 background-position: center center;
  4677 + visibility: hidden;
  4678 + border-radius: 3px;
  4679 + -webkit-border-radius: 3px;
  4680 + -moz-border-radius: 3px;
4673 } 4681 }
4674 4682
4675 #profile-activity .profile-activity-text, #profile-network .profile-network-text, #profile-wall .profile-wall-text { 4683 #profile-activity .profile-activity-text, #profile-network .profile-network-text, #profile-wall .profile-wall-text {
@@ -4710,12 +4718,8 @@ h1#agenda-title { @@ -4710,12 +4718,8 @@ h1#agenda-title {
4710 margin: 4px 3px 0 0; 4718 margin: 4px 3px 0 0;
4711 } 4719 }
4712 4720
4713 -.profile-wall-image,  
4714 -.leave_scrap_to_self .profile-network-image,  
4715 -.leave_scrap .profile-network-image,  
4716 -.leave_scrap_to_self .profile-activity-image,  
4717 -.leave_scrap .profile-activity-image {  
4718 - background: transparent url(/images/scrap-bg.png) 104% 10px no-repeat; 4721 +.profile-wall-image {
  4722 + background: transparent;
4719 position: relative; 4723 position: relative;
4720 left: 1px; 4724 left: 1px;
4721 z-index: 2; 4725 z-index: 2;
@@ -4858,18 +4862,13 @@ h1#agenda-title { @@ -4858,18 +4862,13 @@ h1#agenda-title {
4858 text-decoration: none; 4862 text-decoration: none;
4859 } 4863 }
4860 4864
4861 -#profile-wall .profile-wall-description .profile-wall-image {  
4862 - background-image: url(/images/scrap-bg-gray.png);  
4863 -}  
4864 -  
4865 -#profile-wall .profile-wall-description .profile-wall-description {  
4866 - width: 242px;  
4867 - background-color: #eee; 4865 +#profile-wall .profile-wall-scrap-replies .profile-wall-description {
  4866 + width: 240px;
  4867 + background: transparent;
4868 } 4868 }
4869 4869
4870 -#profile-network .profile-wall-description textarea,  
4871 -#profile-wall .profile-wall-description textarea {  
4872 - width: 338px; 4870 +#profile-wall .profile-wall-scrap-replies textarea {
  4871 + width: 334px;
4873 margin-left: 2px; 4872 margin-left: 2px;
4874 } 4873 }
4875 4874
@@ -4881,3 +4880,27 @@ h1#agenda-title { @@ -4881,3 +4880,27 @@ h1#agenda-title {
4881 .limited-text-area div.fieldWithErrors { 4880 .limited-text-area div.fieldWithErrors {
4882 background: transparent; 4881 background: transparent;
4883 } 4882 }
  4883 +
  4884 +#profile-wall .profile-wall-description .icon-scrap, #profile-wall .profile-wall-description .icon-reply {
  4885 + visibility: hidden;
  4886 + border-radius: 3px;
  4887 + -webkit-border-radius: 3px;
  4888 + -moz-border-radius: 3px;
  4889 +}
  4890 +
  4891 +#profile-wall .comment-wrapper-1 {
  4892 + margin-left: 0;
  4893 +}
  4894 +
  4895 +#profile-wall .comment-balloon-content {
  4896 + padding: 3px 0 3px 15px;
  4897 +}
  4898 +
  4899 +.profile-wall-reply {
  4900 + margin: 0;
  4901 +}
  4902 +
  4903 +.profile-wall-scrap-replies {
  4904 + float: right;
  4905 + margin-right: 2px;
  4906 +}