##// END OF EJS Templates
#56 available options from users groups are now self avare of choosen options and doesn't display.
marcink -
r1030:6b37f08d beta
parent child Browse files
Show More
@@ -1,215 +1,246 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.html"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Edit users group')} ${c.users_group.users_group_name} - ${c.rhodecode_name}
6 6 </%def>
7 7
8 8 <%def name="breadcrumbs_links()">
9 9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 10 &raquo;
11 11 ${h.link_to(_('UsersGroups'),h.url('users_groups'))}
12 12 &raquo;
13 13 ${_('edit')} "${c.users_group.users_group_name}"
14 14 </%def>
15 15
16 16 <%def name="page_nav()">
17 17 ${self.menu('admin')}
18 18 </%def>
19 19
20 20 <%def name="main()">
21 21 <div class="box">
22 22 <!-- box / title -->
23 23 <div class="title">
24 24 ${self.breadcrumbs()}
25 25 </div>
26 26 <!-- end box / title -->
27 27 ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
28 28 <div class="form">
29 29 <!-- fields -->
30 30 <div class="fields">
31 31 <div class="field">
32 32 <div class="label">
33 33 <label for="users_group_name">${_('Group name')}:</label>
34 34 </div>
35 35 <div class="input">
36 36 ${h.text('users_group_name',class_='small')}
37 37 </div>
38 38 </div>
39 39
40 40 <div class="field">
41 41 <div class="label label-checkbox">
42 42 <label for="users_group_active">${_('Active')}:</label>
43 43 </div>
44 44 <div class="checkboxes">
45 45 ${h.checkbox('users_group_active',value=True)}
46 46 </div>
47 47 </div>
48 48 <div class="field">
49 49 <div class="label">
50 50 <label for="users_group_active">${_('Members')}:</label>
51 51 </div>
52 52 <div class="select">
53 53 <table>
54 54 <tr>
55 55 <td>
56 56 <div>
57 57 <div style="float:left">
58 58 <div class="text" style="padding: 0px 0px 6px;">${_('Choosen group members')}</div>
59 59 ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
60 60 <div id="remove_all_elements" style="cursor:pointer;text-align:center">
61 61 ${_('Remove all elements')}
62 62 <img alt="remove" style="vertical-align:text-bottom" src="/images/icons/arrow_right.png"/>
63 63 </div>
64 64 </div>
65 65 <div style="float:left;width:20px;padding-top:50px">
66 66 <img alt="add" id="add_element"
67 67 style="padding:2px;cursor:pointer"
68 68 src="/images/icons/arrow_left.png"/>
69 69 <br />
70 70 <img alt="remove" id="remove_element"
71 71 style="padding:2px;cursor:pointer"
72 72 src="/images/icons/arrow_right.png"/>
73 73 </div>
74 74 <div style="float:left">
75 75 <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
76 76 ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
77 77 <div id="add_all_elements" style="cursor:pointer;text-align:center">
78 78 <img alt="add" style="vertical-align:text-bottom" src="/images/icons/arrow_left.png"/>
79 79 ${_('Add all elements')}
80 80 </div>
81 81 </div>
82 82 </div>
83 83 </td>
84 84 </tr>
85 85 </table>
86 86 </div>
87 87
88 88 </div>
89 89 <div class="buttons">
90 90 ${h.submit('save','save',class_="ui-button")}
91 91 </div>
92 92 </div>
93 93 </div>
94 94 ${h.end_form()}
95 95 </div>
96 96
97 97 <script type="text/javascript">
98 98 YAHOO.util.Event.onDOMReady(function(){
99 99 var D = YAHOO.util.Dom;
100 100 var E = YAHOO.util.Event;
101 101
102 102 //definition of containers ID's
103 103 var available_container = 'available_members';
104 104 var selected_container = 'users_group_members';
105
105 106 //form containing containers id
106 107 var form_id = 'edit_users_group';
107 108
108 109 //temp container for selected storage.
109 110 var cache = new Array();
111 var av_cache = new Array();
110 112 var c = D.get(selected_container);
113 var ac = D.get(available_container);
111 114
112 115 //get only selected options for further fullfilment
113 116 for(var i = 0;node =c.options[i];i++){
114 117 if(node.selected){
115 118 //push selected to my temp storage left overs :)
116 119 cache.push(node);
117 120 }
118 121 }
119 122
120 123 //clear 'selected' select
121 124 c.options.length = 0;
122 125
123 126 //fill it with remembered options
124 127 for(var i = 0;node = cache[i];i++){
125 128 c.options[i]=new Option(node.text, node.value, false, false);
126 129 }
127 130
131
132 //get all available options to cache
133 for(var i = 0;node =ac.options[i];i++){
134 //push selected to my temp storage left overs :)
135 av_cache.push(node);
136 }
137
138 //fill available only with those not in choosen
139 ac.options.length=0;
140 tmp_cache = new Array();
141
142 for(var i = 0;node = av_cache[i];i++){
143 var add = true;
144 for(var i2 = 0;node_2 = cache[i2];i2++){
145 if(node.value == node_2.value){
146 add=false;
147 break;
148 }
149 }
150 if(add){
151 tmp_cache.push(new Option(node.text, node.value, false, false));
152 }
153 }
154
155 for(var i = 0;node = tmp_cache[i];i++){
156 ac.options[i] = node;
157 }
158
128 159 function prompts_action_callback(e){
129 160
130 161 var choosen = D.get(selected_container);
131 162 var available = D.get(available_container);
132 163
133 164 //get checked and unchecked options from field
134 165 function get_checked(from_field){
135 166 //temp container for storage.
136 167 var sel_cache = new Array();
137 168 var oth_cache = new Array();
138 169
139 170 for(var i = 0;node = from_field.options[i];i++){
140 171 if(node.selected){
141 172 //push selected fields :)
142 173 sel_cache.push(node);
143 174 }
144 175 else{
145 176 oth_cache.push(node)
146 177 }
147 178 }
148 179
149 180 return [sel_cache,oth_cache]
150 181 }
151 182
152 183 //fill the field with given options
153 184 function fill_with(field,options){
154 185 //clear firtst
155 186 field.options.length=0;
156 187 for(var i = 0;node = options[i];i++){
157 188 field.options[i]=new Option(node.text, node.value,
158 189 false, false);
159 190 }
160 191
161 192 }
162 193 //adds to current field
163 194 function add_to(field,options){
164 195 for(var i = 0;node = options[i];i++){
165 196 field.appendChild(new Option(node.text, node.value,
166 197 false, false));
167 198 }
168 199 }
169 200
170 201 // add action
171 202 if (this.id=='add_element'){
172 203 var c = get_checked(available);
173 204 add_to(choosen,c[0]);
174 205 fill_with(available,c[1]);
175 206 }
176 207 // remove action
177 208 if (this.id=='remove_element'){
178 209 var c = get_checked(choosen);
179 210 add_to(available,c[0]);
180 211 fill_with(choosen,c[1]);
181 212 }
182 213 // add all elements
183 214 if(this.id=='add_all_elements'){
184 215 for(var i=0; node = available.options[i];i++){
185 216 choosen.appendChild(new Option(node.text,
186 217 node.value, false, false));
187 218 }
188 219 available.options.length = 0;
189 220 }
190 221 //remove all elements
191 222 if(this.id=='remove_all_elements'){
192 223 for(var i=0; node = choosen.options[i];i++){
193 224 available.appendChild(new Option(node.text,
194 225 node.value, false, false));
195 226 }
196 227 choosen.options.length = 0;
197 228 }
198 229
199 230 }
200 231
201 232
202 233 E.addListener(['add_element','remove_element',
203 234 'add_all_elements','remove_all_elements'],'click',
204 235 prompts_action_callback)
205 236
206 237 E.addListener(form_id,'submit',function(){
207 238 var choosen = D.get(selected_container);
208 239 for (var i = 0; i < choosen.options.length; i++) {
209 240 choosen.options[i].selected = 'selected';
210 241 }
211 242 })
212 243 });
213 244 </script>
214 245
215 246 </%def> No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now