]> source.dussan.org Git - archiva.git/blob
f85739b6af098870df0d1abe425b6302df3a3757
[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-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
315     </form>
316 </script>
317
318 <script id="ui-configuration-screen" type="text/html">
319   <div class="page-header">
320     <h4>${$.i18n.prop('ui-configuration.header')}</h4>
321   </div>
322   <div id="ui-configuration-form" data-bind='template: {name:"ui-configuration-form-tmpl"}'></div>
323 </script>
324
325 <script id="ui-configuration-form-tmpl" type="text/html">
326     <form id="ui-configuration-edit-form" class="well form-horizontal">
327       <fieldset id="ui-configuration-edit-fieldset">
328         <div class="control-group">
329           <label class="control-label" for="maxTotal">${$.i18n.prop('ui-configuration.applicationUrl')}</label>
330           <div class="controls">
331             <input type="text" class="xlarge required digits" id="applicationUrl" name="applicationUrl" size="8"
332                    data-bind="value: uiConfiguration().applicationUrl"/>
333           </div>
334         </div>
335       </fieldset>
336       <button id="ui-configuration-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
337     </form>
338 </script>
339
340 <script id="system-status-main" type="text/html">
341   <div class="page-header">
342     <h4>${$.i18n.prop('system-status.header.version.info')}</h4>
343   </div>
344   <div id="status_version_info">
345     <img src="images/small-spinner.gif"/>
346   </div>
347   <div class="page-header">
348     <h3>${$.i18n.prop('system-status.header.main')}&nbsp;<a href="#" onclick="refreshSystemStatus()"><img src="images/view-refresh-22-22.png"/></a></h3>
349   </div>
350   <div class="page-header">
351     <h4>${$.i18n.prop('system-status.header.queues')}</h4>
352   </div>
353   <div id="status_queues">
354     <img src="images/small-spinner.gif"/>
355   </div>
356
357   <div class="page-header">
358     <h4>${$.i18n.prop('system-status.header.scanning')}&nbsp;<a href="#" onclick="displayScanningStats()"><img src="images/view-refresh.png"/></a></h4>
359   </div>
360   <div id="status_scanning">
361     <img src="images/small-spinner.gif"/>
362   </div>
363
364   <div class="page-header">
365     <h4>${$.i18n.prop('system-status.header.caches')}&nbsp;<a href="#" onclick="displayCacheEntries()"><img src="images/view-refresh.png"/></a></h4>
366   </div>
367   <div id="status_caches">
368       <img src="images/small-spinner.gif"/>
369   </div>
370
371   <div class="page-header">
372     <h4>${$.i18n.prop('system-status.header.memory')}&nbsp;<a href="#" onclick="displayMemoryUsage()"><img src="images/view-refresh.png"/></a></h4>
373   </div>
374   <div id="status_memory_info">
375     <img src="images/small-spinner.gif"/>
376   </div>
377
378   <div class="page-header">
379     <h4>${$.i18n.prop('system-status.header.current.time')}</h4>
380   </div>
381   <div id="status_current_time">
382     <img src="images/small-spinner.gif"/>
383   </div>
384
385 </script>
386
387 <script id="status_caches_tmpl" type="text/html">
388   <a href="#" class="btn btn-warning" onclick="flushAllCaches()">
389     ${$.i18n.prop('system-status.caches.flushAll')}
390   </a>
391   <table class="table table-condensed">
392     <thead>
393       <tr>
394         <th>${$.i18n.prop('system-status.caches.grid.header.key')}</th>
395         <th>${$.i18n.prop('system-status.caches.grid.header.size')}</th>
396         <th>${$.i18n.prop('system-status.caches.grid.header.cacheHits')}</th>
397         <th>${$.i18n.prop('system-status.caches.grid.header.cacheMiss')}</th>
398         <th>${$.i18n.prop('system-status.caches.grid.header.cacheHitRate')}</th>
399         <th>${$.i18n.prop('system-status.caches.grid.header.flush')}</th>
400       </tr>
401     </thead>
402     <tbody>
403     {{each(i,cacheEntry) cacheEntries}}
404       <tr>
405         <td>${cacheEntry.key}</td>
406         <td>${cacheEntry.size}</td>
407         <td>${cacheEntry.cacheHits}</td>
408         <td>${cacheEntry.cacheMiss}</td>
409         <td>${cacheEntry.cacheHitRate}</td>
410         <td>
411           <a href="#" onclick="flushCache('${cacheEntry.key}')">
412             {{if  cacheEntry.size > 0 }}
413               <img src="images/user-trash-full.png"/>
414             {{else}}
415               <img src="images/user-trash.png"/>
416             {{/if}}
417           </a>
418         </td>
419       </tr>
420     {{/each}}
421     </tbody>
422   </table>
423 </script>
424
425
426 <script id="status_queues_tmpl" type="text/html">
427   <table class="table table-condensed">
428     <thead>
429       <tr>
430         <th>${$.i18n.prop('system-status.queues.grid.header.key')}</th>
431         <th>${$.i18n.prop('system-status.queues.grid.header.size')}</th>
432       </tr>
433     </thead>
434     <tbody>
435     {{each(i,queueEntry) queueEntries}}
436       <tr>
437         <td>${queueEntry.key}</td>
438         <td>${queueEntry.entriesNumber}</td>
439       </tr>
440     {{/each}}
441     </tbody>
442   </table>
443 </script>
444
445 <script id="status_scanning_tmpl" type="text/html">
446   {{if repositoryScannerStatisticsList.length == 0}}
447     <h5>No scans in progress.</h5>
448   {{else}}
449     <table class="table table-condensed">
450       <thead>
451         <tr>
452           <th>${$.i18n.prop('system-status.scanning.grid.header.repository')}</th>
453           <th>${$.i18n.prop('system-status.scanning.grid.header.files.processed')}</th>
454           <th>${$.i18n.prop('system-status.scanning.grid.header.files.new')}</th>
455           <th>${$.i18n.prop('system-status.scanning.grid.header.stats')}</th>
456         </tr>
457       </thead>
458       <tbody>
459       {{each(i,repositoryScannerStatistics) repositoryScannerStatisticsList}}
460         <tr>
461           <td>${repositoryScannerStatistics.managedRepository.name()}</td>
462           <td>${repositoryScannerStatistics.totalFileCount}</td>
463           <td>${repositoryScannerStatistics.newFileCount}</td>
464           <td>
465             <blockquote>
466             <table>
467               <thead>
468                 <tr>
469                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.name')}</th>
470                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.total')}</th>
471                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.average')} ms</th>
472                   <th>${$.i18n.prop('system-status.scanning.consumers.grid.header.invocations.time')}</th>
473                 </tr>
474               </thead>
475               <tbody>
476                 {{each(j,consumerScanningStatistics) repositoryScannerStatistics.consumerScanningStatisticsList}}
477                 <tr>
478                   <td>${consumerScanningStatistics.consumerKey}</td>
479                   <td>${consumerScanningStatistics.count}</td>
480                   <td>${consumerScanningStatistics.average}ms</td>
481                   <td>${consumerScanningStatistics.time}ms</td>
482                 </tr>
483                 {{/each}}
484               </tbody>
485             </table>
486             </blockquote>
487           </td>
488         </tr>
489       {{/each}}
490       </tbody>
491     </table>
492   {{/if}}
493 </script>
494
495 <script id="changeAppearance" type="text/html">
496     <div class="page-header">
497         <h2>${$.i18n.prop('appearance-configuration.title-page')}</h2>
498     </div>
499
500     <h2>${$.i18n.prop('appearance-configuration.organisation-details')}</h2>
501
502     <p>
503         ${$.i18n.prop('apperance-configuration.details-description')}
504     </p>
505     
506     <form id="appearance-configuration-form-id" class="well form-horizontal">
507         <fieldset id="appearance-configuration-fielset-id">
508             <div class="control-group">
509                 <label class="control-label" for="name">${$.i18n.prop('appearance-configuration.name-label')}</label>
510                 <div class="controls">
511                     <input type="text" class="xlarge required" id="name" name="name" size="50"
512                            data-bind="value: organisationInformation().name"/>
513                 </div>
514             </div>
515             <div class="control-group">
516                 <label class="control-label" for="name">${$.i18n.prop('appearance-configuration.url-label')}</label>
517                 <div class="controls">
518                     <input type="text" class="xlarge required" id="url" name="url" size="50"
519                            data-bind="value: organisationInformation().url"/>
520                 </div>
521             </div>
522             <div class="control-group">
523                 <label class="control-label"
524                        for="name">${$.i18n.prop('appearance-configuration.logoLocation-label')}</label>
525                 <div class="controls">
526                     <input type="text" class="xlarge" id="logoLocation" name="logoLocation" size="50"
527                            data-bind="value: organisationInformation().logoLocation"/>
528                 </div>
529             </div>
530         </fieldset>
531         <button id="appearance-configuration-btn-save" data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
532     </form>
533 </script>
534
535
536 <script id="file-upload-screen" type="text/html">
537   <div id="file-upload-main" data-bind='template:{name:"file-upload-tmpl"}'></div>
538 </script>
539
540 <script id="file-upload-tmpl" type="text/html">
541   <div class="page-header">
542     <h3>${$.i18n.prop('fileupload.header')}</h3>
543   </div>
544   <form id="fileupload" action="restServices/archivaUiServices/fileUploadService" method="POST"
545         enctype="multipart/form-data" class="well form-horizontal">
546
547     <fieldset id="network-proxy-edit-fieldset">
548       <div class="control-group">
549         <label class="control-label" for="repositoryId">${$.i18n.prop('fileupload.repositoryId')}</label>
550         <div class="controls">
551           <select id="repositoryId"
552                     data-bind="options: managedRepositories, optionsText: 'name',optionsValue:'id',
553                      value: repositoryId"></select>
554          </div>
555         </div>
556       <div class="control-group">
557         <label class="control-label" for="groupId">${$.i18n.prop('fileupload.groupId')}</label>
558         <div class="controls">
559           <input type="text" class="xlarge required" data-bind="value: groupId" id="groupId" name="groupId" size="10" />
560           </div>
561         </div>
562       </div>
563       <div class="control-group">
564         <label class="control-label" for="artifactId">${$.i18n.prop('fileupload.artifactId')}</label>
565         <div class="controls">
566           <input type="text" class="xlarge required" data-bind="value: artifactId" id="artifactId" name="artifactId" size="10" />
567           </div>
568         </div>
569       </div>
570       <div class="control-group">
571         <label class="control-label" for="version">${$.i18n.prop('fileupload.version')}</label>
572         <div class="controls">
573           <input type="text" class="xlarge required" data-bind="value: version" id="version" name="version" size="10" />
574           </div>
575         </div>
576       </div>
577       <div class="control-group">
578         <label class="control-label" for="packaging">${$.i18n.prop('fileupload.packaging')}</label>
579         <div class="controls">
580           <input type="text" class="xlarge required" data-bind="value: packaging" id="packaging" name="packaging" size="10" />
581           </div>
582         </div>
583       </div>
584       <div class="control-group">
585         <label class="control-label" for="generatePom">${$.i18n.prop('fileupload.generatePom')}</label>
586         <div class="controls">
587           <input type="checkbox" class="xlarge" data-bind="value: generatePom" id="generatePom" name="generatePom" />
588           </div>
589         </div>
590       </div>
591     </fieldset>
592
593     <div class="row-fluid fileupload-buttonbar">
594       <div class="span7">
595         <span class="btn btn-success fileinput-button">
596           <i class="icon-plus icon-white"></i>
597           <span>${$.i18n.prop('fileupload.file.choose')}</span>
598           <input type="file" name="files[]" multiple="">
599         </span>
600         <button type="submit" class="btn btn-primary start">
601           <i class="icon-upload icon-white"></i>
602           <span>${$.i18n.prop('fileupload.start')}</span>
603         </button>
604         <button type="reset" class="btn btn-warning cancel">
605           <i class="icon-ban-circle icon-white"></i>
606           <span>${$.i18n.prop('fileupload.cancel')}</span>
607         </button>
608         <button type="button" class="btn btn-danger delete">
609           <i class="icon-trash icon-white"></i>
610           <span>${$.i18n.prop('fileupload.delete')}</span>
611         </button>
612         <input type="checkbox" class="toggle">
613       </div>
614       <div class="span5">
615         <div class="progress progress-success progress-striped active">
616           <div class="bar" style="width:0%;"></div>
617         </div>
618       </div>
619     </div>
620     <div>
621       <a href="#" id="fileupload-save-files">
622         <span class="btn btn-info" data-bind='click: saveArtifacts'>
623           <i class="icon-file icon-white"></i>
624           <span>${$.i18n.prop('fileupload.save')}</span>
625         </span>
626       </a>
627     </div>
628     <div class="fileupload-loading"></div>
629     <br>
630     <table class="table table-striped">
631       <tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody>
632     </table>
633 </form>
634
635 </script>
636
637
638 <script id="template-upload" type="text/html">
639   {% for (var i=0, file; file=o.files[i]; i++) { %}
640     <tr class="template-upload">
641       <td class="name"><span>{%=file.name%}</span></td>
642       <td><input type="text" id="classifier" name="classifier" placeholder="classifier" value=""/></td>
643       <td><span>pomFile:</span><input type="checkbox" id="pomFile" name="pomFile"/></td>
644       <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
645       {% if (file.error) { %}
646       <td class="error" colspan="2">
647         <span class="label label-important">{%=$.i18n.prop('fileupload.error')%}</span>
648         {%=$.i18n.prop('fileupload.errors.'+[file.error]) || file.error%}
649       </td>
650       {% } else if (o.files.valid && !i) { %}
651       <td>
652         <div class="progress progress-success progress-striped active">
653           <div class="bar" style="width:0%;"></div>
654         </div>
655       </td>
656       <td class="start">
657         {% if (!o.options.autoUpload) { %}
658         <button class="btn btn-primary">
659           <i class="icon-upload icon-white"></i>
660           <span>{%=$.i18n.prop('fileupload.start')%}</span>
661         </button>
662         {% } %}
663       </td>
664       {% } else { %}
665       <td colspan="2"></td>
666       {% } %}
667       <td class="cancel">
668       {% if (!i) { %}
669         <button class="btn btn-warning">
670           <i class="icon-ban-circle icon-white"></i>
671           <span>{%=$.i18n.prop('fileupload.cancel')%}</span>
672         </button>
673       {% } %}
674       </td>
675     </tr>
676   {% } %}
677 </script>
678
679 <script id="template-download" type="text/html">
680   {% for (var i=0, file; file=o.files[i]; i++) { %}
681   <tr class="template-download">
682       <td class="name"><span>{%=file.name%}</span></td>
683       <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
684     {% if (file.error) { %}
685       <td class="error" colspan="2">
686         <span class="label label-important">{%=$.i18n.prop('fileupload.error')%}</span>
687         {%=$.i18n.prop('fileupload.errors.'+[file.error]) || file.error%}
688       </td>
689     {% } else { %}
690       <td colspan="2"></td>
691     {% } %}
692       <td class="delete">
693         <button class="btn btn-danger" data-type="{%=file.deleteType%}"
694                 data-url="restServices/archivaUiServices/fileUploadService/{%=file.deleteUrl%}">
695           <i class="icon-trash icon-white"></i>
696           <span>{%=$.i18n.prop('fileupload.destroy')%}</span>
697         </button>
698         <input type="checkbox" name="delete" value="1">
699       </td>
700     </tr>
701 {% } %}
702 </script>