Improve image editing.
[Sone.git] / src / main / resources / templates / imageBrowser.html
1 <%include include/head.html>
2
3         <div class="page-id hidden">image-browser</div>
4
5         <script language="javascript">
6                 $(function() {
7
8                         /* hide all those forms. */
9                         hideAndShowBlock = function(blockElement, clickToShowElement, clickToHideElement) {
10                                 $(blockElement).hide();
11                                 $(clickToShowElement).removeClass("hidden");
12                                 $(clickToShowElement).click(function() {
13                                         $(blockElement).slideDown();
14                                         $(clickToShowElement).addClass("hidden");
15                                         $(clickToHideElement).removeClass("hidden");
16                                 });
17                                 $(clickToHideElement).click(function() {
18                                         $(blockElement).slideUp();
19                                         $(clickToHideElement).addClass("hidden");
20                                         $(clickToShowElement).removeClass("hidden");
21                                 });
22                         };
23
24                 });
25         </script>
26
27         <%if albumRequested>
28
29                 <%ifnull album>
30
31                         <p><%= Page.ImageBrowser.Album.Error.NotFound.Text|l10n|html></p>
32
33                 <%elseifnull album.title>
34
35                         <p><%= Page.ImageBrowser.Album.Error.NotFound.Text|l10n|html></p>
36
37                 <%else>
38
39                         <%if album.sone.local>
40                                 <script language="javascript">
41
42                                         /* ID of the image currently being edited. */
43                                         editingImageId = null;
44
45                                         /**
46                                          * Shows the form for editing an image.
47                                          *
48                                          * @param imageId The ID of the image to edit.
49                                          */
50                                         function editImage(imageId) {
51                                                 if (editingImageId != imageId) {
52                                                         cancelEditing();
53                                                 } else {
54                                                         return;
55                                                 }
56                                                 $(".show-data", "#image-" + imageId).hide();
57                                                 $(".edit-data", "#image-" + imageId).show();
58                                                 $(document).bind("click.sone", function(event) {
59                                                         console.log("event: " + event);
60                                                         console.log("closest: " + $(event.target).closest("#image-" + imageId));
61                                                         if ($(event.target).closest("#image-" + imageId).size() == 0) {
62                                                                 cancelEditing();
63                                                         }
64                                                 });
65                                         }
66
67                                         /**
68                                          * Cancels all image editing.
69                                          */
70                                         function cancelEditing() {
71                                                 $(".show-data").show();
72                                                 $(".edit-data").hide();
73                                                 $("form.edit-image").each(function() {
74                                                         this.reset();
75                                                 });
76                                                 $(document).unbind("click.sone");
77                                                 editingImageId = null;
78                                         }
79
80                                         $(function() {
81                                                 getTranslation("WebInterface.DefaultText.UploadImage.Title", function(text) {
82                                                         $("#upload-image :input[name='title']").each(function() {
83                                                                 registerInputTextareaSwap(this, text, "title", false, true);
84                                                         });
85                                                 });
86                                                 getTranslation("WebInterface.DefaultText.UploadImage.Description", function(text) {
87                                                         $("#upload-image :input[name='description']").each(function() {
88                                                                 registerInputTextareaSwap(this, text, "description", true, false);
89                                                         });
90                                                 });
91                                                 $("#upload-image label").hide();
92                                                 getTranslation("WebInterface.DefaultText.CreateAlbum.Name", function(text) {
93                                                         $("#create-album input[name='name']").each(function() {
94                                                                 registerInputTextareaSwap(this, text, "name", false, true);
95                                                         });
96                                                 });
97                                                 getTranslation("WebInterface.DefaultText.CreateAlbum.Description", function(text) {
98                                                         $("#create-album input[name='description']").each(function() {
99                                                                 registerInputTextareaSwap(this, text, "description", true, true);
100                                                         });
101                                                 });
102                                                 $("#create-album label").hide();
103                                                 getTranslation("WebInterface.DefaultText.EditAlbum.Title", function(text) {
104                                                         $("#edit-album input[name='title']").each(function() {
105                                                                 registerInputTextareaSwap(this, text, "title", false, true);
106                                                         });
107                                                 });
108                                                 getTranslation("WebInterface.DefaultText.EditAlbum.Description", function(text) {
109                                                         $("#edit-album :input[name='description']").each(function() {
110                                                                 registerInputTextareaSwap(this, text, "description", true, false);
111                                                         });
112                                                 });
113                                                 $("#edit-album label").hide();
114
115                                                 hideAndShowBlock(".edit-album", ".show-edit-album", ".hide-edit-album");
116                                                 hideAndShowBlock(".create-album", ".show-create-album", ".hide-create-album");
117                                                 hideAndShowBlock(".upload-image", ".show-upload-image", ".hide-upload-image");
118                                                 hideAndShowBlock(".delete-album", ".show-delete-album", ".hide-delete-album");
119
120                                                 $(".image").each(function() {
121                                                         $(".show-data", this).click(function() {
122                                                                 imageId = $(this).closest(".image").find(".image-id").text();
123                                                                 editImage(imageId);
124                                                         });
125                                                 });
126                                         });
127                                 </script>
128                         <%/if>
129
130                         <h1 class="backlink"><%= Page.ImageBrowser.Album.Title|l10n|replace needle='{album}' replacementKey=album.title|html></h1>
131
132                         <div class="backlinks">
133                                 <%foreach album.backlinks backlink backlinks>
134                                         <div class="backlink">
135                                                 <a href="<% backlink.target|html>"><% backlink.name|html></a>
136                                         </div>
137                                         <%if ! backlinks.last>
138                                                 <div class="separator">&gt;</div>
139                                         <%/if>
140                                 <%/foreach>
141                         </div>
142
143                         <p id="description"><% album.description|html></p>
144
145                         <%if album.sone.local>
146                                 <div class="show-edit-album hidden toggle-link"><a class="small-link">» <%= Page.ImageBrowser.Album.Edit.Title|l10n|html></a></div>
147                                 <div class="hide-edit-album hidden toggle-link"><a class="small-link">« <%= Page.ImageBrowser.Album.Edit.Title|l10n|html></a></div>
148                                 <div class="edit-album">
149                                         <h2><%= Page.ImageBrowser.Album.Edit.Title|l10n|html></h2>
150
151                                         <form id="edit-album" action="editAlbum.html" method="post">
152                                                 <input type="hidden" name="formPassword" value="<%formPassword|html>" />
153                                                 <input type="hidden" name="album" value="<%album.id|html>" />
154
155                                                 <%if ! album.images.empty>
156                                                         <div>
157                                                                 <label for="album-image"><%= Page.ImageBrowser.Album.Label.AlbumImage|l10n|html></label>
158                                                                 <select name="album-image">
159                                                                         <option disabled="disabled"><%= Page.ImageBrowser.Album.AlbumImage.Choose|l10n|html></option>
160                                                                         <%foreach album.images image>
161                                                                                 <option value="<% image.id|html>"<%if album.albumImage.id|match key=image.id> selected="selected"<%/if>><% image.title|html></option>
162                                                                         <%/foreach>
163                                                                 </select>
164                                                         </div>
165                                                 <%/if>
166                                                 <div>
167                                                         <label for="title"><%= Page.ImageBrowser.Album.Label.Title|l10n|html></label>
168                                                         <input type="text" name="title" value="<%album.title|html>" />
169                                                 </div>
170                                                 <div>
171                                                         <label for="description"><%= Page.ImageBrowser.Album.Label.Description|l10n|html></label>
172                                                         <textarea name="description"><%album.description|html></textarea>
173                                                 </div>
174                                                 <button type="submit"><%= Page.ImageBrowser.Album.Button.Save|l10n|html></button>
175                                         </form>
176                                 </div>
177                         <%/if>
178
179                         <%foreach album.albums album>
180                                 <%first><h2><%= Page.ImageBrowser.Header.Albums|l10n|html></h2><%/first>
181                                 <%if loop.count|mod divisor=3><div class="image-row"><%/if>
182                                 <div class="album image">
183                                         <div class="image-container">
184                                                 <a href="imageBrowser.html?album=<% album.id|html>" title="<% album.title|html>">
185                                                         <%ifnull album.albumImage>
186                                                                 <img src="images/unknown-image-0.png" width="266" height="200" alt="<% album.title|html>" title="<% album.title|html>" style="position: relative; top: 0px; left: -33px;" />
187                                                         <%else><!-- TODO -->
188                                                                 <% album.albumImage|image-link max-width=200 max-height=200 mode=enlarge title==album.title>
189                                                         <%/if>
190                                                 </a>
191                                         </div>
192                                         <div class="show-data">
193                                                 <div class="album-title"><% album.title|html></div>
194                                                 <div class="album-description"><% album.description|html></div>
195                                         </div>
196                                 </div>
197                                 <%= false|store key=endRow>
198                                 <%if loop.count|mod divisor=3 offset=1><%= true|store key=endRow><%/if>
199                                 <%last><%= true|store key=endRow><%/last>
200                                 <%if endRow></div><%/if>
201                         <%/foreach>
202
203                         <%if album.sone.local>
204                                 <div class="show-create-album hidden toggle-link"><a class="small-link">» <%= View.CreateAlbum.Title|l10n|html></a></div>
205                                 <div class="hide-create-album hidden toggle-link"><a class="small-link">« <%= View.CreateAlbum.Title|l10n|html></a></div>
206                                 <div class="create-album">
207                                         <%include include/createAlbum.html>
208                                 </div>
209                         <%/if>
210
211                         <%foreach album.images image>
212                                 <%first><h2><%= Page.ImageBrowser.Header.Images|l10n|html></h2><%/first>
213                                 <%if loop.count|mod divisor=3><div class="image-row"><%/if>
214                                 <div id="image-<% image.id|html>" class="image">
215                                         <div class="image-id hidden"><% image.id|html></div>
216                                         <div class="image-container">
217                                                 <a href="imageBrowser.html?image=<%image.id|html>"><% image|image-link max-width=200 max-height=200 mode=enlarge title==image.title></a>
218                                         </div>
219                                         <div class="show-data">
220                                                 <div class="image-title"><% image.title|html></div>
221                                                 <div class="image-description"><% image.description|html></div>
222                                         </div>
223                                         <%if album.sone.local>
224                                                 <form class="edit-image" action="editImage.html" method="post">
225                                                         <input type="hidden" name="formPassword" value="<%formPassword|html>" />
226                                                         <input type="hidden" name="returnPage" value="<%request.uri|html>" />
227                                                         <input type="hidden" name="image" value="<%image.id|html>" />
228
229                                                         <div class="edit-data hidden">
230                                                                 <div>
231                                                                         <input type="text" name="title" value="<%image.title|html>" />
232                                                                 </div>
233                                                                 <div>
234                                                                         <textarea name="description"><%image.description|html></textarea>
235                                                                 </div>
236                                                                 <div>
237                                                                         <%notfirst><button type="submit" name="moveLeft" value="true"><%= Page.ImageBrowser.Image.Button.MoveLeft|l10n|html></button><%/notfirst>
238                                                                         <button type="submit"><%= Page.ImageBrowser.Image.Button.Save|l10n|html></button>
239                                                                         <%notlast><button type="submit" name="moveRight" value="true"><%= Page.ImageBrowser.Image.Button.MoveRight|l10n|html></button><%/notlast>
240                                                                 </div>
241                                                         </div>
242                                                 </form>
243                                         <%/if>
244                                 </div>
245                                 <%= false|store key=endRow>
246                                 <%if loop.count|mod divisor=3 offset=1><%= true|store key=endRow><%/if>
247                                 <%last><%= true|store key=endRow><%/last>
248                                 <%if endRow></div><%/if>
249                         <%/foreach>
250
251                         <%if album.sone.local>
252                                 <div class="show-upload-image hidden toggle-link"><a class="small-link">» <%= View.UploadImage.Title|l10n|html></a></div>
253                                 <div class="hide-upload-image hidden toggle-link"><a class="small-link">« <%= View.UploadImage.Title|l10n|html></a></div>
254                                 <div class="upload-image">
255                                         <%include include/uploadImage.html>
256                                 </div>
257
258                                 <%if album.empty>
259                                         <div class="show-delete-album hidden toggle-link"><a class="small-link">» <%= Page.ImageBrowser.Album.Delete.Title|l10n|html></a></div>
260                                         <div class="hide-delete-album hidden toggle-link"><a class="small-link">« <%= Page.ImageBrowser.Album.Delete.Title|l10n|html></a></div>
261                                         <div class="delete-album">
262                                                 <form id="delete-album" action="deleteAlbum.html" method="get">
263                                                         <input type="hidden" name="album" value="<%album.id|html>" />
264                                                         <button type="submit"><%= Page.ImageBrowser.Album.Button.Delete|l10n|html></button>
265                                                 </form>
266                                         </div>
267                                 <%/if>
268
269                         <%/if>
270
271                 <%/if>
272
273         <%elseif imageRequested>
274
275                 <h1 class="backlink"><%image.title|html></h1>
276
277                 <div class="backlinks">
278                         <%foreach image.album.backlinks backlink backlinks>
279                                 <div class="backlink">
280                                         <a href="<% backlink.target|html>"><% backlink.name|html></a>
281                                 </div>
282                                 <%if ! backlinks.last>
283                                         <div class="separator">&gt;</div>
284                                 <%/if>
285                         <%/foreach>
286                 </div>
287
288                 <%ifnull image>
289
290                 <%else>
291
292                         <%if image.sone.local>
293                                 <script language="javascript">
294                                         $(function() {
295                                                 getTranslation("WebInterface.DefaultText.EditImage.Title", function(text) {
296                                                         $("#edit-image input[name='title']").each(function() {
297                                                                 registerInputTextareaSwap(this, text, "title", false, true);
298                                                         });
299                                                 });
300                                                 getTranslation("WebInterface.DefaultText.EditImage.Description", function(text) {
301                                                         $("#edit-image :input[name='description']").each(function() {
302                                                                 registerInputTextareaSwap(this, text, "description", true, false);
303                                                         });
304                                                 });
305                                                 $("#edit-image label").hide();
306
307                                                 hideAndShowBlock(".edit-image", ".show-edit-image", ".hide-edit-image");
308                                                 hideAndShowBlock(".delete-image", ".show-delete-image", ".hide-delete-image");
309                                         });
310                                 </script>
311                         <%/if>
312
313                         <div class="single-image">
314                                 <%ifnull !image.key>
315                                         <a href="/<%image.key|html>"><% image|image-link max-width=640 max-height=480></a>
316                                 <%else>
317                                         <a href="imageBrowser.html?image=<%image.id|html>"><% image|image-link max-width=640 max-height=480></a>
318                                 <%/if>
319                         </div>
320
321                         <p class="parsed"><%image.description|parse sone=image.sone></p>
322
323                         <%if image.sone.local>
324
325                                 <div class="show-edit-image hidden toggle-link"><a class="small-link">» <%= Page.ImageBrowser.Image.Edit.Title|l10n|html></a></div>
326                                 <div class="hide-edit-image hidden toggle-link"><a class="small-link">« <%= Page.ImageBrowser.Image.Edit.Title|l10n|html></a></div>
327                                 <div class="edit-image">
328                                         <h2><%= Page.ImageBrowser.Image.Edit.Title|l10n|html></h2>
329
330                                         <form id="edit-image" action="editImage.html" method="post">
331                                                 <input type="hidden" name="formPassword" value="<%formPassword|html>" />
332                                                 <input type="hidden" name="returnPage" value="<%request.uri|html>" />
333                                                 <input type="hidden" name="image" value="<%image.id|html>" />
334
335                                                 <div>
336                                                         <label for="title"><%= Page.ImageBrowser.Image.Title.Label|l10n|html></label>
337                                                         <input type="text" name="title" value="<%image.title|html>" />
338                                                 </div>
339                                                 <div>
340                                                         <label for="description"><%= Page.ImageBrowser.Image.Description.Label|l10n|html></label>
341                                                         <textarea name="description"><%image.description|html></textarea>
342                                                 </div>
343                                                 <div>
344                                                         <button type="submit"><%= Page.ImageBrowser.Image.Button.Save|l10n|html></button>
345                                                 </div>
346                                         </form>
347                                 </div>
348
349                                 <div class="show-delete-image hidden toggle-link"><a class="small-link">» <%= Page.ImageBrowser.Image.Delete.Title|l10n|html></a></div>
350                                 <div class="hide-delete-image hidden toggle-link"><a class="small-link">« <%= Page.ImageBrowser.Image.Delete.Title|l10n|html></a></div>
351                                 <div class="delete-image">
352                                         <h2><%= Page.ImageBrowser.Image.Delete.Title|l10n|html></h2>
353
354                                         <form id="delete-image" action="deleteImage.html" method="get">
355                                                 <input type="hidden" name="image" value="<%image.id|html>" />
356                                                 <button type="submit"><%= Page.ImageBrowser.Image.Button.Delete|l10n|html></button>
357                                         </form>
358                                 </div>
359
360                         <%/if>
361
362                 <%/if>
363
364         <%elseif soneRequested>
365
366                 <%if sone.local>
367                         <script language="javascript">
368                                 $(function() {
369                                         getTranslation("WebInterface.DefaultText.CreateAlbum.Name", function(text) {
370                                                 $("#create-album input[name='name']").each(function() {
371                                                         registerInputTextareaSwap(this, text, "name", false, true);
372                                                 });
373                                         });
374                                         getTranslation("WebInterface.DefaultText.CreateAlbum.Description", function(text) {
375                                                 $("#create-album input[name='description']").each(function() {
376                                                         registerInputTextareaSwap(this, text, "description", true, true);
377                                                 });
378                                         });
379                                         $("#create-album label").hide();
380
381                                         hideAndShowBlock(".create-album", ".show-create-album", ".hide-create-album");
382                                 });
383                         </script>
384                 <%/if>
385
386                 <%ifnull sone>
387
388                         <p><%= Page.ImageBrowser.Sone.Error.NotFound.Text|l10n|html></p>
389
390                 <%else>
391
392                         <h1><%= Page.ImageBrowser.Sone.Title|l10n|replace needle='{sone}' replacementKey=sone.niceName|html></h1>
393
394                         <%foreach sone.albums album>
395                                 <%if loop.count|mod divisor=3><div class="image-row"><%/if>
396                                 <div class="album image">
397                                         <div class="image-container">
398                                                 <a href="imageBrowser.html?album=<% album.id|html>" title="<% album.title|html>">
399                                                         <%ifnull album.albumImage>
400                                                                 <img src="images/unknown-image-0.png" width="266" height="200" alt="<% album.title|html>" title="<% album.title|html>" style="position: relative; top: 0px; left: -33px;"/>
401                                                         <%else><!-- TODO -->
402                                                                 <% album.albumImage|image-link max-width=200 max-height=200 mode=enlarge title==album.title>
403                                                         <%/if>
404                                                 </a>
405                                         </div>
406                                         <div class="show-data">
407                                                 <div class="album-title"><% album.title|html></div>
408                                                 <div class="album-description"><% album.description|html></div>
409                                         </div>
410                                 </div>
411                                 <%= false|store key=endRow>
412                                 <%if loop.count|mod divisor=3 offset=1><%= true|store key=endRow><%/if>
413                                 <%last><%= true|store key=endRow><%/last>
414                                 <%if endRow></div><%/if>
415                         <%/foreach>
416
417                         <%if sone.local>
418                                 <div class="show-create-album hidden toggle-link"><a class="small-link">» <%= View.CreateAlbum.Title|l10n|html></a></div>
419                                 <div class="hide-create-album hidden toggle-link"><a class="small-link">« <%= View.CreateAlbum.Title|l10n|html></a></div>
420                                 <div class="create-album">
421                                         <%include include/createAlbum.html>
422                                 </div>
423                         <%/if>
424
425                 <%/if>
426
427         <%/if>
428
429 <%include include/tail.html>