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