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