Mercurial > kallithea
comparison rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html @ 2142:a21eab6ff42f beta
Added gravatars into permissions view and permissions autocomplete
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 19 Mar 2012 21:04:36 +0200 |
parents | de72388c713d |
children | a8c9c0094ddf |
comparison
equal
deleted
inserted
replaced
2141:9d54d6516e2e | 2142:a21eab6ff42f |
---|---|
13 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.none')}</td> | 13 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.none')}</td> |
14 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.read')}</td> | 14 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.read')}</td> |
15 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write')}</td> | 15 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write')}</td> |
16 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.admin')}</td> | 16 <td>${h.radio('u_perm_%s' % r2p.user.username,'group.admin')}</td> |
17 <td style="white-space: nowrap;"> | 17 <td style="white-space: nowrap;"> |
18 <img style="vertical-align:bottom" src="${h.url('/images/icons/user.png')}"/>${r2p.user.username} | 18 <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username} |
19 </td> | 19 </td> |
20 <td> | 20 <td> |
21 %if r2p.user.username !='default': | 21 %if r2p.user.username !='default': |
22 <span class="delete_icon action_button" onclick="ajaxActionUser(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')"> | 22 <span class="delete_icon action_button" onclick="ajaxActionUser(${r2p.user.user_id},'${'id%s'%id(r2p.user.username)}')"> |
23 ${_('revoke')} | 23 ${_('revoke')} |
33 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.none')}</td> | 33 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.none')}</td> |
34 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.read')}</td> | 34 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.read')}</td> |
35 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.write')}</td> | 35 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.write')}</td> |
36 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.admin')}</td> | 36 <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.admin')}</td> |
37 <td style="white-space: nowrap;"> | 37 <td style="white-space: nowrap;"> |
38 <img style="vertical-align:bottom" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name} | 38 <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name} |
39 </td> | 39 </td> |
40 <td> | 40 <td> |
41 <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')"> | 41 <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')"> |
42 ${_('revoke')} | 42 ${_('revoke')} |
43 </span> | 43 </span> |
104 YAHOO.util.Event.addListener('add_perm', 'click', function () { | 104 YAHOO.util.Event.addListener('add_perm', 'click', function () { |
105 YUD.setStyle('add_perm_input', 'display', ''); | 105 YUD.setStyle('add_perm_input', 'display', ''); |
106 YUD.setStyle('add_perm', 'opacity', '0.6'); | 106 YUD.setStyle('add_perm', 'opacity', '0.6'); |
107 YUD.setStyle('add_perm', 'cursor', 'default'); | 107 YUD.setStyle('add_perm', 'cursor', 'default'); |
108 }); | 108 }); |
109 MembersAutoComplete( | |
110 ${c.users_array|n}, | |
111 ${c.users_groups_array|n}, | |
112 "${_('Group')}", | |
113 "${_('members')}" | |
114 ); | |
109 }); | 115 }); |
110 | 116 |
111 YAHOO.example.FnMultipleFields = function () { | |
112 var myUsers = ${c.users_array|n}; | |
113 var myGroups = ${c.users_groups_array|n}; | |
114 | |
115 // Define a custom search function for the DataSource of users | |
116 var matchUsers = function (sQuery) { | |
117 // Case insensitive matching | |
118 var query = sQuery.toLowerCase(); | |
119 var i = 0; | |
120 var l = myUsers.length; | |
121 var matches = []; | |
122 | |
123 // Match against each name of each contact | |
124 for (; i < l; i++) { | |
125 contact = myUsers[i]; | |
126 if ((contact.fname.toLowerCase().indexOf(query) > -1) || (contact.lname.toLowerCase().indexOf(query) > -1) || (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) { | |
127 matches[matches.length] = contact; | |
128 } | |
129 } | |
130 return matches; | |
131 }; | |
132 | |
133 // Define a custom search function for the DataSource of usersGroups | |
134 var matchGroups = function (sQuery) { | |
135 // Case insensitive matching | |
136 var query = sQuery.toLowerCase(); | |
137 var i = 0; | |
138 var l = myGroups.length; | |
139 var matches = []; | |
140 | |
141 // Match against each name of each contact | |
142 for (; i < l; i++) { | |
143 matched_group = myGroups[i]; | |
144 if (matched_group.grname.toLowerCase().indexOf(query) > -1) { | |
145 matches[matches.length] = matched_group; | |
146 } | |
147 } | |
148 return matches; | |
149 }; | |
150 | |
151 //match all | |
152 var matchAll = function (sQuery) { | |
153 u = matchUsers(sQuery); | |
154 g = matchGroups(sQuery); | |
155 return u.concat(g); | |
156 }; | |
157 | |
158 // DataScheme for members | |
159 var memberDS = new YAHOO.util.FunctionDataSource(matchAll); | |
160 memberDS.responseSchema = { | |
161 fields: ["id", "fname", "lname", "nname", "grname", "grmembers"] | |
162 }; | |
163 | |
164 // DataScheme for owner | |
165 var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); | |
166 ownerDS.responseSchema = { | |
167 fields: ["id", "fname", "lname", "nname"] | |
168 }; | |
169 | |
170 // Instantiate AutoComplete for perms | |
171 var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS); | |
172 membersAC.useShadow = false; | |
173 membersAC.resultTypeList = false; | |
174 | |
175 // Instantiate AutoComplete for owner | |
176 var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS); | |
177 ownerAC.useShadow = false; | |
178 ownerAC.resultTypeList = false; | |
179 | |
180 | |
181 // Helper highlight function for the formatter | |
182 var highlightMatch = function (full, snippet, matchindex) { | |
183 return full.substring(0, matchindex) + "<span class='match'>" + full.substr(matchindex, snippet.length) + "</span>" + full.substring(matchindex + snippet.length); | |
184 }; | |
185 | |
186 // Custom formatter to highlight the matching letters | |
187 var custom_formatter = function (oResultData, sQuery, sResultMatch) { | |
188 var query = sQuery.toLowerCase(); | |
189 | |
190 if (oResultData.grname != undefined) { | |
191 var grname = oResultData.grname; | |
192 var grmembers = oResultData.grmembers; | |
193 var grnameMatchIndex = grname.toLowerCase().indexOf(query); | |
194 var grprefix = "${_('Group')}: "; | |
195 var grsuffix = " (" + grmembers + " ${_('members')})"; | |
196 | |
197 if (grnameMatchIndex > -1) { | |
198 return grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix; | |
199 } | |
200 | |
201 return grprefix + oResultData.grname + grsuffix; | |
202 } else if (oResultData.fname != undefined) { | |
203 | |
204 var fname = oResultData.fname, | |
205 lname = oResultData.lname, | |
206 nname = oResultData.nname || "", | |
207 // Guard against null value | |
208 fnameMatchIndex = fname.toLowerCase().indexOf(query), | |
209 lnameMatchIndex = lname.toLowerCase().indexOf(query), | |
210 nnameMatchIndex = nname.toLowerCase().indexOf(query), | |
211 displayfname, displaylname, displaynname; | |
212 | |
213 if (fnameMatchIndex > -1) { | |
214 displayfname = highlightMatch(fname, query, fnameMatchIndex); | |
215 } else { | |
216 displayfname = fname; | |
217 } | |
218 | |
219 if (lnameMatchIndex > -1) { | |
220 displaylname = highlightMatch(lname, query, lnameMatchIndex); | |
221 } else { | |
222 displaylname = lname; | |
223 } | |
224 | |
225 if (nnameMatchIndex > -1) { | |
226 displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")"; | |
227 } else { | |
228 displaynname = nname ? "(" + nname + ")" : ""; | |
229 } | |
230 | |
231 return displayfname + " " + displaylname + " " + displaynname; | |
232 } else { | |
233 return ''; | |
234 } | |
235 }; | |
236 membersAC.formatResult = custom_formatter; | |
237 ownerAC.formatResult = custom_formatter; | |
238 | |
239 var myHandler = function (sType, aArgs) { | |
240 | |
241 var myAC = aArgs[0]; // reference back to the AC instance | |
242 var elLI = aArgs[1]; // reference to the selected LI element | |
243 var oData = aArgs[2]; // object literal of selected item's result data | |
244 //fill the autocomplete with value | |
245 if (oData.nname != undefined) { | |
246 //users | |
247 myAC.getInputEl().value = oData.nname; | |
248 YUD.get('perm_new_member_type').value = 'user'; | |
249 } else { | |
250 //groups | |
251 myAC.getInputEl().value = oData.grname; | |
252 YUD.get('perm_new_member_type').value = 'users_group'; | |
253 } | |
254 | |
255 }; | |
256 | |
257 membersAC.itemSelectEvent.subscribe(myHandler); | |
258 if(ownerAC.itemSelectEvent){ | |
259 ownerAC.itemSelectEvent.subscribe(myHandler); | |
260 } | |
261 | |
262 return { | |
263 memberDS: memberDS, | |
264 ownerDS: ownerDS, | |
265 membersAC: membersAC, | |
266 ownerAC: ownerAC, | |
267 }; | |
268 }(); | |
269 | |
270 </script> | 117 </script> |