]> source.dussan.org Git - archiva.git/blob
7c86a4113682be26f4b3cfa614c945d495527752
[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="legacy-artifact-path-main" type="text/html">
20  <div id="legacy-artifact-path-screen">
21      <div class="page-header">
22        <h2>${$.i18n.prop('legacy-artifact-paths.list')}</h2>
23      </div>
24
25      <ul id="legacy-artifact-paths-view-tabs" class="nav nav-tabs">
26        <li id="legacy-artifact-paths-view-tabs-li-grid">
27          <a data-toggle="tab" href="#legacy-artifact-paths-view" id="legacy-artifact-paths-view-tabs-a-grid">${$.i18n.prop('legacy-artifact-paths.grid.tab.title')}</a>
28        </li>
29        <li id="legacy-artifact-paths-view-tabs-li-edit">
30          <a data-toggle="tab" href="#legacy-artifact-paths-edit">${$.i18n.prop('add')}</a>
31        </li>
32      </ul>
33      <div id="legacy-artifact-paths-view-tabs-content" class="tab-content">
34        <div id="legacy-artifact-paths-view" class="tab-pane">
35            <table class="table table-striped table-bordered" id="legacy-artifact-paths-table"
36                   data-bind="simpleGrid: gridViewModel,simpleGridTemplate:'ko-legacy-artifact-paths-grid',pageLinksId:'legacy-artifact-pathsPagination'">
37            </table>
38            <div id="legacy-artifact-pathsPagination"></div>
39        </div>
40        <div id="legacy-artifact-paths-edit" class="tab-pane" data-bind='template: {name:"legacy-artifact-paths-edit-tmpl"}'></div>
41      </div>
42  </div>
43 </script>
44
45 <script id='ko-legacy-artifact-paths-grid' type='text/html'>
46     <thead>
47     <tr>
48         {{each(i, columnDefinition) columns}}
49         <th>${ columnDefinition.headerText }</th>
50         {{/each}}
51         <th>${$.i18n.prop('delete')}</th>
52     </tr>
53     </thead>
54     <tbody>
55     {{each(i, row) itemsOnCurrentPage()}}
56       <tr data-bind="css:{ 'modified': row.modified()}">
57         {{each(j, columnDefinition) columns}}
58         {{var val = (typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText])}}
59           <td>
60               ${val}
61           </td>
62         {{/each}}
63           <td>
64             <a href="#" data-bind="click: function(){ removeLegacyArtifactPath(row) }">
65               <span class="btn btn-danger">
66                 <i class="icon-trash icon-white"/>
67               </span>
68             </a>
69           </td>
70     </tr>
71     {{/each}}
72     </tbody>
73
74 </script>
75
76 <script id="legacy-artifact-paths-edit-tmpl" type="text/html">
77     <form id="legacy-artifact-paths-edit-form" class="well form-horizontal">
78       <fieldset id="legacy-artifact-paths-edit-fieldset">
79         <div class="control-group">
80           <label class="control-label" for="groupId">${$.i18n.prop('legacy-artifact-paths.groupId')}</label>
81           <div class="controls">
82             <input type="text" class="xlarge required" id="groupId" name="groupId" size="8"
83                    data-bind="value: legacyArtifactPath.groupId"/>
84           </div>
85         </div>
86         <div class="control-group">
87           <label class="control-label" for="artifactId">${$.i18n.prop('legacy-artifact-paths.artifactId')}</label>
88           <div class="controls">
89             <input type="text" class="xlarge required" id="artifactId" name="artifactId" size="8"
90                    data-bind="value: legacyArtifactPath.artifactId"/>
91           </div>
92         </div>
93         <div class="control-group">
94           <label class="control-label" for="version">${$.i18n.prop('legacy-artifact-paths.version')}</label>
95           <div class="controls">
96             <input type="text" class="xlarge required" id="version" name="version" size="8"
97                    data-bind="value: legacyArtifactPath.version"/>
98           </div>
99         </div>
100         <div class="control-group">
101           <label class="control-label" for="classifier">${$.i18n.prop('legacy-artifact-paths.classifier')}</label>
102           <div class="controls">
103             <input type="text" class="xlarge" id="classifier" name="classifier" size="8"
104                    data-bind="value: legacyArtifactPath.classifier"/>
105           </div>
106         </div>
107         <div class="control-group">
108           <label class="control-label" for="type">${$.i18n.prop('legacy-artifact-paths.type')}</label>
109           <div class="controls">
110             <input type="text" class="xlarge required" id="type" name="type" size="8"
111                    data-bind="value: legacyArtifactPath.type"/>
112           </div>
113         </div>
114         <div class="control-group">
115           <label class="control-label" for="path">${$.i18n.prop('legacy-artifact-paths.path')}</label>
116           <div class="controls">
117             <input type="text" class="xlarge required" id="path" name="path" size="8"
118                    data-bind="value: legacyArtifactPath.path"/>
119           </div>
120         </div>
121         <div class="control-group">
122           <label class="control-label" for="artifact">${$.i18n.prop('legacy-artifact-paths.artifact')}</label>
123           <div class="controls">
124             <span title="calculated from values" class="uneditable-input"
125                   id="artifact" data-bind="text: legacyArtifactPath.artifact"></span>
126           </div>
127         </div>
128
129       </fieldset>
130       <button id="network-proxy-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
131       <button id="network-proxy-btn-cancel" data-bind="click: displayGrid" class="btn">${$.i18n.prop('cancel')}</button>
132       <button id="network-proxy-btn-calculate-path" data-bind="click: calculatePath" class="btn btn-success">${$.i18n.prop('legacy-artifact-paths.calculatePath')}</button>
133     </form>
134 </script>
135
136 <script id="legacy-artifact-path-delete-warning-tmpl" type="text/html">
137     <div>
138       <span class="label label-warning">${$.i18n.prop('warning.not.undone.operation')}</span>
139     </div>
140 </script>
141
142 <script id="repository-scanning-main" type="text/html">
143   <div id="repository-scanning-screen">
144     <div class="page-header">
145       <h2>${$.i18n.prop('repository-scanning.head')}</h2>
146     </div>
147   </div>
148
149   <ul id="repositories-tabs" class="nav nav-tabs">
150     <li class="active">
151       <a data-toggle="tab" href="#file-types-content">${$.i18n.prop('repository-scanning.file-types.head')}</a>
152     </li>
153     <li>
154       <a data-toggle="tab" href="#consumers-content">${$.i18n.prop('repository-scanning.consumers.head')}</a>
155     </li>
156   </ul>
157
158   <div class="tab-content">
159     <div id="file-types-content" class="tab-pane active" data-bind='template: {name:"file-types-tmpl"}'>
160     </div>
161     <div id="consumers-content" class="tab-pane">
162       <div id="consumers-known-content" data-bind='template: {name:"consumers-known-content-tmpl"}'></div>
163       <div id="consumers-invalid-content" data-bind='template: {name:"consumers-invalid-content-tmpl"}'></div>
164     </div>
165   </div>
166
167 </script>
168
169 <script id="file-types-tmpl" type="text/html">
170 <div class="accordion" id="accordion-file-types">
171   <div class="span4">
172   {{each(i, fileType) fileTypes}}
173   <div class="accordion-group">
174     <div class="accordion-heading">
175       <a class="accordion-toggle" href="#collapse-pattern-${fileType.id}"
176          data-parent="#accordion-file-types" data-toggle="collapse">${fileType.id}&nbsp;<i class="icon-resize-vertical"/></a>
177     </div>
178     <div id="collapse-pattern-${fileType.id}" class="accordion-body collapse">
179     <table class="table table-condensed">
180       {{each(j,pattern) fileType.patterns}}
181       <tr>
182         <td>${pattern}</td>
183         <td>
184           <a href="#" data-bind="click: function(){ removeFileTypePattern(fileType.id(),pattern) }">
185             <span class="btn btn-danger">
186               <i class="icon-trash icon-white"/>
187             </span>
188           </a>
189         </td>
190       </tr>
191       {{/each}}
192       <tr>
193         <td><input type="text" id="pattern-${fileType.id}"/></td>
194         <td>
195           <a href="#" data-bind="click: function(){addFileTypePattern(fileType.id())}">
196             <span class="btn btn-success">
197               <i class="icon-plus-sign icon-white"/>
198             </span>
199           </a>
200         </td>
201       </tr>
202     </table>
203     </div>
204   </div>
205   {{/each}}
206   </div>
207 </div>
208 </script>
209
210 <script id="consumers-known-content-tmpl" type="text/html">
211   <div class="page-header">
212     <h4>${$.i18n.prop('repository-scanning.consumers.know-content.head')}</h4>
213   </div>
214   <table class="table table-condensed">
215     <thead>
216       <tr>
217         <th>${$.i18n.prop('repository-scanning.consumers.grid.enabled')}</th>
218         <th>${$.i18n.prop('repository-scanning.consumers.grid.id')}</th>
219         <th>${$.i18n.prop('repository-scanning.consumers.grid.description')}</th>
220       </tr>
221     </thead>
222     <tbody>
223       {{each(i,knownAdminRepositoryConsumer) knownAdminRepositoryConsumers}}
224       <tr>
225         {{if knownAdminRepositoryConsumer.enabled()==true}}
226           <td>
227             <a href="#" data-bind="click: function(){ disableKnowContentConsumer(knownAdminRepositoryConsumer) }">
228               <img src="images/weather-clear-22-22.png"/>
229             </a>
230           </td>
231           {{else}}
232           <td>
233             <a href="#" data-bind="click: function(){ enableKnowContentConsumer(knownAdminRepositoryConsumer) }">
234               <img src="images/dialog-error-22-22.png"/>
235             </a>
236           </td>
237         {{/if}}
238
239         <td>${knownAdminRepositoryConsumer.id}</td>
240         <td>${knownAdminRepositoryConsumer.description}</td>
241       </tr>
242       {{/each}}
243     </tbody>
244   </table>
245 </script>
246
247 <script id="consumers-invalid-content-tmpl" type="text/html">
248   <div class="page-header">
249     <h4>${$.i18n.prop('repository-scanning.consumers.invalid-content.head')}</h4>
250   </div>
251   <table class="table table-condensed">
252     <thead>
253       <tr>
254         <th>${$.i18n.prop('repository-scanning.consumers.grid.enabled')}</th>
255         <th>${$.i18n.prop('repository-scanning.consumers.grid.id')}</th>
256         <th>${$.i18n.prop('repository-scanning.consumers.grid.description')}</th>
257       </tr>
258     </thead>
259     <tbody>
260       {{each(i,invalidAdminRepositoryConsumer) invalidAdminRepositoryConsumers}}
261       <tr>
262         {{if invalidAdminRepositoryConsumer.enabled()==true}}
263           <td>
264             <a href="#" data-bind="click: function(){ disableInvalidContentConsumer(invalidAdminRepositoryConsumer) }">
265               <img src="images/weather-clear-22-22.png"/>
266             </a>
267           </td>
268           {{else}}
269           <td>
270             <a href="#" data-bind="click: function(){ enableInvalidContentConsumer(invalidAdminRepositoryConsumer) }">
271               <img src="images/dialog-error-22-22.png"/>
272             </a>
273           </td>
274         {{/if}}
275         <td>${invalidAdminRepositoryConsumer.id}</td>
276         <td>${invalidAdminRepositoryConsumer.description}</td>
277       </tr>
278       {{/each}}
279     </tbody>
280   </table>
281 </script>
282
283 <script id="network-configuration-screen" type="text/html">
284   <div class="page-header">
285     <h4>${$.i18n.prop('network-configuration.header')}</h4>
286   </div>
287   <div id="network-configuration-form" data-bind='template: {name:"network-configuration-form-tmpl"}'></div>
288 </script>
289
290 <script id="network-configuration-form-tmpl" type="text/html">
291     <form id="network-configuration-edit-form" class="well form-horizontal">
292       <fieldset id="network-configuration-edit-fieldset">
293         <div class="control-group">
294           <label class="control-label" for="maxTotal">${$.i18n.prop('network-configuration.maxTotal')}</label>
295           <div class="controls">
296             <input type="text" class="xlarge required digits" id="maxTotal" name="maxTotal" size="8"
297                    data-bind="value: networkConfiguration().maxTotal"/>
298           </div>
299         </div>
300         <div class="control-group">
301           <label class="control-label" for="maxTotal">${$.i18n.prop('network-configuration.maxTotalPerHost')}</label>
302           <div class="controls">
303             <input type="text" class="xlarge required digits" id="maxTotalPerHost" name="maxTotalPerHost" size="8"
304                    data-bind="value: networkConfiguration().maxTotalPerHost"/>
305           </div>
306         </div>
307         <div class="control-group">
308           <label class="control-label" for="usePooling">${$.i18n.prop('network-configuration.usePooling')}</label>
309           <div class="controls">
310             <input type="checkbox" id="usePooling" name="usePooling" data-bind="checked: networkConfiguration().usePooling"/>
311           </div>
312         </div>
313       </fieldset>
314       <button id="network-configuration-btn-save" data-loading-text="${$.i18n.prop('common.loading')}"
315               data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
316     </form>
317 </script>
318
319 <script id="ui-configuration-screen" type="text/html">
320   <div class="page-header">
321     <h4>${$.i18n.prop('ui-configuration.header')}</h4>
322   </div>
323   <div id="ui-configuration-form" data-bind='template: {name:"ui-configuration-form-tmpl"}'></div>
324 </script>
325
326 <script id="ui-configuration-form-tmpl" type="text/html">
327     <form id="ui-configuration-edit-form" class="well form-horizontal">
328       <fieldset id="ui-configuration-edit-fieldset">
329         <div class="control-group">
330           <label class="control-label" for="maxTotal">${$.i18n.prop('ui-configuration.applicationUrl')}</label>
331           <div class="controls">
332             <input type="text" class="input-xxlarge required digits" id="applicationUrl" name="applicationUrl" size="8"
333                    data-bind="value: uiConfiguration().applicationUrl"/>
334           </div>
335         </div>
336
337         <div class="control-group">
338           <label class="control-label" for="disableRegistration">${$.i18n.prop('ui-configuration.disableRegistration')}</label>
339           <div class="controls">
340             <input type="checkbox" id="disableRegistration" name="disableRegistration" data-bind="checked: uiConfiguration().disableRegistration"/>
341           </div>
342         </div>
343
344       </fieldset>
345       <button id="ui-configuration-btn-save" data-bind="click: save" class="btn" data-loading-text="${$.i18n.prop('common.loading')}">${$.i18n.prop('save')}</button>
346     </form>
347 </script>
348
349 <script id="system-status-main" type="text/html">
350   <div class="page-header">
351     <h4>${$.i18n.prop('system-status.header.version.info')}</h4>
352   </div>
353   <div id="status_version_info">
354     <img src="images/small-spinner.gif"/>
355   </div>
356   <div class="page-header">
357     <h3>${$.i18n.prop('system-status.header.main')}&nbsp;<a href="#" onclick="refreshSystemStatus()"><img src="images/view-refresh-22-22.png"/></a></h3>
358   </div>
359   <div class="page-header">
360     <h4>${$.i18n.prop('system-status.header.queues')}</h4>
361   </div>
362   <div id="status_queues">
363     <img src="images/small-spinner.gif"/>
364   </div>
365
366   <div class="page-header">
367     <h4>${$.i18n.prop('system-status.header.scanning')}&nbsp;<a href="#" onclick="displayScanningStats()"><img src="images/view-refresh.png"/></a></h4>
368   </div>
369   <div id="status_scanning">
370     <img src="images/small-spinner.gif"/>
371   </div>
372
373   <div class="page-header">
374     <h4>${$.i18n.prop('system-status.header.caches')}&nbsp;<a href="#" onclick="displayCacheEntries()"><img src="images/view-refresh.png"/></a></h4>
375   </div>
376   <div id="status_caches">
377       <img src="images/small-spinner.gif"/>
378   </div>
379
380   <div class="page-header">
381     <h4>${$.i18n.prop('system-status.header.memory')}&nbsp;<a href="#" onclick="displayMemoryUsage()"><img src="images/view-refresh.png"/></a></h4>
382   </div>
383   <div id="status_memory_info">
384     <img src="images/small-spinner.gif"/>
385   </div>
386
387   <div class="page-header">
388     <h4>${$.i18n.prop('system-status.header.current.time')}</h4>
389   </div>
390   <div id="status_current_time">
391     <img src="images/small-spinner.gif"/>
392   </div>
393
394 </script>
395
396 <script id="status_caches_tmpl" type="text/html">
397   <a href="#" class="btn btn-warning" onclick="flushAllCaches()">
398     ${$.i18n.prop('system-status.caches.flushAll')}
399   </a>
400   <table class="table table-condensed">
401     <thead>
402       <tr>
403         <th>${$.i18n.prop('system-status.caches.grid.header.key')}</th>
404         <th>${$.i18n.prop('system-status.caches.grid.header.size')}</th>
405         <th>${$.i18n.prop('system-status.caches.grid.header.cacheHits')}</th>
406         <th>${$.i18n.prop('system-status.caches.grid.header.cacheMiss')}</th>
407         <th>${$.i18n.prop('system-status.caches.grid.header.cacheHitRate')}</th>
408           <th>${$.i18n.prop('system-status.caches.grid.header.inMemorySize')}</th>
409         <th>${$.i18n.prop('system-status.caches.grid.header.flush')}</th>
410       </tr>
411     </thead>
412     <tbody>
413     {{each(i,cacheEntry) cacheEntries}}
414       <tr>
415         <td>${cacheEntry.key}</td>
416         <td>${cacheEntry.size}</td>
417         <td>${cacheEntry.cacheHits}</td>
418         <td>${cacheEntry.cacheMiss}</td>
419         <td>${cacheEntry.cacheHitRate}</td>
420         <td>${cacheEntry.inMemorySize}</td>
421         <td>
422           <a href="#" onclick="flushCache('${cacheEntry.key}')">
423             {{if  cacheEntry.size > 0 }}
424               <img src="images/user-trash-full.png"/>
425             {{else}}
426               <img src="images/user-trash.png"/>
427             {{/if}}
428           </a>
429         </td>
430       </tr>
431     {{/each}}
432     </tbody>
433   </table>
434 </script>
435
436
437 <script id="status_queues_tmpl" type="text/html">
438   <table class="table table-condensed">
439     <thead>
440       <tr>
441         <th>${$.i18n.prop('system-status.queues.grid.header.key')}</th>
442         <th>${$.i18n.prop('system-status.queues.grid.header.size')}</th>
443       </tr>
444     </thead>
445     <tbody>
446     {{each(i,queueEntry) queueEntries}}
447       <tr>
448         <td>${queueEntry.key}</td>
449         <td>${queueEntry.entriesNumber}</td>
450       </tr>
451     {{/each}}
452     </tbody>
453   </table>
454 </script>
455
456 <script id="status_scanning_tmpl" type="text/html">
457   {{if repositoryScannerStatisticsList.length == 0}}
458     <h5>No scans in progress.</h5>
459   {{else}}
460     <table class="table table-condensed">
461       <thead>
462         <tr>
463           <th>${$.i18n.prop('system-status.scanning.grid.header.repository')}</th>
464           <th>${$.i18n.prop('system-status.scanning.grid.header.files.processed')}</th>
465           <th>${$.i18n.prop('system-status.scanning.grid.header.files.new')}</th>
466           <th>${$.i18n.prop('system-status.scanning.grid.header.stats')}</th>
467         </tr>
468       </thead>
469       <tbody>
470       {{each(i,repositoryScannerStatistics) repositoryScannerStatisticsList}}
471         <tr>
472           <td>${repositoryScannerStatistics.managedRepository.name()}</td>
473           <td>${repositoryScannerStatistics.totalFileCount}</td>
474           <td>${repositoryScannerStatistics.newFileCount}</td>
475           <td>
476             <blockquote>
477             <table>
478               <thead>
479                 <tr>
480                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.name')}</th>
481                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.total')}</th>
482                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.average')} ms</th>
483                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.invocations.time')}</th>
484                 </tr>
485               </thead>
486               <tbody>
487                 {{each(j,consumerScanningStatistics) repositoryScannerStatistics.consumerScanningStatisticsList}}
488                 <tr>
489                   <td>${consumerScanningStatistics.consumerKey}</td>
490                   <td>${consumerScanningStatistics.count}</td>
491                   <td>${consumerScanningStatistics.average}ms</td>
492                   <td>${consumerScanningStatistics.time}ms</td>
493                 </tr>
494                 {{/each}}
495               </tbody>
496             </table>
497             </blockquote>
498           </td>
499         </tr>
500       {{/each}}
501       </tbody>
502     </table>
503   {{/if}}
504 </script>
505
506 <script id="changeAppearance" type="text/html">
507     <div class="page-header">
508         <h2>${$.i18n.prop('appearance-configuration.title-page')}</h2>
509     </div>
510
511     <h2>${$.i18n.prop('appearance-configuration.organisation-details')}</h2>
512
513     <p>
514         ${$.i18n.prop('apperance-configuration.details-description')}
515     </p>
516
517     <form id="appearance-configuration-form-id" class="well form-horizontal">
518         <fieldset id="appearance-configuration-fielset-id">
519             <div class="control-group">
520                 <label class="control-label" for="name">${$.i18n.prop('appearance-configuration.name-label')}</label>
521                 <div class="controls">
522                     <input type="text" class="input-xlarge required" id="name" name="name" size="50"
523                            data-bind="value: organisationInformation().name"/>
524                 </div>
525             </div>
526             <div class="control-group">
527                 <label class="control-label" for="name">${$.i18n.prop('appearance-configuration.url-label')}</label>
528                 <div class="controls">
529                     <input type="text" class="input-xlarge required" id="url" name="url" size="50"
530                            data-bind="value: organisationInformation().url"/>
531                 </div>
532             </div>
533             <div class="control-group">
534                 <label class="control-label"
535                        for="name">${$.i18n.prop('appearance-configuration.logoLocation-label')}</label>
536                 <div class="controls">
537                     <input type="text" class="input-xxlarge" id="logoLocation" name="logoLocation" size="50"
538                            data-bind="value: organisationInformation().logoLocation"/>
539                 </div>
540             </div>
541         </fieldset>
542         <button id="appearance-configuration-btn-save" data-loading-text="${$.i18n.prop('common.loading')}" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
543     </form>
544 </script>
545
546
547 <script id="file-upload-screen" type="text/html">
548   <div id="file-upload-main" data-bind='template:{name:"file-upload-tmpl"}'></div>
549 </script>
550
551 <script id="file-upload-tmpl" type="text/html">
552   <div class="page-header">
553     <h3>${$.i18n.prop('fileupload.header')}</h3>
554   </div>
555   <form id="fileupload" action="restServices/archivaUiServices/fileUploadService" method="POST"
556         enctype="multipart/form-data" class="well form-horizontal">
557
558     <fieldset id="network-proxy-edit-fieldset">
559       <div class="control-group">
560         <label class="control-label" for="repositoryId">${$.i18n.prop('fileupload.repositoryId')}</label>
561         <div class="controls">
562           <select id="repositoryId"
563                     data-bind="options: managedRepositories, optionsText: 'name',optionsValue:'id',
564                      value: repositoryId"></select>
565          </div>
566         </div>
567       <div class="control-group">
568         <label class="control-label" for="groupId">${$.i18n.prop('fileupload.groupId')}</label>
569         <div class="controls">
570           <input type="text" class="xlarge required" data-bind="value: groupId" id="groupId" name="groupId" size="10" />
571           </div>
572         </div>
573       </div>
574       <div class="control-group">
575         <label class="control-label" for="artifactId">${$.i18n.prop('fileupload.artifactId')}</label>
576         <div class="controls">
577           <input type="text" class="xlarge required" data-bind="value: artifactId" id="artifactId" name="artifactId" size="10" />
578           </div>
579         </div>
580       </div>
581       <div class="control-group">
582         <label class="control-label" for="version">${$.i18n.prop('fileupload.version')}</label>
583         <div class="controls">
584           <input type="text" class="xlarge required" data-bind="value: version" id="version" name="version" size="10" />
585           </div>
586         </div>
587       </div>
588       <div class="control-group">
589         <label class="control-label" for="packaging">${$.i18n.prop('fileupload.packaging')}</label>
590         <div class="controls">
591           <input type="text" class="xlarge required" data-bind="value: packaging" id="packaging" name="packaging" size="10" />
592           </div>
593         </div>
594       </div>
595       <div class="control-group">
596         <label class="control-label" for="generatePom">${$.i18n.prop('fileupload.generatePom')}</label>
597         <div class="controls">
598           <input type="checkbox" class="xlarge" data-bind="value: generatePom" id="generatePom" name="generatePom" />
599           </div>
600         </div>
601       </div>
602     </fieldset>
603
604     <div class="row-fluid fileupload-buttonbar">
605       <div class="span7">
606         <span class="btn btn-success fileinput-button">
607           <i class="icon-plus icon-white"></i>
608           <span>${$.i18n.prop('fileupload.file.choose')}</span>
609           <input type="file" name="files[]" multiple="">
610         </span>
611         <button type="submit" class="btn btn-primary start">
612           <i class="icon-upload icon-white"></i>
613           <span>${$.i18n.prop('fileupload.start')}</span>
614         </button>
615         <button type="reset" class="btn btn-warning cancel">
616           <i class="icon-ban-circle icon-white"></i>
617           <span>${$.i18n.prop('fileupload.cancel')}</span>
618         </button>
619         <button type="button" class="btn btn-danger delete">
620           <i class="icon-trash icon-white"></i>
621           <span>${$.i18n.prop('fileupload.delete')}</span>
622         </button>
623         <input type="checkbox" class="toggle">
624       </div>
625       <div class="span5">
626         <div class="progress progress-success progress-striped active">
627           <div class="bar" style="width:0%;"></div>
628         </div>
629       </div>
630     </div>
631     <div>
632       <a href="#" id="fileupload-save-files">
633         <span class="btn btn-info" data-bind='click: saveArtifacts'>
634           <i class="icon-file icon-white"></i>
635           <span>${$.i18n.prop('fileupload.save')}</span>
636         </span>
637       </a>
638     </div>
639     <div class="fileupload-loading"></div>
640     <br>
641     <table class="table table-striped">
642       <tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery" id="uploaded-files-list"></tbody>
643     </table>
644 </form>
645
646 </script>
647
648
649 <script id="template-upload" type="text/html">
650   {% for (var i=0, file; file=o.files[i]; i++) { %}
651     <tr class="template-upload">
652       <td class="name"><span>{%=file.name%}</span></td>
653       <td><input type="text" id="classifier" name="classifier" placeholder="classifier" value=""/></td>
654       <td><span>pomFile:</span><input type="checkbox" id="pomFile" name="pomFile"/></td>
655       <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
656       {% if (file.error) { %}
657       <td class="error" colspan="2">
658         <span class="label label-important">{%=$.i18n.prop('fileupload.error')%}</span>
659         {%=$.i18n.prop('fileupload.errors.'+[file.error]) || file.error%}
660       </td>
661       {% } else if (o.files.valid && !i) { %}
662       <td>
663         <div class="progress progress-success progress-striped active">
664           <div class="bar" style="width:0%;"></div>
665         </div>
666       </td>
667       <td class="start">
668         {% if (!o.options.autoUpload) { %}
669         <button class="btn btn-primary">
670           <i class="icon-upload icon-white"></i>
671           <span>{%=$.i18n.prop('fileupload.start')%}</span>
672         </button>
673         {% } %}
674       </td>
675       {% } else { %}
676       <td colspan="2"></td>
677       {% } %}
678       <td class="cancel">
679       {% if (!i) { %}
680         <button class="btn btn-warning">
681           <i class="icon-ban-circle icon-white"></i>
682           <span>{%=$.i18n.prop('fileupload.cancel')%}</span>
683         </button>
684       {% } %}
685       </td>
686     </tr>
687   {% } %}
688 </script>
689
690 <script id="template-download" type="text/html">
691   {% for (var i=0, file; file=o.files[i]; i++) { %}
692   <tr class="template-download">
693       <td class="name"><span>{%=file.name%}</span></td>
694       <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
695     {% if (file.error) { %}
696       <td class="error" colspan="2">
697         <span class="label label-important">{%=$.i18n.prop('fileupload.error')%}</span>
698         {%=$.i18n.prop('fileupload.errors.'+[file.error]) || file.error%}
699       </td>
700     {% } else { %}
701       <td colspan="2"></td>
702     {% } %}
703       <td class="delete">
704         <button class="btn btn-danger" data-type="{%=file.deleteType%}"
705                 data-url="restServices/archivaUiServices/fileUploadService/{%=file.deleteUrl%}">
706           <i class="icon-trash icon-white"></i>
707           <span>{%=$.i18n.prop('fileupload.destroy')%}</span>
708         </button>
709         <input type="checkbox" name="delete" value="1">
710       </td>
711     </tr>
712 {% } %}
713 </script>
714
715 <script id="report-base" type="text/html">
716   <div class="page-header">
717     <h2>${$.i18n.prop('report.title')}</h2>
718   </div>
719
720     <ul class="nav nav-tabs">
721       <li class="active" id="report-stat-tab-li"><a href="#report-stat-tab-content" data-toggle="tab">${$.i18n.prop('report.statistics.title')}</a></li>
722       <li id="report-health-tab-li"><a href="#report-health-tab-content" data-toggle="tab">${$.i18n.prop('report.health.title')}</a></li>
723       <li id="report-result-tab-li" class="hide"><a href="#report-result" data-toggle="tab">${$.i18n.prop('report.result.title')}</a></li>
724     </ul>
725
726     <div class="tab-content">
727       <div class="tab-pane active" id="report-stat-tab-content">
728         <form class="form-horizontal" id="report-statistics-form-id">
729           <fieldset id="form-statistics-report">
730             <div class="row-fluid">
731               <div class="span6 row-fluid">
732                 <div class="row-fluid" id="repositoriesErrorMessage"></div>
733                 <div class="row-fluid">
734                   <div class="span6 dotted">
735                     <h5>${$.i18n.prop('report.statistics.selected-repositories.label')}</h5>
736                     <hr/>
737                     <div style="min-height: 40px"
738                          data-bind="sortable: { template: 'statistics-repositories-order-tmpl', data:statisticsReport().repositories}">
739                     </div>
740                   </div>
741                   <div class="span6 dotted">
742                     <h5>${$.i18n.prop('repository.groups.available-repositories.label')}</h5>
743                     <hr/>
744                     <div style="min-height: 40px"
745                          data-bind="sortable: {template: 'statistics-repositories-order-tmpl',data:availableRepositories}">
746                     </div>
747                   </div>
748                 </div>
749               </div>
750               <div class="span6 well">
751                   <div class="control-group">
752                       <label for="rowCountStatistics" class="control-label">
753                           ${$.i18n.prop('report.statistics.row-count.label')}
754                       </label>
755                       <div class="controls">
756                           <input type="text" id="rowCountStatistics" name="rowCountStatistics" class="input-small"
757                                  data-bind="value: statisticsReport().rowCount"/>
758
759                           <a class="btn btn-warning btn-mini" id="rowcount-info-button"
760                                   data-original-title="${$.i18n.prop('report.statistics.rowCount.explanations-title')}"
761                                   data-content="${$.i18n.prop('report.statistics.rowCount.explanations')}"
762                                   data-placement="left" data-toggle="button">
763                               <i class="icon-question-sign icon-white"></i>
764                           </a>
765                       </div>
766                   </div>
767                   <div class="control-group">
768                       <label for="startDate" class="control-label">
769                           ${$.i18n.prop('report.statistics.start-date.label')}
770                       </label>
771                       <div class="controls">
772                           <input type="text" id="startDate" name="startDate" class="input-small"
773                                  data-bind="value: statisticsReport().startDate"/>
774                       </div>
775                   </div>
776                   <div class="control-group">
777                       <label for="endDate" class="control-label">
778                           ${$.i18n.prop('report.statistics.end-date.label')}
779                       </label>
780                       <div class="controls">
781                           <input type="text" id="endDate" name="endDate" class="input-small"
782                                  data-bind="value: statisticsReport().endDate"/>
783                       </div>
784                   </div>
785               </div>
786             </div>
787               <div class="form-actions">
788                   <button class="btn btn-primary" data-bind="click: showStatistics">
789                       ${$.i18n.prop('report.statistics.btn-view')}
790                   </button>
791               </div>
792           </fieldset>
793         </form>
794       </div>
795
796       <div class="tab-pane" id="report-health-tab-content">
797         <form class="form-horizontal" id="report-health-form-id">
798           <fieldset id="form-health-report">
799             <div class="control-group">
800               <label for="rowCountHealth" class="control-label">
801                 ${$.i18n.prop('report.statistics.row-count.label')}
802               </label>
803               <div class="controls">
804                 <input type="text" id="rowCountHealth" name="rowCountHealth" class="input-small required"
805                         data-bind="value: healthReport().rowCount"/>
806               </div>
807             </div>
808             <div class="control-group">
809               <label for="groupId" class="control-label">
810                 ${$.i18n.prop('report.health.groupId.label')}
811               </label>
812               <div class="controls">
813                 <input type="text" id="groupId" name="groupId" data-bind="value: healthReport().groupId"/>
814               </div>
815             </div>
816             <div class="control-group">
817               <label for="repositoryId" class="control-label">
818                 ${$.i18n.prop('report.health.repositoryId.label')}
819               </label>
820               <div class="controls">
821                 <select id="repositoryId" name="repositoryId" data-bind="value: healthReport().repositoryId"
822                         class="required">
823                     <option value="all">${$.i18n.prop('report.select.all-repositories')}</option>
824                     {{each(i, repoId) repositoriesList}}
825                       <option value="${repoId}">${repoId}</option>
826                     {{/each}}
827                 </select>
828               </div>
829             </div>
830             <div class="form-actions">
831               <a href="#" class="btn btn-primary" data-bind="click: showHealth">
832                 ${$.i18n.prop('report.health.btn-view')}
833               </a>
834             </div>
835           </fieldset>
836         </form>
837       </div>
838
839       <div class="tab-pane" id="report-result">
840       </div>
841     </div>
842 </script>
843
844 <script id="statistics-repositories-order-tmpl" type="text/html">
845   <div class="well draggable-item">
846     ${$data}
847   </div>
848 </script>
849
850 <script id="report-health" type="text/html">
851     <div class="page-header">
852         <h3>${$.i18n.prop('report.health.title')}</h3>
853     </div>
854     <table class="table table-bordered table-striped"
855            data-bind="simpleGrid: tableReportViewModel,simpleGridTemplate:'table-report-tmpl',pageLinksId:'reportHealthPageLinkId'">
856     </table>
857     <div id="reportHealthPageLinkId"></div>
858 </script>
859
860 <script id="report-statistics" type="text/html">
861     <div class="page-header">
862         <h3>${$.i18n.prop('report.statistics.title')}</h3>
863     </div>
864     <table class="table table-bordered table-striped"
865            data-bind="simpleGrid: tableReportViewModel,simpleGridTemplate:'table-report-tmpl',pageLinksId:'reportStatisticsPageLinkId'">
866     </table>
867     <div id="reportStatisticsPageLinkId"></div>
868 </script>
869 <script id="table-report-tmpl" type="text/html">
870     <thead>
871     {{each(i, columnDefinition) columns}}
872       <th>${ columnDefinition.headerText }</th>
873     {{/each}}
874     </thead>
875     <tbody>
876     {{each(i, row) itemsOnCurrentPage()}}
877       <tr>
878         {{each(i, columnDefinition) columns}}
879           {{var val = (typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText])}}
880           <td>
881               ${val}
882           </td>
883         {{/each}}
884       </tr>
885     {{/each}}
886     </tbody>
887 </script>
888
889 <script type="text/html" id="runtime-configuration-main">
890   <div class="page-header">
891     <h2>${$.i18n.prop('runtime-configuration.title')}</h2>
892   </div>
893   <div id="runtime-configuration-content" data-bind='template: {name:"runtime-configuration-content-tmpl"}'>
894   </div>
895 </script>
896
897 <script type="text/html" id="runtime-configuration-content-tmpl">
898   <ul class="nav nav-tabs">
899     <li class="active" id="redback-runtime-general-li"><a href="#redback-runtime-general-content" data-toggle="tab">${$.i18n.prop('redback.runtime.general.title')}</a></li>
900     <li id="redback-runtime-ldap-li"><a href="#redback-runtime-ldap-content" data-toggle="tab">${$.i18n.prop('redback.runtime.ldap.title')}</a></li>
901     <li id="redback-runtime-properties-li"><a href="#redback-runtime-properties-content" data-toggle="tab">${$.i18n.prop('redback.runtime.properties.title')}</a></li>
902   </ul>
903
904   <div class="tab-content">
905     <div class="tab-pane active" id="redback-runtime-general-content">
906       <div class="well">
907         <div class="row-fluid">
908           <div class="span4 dotted">
909             <h5>${$.i18n.prop('redback.runtime.user-managers.impls.choosed')}</h5>
910             <div style="min-height: 40px" id="user-mananagers-sortables-choosed"
911                  data-bind="sortable: { template: 'redback-runtime-general-content-usermanagers', data:usedUserManagerImpls,afterMove: userManagerImplMoved}">
912             </div>
913           </div>
914
915           <div class="span4 dotted">
916             <h5>${$.i18n.prop('redback.runtime.user-managers.impls.available')}</h5>
917             <div style="min-height: 40px"id="user-mananagers-sortables-availables"
918                  data-bind="sortable: {template: 'redback-runtime-general-content-usermanagers',data:availableUserManagerImpls,afterMove: userManagerImplMoved}">
919             </div>
920           </div>
921         </div>
922       </div>
923     </div>
924
925     <div class="tab-pane" id="redback-runtime-ldap-content">
926       <div class="well">
927         <form class="form-horizontal" id="redback-runtime-ldap-form-id">
928           <fieldset id="redback-runtime-ldap-form">
929             <div class="control-group">
930               <label for="ldap-host" class="control-label">
931                 ${$.i18n.prop('redback.runtime.ldap.host.label')}
932               </label>
933               <div class="controls">
934                 <input type="text" id="ldap-host" name="ldap-host" class="input-xlarge"
935                        data-bind="value: archivaRuntimeConfiguration().ldapConfiguration().hostName"/>
936               </div>
937             </div>
938             <div class="control-group">
939               <label for="ldap-port" class="control-label">
940                 ${$.i18n.prop('redback.runtime.ldap.port.label')}
941               </label>
942               <div class="controls">
943                 <input type="text" id="ldap-port" name="ldap-port" class="input-large"
944                        data-bind="value: archivaRuntimeConfiguration().ldapConfiguration().port"/>
945               </div>
946             </div>
947             <div class="control-group">
948               <label for="ldap-baseDn" class="control-label">
949                 ${$.i18n.prop('redback.runtime.ldap.baseDn.label')}
950               </label>
951               <div class="controls">
952                 <input type="text" id="ldap-baseDn" name="ldap-baseDn" class="input-xxlarge"
953                        data-bind="value: archivaRuntimeConfiguration().ldapConfiguration().baseDn"/>
954               </div>
955             </div>
956             <div class="control-group">
957               <label for="ldap-ssl" class="control-label">
958                 ${$.i18n.prop('redback.runtime.ldap.ssl.label')}
959               </label>
960               <div class="controls">
961                 <input type="checkbox" id="ldap-ssl" name="ldap-ssl"
962                        data-bind="checked: archivaRuntimeConfiguration().ldapConfiguration().ssl"/>
963               </div>
964             </div>
965             <div class="control-group">
966               <label for="ldap-password" class="control-label">
967                 ${$.i18n.prop('redback.runtime.ldap.password.label')}
968               </label>
969               <div class="controls">
970                 <input type="text" id="ldap-password" name="ldap-password" class="input-xlarge"
971                        data-bind="value: archivaRuntimeConfiguration().ldapConfiguration().password"/>
972               </div>
973             </div>
974             <div class="control-group">
975               <label for="ldap-context-factory" class="control-label">
976                 ${$.i18n.prop('redback.runtime.ldap.contextFactory.label')}
977               </label>
978               <div class="controls">
979                 <input type="text" id="ldap-context-factory" name="ldap-context-factory" class="input-xlarge"
980                        data-bind="value: archivaRuntimeConfiguration().ldapConfiguration().contextFactory"/>
981               </div>
982             </div>
983             <div class="control-group">
984               <label for="ldap-authenticationMethod" class="control-label">
985                 ${$.i18n.prop('redback.runtime.ldap.authenticationMethod.label')}
986               </label>
987               <div class="controls">
988                 <input type="text" id="ldap-authenticationMethod" name="ldap-authenticationMethod" class="input-xlarge"
989                        data-bind="value: archivaRuntimeConfiguration().ldapConfiguration().authenticationMethod"/>
990               </div>
991             </div>
992             <!-- TODO extraPropertiesEntries -->
993           </fieldset>
994         </form>
995       </div>
996     </div>
997
998     <div class="tab-pane" id="redback-runtime-properties-content">
999       <div class="well">
1000         <table>
1001           <thead>
1002             <tr>
1003               <th></th>
1004               <th>${$.i18n.prop('redback.runtime.properties.key.label')}</th>
1005               <th>${$.i18n.prop('redback.runtime.properties.value.label')}</th>
1006             </tr>
1007           </thead>
1008           <tbody>
1009             {{each(i, property) archivaRuntimeConfiguration().configurationPropertiesEntries}}
1010               <tr>
1011                 <td>
1012                   {{var key = property.key}}
1013                   <a class="popover-doc"
1014                      data-original-title="${$.i18n.prop('redback.runtime.properties.help.title')}"
1015                      data-content="${$.i18n.prop(key+'.help.content')}">
1016                     <span class="btn btn-info"><i class="icon-question-sign icon-white"></i></span>
1017                   </a>
1018                 </td>
1019                 <td><input type="text" class="input-xxlarge" value="${property.key}"></td>
1020                 <td><input type="text" class="input-xlarge" value="${property.value}"></td>
1021               </tr>
1022             {{/each}}
1023           </tbody>
1024
1025         </table>
1026       </div>
1027   </div>
1028
1029   <div>
1030     <button data-bind="click: saveArchivaRuntimeConfiguration,css:{ 'btn-warning': archivaRuntimeConfiguration().modified() | archivaRuntimeConfiguration().ldapConfiguration().modified()  }"
1031             id="archiva-runtime-configuration-save"class="btn">${$.i18n.prop('save')}</button>
1032   </div>
1033
1034 </script>
1035
1036 <script id="configurationPropertiesEntries-tmpl" type="text/html">
1037
1038 </script>
1039
1040 <script id="redback-runtime-general-content-usermanagers" type="text/html">
1041   <div class="well draggable-item">
1042     ${$data.description}
1043   </div>
1044 </script>