Patch by Felix Gliesche. git-svn-id: http://svn.redmine.org/redmine/trunk@17252 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/4.0.0
@@ -1223,6 +1223,10 @@ module ApplicationHelper | |||
content_tag(:a, name, {:href => '#', :onclick => "#{function}; return false;"}.merge(html_options)) | |||
end | |||
def link_to_context_menu | |||
link_to l(:button_actions), '#', title: l(:button_actions), class: 'icon-only icon-actions js-contextmenu' | |||
end | |||
# Helper to render JSON in views | |||
def raw_json(arg) | |||
arg.to_json.to_s.gsub('/', '\/').html_safe |
@@ -99,7 +99,8 @@ module IssuesHelper | |||
content_tag('td', link_to_issue(child, :project => (issue.project_id != child.project_id)), :class => 'subject', :style => 'width: 50%') + | |||
content_tag('td', h(child.status), :class => 'status') + | |||
content_tag('td', link_to_user(child.assigned_to), :class => 'assigned_to') + | |||
content_tag('td', child.disabled_core_fields.include?('done_ratio') ? '' : progress_bar(child.done_ratio), :class=> 'done_ratio'), | |||
content_tag('td', child.disabled_core_fields.include?('done_ratio') ? '' : progress_bar(child.done_ratio), :class=> 'done_ratio') + | |||
content_tag('td', link_to_context_menu, :class => 'buttons'), | |||
:class => css) | |||
end | |||
s << '</table>' | |||
@@ -114,7 +115,7 @@ module IssuesHelper | |||
relations.each do |relation| | |||
other_issue = relation.other_issue(issue) | |||
css = "issue hascontextmenu #{other_issue.css_classes}" | |||
link = manage_relations ? link_to(l(:label_relation_delete), | |||
buttons = manage_relations ? link_to(l(:label_relation_delete), | |||
relation_path(relation), | |||
:remote => true, | |||
:method => :delete, | |||
@@ -122,6 +123,7 @@ module IssuesHelper | |||
:title => l(:label_relation_delete), | |||
:class => 'icon-only icon-link-break' | |||
) : nil | |||
buttons << link_to_context_menu | |||
s << content_tag('tr', | |||
content_tag('td', check_box_tag("ids[]", other_issue.id, false, :id => nil), :class => 'checkbox') + | |||
@@ -130,7 +132,7 @@ module IssuesHelper | |||
content_tag('td', other_issue.start_date, :class => 'start_date') + | |||
content_tag('td', other_issue.due_date, :class => 'due_date') + | |||
content_tag('td', other_issue.disabled_core_fields.include?('done_ratio') ? '' : progress_bar(other_issue.done_ratio), :class=> 'done_ratio') + | |||
content_tag('td', link, :class => 'buttons'), | |||
content_tag('td', buttons, :class => 'buttons'), | |||
:id => "relation-#{relation.id}", | |||
:class => css) | |||
end |
@@ -14,6 +14,7 @@ | |||
<% query.inline_columns.each do |column| %> | |||
<%= column_header(query, column, query_options) %> | |||
<% end %> | |||
<th></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@@ -21,7 +22,7 @@ | |||
<% if group_name %> | |||
<% reset_cycle %> | |||
<tr class="group open"> | |||
<td colspan="<%= query.inline_columns.size + 1 %>"> | |||
<td colspan="<%= query.inline_columns.size + 2 %>"> | |||
<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> | |||
<%= link_to_function("#{l(:button_collapse_all)}/#{l(:button_expand_all)}", | |||
@@ -34,11 +35,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 %>"> | |||
<% if query.block_columns.count > 1 %> | |||
<span><%= column.caption %></span> | |||
<% end %> |
@@ -35,6 +35,7 @@ | |||
<th><%= l(:label_project) %></th> | |||
<th><%= l(:field_comments) %></th> | |||
<th><%= l(:field_hours) %></th> | |||
<th></th> | |||
</tr></thead> | |||
<tbody> | |||
<% entries_by_day.keys.sort.reverse_each do |day| %> | |||
@@ -42,6 +43,7 @@ | |||
<td><strong><%= day == User.current.today ? l(:label_today).titleize : format_date(day) %></strong></td> | |||
<td colspan="2"></td> | |||
<td class="hours"><em><%= html_hours(format_hours(entries_by_day[day].sum(&:hours))) %></em></td> | |||
<td></td> | |||
</tr> | |||
<% entries_by_day[day].each do |entry| -%> | |||
<tr id="time-entry-<%= entry.id %>" class="time-entry hascontextmenu"> | |||
@@ -52,6 +54,7 @@ | |||
<td class="subject"><%= entry.project %> <%= h(' - ') + link_to_issue(entry.issue, :truncate => 50) if entry.issue %></td> | |||
<td class="comments"><%= entry.comments %></td> | |||
<td class="hours"><%= html_hours(format_hours(entry.hours)) %></td> | |||
<td class="buttons"><%= link_to_context_menu %></td> | |||
</tr> | |||
<% end -%> | |||
<% end -%> |
@@ -47,6 +47,7 @@ | |||
:title => l(:button_delete), | |||
:class => 'icon-only icon-del' %> | |||
<% end -%> | |||
<%= link_to_context_menu %> | |||
</td> | |||
</tr> | |||
<% @query.block_columns.each do |column| |
@@ -30,6 +30,7 @@ | |||
<tr class="hascontextmenu"> | |||
<td class="checkbox"><%= check_box_tag 'ids[]', issue.id, false, :id => nil %></td> | |||
<td class="subject"><%= link_to_issue(issue, :project => (@project != issue.project)) %></td> | |||
<td class="buttons"><%= link_to_context_menu %></td> | |||
</tr> | |||
<% end -%> | |||
</table> |
@@ -44,6 +44,7 @@ | |||
<tr class="issue hascontextmenu"> | |||
<td class="checkbox"><%= check_box_tag 'ids[]', issue.id, false, :id => nil %></td> | |||
<td class="subject"><%= link_to_issue(issue, :project => (@project != issue.project)) %></td> | |||
<td class="buttons"><%= link_to_context_menu %></td> | |||
</tr> | |||
<% end %> | |||
</table> |
@@ -203,6 +203,7 @@ de: | |||
button_update: Aktualisieren | |||
button_view: Anzeigen | |||
button_watch: Beobachten | |||
button_actions: Aktionen | |||
default_activity_design: Design | |||
default_activity_development: Entwicklung |
@@ -1079,6 +1079,7 @@ en: | |||
button_reopen: Reopen | |||
button_import: Import | |||
button_filter: Filter | |||
button_actions: Actions | |||
status_active: active | |||
status_registered: registered |
@@ -5,7 +5,7 @@ var contextMenuObserving; | |||
function contextMenuRightClick(event) { | |||
var target = $(event.target); | |||
if (target.is('a')) {return;} | |||
if (target.is('a:not(.js-contextmenu)')) {return;} | |||
var tr = target.closest('.hascontextmenu').first(); | |||
if (tr.length < 1) {return;} | |||
event.preventDefault(); | |||
@@ -218,6 +218,7 @@ function contextMenuInit() { | |||
if (!contextMenuObserving) { | |||
$(document).click(contextMenuClick); | |||
$(document).contextmenu(contextMenuRightClick); | |||
$(document).on('click', '.js-contextmenu', contextMenuRightClick); | |||
contextMenuObserving = true; | |||
} | |||
} |
@@ -228,6 +228,7 @@ table.list td.checkbox { width: 15px; padding: 2px 0 0 0; } | |||
table.list td.checkbox input {padding:0px;} | |||
table.list td.buttons, div.buttons { white-space:nowrap; text-align: right; } | |||
table.list td.buttons a, div.buttons a { margin-right: 0.6em; } | |||
table.list td.buttons a:last-child, div.buttons a:last-child { margin-right: 0; } | |||
table.list td.buttons img, div.buttons img {vertical-align:middle;} | |||
table.list td.reorder {width:15%; white-space:nowrap; text-align:center; } | |||
table.list table.progress td {padding-right:0px;} | |||
@@ -473,7 +474,7 @@ div.issue.overdue .due-date .value { color: #c22; } | |||
#issue_tree table.issues, #relations table.issues { border: 0; } | |||
#issue_tree td.checkbox, #relations td.checkbox {display:none;} | |||
#relations td.buttons {padding:0;} | |||
#relations td.buttons, #issue_tree td.buttons {padding:0;} | |||
fieldset.collapsible {border-width: 1px 0 0 0;} | |||
fieldset.collapsible>legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; } | |||
@@ -1308,6 +1309,7 @@ div.wiki img {vertical-align:middle; max-width:100%;} | |||
.icon-project { background-image: url(../images/projects.png); } | |||
.icon-add-bullet { background-image: url(../images/bullet_add.png); } | |||
.icon-shared { background-image: url(../images/link.png); } | |||
.icon-actions { background-image: url(../images/3_bullets.png); } | |||
.icon-file { background-image: url(../images/files/default.png); } | |||
.icon-file.text-plain { background-image: url(../images/files/text.png); } |
@@ -793,11 +793,13 @@ | |||
width: 33.33%; /* three columns for all cells that are not subject */ | |||
} | |||
#issue_tree .issues, #issue_tree .issue, | |||
#relations .issues, #relations .issue { | |||
position: relative; /* needed for .buttons positioning */ | |||
} | |||
/* positioniong of unline button */ | |||
#issue_tree .issue > td.buttons, | |||
#relations .issue > td.buttons { | |||
text-align: right; | |||
position: absolute; | |||
@@ -806,11 +808,12 @@ | |||
padding-right: 0; | |||
} | |||
#issue_tree .issue .buttons a, | |||
#relations .issue .buttons a { | |||
vertical-align: middle; | |||
padding-right: 5px; | |||
} | |||
#issue_tree .issue > td.subject, | |||
#relations .issue > td.subject { | |||
padding-right: 25px; /* this is the spaces that .buttons uses next to subject */ | |||
} |