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