# HG changeset patch # User Toshi MARUYAMA # Date 1439868612 -32400 # Tue Aug 18 12:30:12 2015 +0900 # Node ID ddf4e0c47c2dfe16a069c386a4d75b3d471367e8 # Parent 525046ab1f50346a423df2c1ab9f2bd33947ea63 (#20287) diff --git a/app/views/roles/permissions.html.erb b/app/views/roles/permissions.html.erb --- a/app/views/roles/permissions.html.erb +++ b/app/views/roles/permissions.html.erb @@ -2,54 +2,68 @@ <%= form_tag(permissions_roles_path, :id => 'permissions_form') do %> <%= hidden_field_tag 'permissions[0]', '', :id => nil %> -
- - - - + +<%= stylesheet_link_tag 'divgrid' %> +<%= javascript_include_tag 'divgrid' %> + +
+ +
+
 
+
+ +
+
+
 
+
+ <% @roles.each do |role| %> +
+
+ <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %> +
+
+ <% end %> +
+ +
+ <% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %> + <% even = true %> + <% perms_by_module.keys.sort.each do |mod| %> +
"> + <%= l_or_humanize(mod, :prefix => 'project_module_') %> +
+ <% even = !even %> + <% perms_by_module[mod].each do |permission| %> +
"> + <% even = !even %> + <%= l_or_humanize(permission.name, :prefix => 'permission_') %> +
+ <% end %> + <% end %> +
+ +
+
<% @roles.each do |role| %> -
+
+ <% even = true %> + <% perms_by_module.keys.sort.each do |mod| %> +
<%= (even)? " g_e":" g_o" %>">
+ <% even = !even %> + <% perms_by_module[mod].each do |permission| %> +
" title="<%= "#{l_or_humanize(permission.name, :prefix => 'permission_')} - #{role.name}" %>"> + <% even = !even %> + <% if role.setable_permissions.include? permission %> + <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> + <% end %> +
+ <% end %> + <% end %> +
<% end %> - - - -<% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %> -<% perms_by_module.keys.sort.each do |mod| %> - <% unless mod.blank? %> - - - <% @roles.each do |role| %> - - <% end %> - - <% end %> - <% perms_by_module[mod].each do |permission| %> - - - <% @roles.each do |role| %> - - <% end %> - - <% end %> -<% end %> - -
<%=l(:label_permissions)%> - <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %> - <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.role-#{role.id}')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> -
-   - <%= l_or_humanize(mod, :prefix => 'project_module_') %> - <%= role.name %>
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l_or_humanize(permission.name, :prefix => 'permission_') %> - - <% if role.setable_permissions.include? permission %> - <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %> - <% end %> -
+
+

<%= check_all_links 'permissions_form' %>

<%= submit_tag l(:button_save) %>

<% end %> diff --git a/app/views/trackers/fields.html.erb b/app/views/trackers/fields.html.erb --- a/app/views/trackers/fields.html.erb +++ b/app/views/trackers/fields.html.erb @@ -2,67 +2,111 @@ <% if @trackers.any? %> <%= form_tag fields_trackers_path do %> -
- - - - + <%= stylesheet_link_tag 'divgrid' %> + <%= javascript_include_tag 'divgrid' %> + +
+ +
+
 
+
+ +
+
+
 
+
<% @trackers.each do |tracker| %> -
+
+
+ <%= tracker.name %> +
+
<% end %> - - - - - - - <% Tracker::CORE_FIELDS.each do |field| %> - "> - + + <% Tracker::CORE_FIELDS.each do |field| %> +
"> + <% even = !even %> + <%= l("field_#{field}".sub(/_id$/, '')) %> +
+ <% end %> + <% if @custom_fields.any? %> +
"> + <% even = !even %> + <%= l(:label_custom_field_plural) %> +
+ <% @custom_fields.each do |field| %> +
"> + <% even = !even %> + <%= field.name %> +
+ <% end %> + <% end %> + + +
+
 
+ <% even = false %> +
"> + <% even = !even %> + <%= l(:field_core_fields) %> +
+ <% Tracker::CORE_FIELDS.each do |field| %> +
"> + <% even = !even %> + <%= l("field_#{field}".sub(/_id$/, '')) %> +
+ <% end %> + <% if @custom_fields.any? %> +
"> + <% even = !even %> + <%= l(:label_custom_field_plural) %> +
+ <% @custom_fields.each do |field| %> +
"> + <% even = !even %> + <%= field.name %> +
+ <% end %> + <% end %> +
+ +
+
<% @trackers.each do |tracker| %> -
+
+
 
+ <% even = false %> +
<%= (even)? " g_e":" g_o" %>">
+ <% even = !even %> + <% Tracker::CORE_FIELDS.each do |field| %> +
" title="<%= "#{l("field_#{field}".sub(/_id$/, ''))} - #{tracker}" %>"> + <% even = !even %> + <%= check_box_tag "trackers[#{tracker.id}][core_fields][]", field, tracker.core_fields.include?(field), + :class => "tracker-#{tracker.id} core-field-#{field}", :id => nil %> +
+ <% end %> + <% if @custom_fields.any? %> +
<%= (even)? " g_e":" g_o" %>">
+ <% even = !even %> + <% @custom_fields.each do |field| %> +
" title="<%= "#{field.name} - #{tracker}" %>"> + <% even = !even %> + <%= check_box_tag "trackers[#{tracker.id}][custom_field_ids][]", field.id, tracker.custom_fields.include?(field), + :class => "tracker-#{tracker.id} custom-field-#{field.id}", :id => nil %> +
+ <% end %> + <% end %> +
<% end %> - - <% end %> - <% if @custom_fields.any? %> - - - - <% @custom_fields.each do |field| %> - "> - - <% @trackers.each do |tracker| %> - - <% end %> - - <% end %> - <% end %> - -
- <%= tracker.name %> - <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.tracker-#{tracker.id}')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> -
-   + + +
+
 
+ <% even = false %> +
"> + <% even = !even %> <%= l(:field_core_fields) %> -
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.core-field-#{field}')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= l("field_#{field}".sub(/_id$/, '')) %> - - <%= check_box_tag "trackers[#{tracker.id}][core_fields][]", field, tracker.core_fields.include?(field), - :class => "tracker-#{tracker.id} core-field-#{field}", :id => nil %> -
-   - <%= l(:label_custom_field_plural) %> -
- <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.custom-field-#{field.id}')", - :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %> - <%= field.name %> - - <%= check_box_tag "trackers[#{tracker.id}][custom_field_ids][]", field.id, tracker.custom_fields.include?(field), - :class => "tracker-#{tracker.id} custom-field-#{field.id}", :id => nil %> -
+

<%= submit_tag l(:button_save) %>

<% @trackers.each do |tracker| %> @@ -70,6 +114,9 @@ <%= hidden_field_tag "trackers[#{tracker.id}][custom_field_ids][]", '' %> <% end %> <% end %> + + + <% else %>

<%= l(:label_no_data) %>

<% end %> diff --git a/app/views/workflows/edit.html.erb b/app/views/workflows/edit.html.erb --- a/app/views/workflows/edit.html.erb +++ b/app/views/workflows/edit.html.erb @@ -32,28 +32,54 @@ <% end %> <% if @trackers && @roles && @statuses.any? %> + <%= stylesheet_link_tag 'divgrid' %> + <%= javascript_include_tag 'divgrid' %> + + + <%= form_tag({}, :id => 'workflow_form' ) do %> <%= @trackers.map {|tracker| hidden_field_tag 'tracker_id[]', tracker.id, :id => nil}.join.html_safe %> <%= @roles.map {|role| hidden_field_tag 'role_id[]', role.id, :id => nil}.join.html_safe %> <%= hidden_field_tag 'used_statuses_only', params[:used_statuses_only], :id => nil %>
- <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %> +
+ <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %> +
-
- <%= l(:label_additional_workflow_transitions_for_author) %> -
- <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %> -
+ + <%= javascript_tag "hideFieldset($('#author_workflows'))" unless @workflows['author'].present? %> -
- <%= l(:label_additional_workflow_transitions_for_assignee) %> -
- <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %> -
+ + <%= javascript_tag "hideFieldset($('#assignee_workflows'))" unless @workflows['assignee'].present? %> + + + +
<%= submit_tag l(:button_save) %> <% end %> diff --git a/app/views/workflows/index.html.erb b/app/views/workflows/index.html.erb --- a/app/views/workflows/index.html.erb +++ b/app/views/workflows/index.html.erb @@ -3,31 +3,55 @@ <% if @roles.empty? || @trackers.empty? %>

<%= l(:label_no_data) %>

<% else %> -
- - - - - <% @roles.each do |role| %> - - <% end %> - - - -<% @trackers.each do |tracker| -%> - - - <% @roles.each do |role| -%> - <% count = @workflow_counts[[tracker.id, role.id]] || 0 %> - - <% end -%> - -<% end -%> - -
- <%= content_tag(role.builtin? ? 'em' : 'span', role.name) %> -
<%= tracker.name %> - <%= link_to((count > 0 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role, :tracker_id => tracker}, :title => l(:button_edit)) %> -
-
+ <%= stylesheet_link_tag 'divgrid' %> + <%= javascript_include_tag 'divgrid' %> + +
+ +
+
 
+
+ +
+
+
 
+
+ <% @roles.each do |role, count| %> +
+
+ <%= role.name %> +
+
+ <% end %> +
+ +
+
 
+ <% even = false %> + <% @trackers.each do |tracker| %> +
"> + <% even = !even %> + <%= tracker.name %> +
+ <% end %> +
+ +
+
+ <% @workflow_counts.first.last.each_with_index do |role, index| %> +
+
 
+ <% even = false %> + <% @trackers.each do |tracker| %> + <% count = @workflow_counts[[tracker.id, role.id]] || 0 %> +
" title="<%= "#{tracker.name} - #{role[0]}" %>"> + <% even = !even %> + <%= link_to((count > 0 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role[0], :tracker_id => tracker}) %> +
+ <% end %> +
+ <% end %> +
+
+ <% end %> diff --git a/app/views/workflows/permissions.html.erb b/app/views/workflows/permissions.html.erb --- a/app/views/workflows/permissions.html.erb +++ b/app/views/workflows/permissions.html.erb @@ -31,70 +31,137 @@ <% end %> <% if @trackers && @roles && @statuses.any? %> + <%= stylesheet_link_tag 'divgrid' %> + <%= javascript_include_tag 'divgrid' %> + + + <%= form_tag({}, :id => 'workflow_form' ) do %> <%= @trackers.map {|tracker| hidden_field_tag 'tracker_id[]', tracker.id, :id => nil}.join.html_safe %> <%= @roles.map {|role| hidden_field_tag 'role_id[]', role.id, :id => nil}.join.html_safe %> <%= hidden_field_tag 'used_statuses_only', params[:used_statuses_only], :id => nil %>
- - - - - - - - - <% for status in @statuses %> - - <% end %> - - - - - - - <% @fields.each do |field, name| %> - "> - - <% for status in @statuses -%> - - <% end -%> - - <% end %> + + +
+ +
+
 
+
+ +
+
+
 
+
+ <% for status in @statuses %> +
+
+ <%= status.name %> +
+
+ <% end %> +
+ +
+
 
+ <% even = false %> + <% @fields.each do |field, name| %> +
"> + <% even = !even %> + <%= name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %> +
+ <% end %> +
+ +
+
+ <% for status in @statuses %> +
+
 
+ <% even = false %> + <% @fields.each do |field, name| %> +
<%= @permissions[status.id][field] %>" title="<%= "#{name} - #{status.name}" %>"> +
+ <% even = !even %> + <%= field_permission_tag(@permissions, status, field, @roles) %> +
+
+ <% end %> +
+ <% end %> +
+
<% if @custom_fields.any? %> - - - - <% @custom_fields.each do |field| %> - "> - - <% for status in @statuses -%> - - <% end -%> - - <% end %> - <% end %> - -
- <%=l(:label_issue_status)%>
- <%= status.name %> -
-   +
+ <%= l(:field_core_fields) %> -
- <%= name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %> - - <%= field_permission_tag(@permissions, status, field, @roles) %> - <% unless status == @statuses.last %>»<% end %> -
-   +
+ <%= l(:label_custom_field_plural) %> -
- <%= field.name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %> - - <%= field_permission_tag(@permissions, status, field, @roles) %> - <% unless status == @statuses.last %>»<% end %> -
+ + +
+ +
+
 
+
+ +
+
+
 
+
+ <% for status in @statuses %> +
+
+ <%= status.name %> +
+
+ <% end %> +
+ +
+
 
+ <% even = false %> + <% @custom_fields.each do |field| %> +
"> + <% even = !even %> + <%= field.name %> <%= content_tag('span', '*', :class => 'required') if field_required?(field) %> +
+ <% end %> +
+ +
+
+ <% for status in @statuses %> +
+
 
+ <% even = false %> + <% @custom_fields.each do |field| %> +
<%= @permissions[status.id][field.id.to_s] %>" title="<%= "#{field.name} - #{status.name}" %>"> +
+ <% even = !even %> + <%= field_permission_tag(@permissions, status, field, @roles) %> +
+
+ <% end %> +
+ <% end %> +
+
+ <% end -%> + +
<%= submit_tag l(:button_save) %> <% end %> @@ -119,5 +186,4 @@ target.find("option[value=all]").attr("selected", false).hide(); } }); - <% end %> diff --git a/public/javascripts/divgrid.js b/public/javascripts/divgrid.js new file mode 100644 --- /dev/null +++ b/public/javascripts/divgrid.js @@ -0,0 +1,34 @@ +/* Simple Grid Scripts tables with fixed First Row and Line */ + +// scrolls first line and row with body +// div is this +// row is id of row Ex: g_fr +// line is id of line Ex: g_fl +function g_scroll(div, line, row) { + document.getElementById(line).style.left = - div.scrollLeft + 'px'; + document.getElementById(row).style.top = - div.scrollTop + 'px'; +} + +// adjusts width of rows +// bli is the block div +// fri is the first row div +// fli is the first line div +// bdi is the body div +function g_adjust(bli, fri, fli, bdi) { + var frw = document.getElementById(fri).offsetWidth + "px"; + document.getElementById(bli).style.width = frw + var fl = document.getElementById(fli).children; + fl[0].style.width = frw + var bd = document.getElementById(bdi).children; + bd[0].style.width = frw + + for (var i = 1; i < fl.length; ++i) { + s1 = fl[i].offsetWidth; + s2 = bd[i].offsetWidth; + if (s1 > s2) { + bd[i].style.width = s1 + "px" + } else { + fl[i].style.width = s2 + "px" + } + } +} diff --git a/public/stylesheets/divgrid.css b/public/stylesheets/divgrid.css new file mode 100644 --- /dev/null +++ b/public/stylesheets/divgrid.css @@ -0,0 +1,36 @@ +/* Simple Grid Styles for tables with fixed First Row and Line */ + +/* Cell */ +.g_c { height: 1.5em; + padding: 6px 12px 6px 12px; + border-width: 0px 1px 1px 0px; + border-style: solid; + border-color: #CCC; + text-align: center; + overflow: hidden; } + +/* First Line */ +.g_h { background-color: #EEE; + font-weight: bold; + text-align: center; } + +/* First Row */ +.g_v { text-align: left; } + +/* Image in Cell */ +.g_i { height: 16px; + width: 16px; + margin: 0 auto; } + +/* Separation Lines */ +.g_s { font-weight: bold; + border-right: 0px; } + +/* Marked Cell */ +.g_m { background-color: #BFB; } + +/* Even Cell */ +.g_e { background-color: #F6F7F8; } + +/* Odd Cell */ +.g_o { background-color: #FFFFFF; }