[#263] Add new layout and theme
Merge branch 'ticket/unstable/263-new-layout-ready' into unstable
|
@ -389,7 +389,9 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
def page_header_title
|
||||
if @project.nil? || @project.new_record?
|
||||
if @page_header_title.present?
|
||||
h(@page_header_title)
|
||||
elsif @project.nil? || @project.new_record?
|
||||
h(Setting.app_title)
|
||||
else
|
||||
b = []
|
||||
|
@ -935,6 +937,32 @@ module ApplicationHelper
|
|||
end
|
||||
end
|
||||
|
||||
# Expands the current menu item using JavaScript based on the params
|
||||
def expand_current_menu
|
||||
current_menu_class =
|
||||
case
|
||||
when params[:controller] == "timelog"
|
||||
"reports"
|
||||
when params[:controller] == 'projects' && params[:action] == 'changelog'
|
||||
"reports"
|
||||
when params[:controller] == 'issues' && ['calendar','gantt'].include?(params[:action])
|
||||
"reports"
|
||||
when params[:controller] == 'projects' && params[:action] == 'roadmap'
|
||||
'roadmap'
|
||||
when params[:controller] == 'versions' && params[:action] == 'show'
|
||||
'roadmap'
|
||||
when params[:controller] == 'projects' && params[:action] == 'settings'
|
||||
'settings'
|
||||
when params[:controller] == 'contracts' || params[:controller] == 'deliverables'
|
||||
'contracts'
|
||||
else
|
||||
params[:controller]
|
||||
end
|
||||
|
||||
|
||||
javascript_tag("jQuery.menu_expand({ menuItem: '.#{current_menu_class}' });")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def wiki_helper
|
||||
|
|
|
@ -52,13 +52,14 @@ module IssuesHelper
|
|||
"<strong>#{@cached_label_priority}</strong>: #{h(issue.priority.name)}"
|
||||
end
|
||||
|
||||
# TODO: deprecate and/or remove
|
||||
def render_issue_subject_with_tree(issue)
|
||||
s = ''
|
||||
ancestors = issue.root? ? [] : issue.ancestors.all
|
||||
ancestors.each do |ancestor|
|
||||
s << '<div>' + content_tag('p', link_to_issue(ancestor))
|
||||
s << '<div>' + content_tag('h2', link_to_issue(ancestor))
|
||||
end
|
||||
s << '<div>' + content_tag('h3', h(issue.subject))
|
||||
s << '<div class="subject">' + content_tag('h2', h(issue.subject))
|
||||
s << '</div>' * (ancestors.size + 1)
|
||||
s
|
||||
end
|
||||
|
|
|
@ -27,24 +27,29 @@ module JournalsHelper
|
|||
|
||||
def render_journal(model, journal, options = {})
|
||||
return "" if journal.initial?
|
||||
journal_content = render_journal_details(journal, :label_updated_time_by)
|
||||
journal_content += render_notes(model, journal, options) unless journal.notes.blank?
|
||||
journal_content = render_journal_details(journal, :label_updated_time_by, model, options)
|
||||
content_tag "div", journal_content, { :id => "change-#{journal.id}", :class => journal.css_classes }
|
||||
end
|
||||
|
||||
# This renders a journal entry wiht a header and details
|
||||
def render_journal_details(journal, header_label = :label_updated_time_by)
|
||||
# This renders a journal entry with a header and details
|
||||
def render_journal_details(journal, header_label = :label_updated_time_by, model=nil, options={})
|
||||
header = <<-HTML
|
||||
<h4>
|
||||
<div style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div>
|
||||
#{avatar(journal.user, :size => "24")}
|
||||
#{content_tag('a', '', :name => "note-#{journal.anchor}")}
|
||||
<div class="journal-link" style="float:right;">#{link_to "##{journal.anchor}", :anchor => "note-#{journal.anchor}"}</div>
|
||||
#{authoring journal.created_at, journal.user, :label => header_label}
|
||||
#{content_tag('a', '', :name => "note-#{journal.anchor}")}
|
||||
</h4>
|
||||
|
||||
<div class="profile-wrap">
|
||||
#{avatar(journal.user, :size => "40")}
|
||||
</div>
|
||||
|
||||
#{render_notes(model, journal, options) unless journal.notes.blank?}
|
||||
|
||||
HTML
|
||||
|
||||
if journal.details.any?
|
||||
details = content_tag "ul", :class => "details" do
|
||||
details = content_tag "ul", :class => "details journal-attributes" do
|
||||
journal.details.collect do |detail|
|
||||
if d = journal.render_detail(detail)
|
||||
content_tag("li", d)
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
<div id="admin-menu">
|
||||
<ul>
|
||||
<%= render_menu :admin_menu %>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
<h2><%=l(:label_administration)%></h2>
|
||||
|
||||
<div id="admin-index">
|
||||
<%= render :partial => 'no_data' if @no_configuration_data %>
|
||||
<%= render :partial => 'menu' %>
|
||||
|
|
|
@ -1,52 +1,55 @@
|
|||
<ul>
|
||||
<ul class="menu">
|
||||
<%= call_hook(:view_issues_context_menu_start, {:issues => @issues, :can => @can, :back => @back }) %>
|
||||
|
||||
<% if !@issue.nil? -%>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
|
||||
<li class="edit"><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% else %>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
|
||||
<li class="edit"><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% end %>
|
||||
|
||||
<% if @allowed_statuses.present? %>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
|
||||
<li class="folder status">
|
||||
<a href="#" class="context_item" onclick="return false;"><%= l(:field_status) %></a>
|
||||
<ul>
|
||||
<% @statuses.each do |s| -%>
|
||||
<li><%= context_menu_link s.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {:status_id => s}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% unless @trackers.nil? %>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_tracker) %></a>
|
||||
<li class="folder tracker">
|
||||
<a href="#" class="context_item"><%= l(:field_tracker) %></a>
|
||||
<ul>
|
||||
<% @trackers.each do |t| -%>
|
||||
<li><%= context_menu_link t.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'tracker_id' => t}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && t == @issue.tracker), :disabled => !@can[:edit] %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_priority) %></a>
|
||||
<li class="folder priority">
|
||||
<a href="#" class="context_item"><%= l(:field_priority) %></a>
|
||||
<ul>
|
||||
<% @priorities.each do |p| -%>
|
||||
<li><%= context_menu_link p.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'priority_id' => p}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && p == @issue.priority), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
|
||||
<% #TODO: allow editing versions when multiple projects %>
|
||||
<% unless @project.nil? || @project.shared_versions.open.empty? -%>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_fixed_version) %></a>
|
||||
<li class="folder fixed_version">
|
||||
<a href="#" class="context_item"><%= l(:field_fixed_version) %></a>
|
||||
<ul>
|
||||
<% @project.shared_versions.open.sort.each do |v| -%>
|
||||
<li><%= context_menu_link format_version_name(v), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'fixed_version_id' => v}, :back_url => @back}, :method => :post,
|
||||
|
@ -55,11 +58,13 @@
|
|||
<li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'fixed_version_id' => 'none'}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && @issue.fixed_version.nil?), :disabled => !@can[:update] %></li>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% if @assignables.present? -%>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
|
||||
<li class="folder assigned">
|
||||
<a href="#" class="context_item"><%= l(:field_assigned_to) %></a>
|
||||
<ul>
|
||||
<% @assignables.each do |u| -%>
|
||||
<li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'assigned_to_id' => u}, :back_url => @back}, :method => :post,
|
||||
|
@ -68,11 +73,13 @@
|
|||
<li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'assigned_to_id' => 'none'}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && @issue.assigned_to.nil?), :disabled => !@can[:update] %></li>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% unless @project.nil? || @project.issue_categories.empty? -%>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_category) %></a>
|
||||
<a href="#" class="context_item"><%= l(:field_category) %></a>
|
||||
<ul>
|
||||
<% @project.issue_categories.each do |u| -%>
|
||||
<li><%= context_menu_link u.name, {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'category_id' => u}, :back_url => @back}, :method => :post,
|
||||
|
@ -81,28 +88,30 @@
|
|||
<li><%= context_menu_link l(:label_none), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'category_id' => 'none'}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && @issue.category.nil?), :disabled => !@can[:update] %></li>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
<% end -%>
|
||||
|
||||
<% if Issue.use_field_for_done_ratio? %>
|
||||
<li class="folder">
|
||||
<a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
|
||||
<li class="folder done_ratio">
|
||||
<a href="#" class="context_item"><%= l(:field_done_ratio) %></a>
|
||||
<ul>
|
||||
<% (0..10).map{|x|x*10}.each do |p| -%>
|
||||
<li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id), :issue => {'done_ratio' => p}, :back_url => @back}, :method => :post,
|
||||
:selected => (@issue && p == @issue.done_ratio), :disabled => (!@can[:edit] || @issues.detect {|i| !i.leaf?}) %></li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
<div class="submenu"></div>
|
||||
</li>
|
||||
<% end %>
|
||||
|
||||
<% if !@issue.nil? %>
|
||||
<% if @can[:log_time] -%>
|
||||
<li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue},
|
||||
:class => 'icon-time-add' %></li>
|
||||
<li class="log_time"><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue},
|
||||
:class => 'context_item' %></li>
|
||||
<% end %>
|
||||
<% if User.current.logged? %>
|
||||
<li><%= watcher_link(@issue, User.current) %></li>
|
||||
<li class="watch"><%= watcher_link(@issue, User.current) %></li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
|
@ -110,12 +119,13 @@
|
|||
<li><%= context_menu_link l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue},
|
||||
:class => 'icon-duplicate', :disabled => !@can[:copy] %></li>
|
||||
<% end %>
|
||||
<li><%= context_menu_link l(:button_copy), new_issue_move_path(:ids => @issues.collect(&:id), :copy_options => {:copy => 't'}),
|
||||
:class => 'icon-copy', :disabled => !@can[:move] %></li>
|
||||
<li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
|
||||
:class => 'icon-move', :disabled => !@can[:move] %></li>
|
||||
<li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back},
|
||||
:method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
|
||||
|
||||
<li class="move"><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)),
|
||||
:class => 'context_item', :disabled => !@can[:move] %></li>
|
||||
<li class="copy"><%= context_menu_link l(:button_copy), new_issue_move_path(:ids => @issues.collect(&:id), :copy_options => {:copy => 't'}),
|
||||
:class => 'context_item' %></li>
|
||||
<li class="delete"><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
|
||||
:method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'context_item', :disabled => !@can[:delete] %></li>
|
||||
|
||||
<%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
|
||||
</ul>
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
<div class="contextual">
|
||||
<%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
|
||||
<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %>
|
||||
<%= watcher_link(@issue, User.current, {:class => 'watcher_link', :replace => ['#watchers', '.watcher_link']}) %>
|
||||
<%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %>
|
||||
<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %>
|
||||
<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %>
|
||||
<%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %>
|
||||
<div class="update button-large">
|
||||
<%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => '', :accesskey => accesskey(:edit)) %>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
<div class="contextual">
|
||||
<% if authorize_for('issue_relations', 'new') %>
|
||||
<%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<p><strong><%=l(:label_related_issues)%></strong></p>
|
||||
<p>
|
||||
<strong><%=l(:label_related_issues)%></strong>
|
||||
<% if authorize_for('issue_relations', 'new') %>
|
||||
(<%= toggle_link l(:button_add), 'new-relation-form', {:focus => 'relation_issue_to_id'} %>)
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<% if @relations.present? %>
|
||||
<table style="width:100%">
|
||||
|
|
|
@ -1,19 +1,24 @@
|
|||
<div class="title-bar">
|
||||
|
||||
<h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
|
||||
<% html_title(@query.new_record? ? l(:label_issue_plural) : h(@query.name)) %>
|
||||
|
||||
<div class="title-bar-extras">
|
||||
|
||||
<div class="contextual">
|
||||
<% if !@query.new_record? && @query.editable_by?(User.current) %>
|
||||
<%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
|
||||
<%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
|
||||
<% end %>
|
||||
<%= render :partial => 'queries/new_issue_button' %>
|
||||
</div>
|
||||
|
||||
<h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
|
||||
<% html_title(@query.new_record? ? l(:label_issue_plural) : h(@query.name)) %>
|
||||
|
||||
<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
|
||||
<%= hidden_field_tag('project_id', @project.to_param) if @project %>
|
||||
<div id="query_form_content" class="hide-when-print">
|
||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
|
||||
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
|
||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>">
|
||||
<div class="filter-fields" style="<%= @query.new_record? ? "" : "display: none;" %>">
|
||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -55,6 +60,9 @@
|
|||
</p>
|
||||
<% end %>
|
||||
|
||||
</div><!-- .title-bar-extras -->
|
||||
</div><!-- .title-bar -->
|
||||
|
||||
<%= error_messages_for 'query' %>
|
||||
<% if @query.valid? %>
|
||||
<% if @issues.empty? %>
|
||||
|
|
|
@ -1,53 +1,77 @@
|
|||
<%= render :partial => 'action_menu' %>
|
||||
<div class="title-bar" id="upper-title-bar">
|
||||
<div class="subject"><%= content_tag('h2', h(@issue.subject)) %></div>
|
||||
|
||||
<h2><%= h(@issue.tracker.name) %> #<%= h(@issue.id) %><%= call_hook(:view_issues_show_identifier, :issue => @issue) %></h2>
|
||||
<div class="title-bar-actions">
|
||||
<%= render :partial => 'action_menu' %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="<%= @issue.css_classes %> details">
|
||||
<%= avatar(@issue.author, :size => "50") %>
|
||||
<div class="profile-wrap">
|
||||
<%= avatar(@issue.author, :size => "40") %>
|
||||
</div>
|
||||
<h3>
|
||||
<%= h(@issue.tracker.name) %> #<%= @issue.id %>
|
||||
</h3>
|
||||
|
||||
<div class="subject">
|
||||
<%= render_issue_subject_with_tree(@issue) %>
|
||||
</div>
|
||||
<p class="author">
|
||||
<%= authoring @issue.created_on, @issue.author %>.
|
||||
<% if @issue.created_on != @issue.updated_on %>
|
||||
<%= l(:label_updated_time, time_tag(@issue.updated_on)) %>.
|
||||
<% end %>
|
||||
</p>
|
||||
<hr />
|
||||
|
||||
<div class="meta">
|
||||
<table class="attributes">
|
||||
<tr>
|
||||
<th class="status"><%=l(:field_status)%>:</th>
|
||||
<td class="status"><%= h(@issue.status.name) %></td>
|
||||
|
||||
<th class="category"><%=l(:field_category)%>:</th>
|
||||
<td class="category"><%=h(@issue.category ? @issue.category.name : "-") %></td>
|
||||
|
||||
<th class="start-date"><%=l(:field_start_date)%>:</th>
|
||||
<td class="start-date"><%= format_date(@issue.start_date) %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="priority"><%=l(:field_priority)%>:</th>
|
||||
<td class="priority"><%= h(@issue.priority.name) %></td>
|
||||
|
||||
<th class="fixed-version"><%=l(:field_fixed_version)%>:</th>
|
||||
<td class="fixed-version"><%= @issue.fixed_version ? link_to_version(@issue.fixed_version) : "-" %></td>
|
||||
|
||||
<th class="due-date"><%=l(:field_due_date)%>:</th>
|
||||
<td class="due-date"><%= format_date(@issue.due_date) %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="assigned-to"><%=l(:field_assigned_to)%>:</th>
|
||||
<td class="assigned-to"><%= avatar(@issue.assigned_to, :size => "14") %><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
|
||||
|
||||
<th class="progress"><%=l(:field_done_ratio)%>:</th>
|
||||
<td class="progress"><%= progress_bar @issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%" %></td>
|
||||
|
||||
<table class="attributes">
|
||||
<tr>
|
||||
<th class="status"><%=l(:field_status)%>:</th><td class="status"><%= h(@issue.status.name) %></td>
|
||||
<th class="start-date"><%=l(:field_start_date)%>:</th><td class="start-date"><%= format_date(@issue.start_date) %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="priority"><%=l(:field_priority)%>:</th><td class="priority"><%= h(@issue.priority.name) %></td>
|
||||
<th class="due-date"><%=l(:field_due_date)%>:</th><td class="due-date"><%= format_date(@issue.due_date) %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="assigned-to"><%=l(:field_assigned_to)%>:</th><td class="assigned-to"><%= avatar(@issue.assigned_to, :size => "14") %><%= @issue.assigned_to ? link_to_user(@issue.assigned_to) : "-" %></td>
|
||||
<th class="progress"><%=l(:field_done_ratio)%>:</th><td class="progress"><%= progress_bar @issue.done_ratio, :width => '80px', :legend => "#{@issue.done_ratio}%" %></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="category"><%=l(:field_category)%>:</th><td class="category"><%=h(@issue.category ? @issue.category.name : "-") %></td>
|
||||
<% if User.current.allowed_to?(:view_time_entries, @project) %>
|
||||
<th class="spent-time"><%=l(:label_spent_time)%>:</th>
|
||||
<td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}) : "-" %></td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="fixed-version"><%=l(:field_fixed_version)%>:</th><td class="fixed-version"><%= @issue.fixed_version ? link_to_version(@issue.fixed_version) : "-" %></td>
|
||||
<% if @issue.estimated_hours %>
|
||||
<th class="estimated-hours"><%=l(:field_estimated_hours)%>:</th><td class="estimated-hours"><%= l_hours(@issue.estimated_hours) %></td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<%= render_custom_fields_rows(@issue) %>
|
||||
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
|
||||
</table>
|
||||
|
||||
<% if @issue.description? || @issue.attachments.any? -%>
|
||||
<hr />
|
||||
<% if @issue.estimated_hours %>
|
||||
<th class="estimated-hours"><%=l(:field_estimated_hours)%>:</th>
|
||||
<td class="estimated-hours"><%= l_hours(@issue.estimated_hours) %></td>
|
||||
<% end %>
|
||||
</tr>
|
||||
|
||||
<%= render_custom_fields_rows(@issue) %>
|
||||
|
||||
<%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %>
|
||||
</table>
|
||||
</div><!-- .meta -->
|
||||
|
||||
<% if @issue.description? %>
|
||||
<hr />
|
||||
|
||||
<div class="description">
|
||||
<div class="contextual">
|
||||
<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:controller => 'journals', :action => 'new', :id => @issue} }, :class => 'icon icon-comment') %>
|
||||
</div>
|
||||
|
@ -56,8 +80,12 @@
|
|||
<div class="wiki">
|
||||
<%= textilizable @issue, :description, :attachments => @issue.attachments %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= link_to_attachments @issue %>
|
||||
|
||||
<% if @issue.attachments.any? -%>
|
||||
<hr />
|
||||
<%= link_to_attachments @issue %>
|
||||
<% end -%>
|
||||
|
||||
<%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
|
||||
|
@ -65,10 +93,11 @@
|
|||
<% if !@issue.leaf? || User.current.allowed_to?(:manage_subtasks, @project) %>
|
||||
<hr />
|
||||
<div id="issue_tree">
|
||||
<div class="contextual">
|
||||
<%= link_to(l(:button_add), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>
|
||||
</div>
|
||||
<p><strong><%=l(:label_subtask_plural)%></strong></p>
|
||||
<p>
|
||||
<strong><%=l(:label_subtask_plural)%></strong>
|
||||
(<%= link_to(l(:button_add), {:controller => 'issues', :action => 'new', :project_id => @project, :issue => {:parent_issue_id => @issue}}) if User.current.allowed_to?(:manage_subtasks, @project) %>)
|
||||
</p>
|
||||
|
||||
<%= render_descendants_tree(@issue) unless @issue.leaf? %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -98,7 +127,13 @@
|
|||
|
||||
|
||||
<div style="clear: both;"></div>
|
||||
<%= render :partial => 'action_menu' %>
|
||||
|
||||
<div class="title-bar" id="lower-title-bar">
|
||||
<h2><%= h @issue.subject %></h2>
|
||||
<div class="title-bar-actions">
|
||||
<%= render :partial => 'action_menu', :locals => {:replace_watcher => 'watcher2' } %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="clear: both;"></div>
|
||||
<% if authorize_for('issues', 'edit') %>
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
<% unless controller_name == 'admin' && action_name == 'index' %>
|
||||
<% content_for :sidebar do %>
|
||||
<h3><%=l(:label_administration)%></h3>
|
||||
<% @page_header_title = l(:label_administration) %>
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'admin/menu' %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= render :file => "layouts/base" %>
|
||||
|
|
|
@ -7,76 +7,140 @@
|
|||
<meta name="keywords" content="issue,bug,tracker" />
|
||||
<%= csrf_meta_tag %>
|
||||
<%= favicon %>
|
||||
<%= stylesheet_link_tag 'reset', :media => 'all' %>
|
||||
<%= stylesheet_link_tag 'application', :media => 'all' %>
|
||||
<%= stylesheet_link_tag 'print', :media => 'print' %>
|
||||
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
|
||||
<!--[if lte IE 6]><%= stylesheet_link_tag 'ie6', :media => 'all' %><![endif]-->
|
||||
<!--[if lte IE 7]><%= stylesheet_link_tag 'ie7', :media => 'all' %><![endif]-->
|
||||
<!--[if gte IE 8]><![endif]-->
|
||||
|
||||
<%= javascript_include_tag 'jquery.1.3.2.min.js' %>
|
||||
<%= javascript_include_tag 'jquery.menu_expand.js' %>
|
||||
<%= javascript_tag('jQuery.noConflict();') %>
|
||||
<%= javascript_heads %>
|
||||
<%= stylesheet_link_tag 'jstoolbar' %>
|
||||
<%= heads_for_theme %>
|
||||
<!--[if IE 6]>
|
||||
<style type="text/css">
|
||||
* html body{ width: expression( document.documentElement.clientWidth < 900 ? '900px' : '100%' ); }
|
||||
body {behavior: url(<%= stylesheet_path "csshover.htc" %>);}
|
||||
</style>
|
||||
<![endif]-->
|
||||
<% heads_for_wiki_formatter %>
|
||||
<%= call_hook :view_layouts_base_html_head %>
|
||||
<!-- page specific tags -->
|
||||
<%= yield :header_tags -%>
|
||||
</head>
|
||||
<body class="<%=h body_css_classes %>">
|
||||
<div id="wrapper">
|
||||
<div id="wrapper2">
|
||||
<div id="top-menu">
|
||||
<div id="top-menu">
|
||||
<div id="account">
|
||||
<%= render_menu :account_menu -%>
|
||||
</div>
|
||||
<%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => 'loggedas') if User.current.logged? %>
|
||||
<%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
|
||||
</div>
|
||||
<% account_items = menu_items_for(:account_menu) %>
|
||||
|
||||
<ul id="account-info">
|
||||
<%= content_tag('li', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}", :id => '') if User.current.logged? %>
|
||||
<% account_items.each do |item| %>
|
||||
<%= render_menu_node(item) %>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<%
|
||||
items_for_main_level = []
|
||||
items_for_more_level = []
|
||||
menu_items_for(:top_menu) do |item|
|
||||
if item.name == :home || item.name == :my_page
|
||||
items_for_main_level << item
|
||||
elsif item.name == :projects
|
||||
# Remove
|
||||
else
|
||||
items_for_more_level << item
|
||||
end
|
||||
end
|
||||
%>
|
||||
|
||||
<div id="header">
|
||||
<% if User.current.logged? || !Setting.login_required? %>
|
||||
<div id="quick-search">
|
||||
<% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
|
||||
<%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
|
||||
<ul id="account-nav">
|
||||
<% items_for_main_level.each do |item| %>
|
||||
<%= render_menu_node(item) %>
|
||||
<% end %>
|
||||
<li class="drop-down">
|
||||
<%= link_to l(:label_project_plural), { :controller => 'projects', :action => 'index' }, :class => "projects" %>
|
||||
<ul style="display:none;">
|
||||
<%
|
||||
project_content = ''
|
||||
project_tree(User.current.projects.all) do |project, level|
|
||||
name_prefix = (level > 0 ? (' ' * 2 * level + '» ') : '')
|
||||
project_content << content_tag(:li,
|
||||
link_to(name_prefix + h(project), {:controller => 'projects', :action => 'show', :id => project, :jump => current_menu_item}))
|
||||
end
|
||||
%>
|
||||
<%= project_content %>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="drop-down" id="more-menu">
|
||||
<a class="more" href="#">More</a>
|
||||
<ul style="display:none;">
|
||||
<% items_for_more_level.each do |item| %>
|
||||
<%= render_menu_node(item) %>
|
||||
<% end %>
|
||||
<%# TODO: Redmine defines these in a view, should be moved to a helper or data structure %>
|
||||
<% if User.current.admin? %>
|
||||
<% menu_items_for(:admin_menu) do |item| -%>
|
||||
<li><%= link_to h(item.caption), item.url, item.html_options %></li>
|
||||
<% end -%>
|
||||
<% end %>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<label for='q'>
|
||||
<%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project}, :accesskey => accesskey(:search) %>:
|
||||
<%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project}, :accesskey => accesskey(:search), :class => 'search' %>
|
||||
</label>
|
||||
<% form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get, :id => 'nav-search' ) do %>
|
||||
<%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
|
||||
<%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %>
|
||||
<% end %>
|
||||
<%= render_project_jump_box %>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<h1><%= page_header_title %></h1>
|
||||
</div>
|
||||
|
||||
<% if display_main_menu?(@project) %>
|
||||
<% main_menu = render_main_menu(@project) %>
|
||||
<% if has_content?(:sidebar) || !main_menu.blank? %>
|
||||
<% display_sidebar = true %>
|
||||
<% else %>
|
||||
<% display_sidebar = false %>
|
||||
<% end %>
|
||||
<div id="main" class="<%= display_sidebar ? '' : "nosidebar" %>">
|
||||
|
||||
<h1 class="title"><%= page_header_title %></h1>
|
||||
<% if display_sidebar %>
|
||||
<div id="main-menu">
|
||||
<%= render_main_menu(@project) %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= tag('div', {:id => 'main', :class => (has_content?(:sidebar) ? '' : 'nosidebar')}, true) %>
|
||||
<%= main_menu %>
|
||||
<!-- Sidebar -->
|
||||
<div id="sidebar">
|
||||
<%= yield :sidebar %>
|
||||
<%= call_hook :view_layouts_base_sidebar %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="content">
|
||||
<%= expand_current_menu %>
|
||||
<% end %>
|
||||
|
||||
<div class="<%= display_sidebar ? '' : "nosidebar" %>" id="content">
|
||||
<%= render_flash_messages %>
|
||||
<%= yield %>
|
||||
<%= call_hook :view_layouts_base_content %>
|
||||
<div style="clear:both;"></div>
|
||||
<div style="clear:both;"> </div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
|
||||
</div>
|
||||
|
||||
<div id="footer">
|
||||
<div id="footer">
|
||||
<div class="bgl"><div class="bgr">
|
||||
<%= l(:text_powered_by, :link => link_to(Redmine::Info.app_name, Redmine::Info.url)) %>
|
||||
</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
|
||||
|
||||
</div>
|
||||
<%= call_hook :view_layouts_base_body_bottom %>
|
||||
</body>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %>
|
||||
<% end %>
|
||||
|
||||
<div class="contextual">
|
||||
<div id="project-links" class="contextual">
|
||||
<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') + ' |' if User.current.allowed_to?(:add_project, nil, :global => true) %>
|
||||
<%= link_to(l(:label_issue_view_all), { :controller => 'issues' }) + ' |' if User.current.allowed_to?(:view_issues, nil, :global => true) %>
|
||||
<%= link_to(l(:label_overall_spent_time), { :controller => 'time_entries' }) + ' |' if User.current.allowed_to?(:view_time_entries, nil, :global => true) %>
|
||||
|
@ -12,6 +12,10 @@
|
|||
|
||||
<h2><%=l(:label_project_plural)%></h2>
|
||||
|
||||
<div class="wiki">
|
||||
<%= textilizable Setting.welcome_text %>
|
||||
</div>
|
||||
|
||||
<%= render_project_hierarchy(@projects)%>
|
||||
|
||||
<% if User.current.logged? %>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<% if @project %>
|
||||
<div class="new-issue button-large">
|
||||
<%= link_to("Open a New Issue", {:controller => 'issues', :action => 'new', :project_id => @project}, :title => "Open a New Issue", :class => '') %>
|
||||
</div>
|
||||
<% end %>
|
|
@ -47,6 +47,7 @@
|
|||
<% @versions.each do |version| %>
|
||||
<%= link_to format_version_name(version), "##{version.name}" %><br />
|
||||
<% end %>
|
||||
|
||||
<% end %>
|
||||
|
||||
<% html_title(l(:label_roadmap)) %>
|
||||
|
|
Before Width: | Height: | Size: 680 B After Width: | Height: | Size: 465 B |
After Width: | Height: | Size: 168 B |
After Width: | Height: | Size: 185 B |
After Width: | Height: | Size: 179 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 231 B |
After Width: | Height: | Size: 231 B |
After Width: | Height: | Size: 158 B |
After Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 622 B After Width: | Height: | Size: 593 B |
After Width: | Height: | Size: 381 B |
After Width: | Height: | Size: 718 B |
Before Width: | Height: | Size: 121 B After Width: | Height: | Size: 252 B |
Before Width: | Height: | Size: 360 B After Width: | Height: | Size: 413 B |
Before Width: | Height: | Size: 925 B After Width: | Height: | Size: 450 B |
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 715 B |
After Width: | Height: | Size: 641 B |
After Width: | Height: | Size: 406 B |
After Width: | Height: | Size: 193 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 590 B After Width: | Height: | Size: 590 B |
Before Width: | Height: | Size: 715 B After Width: | Height: | Size: 715 B |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
Before Width: | Height: | Size: 735 B After Width: | Height: | Size: 735 B |
Before Width: | Height: | Size: 624 B After Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 754 B After Width: | Height: | Size: 754 B |
Before Width: | Height: | Size: 706 B After Width: | Height: | Size: 706 B |
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 746 B |
Before Width: | Height: | Size: 434 B After Width: | Height: | Size: 434 B |
Before Width: | Height: | Size: 529 B After Width: | Height: | Size: 529 B |
Before Width: | Height: | Size: 647 B After Width: | Height: | Size: 647 B |
Before Width: | Height: | Size: 646 B After Width: | Height: | Size: 646 B |
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 675 B |
Before Width: | Height: | Size: 608 B After Width: | Height: | Size: 608 B |
Before Width: | Height: | Size: 492 B After Width: | Height: | Size: 492 B |
Before Width: | Height: | Size: 760 B After Width: | Height: | Size: 760 B |
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 344 B |
Before Width: | Height: | Size: 420 B After Width: | Height: | Size: 420 B |
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 669 B |
Before Width: | Height: | Size: 736 B After Width: | Height: | Size: 736 B |
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 695 B |
Before Width: | Height: | Size: 634 B After Width: | Height: | Size: 634 B |
Before Width: | Height: | Size: 523 B After Width: | Height: | Size: 523 B |
Before Width: | Height: | Size: 581 B After Width: | Height: | Size: 581 B |
Before Width: | Height: | Size: 844 B After Width: | Height: | Size: 844 B |
Before Width: | Height: | Size: 384 B After Width: | Height: | Size: 384 B |
Before Width: | Height: | Size: 757 B After Width: | Height: | Size: 757 B |
Before Width: | Height: | Size: 330 B After Width: | Height: | Size: 330 B |
Before Width: | Height: | Size: 622 B After Width: | Height: | Size: 622 B |
Before Width: | Height: | Size: 760 B After Width: | Height: | Size: 760 B |
Before Width: | Height: | Size: 697 B After Width: | Height: | Size: 697 B |
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 745 B |
Before Width: | Height: | Size: 623 B After Width: | Height: | Size: 623 B |
Before Width: | Height: | Size: 703 B After Width: | Height: | Size: 703 B |
Before Width: | Height: | Size: 757 B After Width: | Height: | Size: 757 B |
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 421 B |
Before Width: | Height: | Size: 759 B After Width: | Height: | Size: 759 B |
Before Width: | Height: | Size: 773 B After Width: | Height: | Size: 773 B |
Before Width: | Height: | Size: 831 B After Width: | Height: | Size: 831 B |
Before Width: | Height: | Size: 787 B After Width: | Height: | Size: 787 B |
Before Width: | Height: | Size: 825 B After Width: | Height: | Size: 825 B |
Before Width: | Height: | Size: 730 B After Width: | Height: | Size: 730 B |
Before Width: | Height: | Size: 846 B After Width: | Height: | Size: 846 B |
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 261 B |
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 717 B |
After Width: | Height: | Size: 119 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 207 B |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 5.9 KiB |