Версия 3.1 от Alexey Semenihin на 23.04.2025

Последние авторы
1 {{velocity}}
2 === Прикрепите вложения и используйте кнопки для навигации ===
3 #set($spaceRef = $doc.documentReference.lastSpaceReference.name)
4 #set($pageName = $doc.documentReference.name)
5 #set($docFullName = "${spaceRef}.${pageName}")
6 #set($attachments = $doc.getAttachmentList())
7 #set($itemsPerPage = 1)
8 #set($totalPages = ($attachments.size() + $itemsPerPage - 1) / $itemsPerPage)
9 #set($currentPage = 1)
10 #if("$!request.page" != "")
11 #set($currentPage = $mathtool.toInteger($request.page))
12 #end
13 #set($startIndex = ($currentPage - 1) * $itemsPerPage)
14 #set($endIndex = $startIndex + $itemsPerPage - 1)
15 #if($endIndex >= $attachments.size())
16 #set($endIndex = $attachments.size() - 1)
17 #end
18 {{html}}
19 <div class="navigation-controls">
20 #if($attachments && !$attachments.isEmpty())
21 <!-- Выпадающий список для выбора вложения -->
22 <div class="attachment-selector">
23 <label for="attachment-select">Выберите вложение:</label>
24 <select id="attachment-select">
25 #foreach($attachment in $attachments)
26 <option value="$attachment.filename" #if($velocityCount == $currentPage)selected#end>
27 $attachment.filename
28 </option>
29 #end
30 </select>
31 </div>
32 <!-- Пагинация -->
33 <div class="pagination-controls">
34 #if($currentPage > 1)
35 #set($prevPage = $currentPage - 1)
36 <a href="$doc.getURL('view', "page=${prevPage}")" class="btn btn-primary">Назад</a>
37 #else
38 <span class="btn btn-disabled">Назад</span>
39 #end
40
41 <span class="page-info">Страница $currentPage из $totalPages</span>
42
43 #if($currentPage < $totalPages)
44 #set($nextPage = $currentPage + 1)
45 <a href="$doc.getURL('view', "page=${nextPage}")" class="btn btn-primary">Далее</a>
46 #else
47 <span class="btn btn-disabled">Далее</span>
48 #end
49 </div>
50 #else
51 <div class="no-attachments-message">
52 Нет прикрепленных вложений. Пожалуйста, добавьте файлы для просмотра.
53 </div>
54 #end
55 </div>
56 {{/html}}
57 #if($attachments && !$attachments.isEmpty())
58 #foreach($i in [$startIndex..$endIndex])
59 #set($attachment = $attachments.get($i))
60 #set($filename = $attachment.filename)
61 #set($fileurl = $doc.getAttachmentURL($filename, "download"))
62 #set($fileExtension = $filename.substring($filename.lastIndexOf('.') + 1).toLowerCase())
63
64 === Документ: $filename ===
65
66 {{html}}
67 <div class="document-viewer-container" id="document-viewer">
68 #if($fileExtension == 'pdf')
69 <!-- PDF Viewer -->
70 <iframe
71 id="document-frame"
72 src="/resources/pdfjs/web/viewer.html?file=${escapetool.url($fileurl)}"
73 width="100%"
74 height="600px">
75 </iframe>
76 #elseif($fileExtension == 'doc' || $fileExtension == 'docx' || $fileExtension == 'ppt' || $fileExtension == 'pptx' || $fileExtension == 'xls' || $fileExtension == 'xlsx')
77 <!-- Office Viewer -->
78 #set($officeViewerUrl = "${doc.getURL('view')}?xpage=office&attachment=${escapetool.url($filename)}")
79 <iframe
80 id="document-frame"
81 src="$officeViewerUrl"
82 width="100%"
83 height="600px">
84 </iframe>
85 #else
86 <div class="unsupported-format">
87 Формат файла (${fileExtension}) не поддерживается для просмотра.
88 <a href="${fileurl}">Скачать файл</a>
89 </div>
90 #end
91 </div>
92 {{/html}}
93 #end
94 #else
95 {{html}}
96 <div class="no-attachments-message">
97 Нет доступных вложений для отображения.
98 </div>
99 {{/html}}
100 #end
101 {{html}}
102 <style>
103 .navigation-controls {
104 display: flex;
105 flex-direction: column;
106 gap: 15px;
107 margin-bottom: 20px;
108 }
109 .attachment-selector {
110 display: flex;
111 align-items: center;
112 gap: 10px;
113 }
114 .attachment-selector select {
115 padding: 8px;
116 border-radius: 4px;
117 min-width: 300px;
118 }
119 .document-viewer-container {
120 margin: 20px 0;
121 border: 1px solid #eee;
122 padding: 10px;
123 background: #f9f9f9;
124 }
125 .pagination-controls {
126 margin: 20px 0;
127 display: flex;
128 justify-content: center;
129 align-items: center;
130 gap: 20px;
131 }
132 .btn {
133 padding: 8px 16px;
134 border-radius: 4px;
135 text-decoration: none;
136 }
137 .btn-primary {
138 background-color: #3366cc;
139 color: white;
140 }
141 .btn-disabled {
142 background-color: #eee;
143 color: #999;
144 cursor: not-allowed;
145 }
146 .page-info {
147 font-weight: bold;
148 }
149 .unsupported-format {
150 padding: 20px;
151 text-align: center;
152 color: #666;
153 }
154 .no-attachments-message {
155 padding: 20px;
156 text-align: center;
157 color: #666;
158 font-style: italic;
159 border: 1px dashed #ccc;
160 background-color: #f5f5f5;
161 }
162 </style>
163 <script>
164 //<![CDATA[
165 document.addEventListener('DOMContentLoaded', function() {
166 const select = document.getElementById('attachment-select');
167 const viewerContainer = document.getElementById('document-viewer');
168
169 if (select && viewerContainer) {
170 select.addEventListener('change', function() {
171 const filename = this.value;
172 const fileExtension = filename.split('.').pop().toLowerCase();
173 const fileurl = "${doc.getURL('download')}" + "/" + encodeURIComponent(filename);
174 const pdfViewerUrl = "/resources/pdfjs/web/viewer.html?file=" + encodeURIComponent(fileurl);
175 const baseUrl = "${doc.getURL('view')}";
176
177 let viewerHtml = '';
178
179 if (fileExtension === 'pdf') {
180 viewerHtml = '<iframe id="document-frame" ' +
181 'src="' + pdfViewerUrl + '" ' +
182 'width="100%" height="600px"></iframe>';
183 } else if (['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx'].indexOf(fileExtension) >= 0) {
184 viewerHtml = '<iframe id="document-frame" ' +
185 'src="' + baseUrl + '?xpage=office&attachment=' + encodeURIComponent(filename) + '" ' +
186 'width="100%" height="600px"></iframe>';
187 } else {
188 viewerHtml = '<div class="unsupported-format">' +
189 'Формат файла (' + fileExtension + ') не поддерживается для просмотра. ' +
190 '<a href="' + fileurl + '">Скачать файл</a></div>';
191 }
192
193 viewerContainer.innerHTML = viewerHtml;
194
195 // Обновляем заголовок документа
196 const titleElement = viewerContainer.previousElementSibling;
197 if (titleElement && titleElement.tagName === 'H3') {
198 titleElement.textContent = 'Документ: ' + filename;
199 }
200 });
201 }
202 });
203 //]]>
204 </script>
205 {{/html}}
206 {{/velocity}}