##// END OF EJS Templates
Adds checkboxes toggle links on permissions report....
Jean-Philippe Lang -
r1769:6ad989f82887
parent child
Show More
@@ -1,37 +1,45
1 <h2><%=l(:label_permissions_report)%></h2>
1 <h2><%=l(:label_permissions_report)%></h2>
2
2
3 <% form_tag({:action => 'report'}, :id => 'permissions_form') do %>
3 <% form_tag({:action => 'report'}, :id => 'permissions_form') do %>
4 <%= hidden_field_tag 'permissions[0]', '' %>
4 <%= hidden_field_tag 'permissions[0]', '', :id => nil %>
5 <table class="list">
5 <table class="list">
6 <thead>
6 <thead>
7 <tr>
7 <tr>
8 <th><%=l(:label_permissions)%></th>
8 <th><%=l(:label_permissions)%></th>
9 <% @roles.each do |role| %>
9 <% @roles.each do |role| %>
10 <th><%= content_tag(role.builtin? ? 'em' : 'span', h(role.name)) %></th>
10 <th>
11 <%= content_tag(role.builtin? ? 'em' : 'span', h(role.name)) %>
12 <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.role-#{role.id}')",
13 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
14 </th>
11 <% end %>
15 <% end %>
12 </tr>
16 </tr>
13 </thead>
17 </thead>
14 <tbody>
18 <tbody>
15 <% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %>
19 <% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %>
16 <% perms_by_module.keys.sort.each do |mod| %>
20 <% perms_by_module.keys.sort.each do |mod| %>
17 <% unless mod.blank? %>
21 <% unless mod.blank? %>
18 <tr><%= content_tag('th', mod.humanize, :colspan => (@roles.size + 1), :align => 'left') %></tr>
22 <tr><%= content_tag('th', mod.humanize, :colspan => (@roles.size + 1), :align => 'left') %></tr>
19 <% end %>
23 <% end %>
20 <% perms_by_module[mod].each do |permission| %>
24 <% perms_by_module[mod].each do |permission| %>
21 <tr class="<%= cycle('odd', 'even') %>">
25 <tr class="<%= cycle('odd', 'even') %> permission-<%= permission.name %>">
22 <td><%= permission.name.to_s.humanize %></td>
26 <td>
27 <%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('.permission-#{permission.name} input')",
28 :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
29 <%= permission.name.to_s.humanize %>
30 </td>
23 <% @roles.each do |role| %>
31 <% @roles.each do |role| %>
24 <td align="center">
32 <td align="center">
25 <% if role.setable_permissions.include? permission %>
33 <% if role.setable_permissions.include? permission %>
26 <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name) %>
34 <%= check_box_tag "permissions[#{role.id}][]", permission.name, (role.permissions.include? permission.name), :id => nil, :class => "role-#{role.id}" %>
27 <% end %>
35 <% end %>
28 </td>
36 </td>
29 <% end %>
37 <% end %>
30 </tr>
38 </tr>
31 <% end %>
39 <% end %>
32 <% end %>
40 <% end %>
33 </tbody>
41 </tbody>
34 </table>
42 </table>
35 <p><%= check_all_links 'permissions_form' %></p>
43 <p><%= check_all_links 'permissions_form' %></p>
36 <p><%= submit_tag l(:button_save) %></p>
44 <p><%= submit_tag l(:button_save) %></p>
37 <% end %>
45 <% end %>
@@ -1,137 +1,144
1 /* redMine - project management software
1 /* redMine - project management software
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
2 Copyright (C) 2006-2008 Jean-Philippe Lang */
3
3
4 function checkAll (id, checked) {
4 function checkAll (id, checked) {
5 var els = Element.descendants(id);
5 var els = Element.descendants(id);
6 for (var i = 0; i < els.length; i++) {
6 for (var i = 0; i < els.length; i++) {
7 if (els[i].disabled==false) {
7 if (els[i].disabled==false) {
8 els[i].checked = checked;
8 els[i].checked = checked;
9 }
9 }
10 }
10 }
11 }
11 }
12
12
13 function toggleCheckboxesBySelector(selector) {
14 boxes = $$(selector);
15 var all_checked = true;
16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
18 }
19
13 function showAndScrollTo(id, focus) {
20 function showAndScrollTo(id, focus) {
14 Element.show(id);
21 Element.show(id);
15 if (focus!=null) { Form.Element.focus(focus); }
22 if (focus!=null) { Form.Element.focus(focus); }
16 Element.scrollTo(id);
23 Element.scrollTo(id);
17 }
24 }
18
25
19 var fileFieldCount = 1;
26 var fileFieldCount = 1;
20
27
21 function addFileField() {
28 function addFileField() {
22 if (fileFieldCount >= 10) return false
29 if (fileFieldCount >= 10) return false
23 fileFieldCount++;
30 fileFieldCount++;
24 var f = document.createElement("input");
31 var f = document.createElement("input");
25 f.type = "file";
32 f.type = "file";
26 f.name = "attachments[" + fileFieldCount + "][file]";
33 f.name = "attachments[" + fileFieldCount + "][file]";
27 f.size = 30;
34 f.size = 30;
28 var d = document.createElement("input");
35 var d = document.createElement("input");
29 d.type = "text";
36 d.type = "text";
30 d.name = "attachments[" + fileFieldCount + "][description]";
37 d.name = "attachments[" + fileFieldCount + "][description]";
31 d.size = 60;
38 d.size = 60;
32
39
33 p = document.getElementById("attachments_fields");
40 p = document.getElementById("attachments_fields");
34 p.appendChild(document.createElement("br"));
41 p.appendChild(document.createElement("br"));
35 p.appendChild(f);
42 p.appendChild(f);
36 p.appendChild(d);
43 p.appendChild(d);
37 }
44 }
38
45
39 function showTab(name) {
46 function showTab(name) {
40 var f = $$('div#content .tab-content');
47 var f = $$('div#content .tab-content');
41 for(var i=0; i<f.length; i++){
48 for(var i=0; i<f.length; i++){
42 Element.hide(f[i]);
49 Element.hide(f[i]);
43 }
50 }
44 var f = $$('div.tabs a');
51 var f = $$('div.tabs a');
45 for(var i=0; i<f.length; i++){
52 for(var i=0; i<f.length; i++){
46 Element.removeClassName(f[i], "selected");
53 Element.removeClassName(f[i], "selected");
47 }
54 }
48 Element.show('tab-content-' + name);
55 Element.show('tab-content-' + name);
49 Element.addClassName('tab-' + name, "selected");
56 Element.addClassName('tab-' + name, "selected");
50 return false;
57 return false;
51 }
58 }
52
59
53 function setPredecessorFieldsVisibility() {
60 function setPredecessorFieldsVisibility() {
54 relationType = $('relation_relation_type');
61 relationType = $('relation_relation_type');
55 if (relationType && relationType.value == "precedes") {
62 if (relationType && relationType.value == "precedes") {
56 Element.show('predecessor_fields');
63 Element.show('predecessor_fields');
57 } else {
64 } else {
58 Element.hide('predecessor_fields');
65 Element.hide('predecessor_fields');
59 }
66 }
60 }
67 }
61
68
62 function promptToRemote(text, param, url) {
69 function promptToRemote(text, param, url) {
63 value = prompt(text + ':');
70 value = prompt(text + ':');
64 if (value) {
71 if (value) {
65 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
72 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
66 return false;
73 return false;
67 }
74 }
68 }
75 }
69
76
70 function collapseScmEntry(id) {
77 function collapseScmEntry(id) {
71 var els = document.getElementsByClassName(id, 'browser');
78 var els = document.getElementsByClassName(id, 'browser');
72 for (var i = 0; i < els.length; i++) {
79 for (var i = 0; i < els.length; i++) {
73 if (els[i].hasClassName('open')) {
80 if (els[i].hasClassName('open')) {
74 collapseScmEntry(els[i].id);
81 collapseScmEntry(els[i].id);
75 }
82 }
76 Element.hide(els[i]);
83 Element.hide(els[i]);
77 }
84 }
78 $(id).removeClassName('open');
85 $(id).removeClassName('open');
79 }
86 }
80
87
81 function expandScmEntry(id) {
88 function expandScmEntry(id) {
82 var els = document.getElementsByClassName(id, 'browser');
89 var els = document.getElementsByClassName(id, 'browser');
83 for (var i = 0; i < els.length; i++) {
90 for (var i = 0; i < els.length; i++) {
84 Element.show(els[i]);
91 Element.show(els[i]);
85 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
92 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
86 expandScmEntry(els[i].id);
93 expandScmEntry(els[i].id);
87 }
94 }
88 }
95 }
89 $(id).addClassName('open');
96 $(id).addClassName('open');
90 }
97 }
91
98
92 function scmEntryClick(id) {
99 function scmEntryClick(id) {
93 el = $(id);
100 el = $(id);
94 if (el.hasClassName('open')) {
101 if (el.hasClassName('open')) {
95 collapseScmEntry(id);
102 collapseScmEntry(id);
96 el.addClassName('collapsed');
103 el.addClassName('collapsed');
97 return false;
104 return false;
98 } else if (el.hasClassName('loaded')) {
105 } else if (el.hasClassName('loaded')) {
99 expandScmEntry(id);
106 expandScmEntry(id);
100 el.removeClassName('collapsed');
107 el.removeClassName('collapsed');
101 return false;
108 return false;
102 }
109 }
103 if (el.hasClassName('loading')) {
110 if (el.hasClassName('loading')) {
104 return false;
111 return false;
105 }
112 }
106 el.addClassName('loading');
113 el.addClassName('loading');
107 return true;
114 return true;
108 }
115 }
109
116
110 function scmEntryLoaded(id) {
117 function scmEntryLoaded(id) {
111 Element.addClassName(id, 'open');
118 Element.addClassName(id, 'open');
112 Element.addClassName(id, 'loaded');
119 Element.addClassName(id, 'loaded');
113 Element.removeClassName(id, 'loading');
120 Element.removeClassName(id, 'loading');
114 }
121 }
115
122
116 function randomKey(size) {
123 function randomKey(size) {
117 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
124 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
118 var key = '';
125 var key = '';
119 for (i = 0; i < size; i++) {
126 for (i = 0; i < size; i++) {
120 key += chars[Math.floor(Math.random() * chars.length)];
127 key += chars[Math.floor(Math.random() * chars.length)];
121 }
128 }
122 return key;
129 return key;
123 }
130 }
124
131
125 /* shows and hides ajax indicator */
132 /* shows and hides ajax indicator */
126 Ajax.Responders.register({
133 Ajax.Responders.register({
127 onCreate: function(){
134 onCreate: function(){
128 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
135 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
129 Element.show('ajax-indicator');
136 Element.show('ajax-indicator');
130 }
137 }
131 },
138 },
132 onComplete: function(){
139 onComplete: function(){
133 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
140 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
134 Element.hide('ajax-indicator');
141 Element.hide('ajax-indicator');
135 }
142 }
136 }
143 }
137 });
144 });
General Comments 0
You need to be logged in to leave comments. Login now