Redmine 4.1.1

This commit is contained in:
Manuel Cillero 2020-11-22 21:20:06 +01:00
parent 33e7b881a5
commit 3d976f1b3b
1593 changed files with 36180 additions and 19489 deletions

View file

@ -1,7 +1,13 @@
<div class="contextual">
<%= link_to l(:button_edit), edit_issue_path(@issue), :onclick => 'showAndScrollTo("update", "issue_notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
<%= link_to l(:button_log_time), new_issue_time_entry_path(@issue), :class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project) %>
<%= link_to l(:button_edit), edit_issue_path(@issue),
:onclick => 'showAndScrollTo("update", "issue_notes"); return false;',
:class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
<%= link_to l(:button_log_time), new_issue_time_entry_path(@issue),
:class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project) %>
<%= watcher_link(@issue, User.current) %>
<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue), :class => 'icon icon-copy' if User.current.allowed_to?(:copy_issues, @project) && Issue.allowed_target_projects.any? %>
<%= link_to l(:button_delete), issue_path(@issue), :data => {:confirm => issues_destroy_confirmation_message(@issue)}, :method => :delete, :class => 'icon icon-del' if @issue.deletable? %>
<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue),
:class => 'icon icon-copy' if User.current.allowed_to?(:copy_issues, @project) && Issue.allowed_target_projects.any? %>
<%= link_to l(:button_delete), issue_path(@issue),
:data => {:confirm => issues_destroy_confirmation_message(@issue)},
:method => :delete, :class => 'icon icon-del' if @issue.deletable? %>
</div>

View file

@ -0,0 +1,10 @@
<div style="clear: both;"></div>
<%= render :partial => 'action_menu' %>
<div style="clear: both;"></div>
<% if @issue.editable? %>
<div id="update" style="display:none;">
<h3><%= l(:button_edit) %></h3>
<%= render :partial => 'edit' %>
</div>
<% end %>

View file

@ -4,7 +4,7 @@
<div class="splitcontentleft">
<% if @issue.safe_attribute?('status_id') && @allowed_statuses.present? %>
<p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true},
:onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)" %></p>
:onchange => "updateIssueFrom('#{escape_javascript(update_issue_form_path(@project, @issue))}', this)" %></p>
<%= hidden_field_tag 'was_default_status', @issue.status_id, :id => nil if @issue.status == @issue.default_status %>
<% else %>
<p><label><%= l(:field_status) %></label> <%= @issue.status %></p>
@ -15,11 +15,14 @@
<% end %>
<% if @issue.safe_attribute? 'assigned_to_id' %>
<p><%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to), :include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %></p>
<p><%= f.select :assigned_to_id, principals_options_for_select(@issue.assignable_users, @issue.assigned_to),
:include_blank => true, :required => @issue.required_attribute?('assigned_to_id') %></p>
<% end %>
<% if @issue.safe_attribute?('category_id') && @issue.project.issue_categories.any? %>
<p><%= f.select :category_id, (@issue.project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true, :required => @issue.required_attribute?('category_id') %>
<p><%= f.select :category_id, (@issue.project.issue_categories.collect {|c| [c.name, c.id]}),
{:include_blank => true, :required => @issue.required_attribute?('category_id')},
:onchange => ("updateIssueFrom('#{escape_javascript(update_issue_form_path(@project, @issue))}', this)" if @issue.new_record?) %>
<%= link_to(l(:label_issue_category_new),
new_project_issue_category_path(@issue.project),
:remote => true,
@ -31,7 +34,8 @@
<% end %>
<% if @issue.safe_attribute?('fixed_version_id') && @issue.assignable_versions.any? %>
<p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true, :required => @issue.required_attribute?('fixed_version_id') %>
<p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version),
:include_blank => true, :required => @issue.required_attribute?('fixed_version_id') %>
<%= link_to(l(:label_version_new),
new_project_version_path(@issue.project),
:remote => true,
@ -46,8 +50,9 @@
<div class="splitcontentright">
<% if @issue.safe_attribute? 'parent_issue_id' %>
<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10, :required => @issue.required_attribute?('parent_issue_id') %></p>
<%= javascript_tag "observeAutocompleteField('issue_parent_issue_id', '#{escape_javascript auto_complete_issues_path(:project_id => @issue.project, :scope => Setting.cross_project_subtasks, :status => @issue.closed? ? 'c' : 'o', :issue_id => @issue.id)}')" %>
<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10,
:required => @issue.required_attribute?('parent_issue_id') %></p>
<%= javascript_tag "observeAutocompleteField('issue_parent_issue_id', '#{escape_javascript(auto_complete_issues_path(:project_id => @issue.project, :scope => Setting.cross_project_subtasks, :status => @issue.closed? ? 'c' : 'o', :issue_id => @issue.id))}')" %>
<% end %>
<% if @issue.safe_attribute? 'start_date' %>

View file

@ -1,18 +0,0 @@
<% changesets.each do |changeset| %>
<div class="changeset">
<p><%= link_to_revision(changeset, changeset.repository,
:text => "#{l(:label_revision)} #{changeset.format_identifier}") %>
<% if changeset.filechanges.any? && User.current.allowed_to?(:browse_repository, changeset.project) %>
(<%= link_to(l(:label_diff),
:controller => 'repositories',
:action => 'diff',
:id => changeset.project,
:repository_id => changeset.repository.identifier_param,
:path => "",
:rev => changeset.identifier) %>)
<% end %>
<br />
<span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
<div class="wiki changeset-comments"><%= format_changeset_comments changeset %></div>
</div>
<% end %>

View file

@ -29,8 +29,13 @@
<% end %>
<% if @issue.notes_addable? %>
<fieldset><legend><%= l(:field_notes) %></legend>
<%= f.text_area :notes, :cols => 60, :rows => 10, :class => 'wiki-edit', :no_label => true %>
<%= wikitoolbar_for 'issue_notes' %>
<%= f.text_area :notes, :cols => 60, :rows => 10, :class => 'wiki-edit',
:data => {
:auto_complete => true,
:issues_url => auto_complete_issues_path(:project_id => @issue.project, :q => '')
},
:no_label => true %>
<%= wikitoolbar_for 'issue_notes', preview_issue_path(:project_id => @project, :issue_id => @issue) %>
<% if @issue.safe_attribute? 'private_notes' %>
<%= f.check_box :private_notes, :no_label => true %> <label for="issue_private_notes"><%= l(:field_private_notes) %></label>
@ -68,13 +73,10 @@
<%= f.hidden_field :lock_version %>
<%= hidden_field_tag 'last_journal_id', params[:last_journal_id] || @issue.last_journal_id %>
<%= submit_tag l(:button_submit) %>
<%= preview_link preview_edit_issue_path(:project_id => @project, :id => @issue), 'issue-form' %>
| <%= link_to l(:button_cancel), issue_path(id: @issue.id), :onclick => params[:action] == 'show' ? "$('#update').hide(); return false;" : '' %>
<%= link_to l(:button_cancel), issue_path(id: @issue.id), :onclick => params[:action] == 'show' ? "$('#update').hide(); return false;" : '' %>
<%= hidden_field_tag 'prev_issue_id', @prev_issue_id if @prev_issue_id %>
<%= hidden_field_tag 'next_issue_id', @next_issue_id if @next_issue_id %>
<%= hidden_field_tag 'issue_position', @issue_position if @issue_position %>
<%= hidden_field_tag 'issue_count', @issue_count if @issue_count %>
<% end %>
<div id="preview" class="wiki"></div>

View file

@ -9,14 +9,20 @@
</p>
<% end %>
<% if (@issue.safe_attribute?('project_id') || @issue.project_id_changed?) && (!@issue.new_record? || @project.nil? || @issue.copy?) %>
<p><%= f.select :project_id, project_tree_options_for_select(@issue.allowed_target_projects, :selected => @issue.project), {:required => true},
<% projects = @issue.allowed_target_projects(User.current, @project) %>
<% if (@issue.safe_attribute?('project_id') || @issue.project_id_changed?) && (@project.nil? || projects.length > 1 || @issue.copy?) %>
<p><%= f.select :project_id, project_tree_options_for_select(projects, :selected => @issue.project), {:required => true},
:onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)" %></p>
<% end %>
<% if @issue.safe_attribute?('tracker_id') || (@issue.persisted? && @issue.tracker_id_changed?) %>
<p><%= f.select :tracker_id, trackers_options_for_select(@issue), {:required => true},
:onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)" %></p>
<p>
<%= f.select :tracker_id, trackers_options_for_select(@issue), {:required => true},
:onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)",
:title => @issue.tracker.description %>
<%= content_tag 'a', l(:label_open_trackers_description), :class => 'icon-only icon-help', :title => l(:label_open_trackers_description), :onclick => "showModal('trackers_description', '500px'); return false;", :href => '#' if trackers_for_select(@issue).any? {|t| t.description.present? } %>
</p>
<%= render partial: 'issues/trackers_description', locals: {trackers: trackers_for_select(@issue)} %>
<% end %>
<% if @issue.safe_attribute? 'subject' %>
@ -28,15 +34,16 @@
<%= f.label_for_field :description, :required => @issue.required_attribute?('description') %>
<%= link_to_function content_tag(:span, l(:button_edit), :class => 'icon icon-edit'), '$(this).hide(); $("#issue_description_and_toolbar").show()' unless @issue.new_record? %>
<%= content_tag 'span', :id => "issue_description_and_toolbar", :style => (@issue.new_record? ? nil : 'display:none') do %>
<%= f.text_area :description,
:cols => 60,
<%= f.text_area :description, :cols => 60, :accesskey => accesskey(:edit), :class => 'wiki-edit',
:rows => [[10, @issue.description.to_s.length / 50].max, 20].min,
:accesskey => accesskey(:edit),
:class => 'wiki-edit',
:data => {
:auto_complete => true,
:issues_url => auto_complete_issues_path(:project_id => @issue.project, :q => '')
},
:no_label => true %>
<% end %>
</p>
<%= wikitoolbar_for 'issue_description' %>
<%= wikitoolbar_for 'issue_description', preview_issue_path(:project_id => @issue.project, :issue_id => @issue.id) %>
<% end %>
<div id="attributes" class="attributes">

View file

@ -20,4 +20,5 @@
<% custom_field_values_full_width.each do |value| %>
<p><%= custom_field_tag_with_label :issue, value, :required => @issue.required_attribute?(value.custom_field_id) %></p>
<%= wikitoolbar_for "issue_custom_field_values_#{value.custom_field_id}", preview_issue_path(:project_id => @issue.project, :issue_id => @issue.id) if value.custom_field.full_text_formatting? %>
<% end %>

View file

@ -3,6 +3,7 @@
<%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
<%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
<%= query_columns_hidden_tags(query) %>
<div class="autoscroll">
<table class="list issues odd-even <%= query.css_classes %>">
<thead>
@ -14,6 +15,7 @@
<% query.inline_columns.each do |column| %>
<%= column_header(query, column, query_options) %>
<% end %>
<th class="buttons"></th>
</tr>
</thead>
<tbody>
@ -21,9 +23,9 @@
<% if group_name %>
<% reset_cycle %>
<tr class="group open">
<td colspan="<%= query.inline_columns.size + 1 %>">
<span class="expander" onclick="toggleRowGroup(this);">&nbsp;</span>
<span class="name"><%= group_name %></span> <span class="count"><%= group_count %></span> <span class="totals"><%= group_totals %></span>
<td colspan="<%= query.inline_columns.size + 2 %>">
<span class="expander icon icon-expended" onclick="toggleRowGroup(this);">&nbsp;</span>
<span class="name"><%= group_name %></span> <span class="badge badge-count count"><%= group_count %></span> <span class="totals"><%= group_totals %></span>
<%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}",
"toggleAllRowGroups(this)", :class => 'toggle-all') %>
</td>
@ -34,11 +36,12 @@
<% query.inline_columns.each do |column| %>
<%= content_tag('td', column_content(column, issue), :class => column.css_classes) %>
<% end %>
<td class="buttons"><%= link_to_context_menu %></td>
</tr>
<% query.block_columns.each do |column|
if (text = column_content(column, issue)) && text.present? -%>
<tr class="<%= current_cycle %>">
<td colspan="<%= query.inline_columns.size + 1 %>" class="<%= column.css_classes %>">
<td colspan="<%= query.inline_columns.size + 2 %>" class="<%= column.css_classes %> block_column">
<% if query.block_columns.count > 1 %>
<span><%= column.caption %></span>
<% end %>

View file

@ -1,16 +1,3 @@
<h3><%= l(:label_issue_plural) %></h3>
<ul>
<li><%= link_to l(:label_issue_view_all), _project_issues_path(@project, :set_filter => 1) %></li>
<% if @project %>
<li><%= link_to l(:field_summary), project_issues_report_path(@project) %></li>
<% end %>
<% if User.current.allowed_to?(:import_issues, @project, :global => true) %>
<li><%= link_to l(:button_import), new_issues_import_path %></li>
<% end %>
</ul>
<%= call_hook(:view_issues_sidebar_issues_bottom) %>
<%= call_hook(:view_issues_sidebar_planning_bottom) %>

View file

@ -0,0 +1,22 @@
<% if trackers.any? {|t| t.description.present? } %>
<div class="modal" id="trackers_description">
<h3 class="title"><%= l(:label_trackers_description) %></h3>
<dl>
<% trackers.each do |tracker| %>
<% if tracker.description.present? %>
<dt><%= content_tag 'a', tracker.name, :onclick => "selectTracker('#{tracker.id}'); return false;", :href => '#', :title => l(:text_select_apply_tracker) %></dt>
<dd><%= tracker.description %></dd>
<% end %>
<% end %>
</dl>
</div>
<% end %>
<%= javascript_tag do %>
function selectTracker(id) {
var target = $('#issue_tracker_id');
target.attr("selected", false);
target.find('option[value="' + id + '"]').prop('selected', true);
target.trigger('change');
hideModal('#trackers_description h3');
}
<% end %>

View file

@ -28,6 +28,7 @@
<fieldset class="attributes">
<legend><%= l(:label_change_properties) %></legend>
<div class="splitcontent">
<div class="splitcontentleft">
<% if @allowed_projects.present? %>
<p>
@ -188,18 +189,31 @@
</p>
<% end %>
</div>
</div>
</fieldset>
<fieldset>
<legend><%= l(:field_notes) %></legend>
<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %>
<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit',
:data => {
:auto_complete => true,
:issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
}
%>
<%= wikitoolbar_for 'notes' %>
<% if @safe_attributes.include?('private_notes') %>
<label class="inline">
<%= check_box_tag 'issue[private_notes]', 1, false %>
<%= l(:field_private_notes) %>
</label>
<% end %>
</fieldset>
</div>
<% if @values_by_custom_field.present? %>
<div class="flash warning">
<%= l(:warning_fields_cleared_on_bulk_edit) %>:<br />
<%= l(:warning_fields_cleared_on_bulk_edit) %>:<br />
<%= safe_join(@values_by_custom_field.map {|field, ids| content_tag "span", "#{field.name} (#{ids.size})"}, ', ') %>
</div>
<% end %>
@ -220,7 +234,7 @@
<% end %>
<%= javascript_tag do %>
$(window).load(function(){
$(window).on('load', function(){
$(document).on('change', 'input[data-disables]', function(){
if ($(this).prop('checked')){
$($(this).data('disables')).attr('disabled', true).val('');

View file

@ -2,6 +2,19 @@
<% if User.current.allowed_to?(:add_issues, @project, :global => true) && (@project.nil? || Issue.allowed_target_trackers(@project).any?) %>
<%= link_to l(:label_issue_new), _new_project_issue_path(@project), :class => 'icon icon-add new-issue' %>
<% end %>
<%= actions_dropdown do %>
<% if @project %>
<%= link_to l(:field_summary), project_issues_report_path(@project), :class => 'icon icon-stats' %>
<% end %>
<% if User.current.allowed_to?(:import_issues, @project, :global => true) %>
<%= link_to l(:button_import), new_issues_import_path(:project_id => @project), :class => 'icon icon-import' %>
<% end %>
<%= link_to_if_authorized l(:label_settings),
{:controller => 'projects', :action => 'settings', :id => @project, :tab => 'issues'},
:class => 'icon icon-settings' if User.current.allowed_to?(:manage_categories, @project) %>
<% end %>
</div>
<h2><%= @query.new_record? ? l(:label_issue_plural) : @query.name %></h2>
@ -34,18 +47,25 @@
<label><%= radio_button_tag 'c[]', '', true %> <%= l(:description_selected_columns) %></label><br />
<label><%= radio_button_tag 'c[]', 'all_inline' %> <%= l(:description_all_columns) %></label>
</p>
<p>
<label><%= check_box_tag 'c[]', 'description', @query.has_column?(:description) %> <%= l(:field_description) %></label>
<label><%= check_box_tag 'c[]', 'last_notes', @query.has_column?(:last_notes) %> <%= l(:label_last_notes) %></label>
</p>
<% if @query.available_block_columns.any? %>
<fieldset id="csv-export-block-columns">
<legend>
<%= toggle_checkboxes_link('#csv-export-block-columns input[type=checkbox]') %>
</legend>
<% @query.available_block_columns.each do |column| %>
<label><%= check_box_tag 'c[]', column.name, @query.has_column?(column), :id => nil %> <%= column.caption %></label>
<% end %>
</fieldset>
<% end %>
<%= export_csv_encoding_select_tag %>
<% if @issue_count > Setting.issues_export_limit.to_i %>
<p class="icon icon-warning">
<%= l(:setting_issues_export_limit) %>: <%= Setting.issues_export_limit.to_i %>
</p>
<% end %>
<p class="buttons">
<%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);" %>
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
<%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);", :data => { :disable_with => false } %>
<%= link_to_function l(:button_cancel), "hideModal(this);" %>
</p>
<% end %>
</div>

View file

@ -39,11 +39,8 @@
<%= submit_tag l(:button_create) %>
<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
<%= preview_link preview_new_issue_path(:project_id => @issue.project), 'issue-form' %>
<% end %>
<div id="preview" class="wiki"></div>
<% content_for :header_tags do %>
<%= robot_exclusion_tag %>
<% end %>

View file

@ -1,4 +1,7 @@
replaceIssueFormWith('<%= escape_javascript(render :partial => 'form') %>');
<% if params[:form_update_triggered_by] == "issue_project_id" %>
$("#watchers_form_container").html('<%= escape_javascript(render :partial => 'issues/watchers_form') %>');
<% case params[:form_update_triggered_by] %>
<% when "issue_project_id" %>
$("#watchers_form_container").html('<%= escape_javascript(render :partial => 'issues/watchers_form') %>');
<% when "issue_category_id" %>
$('#issue_assigned_to_id').find('option').first().html('<%= escape_javascript(@issue.category.try(:assigned_to).try(:name)).presence || '&nbsp;'.html_safe %>');
<% end %>

View file

@ -26,8 +26,8 @@
<% end %>
<div class="gravatar-with-child">
<%= avatar(@issue.author, :size => "50", :title => l(:field_author)) %>
<%= avatar(@issue.assigned_to, :size => "22", :class => "gravatar gravatar-child", :title => l(:field_assigned_to)) if @issue.assigned_to %>
<%= author_avatar(@issue.author, :size => "50") %>
<%= assignee_avatar(@issue.assigned_to, :size => "22", :class => "gravatar-child") if @issue.assigned_to %>
</div>
<div class="subject">
@ -59,7 +59,7 @@
rows.right l(:field_start_date), format_date(@issue.start_date), :class => 'start-date'
end
unless @issue.disabled_core_fields.include?('due_date')
rows.right l(:field_due_date), format_date(@issue.due_date), :class => 'due-date'
rows.right l(:field_due_date), issue_due_date_details(@issue), :class => 'due-date'
end
unless @issue.disabled_core_fields.include?('done_ratio')
rows.right l(:field_done_ratio), progress_bar(@issue.done_ratio, :legend => "#{@issue.done_ratio}%"), :class => 'progress'
@ -75,9 +75,8 @@ end %>
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
</div>
<% if @issue.description? || @issue.attachments.any? -%>
<hr />
<% if @issue.description? %>
<hr />
<div class="description">
<div class="contextual">
<%= link_to l(:button_quote), quoted_issue_path(@issue), :remote => true, :method => 'post', :class => 'icon icon-comment' if @issue.notes_addable? %>
@ -89,8 +88,11 @@ end %>
</div>
</div>
<% end %>
<%= link_to_attachments @issue, :thumbnails => true %>
<% end -%>
<% if @issue.attachments.any? %>
<hr />
<p><strong><%=l(:label_attachment_plural)%></strong></p>
<%= link_to_attachments @issue, :thumbnails => true %>
<% end %>
<%= render_full_width_custom_fields_rows(@issue) %>
@ -118,31 +120,13 @@ end %>
</div>
<% if @changesets.present? %>
<div id="issue-changesets">
<h3><%=l(:label_associated_revisions)%></h3>
<%= render :partial => 'changesets', :locals => { :changesets => @changesets} %>
</div>
<% end %>
<%= render partial: 'action_menu_edit' if User.current.wants_comments_in_reverse_order? %>
<% if @journals.present? %>
<div id="history">
<h3><%=l(:label_history)%></h3>
<%= render :partial => 'history', :locals => { :issue => @issue, :journals => @journals } %>
<%= render_tabs issue_history_tabs, issue_history_default_tab %>
</div>
<% end %>
<div style="clear: both;"></div>
<%= render :partial => 'action_menu' %>
<div style="clear: both;"></div>
<% if @issue.editable? %>
<div id="update" style="display:none;">
<h3><%= l(:button_edit) %></h3>
<%= render :partial => 'edit' %>
</div>
<% end %>
<%= render partial: 'action_menu_edit' unless User.current.wants_comments_in_reverse_order? %>
<% other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>

View file

@ -0,0 +1,24 @@
<% @changesets.each do |changeset| %>
<div id="changeset-<%= changeset.id %>" class="changeset journal">
<h4>
<%= avatar(changeset.user, :size => "24") %>
<%= authoring changeset.committed_on, changeset.author, :label => :label_added_time_by %>
</h4>
<p><%= link_to_revision(changeset, changeset.repository,
:text => "#{l(:label_revision)} #{changeset.format_identifier}") %>
<% if changeset.filechanges.any? && User.current.allowed_to?(:browse_repository, changeset.project) %>
(<%= link_to(l(:label_diff),
:controller => 'repositories',
:action => 'diff',
:id => changeset.project,
:repository_id => changeset.repository.identifier_param,
:path => "",
:rev => changeset.identifier) %>)
<% end %></p>
<div class="wiki changeset-comments">
<%= format_changeset_comments changeset %>
</div>
</div>
<%= call_hook(:view_issues_history_changeset_bottom, { :changeset => changeset }) %>
<% end %>

View file

@ -1,11 +1,21 @@
<%
issue = tab[:locals][:issue]
journals = tab[:locals][:journals]
%>
<% reply_links = issue.notes_addable? -%>
<% for journal in journals %>
<div id="change-<%= journal.id %>" class="<%= journal.css_classes %>">
<div id="note-<%= journal.indice %>">
<h4><a href="#note-<%= journal.indice %>" class="journal-link">#<%= journal.indice %></a>
<%= avatar(journal.user, :size => "24") %>
<%= authoring journal.created_on, journal.user, :label => :label_updated_time_by %>
<%= render_private_notes_indicator(journal) %></h4>
<div class="contextual">
<span class="journal-actions"><%= render_journal_actions(issue, journal, :reply_links => reply_links) %></span>
<a href="#note-<%= journal.indice %>" class="journal-link">#<%= journal.indice %></a>
</div>
<h4 class='note-header'>
<%= avatar(journal.user) %>
<%= authoring journal.created_on, journal.user, :label => :label_updated_time_by %>
<%= render_private_notes_indicator(journal) %>
</h4>
<% if journal.details.any? %>
<ul class="details">

View file

@ -0,0 +1,28 @@
<% for time_entry in time_entries%>
<div id="time-entry-<%= time_entry.id %>" class="time_entry journal">
<% if time_entry.editable_by?(User.current) -%>
<div class="contextual">
<%= link_to l(:button_edit), edit_time_entry_path(time_entry),
:title => l(:button_edit),
:class => 'icon-only icon-edit' %>
<%= link_to l(:button_delete), time_entry_path(time_entry),
:data => {:confirm => l(:text_are_you_sure)},
:method => :delete,
:title => l(:button_delete),
:class => 'icon-only icon-del' %>
</div>
<% end -%>
<h4>
<%= avatar(time_entry.user, :size => "24") %>
<%= authoring time_entry.created_on, time_entry.user, :label => :label_added_time_by %>
</h4>
<ul class="details">
<li>
<strong><%= l(:label_time_entry_plural) %></strong>:
<%= l_hours_short time_entry.hours %>
</li>
</ul>
<p><%= time_entry.comments %></p>
</div>
<%= call_hook(:view_issues_history_time_entry_bottom, { :time_entry => time_entry }) %>
<% end %>