Redmine 4.1.1
This commit is contained in:
parent
33e7b881a5
commit
3d976f1b3b
1593 changed files with 36180 additions and 19489 deletions
|
@ -1,28 +1,27 @@
|
|||
<%= call_hook :view_account_login_top %>
|
||||
|
||||
<div id="login-form">
|
||||
<h2><%= l(:label_login) %></h2>
|
||||
<%= form_tag(signin_path, onsubmit: 'return keepAnchorOnSignIn(this);') do %>
|
||||
<%= back_url_hidden_field_tag %>
|
||||
|
||||
|
||||
<label for="username"><%=l(:field_login)%></label>
|
||||
<%= text_field_tag 'username', params[:username], :tabindex => '1' %>
|
||||
|
||||
|
||||
<label for="password">
|
||||
<%=l(:field_password)%>
|
||||
<%= link_to l(:label_password_lost), lost_password_path, :class => "lost_password" if Setting.lost_password? %>
|
||||
</label>
|
||||
<%= password_field_tag 'password', nil, :tabindex => '2' %>
|
||||
|
||||
|
||||
<% if Setting.openid? %>
|
||||
<label for="openid_url"><%=l(:field_identity_url)%></label>
|
||||
<%= text_field_tag "openid_url", nil, :tabindex => '3' %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<% if Setting.autologin? %>
|
||||
<label for="autologin"><%= check_box_tag 'autologin', 1, false, :tabindex => 4 %> <%= l(:label_stay_logged_in) %></label>
|
||||
<% end %>
|
||||
|
||||
|
||||
<input type="submit" name="login" value="<%=l(:button_login)%>" tabindex="5" id="login-submit" />
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
<label for="new_password"><%=l(:field_new_password)%> <span class="required">*</span></label>
|
||||
<%= password_field_tag 'new_password', nil, :size => 25 %>
|
||||
<em class="info"><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em>
|
||||
<% if Setting.password_required_char_classes.any? %>
|
||||
<em class="info"><%= l(:text_characters_must_contain, :character_classes => Setting.password_required_char_classes.collect{|c| l("label_password_char_class_#{c}")}.join(", ")) %></em>
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
@ -8,8 +8,11 @@
|
|||
<p><%= f.text_field :login, :size => 25, :required => true %></p>
|
||||
|
||||
<p><%= f.password_field :password, :size => 25, :required => true %>
|
||||
<em class="info"><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em></p>
|
||||
|
||||
<em class="info"><%= l(:text_caracters_minimum, :count => Setting.password_min_length) %></em>
|
||||
<% if Setting.password_required_char_classes.any? %>
|
||||
<em class="info"><%= l(:text_characters_must_contain, :character_classes => Setting.password_required_char_classes.collect{|c| l("label_password_char_class_#{c}")}.join(", ")) %></em>
|
||||
<% end %>
|
||||
</p>
|
||||
<p><%= f.password_field :password_confirmation, :size => 25, :required => true %></p>
|
||||
<% end %>
|
||||
|
||||
|
|
17
app/views/activities/_activities.html.erb
Normal file
17
app/views/activities/_activities.html.erb
Normal file
|
@ -0,0 +1,17 @@
|
|||
<div id="activity">
|
||||
<% events_by_day.keys.sort.reverse_each do |day| %>
|
||||
<h3><%= format_activity_day(day) %></h3>
|
||||
<dl>
|
||||
<% sort_activity_events(events_by_day[day]).each do |e, in_group| -%>
|
||||
<dt class="<%= e.event_type %> icon icon-<%= e.event_type %> <%= "grouped" if in_group %> <%= User.current.logged? && e.respond_to?(:event_author) && User.current == e.event_author ? 'me' : nil %>">
|
||||
<%= avatar(e.event_author) if e.respond_to?(:event_author) %>
|
||||
<span class="time"><%= format_time(e.event_datetime, false) %></span>
|
||||
<%= content_tag('span', e.project, :class => 'project') if @project.nil? || @project != e.project %>
|
||||
<%= link_to format_activity_title(e.event_title), e.event_url %>
|
||||
</dt>
|
||||
<dd class="<%= "grouped" if in_group %>"><span class="description"><%= format_activity_description(e.event_description) %></span>
|
||||
<span class="author"><%= link_to_user(e.event_author) if e.respond_to?(:event_author) %></span></dd>
|
||||
<% end -%>
|
||||
</dl>
|
||||
<% end -%>
|
||||
</div>
|
|
@ -1,24 +1,8 @@
|
|||
<h2><%= @author.nil? ? l(:label_activity) : l(:label_user_activity, link_to_user(@author)).html_safe %></h2>
|
||||
|
||||
<p class="subtitle"><%= l(:label_date_from_to, :start => format_date(@date_to - @days), :end => format_date(@date_to-1)) %></p>
|
||||
|
||||
<div id="activity">
|
||||
<% @events_by_day.keys.sort.reverse.each do |day| %>
|
||||
<h3><%= format_activity_day(day) %></h3>
|
||||
<dl>
|
||||
<% sort_activity_events(@events_by_day[day]).each do |e, in_group| -%>
|
||||
<dt class="<%= e.event_type %> icon icon-<%= e.event_type %> <%= "grouped" if in_group %> <%= User.current.logged? && e.respond_to?(:event_author) && User.current == e.event_author ? 'me' : nil %>">
|
||||
<%= avatar(e.event_author, :size => "24") if e.respond_to?(:event_author) %>
|
||||
<span class="time"><%= format_time(e.event_datetime, false) %></span>
|
||||
<%= content_tag('span', e.project, :class => 'project') if @project.nil? || @project != e.project %>
|
||||
<%= link_to format_activity_title(e.event_title), e.event_url %>
|
||||
</dt>
|
||||
<dd class="<%= "grouped" if in_group %>"><span class="description"><%= format_activity_description(e.event_description) %></span>
|
||||
<span class="author"><%= link_to_user(e.event_author) if e.respond_to?(:event_author) %></span></dd>
|
||||
<% end -%>
|
||||
</dl>
|
||||
<% end -%>
|
||||
</div>
|
||||
|
||||
<%= render :partial => 'activities/activities', :locals => {:events_by_day => @events_by_day} %>
|
||||
<%= content_tag('p', l(:label_no_data), :class => 'nodata') if @events_by_day.empty? %>
|
||||
|
||||
<span class="pagination">
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<td><%= format_date(project.created_on) %></td>
|
||||
<td class="buttons">
|
||||
<%= link_to(l(:button_archive), archive_project_path(project, :status => params[:status]), :data => {:confirm => l(:text_are_you_sure)}, :method => :post, :class => 'icon icon-lock') unless project.archived? %>
|
||||
<%= link_to(l(:button_unarchive), unarchive_project_path(project, :status => params[:status]), :method => :post, :class => 'icon icon-unlock') if project.archived? && (project.parent.nil? || !project.parent.archived?) %>
|
||||
<%= link_to(l(:button_unarchive), unarchive_project_path(project, :status => params[:status]), :method => :post, :class => 'icon icon-unlock') if project.archived? %>
|
||||
<%= link_to(l(:button_copy), copy_project_path(project), :class => 'icon icon-copy') %>
|
||||
<%= link_to(l(:button_delete), project_path(project), :method => :delete, :class => 'icon icon-del') %>
|
||||
</td>
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<h2><%= l(:label_edit_attachments) %></h2>
|
||||
<h2>
|
||||
<%= safe_join([link_to_attachment_container(@container), l(:label_edit_attachments)].compact, ' » ') %>
|
||||
</h2>
|
||||
|
||||
<%= error_messages_for *@attachments %>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<%= render :layout => 'layouts/file' do %>
|
||||
|
||||
<%= render :partial => 'common/file', :locals => {:content => @content, :filename => @attachment.filename} %>
|
||||
<%= render_file_content(@attachment, @content) %>
|
||||
<% end %>
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
<%= render :layout => 'layouts/file' do %>
|
||||
<%= render :partial => 'common/other',
|
||||
|
||||
<% kind = if @attachment.is_video?
|
||||
'video'
|
||||
elsif @attachment.is_audio?
|
||||
'audio'
|
||||
end %>
|
||||
|
||||
<%= render :partial => "common/other",
|
||||
:locals => {
|
||||
:kind => kind,
|
||||
:path => download_named_attachment_url(@attachment,
|
||||
@attachment.filename),
|
||||
:download_link => link_to_attachment(
|
||||
@attachment,
|
||||
:text => l(:label_no_preview_download),
|
||||
|
|
|
@ -3,7 +3,11 @@
|
|||
<div class="box tabular">
|
||||
<p><%= f.text_field :name, :required => true %></p>
|
||||
<p><%= f.text_field :host, :required => true %></p>
|
||||
<p><%= f.text_field :port, :required => true, :size => 6 %> <%= f.check_box :tls, :no_label => true %> LDAPS</p>
|
||||
<p>
|
||||
<%= f.text_field :port, :required => true, :size => 6 %>
|
||||
<%= f.select :ldap_mode, AuthSourceLdap::LDAP_MODES.map { |m| [l("label_#{m}"), m] }, :no_label => true %>
|
||||
<em class="info ldaps_warning"><%= l("label_ldaps_warning") %></em>
|
||||
</p>
|
||||
<p><%= f.text_field :account %></p>
|
||||
<p><%= f.password_field :account_password, :label => :field_password,
|
||||
:name => 'dummy_password',
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<%= raw @issues.map {|issue| {
|
||||
'id' => issue.id,
|
||||
'label' => "#{issue.tracker} ##{issue.id}: #{issue.subject.to_s.truncate(60)}",
|
||||
'value' => issue.id
|
||||
}
|
||||
}.to_json
|
||||
%>
|
|
@ -1,3 +1,9 @@
|
|||
<div class="contextual">
|
||||
<%= link_to_if_authorized l(:label_settings),
|
||||
{:controller => 'projects', :action => 'settings', :id => @project, :tab => 'boards'},
|
||||
:class => 'icon icon-settings' if User.current.allowed_to?(:manage_boards, @project) %>
|
||||
</div>
|
||||
|
||||
<h2><%= l(:label_board_plural) %></h2>
|
||||
|
||||
<table class="list boards">
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
:class => 'icon icon-add',
|
||||
:onclick => 'showAndScrollTo("add-message", "message_subject"); return false;' if User.current.allowed_to?(:add_messages, @board.project) %>
|
||||
<%= watcher_link(@board, User.current) %>
|
||||
<%= link_to_if_authorized l(:label_settings),
|
||||
{:controller => 'projects', :action => 'settings', :id => @project, :tab => 'boards'},
|
||||
:class => 'icon icon-settings' if User.current.allowed_to?(:manage_boards, @project) %>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="add-message" style="display:none;">
|
||||
|
@ -14,10 +18,8 @@
|
|||
<%= form_for @message, :url => new_board_message_path(@board), :html => {:multipart => true, :id => 'message-form'} do |f| %>
|
||||
<%= render :partial => 'messages/form', :locals => {:f => f} %>
|
||||
<p><%= submit_tag l(:button_create) %>
|
||||
<%= preview_link(preview_board_message_path(@board), 'message-form') %> |
|
||||
<%= link_to l(:button_cancel), "#", :onclick => '$("#add-message").hide(); return false;' %></p>
|
||||
<% end %>
|
||||
<div id="preview" class="wiki"></div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
|
@ -60,7 +62,6 @@
|
|||
<% end %>
|
||||
|
||||
<% html_title @board.name %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %>
|
||||
<% end %>
|
||||
|
|
|
@ -3,26 +3,31 @@
|
|||
<%= form_tag({:controller => 'calendars', :action => 'show', :project_id => @project},
|
||||
:method => :get, :id => 'query_form') do %>
|
||||
<%= hidden_field_tag 'set_filter', '1' %>
|
||||
<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;" %>">
|
||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<p style="float:right;">
|
||||
<div id="query_form_with_buttons" class="hide-when-print">
|
||||
<div id="query_form_content">
|
||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
|
||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expended" : "collapsed" %>"><%= l(:label_filter_plural) %></legend>
|
||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>">
|
||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<p class="contextual">
|
||||
<%= link_to_previous_month(@year, @month, :accesskey => accesskey(:previous)) %> | <%= link_to_next_month(@year, @month, :accesskey => accesskey(:next)) %>
|
||||
</p>
|
||||
|
||||
<p class="buttons">
|
||||
<%= label_tag('month', l(:label_month)) %>
|
||||
<%= select_month(@month, :prefix => "month", :discard_type => true) %>
|
||||
<%= label_tag('year', l(:label_year)) %>
|
||||
<%= select_year(@year, :prefix => "year", :discard_type => true) %>
|
||||
<%= label_tag('month', l(:label_month)) %>
|
||||
<%= select_month(@month, :prefix => "month", :discard_type => true) %>
|
||||
<%= label_tag('year', l(:label_year)) %>
|
||||
<%= select_year(@year, :prefix => "year", :discard_type => true) %>
|
||||
|
||||
<%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %>
|
||||
<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
|
||||
<%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %>
|
||||
<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 }, :class => 'icon icon-reload' %>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= error_messages_for 'query' %>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
<%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
|
||||
<%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
|
||||
<table class="cal">
|
||||
<thead>
|
||||
<tr><th scope="col" title="<%= l(:label_week) %>" class="week-number"></th><% 7.times do |i| %><th scope="col"><%= day_name( (calendar.first_wday+i)%7 ) %></th><% end %></tr>
|
||||
|
@ -7,14 +9,15 @@
|
|||
<% day = calendar.startdt
|
||||
while day <= calendar.enddt %>
|
||||
<%= ("<td class='week-number' title='#{ l(:label_week) }'>#{(day+(11-day.cwday)%7).cweek}</td>".html_safe) if day.cwday == calendar.first_wday %>
|
||||
<td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if User.current.today == day %>">
|
||||
<td class="<%= calendar_day_css_classes(calendar, day) %>">
|
||||
<p class="day-num"><%= day.day %></p>
|
||||
<% calendar.events_on(day).each do |i| %>
|
||||
<% if i.is_a? Issue %>
|
||||
<div class="<%= i.css_classes %> <%= 'starting' if day == i.start_date %> <%= 'ending' if day == i.due_date %> tooltip">
|
||||
<div class="<%= i.css_classes %> <%= 'starting' if day == i.start_date %> <%= 'ending' if day == i.due_date %> tooltip hascontextmenu">
|
||||
<%= "#{i.project} -" unless @project && @project == i.project %>
|
||||
<%= link_to_issue i, :truncate => 30 %>
|
||||
<span class="tip"><%= render_issue_tooltip i %></span>
|
||||
<%= check_box_tag 'ids[]', i.id, false, :style => 'display:none;', :id => nil %>
|
||||
</div>
|
||||
<% else %>
|
||||
<span class="icon icon-package">
|
||||
|
@ -30,3 +33,5 @@ end %>
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<% end %>
|
||||
<%= context_menu %>
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th colspan="4" class="filename">
|
||||
<% if table_file.previous_file_name %>
|
||||
<span class="previous-filename"><%= table_file.previous_file_name %> →</span>
|
||||
<% end %>
|
||||
<%= table_file.file_name %>
|
||||
</th>
|
||||
</tr>
|
||||
|
@ -40,6 +43,9 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th colspan="3" class="filename">
|
||||
<% if table_file.previous_file_name %>
|
||||
<span class="previous-filename"><%= table_file.previous_file_name %> →</span>
|
||||
<% end %>
|
||||
<%= table_file.file_name %>
|
||||
</th>
|
||||
</tr>
|
||||
|
|
3
app/views/common/_markup.html.erb
Normal file
3
app/views/common/_markup.html.erb
Normal file
|
@ -0,0 +1,3 @@
|
|||
<div class="filecontent wiki">
|
||||
<%= Redmine::WikiFormatting.to_html(markup_text_formatting, Redmine::CodesetUtil.to_utf8_by_setting(markup_text)).html_safe %>
|
||||
</div>
|
8
app/views/common/_no_preview.html.erb
Normal file
8
app/views/common/_no_preview.html.erb
Normal file
|
@ -0,0 +1,8 @@
|
|||
<p class="nodata">
|
||||
<% if download_link %>
|
||||
<%= t(:label_no_preview_alternative_html, link: download_link) %>
|
||||
<% else %>
|
||||
<%= l(:label_no_preview) %>
|
||||
<% end %>
|
||||
</p>
|
||||
|
|
@ -1,7 +1,23 @@
|
|||
<p class="nodata">
|
||||
<% if defined? download_link %>
|
||||
<%= t(:label_no_preview_alternative_html, link: download_link) %>
|
||||
<% download_link = nil unless defined? download_link %>
|
||||
<% kind = nil unless defined? kind %>
|
||||
<% path = nil unless defined? path %>
|
||||
|
||||
<% if path.present? %>
|
||||
|
||||
<% if kind == 'video' %>
|
||||
<%= content_tag :video, class: 'filecontent', src: path, controls: true do %>
|
||||
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
|
||||
<% end %>
|
||||
<% elsif kind == 'audio' %>
|
||||
<%= content_tag :audio, class: 'filecontent', src: path, controls: true do %>
|
||||
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= l(:label_no_preview) %>
|
||||
<% end %>
|
||||
</p>
|
||||
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
|
||||
<% end %>
|
||||
|
||||
<% else %>
|
||||
|
||||
<%= render partial: 'common/no_preview', locals: { download_link: download_link } %>
|
||||
|
||||
<% end %>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
<fieldset class="preview"><legend><%= l(:label_preview) %></legend>
|
||||
<%= textilizable @text, :attachments => @attachments, :object => @previewed %>
|
||||
</fieldset>
|
||||
<% unless @text.blank? %>
|
||||
<%= textilizable @text, :attachments => @attachments, :object => @previewed %>
|
||||
<% else %>
|
||||
<p class="empty-preview"><%= l(:label_nothing_to_preview) %></p>
|
||||
<% end %>
|
|
@ -1,10 +1,14 @@
|
|||
<% default_action = false %>
|
||||
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<% tabs.each do |tab| -%>
|
||||
<% action = get_tab_action(tab) %>
|
||||
<li><%= link_to l(tab[:label]), (tab[:url] || { :tab => tab[:name] }),
|
||||
:id => "tab-#{tab[:name]}",
|
||||
:class => (tab[:name] != selected_tab ? nil : 'selected'),
|
||||
:onclick => tab[:partial] ? "showTab('#{tab[:name]}', this.href); this.blur(); return false;" : nil %></li>
|
||||
:onclick => (action.nil? ? nil : "#{ action }; return false;") %></li>
|
||||
<% default_action = action if tab[:name] == selected_tab %>
|
||||
<% end -%>
|
||||
</ul>
|
||||
<div class="tabs-buttons" style="display:none;">
|
||||
|
@ -14,8 +18,10 @@
|
|||
</div>
|
||||
|
||||
<% tabs.each do |tab| -%>
|
||||
<%= content_tag('div', render(:partial => tab[:partial], :locals => {:tab => tab} ),
|
||||
<%= content_tag('div', (render(:partial => tab[:partial], :locals => {:tab => tab}) if tab[:partial]) ,
|
||||
:id => "tab-content-#{tab[:name]}",
|
||||
:style => (tab[:name] != selected_tab ? 'display:none' : nil),
|
||||
:class => 'tab-content') if tab[:partial] %>
|
||||
:class => 'tab-content') if tab[:partial] || tab[:remote] %>
|
||||
<% end -%>
|
||||
|
||||
<%= javascript_tag default_action if default_action %>
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
<% if @message.present? %>
|
||||
<p id="errorExplanation"><%= @message %></p>
|
||||
<% end %>
|
||||
|
||||
<% if @archived_project && User.current.admin? %>
|
||||
<p><%= link_to l(:button_unarchive), unarchive_project_path(@archived_project), :method => :post, :class => 'icon icon-unlock' %></p>
|
||||
<% end %>
|
||||
|
||||
<p><a href="javascript:history.back()"><%= l(:button_back) %></a></p>
|
||||
|
||||
<% html_title @status %>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
xml.instruct!
|
||||
xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
|
||||
xml.title truncate_single_line_raw(@title, 100)
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
|
||||
<% if @issue -%>
|
||||
<li><%= context_menu_link l(:button_edit), edit_issue_path(@issue),
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
:class => 'icon icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% else %>
|
||||
<li><%= context_menu_link l(:button_edit), bulk_edit_issues_path(:ids => @issue_ids),
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
:class => 'icon icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% end %>
|
||||
|
||||
<% if @allowed_statuses.present? %>
|
||||
|
@ -104,7 +104,7 @@
|
|||
<% end %>
|
||||
|
||||
<% @options_by_custom_field.each do |field, options| %>
|
||||
<li class="folder cf_<%= field.id %>">
|
||||
<li class="folder <%= field.css_classes %>">
|
||||
<a href="#" class="submenu"><%= field.name %></a>
|
||||
<ul>
|
||||
<% options.each do |text, value| %>
|
||||
|
@ -124,7 +124,7 @@
|
|||
<li><%= context_menu_link l(:button_add),
|
||||
new_watchers_path(:object_type => 'issue', :object_id => @issue_ids),
|
||||
:remote => true,
|
||||
:class => 'icon-add' %></li>
|
||||
:class => 'icon icon-add' %></li>
|
||||
</ul>
|
||||
</li>
|
||||
<% end %>
|
||||
|
@ -134,23 +134,23 @@
|
|||
<% end %>
|
||||
|
||||
<% unless @issue %>
|
||||
<li><%= context_menu_link l(:button_filter), _project_issues_path(@project, :set_filter => 1, :status_id => "*", :issue_id => @issue_ids.join(",")),
|
||||
:class => 'icon-list' %></li>
|
||||
<li><%= context_menu_link l(:button_filter), _project_issues_path(@project, :set_filter => 1, :status_id => "*", :issue_id => @issue_ids.join(","), :c => @columns),
|
||||
:class => 'icon icon-list' %></li>
|
||||
<% end %>
|
||||
|
||||
<% if @issue.present? %>
|
||||
<% if @can[:log_time] -%>
|
||||
<li><%= context_menu_link l(:button_log_time), new_issue_time_entry_path(@issue),
|
||||
:class => 'icon-time-add' %></li>
|
||||
:class => 'icon icon-time-add' %></li>
|
||||
<% end %>
|
||||
<li><%= context_menu_link l(:button_copy), project_copy_issue_path(@project, @issue),
|
||||
:class => 'icon-copy', :disabled => !@can[:copy] %></li>
|
||||
:class => 'icon icon-copy', :disabled => !@can[:copy] %></li>
|
||||
<% else %>
|
||||
<li><%= context_menu_link l(:button_copy), bulk_edit_issues_path(:ids => @issue_ids, :copy => '1'),
|
||||
:class => 'icon-copy', :disabled => !@can[:copy] %></li>
|
||||
:class => 'icon icon-copy', :disabled => !@can[:copy] %></li>
|
||||
<% end %>
|
||||
<li><%= context_menu_link l(:button_delete), issues_path(:ids => @issue_ids, :back_url => @back),
|
||||
:method => :delete, :data => {:confirm => issues_destroy_confirmation_message(@issues)}, :class => 'icon-del', :disabled => !@can[:delete] %></li>
|
||||
:method => :delete, :data => {:confirm => issues_destroy_confirmation_message(@issues)}, :class => 'icon icon-del', :disabled => !@can[:delete] %></li>
|
||||
|
||||
<%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
|
||||
</ul>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<ul>
|
||||
<% if !@time_entry.nil? -%>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'timelog', :action => 'edit', :id => @time_entry},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
:class => 'icon icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% else %>
|
||||
<li><%= context_menu_link l(:button_edit), {:controller => 'timelog', :action => 'bulk_edit', :ids => @time_entries.collect(&:id)},
|
||||
:class => 'icon-edit', :disabled => !@can[:edit] %></li>
|
||||
:class => 'icon icon-edit', :disabled => !@can[:edit] %></li>
|
||||
<% end %>
|
||||
|
||||
<%= call_hook(:view_time_entries_context_menu_start, {:time_entries => @time_entries, :can => @can, :back => @back }) %>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<% end %>
|
||||
|
||||
<% @options_by_custom_field.each do |field, options| %>
|
||||
<li class="folder cf_<%= field.id %>">
|
||||
<li class="folder <%= field.css_classes %>">
|
||||
<a href="#" class="submenu"><%= field.name %></a>
|
||||
<ul>
|
||||
<% options.each do |text, value| %>
|
||||
|
@ -40,6 +40,6 @@
|
|||
<li>
|
||||
<%= context_menu_link l(:button_delete),
|
||||
{:controller => 'timelog', :action => 'destroy', :ids => @time_entries.collect(&:id), :back_url => @back},
|
||||
:method => :delete, :data => {:confirm => l(:text_time_entries_destroy_confirmation)}, :class => 'icon-del', :disabled => !@can[:delete] %>
|
||||
:method => :delete, :data => {:confirm => l(:text_time_entries_destroy_confirmation)}, :class => 'icon icon-del', :disabled => !@can[:delete] %>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<ul id="custom_field_enumerations" class="flat">
|
||||
<% @custom_field.enumerations.each_with_index do |value, position| %>
|
||||
<li>
|
||||
<span class="sort-handle"></span>
|
||||
<span class="icon-only icon-sort-handle sort-handle"></span>
|
||||
<%= hidden_field_tag "custom_field_enumerations[#{value.id}][position]", position, :class => 'position' %>
|
||||
<%= text_field_tag "custom_field_enumerations[#{value.id}][name]", value.name, :size => 40 %>
|
||||
<%= hidden_field_tag "custom_field_enumerations[#{value.id}][active]", 0 %>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<%= error_messages_for 'custom_field' %>
|
||||
|
||||
<div class="splitcontent">
|
||||
<div class="splitcontentleft">
|
||||
<div class="box tabular">
|
||||
<p><%= f.select :field_format, custom_field_formats_for_select(@custom_field), {}, :disabled => !@custom_field.new_record? %></p>
|
||||
|
@ -19,115 +20,49 @@
|
|||
|
||||
<%= call_hook(:view_custom_fields_form_upper_box, :custom_field => @custom_field, :form => f) %>
|
||||
</div>
|
||||
<p><%= submit_tag l(:button_save) %></p>
|
||||
<p>
|
||||
<% if @custom_field.new_record? %>
|
||||
<%= submit_tag l(:button_create) %>
|
||||
<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
|
||||
<% else %>
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<% end %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="splitcontentright">
|
||||
<div class="box tabular">
|
||||
<% case @custom_field.class.name
|
||||
when "IssueCustomField" %>
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
<% if @custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
<% if @custom_field.format.searchable_supported %>
|
||||
<p><%= f.check_box :searchable %></p>
|
||||
<% end %>
|
||||
|
||||
<% when "UserCustomField" %>
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
<p><%= f.check_box :visible %></p>
|
||||
<p><%= f.check_box :editable %></p>
|
||||
<% if @custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
|
||||
<% when "ProjectCustomField" %>
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
<p><%= f.check_box :visible %></p>
|
||||
<% if @custom_field.format.searchable_supported %>
|
||||
<p><%= f.check_box :searchable %></p>
|
||||
<% end %>
|
||||
<% if @custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
|
||||
<% when "VersionCustomField" %>
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
<% if @custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
|
||||
<% when "GroupCustomField" %>
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
<% if @custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
|
||||
<% when "TimeEntryCustomField" %>
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
<% if @custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
|
||||
<% else %>
|
||||
<div class="box tabular">
|
||||
<p><%= f.check_box :is_required %></p>
|
||||
|
||||
<% end %>
|
||||
<%= call_hook(:"view_custom_fields_form_#{@custom_field.type.to_s.underscore}", :custom_field => @custom_field, :form => f) %>
|
||||
</div>
|
||||
|
||||
<% if @custom_field.is_a?(IssueCustomField) %>
|
||||
|
||||
<fieldset class="box tabular"><legend><%= l(:field_visible) %></legend>
|
||||
<label class="block">
|
||||
<%= radio_button_tag 'custom_field[visible]', 1, @custom_field.visible?, :id => 'custom_field_visible_on',
|
||||
:data => {:disables => '.custom_field_role input'} %>
|
||||
<%= l(:label_visibility_public) %>
|
||||
</label>
|
||||
<label class="block">
|
||||
<%= radio_button_tag 'custom_field[visible]', 0, !@custom_field.visible?, :id => 'custom_field_visible_off',
|
||||
:data => {:enables => '.custom_field_role input'} %>
|
||||
<%= l(:label_visibility_roles) %>:
|
||||
</label>
|
||||
<% role_ids = @custom_field.role_ids %>
|
||||
<% Role.givable.sorted.each do |role| %>
|
||||
<label class="block custom_field_role" style="padding-left:2em;">
|
||||
<%= check_box_tag 'custom_field[role_ids][]', role.id, role_ids.include?(role.id), :id => nil %>
|
||||
<%= role.name %>
|
||||
</label>
|
||||
<% if %w(UserCustomField).include?(@custom_field.class.name) %>
|
||||
<p><%= f.check_box :visible %></p>
|
||||
<% end %>
|
||||
<%= hidden_field_tag 'custom_field[role_ids][]', '' %>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="box" id="custom_field_tracker_ids"><legend><%=l(:label_tracker_plural)%></legend>
|
||||
<% tracker_ids = @custom_field.tracker_ids %>
|
||||
<% Tracker.sorted.each do |tracker| %>
|
||||
<%= check_box_tag "custom_field[tracker_ids][]",
|
||||
tracker.id,
|
||||
tracker_ids.include?(tracker.id),
|
||||
:id => "custom_field_tracker_ids_#{tracker.id}" %>
|
||||
<label class="no-css" for="custom_field_tracker_ids_<%=tracker.id%>">
|
||||
<%= tracker.name %>
|
||||
</label>
|
||||
<% if @custom_field.is_a?(UserCustomField) %>
|
||||
<p><%= f.check_box :editable %></p>
|
||||
<% end %>
|
||||
|
||||
<% if %w(IssueCustomField UserCustomField ProjectCustomField VersionCustomField GroupCustomField TimeEntryCustomField).include?(@custom_field.class.name) &&
|
||||
@custom_field.format.is_filter_supported %>
|
||||
<p><%= f.check_box :is_filter %></p>
|
||||
<% end %>
|
||||
|
||||
<% if %w(IssueCustomField ProjectCustomField).include?(@custom_field.class.name) && @custom_field.format.searchable_supported %>
|
||||
<p><%= f.check_box :searchable %></p>
|
||||
<% end %>
|
||||
<%= call_hook(:"view_custom_fields_form_#{@custom_field.type.to_s.underscore}", :custom_field => @custom_field, :form => f) %>
|
||||
</div>
|
||||
|
||||
<% if %w(IssueCustomField TimeEntryCustomField ProjectCustomField VersionCustomField).include?(@custom_field.class.name) %>
|
||||
<%= render :partial => 'visibility_by_role_selector', :locals => { :f => f } %>
|
||||
<% end %>
|
||||
<%= hidden_field_tag "custom_field[tracker_ids][]", '' %>
|
||||
<p><%= check_all_links 'custom_field_tracker_ids' %></p>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="box"><legend><%= l(:label_project_plural) %></legend>
|
||||
<p><%= f.check_box :is_for_all, :data => {:disables => '#custom_field_project_ids input'} %></p>
|
||||
<% if @custom_field.is_a?(IssueCustomField) %>
|
||||
<%= render :partial => 'visibility_by_tracker_selector', :locals => { :f => f } %>
|
||||
|
||||
<div id="custom_field_project_ids">
|
||||
<% project_ids = @custom_field.project_ids.to_a %>
|
||||
<%= render_project_nested_lists(Project.all) do |p|
|
||||
content_tag('label', check_box_tag('custom_field[project_ids][]', p.id, project_ids.include?(p.id), :id => nil) + ' ' + p)
|
||||
end %>
|
||||
<%= hidden_field_tag('custom_field[project_ids][]', '', :id => nil) %>
|
||||
<p><%= check_all_links 'custom_field_project_ids' %></p>
|
||||
</div>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
<%= render :partial => 'visibility_by_project_selector', :locals => { :f => f } %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% include_calendar_headers_tags %>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<fieldset class="box"><legend><%= toggle_checkboxes_link("#custom_field_project_ids input[type=checkbox]:enabled") %><%= l(:label_project_plural) %></legend>
|
||||
<p><%= f.check_box :is_for_all, :data => {:disables => '#custom_field_project_ids input'} %></p>
|
||||
|
||||
<div id="custom_field_project_ids">
|
||||
<% project_ids = @custom_field.project_ids.to_a %>
|
||||
<%= render_project_nested_lists(Project.all) do |p|
|
||||
content_tag('label', check_box_tag('custom_field[project_ids][]', p.id, project_ids.include?(p.id), :id => nil) + ' ' + p)
|
||||
end %>
|
||||
<%= hidden_field_tag('custom_field[project_ids][]', '', :id => nil) %>
|
||||
</div>
|
||||
</fieldset>
|
|
@ -0,0 +1,20 @@
|
|||
<fieldset class="box tabular"><legend><%= l(:field_visible) %></legend>
|
||||
<label class="block">
|
||||
<%= radio_button_tag 'custom_field[visible]', 1, @custom_field.visible?, :id => 'custom_field_visible_on',
|
||||
:data => {:disables => '.custom_field_role input'} %>
|
||||
<%= l(:label_visibility_public) %>
|
||||
</label>
|
||||
<label class="block">
|
||||
<%= radio_button_tag 'custom_field[visible]', 0, !@custom_field.visible?, :id => 'custom_field_visible_off',
|
||||
:data => {:enables => '.custom_field_role input'} %>
|
||||
<%= l(:label_visibility_roles) %>:
|
||||
</label>
|
||||
<% role_ids = @custom_field.role_ids %>
|
||||
<% Role.givable.sorted.each do |role| %>
|
||||
<label class="block custom_field_role" style="padding-left:2em;">
|
||||
<%= check_box_tag 'custom_field[role_ids][]', role.id, role_ids.include?(role.id), :id => nil %>
|
||||
<%= role.name %>
|
||||
</label>
|
||||
<% end %>
|
||||
<%= hidden_field_tag 'custom_field[role_ids][]', '' %>
|
||||
</fieldset>
|
|
@ -0,0 +1,13 @@
|
|||
<fieldset class="box" id="custom_field_tracker_ids"><legend><%= toggle_checkboxes_link("#custom_field_tracker_ids input[type=checkbox]") %><%=l(:label_tracker_plural)%></legend>
|
||||
<% tracker_ids = @custom_field.tracker_ids %>
|
||||
<% Tracker.sorted.each do |tracker| %>
|
||||
<%= check_box_tag "custom_field[tracker_ids][]",
|
||||
tracker.id,
|
||||
tracker_ids.include?(tracker.id),
|
||||
:id => "custom_field_tracker_ids_#{tracker.id}" %>
|
||||
<label class="no-css" for="custom_field_tracker_ids_<%=tracker.id%>">
|
||||
<%= tracker.name %>
|
||||
</label>
|
||||
<% end %>
|
||||
<%= hidden_field_tag "custom_field[tracker_ids][]", '' %>
|
||||
</fieldset>
|
|
@ -1,5 +1,5 @@
|
|||
<div class="contextual">
|
||||
<%= link_to l(:label_custom_field_new), new_custom_field_path, :class => 'icon icon-add' %>
|
||||
<%= link_to_function l(:label_custom_field_new), "location.href = '#{new_custom_field_path}?tab=' + encodeURIComponent(($('.tabs a.selected').attr('id')||'').split('tab-').pop())", :class => 'icon icon-add' %>
|
||||
</div>
|
||||
|
||||
<%= title l(:label_custom_field_plural) %>
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
<%= custom_field_title @custom_field %>
|
||||
|
||||
<% selected = 0 %>
|
||||
<%= form_tag new_custom_field_path, :method => 'get' do %>
|
||||
<div class="box">
|
||||
<p><%= l(:label_custom_field_select_type) %>:</p>
|
||||
<p>
|
||||
<% custom_field_type_options.each do |name, type| %>
|
||||
<label style="display:block;"><%= radio_button_tag 'type', type, 1==selected+=1 %> <%= name %></label>
|
||||
<% end %>
|
||||
<%= select_type_radio_buttons(params[:tab]) %>
|
||||
</p>
|
||||
</div>
|
||||
<p><%= submit_tag l(:label_next).html_safe + " »".html_safe, :name => nil %></p>
|
||||
|
|
|
@ -3,7 +3,12 @@
|
|||
<div class="box tabular">
|
||||
<p><%= f.select :category_id, DocumentCategory.active.collect {|c| [c.name, c.id]} %></p>
|
||||
<p><%= f.text_field :title, :required => true, :size => 60 %></p>
|
||||
<p><%= f.text_area :description, :cols => 60, :rows => 15, :class => 'wiki-edit' %></p>
|
||||
<p><%= f.text_area :description, :cols => 60, :rows => 15, :class => 'wiki-edit',
|
||||
:data => {
|
||||
:auto_complete => true,
|
||||
:issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
|
||||
}
|
||||
%></p>
|
||||
|
||||
<% @document.custom_field_values.each do |value| %>
|
||||
<p><%= custom_field_tag_with_label :document, value %></p>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<% if @grouped.empty? %><p class="nodata"><%= l(:label_no_data) %></p><% end %>
|
||||
|
||||
<% @grouped.keys.sort.each do |group| %>
|
||||
<% @grouped.keys.sort.__send__(@sort_by == 'date' ? :reverse_each : :each) do |group| %>
|
||||
<h3><%= group %></h3>
|
||||
<%= render :partial => 'documents/document', :collection => @grouped[group] %>
|
||||
<% end %>
|
||||
|
|
|
@ -4,6 +4,7 @@ api.array @klass.name.underscore.pluralize do
|
|||
api.id enumeration.id
|
||||
api.name enumeration.name
|
||||
api.is_default enumeration.is_default
|
||||
api.active enumeration.active
|
||||
render_api_custom_values enumeration.visible_custom_field_values, api
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
<% @gantt.view = self %>
|
||||
<div class="contextual">
|
||||
<% if !@query.new_record? && @query.editable_by?(User.current) %>
|
||||
<%= link_to l(:button_edit), edit_query_path(@query, :gantt => 1), :class => 'icon icon-edit' %>
|
||||
<%= delete_link query_path(@query, :gantt => 1) %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<h2><%= @query.new_record? ? l(:label_gantt) : @query.name %></h2>
|
||||
|
@ -14,68 +10,97 @@
|
|||
:method => :get, :id => 'query_form') do %>
|
||||
<%= hidden_field_tag 'set_filter', '1' %>
|
||||
<%= hidden_field_tag 'gantt', '1' %>
|
||||
<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;" %>">
|
||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset id="options" class="collapsible collapsed">
|
||||
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
||||
<div style="display: none;">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<fieldset>
|
||||
<legend><%= l(:label_related_issues) %></legend>
|
||||
<label for="draw_relations">
|
||||
<%= check_box 'query', 'draw_relations', :id => 'draw_relations' %>
|
||||
<% rels = [IssueRelation::TYPE_BLOCKS, IssueRelation::TYPE_PRECEDES] %>
|
||||
<% rels.each do |rel| %>
|
||||
<% color = Redmine::Helpers::Gantt::DRAW_TYPES[rel][:color] %>
|
||||
<%= content_tag(:span, ' '.html_safe,
|
||||
:style => "background-color: #{color}") %>
|
||||
<%= l(IssueRelation::TYPES[rel][:name]) %>
|
||||
<% end %>
|
||||
</label>
|
||||
</fieldset>
|
||||
</td>
|
||||
<td>
|
||||
<fieldset>
|
||||
<legend><%= l(:label_gantt_progress_line) %></legend>
|
||||
<label for="draw_progress_line">
|
||||
<%= check_box 'query', 'draw_progress_line', :id => 'draw_progress_line' %>
|
||||
<%= l(:label_display) %>
|
||||
</label>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div id="query_form_with_buttons" class="hide-when-print">
|
||||
<div id="query_form_content">
|
||||
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
|
||||
<legend onclick="toggleFieldset(this);" class="icon icon-<%= @query.new_record? ? "expended" : "collapsed" %>"><%= l(:label_filter_plural) %></legend>
|
||||
<div style="<%= @query.new_record? ? "" : "display: none;" %>">
|
||||
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="options" class="collapsible collapsed">
|
||||
<legend onclick="toggleFieldset(this);" class="icon icon-collapsed"><%= l(:label_options) %></legend>
|
||||
<div style="display: none;">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<fieldset>
|
||||
<legend>
|
||||
<%= l(:field_column_names) %>
|
||||
</legend>
|
||||
<label for="draw_selected_columns">
|
||||
<%= check_box 'query', 'draw_selected_columns', :id => 'draw_selected_columns', 'data-enables' => 'span.query-columns select, span.query-columns input' %>
|
||||
<%= l(:label_display) %>
|
||||
</label>
|
||||
<%= render_query_columns_selection(@query) %>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<fieldset>
|
||||
<legend><%= l(:label_related_issues) %></legend>
|
||||
<label for="draw_relations">
|
||||
<%= check_box 'query', 'draw_relations', :id => 'draw_relations' %>
|
||||
<% rels = [IssueRelation::TYPE_BLOCKS, IssueRelation::TYPE_PRECEDES] %>
|
||||
<% rels.each do |rel| %>
|
||||
<% color = Redmine::Helpers::Gantt::DRAW_TYPES[rel][:color] %>
|
||||
<%= content_tag(:span, ' '.html_safe,
|
||||
:style => "background-color: #{color}") %>
|
||||
<%= l(IssueRelation::TYPES[rel][:name]) %>
|
||||
<% end %>
|
||||
</label>
|
||||
</fieldset>
|
||||
</td>
|
||||
<td>
|
||||
<fieldset>
|
||||
<legend><%= l(:label_gantt_progress_line) %></legend>
|
||||
<label for="draw_progress_line">
|
||||
<%= check_box 'query', 'draw_progress_line', :id => 'draw_progress_line' %>
|
||||
<%= l(:label_display) %>
|
||||
</label>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<p class="contextual">
|
||||
<%= gantt_zoom_link(@gantt, :in) %>
|
||||
<%= gantt_zoom_link(@gantt, :out) %>
|
||||
<span>
|
||||
<%= gantt_zoom_link(@gantt, :in) %>
|
||||
<%= gantt_zoom_link(@gantt, :out) %>
|
||||
</span>
|
||||
<span>
|
||||
<%= link_to_previous_month(@gantt.year_from, @gantt.month_from, :accesskey => accesskey(:previous)) %> | <%= link_to_next_month(@gantt.year_from, @gantt.month_from, :accesskey => accesskey(:next)) %>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class="buttons">
|
||||
<%= text_field_tag 'months', @gantt.months, :size => 2 %>
|
||||
<%= l(:label_months_from) %>
|
||||
<%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
|
||||
<%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
|
||||
<%= hidden_field_tag 'zoom', @gantt.zoom %>
|
||||
<%= number_field_tag 'months', @gantt.months, :min => 1, :max => Setting.gantt_months_limit.to_i, :autocomplete => false %>
|
||||
<%= l(:label_months_from) %>
|
||||
<%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
|
||||
<%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
|
||||
<%= hidden_field_tag 'zoom', @gantt.zoom %>
|
||||
|
||||
<%= link_to_function l(:button_apply), '$("#query_form").submit()',
|
||||
:class => 'icon icon-checked' %>
|
||||
<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 },
|
||||
:class => 'icon icon-reload' %>
|
||||
<% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %>
|
||||
<%= link_to_function l(:button_save),
|
||||
"$('#query_form').attr('action', '#{ @project ? new_project_query_path(@project) : new_query_path }').submit();",
|
||||
:class => 'icon icon-save' %>
|
||||
<%= link_to_function l(:button_apply), '$("#query_form").submit()',
|
||||
:class => 'icon icon-checked' %>
|
||||
<%= link_to l(:button_clear), { :project_id => @project, :set_filter => 1 },
|
||||
:class => 'icon icon-reload' %>
|
||||
<% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %>
|
||||
<%= link_to_function l(:button_save),
|
||||
"$('#query_form').attr('action', '#{ @project ? new_project_query_path(@project) : new_query_path }').submit();",
|
||||
:class => 'icon icon-save' %>
|
||||
<% end %>
|
||||
<% if !@query.new_record? && @query.editable_by?(User.current) %>
|
||||
<%= link_to l(:button_edit), edit_query_path(@query, :gantt => 1), :class => 'icon icon-edit' %>
|
||||
<%= delete_link query_path(@query, :gantt => 1) %>
|
||||
<% end %>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= error_messages_for 'query' %>
|
||||
|
@ -119,39 +144,63 @@
|
|||
<p class="warning"><%= l(:notice_gantt_chart_truncated, :max => @gantt.max_rows) %></p>
|
||||
<% end %>
|
||||
|
||||
<table style="width:100%; border:0; border-collapse: collapse;">
|
||||
<table class='gantt-table'>
|
||||
<tr>
|
||||
<td style="width:<%= subject_width %>px; padding:0px;" class="gantt_subjects_column">
|
||||
<td style="width:<%= @query.draw_selected_columns ? subject_width + 1 : subject_width + 2 %>px;" class="gantt_subjects_column">
|
||||
<%
|
||||
style = ""
|
||||
style += "position:relative;"
|
||||
style += "height: #{t_height + 24}px;"
|
||||
style += "width: #{subject_width + 1}px;"
|
||||
%>
|
||||
<%= content_tag(:div, :style => style, :class => "gantt_subjects_container") do %>
|
||||
<%= content_tag(:div, :style => style, :class => "gantt_subjects_container #{'draw_selected_columns' if @query.draw_selected_columns}") do %>
|
||||
<%
|
||||
style = ""
|
||||
style += "right:-2px;"
|
||||
style += "width: #{subject_width}px;"
|
||||
style += "width: #{subject_width + 1}px;"
|
||||
style += "height: #{headers_height}px;"
|
||||
style += 'background: #eee;'
|
||||
%>
|
||||
<%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
|
||||
<%
|
||||
style = ""
|
||||
style += "right:-2px;"
|
||||
style += "width: #{subject_width}px;"
|
||||
style += "z-index: 1;"
|
||||
style += "width: #{subject_width + 1}px;"
|
||||
style += "height: #{t_height}px;"
|
||||
style += 'border-left: 1px solid #c0c0c0;'
|
||||
style += 'overflow: hidden;'
|
||||
%>
|
||||
<%= content_tag(:div, "", :style => style, :class => "gantt_hdr") %>
|
||||
<%= content_tag(:div, :class => "gantt_subjects") do %>
|
||||
<%= @gantt.subjects.html_safe %>
|
||||
<%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
|
||||
<%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
|
||||
<%= @gantt.subjects.html_safe %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</td>
|
||||
|
||||
<% @query.columns.each do |column| %>
|
||||
<% next if Redmine::Helpers::Gantt::UNAVAILABLE_COLUMNS.include?(column.name) %>
|
||||
<td class="gantt_<%= column.name %>_column gantt_selected_column <%= 'last_gantt_selected_column' if @query.columns.last == column %>" id="<%= column.name %>">
|
||||
<%
|
||||
style = "position: relative;"
|
||||
style += "height: #{t_height + 24}px;"
|
||||
%>
|
||||
<%= content_tag(:div, :style => style, :class => "gantt_#{column.name}_container gantt_selected_column_container") do %>
|
||||
<%
|
||||
style = "height: #{t_height}px;"
|
||||
style += 'overflow: hidden;'
|
||||
%>
|
||||
<%= content_tag(:div, '', :style => style, :class => "gantt_hdr") %>
|
||||
<%
|
||||
style = "height: #{headers_height}px;"
|
||||
style += 'background: #eee;'
|
||||
%>
|
||||
<%= content_tag(:div, content_tag(:p, column.caption, :class => 'gantt_hdr_selected_column_name'), :style => style, :class => "gantt_hdr") %>
|
||||
<%= content_tag(:div, :class => "gantt_#{column.name} gantt_selected_column_content") do %>
|
||||
<%= @gantt.selected_column_content({:column => column, :top => headers_height + 8, :zoom => zoom, :g_width => g_width}).html_safe %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</td>
|
||||
<% end %>
|
||||
<td>
|
||||
<div style="position:relative;height:<%= t_height + 24 %>px;overflow:auto;" id="gantt_area">
|
||||
<%
|
||||
|
@ -266,7 +315,7 @@
|
|||
wday = 1 if wday > 7
|
||||
%>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% ###### Days headers ####### %>
|
||||
<% if show_days %>
|
||||
|
@ -299,7 +348,10 @@
|
|||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= @gantt.lines.html_safe %>
|
||||
<%= form_tag({}, :data => {:cm_url => issues_context_menu_path}) do -%>
|
||||
<%= hidden_field_tag 'back_url', url_for(:params => request.query_parameters), :id => nil %>
|
||||
<%= @gantt.lines.html_safe %>
|
||||
<% end %>
|
||||
|
||||
<% ###### Today red line (excluded from cache) ###### %>
|
||||
<% if User.current.today >= @gantt.date_from and User.current.today <= @gantt.date_to %>
|
||||
|
@ -329,20 +381,19 @@
|
|||
</tr>
|
||||
</table>
|
||||
|
||||
<table style="width:100%">
|
||||
<tr>
|
||||
<td style="text-align:left;">
|
||||
<%= link_to("\xc2\xab " + l(:label_previous),
|
||||
{:params => request.query_parameters.merge(@gantt.params_previous)},
|
||||
:accesskey => accesskey(:previous)) %>
|
||||
</td>
|
||||
<td style="text-align:right;">
|
||||
<%= link_to(l(:label_next) + " \xc2\xbb",
|
||||
{:params => request.query_parameters.merge(@gantt.params_next)},
|
||||
:accesskey => accesskey(:next)) %>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<span class="pagination">
|
||||
<ul class="pages">
|
||||
<li class="previous page">
|
||||
<%= link_to("\xc2\xab " + l(:label_previous),
|
||||
{:params => request.query_parameters.merge(@gantt.params_previous)},
|
||||
:accesskey => accesskey(:previous)) %>
|
||||
</li><li class="next page">
|
||||
<%= link_to(l(:label_next) + " \xc2\xbb",
|
||||
{:params => request.query_parameters.merge(@gantt.params_next)},
|
||||
:accesskey => accesskey(:next)) %>
|
||||
</li>
|
||||
</ul>
|
||||
</span>
|
||||
|
||||
<% other_formats_links do |f| %>
|
||||
<%= f.link_to_with_query_parameters 'PDF', @gantt.params %>
|
||||
|
@ -363,10 +414,17 @@
|
|||
|
||||
<%= javascript_tag do %>
|
||||
var issue_relation_type = <%= raw Redmine::Helpers::Gantt::DRAW_TYPES.to_json %>;
|
||||
$(document).ready(drawGanttHandler);
|
||||
$(window).resize(drawGanttHandler);
|
||||
$(function() {
|
||||
$("#draw_relations").change(drawGanttHandler);
|
||||
$("#draw_progress_line").change(drawGanttHandler);
|
||||
disable_unavailable_columns('<%= Redmine::Helpers::Gantt::UNAVAILABLE_COLUMNS.map(&:to_s).join(',') %>'.split(','));
|
||||
drawGanttHandler();
|
||||
resizableSubjectColumn();
|
||||
drawSelectedColumns();
|
||||
$("#draw_relations, #draw_progress_line, #draw_selected_columns").change(drawGanttHandler);
|
||||
$('div.gantt_subjects .expander').on('click', ganttEntryClick);
|
||||
});
|
||||
$(window).resize(function() {
|
||||
drawGanttHandler();
|
||||
resizableSubjectColumn();
|
||||
});
|
||||
<% end %>
|
||||
<%= context_menu %>
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
<%= render :partial => 'new_users_form' %>
|
||||
<p class="buttons">
|
||||
<%= submit_tag l(:button_add) %>
|
||||
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
|
||||
<%= link_to_function l(:button_cancel), "hideModal(this);" %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
<%= title [l(:label_group_plural), groups_path], @group.name %>
|
||||
|
||||
<% if @group.custom_field_values.any? %>
|
||||
<ul>
|
||||
<% render_custom_field_values(@group) do |custom_field, formatted| %>
|
||||
<li><span class="label"><%= custom_field.name %>:</span> <%= formatted %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<h3><%= l(:label_member_plural) %></h3>
|
||||
<ul>
|
||||
<% @group.users.each do |user| %>
|
||||
<li><%= user %></li>
|
||||
|
|
|
@ -1,35 +1,47 @@
|
|||
<div class="splitcontent">
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
<label><%= l(:label_project) %></label>
|
||||
<label for="import_mapping_project_id"><%= l(:label_project) %></label>
|
||||
<%= select_tag 'import_settings[mapping][project_id]',
|
||||
options_for_select(project_tree_options_for_select(@import.allowed_target_projects, :selected => @import.project)),
|
||||
:id => 'import_mapping_project_id' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:label_tracker) %></label>
|
||||
<label for="import_mapping_tracker"><%= l(:label_tracker) %></label>
|
||||
<%= mapping_select_tag @import, 'tracker', :required => true,
|
||||
:values => @import.allowed_target_trackers.sorted.map {|t| [t.name, t.id]} %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_status) %></label>
|
||||
<label for="import_mapping_status"><%= l(:field_status) %></label>
|
||||
<%= mapping_select_tag @import, 'status' %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="splitcontentright">
|
||||
<p></p>
|
||||
<p>
|
||||
<label for="import_mapping_unique_id"><%= l(:field_unique_id) %></label>
|
||||
<%= mapping_select_tag @import, 'unique_id' %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="splitcontent">
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
<label><%= l(:field_subject) %></label>
|
||||
<label for="import_mapping_subject"><%= l(:field_subject) %></label>
|
||||
<%= mapping_select_tag @import, 'subject', :required => true %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_description) %></label>
|
||||
<label for="import_mapping_description"><%= l(:field_description) %></label>
|
||||
<%= mapping_select_tag @import, 'description' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_priority) %></label>
|
||||
<label for="import_mapping_priority"><%= l(:field_priority) %></label>
|
||||
<%= mapping_select_tag @import, 'priority' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_category) %></label>
|
||||
<label for="import_mapping_category"><%= l(:field_category) %></label>
|
||||
<%= mapping_select_tag @import, 'category' %>
|
||||
<% if User.current.allowed_to?(:manage_categories, @import.project) %>
|
||||
<label class="block">
|
||||
|
@ -39,11 +51,11 @@
|
|||
<% end %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_assigned_to) %></label>
|
||||
<label for="import_mapping_assigned_to"><%= l(:field_assigned_to) %></label>
|
||||
<%= mapping_select_tag @import, 'assigned_to' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_fixed_version) %></label>
|
||||
<label for="import_mapping_fixed_version"><%= l(:field_fixed_version) %></label>
|
||||
<%= mapping_select_tag @import, 'fixed_version' %>
|
||||
<% if User.current.allowed_to?(:manage_versions, @import.project) %>
|
||||
<label class="block">
|
||||
|
@ -54,7 +66,7 @@
|
|||
</p>
|
||||
<% @custom_fields.each do |field| %>
|
||||
<p>
|
||||
<label><%= field.name %></label>
|
||||
<label for="import_mapping_cf_<%= field.id %>"><%= field.name %></label>
|
||||
<%= mapping_select_tag @import, "cf_#{field.id}" %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
@ -62,27 +74,27 @@
|
|||
|
||||
<div class="splitcontentright">
|
||||
<p>
|
||||
<label><%= l(:field_is_private) %></label>
|
||||
<label for="import_mapping_is_private"><%= l(:field_is_private) %></label>
|
||||
<%= mapping_select_tag @import, 'is_private' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_parent_issue) %></label>
|
||||
<label for="import_mapping_parent_issue_id"><%= l(:field_parent_issue) %></label>
|
||||
<%= mapping_select_tag @import, 'parent_issue_id' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_start_date) %></label>
|
||||
<label for="import_mapping_start_date"><%= l(:field_start_date) %></label>
|
||||
<%= mapping_select_tag @import, 'start_date' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_due_date) %></label>
|
||||
<label for="import_mapping_due_date"><%= l(:field_due_date) %></label>
|
||||
<%= mapping_select_tag @import, 'due_date' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_estimated_hours) %></label>
|
||||
<label for="import_mapping_estimated_hours"><%= l(:field_estimated_hours) %></label>
|
||||
<%= mapping_select_tag @import, 'estimated_hours' %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:field_done_ratio) %></label>
|
||||
<label for="import_mapping_done_ratio"><%= l(:field_done_ratio) %></label>
|
||||
<%= mapping_select_tag @import, 'done_ratio' %>
|
||||
</p>
|
||||
</div>
|
16
app/views/imports/_issues_mapping.html.erb
Normal file
16
app/views/imports/_issues_mapping.html.erb
Normal file
|
@ -0,0 +1,16 @@
|
|||
<fieldset class="box tabular">
|
||||
<legend><%= l(:label_fields_mapping) %></legend>
|
||||
<div id="fields-mapping">
|
||||
<%= render :partial => 'issues_fields_mapping' %>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<%= javascript_tag do %>
|
||||
$('#fields-mapping').on('change', '#import_mapping_project_id, #import_mapping_tracker', function(){
|
||||
$.ajax({
|
||||
url: '<%= import_mapping_path(@import, :format => 'js') %>',
|
||||
type: 'post',
|
||||
data: $('#import-form').serialize()
|
||||
});
|
||||
});
|
||||
<% end %>
|
1
app/views/imports/_issues_mapping.js.erb
Normal file
1
app/views/imports/_issues_mapping.js.erb
Normal file
|
@ -0,0 +1 @@
|
|||
$('#fields-mapping').html('<%= escape_javascript(render :partial => 'issues_fields_mapping') %>');
|
7
app/views/imports/_issues_saved_objects.html.erb
Normal file
7
app/views/imports/_issues_saved_objects.html.erb
Normal file
|
@ -0,0 +1,7 @@
|
|||
<ul id="saved-items">
|
||||
<% saved_objects.each do |issue| %>
|
||||
<li><%= link_to_issue issue %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<p><%= link_to l(:label_issue_view_all), issues_path(:set_filter => 1, :status_id => '*', :issue_id => saved_objects.map(&:id).join(',')) %></p>
|
3
app/views/imports/_issues_sidebar.html.erb
Normal file
3
app/views/imports/_issues_sidebar.html.erb
Normal file
|
@ -0,0 +1,3 @@
|
|||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
<% end %>
|
48
app/views/imports/_time_entries_fields_mapping.html.erb
Normal file
48
app/views/imports/_time_entries_fields_mapping.html.erb
Normal file
|
@ -0,0 +1,48 @@
|
|||
<p>
|
||||
<label for="import_mapping_project_id"><%= l(:label_project) %></label>
|
||||
<%= select_tag 'import_settings[mapping][project_id]',
|
||||
options_for_select(project_tree_options_for_select(@import.allowed_target_projects, :selected => @import.project)),
|
||||
:id => 'import_mapping_project_id' %>
|
||||
</p>
|
||||
<p>
|
||||
<label for="import_mapping_activity"><%= l(:field_activity) %></label>
|
||||
<%= mapping_select_tag @import, 'activity', :required => true,
|
||||
:values => @import.allowed_target_activities.sorted.map {|t| [t.name, t.id]} %>
|
||||
</p>
|
||||
|
||||
<div class="splitcontent">
|
||||
<div class="splitcontentleft">
|
||||
<% if User.current.allowed_to?(:log_time_for_other_users, @import.project) %>
|
||||
<p>
|
||||
<label for="import_mapping_user_id"><%= l(:field_user) %></label>
|
||||
<%= mapping_select_tag @import, 'user_id', :required => true,
|
||||
:values => @import.allowed_target_users.map {|u| [u.name, u.id]}, :default_value => "value:#{User.current.id}" %>
|
||||
</p>
|
||||
<% end %>
|
||||
<p>
|
||||
<label for="import_mapping_issue_id"><%= l(:field_issue) %></label>
|
||||
<%= mapping_select_tag @import, 'issue_id' %>
|
||||
</p>
|
||||
<p>
|
||||
<label for="import_mapping_spent_on"><%= l(:field_spent_on) %></label>
|
||||
<%= mapping_select_tag @import, 'spent_on', :required => true %>
|
||||
</p>
|
||||
<p>
|
||||
<label for="import_mapping_hours"><%= l(:field_hours) %></label>
|
||||
<%= mapping_select_tag @import, 'hours', :required => true %>
|
||||
</p>
|
||||
<p>
|
||||
<label for="import_mapping_comments"><%= l(:field_comments) %></label>
|
||||
<%= mapping_select_tag @import, 'comments' %>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="splitcontentright">
|
||||
<% @custom_fields.each do |field| %>
|
||||
<p>
|
||||
<label for="import_mapping_cf_<%= field.id %>"><%= field.name %></label>
|
||||
<%= mapping_select_tag @import, "cf_#{field.id}", :required => field.is_required? %>
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
18
app/views/imports/_time_entries_mapping.html.erb
Normal file
18
app/views/imports/_time_entries_mapping.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
|||
<fieldset class="box tabular">
|
||||
<legend><%= l(:label_fields_mapping) %></legend>
|
||||
<div id="fields-mapping">
|
||||
<%= render :partial => 'time_entries_fields_mapping' %>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<%= javascript_tag do %>
|
||||
$(document).ready(function() {
|
||||
$('#fields-mapping').on('change', '#import_mapping_project_id', function(){
|
||||
$.ajax({
|
||||
url: '<%= import_mapping_path(@import, :format => 'js') %>',
|
||||
type: 'post',
|
||||
data: $('#import-form').serialize()
|
||||
});
|
||||
});
|
||||
});
|
||||
<% end %>
|
1
app/views/imports/_time_entries_mapping.js.erb
Normal file
1
app/views/imports/_time_entries_mapping.js.erb
Normal file
|
@ -0,0 +1 @@
|
|||
$('#fields-mapping').html('<%= escape_javascript(render :partial => 'time_entries_fields_mapping') %>');
|
26
app/views/imports/_time_entries_saved_objects.html.erb
Normal file
26
app/views/imports/_time_entries_saved_objects.html.erb
Normal file
|
@ -0,0 +1,26 @@
|
|||
<table id="saved-items" class="list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><%= t(:field_project) %></th>
|
||||
<th><%= t(:field_user) %></th>
|
||||
<th><%= t(:field_activity) %></th>
|
||||
<th><%= t(:field_issue) %></th>
|
||||
<th><%= t(:field_spent_on) %></th>
|
||||
<th><%= t(:field_hours) %></th>
|
||||
<th><%= t(:field_comments) %></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% saved_objects.each do |time_entry| %>
|
||||
<tr>
|
||||
<td><%= link_to_project(time_entry.project, :jump => 'time_entries') if time_entry.project %></td>
|
||||
<td><%= link_to_user time_entry.user %></td>
|
||||
<td><%= time_entry.activity.name if time_entry.activity %></td>
|
||||
<td><%= link_to_issue time_entry.issue if time_entry.issue %></td>
|
||||
<td><%= format_date(time_entry.spent_on) %></td>
|
||||
<td><%= l_hours_short(time_entry.hours) %></td>
|
||||
<td><%= time_entry.comments %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
3
app/views/imports/_time_entries_sidebar.html.erb
Normal file
3
app/views/imports/_time_entries_sidebar.html.erb
Normal file
|
@ -0,0 +1,3 @@
|
|||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'timelog/sidebar' %>
|
||||
<% end %>
|
|
@ -1,17 +1,12 @@
|
|||
<h2><%= l(:label_import_issues) %></h2>
|
||||
<h2><%= import_title %></h2>
|
||||
|
||||
<%= form_tag(import_mapping_path(@import), :id => "import-form") do %>
|
||||
<fieldset class="box tabular">
|
||||
<legend><%= l(:label_fields_mapping) %></legend>
|
||||
<div id="fields-mapping">
|
||||
<%= render :partial => 'fields_mapping' %>
|
||||
</div>
|
||||
</fieldset>
|
||||
<%= render :partial => "#{import_partial_prefix}_mapping" %>
|
||||
|
||||
<div class="autoscroll">
|
||||
<fieldset class="box">
|
||||
<legend><%= l(:label_file_content_preview) %></legend>
|
||||
|
||||
<div class="autoscroll">
|
||||
<table class="sample-data">
|
||||
<% @import.first_rows.each do |row| %>
|
||||
<tr>
|
||||
|
@ -19,8 +14,8 @@
|
|||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
<%= button_tag("\xc2\xab " + l(:label_previous), :name => 'previous') %>
|
||||
|
@ -28,25 +23,13 @@
|
|||
</p>
|
||||
<% end %>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
<% end %>
|
||||
|
||||
<%= render :partial => "#{import_partial_prefix}_sidebar" %>
|
||||
|
||||
<%= javascript_tag do %>
|
||||
$(document).ready(function() {
|
||||
$('#fields-mapping').on('change', '#import_mapping_project_id, #import_mapping_tracker', function(){
|
||||
$.ajax({
|
||||
url: '<%= import_mapping_path(@import, :format => 'js') %>',
|
||||
type: 'post',
|
||||
data: $('#import-form').serialize()
|
||||
});
|
||||
});
|
||||
|
||||
$('#import-form').submit(function(){
|
||||
$('#import-details').show().addClass('ajax-loading');
|
||||
$('#import-progress').progressbar({value: 0, max: <%= @import.total_items || 0 %>});
|
||||
});
|
||||
|
||||
});
|
||||
<% end %>
|
||||
|
|
|
@ -1 +1 @@
|
|||
$('#fields-mapping').html('<%= escape_javascript(render :partial => 'fields_mapping') %>');
|
||||
<%= render :partial => "#{import_partial_prefix}_mapping" %>
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<h2><%= l(:label_import_issues) %></h2>
|
||||
<h2><%= import_title %></h2>
|
||||
|
||||
<%= form_tag(imports_path, :multipart => true) do %>
|
||||
<%= hidden_field_tag 'type', @import.type %>
|
||||
<%= hidden_field_tag 'project_id', params[:project_id] %>
|
||||
<fieldset class="box">
|
||||
<legend><%= l(:label_select_file_to_import) %> (CSV)</legend>
|
||||
<p>
|
||||
|
@ -10,6 +12,4 @@
|
|||
<p><%= submit_tag l(:label_next).html_safe + " »".html_safe, :name => nil %></p>
|
||||
<% end %>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
<% end %>
|
||||
<%= render :partial => "#{import_partial_prefix}_sidebar" %>
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
<h2><%= l(:label_import_issues) %></h2>
|
||||
<h2><%= import_title %></h2>
|
||||
|
||||
<div id="import-details">
|
||||
<div id="import-progress"><div id="progress-label">0 / <%= @import.total_items.to_i %></div></div>
|
||||
</div>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
<% end %>
|
||||
<%= render :partial => "#{import_partial_prefix}_sidebar" %>
|
||||
|
||||
<%= javascript_tag do %>
|
||||
$(document).ready(function() {
|
||||
|
|
|
@ -1,30 +1,34 @@
|
|||
<h2><%= l(:label_import_issues) %></h2>
|
||||
<h2><%= import_title %></h2>
|
||||
|
||||
<%= form_tag(import_settings_path(@import), :id => "import-form") do %>
|
||||
<fieldset class="box tabular">
|
||||
<legend><%= l(:label_options) %></legend>
|
||||
<p>
|
||||
<label><%= l(:label_fields_separator) %></label>
|
||||
<label for="import_settings_separator"><%= l(:label_fields_separator) %></label>
|
||||
<%= select_tag 'import_settings[separator]',
|
||||
options_for_select([[l(:label_comma_char), ','], [l(:label_semi_colon_char), ';']], @import.settings['separator']) %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:label_fields_wrapper) %></label>
|
||||
<label for="import_settings_wrapper"><%= l(:label_fields_wrapper) %></label>
|
||||
<%= select_tag 'import_settings[wrapper]',
|
||||
options_for_select([[l(:label_quote_char), "'"], [l(:label_double_quote_char), '"']], @import.settings['wrapper']) %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:label_encoding) %></label>
|
||||
<label for="import_settings_encoding"><%= l(:label_encoding) %></label>
|
||||
<%= select_tag 'import_settings[encoding]', options_for_select(Setting::ENCODINGS, @import.settings['encoding']) %>
|
||||
</p>
|
||||
<p>
|
||||
<label><%= l(:setting_date_format) %></label>
|
||||
<label for="import_settings_date_format"><%= l(:setting_date_format) %></label>
|
||||
<%= select_tag 'import_settings[date_format]', options_for_select(date_format_options, @import.settings['date_format']) %>
|
||||
</p>
|
||||
<br>
|
||||
<p>
|
||||
<label for="import_settings_notifications"><%= l(:label_import_notifications) %></label>
|
||||
<%= hidden_field_tag 'import_settings[notifications]', '0', :id => nil %>
|
||||
<%= check_box_tag 'import_settings[notifications]', '1', "#{@import.settings['notifications']}" == '1' %>
|
||||
</p>
|
||||
</fieldset>
|
||||
<p><%= submit_tag l(:label_next).html_safe + " »".html_safe, :name => nil %></p>
|
||||
<% end %>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
<% end %>
|
||||
<%= render :partial => "#{import_partial_prefix}_sidebar" %>
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
<h2><%= l(:label_import_issues) %></h2>
|
||||
<h2><%= import_title %></h2>
|
||||
|
||||
<% if @import.saved_items.count > 0 %>
|
||||
<p><%= l(:notice_import_finished, :count => @import.saved_items.count) %>:</p>
|
||||
|
||||
<ul id="saved-items">
|
||||
<% @import.saved_objects.each do |issue| %>
|
||||
<li><%= link_to_issue issue %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<p><%= link_to l(:label_issue_view_all), issues_path(:set_filter => 1, :status_id => '*', :issue_id => @import.saved_objects.map(&:id).join(',')) %></p>
|
||||
<%= render :partial => "#{import_partial_prefix}_saved_objects", :locals => { saved_objects: @import.saved_objects } %>
|
||||
<% end %>
|
||||
|
||||
<% if @import.unsaved_items.count > 0 %>
|
||||
|
@ -33,6 +27,4 @@
|
|||
</table>
|
||||
<% end %>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<%= render :partial => 'issues/sidebar' %>
|
||||
<% end %>
|
||||
<%= render :partial => "#{import_partial_prefix}_sidebar" %>
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
<%= render :partial => 'issue_categories/form', :locals => { :f => f } %>
|
||||
<p class="buttons">
|
||||
<%= submit_tag l(:button_create), :name => nil %>
|
||||
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
|
||||
<%= link_to_function l(:button_cancel), "hideModal(this);" %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
<% end %>
|
||||
<th><%=l(:field_is_closed)%></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<% for status in @issue_statuses %>
|
||||
|
@ -22,6 +23,13 @@
|
|||
<td><%= status.default_done_ratio %></td>
|
||||
<% end %>
|
||||
<td><%= checked_image status.is_closed? %></td>
|
||||
<td>
|
||||
<% unless WorkflowTransition.where('old_status_id = ? OR new_status_id = ?', status.id, status.id).exists? %>
|
||||
<span class="icon icon-warning">
|
||||
<%= l(:text_status_no_workflow) %> (<%= link_to l(:button_edit), workflows_edit_path(:used_statuses_only => 0) %>)
|
||||
</span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="buttons">
|
||||
<%= reorder_handle(status) %>
|
||||
<%= delete_link issue_status_path(status) %>
|
||||
|
|
|
@ -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>
|
||||
|
|
10
app/views/issues/_action_menu_edit.html.erb
Normal file
10
app/views/issues/_action_menu_edit.html.erb
Normal 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 %>
|
|
@ -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' %>
|
||||
|
|
|
@ -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 %>
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %>
|
||||
|
|
|
@ -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);"> </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);"> </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 %>
|
||||
|
|
|
@ -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) %>
|
||||
|
||||
|
|
22
app/views/issues/_trackers_description.html.erb
Normal file
22
app/views/issues/_trackers_description.html.erb
Normal 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 %>
|
|
@ -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('');
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 %>
|
||||
|
|
|
@ -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 || ' '.html_safe %>');
|
||||
<% end %>
|
||||
|
|
|
@ -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} %>
|
||||
|
|
24
app/views/issues/tabs/_changesets.html.erb
Normal file
24
app/views/issues/tabs/_changesets.html.erb
Normal 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 %>
|
|
@ -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">
|
28
app/views/issues/tabs/_time_entries.html.erb
Normal file
28
app/views/issues/tabs/_time_entries.html.erb
Normal 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 %>
|
|
@ -3,10 +3,13 @@
|
|||
:method => 'put',
|
||||
:id => "journal-#{@journal.id}-form") do %>
|
||||
<%= label_tag "notes", l(:description_notes), :class => "hidden-for-sighted", :for => "journal_#{@journal.id}_notes" %>
|
||||
<%= text_area_tag 'journal[notes]', @journal.notes,
|
||||
:id => "journal_#{@journal.id}_notes",
|
||||
:class => 'wiki-edit',
|
||||
:rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min) %>
|
||||
<%= text_area_tag 'journal[notes]', @journal.notes, :id => "journal_#{@journal.id}_notes", :class => 'wiki-edit',
|
||||
:rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min),
|
||||
:data => {
|
||||
:auto_complete => true,
|
||||
:issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
|
||||
}
|
||||
%>
|
||||
<% if @journal.safe_attribute? 'private_notes' %>
|
||||
<%= hidden_field_tag 'journal[private_notes]', '0' %>
|
||||
<%= check_box_tag 'journal[private_notes]', '1', @journal.private_notes, :id => "journal_#{@journal.id}_private_notes" %>
|
||||
|
@ -14,11 +17,6 @@
|
|||
<% end %>
|
||||
<%= call_hook(:view_journals_notes_form_after_notes, { :journal => @journal}) %>
|
||||
<p><%= submit_tag l(:button_save) %>
|
||||
<%= preview_link preview_edit_issue_path(:project_id => @project, :id => @journal.issue),
|
||||
"journal-#{@journal.id}-form",
|
||||
"journal_#{@journal.id}_preview" %> |
|
||||
<%= link_to l(:button_cancel), '#', :onclick => "$('#journal-#{@journal.id}-form').remove(); $('#journal-#{@journal.id}-notes').show(); return false;" %></p>
|
||||
|
||||
<div id="journal_<%= @journal.id %>_preview" class="wiki"></div>
|
||||
<% end %>
|
||||
<%= wikitoolbar_for "journal_#{@journal.id}_notes" %>
|
||||
<%= wikitoolbar_for "journal_#{@journal.id}_notes", preview_issue_path(:project_id => @project, :issue_id => @journal.issue) %>
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
<h2><%= @issue.tracker %> #<%= @issue.id %></h2>
|
||||
<p><%= authoring @journal.created_on, @journal.user, :label => :label_updated_time_by %></p>
|
||||
|
||||
<div class="text-diff">
|
||||
<%= simple_format_without_paragraph @diff.to_html %>
|
||||
</div>
|
||||
<pre class="text-diff"><%= @diff.to_html %></pre>
|
||||
|
||||
<p>
|
||||
<%= link_to(l(:button_back), issue_path(@issue),
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
xml.instruct!
|
||||
xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
|
||||
xml.title @title
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
$("#change-<%= @journal.id %>").remove();
|
||||
<% else %>
|
||||
$("#change-<%= @journal.id %>").attr('class', '<%= @journal.css_classes %>');
|
||||
$("#journal-<%= @journal.id %>-notes").replaceWith('<%= escape_javascript(render_notes(@journal.issue, @journal, :reply_links => authorize_for('issues', 'edit'))) %>');
|
||||
$("#change-<%= @journal.id %> .journal-actions").html('<%= escape_javascript(render_journal_actions(@journal.issue, @journal, :reply_links => authorize_for('issues', 'edit'))) %>');
|
||||
$("#journal-<%= @journal.id %>-private_notes").replaceWith('<%= escape_javascript(render_private_notes_indicator(@journal)) %>');
|
||||
$("#journal-<%= @journal.id %>-notes").replaceWith('<%= escape_javascript(render_notes(@journal.issue, @journal, :reply_links => authorize_for('issues', 'edit'))) %>');
|
||||
$("#journal-<%= @journal.id %>-notes").show();
|
||||
$("#journal-<%= @journal.id %>-form").remove();
|
||||
<% end %>
|
||||
|
|
|
@ -2,13 +2,21 @@
|
|||
<%= link_to_attachment @attachment, :text => "#{l(:button_download)} (#{number_to_human_size(@attachment.filesize)})", :download => true, :class => 'icon icon-download' -%>
|
||||
</div>
|
||||
|
||||
<h2><%=h @attachment.filename %></h2>
|
||||
<h2>
|
||||
<%= safe_join([link_to_attachment_container(@attachment.container), @attachment.filename].compact, ' » ') %>
|
||||
</h2>
|
||||
|
||||
<div class="attachments">
|
||||
<p><%= "#{@attachment.description} - " unless @attachment.description.blank? %>
|
||||
<span class="author"><%= link_to_user(@attachment.author) %>, <%= format_time(@attachment.created_on) %></span></p>
|
||||
</div>
|
||||
<%= yield %>
|
||||
<div class="filecontent-container">
|
||||
<%= yield %>
|
||||
</div>
|
||||
|
||||
<span class="pagination filepreview">
|
||||
<%= render_pagination %>
|
||||
</span>
|
||||
|
||||
<% html_title @attachment.filename %>
|
||||
|
||||
|
|
|
@ -2,31 +2,28 @@
|
|||
<html lang="<%= current_language %>">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
||||
<title><%= html_title %></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="<%= Redmine::Info.app_name %>" />
|
||||
<meta name="keywords" content="issue,bug,tracker" />
|
||||
<%= csrf_meta_tag %>
|
||||
<%= favicon %>
|
||||
<%= stylesheet_link_tag 'jquery/jquery-ui-1.11.0', 'cookieconsent.min', 'application', 'responsive', :media => 'all' %>
|
||||
<%= stylesheet_link_tag 'jquery/jquery-ui-1.11.0', 'tribute-3.7.3', 'application', 'responsive', :media => 'all' %>
|
||||
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
|
||||
<% is_welcome = !User.current.logged? && current_page?(:controller => 'welcome', :action => 'index') %>
|
||||
<%= stylesheet_link_tag 'frontpage', :media => 'all' if is_welcome %>
|
||||
|
||||
<%= javascript_heads %>
|
||||
<script src="/themes/circlepro/javascripts/cookieconsent.min.js"></script>
|
||||
<%= heads_for_theme %>
|
||||
<%= call_hook :view_layouts_base_html_head %>
|
||||
<!-- page specific tags -->
|
||||
<%= yield :header_tags -%>
|
||||
</head>
|
||||
<body class="<%= body_css_classes %><%= ' is-preload' if is_welcome %>">
|
||||
<body class="<%= body_css_classes %>">
|
||||
<%= call_hook :view_layouts_base_body_top %>
|
||||
<div id="wrapper">
|
||||
|
||||
<div class="flyout-menu js-flyout-menu">
|
||||
|
||||
|
||||
<% if User.current.logged? || !Setting.login_required? %>
|
||||
<div class="flyout-menu__search">
|
||||
<%= form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
|
||||
|
@ -63,60 +60,50 @@
|
|||
|
||||
<div id="wrapper2">
|
||||
<div id="wrapper3">
|
||||
|
||||
<div id="top-menu">
|
||||
<div id="wrapper-top-menu">
|
||||
<ul class="social-menu">
|
||||
<li class="social-link-blog"><a href="https://manuel.cillero.es" title="<%= l(:link_my_blog) %>" class="icon-blog"><span><%= l(:link_my_blog) %></span></a></li>
|
||||
<li class="social-link-twitter"><a href="https://twitter.com/manuelcillero" title="Twitter" target="_blank" class="icon-twitter"><span>Twitter</span></a></li>
|
||||
<li class="social-link-facebook"><a href="https://facebook.com/manuelcillero" title="Facebook" target="_blank" class="icon-facebook"><span>Facebook</span></a></li>
|
||||
<li class="social-link-linkedin"><a href="https://es.linkedin.com/in/manuelcillero" title="Linkedin" target="_blank" class="icon-linkedin"><span>Linkedin</span></a></li>
|
||||
<li class="social-link-gitlab"><a href="https://gitlab.com/manuelcillero" title="Gitlab" target="_blank" class="icon-gitlab"><span>Gitlab</span></a></li>
|
||||
<li class="social-link-mail"><a href="https://manuel.cillero.es/contacto/#suitepro" title="Mail" class="icon-mail"><span>Mail</span></a></li>
|
||||
</ul>
|
||||
<div id="account">
|
||||
<%= render_menu :account_menu -%>
|
||||
</div>
|
||||
<%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}".html_safe, :id => 'loggedas') if User.current.logged? %>
|
||||
<%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="header">
|
||||
|
||||
<a href="#" class="mobile-toggle-button js-flyout-menu-toggle-button"></a>
|
||||
|
||||
<div id="wrapper-header">
|
||||
<% if User.current.logged? || !Setting.login_required? %>
|
||||
<div id="quick-search" class="hide-when-print">
|
||||
<div id="quick-search">
|
||||
<%= form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
|
||||
<%= hidden_field_tag 'scope', default_search_project_scope, :id => nil %>
|
||||
<%= hidden_field_tag(controller.default_search_scope, 1, :id => nil) if controller.default_search_scope %>
|
||||
<label for='q'>
|
||||
<%= link_to l(:label_search), {:controller => 'search', :action => 'index', :id => @project, :scope => default_search_project_scope}, :accesskey => accesskey(:search) %>:
|
||||
</label>
|
||||
<%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %>
|
||||
<%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search),
|
||||
:data => {
|
||||
:auto_complete => true,
|
||||
:issues_url => auto_complete_issues_path(:q => '')
|
||||
} %>
|
||||
<% end %>
|
||||
<%= render_project_jump_box %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<h1><%= page_header_title %></h1>
|
||||
</div>
|
||||
|
||||
<% if display_main_menu?(@project) %>
|
||||
<div id="main-menu" class="tabs">
|
||||
<div id="wrapper-main-menu">
|
||||
<%= render_main_menu(@project) %>
|
||||
<div class="tabs-buttons" style="display:none;">
|
||||
<button class="tab-left" onclick="moveTabLeft(this); return false;"></button>
|
||||
<button class="tab-right" onclick="moveTabRight(this); return false;"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div id="main" class="<%= sidebar_content? ? '' : 'nosidebar' %>">
|
||||
<div id="wrapper-main">
|
||||
<div id="sidebar">
|
||||
<%= yield :sidebar %>
|
||||
<%= view_layouts_base_sidebar_hook_response %>
|
||||
|
@ -128,54 +115,17 @@
|
|||
<%= call_hook :view_layouts_base_content %>
|
||||
<div style="clear:both;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div> <!-- #wrapper3 -->
|
||||
|
||||
<a href="#" id="scrollup" class="hide-when-print" style="display: none;"><%=l(:label_sort_higher)%></a><%= javascript_tag "$('#scrollup').click(function(){$('html,body').animate({scrollTop:0},600);return false;});" %>
|
||||
<div id="footer">
|
||||
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2020 Jean-Philippe Lang
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
|
||||
<div id="ajax-modal" style="display:none;"></div>
|
||||
|
||||
<div id="footer">
|
||||
<div id="wrapper-footer">
|
||||
<ul class="social-menu">
|
||||
<li class="social-link-blog"><a href="https://manuel.cillero.es" title="<%= l(:link_my_blog) %>" class="icon-blog"><span><%= l(:link_my_blog) %></span></a></li>
|
||||
<li class="social-link-twitter"><a href="https://twitter.com/manuelcillero" title="Twitter" target="_blank" class="icon-twitter"><span>Twitter</span></a></li>
|
||||
<li class="social-link-facebook"><a href="https://facebook.com/manuelcillero" title="Facebook" target="_blank" class="icon-facebook"><span>Facebook</span></a></li>
|
||||
<li class="social-link-linkedin"><a href="https://es.linkedin.com/in/manuelcillero" title="Linkedin" target="_blank" class="icon-linkedin"><span>Linkedin</span></a></li>
|
||||
<li class="social-link-gitlab"><a href="https://gitlab.com/manuelcillero" title="Gitlab" target="_blank" class="icon-gitlab"><span>Gitlab</span></a></li>
|
||||
<li class="social-link-mail"><a href="https://manuel.cillero.es/contacto/#suitepro" title="Mail" class="icon-mail"><span>Mail</span></a></li>
|
||||
</ul>
|
||||
<div class="bgl"><div class="bgr">
|
||||
<span class="copyright"><%= Time.current.year %> © SuitePro <span class="powered">(powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %>)</span></span>
|
||||
<div id="legal">
|
||||
<span class="legal-legal"><a href="/projects/suitepro/wiki/Legal"><%= l(:label_legal) %></a></span>
|
||||
<span class="legal-terms"> | <a href="/projects/suitepro/wiki/Condiciones_de_uso"><%= l(:label_legal_terms) %></a></span>
|
||||
<span class="legal-privacy"> | <a href="/projects/suitepro/wiki/Política_de_privacidad"><%= l(:label_legal_privacy) %></a></span>
|
||||
<span class="legal-cookies"> | <a href="/projects/suitepro/wiki/Política_de_cookies"><%= l(:label_legal_cookies) %></a></span>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div> <!-- #wrapper2 -->
|
||||
|
||||
</div> <!-- #wrapper -->
|
||||
<%= call_hook :view_layouts_base_body_bottom %>
|
||||
|
||||
<script>
|
||||
//<![CDATA[
|
||||
window.addEventListener("load", function(){
|
||||
window.cookieconsent.initialise({
|
||||
"palette": { "popup": { "background": "rgba(20,20,20,0.8)" }, "button": { "background": "#fff" } },
|
||||
"theme": "classic",
|
||||
"position": "bottom-left",
|
||||
"content": { "message": "<a href='https://suitepro.cillero.es'>SuitePro</a> requiere el uso de cookies para ofrecer la mejor experiencia de acceso a sus contenidos. Puedes aceptar su uso o abandonar la página si lo deseas.", "dismiss": "ACEPTO SU USO", "link": "Más información", "href": "/projects/suitepro/wiki/Pol%C3%ADtica_de_cookies", "target": "_self" }
|
||||
})});
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<h1><%= link_to("#{issue.tracker.name} ##{issue.id}: #{issue.subject}", issue_url) %></h1>
|
||||
|
||||
<%= render_email_issue_attributes(issue, users.first, true) %>
|
||||
<%= render_email_issue_attributes(issue, user, true) %>
|
||||
|
||||
<%= textilizable(issue, :description, :only_path => false) %>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<%= "#{issue.tracker.name} ##{issue.id}: #{issue.subject}" %>
|
||||
<%= issue_url %>
|
||||
|
||||
<%= render_email_issue_attributes(issue, users.first) %>
|
||||
<%= render_email_issue_attributes(issue, user) %>
|
||||
----------------------------------------
|
||||
<%= issue.description %>
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
<p><%= l(:mail_body_account_activation_request, h(@user.login)) %></p>
|
||||
<p><%= l(:mail_body_account_activation_request, h(@new_user.login)) %></p>
|
||||
<p><%= link_to @url, @url %></p>
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
<%= l(:mail_body_account_activation_request, @user.login) %>
|
||||
<%= l(:mail_body_account_activation_request, @new_user.login) %>
|
||||
<%= @url %>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<%= l(:text_issue_added, :id => link_to("##{@issue.id}", @issue_url), :author => h(@issue.author)).html_safe %>
|
||||
<hr />
|
||||
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :users => @users, :issue_url => @issue_url } %>
|
||||
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<%= l(:text_issue_added, :id => "##{@issue.id}", :author => @issue.author) %>
|
||||
|
||||
----------------------------------------
|
||||
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :users => @users, :issue_url => @issue_url } %>
|
||||
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
|
||||
|
|
|
@ -12,4 +12,4 @@
|
|||
|
||||
<%= textilizable(@journal, :notes, :only_path => false) %>
|
||||
<hr />
|
||||
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :users => @users, :issue_url => @issue_url } %>
|
||||
<%= render :partial => 'issue', :formats => [:html], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
|
||||
|
|
|
@ -9,4 +9,4 @@
|
|||
|
||||
<% end -%>
|
||||
----------------------------------------
|
||||
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :users => @users, :issue_url => @issue_url } %>
|
||||
<%= render :partial => 'issue', :formats => [:text], :locals => { :issue => @issue, :user => @user, :issue_url => @issue_url } %>
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<p><%= l(:mail_body_lost_password) %><br />
|
||||
<%= link_to @url, @url %></p>
|
||||
|
||||
<p><%= l(:mail_body_lost_password_validity) %></p>
|
||||
|
||||
<p><%= l(:field_login) %>: <b><%= @token.user.login %></b></p>
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<%= l(:mail_body_lost_password) %>
|
||||
<%= @url %>
|
||||
|
||||
<%= l(:mail_body_lost_password_validity) %>
|
||||
|
||||
<%= l(:field_login) %>: <%= @token.user.login %>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
<ul>
|
||||
<% @issues.each do |issue| -%>
|
||||
<li><%= link_to_issue(issue, :project => true, :only_path => false) %></li>
|
||||
<li><%= link_to_issue(issue, :project => true, :only_path => false) %> (<%= due_date_distance_in_words(issue.due_date) %>)</li>
|
||||
<% end -%>
|
||||
</ul>
|
||||
|
||||
<p><%= link_to l(:label_issue_view_all), @issues_url %></p>
|
||||
<p><%= link_to l(:label_issue_view_all), @issues_url %> (<%= l(:label_x_open_issues_abbr, :count => @open_issues_count) %>)</p>
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<%= l(:mail_body_reminder, :count => @issues.size, :days => @days) %>:
|
||||
|
||||
<% @issues.each do |issue| -%>
|
||||
* <%= "#{issue.project} - #{issue.tracker} ##{issue.id}: #{issue.subject}" %>
|
||||
* <%= "#{issue.project} - #{issue.tracker} ##{issue.id}: #{issue.subject} (#{due_date_distance_in_words(issue.due_date)})" %>
|
||||
<% end -%>
|
||||
|
||||
<%= l(:label_issue_view_all)%> (<%= l(:label_x_open_issues_abbr, :count => @open_issues_count) %>)
|
||||
<%= @issues_url %>
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
<%= content_tag :h1, @title -%>
|
||||
<% end %></p>
|
||||
|
||||
<p><%= l(:field_user) %>: <strong><%= @originator.login %></strong><br/>
|
||||
<p><%= l(:field_user) %>: <strong><%= @sender.login %></strong><br/>
|
||||
<%= l(:field_remote_ip) %>: <strong><%= @remote_ip %></strong><br/>
|
||||
<%= l(:label_date) %>: <strong><%= format_time Time.now, true, @user %></strong></p>
|
||||
|
||||
<%= l(:label_date) %>: <strong><%= format_time Time.now, true %></strong></p>
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
<%= @url || @title %>
|
||||
|
||||
<%= l(:field_user) %>: <%= @originator.login %>
|
||||
<%= l(:field_user) %>: <%= @sender.login %>
|
||||
<%= l(:field_remote_ip) %>: <%= @remote_ip %>
|
||||
<%= l(:label_date) %>: <%= format_time Time.now, true, @user %>
|
||||
|
||||
<%= l(:label_date) %>: <%= format_time Time.now, true %>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<%= link_to @url, @url %>
|
||||
|
||||
<p><%= l(:field_user) %>: <strong><%= User.current.login %></strong><br/>
|
||||
<%= l(:field_remote_ip) %>: <strong><%= User.current.remote_ip %></strong><br/>
|
||||
<p><%= l(:field_user) %>: <strong><%= @sender.login %></strong><br/>
|
||||
<%= l(:field_remote_ip) %>: <strong><%= @remote_ip %></strong><br/>
|
||||
<%= l(:label_date) %>: <strong><%= format_time Time.now, true %></strong></p>
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
<%= @url %>
|
||||
|
||||
<%= l(:field_user) %>: <%= User.current.login %>
|
||||
<%= l(:field_remote_ip) %>: <%= User.current.remote_ip %>
|
||||
<%= l(:field_user) %>: <%= @sender.login %>
|
||||
<%= l(:field_remote_ip) %>: <%= @remote_ip %>
|
||||
<%= l(:label_date) %>: <%= format_time Time.now, true %>
|
||||
|
||||
|
|
|
@ -4,17 +4,18 @@
|
|||
:method => :put) do |f| %>
|
||||
<p>
|
||||
<% @roles.each do |role| %>
|
||||
<label>
|
||||
<label class="block">
|
||||
<%= check_box_tag('membership[role_ids][]',
|
||||
role.id, @member.roles.to_a.include?(role),
|
||||
:id => nil,
|
||||
:disabled => !@member.role_editable?(role)) %> <%= role %>
|
||||
</label><br />
|
||||
<%= render_role_inheritance(@member, role) %>
|
||||
</label>
|
||||
<% end %>
|
||||
</p>
|
||||
<%= hidden_field_tag 'membership[role_ids][]', '', :id => nil %>
|
||||
<p>
|
||||
<%= submit_tag l(:button_save), :class => "small" %>
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<%= link_to_function l(:button_cancel),
|
||||
"$('#member-#{@member.id}-roles').show(); $('#member-#{@member.id}-form').empty(); return false;" if request.xhr? %>
|
||||
</p>
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
<%= render :partial => 'new_form' %>
|
||||
<p class="buttons">
|
||||
<%= submit_tag l(:button_add), :id => 'member-add-submit' %>
|
||||
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
|
||||
<%= link_to_function l(:button_cancel), "hideModal(this);" %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
|
|
@ -23,8 +23,14 @@
|
|||
|
||||
<p>
|
||||
<%= label_tag "message_content", l(:description_message_content), :class => "hidden-for-sighted" %>
|
||||
<%= f.text_area :content, :cols => 80, :rows => 15, :class => 'wiki-edit', :id => 'message_content' %></p>
|
||||
<%= wikitoolbar_for 'message_content' %>
|
||||
<%= f.text_area :content, :cols => 80, :rows => 15, :class => 'wiki-edit', :id => 'message_content',
|
||||
:accesskey => accesskey(:edit),
|
||||
:data => {
|
||||
:auto_complete => true,
|
||||
:issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
|
||||
}
|
||||
%></p>
|
||||
<%= wikitoolbar_for 'message_content', preview_board_message_path(:board_id => @board, :id => @message) %>
|
||||
<!--[eoform:message]-->
|
||||
|
||||
<p><%= l(:label_attachment_plural) %><br />
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<%= board_breadcrumb(@message) %>
|
||||
|
||||
<h2><%= avatar(@topic.author, :size => "24") %><%= @topic.subject %></h2>
|
||||
<h2><%= avatar(@topic.author) %><%= @topic.subject %></h2>
|
||||
|
||||
<%= form_for @message, {
|
||||
:as => :message,
|
||||
|
@ -12,6 +12,4 @@
|
|||
<%= render :partial => 'form',
|
||||
:locals => {:f => f, :replying => !@message.parent.nil?} %>
|
||||
<%= submit_tag l(:button_save) %>
|
||||
<%= preview_link({:controller => 'messages', :action => 'preview', :board_id => @board, :id => @message}, 'message-form') %>
|
||||
<% end %>
|
||||
<div id="preview" class="wiki"></div>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue