]> source.dussan.org Git - archiva.git/blob
db207ca95be516b0debe9816cb9280adc90a67cb
[archiva.git] /
1 <!--
2   ~ Licensed to the Apache Software Foundation (ASF) under one
3   ~ or more contributor license agreements.  See the NOTICE file
4   ~ distributed with this work for additional information
5   ~ regarding copyright ownership.  The ASF licenses this file
6   ~ to you under the Apache License, Version 2.0 (the
7   ~ "License"); you may not use this file except in compliance
8   ~ with the License.  You may obtain a copy of the License at
9   ~
10   ~   http://www.apache.org/licenses/LICENSE-2.0
11   ~
12   ~ Unless required by applicable law or agreed to in writing,
13   ~ software distributed under the License is distributed on an
14   ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   ~ KIND, either express or implied.  See the License for the
16   ~ specific language governing permissions and limitations
17   ~ under the License.
18 -->
19 <script id="repositoriesMain" type="text/html">
20     <div class="page-header">
21       <h2><img src="images/system-file-manager-32-32.png"/>${$.i18n.prop('administration.repositories')}</h2>
22     </div>
23
24       <ul id="repositories-tabs" class="nav nav-tabs">
25         <li class="active">
26           <a data-toggle="tab" href="#managed-repositories-content">${$.i18n.prop('managedrepositories.grid.head')}</a>
27         </li>  
28         <li>
29           <a data-toggle="tab" href="#remote-repositories-content">${$.i18n.prop('remoterepositories.grid.head')}</a>
30         </li>
31       </ul>  
32       <div class="tab-content">
33         <div id="managed-repositories-content" class="tab-pane active">
34             <ul id="managed-repositories-pills" class="nav nav-pills">
35               <li class="active" id="managed-repositories-view-li">
36                 <a data-toggle="tab" href="#managed-repositories-view" id="managed-repositories-view-a">${$.i18n.prop('managedrepositories.grid.tab.title')}</a>
37               </li>
38               <li id="managed-repository-edit-li">
39                 <a data-toggle="tab" href="#managed-repository-edit">${$.i18n.prop('add')}</a>
40               </li>
41             </ul>
42             <div id="managed-repositories-tabs-content" class="pill-content">
43               <div id="managed-repositories-view" class="pill-pane active">
44                 <div id="managed-repositories-bulk-save-btn" data-bind='template:{name:"managed-repositories-bulk-save-tmpl"}'></div>
45                 <table class="table table-striped table-bordered" id="managed-repositories-table"
46                        data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko_managed-repositoriesGrid',pageLinksId:'managed-repositoriesPagination',data:'managedRepositories'">
47                 </table>
48                 <div id="managed-repositoriesPagination"></div>
49                 <div id="managed-repositories-pom-snippet"></div>
50               </div>
51               <div id="managed-repository-edit" class="pill-pane" data-bind='template: {name:"managed-repository-edit-tmpl"}'>
52               </div>
53             </div>
54         </div>
55
56
57         <div id="remote-repositories-content" class="tab-pane">
58             <ul id="remote-repositories-pills" class="nav nav-pills">
59               <li class="active" id="remote-repositories-view-li">
60                 <a data-toggle="tab" href="#remote-repositories-view" id="remote-repositories-view-a">${$.i18n.prop('remoterepositories.grid.tab.title')}</a>
61               </li>
62               <li id="remote-repository-edit-li">
63                 <a data-toggle="tab" href="#remote-repository-edit">${$.i18n.prop('add')}</a>
64               </li>
65             </ul>
66             <div id="remote-repositories-tabs-content" class="pill-content">
67               <div id="remote-repositories-view" class="pill-pane active">
68                   <div id="remote-repositories-bulk-save-btn" data-bind='template:{name:"remote-repositories-bulk-save-tmpl"}'></div>
69                   <table class="table table-striped table-bordered" id="remote-repositories-table"
70                          data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko_remote-repositoriesGrid',pageLinksId:'remote-repositoriesPagination',data:'remoteRepositories'">
71                   </table>
72                   <div id="remote-repositoriesPagination"></div>
73               </div>
74               <div id="remote-repository-edit" class="pill-pane" data-bind='template: {name:"remote-repository-edit-tmpl"}'>
75               </div>
76             </div>
77         </div>
78       </div>
79 </script>
80
81 <script id='ko_managed-repositoriesGrid' type='text/html'>
82   <thead>
83       <tr>
84         {{each(i, columnDefinition) columns}}
85           <th title="${ columnDefinition.title }">${ columnDefinition.headerText }</th>
86         {{/each}}
87         <th>Releases</th>
88         <th>Snapshots</th>
89         <th title="${$.i18n.prop('managedrepository.scan.index')}">${$.i18n.prop('managedrepository.scan.grid.header')}</th>
90         <th>${$.i18n.prop('edit')}</th>
91         <th>${$.i18n.prop('delete')}</th>
92         <th>${$.i18n.prop('modified')}</th>
93         <th>${$.i18n.prop('description')}</th>
94         <th>${$.i18n.prop('managedrepository.pomsnippet')}</th>
95         <th title="${$.i18n.prop('managedrepository.stats')}">${$.i18n.prop('managedrepository.stats.grid.header')}</th>
96         <th title="${$.i18n.prop('managedrepository.scan.directories')}">${$.i18n.prop('managedrepository.scan.directories.grid.header')}</th>
97       </tr>
98   </thead>
99   <tbody>
100       {{each(i, row) itemsOnCurrentPage()}}
101           <tr data-bind="css:{ 'modified': row.modified()}">
102             {{each(j, columnDefinition) columns}}
103               <td>${ typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText] }</td>
104             {{/each}}
105             <td>
106             {{if row.releases() == true}}
107               <img src="images/weather-clear-22-22.png" title="${$.i18n.prop('release.included')}"/>
108             {{else}}
109               <img src="images/dialog-error-22-22.png" title="${$.i18n.prop('release.notincluded')}"/>
110             {{/if}}
111             </td>
112
113             <td>
114               {{if row.snapshots() == true}}
115                 <img src="images/weather-clear-22-22.png" title="${$.i18n.prop('snapshots.included')}"/>
116               {{else}}
117                 <img src="images/dialog-error-22-22.png" title="${$.i18n.prop('snapshots.notincluded')}"/>
118               {{/if}}
119             </td>
120             <td>
121               <a href="#" data-bind="click: function(){ scanNow(row) }">
122                 <span class="btn btn-success">
123                   <i class="icon-refresh icon-white"/>
124                 </span>
125               </a>
126             </td>
127             <td>
128               <a href="#" data-bind="click: function(){ editManagedRepository(row) }">
129                 <span class="btn btn-primary">
130                   <i class="icon-pencil icon-white"/>
131                 </span>
132               </a>
133             </td>
134             <td>
135               <a href="#" data-bind="click: function(){ removeManagedRepository(row) }">
136                 <span class="btn btn-danger">
137                   <i class="icon-trash icon-white"/>
138                 </span>
139               </a>
140             </td>
141             {{if row.modified()}}
142               <td>
143                 <a href="#" class="btn btn-warning" data-bind="click: function(){ updateManagedRepository(row) }">${$.i18n.prop('save')}</a>
144               </td>
145             {{else}}
146               <td></td>
147             {{/if}}
148             <td>
149                 {{if row.description()}}
150                 <a class="btn btn-warning btn-mini popover-doc" id="managedrepo-description-help"
151                    data-content="${row.description()}" data-title="${$.i18n.prop('description')}">
152                     <i class="icon-question-sign icon-white"></i>
153                 </a>
154                 {{/if}}
155             </td>
156             <td><a href="#" data-bind="click: function(){ showPomSnippet(row) }">${$.i18n.prop('managedrepository.pomsnippet')}</a></td>
157             <td id="managedrepository-stats-${row.id()}">
158               <img src="images/utilities-system-monitor-22-22.png" data-original-title="${$.i18n.prop('managedrepository.stats')}"
159                    data-bind="event: { mouseover: function(){ showStats(row) }, mouseout: function(){ hideStats(row) },}"
160                    id="managedrepository-stats-img-${row.id()}"/>
161             </td>
162             <td>
163               <a href="#" data-bind="click: function(){directoriesScan(row)}">
164                 <span class="btn btn-warning">
165                   <i class="icon-repeat icon-white"/>
166                 </span>
167               </a>
168
169             </td>
170           </tr>
171       {{/each}}
172   </tbody>
173
174 </script>
175
176 <script id="managed-repository-edit-tmpl" type='text/html'>
177     <form id="managed-repository-edit-form" class="well form-horizontal">
178       <fieldset id="managed-repository-edit-fieldset">
179         <div class="control-group">
180           <label class="control-label" for="id">${$.i18n.prop('id')}</label>
181           <div class="controls">
182             {{if update}}
183               <span class="uneditable-input">${$data.managedRepository.id}</span>
184             {{else}}
185               <input type="text" class="xlarge required" id="id" name="id" size="50"
186                      data-bind="value: managedRepository.id,css:{'uneditable-input': update},readonly:update"/>
187             {{/if}}
188           </div>
189         </div>
190         <div class="control-group">
191           <label class="control-label" for="name">${$.i18n.prop('name')}</label>
192           <div class="controls">
193             <input type="text" class="xlarge required" id="name" name="name" size="50"
194                    data-bind="value: managedRepository.name"/>
195           </div>
196         </div>
197         <div class="control-group">
198           <label class="control-label" for="location">${$.i18n.prop('directory')}</label>
199           <div class="controls">
200             <input type="text" class="xlarge required" id="location" name="location" size="50" data-bind="value: managedRepository.location"/>
201           </div>
202         </div>
203         <div class="control-group">
204           <label class="control-label" for="indexDirectory">${$.i18n.prop('index.directory')}</label>
205           <div class="controls">
206             <input type="text" class="xlarge" id="indexDirectory" name="indexDirectory" size="50" data-bind="value: managedRepository.indexDirectory"/>
207           </div>
208         </div>
209         <div class="control-group">
210           <label class="control-label" for="layout">${$.i18n.prop('type')}</label>
211           <div class="controls">
212             <select id="layout" data-bind="options: availableLayouts,optionsText: 'label',optionsValue:'type',value: managedRepository.layout"/>
213           </div>
214         </div>
215         <div class="control-group">
216           <label class="control-label" for="cronExpression">${$.i18n.prop('cronExpression')}</label>
217           <div class="controls">
218             <input type="text" id="cronExpression" class="required" name="cronExpression" size="40" data-bind="value: managedRepository.cronExpression"/>
219             <a class="btn btn-warning btn-mini popover-doc" id="rowcount-info-button"
220                data-original-title="${$.i18n.prop('cronExpression.help.title')}"
221                data-content="${$.i18n.prop('cronExpression.help.content')}">
222                 <i class="icon-question-sign icon-white"></i>
223             </a>
224           </div>
225         </div>
226         <div class="control-group">
227           <label class="control-label" for="daysOlder">${$.i18n.prop('daysOlder')}</label>
228           <div class="controls">
229             <input type="text" id="daysOlder" class="digits" name="daysOlder" size="5" data-bind="value: managedRepository.daysOlder"/>
230           </div>
231         </div>
232         <div class="control-group">
233           <label class="control-label" for="retentionCount">${$.i18n.prop('retentionCount')}</label>
234           <div class="controls">
235             <input type="text" id="retentionCount" name="retentionCount" size="5" data-bind="value: managedRepository.retentionCount"/>
236           </div>
237         </div>
238
239         <div class="control-group">
240           <label class="control-label" for="daysOlder">${$.i18n.prop('description')}</label>
241           <div class="controls">
242             <textarea rows="3" id="description" name="description" data-bind="value: managedRepository.description"></textarea>
243           </div>
244         </div>
245
246         <div class="control-group">
247           <label class="control-label" for="releases">${$.i18n.prop('releases')}</label>
248           <div class="controls">
249             <input type="checkbox" id="releases" name="releases" size="5" data-bind="checked: managedRepository.releases"/>
250           </div>
251         </div>
252         <div class="control-group">
253           <label class="control-label" for="snapshots">${$.i18n.prop('snapshots')}</label>
254           <div class="controls">
255             <input type="checkbox" id="snapshots" name="snapshots" size="5" data-bind="checked: managedRepository.snapshots"/>
256           </div>
257         </div>
258         <div class="control-group">
259           <label class="control-label" for="blockRedeployments">${$.i18n.prop('blockRedeployments')}</label>
260           <div class="controls">
261             <input type="checkbox" id="blockRedeployments" name="blockRedeployments" size="5" data-bind="checked: managedRepository.blockRedeployments"/>
262           </div>
263         </div>
264         <div class="control-group">
265           <label class="control-label" for="scanned">${$.i18n.prop('scanned')}</label>
266           <div class="controls">
267             <input type="checkbox" id="scanned" name="scanned" size="5" data-bind="checked: managedRepository.scanned"/>
268           </div>
269         </div>
270         <div class="control-group">
271           <label class="control-label" for="deleteReleasedSnapshots">${$.i18n.prop('deleteReleasedSnapshots')}</label>
272           <div class="controls">
273             <input type="checkbox" id="deleteReleasedSnapshots" name="deleteReleasedSnapshots" size="5"
274                    data-bind="checked: managedRepository.deleteReleasedSnapshots"/>
275           </div>
276         </div>
277         <div class="control-group">
278           <label class="control-label" for="stageRepoNeeded">${$.i18n.prop('stageRepoNeeded')}</label>
279           <div class="controls">
280             <input type="checkbox" id="stageRepoNeeded" name="stageRepoNeeded" size="5"
281                    data-bind="checked: managedRepository.stageRepoNeeded"/>
282           </div>
283         </div>
284       </fieldset>
285       <button data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
286       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
287     </form>
288 </script>
289
290 <script id="managed-repository-delete-warning-tmpl" type='text/html'>
291   <div>
292     <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
293     <div>
294       <span><strong>${$.i18n.prop('managedrepository.delete.warning.message')}</strong>.</span>
295       <div>${$.i18n.prop('id')}: ${id()}</div>
296       <div>${$.i18n.prop('name')}: ${name()}</div>
297     </div>
298     <div>
299         ${$.i18n.prop('managedrepository.delete.content')}: <input type="checkbox" id="managedrepository-deletecontent">
300     </div>
301   </div>
302 </script>
303
304 <script type="text/html" id="remote-repository-delete-modal-tmpl">
305     <div>
306       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
307     </div>
308 </script>
309
310 <script id="managed-repository-location-warning-tmpl" type='text/html'>
311   <div>
312     <span class="label label-warning">${$.i18n.prop('managedrepository.location.already.exists')}</span>
313     <div>
314       <span><strong>${$.i18n.prop('managedrepository.location.already.exists.warning.message')}</strong>.</span>
315       <div>${$.i18n.prop('id')}: ${id()}</div>
316       <div>${$.i18n.prop('name')}: ${name()}</div>
317     </div>
318   </div>
319 </script>
320 <script id="managed-repository-scan-now-modal-tmpl" type='text/html'>
321   <div>
322     ${$.i18n.prop('managedrepository.scan.all')}: <input type="checkbox" id="managed-repository-scan-now-all">
323   </div>
324 </script>
325 <script id="managed-repository-stats-tmpl" type='text/html'>
326   <div id="managedrepository-stats-${managedRepository.id()}-popover" style="display:none">
327     <div>${$.i18n.prop('managedrepository.stats.endTime')}: ${lastScanDate()}</div>
328     <div>${$.i18n.prop('managedrepository.stats.duration')}: ${duration()}ms</div>
329     <div>${$.i18n.prop('managedrepository.stats.totalFileCount')}: ${totalFileCount()}</div>
330     <div>${$.i18n.prop('managedrepository.stats.newFileCount')}: ${newFileCount()}</div>
331   </div>
332 </script>
333 <script id="pom-snippet-tmpl" type='text/html'>
334   <div class="page-header">
335     <h2>POM Snippet</h2></div>
336   </div>
337   <div><a href="#" onclick="$('#managed-repositories-pom-snippet').effect('blind')">${$.i18n.prop('hide')}</a></div>
338   <pre>${$data}</pre>
339 </script>
340
341 <!-- remote part -->
342
343 <script id='ko_remote-repositoriesGrid' type='text/html'>
344   <thead>
345       <tr>
346         {{each(i, columnDefinition) columns}}
347           <th title="${ columnDefinition.title }">${ columnDefinition.headerText }</th>
348         {{/each}}
349         <th>${$.i18n.prop('edit')}</th>
350         <th>${$.i18n.prop('delete')}</th>
351         <th>${$.i18n.prop('modified')}</th>
352         <th>${$.i18n.prop('remoterepository.downloadremoteindex')}</th>
353       </tr>
354   </thead>
355   <tbody>
356       {{each(i, row) itemsOnCurrentPage()}}
357           <tr data-bind="css:{ 'modified': row.modified()}">
358             {{each(j, columnDefinition) columns}}
359               <td>${ typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText] }</td>
360             {{/each}}
361             <td>
362               <a href="#" data-bind="click: function(){ editRemoteRepository(row) }">
363                 <span class="btn btn-primary">
364                   <i class="icon-pencil icon-white"/>
365                 </span>
366               </a>
367             </td>
368             <td>
369               <a href="#" data-bind="click: function(){ removeRemoteRepository(row) }">
370                 <span class="btn btn-danger">
371                   <i class="icon-trash icon-white"/>
372                 </span>
373               </a>
374             </td>
375             {{if row.modified()}}
376               <td>
377                 <a href="#" class="btn btn-warning" data-bind="click: function(){ updateRemoteRepository(row) }">${$.i18n.prop('save')}</a>
378               </td>
379             {{else}}
380               <td></td>
381             {{/if}}
382             <td>
383               <a href="#" data-bind="click: function(){ scheduleDownloadRemoteIndex(row) }">
384                 <span class="btn btn-success">
385                   <i class="icon-refresh icon-white"/>
386                 </span>
387               </a>
388             </td>
389           </tr>
390       {{/each}}
391   </tbody>
392
393 </script>
394
395
396 <script id="remote-repository-edit-tmpl" type='text/html'>
397     <form id="remote-repository-edit-form" class="well form-horizontal">
398       <fieldset id="remote-repository-edit-fieldset">
399         <div class="control-group">
400           <label class="control-label" for="id">${$.i18n.prop('id')}</label>
401           <div class="controls">
402             {{if update}}
403               <span class="uneditable-input">${$data.remoteRepository.id}</span>
404             {{else}}
405               <input type="text" class="xlarge required" id="id" name="id" size="50"
406                      data-bind="value: remoteRepository.id,css:{'uneditable-input': update},readonly:update"/>
407             {{/if}}
408           </div>
409         </div>
410         <div class="control-group">
411           <label class="control-label" for="name">${$.i18n.prop('name')}</label>
412           <div class="controls">
413             <input type="text" class="xlarge required" id="name" name="name" size="50"
414                    data-bind="value: remoteRepository.name"/>
415           </div>
416         </div>
417         <div class="control-group">
418           <label class="control-label" for="url">${$.i18n.prop('url')}</label>
419           <div class="controls">
420             <input type="text" class="xlarge required" id="url" name="location" size="50" data-bind="value: remoteRepository.url"/>
421           </div>
422         </div>
423         <div class="control-group">
424           <label class="control-label" for="userName">${$.i18n.prop('username')}</label>
425           <div class="controls">
426             <input type="text" class="xlarge" id="userName" name="userName" size="50" data-bind="value: remoteRepository.indexDirectory"/>
427           </div>
428         </div>
429         <div class="control-group">
430           <label class="control-label" for="password">${$.i18n.prop('password')}</label>
431            <div class="controls">
432              <input type="password" class="xlarge" id="password" name="password" size="50" data-bind="value: remoteRepository.password"/>
433           </div>
434         </div>
435         <div class="control-group">
436           <label class="control-label" for="timeout">${$.i18n.prop('timeout')}</label>
437           <div class="controls">
438             <input type="text" id="timeout" class="digits" name="daysOlder" size="5" data-bind="value: remoteRepository.timeout"/>
439           </div>
440         </div>
441
442         <div class="control-group">
443           <label class="control-label" for="layout">${$.i18n.prop('type')}</label>
444           <div class="controls">
445             <select id="layout" data-bind="options: availableLayouts,optionsText: 'label',optionsValue:'type',value: remoteRepository.layout"/>
446           </div>
447         </div>
448         <div class="control-group">
449           <label class="control-label" for="downloadRemoteIndex">${$.i18n.prop('downloadRemoteIndex')}</label>
450           <div class="controls">
451             <input type="checkbox" id="downloadRemoteIndex" name="downloadRemoteIndex" size="5" data-bind="checked: remoteRepository.downloadRemoteIndex"/>
452           </div>
453         </div>
454
455         <div class="control-group">
456           <label class="control-label" for="remoteIndexUrl">${$.i18n.prop('remoteIndexUrl')}</label>
457           <div class="controls">
458             <input type="text" id="remoteIndexUrl" name="remoteIndexUrl" size="5" data-bind="value: remoteRepository.remoteIndexUrl"/>
459           </div>
460         </div>
461         <div class="control-group">
462           <label class="control-label" for="cronExpression">${$.i18n.prop('cronExpression')}</label>
463           <div class="controls">
464             <input type="text" id="cronExpression" name="cronExpression" size="40" data-bind="value: remoteRepository.cronExpression"/>
465           </div>
466         </div>
467         <div class="control-group">
468           <label class="control-label" for="indexDirectory">${$.i18n.prop('index.directory')}</label>
469           <div class="controls">
470             <input type="text" class="xlarge" id="indexDirectory" name="indexDirectory" size="50" data-bind="value: remoteRepository.indexDirectory"/>
471           </div>
472         </div>
473         <div class="control-group">
474           <label class="control-label" for="remoteDownloadTimeout">${$.i18n.prop('remoteDownloadTimeout')}</label>
475           <div class="controls">
476             <input type="text" id="remoteDownloadTimeout" class="digits" name="remoteDownloadTimeout" size="5"
477                    data-bind="value: remoteRepository.remoteDownloadTimeout"/>
478           </div>
479         </div>
480
481         <div class="control-group">
482           <label class="control-label" for="remoteDownloadNetworkProxyId">${$.i18n.prop('remoteDownloadNetworkProxyId')}</label>
483           <div class="controls">
484             <select id="remoteDownloadNetworkProxyId" data-bind="options: networkProxies, optionsText: 'id',optionsValue:'id', value: remoteRepository.remoteDownloadNetworkProxyId, optionsCaption: 'Choose...'"></select>
485           </div>
486         </div>
487
488
489         <div class="control-group">
490           <label class="control-label" for="downloadRemoteIndexOnStartup">${$.i18n.prop('downloadRemoteIndexOnStartup')}</label>
491           <div class="controls">
492             <input type="checkbox" id="downloadRemoteIndexOnStartup" name="downloadRemoteIndexOnStartup"
493                    data-bind="checked: remoteRepository.downloadRemoteIndexOnStartup"/>
494           </div>
495         </div>
496
497       </fieldset>
498       <button data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
499       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
500     </form>
501 </script>
502
503 <script id="remote-repository-scan-modal-tmpl" type='text/html'>
504     <div>
505       ${$.i18n.prop('remoterepository.download.remote.now')}: <input type="checkbox" id="remoterepository-scan-now">
506     </div>
507     <div>
508       ${$.i18n.prop('remoterepository.download.remote.full')}: <input type="checkbox" id="remoterepository-scan-full">
509     </div>
510 </script>
511
512 <script id="managed-repositories-bulk-save-tmpl" type='text/html'>
513   {{if bulkSave()}}
514     <a data-bind="click: updateModifiedManagedRepositories" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
515   {{/if}}
516 </script>
517
518 <script id="remote-repositories-bulk-save-tmpl" type='text/html'>
519   {{if bulkSave()}}
520     <a data-bind="click: updateModifiedRemoteRepositories" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
521   {{/if}}
522 </script>
523
524 <script id="networkProxiesMain" type="text/html">
525   <div class="page-header">
526     <h2><img src="images/internet-web-browser-32-32.png"/>${$.i18n.prop('network-proxies.list')}</h2>
527   </div>
528
529   <ul id="network-proxies-view-tabs" class="nav nav-tabs">
530     <li id="network-proxies-view-tabs-li-grid">
531       <a data-toggle="tab" href="#network-proxies-view" id="network-proxies-view-tabs-a-network-proxies-grid">${$.i18n.prop('network-proxies.grid.tab.title')}</a>
532     </li>
533     <li id="network-proxies-view-tabs-li-edit">
534       <a data-toggle="tab" href="#network-proxies-edit">${$.i18n.prop('add')}</a>
535     </li>
536   </ul>
537   <div id="network-proxies-view-tabs-content" class="tab-content">
538     <div id="network-proxies-view" class="tab-pane">
539         <div id="network-proxies-bulk-save-btn" data-bind='template:{name:"network-proxies-bulk-save-tmpl"}'></div>
540         <table class="table table-striped table-bordered" id="networkProxiesTable"
541                data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko-network-proxies-grid',pageLinksId:'network-proxiesPagination'">
542         </table>
543         <div id="network-proxiesPagination"></div>
544     </div>
545     <div id="network-proxies-edit" class="tab-pane" data-bind='template: {name:"network-proxy-edit-tmpl"}'></div>
546   </div>
547
548 </script>
549
550 <script id='ko-network-proxies-grid' type='text/html'>
551     <thead>
552     <tr>
553         {{each(i, columnDefinition) columns}}
554         <th>${ columnDefinition.headerText }</th>
555         {{/each}}
556         <th>${$.i18n.prop('password')}</th>
557         <th>${$.i18n.prop('network.proxy.useNtlm')}</th>
558         <th>${$.i18n.prop('edit')}</th>
559         <th>${$.i18n.prop('delete')}</th>
560         <th>${$.i18n.prop('modified')}</th>
561     </tr>
562     </thead>
563     <tbody>
564     {{each(i, row) itemsOnCurrentPage()}}
565       <tr data-bind="css:{ 'modified': row.modified()}">
566         {{each(j, columnDefinition) columns}}
567         {{var val = (typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText])}}
568           <td>
569               ${val}
570           </td>
571         {{/each}}
572         {{if row.password()}}
573           <td>*****</td>
574         {{else}}
575           <td></td>
576         {{/if}}
577           <td>${row.useNtlm()}</td>
578           <td>
579             <a href="#" data-bind="click: function(){ editNetworkProxy(row) }">
580               <span class="btn btn-primary">
581                 <i class="icon-pencil icon-white"/>
582               </span>
583             </a>
584           </td>
585           <td>
586             <a href="#" data-bind="click: function(){ removeNetworkProxy(row) }">
587               <span class="btn btn-danger">
588                 <i class="icon-trash icon-white"/>
589               </span>
590             </a>
591           </td>
592         {{if row.modified()}}
593           <td>
594             <a href="#" data-bind="click: function(){ updateNetworkProxy(row) }" class="btn btn-warning">${$.i18n.prop('save')}</a>
595           </td>
596         {{else}}
597           <td></td>
598         {{/if}}
599
600     </tr>
601     {{/each}}
602     </tbody>
603
604 </script>
605
606 <script id="network-proxy-edit-tmpl" type='text/html'>
607     <form id="network-proxy-edit-form" class="well form-horizontal">
608       <fieldset id="network-proxy-edit-fieldset">
609         <div class="control-group">
610           <label class="control-label" for="id">${$.i18n.prop('id')}</label>
611           <div class="controls">
612             {{if update}}
613               <span class="uneditable-input">${$data.networkProxy.id}</span>
614             {{else}}
615               <input type="text" class="xlarge" id="id" name="id" size="10"
616                      data-bind="value: networkProxy.id,css:{'uneditable-input': update},readonly:update"/>
617             {{/if}}
618           </div>
619         </div>
620         <div class="control-group">
621           <label class="control-label" for="protocol">${$.i18n.prop('protocol')}</label>
622           <div class="controls">
623             <input type="text" class="xlarge required" id="protocol" name="protocol" size="8"
624                    data-bind="value: networkProxy.protocol"/>
625           </div>
626         </div>
627         <div class="control-group">
628           <label class="control-label" for="host">${$.i18n.prop('host')}</label>
629           <div class="controls">
630             <input type="text" class="xlarge required" id="host" name="host" size="15"
631                    data-bind="value: networkProxy.host"/>
632           </div>
633         </div>
634         <div class="control-group">
635           <label class="control-label" for="port">${$.i18n.prop('port')}</label>
636           <div class="controls">
637             <input type="text" class="xlarge required digits" id="port" name="port" size="6"
638                    data-bind="value: networkProxy.port"/>
639           </div>
640         </div>
641         <div class="control-group">
642           <label class="control-label" for="username">${$.i18n.prop('username')}</label>
643           <div class="controls">
644             <input type="text" class="xlarge" id="username" name="username" size="50"
645                    data-bind="value: networkProxy.username"/>
646           </div>
647         </div>
648         <div class="control-group">
649           <label class="control-label" for="password">${$.i18n.prop('password')}</label>
650           <div class="controls">
651             <input type="password" class="xlarge" id="password" name="password" size="50"
652                    data-bind="value: networkProxy.password"/>
653           </div>
654         </div>
655         <div class="control-group">
656           <label class="control-label" for="useNtlm">${$.i18n.prop('network.proxy.useNtlm')}</label>
657           <div class="controls">
658             <input type="checkbox" id="useNtlm" name="useNtlm" data-bind="checked: networkProxy.useNtlm"/>
659           </div>
660         </div>
661
662       </fieldset>
663       <button id="network-proxy-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
664       {{if networkProxy.modified()}}
665        ${("#network-proxy-btn-save").button('reset')}
666       {{/if}}
667       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
668     </form>
669 </script>
670
671 <script id="network-proxies-bulk-save-tmpl" type='text/html'>
672   {{if bulkSave()}}
673     <a data-bind="click: updateModifiedNetworkProxies" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
674   {{/if}}
675 </script>
676 <script id="network-proxy-delete-warning-tmpl" type='text/html'>
677     <div>
678       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
679     </div>
680 </script>
681
682 <script id="proxyConnectorsMain" type="text/html">
683   <div class="page-header">
684     <h2><img src="images/preferences-system-network-proxy-32-32.png"/>${$.i18n.prop('proxy-connectors.list')}</h2>
685   </div>
686
687   <ul id="proxy-connectors-view-tabs" class="nav nav-tabs">
688     <li id="proxy-connectors-view-tabs-li-grid" class="active">
689       <a data-toggle="tab" href="#proxy-connectors-view" id="proxy-connectors-view-tabs-a-network-proxies-grid">${$.i18n.prop('proxy-connectors.grid.tab.title')}</a>
690     </li>
691     <li id="proxy-connectors-view-tabs-li-edit">
692       <a data-toggle="tab" href="#proxy-connectors-edit" id="proxy-connectors-view-tabs-a-edit">${$.i18n.prop('add')}</a>
693     </li>
694     <li id="proxy-connectors-view-tabs-li-edit-order">
695       <a data-toggle="tab" href="#proxy-connectors-edit-order" id="proxy-connectors-view-tabs-a-edit-order">${$.i18n.prop('proxy-connectors.grid.tab.edit.order')}</a>
696     </li>
697   </ul>
698   <div id="proxy-connectors-view-tabs-content" class="tab-content">
699     <div id="proxy-connectors-view" class="tab-pane active">
700       <div id="proxy-connectors-bulk-save-btn" data-bind='template:{name:"proxy-connectors-bulk-save-tmpl"}'></div>
701       <table class="table table-striped table-bordered" id="proxyConnectorsTable"
702              data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko-proxy-connectors-grid',pageLinksId:'proxy-connectorsPagination'">
703       </table>
704       <div id="proxy-connectorsPagination"></div>
705     </div>
706     <div id="proxy-connectors-edit" class="tab-pane"></div>
707     <div id="proxy-connector-edit-order" class="tab-pane span8">
708       <div id="proxy-connector-edit-order-managed-repository-div" data-bind='template:{name:"proxy-connector-edit-order-managed-repository-tmpl"}'></div>
709       <div id="proxy-connector-edit-order-div"
710          data-bind="sortable: { template: 'proxy-connector-edit-order-tmpl', data: proxyConnectors,afterMove: proxyConnectorMoved}">
711       </div>
712     </div>
713   </div>
714
715 </script>
716
717 <script id='ko-proxy-connectors-grid' type='text/html'>
718     <thead>
719       <tr>
720         <th title="${$.i18n.prop('proxy-connectors.grid.managedrepo.title')}">
721           ${$.i18n.prop('proxy-connectors.grid.managedrepo.grid.header')}
722         </th>
723         <th title="${$.i18n.prop('proxy-connectors.grid.remoterepo.title')}">
724           ${$.i18n.prop('proxy-connectors.grid.remoterepo.grid.header')}
725         </th>
726         <th>${$.i18n.prop('proxy-connectors.grid.remoterepo.settings.popover.title')}</th>
727         <th>${$.i18n.prop('edit')}</th>
728         <th>${$.i18n.prop('delete')}</th>
729         <th>${$.i18n.prop('save')}</th>
730         <th>${$.i18n.prop('proxy-connectors.grid.header.order')}</th>
731       </tr>
732     </thead>
733     <tbody>
734     {{each(i, row) itemsOnCurrentPage()}}
735     <tr data-bind="css:{ 'modified': row.modified()}">
736       <td>${row.sourceRepoId()}</td>
737       <td>${row.targetRepoId()}</td>
738       <td>
739           <a class="btn btn-info btn-mini" id="proxy-connectors-grid-remoterepo-settings-edit-${row.sourceRepoId()}-${row.targetRepoId()}"
740                   data-original-title="${$.i18n.prop('proxy-connectors.grid.remoterepo.settings.popover.title')}"
741                   data-content="${buildSettings(row)}" data-bind="click: showSettings">
742               <i class="icon-question-sign icon-white"></i>
743           </a>
744
745       </td>
746       <td>
747         <a data-bind="click: function(){ editProxyConnector(row)}" href="#">
748           <span class="btn btn-primary">
749             <i class="icon-pencil icon-white"/>
750           </span>
751         </a>
752       </td>
753       <td>
754         <a href="#" data-bind="click: function(){ deleteProxyConnector(row)}">
755           <span class="btn btn-danger">
756             <i class="icon-trash icon-white"/>
757           </span>
758         </a>
759       </td>
760       <td>
761         {{if row.modified()}}
762           <a href="#" class="btn btn-warning" data-bind="click: function(){ updateProxyConnector(row)}">
763               ${$.i18n.prop('save')}
764           </a>
765         {{/if}}
766       </td>
767       <td>
768         {{if orderChangeAware(row)}}
769           <a href="#" data-bind="click: function(){ displayOrderEdit(row)}">
770             <span class="btn btn-info">
771               <i class="icon-resize-vertical icon-white"/>
772                ${$.i18n.prop('proxy-connectors.order.edit')}
773             </span>
774
775           </a>
776           <span class="badge badge-info">${row.order()}</span>
777         {{/if}}
778       </td>
779     </tr>
780     {{/each}}
781     </tbody>
782     <div id="proxy-connectors-grid-remoterepo-settings-content-${val}-${targetRepoId}" style="display:none"></div>
783 </script>
784
785 <script id='proxy-connectors-remote-settings-popover-tmpl' type='text/html'>
786   <div>
787     {{if proxyId}}
788       ${$.i18n.prop('proxy-connectors.remoterepo.settings.networkproxy')}: ${proxyConnector.proxyId}
789     {{else}}
790       ${$.i18n.prop('proxy-connectors.remoterepo.settings.networkproxy')}: ${$.i18n.prop('none')}
791     {{/if}}
792     <table class="table">
793       <thead>
794         <th colspan="2">${$.i18n.prop('proxy-connector.policies')}</th>
795       </thead>
796       <tbody>
797         {{each(i, entry) proxyConnector.policiesEntries}}
798         {{var name = proxyConnectorsViewModel.findPolicyInformationName(entry.key)}}
799         <tr>
800           <td>${name}</td>
801           <td>${entry.value}</td>
802         </tr>
803         {{/each}}
804       </tbody>
805     </table>
806   </div>
807 </script>
808
809 <script id="proxy-connector-edit-form-tmpl" type='text/html'>
810
811     <form id="proxy-connector-edit-form" class="well form-horizontal">
812       <fieldset id="remote-repository-edit-fieldset">
813         <div class="control-group">
814           <label class="control-label" for="proxyId">${$.i18n.prop('proxy-connector.network-proxy.id')}</label>
815           <div class="controls">
816             <select id="proxyId"
817                     data-bind="options: proxyConnectorsViewModel.networkProxies, optionsText: 'id',optionsValue:'id',
818                      value: proxyConnector.proxyId, optionsCaption: 'direct connection'"></select>
819           </div>
820         </div>
821         <div class="control-group">
822           <label class="control-label" for="proxyId">${$.i18n.prop('proxy-connector.managed.repository.id')}</label>
823           <div class="controls">
824               <select id="sourceRepoId"
825                       data-bind="options: proxyConnectorsViewModel.managedRepositories, optionsText: 'id',optionsValue:'id',
826                       value: proxyConnector.sourceRepoId,attr: {disabled: isUpdate() }"></select>
827           </div>
828         </div>
829         <div class="control-group">
830           <label class="control-label" for="proxyId">${$.i18n.prop('proxy-connector.remote.repository.id')}</label>
831           <div class="controls">
832             <select id="targetRepoId"
833                     data-bind="options: proxyConnectorsViewModel.remoteRepositories, optionsText: 'id',optionsValue:'id',
834                      value: proxyConnector.targetRepoId,attr: {disabled: isUpdate() }"></select>
835           </div>
836         </div>
837         <div class="row-fluid">
838           <div class="control-group span6">
839             <table class="table">
840               <thead>
841                 <th colspan="2">${$.i18n.prop('proxy-connector.policies')}</th>
842               </thead>
843               <tbody data-bind="foreach: proxyConnectorsViewModel.policyInformations()">
844                   <tr>
845                     <td data-bind="text: name"></td>
846                     <td>
847                       <select data-bind="options: getPolicyOptions(id()),value:getSelectedPolicyOption(id()),
848                               attr: { id: 'policy-'+id() },event: { change: function(){ changePolicyOption(id())},}">
849                       </select>
850                     </td>
851                   </tr>
852               </tbody>
853             </table>
854           </div>
855         </div>
856         <div class="row-fluid">
857           <div class="control-group span6">
858             <h4>${$.i18n.prop('proxy-connector.properties')}</h4>
859             <table class="table">
860               <thead>
861                 <th><input type="text" id="property-key"/></th>
862                 <th><input type="text" id="property-value"/></th>
863                 <th><a href="#" data-bind="click: function(){ addProperty() }">${$.i18n.prop('add')}</a></th>
864               </thead>
865               <tbody data-bind="foreach: proxyConnector.propertiesEntries">
866                 <tr>
867                   <td data-bind="text: key"></td>
868                   <td data-bind="text: value"></td>
869                   <td><a href="#" data-bind="click: function(){ $parent.deleteProperty(key)}">${$.i18n.prop('delete')}</a></td>
870                 </tr>
871               </tbody>
872             </table>
873           </div>
874         </div>
875         <div class="row-fluid">
876           <div class="control-group span6">
877             <h4>${$.i18n.prop('proxy-connector.blacklist')}</h4>
878             <table class="table">
879               <thead>
880                 <th><input type="text" id="blacklist-value"/></th>
881                 <th><a href="#" data-bind="click: function(){ addBlacklistPattern() }">${$.i18n.prop('add')}</a></th>
882               </thead>
883               <tbody data-bind="foreach: proxyConnector.blackListPatterns">
884                 <tr>
885                   <td data-bind="text: $data"></td>
886                   <td><a href="#" data-bind="click: function(){removeBlacklistPattern($data)}">${$.i18n.prop('delete')}</a></td>
887                 </tr>
888               </tbody>
889             </table>
890           </div>
891         </div>
892         <div class="row-fluid">
893           <div class="control-group span6">
894             <h4>${$.i18n.prop('proxy-connector.whitelist')}</h4>
895             <table class="table">
896               <thead>
897                 <th><input type="text" id="whitelist-value"/></th>
898                 <th><a href="#" data-bind="click: function(){ addWhitelistPattern() }">${$.i18n.prop('add')}</a></th>
899               </thead>
900               <tbody data-bind="foreach: proxyConnector.whiteListPatterns">
901                 <tr>
902                   <td data-bind="text: $data"></td>
903                   <td><a href="#" data-bind="click: function(){removeWhitelistPattern($data)}">${$.i18n.prop('delete')}</a></td>
904                 </tr>
905               </tbody>
906             </table>
907           </div>
908         </div>
909       </fieldset>
910
911       <button id="proxy-connector-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
912       {{if modified()}}
913        ${("#network-proxy-btn-save").button('reset')}
914       {{/if}}
915       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
916
917     </form>
918
919 </script>
920 <script id="proxy-connectors-bulk-save-tmpl" type='text/html'>
921   {{if bulkSave()}}
922     <a data-bind="click: updateModifiedProxyConnectors" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
923   {{/if}}
924 </script>
925
926 <script id="proxy-connector-edit-order-tmpl" type='text/html'>
927   <div class="well draggable-item network-proxy-remote-item">
928     {{var remoteRepository=$parent.findRemoteRepository(targetRepoId)}}
929     <div class="row-fluid">
930       <div class="span1">
931         <img src="images/system-software-update-32-32.png"/>
932           <br/>
933           <img src="images/utilities-system-monitor-22-22.png"
934                id="proxy-connectors-order-remoterepo-settings-edit-${sourceRepoId()}-${targetRepoId()}"
935                data-original-title="${$.i18n.prop('proxy-connectors.grid.remoterepo.settings.popover.title')}"
936                data-bind="event: { mouseover: function(){ displaySettings(sourceRepoId(),targetRepoId())},}">
937           <div id="proxy-connectors-order-remoterepo-settings-content-${sourceRepoId()}-${targetRepoId()}"
938                style="display:none"></div>
939       </div>
940       <div class="span6 pull-left">
941         <blockquote>
942             ${targetRepoId}
943             <br/>
944             ${remoteRepository.name()}&nbsp;(<a href="${remoteRepository.url()}" target="_blank">${remoteRepository.url()}</a>)
945         </blockquote>
946       </div>
947       <div class="span2">
948         <span class="badge badge-info">${order}</span>
949       </div>
950     </div>
951   </div>
952 </script>
953
954 <script id="proxy-connector-edit-order-managed-repository-tmpl" type="text/html">
955   <div class="well row-fluid">
956     <div class="span1">
957       <img src="images/applications-internet-32-32.png"/>
958     </div>
959     <div class="span6">
960       <blockquote>
961         ${managedRepository.id}
962         <br/>
963         ${managedRepository.name}
964       </blockquote>
965     </div>
966     <div class="span2">
967       {{if proxyConnectorsViewModel.bulkSave()}}
968         <p>
969           <a data-bind="click: function(){updateModifiedProxyConnectors()}"
970              href="#" class="btn btn-warning">${$.i18n.prop('save.all')}</a></p>
971       {{/if}}
972     </div>
973   </div>
974 </script>
975
976 <script id="proxy-connector-delete-warning-tmpl" type='text/html'>
977     <div>
978       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
979     </div>
980 </script>
981
982 <script id="repositoryGroupsMain" type="text/html">
983   <div class="page-header">
984     <h2><img src="images/applications-internet-2-32-32.png"/>${$.i18n.prop('repository.groups.list')}</h2>
985   </div>
986   <ul id="repository-groups-view-tabs" class="nav nav-tabs">
987     <li id="repository-groups-view-tabs-li-grid" class="active">
988       <a data-toggle="tab" href="#repository-groups-view" id="repository-groups-view-tabs-a-network-proxies-grid">
989         ${$.i18n.prop('repository-groups.grid.tab.title')}
990       </a>
991     </li>
992     <li id="repository-groups-view-tabs-li-edit">
993       <a data-toggle="tab" href="#repository-groups-edit" id="repository-groups-view-tabs-a-edit">${$.i18n.prop('add')}</a>
994     </li>
995
996   </ul>
997   <div id="repository-groups-view-tabs-content" class="tab-content">
998         <div id="repository-groups-view" class="tab-pane active">
999           <div id="repository-groups-table" data-bind='template:{name:"repository-groups-table-tmpl"}'>
1000           </div>
1001         </div>
1002         <div id="repository-groups-edit" class="tab-pane">
1003               <div class="row-fluid">
1004                 <div class="span5 dotted">
1005                   <div id="repository-groups-edit-div" data-bind='template:{name:"repository-group-edit-tmpl"}'></div>
1006                   <div id="repository-groups-edit-order-div" style="min-height: 80px"
1007                      data-bind="sortable: { template: 'repository-group-edit-order-tmpl',data:repositoryGroup.managedRepositories,afterMove:repositoryMoved}">
1008                   </div>
1009                 </div>
1010
1011                 <div class="span5 dotted">
1012                   <h5>${$.i18n.prop('repository.groups.available.repositories')}</h5>
1013                   <br/>
1014                   <div id="repository-groups-edit-available-repositories" style="min-height: 80px"
1015                        data-bind="sortable: { template: 'repository-group-edit-order-tmpl',data:availableRepositories,afterMove:repositoryMoved}">
1016
1017                   </div>
1018                 </div>
1019
1020               </div>
1021
1022         </div>
1023
1024   </div>
1025 </script>
1026
1027 <script id="repository-groups-table-tmpl" type="text/html">
1028   <table class="table table-striped table-bordered">
1029     <thead>
1030       <th>${$.i18n.prop('repository.groups.groups.grid.header')}</th>
1031       <th>${$.i18n.prop('repository.groups.repositories.grid.header')}</th>
1032       <th>${$.i18n.prop('edit')}</th>
1033       <th>${$.i18n.prop('delete')}</th>
1034       <th>${$.i18n.prop('save')}</th>
1035     </thead>
1036     <tbody>
1037     {{each(i, repositoryGroup) repositoryGroups}}
1038       <tr data-bind="css:{ 'modified': repositoryGroup.modified()}">
1039         <td>${repositoryGroup.id}</td>
1040         <td>
1041           <ul>
1042           {{each(j,id) repositoryGroup.repositories()}}
1043             <li>${id}</li>
1044           {{/each}}
1045           </ul>
1046         </td>
1047         <td>
1048           <a href="#" data-bind="click: function(){editRepositoryGroup(repositoryGroup)}">
1049             <span class="btn btn-primary">
1050               <i class="icon-pencil icon-white"/>
1051             </span>
1052           </a>
1053         </td>
1054         <td>
1055           <a href="#" data-bind="click: function(){deleteRepositoryGroup(repositoryGroup)}">
1056             <span class="btn btn-danger">
1057               <i class="icon-trash icon-white"/>
1058             </span>
1059           </a>
1060         </td>
1061         <td>
1062           {{if repositoryGroup.modified()}}
1063             <a href="#" class="btn btn-warning" data-bind="click: function(){saveRepositoryGroup(repositoryGroup)}">
1064               ${$.i18n.prop('save')}
1065             </a>
1066           {{/if}}
1067         </td>
1068       </tr>
1069     {{/each}}
1070     </tbody>
1071   </table>
1072 </script>
1073
1074 <script id="repository-group-edit-tmpl" type="text/html">
1075   <div class="row-fluid">
1076   {{if update}}
1077     <div class="dotted span8">
1078       <blockquote>
1079         ${repositoryGroup.id}
1080         <br/>
1081         <a href="${window.archivaRuntimeInfo.baseUrl}/repository/${repositoryGroup.id()}" target="_blank">
1082           ${window.archivaRuntimeInfo.baseUrl}/repository/${repositoryGroup.id()}
1083         </a>
1084       </blockquote>
1085     </div>
1086   {{else}}
1087     <div class="dotted span8">
1088       <form id="repository-group-edit-form" class="well">
1089         <fieldset id="repository-group-edit-fieldset">
1090           <div class="control-group">
1091             <label class="control-label" for="id">${$.i18n.prop('id')}</label>
1092             <div class="controls">
1093               <input type="text" class="xlarge required" id="id" name="id" size="15"
1094                    data-bind="value: repositoryGroup.id,css:{'uneditable-input': update},readonly:update"/>
1095             </div>
1096           </div>
1097         </fieldset>
1098       </form>
1099     </div>
1100   {{/if}}
1101   {{if repositoryGroup.modified()}}
1102     <div class="span3">
1103       <a href="#" class="btn btn-warning" data-bind="click: function(){saveRepositoryGroup(repositoryGroup)}">${$.i18n.prop('save')}</a>
1104     </div>
1105     <br/>
1106   {{/if}}
1107   </div>
1108 </script>
1109
1110 <script id="repository-group-edit-order-tmpl" type="text/html">
1111   <div class="well draggable-item">
1112     <blockquote>
1113       ${$data.id()}
1114       <br/>
1115       ${$data.name()}
1116       <br/>
1117       <a href="${window.archivaRuntimeInfo.baseUrl}/repository/${$data.id()}" target="_blank">
1118         ${window.archivaRuntimeInfo.baseUrl}/repository/${$data.id()}
1119       </a>
1120       <br/>
1121     </blockquote>
1122
1123   </div>
1124 </script>
1125
1126 <script id="repository-group-delete-warning-tmpl" type='text/html'>
1127     <div>
1128       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
1129     </div>
1130 </script>