]> source.dussan.org Git - archiva.git/blob
01e4896698a86d8a24f00280cddd2d7d44a6af86
[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('managedrepository.actions')}</th>
91         <th>${$.i18n.prop('edit')}</th>
92         <th>${$.i18n.prop('delete')}</th>
93         <th>${$.i18n.prop('modified')}</th>
94         <!--th>${$.i18n.prop('description')}</th-->
95         <th>${$.i18n.prop('managed.repository.rss.header')}</th>
96         <th title="${$.i18n.prop('managedrepository.stats')}">${$.i18n.prop('managedrepository.stats.grid.header')}</th>
97         <!--th title="${$.i18n.prop('managedrepository.scan.directories')}">${$.i18n.prop('managedrepository.scan.directories.grid.header')}</th-->
98       </tr>
99   </thead>
100   <tbody>
101       {{each(i, row) itemsOnCurrentPage()}}
102           <tr data-bind="css:{ 'modified': row.modified()}">
103             {{each(j, columnDefinition) columns}}
104               <td>${ typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText] }</td>
105             {{/each}}
106             <td>
107             {{if row.releases() == true}}
108               <img src="images/weather-clear-22-22.png" title="${$.i18n.prop('release.included')}"/>
109             {{else}}
110               <img src="images/dialog-error-22-22.png" title="${$.i18n.prop('release.notincluded')}"/>
111             {{/if}}
112             </td>
113
114             <td>
115               {{if row.snapshots() == true}}
116                 <img src="images/weather-clear-22-22.png" title="${$.i18n.prop('snapshots.included')}"/>
117               {{else}}
118                 <img src="images/dialog-error-22-22.png" title="${$.i18n.prop('snapshots.notincluded')}"/>
119               {{/if}}
120             </td>
121               <td>
122                 <div class="btn-group">
123                   <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">Actions<span class="caret"></span> </a>
124                   <ul class="dropdown-menu">
125                     <li>
126                         <a href="#" data-bind="click: function(){ scanNow(row) }">
127                           <span class="btn btn-success">
128                             <i class="icon-refresh icon-white"></i>
129                           </span>
130                           ${$.i18n.prop('managedrepository.scan.grid.header')}
131                         </a>
132                     </li>
133                     <li>
134                         <a href="#" data-bind="click: function(){directoriesScan(row)}">
135                           <span class="btn btn-warning">
136                             <i class="icon-wrench icon-white"></i>
137                           </span>
138                           ${$.i18n.prop('managedrepository.scan.directories.grid.header')}
139                         </a>
140                     </li>
141                     <li>
142                         <a href="#" data-bind="click: function(){ showPomSnippet(row) }">
143                             <span class="btn btn-info">
144                               <i class="icon-user icon-white"></i>
145                             </span>
146                             ${$.i18n.prop('managedrepository.pomsnippet')}
147                         </a>
148                     </li>
149                     <li>
150                       {{if row.stageRepoNeeded()}}
151                         stage
152                       {{/if}}
153                     </li>
154                     <li>
155                         <!-- todo check archiva-merge-repository operation -->
156                         <a href="#" data-bind="click: function(){ mergeRepo(row) }">
157                             <span class="btn btn-info">
158                               <i class="icon-share icon-white"></i>
159                             </span>
160                             ${$.i18n.prop('managedrepository.mergerepo')}
161                         </a>
162                     </li>
163                   </ul>
164                 </div>
165               </td>
166             <td>
167               <a href="#" data-bind="click: function(){ editManagedRepository(row) }">
168                 <span class="btn btn-primary">
169                   <i class="icon-pencil icon-white"/>
170                 </span>
171               </a>
172             </td>
173             <td>
174               <a href="#" data-bind="click: function(){ removeManagedRepository(row) }">
175                 <span class="btn btn-danger">
176                   <i class="icon-trash icon-white"/>
177                 </span>
178               </a>
179             </td>
180             {{if row.modified()}}
181               <td>
182                 <a href="#" class="btn btn-warning" data-bind="click: function(){ updateManagedRepository(row) }">${$.i18n.prop('save')}</a>
183               </td>
184             {{else}}
185               <td></td>
186             {{/if}}
187             <td>
188                <a href="${row.feedsUrl}"><img src="images/atom.gif" alt="" title="${$.i18n.prop('managedpository.feeds')} ${row.name()}"/></a>
189             </td>
190             <!--td>
191                 {{if row.description()}}
192                 <a class="btn btn-warning btn-mini popover-doc" id="managedrepo-description-help"
193                    data-content="${row.description()}" data-title="${$.i18n.prop('description')}"
194                    data-placement="left">
195                     <i class="icon-question-sign icon-white"></i>
196                 </a>
197                 {{/if}}
198             </td-->
199             <td id="managedrepository-stats-${row.id()}">
200               <img src="images/utilities-system-monitor-22-22.png" data-original-title="${$.i18n.prop('managedrepository.stats')}"
201                    data-bind="event: { mouseover: function(){ showStats(row) }, mouseout: function(){ hideStats(row) },}"
202                    id="managedrepository-stats-img-${row.id()}"/>
203             </td>
204           </tr>
205       {{/each}}
206   </tbody>
207
208 </script>
209
210 <script id="managed-repository-edit-tmpl" type='text/html'>
211     <form id="managed-repository-edit-form" class="well form-horizontal">
212       <fieldset id="managed-repository-edit-fieldset">
213         <div class="control-group">
214           <label class="control-label" for="id">${$.i18n.prop('id')}</label>
215           <div class="controls">
216             {{if update}}
217               <span class="uneditable-input">${$data.managedRepository.id}</span>
218             {{else}}
219               <input type="text" class="input-xlarge required" id="id" name="id" size="50"
220                      data-bind="value: managedRepository.id,css:{'uneditable-input': update},readonly:update"/>
221             {{/if}}
222           </div>
223         </div>
224         <div class="control-group">
225           <label class="control-label" for="name">${$.i18n.prop('name')}</label>
226           <div class="controls">
227             <input type="text" class="input-xlarge required" id="name" name="name" size="50"
228                    data-bind="value: managedRepository.name"/>
229           </div>
230         </div>
231         <div class="control-group">
232           <label class="control-label" for="location">${$.i18n.prop('directory')}</label>
233           <div class="controls">
234             <input type="text" class="input-xxlarge required" id="location" name="location" size="50" data-bind="value: managedRepository.location"/>
235           </div>
236         </div>
237         <div class="control-group">
238           <label class="control-label" for="indexDirectory">${$.i18n.prop('index.directory')}</label>
239           <div class="controls">
240             <input type="text" class="input-xxlarge" id="indexDirectory" name="indexDirectory" size="50" data-bind="value: managedRepository.indexDirectory"/>
241           </div>
242         </div>
243         <div class="control-group">
244           <label class="control-label" for="layout">${$.i18n.prop('type')}</label>
245           <div class="controls">
246             <select id="layout" data-bind="options: availableLayouts,optionsText: 'label',optionsValue:'type',value: managedRepository.layout"/>
247           </div>
248         </div>
249         <div class="control-group">
250           <label class="control-label" for="cronExpression">${$.i18n.prop('cronExpression')}</label>
251           <div class="controls">
252             <input type="text" id="cronExpression" class="required" name="cronExpression" size="40" data-bind="value: managedRepository.cronExpression"/>
253             <a class="btn btn-warning btn-mini popover-doc" id="cronExpression-info-button"
254                data-original-title="${$.i18n.prop('cronExpression.help.title')}"
255                data-content="${$.i18n.prop('cronExpression.help.content')}">
256                 <i class="icon-question-sign icon-white"></i>
257             </a>
258           </div>
259         </div>
260         <div class="control-group">
261           <label class="control-label" for="daysOlder">${$.i18n.prop('daysOlder')}</label>
262           <div class="controls">
263             <input type="text" id="daysOlder" class="digits" name="daysOlder" size="5" data-bind="value: managedRepository.daysOlder"/>
264           </div>
265         </div>
266         <div class="control-group">
267           <label class="control-label" for="retentionCount">${$.i18n.prop('retentionCount')}</label>
268           <div class="controls">
269             <input type="text" id="retentionCount" name="retentionCount" size="5" data-bind="value: managedRepository.retentionCount"/>
270           </div>
271         </div>
272         <div class="control-group">
273           <label class="control-label" for="daysOlder">${$.i18n.prop('description')}</label>
274           <div class="controls">
275             <textarea rows="3" id="description" name="description" data-bind="value: managedRepository.description"></textarea>
276           </div>
277         </div>
278         <div class="control-group">
279           <label class="control-label" for="releases">${$.i18n.prop('releases')}</label>
280           <div class="controls">
281             <input type="checkbox" id="releases" name="releases" size="5" data-bind="checked: managedRepository.releases"/>
282           </div>
283         </div>
284         <div class="control-group">
285           <label class="control-label" for="snapshots">${$.i18n.prop('snapshots')}</label>
286           <div class="controls">
287             <input type="checkbox" id="snapshots" name="snapshots" size="5" data-bind="checked: managedRepository.snapshots"/>
288           </div>
289         </div>
290         <div class="control-group">
291           <label class="control-label" for="blockRedeployments">${$.i18n.prop('blockRedeployments')}</label>
292           <div class="controls">
293             <input type="checkbox" id="blockRedeployments" name="blockRedeployments" size="5" data-bind="checked: managedRepository.blockRedeployments"/>
294           </div>
295         </div>
296         <div class="control-group">
297           <label class="control-label" for="scanned">${$.i18n.prop('scanned')}</label>
298           <div class="controls">
299             <input type="checkbox" id="scanned" name="scanned" size="5" data-bind="checked: managedRepository.scanned"/>
300           </div>
301         </div>
302         <div class="control-group">
303           <label class="control-label" for="deleteReleasedSnapshots">${$.i18n.prop('deleteReleasedSnapshots')}</label>
304           <div class="controls">
305             <input type="checkbox" id="deleteReleasedSnapshots" name="deleteReleasedSnapshots" size="5"
306                    data-bind="checked: managedRepository.deleteReleasedSnapshots"/>
307           </div>
308         </div>
309         <div class="control-group">
310           <label class="control-label" for="stageRepoNeeded">${$.i18n.prop('stageRepoNeeded')}</label>
311           <div class="controls">
312             <input type="checkbox" id="stageRepoNeeded" name="stageRepoNeeded" size="5"
313                    data-bind="checked: managedRepository.stageRepoNeeded"/>
314           </div>
315         </div>
316         <div class="control-group">
317           <label class="control-label" for="skipPackedIndexCreation">${$.i18n.prop('skipPackedIndexCreation')}</label>
318           <div class="controls">
319             <input type="checkbox" id="skipPackedIndexCreation" name="skipPackedIndexCreation" size="5"
320                    data-bind="checked: managedRepository.skipPackedIndexCreation"/>
321             <a class="btn btn-warning btn-mini popover-doc" id="skipPackedIndexCreation-info-button"
322                data-original-title="${$.i18n.prop('skipPackedIndexCreation.help.title')}"
323                data-content="${$.i18n.prop('skipPackedIndexCreation.help.content')}">
324                 <i class="icon-question-sign icon-white"></i>
325             </a>
326           </div>
327         </div>
328
329
330
331       </fieldset>
332       <button data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
333       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
334     </form>
335 </script>
336
337 <script id="managed-repository-delete-warning-tmpl" type='text/html'>
338   <div>
339     <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
340     <div>
341       <span><strong>${$.i18n.prop('managedrepository.delete.warning.message')}</strong>.</span>
342       <div>${$.i18n.prop('id')}: ${id()}</div>
343       <div>${$.i18n.prop('name')}: ${name()}</div>
344     </div>
345     <div>
346         ${$.i18n.prop('managedrepository.delete.content')}: <input type="checkbox" id="managedrepository-deletecontent">
347     </div>
348   </div>
349 </script>
350
351 <script type="text/html" id="remote-repository-delete-modal-tmpl">
352     <div>
353       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
354     </div>
355 </script>
356
357 <script id="managed-repository-location-warning-tmpl" type='text/html'>
358   <div>
359     <span class="label label-warning">${$.i18n.prop('managedrepository.location.already.exists')}</span>
360     <div>
361       <span><strong>${$.i18n.prop('managedrepository.location.already.exists.warning.message')}</strong>.</span>
362       <div>${$.i18n.prop('id')}: ${id()}</div>
363       <div>${$.i18n.prop('name')}: ${name()}</div>
364     </div>
365   </div>
366 </script>
367 <script id="managed-repository-scan-now-modal-tmpl" type='text/html'>
368   <div>
369     ${$.i18n.prop('managedrepository.scan.all')}: <input type="checkbox" id="managed-repository-scan-now-all">
370   </div>
371 </script>
372 <script id="managed-repository-stats-tmpl" type='text/html'>
373   <div id="managedrepository-stats-${managedRepository.id()}-popover" style="display:none">
374     <div>${$.i18n.prop('managedrepository.stats.endTime')}: ${lastScanDate()}</div>
375     <div>${$.i18n.prop('managedrepository.stats.duration')}: ${duration()}ms</div>
376     <div>${$.i18n.prop('managedrepository.stats.totalFileCount')}: ${totalFileCount()}</div>
377     <div>${$.i18n.prop('managedrepository.stats.newFileCount')}: ${newFileCount()}</div>
378   </div>
379 </script>
380 <script id="pom-snippet-tmpl" type='text/html'>
381   <div class="page-header">
382     <h2>POM Snippet</h2></div>
383   </div>
384   <div><a onclick="$('#managed-repositories-pom-snippet').effect('blind')">${$.i18n.prop('hide')}</a></div>
385   <pre>${$data}</pre>
386 </script>
387
388 <!-- remote part -->
389
390 <script id='ko_remote-repositoriesGrid' type='text/html'>
391   <thead>
392       <tr>
393         {{each(i, columnDefinition) columns}}
394           <th title="${ columnDefinition.title }">${ columnDefinition.headerText }</th>
395         {{/each}}
396         <th>${$.i18n.prop('edit')}</th>
397         <th>${$.i18n.prop('delete')}</th>
398         <th>${$.i18n.prop('modified')}</th>
399         <th>${$.i18n.prop('description')}</th>
400         <th>${$.i18n.prop('remoterepository.downloadremoteindex')}</th>
401       </tr>
402   </thead>
403   <tbody>
404       {{each(i, row) itemsOnCurrentPage()}}
405           <tr data-bind="css:{ 'modified': row.modified()}">
406             {{each(j, columnDefinition) columns}}
407               <td>${ typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText] }</td>
408             {{/each}}
409             <td>
410               <a href="#" data-bind="click: function(){ editRemoteRepository(row) }">
411                 <span class="btn btn-primary">
412                   <i class="icon-pencil icon-white"/>
413                 </span>
414               </a>
415             </td>
416             <td>
417               <a href="#" data-bind="click: function(){ removeRemoteRepository(row) }">
418                 <span class="btn btn-danger">
419                   <i class="icon-trash icon-white"/>
420                 </span>
421               </a>
422             </td>
423             {{if row.modified()}}
424               <td>
425                 <a href="#" class="btn btn-warning" data-bind="click: function(){ updateRemoteRepository(row) }">${$.i18n.prop('save')}</a>
426               </td>
427             {{else}}
428               <td></td>
429             {{/if}}
430             <td>
431                 {{if row.description()}}
432                 <a class="btn btn-warning btn-mini popover-doc" id="remoterepo-description-help"
433                    data-content="${row.description()}" data-title="${$.i18n.prop('description')}">
434                     <i class="icon-question-sign icon-white"></i>
435                 </a>
436                 {{/if}}
437             </td>
438             <td>
439               <a href="#" data-bind="click: function(){ scheduleDownloadRemoteIndex(row) }">
440                 <span class="btn btn-success">
441                   <i class="icon-refresh icon-white"/>
442                 </span>
443               </a>
444             </td>
445           </tr>
446       {{/each}}
447   </tbody>
448
449 </script>
450
451
452 <script id="remote-repository-edit-tmpl" type='text/html'>
453     <form id="remote-repository-edit-form" class="well form-horizontal">
454       <fieldset id="remote-repository-edit-fieldset">
455         <div class="control-group">
456           <label class="control-label" for="id">${$.i18n.prop('id')}</label>
457           <div class="controls">
458             {{if update}}
459               <span class="uneditable-input">${$data.remoteRepository.id}</span>
460             {{else}}
461               <input type="text" class="input-xlarge required" id="id" name="id" size="50"
462                      data-bind="value: remoteRepository.id,css:{'uneditable-input': update},readonly:update"/>
463             {{/if}}
464           </div>
465         </div>
466         <div class="control-group">
467           <label class="control-label" for="name">${$.i18n.prop('name')}</label>
468           <div class="controls">
469             <input type="text" class="input-xlarge required" id="name" name="name" size="50"
470                    data-bind="value: remoteRepository.name"/>
471           </div>
472         </div>
473         <div class="control-group">
474           <label class="control-label" for="url">${$.i18n.prop('url')}</label>
475           <div class="controls">
476             <input type="text" class="input-xxlarge required" id="url" name="location" size="50" data-bind="value: remoteRepository.url"/>
477           </div>
478         </div>
479         <div class="control-group">
480           <label class="control-label" for="userName">${$.i18n.prop('username')}</label>
481           <div class="controls">
482             <input type="text" class="input-xlarge" id="userName" name="userName" size="50" data-bind="value: remoteRepository.indexDirectory"/>
483           </div>
484         </div>
485         <div class="control-group">
486           <label class="control-label" for="password">${$.i18n.prop('password')}</label>
487            <div class="controls">
488              <input type="password" class="input-xlarge" id="password" name="password" size="50" data-bind="value: remoteRepository.password"/>
489           </div>
490         </div>
491         <div class="control-group">
492           <label class="control-label" for="timeout">${$.i18n.prop('timeout')}</label>
493           <div class="controls">
494             <input type="text" id="timeout" class="digits" name="daysOlder" size="5" data-bind="value: remoteRepository.timeout"/>
495           </div>
496         </div>
497
498         <div class="control-group">
499           <label class="control-label" for="layout">${$.i18n.prop('type')}</label>
500           <div class="controls">
501             <select id="layout" data-bind="options: availableLayouts,optionsText: 'label',optionsValue:'type',value: remoteRepository.layout"/>
502           </div>
503         </div>
504         <div class="control-group">
505           <label class="control-label" for="downloadRemoteIndex">${$.i18n.prop('downloadRemoteIndex')}</label>
506           <div class="controls">
507             <input type="checkbox" id="downloadRemoteIndex" name="downloadRemoteIndex" size="5" data-bind="checked: remoteRepository.downloadRemoteIndex"/>
508           </div>
509         </div>
510
511         <div class="control-group">
512           <label class="control-label" for="remoteIndexUrl">${$.i18n.prop('remoteIndexUrl')}</label>
513           <div class="controls">
514             <input type="text" class="input-xxlarge" id="remoteIndexUrl" name="remoteIndexUrl" size="5" data-bind="value: remoteRepository.remoteIndexUrl"/>
515           </div>
516         </div>
517         <div class="control-group">
518           <label class="control-label" for="cronExpression">${$.i18n.prop('cronExpression')}</label>
519           <div class="controls">
520             <input type="text" id="cronExpression" name="cronExpression" size="40" data-bind="value: remoteRepository.cronExpression"/>
521             <a class="btn btn-warning btn-mini popover-doc" id="cronExpression-info-button"
522                data-original-title="${$.i18n.prop('cronExpression.help.title')}"
523                data-content="${$.i18n.prop('cronExpression.help.content')}">
524                 <i class="icon-question-sign icon-white"></i>
525             </a>
526           </div>
527         </div>
528         <div class="control-group">
529           <label class="control-label" for="indexDirectory">${$.i18n.prop('index.directory')}</label>
530           <div class="controls">
531             <input type="text" class="input-xlarge" id="indexDirectory" name="indexDirectory" size="50" data-bind="value: remoteRepository.indexDirectory"/>
532           </div>
533         </div>
534         <div class="control-group">
535           <label class="control-label" for="remoteDownloadTimeout">${$.i18n.prop('remoteDownloadTimeout')}</label>
536           <div class="controls">
537             <input type="text" id="remoteDownloadTimeout" class="digits" name="remoteDownloadTimeout" size="5"
538                    data-bind="value: remoteRepository.remoteDownloadTimeout"/>
539           </div>
540         </div>
541
542         <div class="control-group">
543           <label class="control-label" for="remoteDownloadNetworkProxyId">${$.i18n.prop('remoteDownloadNetworkProxyId')}</label>
544           <div class="controls">
545             <select id="remoteDownloadNetworkProxyId" data-bind="options: networkProxies, optionsText: 'id',optionsValue:'id', value: remoteRepository.remoteDownloadNetworkProxyId, optionsCaption: 'Choose...'"></select>
546           </div>
547         </div>
548
549         <div class="control-group">
550           <label class="control-label" for="downloadRemoteIndexOnStartup">${$.i18n.prop('downloadRemoteIndexOnStartup')}</label>
551           <div class="controls">
552             <input type="checkbox" id="downloadRemoteIndexOnStartup" name="downloadRemoteIndexOnStartup"
553                    data-bind="checked: remoteRepository.downloadRemoteIndexOnStartup"/>
554           </div>
555         </div>
556
557         <div class="control-group">
558           <label class="control-label" for="daysOlder">${$.i18n.prop('description')}</label>
559           <div class="controls">
560             <textarea rows="3" id="description" name="description" data-bind="value: remoteRepository.description"></textarea>
561           </div>
562         </div>
563
564       </fieldset>
565       <button data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
566       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
567     </form>
568 </script>
569
570 <script id="remote-repository-scan-modal-tmpl" type='text/html'>
571     <div>
572       ${$.i18n.prop('remoterepository.download.remote.now')}: <input type="checkbox" id="remoterepository-scan-now">
573     </div>
574     <div>
575       ${$.i18n.prop('remoterepository.download.remote.full')}: <input type="checkbox" id="remoterepository-scan-full">
576     </div>
577 </script>
578
579 <script id="managed-repositories-bulk-save-tmpl" type='text/html'>
580   {{if bulkSave()}}
581     <a data-bind="click: updateModifiedManagedRepositories" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
582   {{/if}}
583 </script>
584
585 <script id="remote-repositories-bulk-save-tmpl" type='text/html'>
586   {{if bulkSave()}}
587     <a data-bind="click: updateModifiedRemoteRepositories" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
588   {{/if}}
589 </script>
590
591 <script id="networkProxiesMain" type="text/html">
592   <div class="page-header">
593     <h2><img src="images/internet-web-browser-32-32.png"/>${$.i18n.prop('network-proxies.list')}</h2>
594   </div>
595
596   <ul id="network-proxies-view-tabs" class="nav nav-tabs">
597     <li id="network-proxies-view-tabs-li-grid">
598       <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>
599     </li>
600     <li id="network-proxies-view-tabs-li-edit">
601       <a data-toggle="tab" href="#network-proxies-edit">${$.i18n.prop('add')}</a>
602     </li>
603   </ul>
604   <div id="network-proxies-view-tabs-content" class="tab-content">
605     <div id="network-proxies-view" class="tab-pane">
606         <div id="network-proxies-bulk-save-btn" data-bind='template:{name:"network-proxies-bulk-save-tmpl"}'></div>
607         <table class="table table-striped table-bordered" id="networkProxiesTable"
608                data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko-network-proxies-grid',pageLinksId:'network-proxiesPagination'">
609         </table>
610         <div id="network-proxiesPagination"></div>
611     </div>
612     <div id="network-proxies-edit" class="tab-pane" data-bind='template: {name:"network-proxy-edit-tmpl"}'></div>
613   </div>
614
615 </script>
616
617 <script id='ko-network-proxies-grid' type='text/html'>
618     <thead>
619     <tr>
620         {{each(i, columnDefinition) columns}}
621         <th>${ columnDefinition.headerText }</th>
622         {{/each}}
623         <th>${$.i18n.prop('password')}</th>
624         <th>${$.i18n.prop('network.proxy.useNtlm')}</th>
625         <th>${$.i18n.prop('edit')}</th>
626         <th>${$.i18n.prop('delete')}</th>
627         <th>${$.i18n.prop('modified')}</th>
628     </tr>
629     </thead>
630     <tbody>
631     {{each(i, row) itemsOnCurrentPage()}}
632       <tr data-bind="css:{ 'modified': row.modified()}">
633         {{each(j, columnDefinition) columns}}
634         {{var val = (typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText])}}
635           <td>
636               ${val}
637           </td>
638         {{/each}}
639         {{if row.password()}}
640           <td>*****</td>
641         {{else}}
642           <td></td>
643         {{/if}}
644           <td>${row.useNtlm()}</td>
645           <td>
646             <a href="#" data-bind="click: function(){ editNetworkProxy(row) }">
647               <span class="btn btn-primary">
648                 <i class="icon-pencil icon-white"/>
649               </span>
650             </a>
651           </td>
652           <td>
653             <a href="#" data-bind="click: function(){ removeNetworkProxy(row) }">
654               <span class="btn btn-danger">
655                 <i class="icon-trash icon-white"/>
656               </span>
657             </a>
658           </td>
659         {{if row.modified()}}
660           <td>
661             <a href="#" data-bind="click: function(){ updateNetworkProxy(row) }" class="btn btn-warning">${$.i18n.prop('save')}</a>
662           </td>
663         {{else}}
664           <td></td>
665         {{/if}}
666
667     </tr>
668     {{/each}}
669     </tbody>
670
671 </script>
672
673 <script id="network-proxy-edit-tmpl" type='text/html'>
674     <form id="network-proxy-edit-form" class="well form-horizontal">
675       <fieldset id="network-proxy-edit-fieldset">
676         <div class="control-group">
677           <label class="control-label" for="id">${$.i18n.prop('id')}</label>
678           <div class="controls">
679             {{if update}}
680               <span class="uneditable-input">${$data.networkProxy.id}</span>
681             {{else}}
682               <input type="text" class="xlarge" id="id" name="id" size="10"
683                      data-bind="value: networkProxy.id,css:{'uneditable-input': update},readonly:update"/>
684             {{/if}}
685           </div>
686         </div>
687         <div class="control-group">
688           <label class="control-label" for="protocol">${$.i18n.prop('protocol')}</label>
689           <div class="controls">
690             <input type="text" class="xlarge required" id="protocol" name="protocol" size="8"
691                    data-bind="value: networkProxy.protocol"/>
692           </div>
693         </div>
694         <div class="control-group">
695           <label class="control-label" for="host">${$.i18n.prop('host')}</label>
696           <div class="controls">
697             <input type="text" class="xlarge required" id="host" name="host" size="15"
698                    data-bind="value: networkProxy.host"/>
699           </div>
700         </div>
701         <div class="control-group">
702           <label class="control-label" for="port">${$.i18n.prop('port')}</label>
703           <div class="controls">
704             <input type="text" class="xlarge required digits" id="port" name="port" size="6"
705                    data-bind="value: networkProxy.port"/>
706           </div>
707         </div>
708         <div class="control-group">
709           <label class="control-label" for="username">${$.i18n.prop('username')}</label>
710           <div class="controls">
711             <input type="text" class="xlarge" id="username" name="username" size="50"
712                    data-bind="value: networkProxy.username"/>
713           </div>
714         </div>
715         <div class="control-group">
716           <label class="control-label" for="password">${$.i18n.prop('password')}</label>
717           <div class="controls">
718             <input type="password" class="xlarge" id="password" name="password" size="50"
719                    data-bind="value: networkProxy.password"/>
720           </div>
721         </div>
722         <div class="control-group">
723           <label class="control-label" for="useNtlm">${$.i18n.prop('network.proxy.useNtlm')}</label>
724           <div class="controls">
725             <input type="checkbox" id="useNtlm" name="useNtlm" data-bind="checked: networkProxy.useNtlm"/>
726           </div>
727         </div>
728
729       </fieldset>
730       <button id="network-proxy-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
731       {{if networkProxy.modified()}}
732        ${("#network-proxy-btn-save").button('reset')}
733       {{/if}}
734       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
735     </form>
736 </script>
737
738 <script id="network-proxies-bulk-save-tmpl" type='text/html'>
739   {{if bulkSave()}}
740     <a data-bind="click: updateModifiedNetworkProxies" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
741   {{/if}}
742 </script>
743 <script id="network-proxy-delete-warning-tmpl" type='text/html'>
744     <div>
745       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
746     </div>
747 </script>
748
749 <script id="proxyConnectorsMain" type="text/html">
750   <div class="page-header">
751     <h2><img src="images/preferences-system-network-proxy-32-32.png"/>${$.i18n.prop('proxy-connectors.list')}</h2>
752   </div>
753
754   <ul id="proxy-connectors-view-tabs" class="nav nav-tabs">
755     <li id="proxy-connectors-view-tabs-li-grid" class="active">
756       <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>
757     </li>
758     <li id="proxy-connectors-view-tabs-li-edit">
759       <a data-toggle="tab" href="#proxy-connectors-edit" id="proxy-connectors-view-tabs-a-edit">${$.i18n.prop('add')}</a>
760     </li>
761     <li id="proxy-connectors-view-tabs-li-edit-order">
762       <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>
763     </li>
764   </ul>
765   <div id="proxy-connectors-view-tabs-content" class="tab-content">
766     <div id="proxy-connectors-view" class="tab-pane active">
767       <div id="proxy-connectors-bulk-save-btn" data-bind='template:{name:"proxy-connectors-bulk-save-tmpl"}'></div>
768       <table class="table table-striped table-bordered" id="proxyConnectorsTable"
769              data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko-proxy-connectors-grid',pageLinksId:'proxy-connectorsPagination'">
770       </table>
771       <div id="proxy-connectorsPagination"></div>
772     </div>
773     <div id="proxy-connectors-edit" class="tab-pane"></div>
774     <div id="proxy-connector-edit-order" class="tab-pane span8">
775       <div id="proxy-connector-edit-order-managed-repository-div" data-bind='template:{name:"proxy-connector-edit-order-managed-repository-tmpl"}'></div>
776       <div id="proxy-connector-edit-order-div"
777          data-bind="sortable: { template: 'proxy-connector-edit-order-tmpl', data: proxyConnectors,afterMove: proxyConnectorMoved}">
778       </div>
779     </div>
780   </div>
781
782 </script>
783
784 <script id='ko-proxy-connectors-grid' type='text/html'>
785     <thead>
786       <tr>
787         <th title="${$.i18n.prop('proxy-connectors.grid.managedrepo.title')}">
788           ${$.i18n.prop('proxy-connectors.grid.managedrepo.grid.header')}
789         </th>
790         <th title="${$.i18n.prop('proxy-connectors.grid.remoterepo.title')}">
791           ${$.i18n.prop('proxy-connectors.grid.remoterepo.grid.header')}
792         </th>
793         <th>${$.i18n.prop('proxy-connectors.grid.remoterepo.settings.popover.title')}</th>
794         <th>${$.i18n.prop('edit')}</th>
795         <th>${$.i18n.prop('delete')}</th>
796         <th>${$.i18n.prop('save')}</th>
797         <th>${$.i18n.prop('proxy-connectors.grid.header.order')}</th>
798       </tr>
799     </thead>
800     <tbody>
801     {{each(i, row) itemsOnCurrentPage()}}
802     <tr data-bind="css:{ 'modified': row.modified()}">
803       <td>${row.sourceRepoId()}</td>
804       <td>${row.targetRepoId()}</td>
805       <td>
806           <a class="btn btn-info btn-mini" id="proxy-connectors-grid-remoterepo-settings-edit-${row.sourceRepoId()}-${row.targetRepoId()}"
807                   data-original-title="${$.i18n.prop('proxy-connectors.grid.remoterepo.settings.popover.title')}"
808                   data-content="${buildSettings(row)}" data-bind="click: showSettings">
809               <i class="icon-question-sign icon-white"></i>
810           </a>
811
812       </td>
813       <td>
814         <a data-bind="click: function(){ editProxyConnector(row)}" href="#">
815           <span class="btn btn-primary">
816             <i class="icon-pencil icon-white"/>
817           </span>
818         </a>
819       </td>
820       <td>
821         <a href="#" data-bind="click: function(){ deleteProxyConnector(row)}">
822           <span class="btn btn-danger">
823             <i class="icon-trash icon-white"/>
824           </span>
825         </a>
826       </td>
827       <td>
828         {{if row.modified()}}
829           <a href="#" class="btn btn-warning" data-bind="click: function(){ updateProxyConnector(row)}">
830               ${$.i18n.prop('save')}
831           </a>
832         {{/if}}
833       </td>
834       <td>
835         {{if orderChangeAware(row)}}
836           <a href="#" data-bind="click: function(){ displayOrderEdit(row)}">
837             <span class="btn btn-info">
838               <i class="icon-resize-vertical icon-white"/>
839                ${$.i18n.prop('proxy-connectors.order.edit')}
840             </span>
841
842           </a>
843           <span class="badge badge-info">${row.order()}</span>
844         {{/if}}
845       </td>
846     </tr>
847     {{/each}}
848     </tbody>
849     <div id="proxy-connectors-grid-remoterepo-settings-content-${val}-${targetRepoId}" style="display:none"></div>
850 </script>
851
852 <script id='proxy-connectors-remote-settings-popover-tmpl' type='text/html'>
853   <div>
854     {{if proxyId}}
855       ${$.i18n.prop('proxy-connectors.remoterepo.settings.networkproxy')}: ${proxyConnector.proxyId}
856     {{else}}
857       ${$.i18n.prop('proxy-connectors.remoterepo.settings.networkproxy')}: ${$.i18n.prop('none')}
858     {{/if}}
859     <table class="table">
860       <thead>
861         <th colspan="2">${$.i18n.prop('proxy-connector.policies')}</th>
862       </thead>
863       <tbody>
864         {{each(i, entry) proxyConnector.policiesEntries}}
865         {{var name = proxyConnectorsViewModel.findPolicyInformationName(entry.key)}}
866         <tr>
867           <td>${name}</td>
868           <td>${entry.value}</td>
869         </tr>
870         {{/each}}
871       </tbody>
872     </table>
873   </div>
874 </script>
875
876 <script id="proxy-connector-edit-form-tmpl" type='text/html'>
877
878     <form id="proxy-connector-edit-form" class="well form-horizontal">
879       <fieldset id="remote-repository-edit-fieldset">
880         <div class="control-group">
881           <label class="control-label" for="proxyId">${$.i18n.prop('proxy-connector.network-proxy.id')}</label>
882           <div class="controls">
883             <select id="proxyId"
884                     data-bind="options: proxyConnectorsViewModel.networkProxies, optionsText: 'id',optionsValue:'id',
885                      value: proxyConnector.proxyId, optionsCaption: 'direct connection'"></select>
886           </div>
887         </div>
888         <div class="control-group">
889           <label class="control-label" for="proxyId">${$.i18n.prop('proxy-connector.managed.repository.id')}</label>
890           <div class="controls">
891               <select id="sourceRepoId"
892                       data-bind="options: proxyConnectorsViewModel.managedRepositories, optionsText: 'id',optionsValue:'id',
893                       value: proxyConnector.sourceRepoId,attr: {disabled: isUpdate() }"></select>
894           </div>
895         </div>
896         <div class="control-group">
897           <label class="control-label" for="proxyId">${$.i18n.prop('proxy-connector.remote.repository.id')}</label>
898           <div class="controls">
899             <select id="targetRepoId"
900                     data-bind="options: proxyConnectorsViewModel.remoteRepositories, optionsText: 'id',optionsValue:'id',
901                      value: proxyConnector.targetRepoId,attr: {disabled: isUpdate() }"></select>
902           </div>
903         </div>
904         <div class="row-fluid">
905           <div class="control-group span6">
906             <table class="table">
907               <thead>
908                 <th colspan="2">${$.i18n.prop('proxy-connector.policies')}</th>
909               </thead>
910               <tbody data-bind="foreach: proxyConnectorsViewModel.policyInformations()">
911                   <tr>
912                     <td data-bind="text: name"></td>
913                     <td>
914                       <select data-bind="options: getPolicyOptions(id()),value:getSelectedPolicyOption(id()),
915                               attr: { id: 'policy-'+id() },event: { change: function(){ changePolicyOption(id())},}">
916                       </select>
917                     </td>
918                   </tr>
919               </tbody>
920             </table>
921           </div>
922         </div>
923         <div class="row-fluid">
924           <div class="control-group span6">
925             <h4>${$.i18n.prop('proxy-connector.properties')}</h4>
926             <table class="table">
927               <thead>
928                 <th><input type="text" id="property-key"/></th>
929                 <th><input type="text" id="property-value"/></th>
930                 <th><a href="#" data-bind="click: function(){ addProperty() }">${$.i18n.prop('add')}</a></th>
931               </thead>
932               <tbody data-bind="foreach: proxyConnector.propertiesEntries">
933                 <tr>
934                   <td data-bind="text: key"></td>
935                   <td data-bind="text: value"></td>
936                   <td><a href="#" data-bind="click: function(){ $parent.deleteProperty(key)}">${$.i18n.prop('delete')}</a></td>
937                 </tr>
938               </tbody>
939             </table>
940           </div>
941         </div>
942         <div class="row-fluid">
943           <div class="control-group span6">
944             <h4>${$.i18n.prop('proxy-connector.blacklist')}</h4>
945             <table class="table">
946               <thead>
947                 <th><input type="text" id="blacklist-value"/></th>
948                 <th><a href="#" data-bind="click: function(){ addBlacklistPattern() }">${$.i18n.prop('add')}</a></th>
949               </thead>
950               <tbody data-bind="foreach: proxyConnector.blackListPatterns">
951                 <tr>
952                   <td data-bind="text: $data"></td>
953                   <td><a href="#" data-bind="click: function(){removeBlacklistPattern($data)}">${$.i18n.prop('delete')}</a></td>
954                 </tr>
955               </tbody>
956             </table>
957           </div>
958         </div>
959         <div class="row-fluid">
960           <div class="control-group span6">
961             <h4>${$.i18n.prop('proxy-connector.whitelist')}</h4>
962             <table class="table">
963               <thead>
964                 <th><input type="text" id="whitelist-value"/></th>
965                 <th><a href="#" data-bind="click: function(){ addWhitelistPattern() }">${$.i18n.prop('add')}</a></th>
966               </thead>
967               <tbody data-bind="foreach: proxyConnector.whiteListPatterns">
968                 <tr>
969                   <td data-bind="text: $data"></td>
970                   <td><a href="#" data-bind="click: function(){removeWhitelistPattern($data)}">${$.i18n.prop('delete')}</a></td>
971                 </tr>
972               </tbody>
973             </table>
974           </div>
975         </div>
976       </fieldset>
977
978       <button id="proxy-connector-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
979       {{if modified()}}
980        ${("#network-proxy-btn-save").button('reset')}
981       {{/if}}
982       <button data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
983
984     </form>
985
986 </script>
987 <script id="proxy-connectors-bulk-save-tmpl" type='text/html'>
988   {{if bulkSave()}}
989     <a data-bind="click: updateModifiedProxyConnectors" class="btn btn-danger" href="#">${$.i18n.prop('save.all')}</a>
990   {{/if}}
991 </script>
992
993 <script id="proxy-connector-edit-order-tmpl" type='text/html'>
994   <div class="well draggable-item network-proxy-remote-item">
995     {{var remoteRepository=$parent.findRemoteRepository(targetRepoId)}}
996     <div class="row-fluid">
997       <div class="span1">
998         <img src="images/system-software-update-32-32.png"/>
999           <br/>
1000           <img src="images/utilities-system-monitor-22-22.png"
1001                id="proxy-connectors-order-remoterepo-settings-edit-${sourceRepoId()}-${targetRepoId()}"
1002                data-original-title="${$.i18n.prop('proxy-connectors.grid.remoterepo.settings.popover.title')}"
1003                data-bind="event: { mouseover: function(){ displaySettings(sourceRepoId(),targetRepoId())},}">
1004           <div id="proxy-connectors-order-remoterepo-settings-content-${sourceRepoId()}-${targetRepoId()}"
1005                style="display:none"></div>
1006       </div>
1007       <div class="span6 pull-left">
1008         <blockquote>
1009             ${targetRepoId}
1010             <br/>
1011             ${remoteRepository.name()}&nbsp;(<a href="${remoteRepository.url()}" target="_blank">${remoteRepository.url()}</a>)
1012         </blockquote>
1013       </div>
1014       <div class="span2">
1015         <span class="badge badge-info">${order}</span>
1016       </div>
1017     </div>
1018   </div>
1019 </script>
1020
1021 <script id="proxy-connector-edit-order-managed-repository-tmpl" type="text/html">
1022   <div class="well row-fluid">
1023     <div class="span1">
1024       <img src="images/applications-internet-32-32.png"/>
1025     </div>
1026     <div class="span6">
1027       <blockquote>
1028         ${managedRepository.id}
1029         <br/>
1030         ${managedRepository.name}
1031       </blockquote>
1032     </div>
1033     <div class="span2">
1034       {{if proxyConnectorsViewModel.bulkSave()}}
1035         <p>
1036           <a data-bind="click: function(){updateModifiedProxyConnectors()}"
1037              href="#" class="btn btn-warning">${$.i18n.prop('save.all')}</a></p>
1038       {{/if}}
1039     </div>
1040   </div>
1041 </script>
1042
1043 <script id="proxy-connector-delete-warning-tmpl" type='text/html'>
1044     <div>
1045       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
1046     </div>
1047 </script>
1048
1049 <script id="repositoryGroupsMain" type="text/html">
1050   <div class="page-header">
1051     <h2><img src="images/applications-internet-2-32-32.png"/>${$.i18n.prop('repository.groups.list')}</h2>
1052   </div>
1053   <ul id="repository-groups-view-tabs" class="nav nav-tabs">
1054     <li id="repository-groups-view-tabs-li-grid" class="active">
1055       <a data-toggle="tab" href="#repository-groups-view" id="repository-groups-view-tabs-a-network-proxies-grid">
1056         ${$.i18n.prop('repository-groups.grid.tab.title')}
1057       </a>
1058     </li>
1059     <li id="repository-groups-view-tabs-li-edit">
1060       <a data-toggle="tab" href="#repository-groups-edit" id="repository-groups-view-tabs-a-edit">${$.i18n.prop('add')}</a>
1061     </li>
1062
1063   </ul>
1064   <div id="repository-groups-view-tabs-content" class="tab-content">
1065         <div id="repository-groups-view" class="tab-pane active">
1066           <div id="repository-groups-table" data-bind='template:{name:"repository-groups-table-tmpl"}'>
1067           </div>
1068         </div>
1069         <div id="repository-groups-edit" class="tab-pane">
1070               <div class="row-fluid">
1071                 <div class="span6 dotted">
1072                   <div id="repository-groups-edit-div" data-bind='template:{name:"repository-group-edit-tmpl"}'></div>
1073                   <div id="repository-groups-edit-order-div" style="min-height: 80px"
1074                      data-bind="sortable: { template: 'repository-group-edit-order-tmpl',data:repositoryGroup.managedRepositories,afterMove:repositoryMoved}">
1075                   </div>
1076                 </div>
1077
1078                 <div class="span6 dotted">
1079                   <h5>${$.i18n.prop('repository.groups.available.repositories')}</h5>
1080                   <br/>
1081                   <div id="repository-groups-edit-available-repositories" style="min-height: 80px"
1082                        data-bind="sortable: { template: 'repository-group-edit-order-tmpl',data:availableRepositories,afterMove:repositoryMoved}">
1083
1084                   </div>
1085                 </div>
1086
1087               </div>
1088
1089         </div>
1090
1091   </div>
1092 </script>
1093
1094 <script id="repository-groups-table-tmpl" type="text/html">
1095   <table class="table table-striped table-bordered">
1096     <thead>
1097       <th>${$.i18n.prop('repository.groups.groups.grid.header')}</th>
1098       <th>${$.i18n.prop('repository.groups.repositories.grid.header')}</th>
1099       <th>${$.i18n.prop('edit')}</th>
1100       <th>${$.i18n.prop('delete')}</th>
1101       <th>${$.i18n.prop('save')}</th>
1102     </thead>
1103     <tbody>
1104     {{each(i, repositoryGroup) repositoryGroups}}
1105       <tr data-bind="css:{ 'modified': repositoryGroup.modified()}">
1106         <td>${repositoryGroup.id}</td>
1107         <td>
1108           <ul>
1109           {{each(j,id) repositoryGroup.repositories()}}
1110             <li>${id}</li>
1111           {{/each}}
1112           </ul>
1113         </td>
1114         <td>
1115           <a href="#" data-bind="click: function(){editRepositoryGroup(repositoryGroup)}">
1116             <span class="btn btn-primary">
1117               <i class="icon-pencil icon-white"/>
1118             </span>
1119           </a>
1120         </td>
1121         <td>
1122           <a href="#" data-bind="click: function(){deleteRepositoryGroup(repositoryGroup)}">
1123             <span class="btn btn-danger">
1124               <i class="icon-trash icon-white"/>
1125             </span>
1126           </a>
1127         </td>
1128         <td>
1129           {{if repositoryGroup.modified()}}
1130             <a href="#" class="btn btn-warning" data-bind="click: function(){saveRepositoryGroup(repositoryGroup)}">
1131               ${$.i18n.prop('save')}
1132             </a>
1133           {{/if}}
1134         </td>
1135       </tr>
1136     {{/each}}
1137     </tbody>
1138   </table>
1139 </script>
1140
1141 <script id="repository-group-edit-tmpl" type="text/html">
1142   <div class="row-fluid">
1143   {{if update}}
1144     <div class="dotted span8">
1145       <blockquote>
1146         ${repositoryGroup.id}
1147         <br/>
1148         <a href="${window.archivaRuntimeInfo.baseUrl}/repository/${repositoryGroup.id()}" target="_blank">
1149           ${applicationUrl}/repository/${repositoryGroup.id()}
1150         </a>
1151       </blockquote>
1152     </div>
1153   {{else}}
1154     <div class="dotted span8">
1155       <form id="repository-group-edit-form" class="well">
1156         <fieldset id="repository-group-edit-fieldset">
1157           <div class="control-group">
1158             <label class="control-label" for="id">${$.i18n.prop('id')}</label>
1159             <div class="controls">
1160               <input type="text" class="input-medium required" id="id" name="id" size="15"
1161                    data-bind="value: repositoryGroup.id,css:{'uneditable-input': update},readonly:update"/>
1162             </div>
1163           </div>
1164         </fieldset>
1165       </form>
1166     </div>
1167   {{/if}}
1168   {{if repositoryGroup.modified()}}
1169     <div class="span3">
1170       <a href="#" class="btn btn-warning" data-bind="click: function(){saveRepositoryGroup(repositoryGroup)}">${$.i18n.prop('save')}</a>
1171     </div>
1172     <br/>
1173   {{/if}}
1174   </div>
1175 </script>
1176
1177 <script id="repository-group-edit-order-tmpl" type="text/html">
1178   <div class="well draggable-item">
1179     <blockquote>
1180       ${$data.id()}
1181       <br/>
1182       ${$data.name()}
1183       <br/>
1184       <a href="${$data.url}" target="_blank">
1185         ${$data.url}
1186       </a>
1187       <br/>
1188     </blockquote>
1189
1190   </div>
1191 </script>
1192
1193 <script id="repository-group-delete-warning-tmpl" type='text/html'>
1194     <div>
1195       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
1196     </div>
1197 </script>
1198
1199
1200 <script id="merge-repo-dialog-content" type="text/html">
1201     <div class="btn-group btn-group-vertical">
1202       {{each(i, repository) repositories}}
1203         <button class="btn" type="button" onclick="mergeRepositories(encodeURIComponent('${sourceRepoId}'),encodeURIComponent('${repository.id()}'))">${repository.name()}</button>
1204       {{/each}}
1205     </div>
1206 </script>
1207
1208 <script id="merge-repo-skip-conflicts"  type="text/html">
1209   <div>
1210     <ul>
1211       {{each(i, artifact) artifacts}}
1212         <li>${artifact.groupId}:${artifact.artifactId}:${artifact.version}</li>
1213       {{/each}}
1214     </ul>
1215   </div>
1216   <div>
1217     <button class="btn btn-success" onclick="doMerge(encodeURIComponent('${sourceRepository}'),encodeURIComponent('${targetRepository}'),false);" type="button">${$.i18n.prop('managedrepository.merge.domerge')}</button>
1218     {{if artifacts.length > 0}}
1219       <button class="btn btn-warning" onclick="doMerge(encodeURIComponent('${sourceRepository}'),encodeURIComponent('${targetRepository}'),true);" type="button">${$.i18n.prop('managedrepository.merge.domerge.skipconflicts')}</button>
1220     {{/if}}
1221   </div>
1222 </script>
1223
1224
1225 <script id="proxyConnectorsRulesMain" type="text/html">
1226     <div class="page-header">
1227       <h2>${$.i18n.prop('proxy-connector-rules.list')}</h2>
1228     </div>
1229
1230     <ul id="proxy-connectors-rules-view-tabs" class="nav nav-tabs">
1231       <li id="proxy-connectors-rules-view-tabs-li-grid" class="active">
1232         <a data-toggle="tab" href="#proxy-connector-rules-view" id="proxy-connectors-rules-view-tabs-a-grid">${$.i18n.prop('proxy-connectors-rules.grid.tab.title')}</a>
1233       </li>
1234       <li id="proxy-connectors-rules-view-tabs-li-edit">
1235         <a data-toggle="tab" href="#proxy-connector-rules-edit" id="proxy-connectors-rules-view-tabs-a-edit">${$.i18n.prop('add')}</a>
1236       </li>
1237     </ul>
1238     <div id="proxy-connectors-rules-view-tabs-content" class="tab-content">
1239       <div id="proxy-connector-rules-view" class="tab-pane active">
1240         <div id="proxy-connectors-rules-view-tabs-bulk-save-btn" data-bind='template:{name:"proxy-connectors-rules-view-tabs-bulk-save-tmpl"}'></div>
1241         <table class="table table-striped table-bordered" id="proxy-connectors-rules-view-tabsTable"
1242                data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko-proxy-connectors-rules-grid',pageLinksId:'proxy-connectors-rules-pagination'">
1243         </table>
1244         <div id="proxy-connectors-rules-view-tabs-pagination"></div>
1245       </div>
1246       <div id="proxy-connector-rules-edit" class="tab-pane">
1247           <div class="row-fluid">
1248             <div class="span6 dotted">
1249               <div id="proxy-connectors-rules-edit-div" data-bind='template:{name:"proxy-connectors-rules-edit-tmpl"}'></div>
1250               <div id="proxy-connectors-rules-edit-order-div" style="min-height: 80px"
1251                  data-bind="sortable: { template: 'proxy-connectors-rules-edit-proxy-connectors-tmpl',data:proxyConnectorRule.proxyConnectors,afterMove:proxyConnectorMoved}">
1252               </div>
1253             </div>
1254
1255             <div class="span6 dotted">
1256               <h5>${$.i18n.prop('proxy-connector-rules.available.proxyConnectors')}</h5>
1257               <br/>
1258               <div id="proxy-connectors-rules-available-repositories" style="min-height: 80px"
1259                    data-bind="sortable: { template: 'proxy-connectors-rules-edit-proxy-connectors-tmpl',data:availableProxyConnectors,afterMove:proxyConnectorMoved}">
1260
1261               </div>
1262             </div>
1263
1264           </div>
1265       </div>
1266
1267     </div>
1268
1269 </script>
1270
1271 <script id='ko-proxy-connectors-rules-grid' type='text/html'>
1272     <thead>
1273       <tr>
1274         <th title="${$.i18n.prop('proxy-connector-rules.grid.pattern.title')}">
1275           ${$.i18n.prop('proxy-connector-rules.grid.pattern.header')}
1276         </th>
1277         <th title="${$.i18n.prop('proxy-connector-rules.grid.type.title')}">
1278           ${$.i18n.prop('proxy-connector-rules.grid.type.header')}
1279         </th>
1280         <th>${$.i18n.prop('proxy-connector-rules.grid.proxy-connectors.header')}</th>
1281         <th>${$.i18n.prop('edit')}</th>
1282         <th>${$.i18n.prop('delete')}</th>
1283         <th>${$.i18n.prop('save')}</th>
1284       </tr>
1285     </thead>
1286     <tbody>
1287     {{each(i, row) itemsOnCurrentPage()}}
1288         <tr data-bind="css:{ 'modified': row.modified()}">
1289           <td>${row.pattern()}</td>
1290           <td>${row.proxyConnectorRuleType()}</td>
1291           <td>
1292             <ul>
1293             {{each(j,proxyConnector) row.proxyConnectors()}}
1294               <li>${proxyConnector.sourceRepoId()} <-> ${proxyConnector.targetRepoId()}</li>
1295             {{/each}}
1296             </ul>
1297           </td>
1298           <td>
1299               <a href="#" data-bind="click: function(){ editProxyConnectorRule(row) }">
1300                 <span class="btn btn-primary">
1301                   <i class="icon-pencil icon-white"/>
1302                 </span>
1303               </a>
1304           </td>
1305           <td>
1306               <a href="#" data-bind="click: function(){ removeProxyConnectorRule(row) }">
1307                 <span class="btn btn-danger">
1308                   <i class="icon-trash icon-white"/>
1309                 </span>
1310               </a>
1311           </td>
1312           <td>
1313             {{if row.modified()}}
1314               <a href="#" class="btn btn-warning" data-bind="click: function(){ updateProxyConnectorRule(row) }">${$.i18n.prop('save')}</a>
1315             {{/if}}
1316           </td>
1317         </tr>
1318     {{/each}}
1319     </tbody>
1320 </script>
1321
1322 <script id="proxy-connectors-rules-view-tabs-bulk-save-tmpl" type="text/html">
1323
1324 </script>
1325
1326 <script id="proxy-connectors-rules-edit-tmpl" type="text/html">
1327     <div class="row-fluid">
1328     {{if update}}
1329       <div class="dotted span8">
1330         <blockquote>
1331           ${proxyConnectorRule.pattern()}
1332           <br/>
1333           ${proxyConnectorRule.proxyConnectorRuleType()}
1334         </blockquote>
1335       </div>
1336     {{else}}
1337       <div class="dotted span8">
1338         <form id="proxy-connector-rule-edit-form" class="well">
1339           <fieldset id="proxy-connector-rule-edit-fieldset">
1340             <div class="control-group">
1341               <label class="control-label" for="id">${$.i18n.prop('proxy-connector-rule.pattern')}</label>
1342               <div class="controls">
1343                 <input type="text" class="input-large required" id="proxy-connector-rule-pattern" name="id" size="15"
1344                      data-bind="value:proxyConnectorRule.pattern,css:{'uneditable-input': update},readonly:update"/>
1345               </div>
1346             </div>
1347             <div class="control-group">
1348               <label class="control-label" for="layout">${$.i18n.prop('type')}</label>
1349               <div class="controls">
1350                 <select id="proxy-connector-rule-pattern-type"
1351                         data-bind="options: proxyConnectorRulesViewModel.ruleTypes,optionsText: 'label',optionsValue:'type',value: proxyConnectorRule.proxyConnectorRuleType"/>
1352               </div>
1353             </div>
1354           </fieldset>
1355         </form>
1356       </div>
1357     {{/if}}
1358     {{if proxyConnectorRule.modified()}}
1359       <div class="span3">
1360         <a href="#" class="btn btn-warning" data-bind="click: function(){addProxyConnectorRule(proxyConnectorRule)}">${$.i18n.prop('save')}</a>
1361       </div>
1362       <br/>
1363     {{/if}}
1364     </div>
1365 </script>
1366
1367 <script id="proxy-connectors-rules-edit-proxy-connectors-tmpl" type="text/html">
1368     <div class="well draggable-item">
1369       <blockquote>
1370         ${$data.sourceRepoId()} <-> ${$data.targetRepoId()}
1371       </blockquote>
1372
1373     </div>
1374 </script>