X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fresources%2Ftemplates%2FimageBrowser.html;h=b8b9cb204eb3b07a74b438ab205ccd2273f1d0bd;hp=72fd3406a9d7aa1f84687c921cbf7b271bfa45f3;hb=ffd92ca2374c0b2218e583d02e0bdd24b8c110ae;hpb=4345bd3c2e5997193d4df442db464b8775d8de66 diff --git a/src/main/resources/templates/imageBrowser.html b/src/main/resources/templates/imageBrowser.html index 72fd340..b8b9cb2 100644 --- a/src/main/resources/templates/imageBrowser.html +++ b/src/main/resources/templates/imageBrowser.html @@ -1,25 +1,266 @@ <%include include/head.html> + + + /* ID of the image currently being edited. */ + var editingImageId = null; - + /** + * Shows the form for editing an image. + * + * @param imageId The ID of the image to edit. + */ + function editImage(imageId) { + if (editingImageId != imageId) { + cancelImageEditing(); + } else { + return; + } + editingImageId = imageId; + $(".show-data", getImage(imageId)).hide(); + $(".edit-data", getImage(imageId)).show(); + $(document).bind("click.sone", function(event) { + if ($(event.target).closest("#image-" + imageId).size() == 0) { + cancelImageEditing(); + } + }); + } + + /** + * Cancels all image editing. + */ + function cancelImageEditing() { + $(".image .show-data").show(); + $(".image .edit-data").hide(); + $("form.edit-image").each(function() { + this.reset(); + }); + $(document).unbind("click.sone"); + editingImageId = null; + } + + /** + * Returns the image element with the given ID. + * + * @param imageId The ID of the image + * @return The image element + */ + function getImage(imageId) { + return $("#sone .image .image-id:contains('" + imageId + "')").closest(".image"); + } + + /** + * Swaps two images. + * + * @param sourceId The ID of the source image + * @param destinationId The ID of the destionation image + */ + function swapImage(sourceId, destinationId) { + sourceElement = getImage(sourceId); + destinationElement = getImage(destinationId); + sourceParent = sourceElement.closest(".image-row"); + sourcePrevSibling = sourceElement.prev(); + sourceElement.detach(); + destinationElement.before(sourceElement); + if (sourcePrevSibling.get(0) != destinationElement.get(0)) { + destinationElement.detach(); + (sourcePrevSibling.size() > 0) ? sourcePrevSibling.after(destinationElement) : sourceParent.prepend(destinationElement); + } + if ($("button[name='moveLeft']", sourceElement).hasClass("hidden") != $("button[name='moveLeft']", destinationElement).hasClass("hidden")) { + $("button[name='moveLeft']", sourceElement).toggleClass("hidden"); + $("button[name='moveLeft']", destinationElement).toggleClass("hidden"); + } + if ($("button[name='moveRight']", sourceElement).hasClass("hidden") != $("button[name='moveRight']", destinationElement).hasClass("hidden")) { + $("button[name='moveRight']", sourceElement).toggleClass("hidden"); + $("button[name='moveRight']", destinationElement).toggleClass("hidden"); + } + } + + /** + * Prepare all images for inline editing. + */ + function prepareImages() { + $(".image").each(function() { + imageId = $(this).closest(".image").find(".image-id").text(); + (function(element, imageId) { + $(".show-data", element).click(function() { + editImage(imageId); + }); + $("button[name='moveLeft'], button[name='moveRight']", element).click(function() { + ajaxGet("editImage.ajax", { "formPassword": getFormPassword(), "image": imageId, "moveLeft": this.name == "moveLeft", "moveRight": this.name == "moveRight" }, function(data) { + if (data && data.success) { + swapImage(data.sourceImageId, data.destinationImageId); + } + }); + return false; + }); + $("button[name='submit']", element).click(function() { + title = $(":input[name='title']:enabled", this.form).val(); + description = $(":input[name='description']:enabled", this.form).val(); + ajaxGet("editImage.ajax", { "formPassword": getFormPassword(), "image": imageId, "title": title, "description": description }, function(data) { + var imageElement = getImage(data.imageId); + var imageTitleInput = imageElement.find(":input[name='title']"); + var imageDescriptionInput = imageElement.find(":input[name='description']"); + if (data && data.success) { + imageElement.find(".image-title").text(data.title); + imageElement.find(".image-description").html(data.parsedDescription); + imageTitleInput.attr("defaultValue", data.title); + imageDescriptionInput.attr("defaultValue", data.description); + cancelImageEditing(); + } else if (data && !data.success) { + imageTitleInput.attr("value", imageTitleInput.attr("defaultValue")); + imageDescriptionInput.attr("value", imageDescriptionInput.attr("defaultValue")); + cancelImageEditing(); + } + }); + return false; + }); + })(this, imageId); + }); + } + + /* ID of the album currently being edited. */ + var editingAlbumId = null; + + /** + * Shows the form for editing an album. + * + * @param albumId The ID of the album to edit. + */ + function editAlbum(albumId) { + if (editingAlbumId != albumId) { + if (editingAlbumId != null) { + cancelAlbumEditing(); + } + } else { + console.log("already editing " + albumId); + return; + } + editingAlbumId = albumId; + $(".show-data", getAlbum(albumId)).hide(); + $(".edit-data", getAlbum(albumId)).show(); + console.log(getAlbum(albumId)); + $(document).bind("click.sone", function(event) { + if ($(event.target).closest("#album-" + albumId).size() == 0) { + cancelAlbumEditing(); + } + }); + } + + /** + * Cancels all album editing. + */ + function cancelAlbumEditing() { + console.log("cancel-album-edit"); + $(".album .show-data").show(); + $(".album .edit-data").hide(); + $("form.edit-album").each(function() { + this.reset(); + }); + $(document).unbind("click.sone"); + editingAlbumId = null; + } + + /** + * Returns the album element with the given ID. + * + * @param albumId The ID of the album + * @return The album element + */ + function getAlbum(albumId) { + return $("#sone .album .album-id:contains('" + albumId + "')").closest(".album"); + } + + /** + * Swaps two albums. + * + * @param sourceId The ID of the source album + * @param destinationId The ID of the destionation album + */ + function swapAlbum(sourceId, destinationId) { + sourceElement = getAlbum(sourceId); + destinationElement = getAlbum(destinationId); + sourceParent = sourceElement.closest(".album-row"); + sourcePrevSibling = sourceElement.prev(); + sourceElement.detach(); + destinationElement.before(sourceElement); + if (sourcePrevSibling.get(0) != destinationElement.get(0)) { + destinationElement.detach(); + (sourcePrevSibling.size() > 0) ? sourcePrevSibling.after(destinationElement) : sourceParent.prepend(destinationElement); + } + if ($("button[name='moveLeft']", sourceElement).hasClass("hidden") != $("button[name='moveLeft']", destinationElement).hasClass("hidden")) { + $("button[name='moveLeft']", sourceElement).toggleClass("hidden"); + $("button[name='moveLeft']", destinationElement).toggleClass("hidden"); + } + if ($("button[name='moveRight']", sourceElement).hasClass("hidden") != $("button[name='moveRight']", destinationElement).hasClass("hidden")) { + $("button[name='moveRight']", sourceElement).toggleClass("hidden"); + $("button[name='moveRight']", destinationElement).toggleClass("hidden"); + } + } + + /** + * Prepare all albums for inline editing. + */ + function prepareAlbums() { + $(".album").each(function() { + albumId = $(this).closest(".album").find(".album-id").text(); + (function(element, albumId) { + $(".show-data", element).click(function() { + console.log("show-data"); + editAlbum(albumId); + }); + $("button[name='moveLeft'], button[name='moveRight']", element).click(function() { + ajaxGet("editAlbum.ajax", { "formPassword": getFormPassword(), "album": albumId, "moveLeft": this.name == "moveLeft", "moveRight": this.name == "moveRight" }, function(data) { + if (data && data.success) { + swapAlbum(data.sourceAlbumId, data.destinationAlbumId); + } + }); + return false; + }); + $("button[name='submit']", element).click(function() { + title = $(":input[name='title']:enabled", this.form).val(); + description = $(":input[name='description']:enabled", this.form).val(); + ajaxGet("editAlbum.ajax", { "formPassword": getFormPassword(), "album": albumId, "title": title, "description": description }, function(data) { + if (data) { + var albumTitleField = getAlbum(data.albumId).find(".album-title"); + var albumDescriptionField = getAlbum(data.albumId).find(".album-description"); + if (data.success) { + albumTitleField.text(data.title); + albumDescriptionField.text(data.description); + getAlbum(data.albumId).find(":input[name='title']").attr("defaultValue", title); + getAlbum(data.albumId).find(":input[name='description']").attr("defaultValue", description); + } else { + albumTitleField.attr("value", albumTitleField.attr("defaultValue")); + albumDescriptionField.attr("value", albumDescriptionField.attr("defaultValue")); + } + cancelAlbumEditing(); + } + }); + return false; + }); + })(this, albumId); + }); + } + + <%if albumRequested> @@ -33,9 +274,63 @@ <%else> -

<%= Page.ImageBrowser.Album.Title|l10n|replace needle='{album}' replacementKey=album.title|html>

+ <%if album.sone.local> + + <%/if> + +

<%= Page.ImageBrowser.Album.Title|l10n|replace needle=='{album}' replacement=album.title|html>