# Returns a comma separated list of users watching the given object
def watchers_list(object)
remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project)
- object.watcher_users.collect do |user|
- s = content_tag('span', link_to_user(user), :class => 'user')
+ lis = object.watcher_users.collect do |user|
+ s = avatar(user, :size => "16").to_s + link_to_user(user, :class => 'user').to_s
if remove_allowed
url = {:controller => 'watchers',
:action => 'destroy',
s += ' ' + link_to_remote(image_tag('delete.png'),
{:url => url},
:href => url_for(url),
- :style => "vertical-align: middle")
+ :style => "vertical-align: middle",
+ :class => "delete")
end
- s
- end.join(",\n")
+ "<li>#{ s }</li>"
+ end
+ lis.empty? ? "" : "<ul>#{ lis.join("\n") }</ul>"
end
end
</div>
<% end %>
-<% if User.current.allowed_to?(:add_issue_watchers, @project) ||
- (@issue.watchers.any? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
-<hr />
-<div id="watchers">
-<%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
-</div>
-<% end %>
-
</div>
<% if @changesets.any? %>
<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
<% content_for :sidebar do %>
- <%= render :partial => 'issues/sidebar' %>
+ <%= render :partial => 'issues/sidebar' %>
+
+ <% if User.current.allowed_to?(:add_issue_watchers, @project) ||
+ (@issue.watchers.any? && User.current.allowed_to?(:view_issue_watchers, @project)) %>
+ <div id="watchers">
+ <%= render :partial => 'watchers/watchers', :locals => {:watched => @issue} %>
+ </div>
+ <% end %>
<% end %>
<% content_for :header_tags do %>
:object_id => watched} if User.current.allowed_to?(:add_issue_watchers, @project) %>
</div>
-<p><strong><%= l(:label_issue_watchers) %></strong></p>
-<%= watchers_list(watched) %>
+<h3><%= l(:label_issue_watchers) %> (<%= watched.watcher_users.size %>)</h3>
<% unless @watcher.nil? %>
-<% remote_form_for(:watcher, @watcher,
- :url => {:controller => 'watchers',
- :action => 'new',
- :object_type => watched.class.name.underscore,
- :object_id => watched},
- :method => :post,
- :html => {:id => 'new-watcher-form'}) do |f| %>
-<p><%= f.select :user_id, (watched.addable_watcher_users.collect {|m| [m.name, m.id]}), :prompt => "--- #{l(:actionview_instancetag_blank_option)} ---" %>
+ <% remote_form_for(:watcher, @watcher,
+ :url => {:controller => 'watchers',
+ :action => 'new',
+ :object_type => watched.class.name.underscore,
+ :object_id => watched},
+ :method => :post,
+ :html => {:id => 'new-watcher-form'}) do |f| %>
+ <p><%= f.select :user_id, (watched.addable_watcher_users.collect {|m| [m.name, m.id]}), :prompt => "--- #{l(:actionview_instancetag_blank_option)} ---" %>
-<%= submit_tag l(:button_add) %>
-<%= toggle_link l(:button_cancel), 'new-watcher-form'%></p>
-<% end %>
+ <%= submit_tag l(:button_add) %>
+ <%= toggle_link l(:button_cancel), 'new-watcher-form'%></p>
+ <% end %>
<% end %>
+
+<%= watchers_list(watched) %>
div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
+#watchers ul {margin: 0; padding: 0;}
+#watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
+#watchers select {width: 95%; display: block;}
+#watchers a.delete {opacity: 0.4;}
+#watchers a.delete:hover {opacity: 1;}
+#watchers img.gravatar {vertical-align: middle;margin-right: 4px;}
+
.highlight { background-color: #FCFD8D;}
.highlight.token-1 { background-color: #faa;}
.highlight.token-2 { background-color: #afa;}