Mercurial > kallithea
comparison pylons_app/templates/settings/repo_settings.html @ 320:05b212954275
Implemented owner settings, as separete posibility to edit repositry by non administrative owner of repository
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 30 Jun 2010 15:35:10 +0200 |
parents | |
children | 558eb7c5028f |
comparison
equal
deleted
inserted
replaced
319:c12f4d19c950 | 320:05b212954275 |
---|---|
1 ## -*- coding: utf-8 -*- | |
2 <%inherit file="/base/base.html"/> | |
3 | |
4 <%def name="title()"> | |
5 ${_('Repository settings')} | |
6 </%def> | |
7 <%def name="breadcrumbs()"> | |
8 ${h.link_to(u'Home',h.url('/'))} | |
9 / | |
10 ${h.link_to(c.repo_name,h.url('shortlog_home',repo_name=c.repo_name))} | |
11 / | |
12 ${_('settings')} | |
13 </%def> | |
14 <%def name="page_nav()"> | |
15 ${self.menu('settings')} | |
16 </%def> | |
17 <%def name="main()"> | |
18 <h2 class="no-link no-border">${_('Settings')}</h2> | |
19 <div> | |
20 ${h.form(url('repo_settings_update', repo_name=c.repo_info.repo_name),method='put')} | |
21 <table> | |
22 <tr> | |
23 <td>${_('Name')}</td> | |
24 <td>${h.text('repo_name',size="28")}</td> | |
25 <td>${self.get_form_error('repo_name')}</td> | |
26 </tr> | |
27 <tr> | |
28 <td>${_('Description')}</td> | |
29 <td>${h.textarea('description',cols=32,rows=5)}</td> | |
30 <td>${self.get_form_error('description')}</td> | |
31 </tr> | |
32 <tr> | |
33 <td>${_('Private')}</td> | |
34 <td>${h.checkbox('private',value="True")}</td> | |
35 <td>${self.get_form_error('private')}</td> | |
36 </tr> | |
37 <tr> | |
38 <td>${_('Permissions')}</td> | |
39 <td> | |
40 <table> | |
41 <tr> | |
42 <td>${_('none')}</td> | |
43 <td>${_('read')}</td> | |
44 <td>${_('write')}</td> | |
45 <td>${_('admin')}</td> | |
46 <td>${_('user')}</td> | |
47 </tr> | |
48 | |
49 %for r2p in c.repo_info.repo2perm: | |
50 %if r2p.user.username =='default' and c.repo_info.private: | |
51 <tr> | |
52 <td colspan="4"> | |
53 <span style="font-size: 0.8em">${_('disabled for private repository')}</span></td> | |
54 <td>${r2p.user.username}</td> | |
55 </tr> | |
56 %else: | |
57 <tr id=${id(r2p.user.username)}> | |
58 <td>${h.radio('perm_%s' % r2p.user.username,'repository.none')}</td> | |
59 <td>${h.radio('perm_%s' % r2p.user.username,'repository.read')}</td> | |
60 <td>${h.radio('perm_%s' % r2p.user.username,'repository.write')}</td> | |
61 <td>${h.radio('perm_%s' % r2p.user.username,'repository.admin')}</td> | |
62 <td>${r2p.user.username}</td> | |
63 <td> | |
64 %if r2p.user.username !='default': | |
65 <span class="delete_icon action_button" onclick="ajaxAction(${r2p.user.user_id},${id(r2p.user.username)})"> | |
66 <script type="text/javascript"> | |
67 function ajaxAction(user_id,field_id){ | |
68 var sUrl = "${h.url('delete_repo_user',repo_name=c.repo_name)}"; | |
69 var callback = { success:function(o){ | |
70 YAHOO.util.Dom.get(String(field_id)).innerHTML = '<td colspan="6"></td>'; | |
71 }}; | |
72 var postData = '_method=delete&user_id='+user_id; | |
73 var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); | |
74 }; | |
75 </script> | |
76 </span> | |
77 %endif | |
78 </td> | |
79 </tr> | |
80 %endif | |
81 %endfor | |
82 <% | |
83 if not hasattr(c,'form_errors'): | |
84 d = 'display:none;' | |
85 else: | |
86 d='' | |
87 %> | |
88 | |
89 <tr id="add_perm_input" style="${d}"> | |
90 <td>${h.radio('perm_new_user','repository.none')}</td> | |
91 <td>${h.radio('perm_new_user','repository.read')}</td> | |
92 <td>${h.radio('perm_new_user','repository.write')}</td> | |
93 <td>${h.radio('perm_new_user','repository.admin')}</td> | |
94 <td class='ac'> | |
95 <div id="perm_ac"> | |
96 ${h.text('perm_new_user_name',class_='yui-ac-input')} | |
97 <div id="perm_container"></div> | |
98 </div> | |
99 </td> | |
100 <td>${self.get_form_error('perm_new_user_name')}</td> | |
101 </tr> | |
102 <tr> | |
103 <td colspan="4"> | |
104 <span id="add_perm" class="add_icon" style="cursor: pointer;"> | |
105 ${_('Add another user')} | |
106 </span> | |
107 </td> | |
108 </tr> | |
109 </table> | |
110 </td> | |
111 | |
112 </tr> | |
113 <tr> | |
114 <td></td> | |
115 <td>${h.submit('update','update')}</td> | |
116 </tr> | |
117 | |
118 </table> | |
119 ${h.end_form()} | |
120 <script type="text/javascript"> | |
121 YAHOO.util.Event.onDOMReady(function(){ | |
122 var D = YAHOO.util.Dom; | |
123 YAHOO.util.Event.addListener('add_perm','click',function(){ | |
124 D.setStyle('add_perm_input','display',''); | |
125 D.setStyle('add_perm','opacity','0.6'); | |
126 D.setStyle('add_perm','cursor','default'); | |
127 }); | |
128 }); | |
129 </script> | |
130 <script type="text/javascript"> | |
131 YAHOO.example.FnMultipleFields = function(){ | |
132 var myContacts = ${c.users_array|n} | |
133 | |
134 // Define a custom search function for the DataSource | |
135 var matchNames = function(sQuery) { | |
136 // Case insensitive matching | |
137 var query = sQuery.toLowerCase(), | |
138 contact, | |
139 i=0, | |
140 l=myContacts.length, | |
141 matches = []; | |
142 | |
143 // Match against each name of each contact | |
144 for(; i<l; i++) { | |
145 contact = myContacts[i]; | |
146 if((contact.fname.toLowerCase().indexOf(query) > -1) || | |
147 (contact.lname.toLowerCase().indexOf(query) > -1) || | |
148 (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) { | |
149 matches[matches.length] = contact; | |
150 } | |
151 } | |
152 | |
153 return matches; | |
154 }; | |
155 | |
156 // Use a FunctionDataSource | |
157 var oDS = new YAHOO.util.FunctionDataSource(matchNames); | |
158 oDS.responseSchema = { | |
159 fields: ["id", "fname", "lname", "nname"] | |
160 } | |
161 | |
162 // Instantiate AutoComplete for perms | |
163 var oAC_perms = new YAHOO.widget.AutoComplete("perm_new_user_name", "perm_container", oDS); | |
164 oAC_perms.useShadow = false; | |
165 oAC_perms.resultTypeList = false; | |
166 | |
167 // Instantiate AutoComplete for owner | |
168 var oAC_owner = new YAHOO.widget.AutoComplete("user", "owner_container", oDS); | |
169 oAC_owner.useShadow = false; | |
170 oAC_owner.resultTypeList = false; | |
171 | |
172 | |
173 // Custom formatter to highlight the matching letters | |
174 var custom_formatter = function(oResultData, sQuery, sResultMatch) { | |
175 var query = sQuery.toLowerCase(), | |
176 fname = oResultData.fname, | |
177 lname = oResultData.lname, | |
178 nname = oResultData.nname || "", // Guard against null value | |
179 query = sQuery.toLowerCase(), | |
180 fnameMatchIndex = fname.toLowerCase().indexOf(query), | |
181 lnameMatchIndex = lname.toLowerCase().indexOf(query), | |
182 nnameMatchIndex = nname.toLowerCase().indexOf(query), | |
183 displayfname, displaylname, displaynname; | |
184 | |
185 if(fnameMatchIndex > -1) { | |
186 displayfname = highlightMatch(fname, query, fnameMatchIndex); | |
187 } | |
188 else { | |
189 displayfname = fname; | |
190 } | |
191 | |
192 if(lnameMatchIndex > -1) { | |
193 displaylname = highlightMatch(lname, query, lnameMatchIndex); | |
194 } | |
195 else { | |
196 displaylname = lname; | |
197 } | |
198 | |
199 if(nnameMatchIndex > -1) { | |
200 displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")"; | |
201 } | |
202 else { | |
203 displaynname = nname ? "(" + nname + ")" : ""; | |
204 } | |
205 | |
206 return displayfname + " " + displaylname + " " + displaynname; | |
207 | |
208 }; | |
209 oAC_perms.formatResult = custom_formatter; | |
210 oAC_owner.formatResult = custom_formatter; | |
211 | |
212 // Helper function for the formatter | |
213 var highlightMatch = function(full, snippet, matchindex) { | |
214 return full.substring(0, matchindex) + | |
215 "<span class='match'>" + | |
216 full.substr(matchindex, snippet.length) + | |
217 "</span>" + | |
218 full.substring(matchindex + snippet.length); | |
219 }; | |
220 | |
221 var myHandler = function(sType, aArgs) { | |
222 var myAC = aArgs[0]; // reference back to the AC instance | |
223 var elLI = aArgs[1]; // reference to the selected LI element | |
224 var oData = aArgs[2]; // object literal of selected item's result data | |
225 myAC.getInputEl().value = oData.nname; | |
226 }; | |
227 | |
228 oAC_perms.itemSelectEvent.subscribe(myHandler); | |
229 oAC_owner.itemSelectEvent.subscribe(myHandler); | |
230 | |
231 return { | |
232 oDS: oDS, | |
233 oAC_perms: oAC_perms, | |
234 oAC_owner: oAC_owner, | |
235 }; | |
236 }(); | |
237 | |
238 </script> | |
239 </div> | |
240 </%def> |