comparison pylons_app/templates/admin/repos/repo_edit.html @ 362:558eb7c5028f rhodecode-0.0.0.8.0

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