PageSourceSearch

https://www.arinsal.co.uk/photos/arinsal/js/Gallery.min.js?v=1734565270

js arinsal.co.uk collected 2026-10-08 22:56:49 UTC 103,696 bytes, 1 lines download raw bytes

1var Gallery={Album:{}};Gallery.Album.InlineEditor=WCF.InlineEditor.extend({_fakeEditButton:null,_permissions:{},_redirectURL:"",_sortImagesURL:"",_execute:function(e,t){var i,a;if(!this._validate(e,t))return!1;switch(i=$("#"+e).data("albumID"),t){case"delete":a=this._redirectURL,WCF.System.Confirmation.show(WCF.Language.get("gallery.album.delete.confirmMessage"),(function(e){"confirm"===e&&new WCF.Action.Proxy({autoSend:!0,data:{actionName:"delete",className:"gallery\\data\\album\\AlbumAction",objectIDs:[i]},success:function(e,t,i){new WCF.System.Notification(WCF.Language.get("gallery.album.delete.success")).show((function(){window.location=a}))}})}));break;case"edit":this.getFakeEditButton(e).then((e=>{e.click()}));break;case"sortImages":window.location=this._sortImagesURL}},_getPermission:function(e){return this._permissions[e]?this._permissions[e]:0},_getTriggerElement:function(e){return e.find(".jsAlbumInlineEditor")},_setOptions:function(){this._options=[{label:WCF.Language.get("gallery.album.sortImages"),optionName:"sortImages"},{label:WCF.Language.get("gallery.album.delete"),optionName:"delete"},{optionName:"divider"},{label:WCF.Language.get("wcf.global.button.edit"),optionName:"edit",isQuickOption:!0}]},_validate:function(e,t){switch(t){case"delete":return!!this._getPermission("canDeleteAlbum");case"edit":return!!this._getPermission("canEditAlbum");case"sortImages":return!!this._getPermission("canSortImages")}return!1},getFakeEditButton:async function(e){return new Promise((t=>{null===this._fakeEditButton?(this._fakeEditButton=document.createElement("button"),this._fakeEditButton.dataset.endpointAdd=document.getElementById(e).dataset.endpointAdd,require(["WoltLabSuite/Gallery/Component/Album/Add"],(({setup:e})=>{e(this._fakeEditButton),t(this._fakeEditButton)})),this._fakeEditButton.addEventListener("album:created",(e=>{window.setTimeout((()=>{window.location=e.detail.link}),2e3)}))):t(this._fakeEditButton)}))},setPermission:function(e,t){this._permissions[e]=t},setPermissions:function(e){for(var t in e)this.setPermission(t,e[t])},setRedirectURL:function(e){this._redirectURL=e},setSortImagesURL:function(e){this._sortImagesURL=e}}),Gallery.Album.SortableImageList=Class.extend({_albumID:0,_offset:50,_proxy:null,init:function(e){this._albumID=e,this._offset=50,this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this)}),new WCF.Sortable.List("imageList","gallery\\data\\image\\ImageAction",0,{axis:"",placeholder:"galleryImage galleryImageTiny gallerySortableImagePlaceholder",toleranceElement:""},!0,{albumID:e}),$("#loadMoreImages").click($.proxy(this._loadMoreImages,this))},_loadMoreImages:function(){this._proxy.setOption("data",{actionName:"loadSortableImages",className:"gallery\\data\\album\\AlbumAction",objectIDs:[this._albumID],parameters:{offset:this._offset}}),this._proxy.sendRequest()},_success:function(e,t,i){$("#imageList > .gallerySortableImageList").append(e.returnValues.template).sortable("refresh"),50!=e.returnValues.count&&$("#loadMoreImages").remove(),this._offset+=50}}),Gallery.Image={},Gallery.Image.Browser=Class.extend({_dialog:null,_isOpen:!1,_elementId:"",_callbackInsertBbcode:void 0,init:function(){this._dialog=null,this._isOpen=!1,this._elementId="",this._callbackInsertBbcode=void 0},open:function(e,t){if(this._isOpen)return!1;this._elementId=e,this._callbackInsertBbcode=t,this._isOpen=!0,null===this._dialog?new WCF.Action.Proxy({autoSend:!0,data:{actionName:"getImageBrowser",className:"gallery\\data\\image\\UserImageAction",objectIDs:[WCF.User.userID]},success:$.proxy(this._initImageBrowser,this)}):(this._dialog.wcfDialog("open"),$(window).trigger("resize"))},_initImageBrowser:function(e,t,i){WCF.DOMNodeInsertedHandler.addCallback("Gallery.Image.Browser."+this._elementId,$.proxy(this._domNo
1deInserted,this)),this._dialog=$("<div />").hide().html(e.returnValues.template).appendTo(document.body),this._dialog.wcfDialog({onClose:$.proxy((function(){this._isOpen=!1}),this),title:WCF.Language.get("gallery.image.browser")}),new Gallery.Image.Browser.AlbumList.Loader(this),new Gallery.Image.Browser.ImageList.Loader(this),new Gallery.Image.Browser.Search.Loader(this),$(window).trigger("resize"),this._dialog.wcfDialog("render")},_insertBBCode:function(e){var t=$(e.currentTarget).data("bbcode");this._callbackInsertBbcode(t)},_domNodeInserted:function(){this._dialog.find(".jsGalleryImageBrowserInsertAlbum").removeClass("jsGalleryImageBrowserInsertAlbum").click($.proxy(this._insertBBCode,this));var e=this;this._dialog.find(".jsGalleryImageBrowserInsertImage").removeClass("jsGalleryImageBrowserInsertImage").each((function(t,i){var a=$(i);a.hasClass("dropdown")?WCF.Dropdown.getDropdownMenu(a.wcfIdentify()).find("li").click($.proxy(e._insertBBCode,e)):a.children("a").click($.proxy(e._insertBBCode,e))}))}}),Gallery.Image.Browser.Loader=Class.extend({_actionName:"loadImages",_cache:{},_imageBrowser:null,_list:null,_pagination:null,_pageNo:1,_pages:0,_previousPageNo:1,_proxy:null,init:function(e,t,i){this._actionName="loadImages",this._cache={},this._imageBrowser=e,this._list=$("#"+t),this._pagination=$("#"+i),this._pageNo=1,this._pages=0,this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this)}),this._previousPageNo=1},_showPage:function(e,t){t&&t.activePage&&(t.template||(this._previousPageNo=this._pageNo),this._pageNo=t.activePage),this._cache[this._pageNo]||t&&t.template?(this._cache[this._previousPageNo]=this._list.children().detach(),t&&t.template?this._list.html(t.template):this._list.append(this._cache[this._pageNo])):this._loadItems()},_getParameters:function(){return{data:{pageNo:this._pageNo}}},_loadItems:function(){this._proxy.setOption("data",{actionName:this._actionName,className:"gallery\\data\\image\\UserImageAction",parameters:this._getParameters()}),this._proxy.sendRequest()},_success:function(e,t,i){this._showPage(null,{activePage:e.returnValues.pageNo,template:e.returnValues.template})}}),Gallery.Image.Browser.AlbumList={},Gallery.Image.Browser.AlbumList.Loader=Gallery.Image.Browser.Loader.extend({init:function(e){this._super(e,"galleryImageBrowserAlbumList","galleryImageBrowserAlbumPagination"),this._actionName="loadAlbums",this._pagination.data("pages")>1&&this._pagination.wcfPages({maxPage:this._pagination.data("pages")}).on("wcfpagesswitched",$.proxy(this._showPage,this))}}),Gallery.Image.Browser.ImageList={},Gallery.Image.Browser.ImageList.Loader=Gallery.Image.Browser.Loader.extend({init:function(e){this._super(e,"galleryImageBrowserImageList .galleryImageBrowserContainerList","galleryImageBrowserImageListPagination"),this._pagination.data("pages")>1&&this._pagination.wcfPages({maxPage:this._pagination.data("pages")}).on("wcfpagesswitched",$.proxy(this._showPage,this))}}),Gallery.Image.Browser.Search={},Gallery.Image.Browser.Search.Handler=WCF.Search.Base.extend({_searchLoader:null,init:function(e){this._super("#galleryImageBrowserImageSearchInput",null,[],!1,!0),this._delay=500,this._searchLoader=e;var t=this._searchInput.parent().removeClass("dropdown");WCF.Dropdown.removeDropdown(t.wcfIdentify())},_keyUp:function(e){switch(e.which){case $.ui.keyCode.UP:case $.ui.keyCode.DOWN:return}this._super(e)},_queryServer:function(e){this._proxy.setOption("data",{actionName:"loadImages",className:"gallery\\data\\image\\UserImageAction",parameters:this._getParameters(e)}),this._proxy.sendRequest()},_getParameters:function(e){return e.data.pageNo=1,e},_success:function(e,t,i){this._searchLoader.handleSearchResult(e)},_clearList:function(e){e&&this._searchInput.val("")}}),Gallery.Image.Browser.Search.Loader=Gallery.Image.Browser.Loader.extend({_searchString:"",init:function(e){this._super(e,"galleryImageBrowserImageSearchResultList","galleryImageBrowserImageSearchResultPagination"),this._list.hide(),new Gallery.Image.Browser.Search.Handler(this)},handleSearchResult:function(e){this._pages>1&&this._pagination.wcfPages("destroy"),this._pageNo=1,this._pages=e.returnValues.pages,this._searchString=e.returnValues.searchString,this._pagination.empty(),this._pages>1&&this._pagination.wcfPages({maxPage:this._pages}).on("wcfpagesswitched",$.proxy(this._showPage,this)),this._list.empty().hide().next("p").remove(),this._pages?(this._list.html(e.returnValues.template).show(),WCF.DOMNodeInsertedHandler.execute()):$('<p class="info">'+e.returnValues.errorMessage+"</p>").insertAfter(this._list)},_getParameters:function(){var e=this._super();return e.data.searchString=this._searchString,e}}),Gallery.Image.AlbumNavigation=Class.extend({_activeImage:null,_imageList:null,_side:"left",init:function(){var e,t;this._activeImage=$(".gallerySidebarBoxImageNavigation").find("li.active"),this._imageList=$("#galleryAlbumImageNavigation"),"rtl"==WCF.Language.get("wcf.global.pageDirection")&&(this._side="right"),e=-this._activeImage.position().left+this._activeImage.outerWidth(!0),t=-this._activeImage.outerWidth(!0)*(this._imageList.children().length-3),e>0?e=0:e<t&&(e=t),this._imageList.css(this._side,e),e?e==t&&$(".galleryNavigationArrowNext").addClass("disabled").children(".pointer").removeClass("pointer"):$(".galleryNavigationArrowPrevious").addClass("disabled").children(".pointer").removeClass("pointer"),$(".galleryNavigationArrowPrevious").click($.proxy(this._showPreviousImages,this)),$(".galleryNavigationArrowNext").click($.proxy(this._showNextImages,this))},_showPreviousImages:function(e){var t,i,a,s,n,r=$(e.currentTarget);if(!$(e.currentTarget).hasClass("disabled")){for(t=parseInt(this._imageList.css(this._side)),i=this._activeImage.outerWidth(!0),a=t+3*i;a>0;)a-=i;a!=t&&(s=$(".galleryNavigationArrowNext")).hasClass("disabled")&&(s.removeClass("disabled"),s.children(".icon").addClass("pointer")),(n={})[this._side]=a,this._imageList.animate(n,500,(function(){a!=t+3*i&&(r.addClass("disabled"),r.children(".pointer").removeClass("pointer"))}))}},_showNextImages:function(e){var t,i,a,s,n,r=$(e.currentTarget);if(!$(e.currentTarget).hasClass("disabled")){for(t=parseInt(this._imageList.css(this._side)),i=this._activeImage.outerWidth(!0),a=t-3*i;a<-i*(this._imageList.children().length-3);)a+=i;a!=t&&(s=$(".galleryNavigationArrowPrevious")).hasClass("disabled")&&(s.removeClass("disabled"),s.children(".icon").addClass("pointer")),(n={})[this._side]=a,this._imageList.animate(n,500,(function(){a!=t-3*i&&(r.addClass("disabled"),r.children(".pointer").removeClass("pointer"))}))}}}),Gallery.Image.InlineEditor=WCF.InlineEditor.extend({_environment:"list",_permissions:{},_redirectURL:"",_updateHandler:null,setRedirectURL:function(e,t){this._redirectURL=e,this._environment=t||"list"},setUpdateHandler:function(e){this._updateHandler=e},_setOptions:function(){this._options=[{label:WCF.Language.get("gallery.image.enable"),optionName:"enable"},{label:WCF.Language.get("gallery.image.disable"),optionName:"disable"},{label:WCF.Language.get("gallery.image.trash"),optionName:"trash"},{label:WCF.Language.get("gallery.image.restore"),optionName:"restore"},{label:WCF.Language.get("gallery.image.delete"),optionName:"delete"},{optionName:"divider"},{label:WCF.Language.get("wcf.global.button.edit"),optionName:"edit",isQuickOption:!0}]},_show:function(e){var t,i,a=$(e.currentTarget).data("elementID"),s=null;for(i in this._dropdowns[a]||(s=this._getTriggerElement(this._elements[a]).addClass("dropdownToggle").parent().addClass("dropdown").end(),this._dropdowns[a]=$('<ul class="dropdownMenu" />').insertAfter(s)),this._super(e),null!==s&&(WCF.Dropdown.initDropdown(s,e.originalEvent||e),t=s.parent().wcfIdentify(),WCF.Dropdown.registerCallback(t,$.proxy(this._toggleDropdown,this)),this._toggleDropdown(t,"open")),this._elements)this._elements[i].removeClass("jsGalleryImageShowDetail
1s");return this._elements[a].addClass("jsGalleryImageShowDetails"),!1},_hide:function(e){this._super(e),this._elements[e].removeClass("jsGalleryImageShowDetails")},_toggleDropdown:function(e,t){WCF.Dropdown.getDropdown(e).parents(".messageOptions").toggleClass("forceOpen")},_getTriggerElement:function(e){return e.find(".jsImageInlineEditor")},_validate:function(e,t){var i=$("#"+e).data("objectID");switch(t){case"delete":return!!this._getPermission("canDeleteImage")&&this._updateHandler.getValue(i,"isDeleted");case"restore":return!!this._getPermission("canRestoreImage")&&this._updateHandler.getValue(i,"isDeleted");case"trash":return!!this._getPermission("canTrashImage")&&!this._updateHandler.getValue(i,"isDeleted");case"enable":return!!this._getPermission("canEnableImage")&&!this._updateHandler.getValue(i,"isDeleted")&&this._updateHandler.getValue(i,"isDisabled");case"disable":return!!this._getPermission("canEnableImage")&&!this._updateHandler.getValue(i,"isDeleted")&&!this._updateHandler.getValue(i,"isDisabled");case"edit":return!0}return!1},_execute:function(e,t){var i;if(!this._validate(e,t))return!1;switch(t){case"disable":case"enable":this._updateImage(e,t,{isDisabled:"enable"===t?0:1});break;case"delete":i=this,WCF.System.Confirmation.show(WCF.Language.get("gallery.image.delete.confirmMessage"),(function(a){"confirm"===a&&i._updateImage(e,t,{deleted:1})}));break;case"edit":window.location=this._getTriggerElement($("#"+e)).prop("href");break;case"restore":this._updateImage(e,t,{isDeleted:0});break;case"trash":i=this,WCF.System.Confirmation.show(WCF.Language.get("gallery.image.trash.confirmMessage"),(function(a){"confirm"===a&&i._updateImage(e,t,{isDeleted:1,reason:$("#wcfSystemConfirmationContent").find("textarea").val()})}),{},$('<div class="section"><dl><dt>'+WCF.Language.get("gallery.image.trash.reason")+'</dt><dd><textarea cols="40" rows="4" /></dd></dl></div>'))}},_updateImage:function(e,t,i){var a,s;"delete"===t?(a=this,s=this._elements[e].data("objectID"),new WCF.Action.Proxy({autoSend:!0,data:{actionName:"delete",className:"gallery\\data\\image\\ImageAction",objectIDs:[s]},success:function(e){a._redirectURL?window.location=a._redirectURL:window.location.reload()}})):(this._updateData.push({data:i,elementID:e,optionName:t}),this._proxy.setOption("data",{actionName:t,className:"gallery\\data\\image\\ImageAction",objectIDs:[this._elements[e].data("objectID")],parameters:{data:i}}),this._proxy.sendRequest())},_updateState:function(e){var t,i,a,s,n;if("image"!=this._environment||1!=this._updateData.length||"trash"!=this._updateData[0].optionName||this._getPermission("canViewDeletedImage"))for(this._notification.show(),t=0,i=this._updateData.length;t<i;t++)a=this._updateData[t],s=$("#"+a.elementID).data("objectID"),n=a.data,"trash"===a.optionName&&e&&e.returnValues&&e.returnValues.imageData&&e.returnValues.imageData[s]&&(n.deleteNote=e.returnValues.imageData[s].deleteNote),this._updateHandler.update(s,n);else this._notification.show($.proxy((function(){window.location=this._redirectURL}),this))},_getPermission:function(e){return this._permissions[e]?this._permissions[e]:0},setPermission:function(e,t){this._permissions[e]=t},setPermissions:function(e){for(var t in e)this.setPermission(t,e[t])}}),Gallery.Image.Handler=Class.extend({_activeImageID:"",_callbacks:{addImage:[],removeImage:[]},_dataHandlers:{image:{},video:{},videoLink:{}},_errorMessage:null,_image:null,_imageContainer:null,_imageProcessor:null,_images:{},_initialData:{},_options:{},_orderedImageIDs:[],_proxy:null,_saveButton:null,_saveRequestCount:0,_scrollEffect:null,_thumbnailListContainer:null,_thumbnailAreaSelector:null,_uploadHandler:null,_uploadWarning:null,_overwriteDataButtons:null,_currentImageContainer:null,_currentVideoContainter:null,_video:null,videoLinkHandler:null,init:function(e){this._options=e,this._saveRequestCount=0,this._callbacks={addImage:[],removeImage:[]},this._initialData={},this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this)}),this._thumbnailListContainer=$("#thumbnailListContainer"),this._thumbnailList=$("#thumbnailList"),this._imageContainer=$("#imageContainer"),this._overwriteDataButtons=$(".jsOverwriteDataButton").click($.proxy(this._overwriteData,this)).hide(),this._rotateImageButtons=$(".jsRotateImageButton").click($.proxy(this._rotateImage,this)),this._saveButton=$("#saveButton").click($.proxy(this._save,this)),this._currentImageContainer=$("#currentImageContainer"),this._image=$('<img src="" alt="" />').appendTo($("#image")),this._currentVideoContainer=$("#currentVideoContainer"),this._video=$('<video src="" controls />').appendTo($("#video")),this._currentVideoLinkContainer=$("#currentVideoLinkContainer"),this._videoLink=$("#videoLink"),this._thumbnailAreaSelector=new Gallery.Image.ThumbnailAreaSelector(this),this.getOption("tmpHash")&&(this._uploadHandler=new Gallery.Image.Upload(this,this.getOption("maxParallelUploads")),(this.getFreeImageCount()>0||this.getFreeUploadedVideoCount()>0||this.getFreeVideoLinkCount()>0)&&this._thumbnailListContainer.show(),this.getFreeImageCount()<=0&&this.getFreeUploadedVideoCount()<=0&&this._uploadHandler.hideUploadButton(),this.getFreeImageCount()<=0&&this.getFreeUploadedVideoCount()<=0&&this.getFreeVideoLinkCount()<=0&&(this._uploadWarning=$
1(".jsGalleryUploadWarning"))),this._imageProcessor=new Gallery.Image.Processor(this),$("#imageToogle").click($.proxy(this._toggleImage,this)),$("#videoToogle").click($.proxy(this._toggleVideo,this)),$("#videoLinkToogle").click($.proxy(this._toggleVideoLink,this)),require(["Ui/Screen"],(e=>{e.on("screen-md-up",{setup:()=>{this._previousImageButton=this._imageContainer.children(".galleryPreviousImageButton").click($.proxy(this._showPreviousImage,this)),this._nextImageButton=this._imageContainer.children(".galleryNextImageButton").click($.proxy(this._showNextImage,this)),this._imageContainer.data("visibleNextPreviousButtons",!1),$(window).on("scroll",$.proxy(this._scroll,this)),$(window).on("resize",$.proxy(this._scroll,this))}})}))},_getRedirectUrl:function(){var e,t,i,a;if(this.getOption("redirectURL"))return this.getOption("redirectURL");for(a in e=this.getImages(),t=$.getLength(e),i=0,e)(e[a].get("isVideo")||e[a].get("isVideoLink"))&&i++;return t==i?this.getOption("redirectVideoURL"):this.getOption("redirectImageURL")},_toggleImage:function(e){var t=$(e.currentTarget);const i=e.currentTarget.querySelector("fa-icon");i.setIcon("chevron-right"===i.name?"chevron-down":"chevron-right"),t.parent().next("small").toggle(),$(".jsImageButton").toggle(),$("#image").toggle()},_toggleVideo:function(e){const t=e.currentTarget.querySelector("fa-icon");t.setIcon("chevron-right"===t.name?"chevron-down":"chevron-right"),$(".jsVideoButton").toggle(),$("#video").toggle()},_toggleVideoLink:function(e){const t=e.currentTarget.querySelector("fa-icon");t.setIcon("chevron-right"===t.name?"chevron-down":"chevron-right"),$(".jsVideoLinkButton").toggle(),$("#videoLink").toggle()},_pauseVideo:function(){var e=this._video[0];e.pause(),this.getActiveImage().set("__videoTimestamp",e.currentTime)},_getImageIDs:function(){var e,t=[];for(e in this._images)t.push(e);return t},_getRequestData:function(){var e,t,i,a,s=[],n={},r=0;for(e in this._images){for(a in t=0,(i=this._images[e].getData()).__useCoordinates||(i.latitude=0,i.longitude=0,i.location=""),i)"__"==a.substr(0,2)?delete i[a]:$.isArray(i[a])?t+=i[a].length:$.isPlainObject(i[a])?t+=$.getLength(i[a]):t++;r+$.getLength(i)>this.getOption("maxInputVars")-150&&(s.push(n),n={},r=0),n[e]=i,r+=t}return s.push(n),s},_handleSavedImageData:function(e){var t,i,a,s;if(void 0!==e.thumbnailImageIDs&&e.thumbnailImageIDs.length)for(a in new WCF.System.Notification(WCF.Language.get("gallery.image.upload.info.thumbnailGeneration"),"info").show(void 0,5e3),t=new Gallery.Image.ThumbnailGenerator,i=0,e.thumbnailImageIDs)t.generateThumbnails(e.thumbnailImageIDs[a],$.proxy((function(){++i==e.thumbnailImageIDs.length&&(this._saveRequestCount--,this._saveRequestCount||(window.location=this._getRedirectUrl()))}),this),!0);else if(void 0!==e.errors){for(s in this._images)this.getImage(s).setErrors(e.errors[s]||{}),e.errors[s]&&this.getImage(s).getThumbnailContainer().addClass("imageError");this._showErrorMessage()}else this._saveRequestCount--,this._saveRequestCount||(window.location=this._getRedirectUrl())},_hideNextPreviousButtons:function(){this._previousImageButton&&this._imageContainer.data("visibleNextPreviousButtons")&&(this._previousImageButton.addClass("hidden"),this._nextImageButton.addClass("hidden"),this._imageContainer.data("visibleNextPreviousButtons",!1),this._imageContainer.removeClass("galleryHasNextPreviousImageButtons"))},_overwriteData:function(){WCF.System.Confirmation.show(WCF.Language.get("gallery.image.overwriteData.confirmMessage"),(function(e){"confirm"===e&&(WCF.System.Event.fireEvent("com.woltlab.gallery.imageHandler","overwriteData"),(new WCF.System.Notification).show())}))},_readOrderedImageIDs:function(){this._orderedImageIDs=[],this._thumbnailList.children().each(function(e,t){var i=$(t).data("imageID");i&&this._orderedImageIDs.push(i)}.bind(this))},_refreshNextPreviousButtons:function(){if(this._previousImageButton&&this._previousImageButton.is(":visible")){var e=this._orderedImageIDs.indexOf(this._activeImageID);switch(this._previousImageButton.removeClass("disabled"),this._nextImageButton.removeClass("disabled"),e){case 0:this._previousImageButton.addClass("disabled");break;case this._orderedImageIDs.length-1:this._nextImageButton.addClass("disabled")}}},_rotateImage:function(e,t){t||!this.getActiveImage().get("thumbnailWidth")?(this._proxy.setOption("data",{actionName:"rotateImage",className:"gallery\\data\\image\\ImageAction",objectIDs:[this.getActiveImage().getImageID()],parameters:{angle:e?$(e.currentTarget).data("angle"):t}}
1),this._proxy.sendRequest()):WCF.System.Confirmation.show(WCF.Language.get("gallery.image.rotate.confirmMessage"),$.proxy((function(t){"confirm"===t&&this._rotateImage(null,$(e.currentTarget).data("angle"))}),this))},_save:function(){this._saveButton.disable(),this.setActiveImage(this.getActiveImage()),this.validate()?(null!==this._errorMessage&&this._errorMessage.hide(),this._sendRequests()):this._showErrorMessage()},_scroll:function(){var e,t,i;this._previousImageButton&&this._previousImageButton.is(":visible")&&(e=$(window).scrollTop()+$(window).height()/2,i=(t=this._imageContainer.offset().top)+this._imageContainer.height(),e-100>=t&&e+100<=i&&(this._previousImageButton.css("top",e-t+"px"),this._nextImageButton.css("top",e-t+"px")))},_sendRequests:function(){var e,t=this._getRequestData();for(e in this._saveRequestCount=t.length,t)this._proxy.setOption("data",{actionName:"saveImageData",className:"gallery\\data\\image\\ImageAction",objectIDs:Object.keys(t[e]),parameters:{data:t[e],isEdit:this.getOption("tmpHash")?0:1}}),this._proxy.sendRequest()},_showErrorMessage:function(){this.setActiveImage(this.getActiveImage()),null===this._errorMessage&&(this._errorMessage=$('<p class="error" />').text(WCF.Language.get(this.getOption("tmpHash")?"gallery.image.upload.error.markedImages":"wcf.global.form.error")).hide().insertBefore("#thumbnailListContainer"),this._scrollEffect=new WCF.Effect.Scroll),this._scrollEffect.scrollTo(this._errorMessage),this._errorMessage.show(),this._saveButton.enable()},_showNextImage:function(){var e=this._orderedImageIDs.indexOf(this._activeImageID);e+1<this._orderedImageIDs.length&&this.setActiveImage(this._images[this._orderedImageIDs[e+1]])},_showNextPreviousButtons:function(){this._previousImageButton&&(this._imageContainer.data("visibleNextPreviousButtons")?this._refreshNextPreviousButtons():(this._previousImageButton.removeClass("hidden"),this._nextImageButton.removeClass("hidden"),this._imageContainer.data("visibleNextPreviousButtons",!0),this._imageContainer.addClass("galleryHasNextPreviousImageButtons"),this._refreshNextPreviousButtons(),this._scroll()))},_showPreviousImage:function(){var e=this._orderedImageIDs.indexOf(this._activeImageID);e&&this.setActiveImage(this._images[this._orderedImageIDs[e-1]])},_success:function(e,t,i){var a,s;switch(e.actionName){case"delete":if(e.objectIDs)for(a in e.objectIDs)this.removeImage(e.objectIDs[a]);this.setUserImageCount(e.returnValues.userImageCount),void 0!==e.returnValues.userVideoLinkCount&&this.setUserVideoLinkCount(e.returnValues.userVideoLinkCount),void 0!==e.returnValues.userUploadedVideoCount&&this.setUserUploadedVideoCount(e.returnValues.userUploadedVideoCount),this.updateRestrictions(e.returnValues.restrictions),(new WCF.System.Notification).show();break;case"rotateImage":this.getImageNode().on("load",$.proxy(this._didRotateImage,this,e.returnValues)),s=this.getActiveImage().get("url"),s+=-1!=s.indexOf("?")?"&":"?",s+="timestamp="+ +(new Date).getTime(),this.getImageNode().removeAttr("src").attr("src",s),this.getActiveImage().set("height",e.returnValues.height),this.getActiveImage().set("width",e.returnValues.width),this.getActiveImage().set("thumbnailHeight",0),this.getActiveImage().set("thumbnailWidth",0),this.getActiveImage().set("thumbnailX",0),this.getActiveImage().set("thumbnailY",0),(new WCF.System.Notification).show();break;case"saveImageData":this._handleSavedImageData(e.returnValues)}},_didRotateImage:function(e){this.getImageNode().off("load",$.proxy(this._didRotateImage,this)),WCF.System.Event.fireEvent("com.woltlab.gallery.ImageHandler","didRotateImage",e)},addDataHandler:function(e,t,i){var a,s,n;if(void 0===i&&(i=["image"]),!Array.isArray(i))throw new Error("'types' parameter has to be an array.");for(s=0,n=i.length;s<n;s++){if("image"!==(a=i[s])&&"video"!==a&&"videoLink"!==a)throw new Error("Unknown type '"+a+'".');this._dataHandlers[a][e]=t}t.setImageHandler(this)},addError:function(e){var t;t="string"==typeof e?$('<p class="error" />').text(e).insertBefore(this._thumbnailListContainer):e,$(`<button type="button" class="jsTooltip" title="${WCF.Language.get("wcf.global.button.hide")}">\n\t\t\t\t<fa-icon size="16" name="xmark"></fa-icon>\n\t\t\t</button>`).appendTo(t).click((function(){$(this).parent().wcfFadeOut((function(){$(this).remove()}))}))},addImage:function(e,t){var i,a;if(this._thumbnailListContainer.is(":visible")||!this.getOption("tmpHash")&&!$.getLength(this._images)||this._thumbnailListContainer.show(),this.getOption("tmpHash"))for(i in this._initialData)t.set(i,this._initialData[i]);for(a in this._images[e]=t,this._readOrderedImageIDs(),t.setImageHandler(this),this._callbacks.addImage)this._callbacks.addImage[a](t);$.getLength(this._images)>1?(this._overwriteDataButtons.show(),this._showNextPreviousButtons()):this._hideNextPreviousButtons()},addInitialData:function(e,t){this._initialData[e]=t},getActiveImage:function(){return void 0!==this._images[this._activeImageID]?this._images[this._activeImageID]:null},getDataHandler:function(e,t){if(void 0===t&&(t="image"),"image"!==t&&"video"!==t&&"videoLink"!==t)throw new Error("Unknown type '"+t+'".');return void 0!==this._dataHandlers[t][e]?this._dataHandlers[t][e]:null},getDataHandlers:function(e){if(void 0===e&&(e="image"),"image"!==e&&"video"!==e&&"videoLink"!==e)throw new Error("Unknown type '"+e+'".');return this._dataHandlers[e]},getActiveImageDataHandlers:function(){return this.getDataHandlers(this.getActiveImage().getType())},getImage:function(e){return void 0!==this._images[e]?this._images[e]:null},getImageNode:function(){return this._image},getImageProcessor:function(){return this._imageProcessor},getImages:function(){return this._images},registerCallback:function(e,t){return"addImage"!=e&&"removeImage"!=e?(console.debug("[Gallery.Image.Handler] Unknown callback event '"+e+"'"),!1):$.isFunction(t)?void this._callbacks[e].push(t):(console.debug("[Gallery.Image.Handler] Callback for '"+e+"' is invali
1d"),!1)},removeDataHandler:function(e,t){if(void 0!==t&&"image"!==t&&"video"!==t&&"videoLink"!==t)throw new Error("Unknown type '"+t+'".');if(void 0===t){var i=!1;return void 0!==this._dataHandlers.image[e]&&(delete this._dataHandlers.image[e],i=!0),void 0!==this._dataHandlers.video[e]&&(delete this._dataHandlers.video[e],i=!0),void 0!==this._dataHandlers.videoLink[e]&&(delete this._dataHandlers.videoLink[e],i=!0),i}return void 0!==this._dataHandlers[t][e]&&(delete this._dataHandlers[t][e],!0)},removeImage:function(e){if(void 0!==this._images[e]){for(var t in this._images[e].remove(),delete this._images[e],this._orderedImageIDs.splice(this._orderedImageIDs.indexOf(e)),this._callbacks.removeImage)this._callbacks.removeImage[t](e);return $.getLength(this._images)?e==this._activeImageID&&(this._activeImageID=0,$("#thumbnailList > li:eq(0)").each($.proxy((function(e,t){this.setActiveImage(this._images[$(t).data("imageID")])}),this))):(this._imageContainer.hide(),this._activeImageID=0),1==$.getLength(this._images)&&this._overwriteDataButtons.hide(),$.getLength(this._images)<=1?this._hideNextPreviousButtons():this._showNextPreviousButtons(),this._readOrderedImageIDs(),!0}return!1},removeImageByClick:function(e){WCF.System.Confirmation.show(WCF.Language.get("gallery.image.delete.confirmMessage"),$.proxy((function(t){"confirm"===t&&(this._proxy.setOption("data",{actionName:"delete",className:"gallery\\data\\image\\ImageAction",objectIDs:[$(e.currentTarget).data("imageID")],parameters:{returnUserImageCount:1}}),this._proxy.sendRequest())}),this))},setActiveImage:function(e,t){var i,a,s,n,r,o,l;if(!1!==t&&(t=!0),this._activeImageID){if(i=this._images[this._activeImageID].getData(),t){for(s in a=this.getActiveImageDataHandlers())a[s].readData(),i=$.extend(i,a[s].getData());this._images[this._activeImageID].setData(i)}i.isVideo&&this._pauseVideo()}switch(this._activeImageID=e.getImageID(),$("#thumbnailList").children("li").removeClass("active"),e.getThumbnailContainer().addClass("active"),n=this.getActiveImage().getType()){case"image":this._currentImageContainer.show(),this._currentVideoContainer.hide(),this._currentVideoLinkContainer.hide(),this._image.attr("src",e.get("url")).on("load",$.proxy(this._thumbnailAreaSelector.refresh,this._thumbnailAreaSelector)),this._rotateImageButtons.show().each($.proxy((function(e,t){var i=$(t);i.data("angle")%180&&(this.getActiveImage().get("width")<this.getOption("minHeight")||this.getActiveImage().get("height")<this.getOption("minWidth"))&&i.hide()}),this));break;case"video":this._currentImageContainer.hide(),this._currentVideoContainer.show(),this._currentVideoLinkContainer.hide(),this._video.attr("src")!==e.get("videoLink")&&((r=this._images[this._activeImageID].get("__videoTimestamp"))&&(o=function(){this._video[0].currentTime=r,this._video.off("loadedmetadata",o)}.bind(this),this._video.on("loadedmetadata",o)),this._video.attr("src",e.get("videoLink")));break;case"videoLink":this._currentImageContainer.hide(),this._currentVideoContainer.hide(),this._currentVideoLinkContainer.show(),this._videoLink.html(e.get("embedCode"));break;default:throw new Error("Unknown type '"+n+"'.")}for(s in a=this.getActiveImageDataHandlers())a[s].updateData();(l=["image","video","videoLink"]).splice(l.indexOf(n,1)),l.forEach((function(e){var t,i=this._dataHandlers[e];for(t in i)a[t]||i[t].setInactive()}),this),this._refreshNextPreviousButtons()},addEditedImageData:function(e){this.addImage(e.imageID,new Gallery.Image.Handler.Image(e.imageID,e,null,!0)),this._imageContainer.show()},setFirstImageActive:function(){var e=this.getImage($("#thumbnailList").children("li:eq(0)").data("imageID"));e&&(this._imageContainer.is(":visible")||this._imageContainer.show(),this.setActiveImage(e)),this._readOrderedImageIDs()},setUserImageCount:function(e){this.setOption("userImageCount",e),this._updateUploadInterface()},setUserUploadedVideoCount:function(e){this.setOption("userUploadedVideoCount",e),this._updateUploadInterface()},setUserVideoLinkCount:function(e){this.setOption("userVideoLinkCount",e),this._updateUploadInterface()},_updateUploadInterface:function(){this.videoLinkHandler&&this.videoLinkHandler.updateInterface(),this._uploadHandler&&(this.getOption("userImageCount")<this.getOption("maxUserImageCount")||this.getOption("userUploadedVideoCount")<this.getOption("maxUserUploadedVideoCount")?(this._thumbnailListContainer.show(),this._uploadHandler.showU
1ploadButton(),this._uploadWarning&&this._uploadWarning.hide()):(this._uploadHandler.hideUploadButton(),this._uploadWarning?this._uploadWarning.show():this._uploadWarning=$('<p class="warning" />').text(WCF.Language.get("gallery.image.upload.error.tooManyUploads")).insertBefore(this._thumbnailListContainer)))},getFreeImageCount:function(){return this.getOption("maxUserImageCount")-this.getOption("userImageCount")},getFreeUploadedVideoCount:function(){return null===this.getOption("maxUserUploadedVideoCount")?0:this.getOption("maxUserUploadedVideoCount")-this.getOption("userUploadedVideoCount")},getFreeVideoLinkCount:function(){return null===this.getOption("maxUserVideoLinkCount")?0:this.getOption("maxUserVideoLinkCount")-this.getOption("userVideoLinkCount")},validate:function(){var e,t=!0;for(e in this._images)this._images[e].validate()||(t=!1);return t},getOption:function(e){return e in this._options?this._options[e]:null},setOption:function(e,t){this._options[e]=t},startUpload:function(){this._saveButton.disable()},finishUpload:function(){this._saveButton.enable()},updateRestrictions:function(e){$("#galleryUploadRestrictions").html($(e).html())}}),Gallery.Image.ImageGrid=Class.extend({_activeElement:-1,_baseInterval:3e3,_elements:[],_images:[],_intervalModifier:1,_isHover:!1,_pe:null,init:function(e,t){if(this._images=t,this._images.length<2)console.debug("[Gallery.Image.ImageGrid] At least two images are required but "+t.length+" are given, aborting.");else{var i=document.getElementById(e);null!==!i?(this._initElements(i),this._pe=new WCF.PeriodicalExecuter(this.cycleImages.bind(this),this._baseInterval*this._intervalModifier),this._initEventListener(i)):console.debug("[Gallery.Image.ImageGrid] Container '"+e+"' is missing, aborting.")}},_initElements:function(e){var t,i;this._elements=[].slice.call(e.children),t=document.createElement("a"),i=document.createElement("span"),t.appendChild(i),this._elements[0].appendChild(t),this._elements[0].setAttribute("data-active-image",0),this._elements[0].setAttribute("data-image-index",0),this._elements[1]&&this._elements[1].setAttribute("data-image-index",3),this._elements[2]&&this._elements[2].setAttribute("data-image-index",7),2===this._elements.length?this._intervalModifier=1.5:1===this._elements.length&&(this._intervalModifier=2)},_initEventListener:function(e){var t,i;e.addEventListener("mouseover",function(){this._isHover=!0}.bind(this)),e.addEventListener("mouseout",function(){this._isHover=!1}.bind(this)),t=this._elements.length,(i=function(){var e,i=this._elements[0].offsetTop,a=1;t>1&&this._elements[1].offsetTop===i&&(a=2,3===t&&this._elements[2].offsetTop===i&&(a=3)),e=2,2===a?e=1.5:3===a&&(e=1),e!==this._intervalModifier&&(this._intervalModifier=e,this._pe.setInterval(this._baseInterval*this._intervalModifier))}.bind(this))(),window.addEventListener("resize",i)},cycleImages:function(){var e,t,i,a,s,n,r;if(!this._isHover)if(0,this._activeElement++,this._activeElement===this._elements.length&&(this._activeElement=0),e=this._elements[this._activeElement],0===this._activeElement)if((t=parseInt(e.getAttribute("data-image-index"))+1)===this._images.length&&(t=0),2===(i=parseInt(e.getAttribute("data-active-image"))+1)&&(i=0),(a=new Image).src=this._images[t].src,(s=e.children[i]).setAttribute("href",this._images[t].url),s.classList.add("active"),s.children[0].style.setProperty("background-image","url("+this._images[t].src+")"),s.children[0].setAttribute("data-title",this._images[t].title),e.children[1===i?0:1].classList.remove("active"),e.setAttribute("data-active-image",i),e.setAttribute("data-image-index",t),a.complete)e.classList.add("hideLoading"),e[0].querySelector("fa-icon")?.remove();else{e.classList.remove("hideLoading");const t=document.createElement("fa-icon");t.size=48,t.setIcon("spinner"),e[0].append(t),s.children[0].classList.add("imageLoading"),a.addEventListener("load",function(){e.classList.add("hideLoading"),e[0].querySelector("fa-icon")?.remove(),s.children[0].classList.remove("imageLoading")}.bind(this))}else e.children.length>2&&e.removeChild(e.children[e.children.length-1]),(t=parseInt(e.getAttribute("data-image-index"))+1)===this._images.length&&(t=0),(n=document.createElement("li")).classList.add("imageGridItemOffset"),(r=document.createElement("a")).setAttribute("href",this._images[t].url),r.setAttribute("data-title",this._images[t].title),n.appendChild(r),(a=document.createElement("img")).setAttribute("src",this._images[t].src),r.appendChild(a),e.insertBefore(n,this._elements[this._activeElement].children[0]),e.setAttribute("data-image-index",t),a.complete||(a.classList.add("imageLoading"),a.addEventListener("load",(function(){a.classList.remove("imageLoading")}))),setTimeout((function(){n.classList.remove("imageGridItemOffset")}),10),e.offsetTop>this._elements[0].offsetTop&&setTimeout(this.cycleImages.bind(this),20)}}),Gallery.Image.ImagesInMotion=Class.extend({_container:null,_effectOptions:{},init:function(e,t,i){var a,s,n,r;if(t.length<2)console.debug("[Gallery.Image.ImagesInMotion] At least two images are required but "+t.length+" are given, aborting.");else if(this._container=$("#"+e),this._container.length){for(this._effectOptions=i||{},function(e){for(let t=e.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}}(t),a=null,s=!1,n=0,r=t.length;n<r;n++)a=$('<img src="'+t[n].url+'" />').data("imageData",t[n]).appendTo(this._container),0===n&&(a.get(0).complete?s=!0:a.on("load",$.proxy(this._initKenBurnsEffect,this)));s&&this._initKenBurnsEffect()}else console.debug("[Gallery.Image.ImagesInMotion] Container id '"+e+"' is invali
1d, aborting.")},_initKenBurnsEffect:function(){this._container[0].querySelector("fa-icon")?.remove(),this._container.removeClass("loading").kenburns(this._effectOptions)}}),$.widget||($.widget=function(){}),$.widget("gallery.kenburns",{_activeCanvas:1,_animationIDs:[],_canvases:[],_caption:null,_current:{height:0,width:0,x:0,y:0},_images:[],_imageData:[],_index:-1,_link:null,_resumeAnimationCallbacks:[],_supportedAlignments:[],_updateCanvasDimensionsCallbacks:[],_userAvatar:null,options:{duration:7e3,randomizeZoom:!0,zoomFactor:.9},_create:function(){this._activeCanvas=1,this._animationIDs=[0,0],this._images=[],this._imageData=[],this._index=-1,this._resumeAnimationCallbacks=[null,null],this._updateCanvasDimensionsCallbacks=[null,null],this._supportedAlignments=["top","left","bottom","center","right"],this._canvases=[$('<canvas class="kenburns" />').appendTo(this.element).get(0),$('<canvas class="kenburns" />').appendTo(this.element).get(0)],this._link=$('<a class="box48"></a>').appendTo(this.element),this._userAvatar=$("<img />").addClass("userAvatarImage").appendTo(this._link),this._caption=$("<h1 />").appendTo(this._link),this.updateCanvasDimensions(),this.options.zoomFactor=Math.abs(this.options.zoomFactor),this.options.zoomFactor=Math.min(Math.max(this.options.zoomFactor,.5),1.5),this.element.children("img").each($.proxy((function(e,t){this._images.push(t),this._imageData.push($(t).data("imageData"))}),this)),WCF.PageVisibilityHandler.addCallback("gallery.kenburns."+this.element.wcfIdentify().hashCode(),$.proxy((function(e){e?this.pause():this.resume()}),this)),$(window).resize($.proxy(this.updateCanvasDimensions,this)),this.start()},updateCanvasDimensions:function(){var e=this.element.getDimensions("inner");this._canvases[0].height=e.height,this._canvases[0].width=e.width,this._canvases[1].height=e.height,this._canvases[1].width=e.width,this._updateCanvasDimensionsCallbacks[0]&&this._updateCanvasDimensionsCallbacks[0](),this._updateCanvasDimensionsCallbacks[1]&&this._updateCanvasDimensionsCallbacks[1]()},start:function(){var e,t,i,a=-1===this._index;this._index++,this._index===this._images.length&&(this._index=0),$(this._canvases[this._activeCanvas]).removeClass("primary").addClass("secondary"),this._activeCanvas=this._activeCanvas?0:1,e=this._canvases[this._activeCanvas],$(e).addClass("primary").removeClass("secondary"),t=this._images[this._index],this._current=this.getCurrentImageDimensions(t,e),i=this._imageData[this._index],this._caption.html(i.title),this._link.prop("href",i.link),this._userAvatar.prop("src",i.avatar),this._render(e,a)},getCurrentImageDimensions:function(e,t){var i,a={height:Math.floor(t.width/e.width*e.height),width:t.width,x:0,y:0};return a.height<t.height&&(i=t.height/a.height,a.height=t.height,a.width=t.width*i),t.width<700&&(a.height*=2,a.width*=2),a.x=(a.width-t.width)/2*-1,a.y=(a.height-t.height)/2*-1,a},pause:function(){this._animationIDs[0]&&cancelAnimationFrame(this._animationIDs[0]),this._animationIDs[1]&&cancelAnimationFrame(this._animationIDs[1])},resume:function(){null!==this._resumeAnimationCallbacks[0]&&this._resumeAnimationCallbacks[0](),null!==this._resumeAnimationCallbacks[1]&&this._resumeAnimationCallbacks[1]()},_getAlignment:function(e,t,i,a,s,n,r){var o=0,l=0;switch(r){case"top":o=(s-i)/2*-1;break;case"left":l=(n-a)/2*-1;break;case"bottom":o=(s-i)/2*-1,l=-1*(n-a);break;case"right":o=-1*(s-i),l=(n-a)/2*-1;break;default:o=(s-i)/2*-1,l=(n-a)/2*-1}return{x:e+o,y:t+l}},_scaleImage:function(e,t,i){var a=Math.floor(e.width*t),s=Math.floor(e.height*t),n=this._getAlignment(e.x,e.y,e.width,e.height,a,s,i);return{height:s,width:a,x:n.x,y:n.y}},_render:function(e,t){function i(t){var w,C;null===o&&(o=t),u&&(u=!1,o=t-l),l=t-o,w=_._scaleImage(v,a,p),C=_._images[b],l<h?g=l/h:l>d?(g=(_.options.duration-l)/1e3,m||(m=!0,_.start())):g=1,f.clearRect(0,0,e.width,e.height),f.globalAlpha=g,f.drawImage(C,0,0,C.width,C.height,w.x,w.y,w.width,w.height),c=!1,y>1?(a=1+s*l)<r&&(c=!0):(a=n-s*l)>r&&(c=!0),c?_._animationIDs[I]=requestAnimationFrame(i):(_._resumeAnimationCallbacks[I]=null,_._updateCanvasDimensionsCallbacks[I]=null)}var a,s,n,r,o,l,g,h,d,m,u,c,_,p=this._supportedAlignments[Math.floor(Math.random()*this._supportedAlignments.length)],I=this._activeCanvas,f=e.getContext("2d"),v=this._current,b=this._index,y=this.options.zoomFactor;this.options.randomizeZoom&&Math.round(Math.random())&&(y=2-y),e.width<700&&(y=y<1?1-2*(y=1-y):1+2*(y=1-y)),a=1,s=0,n=1,(r=y)>1?s=Math.abs(y-1)/this.options.duration:(n=a=1-y+1,s=(1-y)/this.options.duration,r=1),o=null,l=0,g=0,h=t?1e3:0,d=this.options.duration-1e3,m=!1,u=!1,
1c=!1,_=this,this._resumeAnimationCallbacks[I]=function(){u=!0,_._animationIDs[I]=requestAnimationFrame(i)},this._updateCanvasDimensionsCallbacks[I]=function(){v=_.getCurrentImageDimensions(_._images[b],e)},this._animationIDs[I]=requestAnimationFrame(i)}}),Gallery.Image.Slideshow={_didInit:!1,init:function(){this._didInit||(this._didInit=!0,this._domNodeInserted(),WCF.DOMNodeInsertedHandler.addCallback("Gallery.Image.Slideshow",$.proxy(this._domNodeInserted,this)))},_domNodeInserted:function(){$(".jsGalleryAlbumImageViewer").removeClass("jsGalleryAlbumImageViewer").wcfImageViewer({className:"gallery\\data\\album\\AlbumAction"}),$(".jsGalleryCategoryImageViewer").removeClass("jsGalleryCategoryImageViewer").wcfImageViewer({className:"gallery\\data\\category\\GalleryCategoryAction"}),document.querySelectorAll(".jsGalleryUserImageViewer").forEach((e=>{e.classList.remove("jsGalleryUserImageViewer"),parseInt(e.dataset.objectId,10)&&$(e).wcfImageViewer({className:"gallery\\data\\image\\ImageAction"})}))}},Gallery.Image.Upload=WCF.Upload.Parallel.extend({_archiveUploadSuccess:null,_imageHandler:null,_listItems:{},_maxParallelUploads:0,_outstandingUploads:0,_quotaExceededError:null,_thumbnailGenerator:null,_tooManyImagesError:null,_visibleArchiveUploadSuccess:!1,_uploadRequests:[],init:function(e,t){this._imageHandler=e,this._maxParallelUploads=t,this._outstandingUploads=0,this._uploadRequests=[],this._super($("#thumbnailList"),$("#thumbnailList"),"gallery\\data\\image\\ImageAction")},_abortUpload:function(e){var t=$(e.currentTarget.parentNode);this._uploadRequests[~~t.data("internalFileID")].abort(),t.remove()},_createButton:function(){var e;this._supportsAJAXUpload?(this._fileUpload=$('<input type="file" name="'+this._name+'" '+(this._options.multiple?'multiple="true" ':"")+"/>"),this._fileUpload.change($.proxy(this._upload,this)),(e=$('<li class="jsImageUpload jsTooltip" title="'+WCF.Language.get("gallery.image.button.upload")+'"><fa-icon size="32" name="upload"></fa-icon></li>')).prepend(this._fileUpload)):(e=$('<li class="jsImageUpload jsImageUploadFallback jsTooltip" title="'+WCF.Language.get("gallery.image.button.upload")+'"><fa-icon size="32" name="upload"></fa-icon> <span>'+WCF.Language.get("wcf.global.button.upload")+"</span></li>")).click($.proxy(this._showOverlay,this)),this._insertButton(e),WCF.DOMNodeInsertedHandler.execute()},_error:function(e,t,i){this._imageHandler.addError(WCF.Language.get("gallery.image.upload.error.uploadFailed")),this._outstandingUploads--,0===this._outstandingUploads&&this._imageHandler.finishUpload()},_getParameters:function(){return{tmpHash:this._imageHandler.getOption("tmpHash")}},_getThumbnailGenerator:function(){return null===this._thumbnailGenerator&&(this._thumbnailGenerator=new Gallery.Image.ThumbnailGenerator),this._thumbnailGenerator},_insertButton:function(e){var t=this._buttonSelector.find(".jsVideoLinkAdd");t.length?e.insertBefore(t):this._buttonSelector.append(e)},_initFile:function(e){var t=$(`<li>\n\t\t\t\t<button type="button" class="galleryAbortUpload jsTooltip" title="${WCF.Language.get("gallery.image.upload.abort")}">\n\t\t\t\t\t<fa-icon size="16" name="xmark"></fa-icon>\n\t\t\t\t</button>\n\t\t\t\t<small class="galleryUploadProgress">\n\t\t\t\t\t<progress max="100" />\n\t\t\t\t\t<span>0%</span>\n\t\t\t\t</small>\n\t\t\t\t<fa-icon size="32" name="spinner"></fa-icon>\n\t\t\t</li>`).insertBefore(this._fileListSelector.find(".jsImageUpload"));return $.getLength(this._imageHandler.getImages())||t.on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler)),t.children(".galleryAbortUpload").on("click",this._abortUpload.bind(this)),t},_removeButton:function(){this._buttonSelector.find(".jsImageUpload").remove()},_processUploadedImage:function(e,t){var i,a,s,n,r,o,l=this._uploadMatrix[t],g={resize:1,rotate:1,thumbnails:1,watermarks:e.delayWatermarks?0:1};if(e.images&&e.images[t])i=e.images[t],this._imageHandler.addImage(i.imageID,new Gallery.Image.Handler.Image(i.imageID,i,l)),this._imageHandler.getImageProcessor().addImage(i.imageID,!1,g);else if(e.archiveImages&&e.archiveImages[t]){for(a in l.remove(),this._archiveUploadSuccess||(this._archiveUploadSuccess=new WCF.System.Notification(WCF.Language.get("gallery.image.upload.archive.
1success"))),this._visibleArchiveUploadSuccess||(this._visibleArchiveUploadSuccess=!0,this._archiveUploadSuccess.show($.proxy(this._setArchiveUploadSuccessHidden))),e.archiveImages[t])i=e.archiveImages[t][a],l=$("<li />").data("imageID",a).data("imageData",i).on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler)).append($('<fa-icon size="32" name="spinner"></fa-icon>')),this._fileListSelector.find(".jsImageUpload").before(l),this._listItems[a]=l,this._imageHandler.addImage(i.imageID,new Gallery.Image.Handler.Image(i.imageID,i,l)),this._imageHandler.getImageProcessor().addImage(i.imageID,!1,g);if(this._imageHandler.getImageProcessor().startProcessor(),e.archiveErrors[t]&&e.archiveErrors[t].files&&e.archiveErrors[t].files.length){for(r in s=$('<div class="info pointer" />').text(e.archiveErrors[t].errorMessage),n=$('<ul class="nativeList" />').appendTo(s),e.archiveErrors[t].files)n.append($("<li />").text(e.archiveErrors[t].files[r].errorMessage));this._imageHandler.addError(s)}}e.errors&&e.errors[t]&&(e.archiveImages&&!e.archiveImages[t]&&(o=l.next("li"),l.remove(),o&&o.data("imageID")&&o.on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler))),this._imageHandler.addError(e.errors[t].errorMessage)),this._imageHandler.setUserImageCount(e.userImageCount)},_processUploadedVideo:function(e,t){var i,a=this._uploadMatrix[t];e.videos&&e.videos[t]&&(i=e.videos[t],this._imageHandler.addImage(i.imageID,new Gallery.Image.Handler.Image(i.imageID,i,a)),this._imageHandler.getActiveImage()||this._imageHandler.setFirstImageActive()),e.errors&&e.errors[t]&&(this._imageHandler.addError(e.errors[t].errorMessage),a.remove()),this._imageHandler.setUserUploadedVideoCount(e.userVideoCount)},_progress:function(e,t){this._super(e,t);var i=this._uploadMatrix[e].find("progress");i.next("span").text(i.attr("value")+"%")},_sendRequest:function(e,t){0===this._outstandingUploads&&this._imageHandler.startUpload(),this._outstandingUploads++,this._uploadRequests[e]=this._super(e,t)},_success:function(e,t){if(this._outstandingUploads--,0===this._outstandingUploads&&this._imageHandler.finishUpload(),"abort"!==this._uploadRequests[e].status&&t.returnValues){var i=this._uploadMatrix[e];switch(i.find(".galleryUploadProgress").remove(),i.find(".galleryAbortUpload").remove(),t.returnValues.uploadType){case"video":this._processUploadedVideo(t.returnValues,e);break;case"image":this._processUploadedImage(t.returnValues,e);break;default:throw new Error("Unknown upload type '"+t.returnValues.uploadType+"'.")}this._imageHandler.updateRestrictions(t.returnValues.restrictions),WCF.DOMNodeInsertedHandler.execute()}},_upload:function(){var e,t=this._fileUpload.prop("files");t.length>this._maxParallelUploads?$('<p class="error pointer" />').text(WCF.Language.get("gallery.image.upload.error.maxParallelFileUpload")).insertBefore($("#thumbnailListContainer")).click((function(){this.remove()})):t.length>this._imageHandler.getFreeImageCount()+this._imageHandler.getFreeUploadedVideoCount()?(e=WCF.Language.get("gallery.image.upload.error.tooManyImageSelected",{imageCount:t.length,maximumImageCount:this._imageHandler.getFreeImageCount()}),$('<p class="error pointer" />').text(e).insertBefore($("#thumbnailListContainer")).click((function(){this.remove()}))):this._super(),this._fileUpload&&(this._removeButton(),this._createButton())},_setArchiveUploadSuccessHidden:function(){this._visibleArchiveUploadSuccess=!1},hideUploadButton:function(){this._buttonSelector.find(".jsImageUpload").hide()},showUploadButton:function(){this._buttonSelector.find(".jsImageUpload").show()}}),Gallery.Image.Processor=Class.extend({_imageHandler:null,_queue:{},_proxy:null,init:function(e){this._imageHandler=e,this._proxy=new WCF.Action.Proxy({showLoadingOverlay:!1,success:$.proxy(this._success,this)})},_sendRequest:function(){var e,t,i=this._queue;for(t in this._queue={},e=[],i)e.push(t);this._proxy.setOption("data",{actionName:"processImages",className:"gallery\\data\\image\\ImageAction",objectIDs:e,parameters:{queue:i}}),this._proxy.sendRequest()},_success:function(e,t,i){var a,s,n,r,o,l,g,h,d;for(a in e.returnValues.errors)this._imageHandler.addError(e.returnValues.errors[a]),(n=(s=this._imageHandler.getImage(a)).getThumbnailContainer().next("li"))&&n.data("imageID")&&n.on("didLoadImage",$.proxy(this._imageHandler.setFirstImageActive,this._imageHandler)),this._imageHandler.removeImage(a);for(a in e.returnValues.queue){for(o in r=e.returnValues.queue[a],s=this._imageHandler.getImage(a),e.returnValues.imageData[a])s.set(o,e.returnValues.imageData[a][o]);l=parseInt(r.resize),g=parseInt(r.rotate),h=parseInt(r.thumbnails),d=parseInt(r.watermarks),l||g||h||d?this._queue[a]={resize:l,rotate:g,thumbnails:h,watermarks:d}:(r.tinyURL&&s.set("tinyURL",r.tinyURL),s.showTinyThumbnail())}$.getLength(this._queue)?this._sendRequest():WCF.System.Event.fireEvent("com.woltlab.gallery.image.processor","finishedProcessing")},addImage:function(e,t,i){this._queue[e]||(this._queue[e]={resize:1,rotate:1,thumbnails:1,watermarks:1},$.isPlainObject(i)&&(this._queue[e]=i),t||this.startProcessor())},startProcessor:function(){$.getLength(this._queue)&&this._sendRequest()}}),Gallery.Image.ThumbnailGenerator=Class.extend({generateThumbnails:function(e,t,i){i=i||!1,new WCF.Action.Proxy({autoSend:!0,data:{actionName:"generateThumbnails",className:"gallery\\data\\image\\ImageAction",objectIDs:[e],parameters:{refresh:i}},showLoadingOverlay:!1,success:$.proxy((function(i,a,s){i.returnValues.pendingThumbnails?this.generateThumbnails(e,t):$.isFunction(t)&&t(e,i.returnValues)}),this)})}}),Gallery.Image.Handler.Image=Class.extend({_createThumbnail:!1,_data:{},_errors:{},_imageID:0,_imageHandler:null,_removeImageIcon:null,_thumbnail:null,_thumbnailContainer:null,init:function(e,t,i,a){if(this._imageID=e,this._data=t||{},this._thumbnailContainer=i,this._createThumbnail=a||!1,this._thumbnailContainer&&this._thumbnailContainer.children("img").length?this._thumbnail=this._thumbnailContainer.children("img").eq(0):this._thumbnail=null,this._thumbnail)this._thumbnail.click($.proxy(this._editImage,this));else if(this._createThumbnail){this._thumbnailContainer=$("<li />");var s=$("#thumbnailList > .jsImageUpload");s.length?this._thumbnailContainer.insertBefore(s):this._thumbnailContainer.appendTo($("#thumbnailList")),this._addThumbnail(this._thumbnailContainer)}else this._data.isVideo&&(this._addThumbnail(this._thumbnailContainer),this._thumbnailContainer.click($.proxy(this._editImage,this)));this._thumbnailContainer.data({imageData:t,imageID:e})},_addThumbnail:function(e){if(this._thumbnail)this._thumbnail.attr("src",this.get("tinyURL")+"?date="+Date.now());else{e[0].querySelector('fa-icon[name="spinner"]')?.remove(),this._thumbnail=$('<img src="'+this.get("tinyURL")+'" alt="" />').appendTo(e),this._thumbnail.click($.proxy(this._editImage,this));var t=$('<ul class="imageOptions" />').appendTo(e);this._removeImageIcon=$(`<button type="button" class="jsTooltip" title="${WCF.Language.get("wcf.global.button.delete")}">\n\t\t\t\t\t<fa-icon size="16" name="xmark"></fa-icon>\n\t\t\t\t</button>`).data("imageID",this.getImageID()),this._imageHandler&&this._removeImageIcon.click($.proxy(this._imageHandler.removeImageByClick,this._imageHandler)),t.append($("<li />").append(this._removeImageIcon)),e.append(t),e.trigger("didLoadImage")}},_editImage:function(){this._imageHandler.setActiveImage(this)},addError:function(e,t){this._errors[e]=t},get:function(e){return void 0!==this._data[e]?this._data[e]:null},getData:function(){return this._data},getErrors:function(){return this._errors},getImageID:function(){return this._imageID},getImageHandler:function(){return this._imageHandler},getThumbnail:function(){return this._thumbnail},getThumbnailContainer:function(){return this._thumbnailContainer},getType:function(){return this._data.isVideo?"video":this._data.isVideoLink?"videoLink":"image"},remove:function(){this._thumbnailContainer.remove()}
1,removeThumbnail:function(){if(!this._data.isVideo)throw new Error("The thumbnail may only be removed from videos.");this._thumbnail.remove(),this._thumbnail=null},set:function(e,t){this._data[e]=t},setData:function(e){this._data=e},setErrors:function(e){this._errors=e},setImageHandler:function(e){this._imageHandler=e,this._removeImageIcon&&this._removeImageIcon.click($.proxy(this._imageHandler.removeImageByClick,this._imageHandler))},showTinyThumbnail:function(){this._addThumbnail(this._thumbnailContainer)},validate:function(){var e,t;for(t in this.setErrors({}),e=this._imageHandler.getActiveImageDataHandlers())if(!e[t].validateData(this))return this._thumbnailContainer&&this._thumbnailContainer.addClass("imageError"),!1;return this._thumbnailContainer.hasClass("imageError")&&this._thumbnailContainer.removeClass("imageError"),!0}}),Gallery.Image.Clipboard=Class.extend({_categoryID:0,_environment:"category",_updateHandler:null,init:function(e,t,i){this._updateHandler=e,this._environment=t,this._categoryID=i||0,this._dialog=$("<div />").appendTo(document.body),this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this)}),require(["EventHandler"],function(e){e.add("com.woltlab.wcf.clipboard","com.woltlab.gallery.image",this._clipboardAction.bind(this))}.bind(this))},_clipboardAction:function(e){var t,i;if("com.woltlab.gallery.image.moveToAlbum"===e.data.actionName)this._proxy.setOption("data",{actionName:"prepareMoveToAlbum",className:"gallery\\data\\image\\ImageAction",objectIDs:e.data.parameters.objectIDs}),this._proxy.sendRequest();else if(e.responseData&&e.responseData.returnValues&&e.responseData.returnValues.imageData)for(i in t=e.responseData.returnValues.imageData)t.hasOwnProperty(i)&&this._updateHandler.update(i,t[i])},_moveToAlbum:function(e){this._proxy.setOption("data",{actionName:"moveToAlbum",className:"gallery\\data\\image\\ImageAction",objectIDs:this._dialog.data("objectIDs"),parameters:{albumID:parseInt(this._dialog.find("#albumID").val())}}),this._proxy.sendRequest(),this._dialog.wcfDialog("close")},_success:function(e,t,i){switch(e.actionName){case"prepareMoveToAlbum":this._dialog.data("objectIDs",e.objectIDs).html(e.returnValues.template),this._dialog.wcfDialog({title:WCF.Language.get("gallery.image.moveToAlbum")}),this._dialog.find(".formSubmit > input[type=submit]").click($.proxy(this._moveToAlbum,this));break;case"moveToAlbum":window.location.reload()}}}),Gallery.Image.UpdateHandler=Class.extend({_images:{},init:function(){$(".galleryImage").each($.proxy((function(e,t){var i=$(t);this._images[i.data("objectID")]=i}),this))},update:function(e,t){if(this._images[e])for(var i in t)this._updateProperty(e,i,t[i]);else console.debug("[Gallery.Image.UpdateHandler] Unknown image id "+e)},_updateProperty:function(e,t,i){switch(t){case"deleted":this._delete(e,i);break;case"deleteNote":this._deleteNote(e,i);break;case"isDeleted":i?this._trash(e):this._restore(e);break;case"isDisabled":i?this._disable(e):this._enable(e);break;default:this._handleCustomProperty(e,t,i)}},_handleCustomProperty:function(e,t,i){this._images[e].trigger("imageUpdateHandlerProperty",[e,t,i])},_delete:function(e,t){},_deleteNote:function(e,t){},_disable:function(e){this._images[e].data("isDisabled",1)},_enable:function(e){this._images[e].data("isDisabled",0)},_restore:function(e){this._images[e].data("isDeleted",0)},_trash:function(e){this._images[e].data("isDeleted",1)},getValue:function(e,t){if(this._images[e])switch(t){case"isDeleted":return this._images[e].data("isDeleted");case"isDisabled":return this._images[e].data("isDisabled")}else console.debug("[Gallery.Image.UpdateHandler] Unknown image id "+e)}}),Gallery.Image.UpdateHandler.ImageList=Gallery.Image.UpdateHandler.extend({_delete:function(e,t){this._images[e].remove(),delete this._images[e],WCF.Clipboard.reload()},_disable:function(e){this._super(e),this._images[e].addClass("imageDisabled")},_enable:function(e){this._super(e),this._images[e].removeClass("imageDisabled")},_restore:function(e){this._super(e),this._images[e].removeClass("imageDeleted")},_trash:function(e){this._super(e),this._images[e].data("canViewDeletedImage")||window.location.reload(),this._images[e].addClass("imageDeleted")}}),Gallery.Image.UpdateHandler.Image=Gallery.Image.UpdateHandler.extend({_delete:function(e,t){new WCF.PeriodicalExecuter((function(e){e.stop(),window.location=t}),1e3)},_deleteNote:function(e,t){$('<div class="section"><p class="galleryImageDeleteNote">'+t+"</p></div>").insertBefore($(".galleryImageContainer > .galleryImageLikesSummery"))},_disable:function(e){this._super(e),$(".galleryImageHeadline").addClass("messageDisabled")},_enable:function(e){this._super(e),$(".galleryImageHeadline").removeClass("messageDisabled")},_restore:function(e){this._super(e),$(".galleryImageHeadline").removeClass("messageDeleted"),this._images[e].parent().find(".galleryImageDeleteNote").remove()},_trash:function(e){this._super(e),$(".galleryImageHeadline").addClass("messageDeleted")}}),Gallery.Image.DataHandler={},Gallery.Image.DataHandler.Base=Class.extend({_data:{},_imageHandler:null,_overwriteIcons:[],init:function(){this._data={},this._imageHandler=null,this._overwriteIcons=[],WCF.System.Event.addListener("com.woltlab.gallery.imageHandler","overwriteData",$.proxy(this._overwriteData,this))},_overwriteData:function(){},_toggleOverwriteIcons:function(){var e;if(1==$.getLength(this._imageHandler.getImages()))for(e in this._overwriteIcons)this._overwriteIcons[e].hide();else for(e in this._overwriteIcons)this._overwriteIcons[e].show()},getData:function(){return this._data},getImageHandler:function(){return this._imageHandler},readData:function(){},setImageHandler:function(e){this._imageHandler=e,this._imageHandler.registerCallback("addImage",$.proxy(this._toggleOverwriteIcons,this)),this._imageHandler.registerCallback("removeImage",$.proxy(this._toggleOverwriteIcons,this))},setInactive:function(){},updateData:function(){},validateData:function(e){return!0}}),Gallery.Image.DataHandler.Default=Gallery.Image.DataHandler.Base.extend({_categoryIDs:[],_categoryIDsError:null,_descriptionError:null,_maxDescriptionLength:0,_titleError:null,_useTitleAsFilename:null,_ckeditor:void 0,init:function(e,t){var i,a,s,n;this._super(),this._categoryIDs=e,this._maxDescriptionLength=t,i=$(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._overwriteTitle,this)),this._overwriteIcons.push(i),(a=$("#title").parent().prev("dt")).children("label").css("display","inline-block"),a.append(i),document.getElementById("title").addEventListener("keydown",(e=>{"Enter"===e.key&&(e.preventDefault(),e.stopPropagation(),document.getElementById("saveButton").click())})),s=$(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._overwriteCategories,this)),this._overwriteIcons.push(s),$("#flexibleCategoryList").prev(".
1sectionTitle").append(s),n=$(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._overwriteDescription,this)),this._overwriteIcons.push(n),(a=$("#text").parents("dl:eq(0)").prev(".sectionTitle")).children("label").css("display","inline-block"),a.append(n),this._useTitleAsFilename=$("#useFilenameAsTitle"),this._useTitleAsFilename.on("change",$.proxy(this._change,this)),this._ckeditor=void 0,require(["WoltLabSuite/Core/Component/Ckeditor","WoltLabSuite/Core/Component/Ckeditor/Event"],(({getCkeditor:e},{listenToCkeditor:t})=>{const i=document.getElementById("text");this._ckeditor=e(i),void 0===this._ckeditor&&t(i).ready((({ckeditor:e})=>{this._ckeditor=e}))}))},_change:function(e){var t,i;$(e.currentTarget).is(":checked")?(i=(t=this.getImageHandler().getActiveImage()).get("filename"),t.get("isVideo")&&(i=t.get("videoFilename")),i=i.substr(0,i.lastIndexOf(".")),$("#title").val(i).disable()):$("#title").val("").enable()},_getCategoryIDs:function(){var e=[];return $('input[name="categoryIDs[]"]').each((function(t,i){var a=$(i);a.prop("checked")&&e.push(parseInt(a.val()))})),e},_hideCategoryIDsError:function(){null!==this._categoryIDsError&&this._categoryIDsError.hide()},_hideDescriptionError:function(){null!==this._descriptionError&&this._descriptionError.hide()},_hideTitleError:function(){null!==this._titleError&&this._titleError.hide()},_needCategoriesOverwriteConfirmation:function(){var e,t,i=this.getImageHandler().getImages();for(e in i)if(this.getImageHandler().getActiveImage().getImageID()!=e&&(t=i[e].get("categoryIDs"))&&t.length)return!0;return!1},_needDescriptionOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&$.trim(t[e].get("description")))return!0;return!1},_needTitleOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&t[e].get("title"))return!0;return!1},_overwriteCategories:function(e){e.preventDefault(),this._needCategoriesOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.categoryIDs.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setCategoryIDs()}),this)):this._setCategoryIDs()},_overwriteData:function(){this._setCategoryIDs(!1),this._setDescription(!1),this._setTitle(!1)},_overwriteDescription:function(e){e.preventDefault(),this._needDescriptionOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.description.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setDescription()}),this)):this._setDescription()},_overwriteTitle:function(e){e.preventDefault(),this._needTitleOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.title.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setTitle()}),this)):this._setTitle()},_setCategoryIDs:function(e){var t,i,a;for(a in void 0===e&&(e=!0),t=this._getCategoryIDs(),i=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=a&&i[a].set("categoryIDs",t);e&&(new WCF.System.Notification).show()},_setDescription:function(e){var t,i,a;for(a in void 0===e&&(e=!0),t=this._ckeditor.getHtml(),i=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=a&&i[a].set("description",t);e&&(new WCF.System.Notification).show()},_setTitle:function(e){var t,i,a,s,n,r;for(s in void 0===e&&(e=!0),t=this._useTitleAsFilename.is(":checked"),i=$("#title").val(),a=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=s&&((n=a[s]).set("useFilenameAsTitle",t?1:0),r="",t&&(r=n.get("filename"),n.get("isVideo")&&(r=n.get("videoFilename")),r=r.substr(0,r.lastIndexOf("."))),n.set("title",t?r:i));e&&(new WCF.System.Notification).show()},_showCategoryIDsError:function(e){null===this._categoryIDsError&&(this._categoryIDsError=$('<small class="innerError" />').hide(),$("#flexibleCategoryList").after(this._categoryIDsError)),this._categoryIDsError.text(e).show()},_showDescriptionError:function(e){null===this._descriptionError&&(this._descriptionError=$('<small class="innerError" />').hide(),$("#text").closest("dd").append(this._descriptionError)),this._descriptionError.text(e).show()},_showTitleError:function(e){null===this._titleError&&(this._titleError=$('<small class="innerError" />').hide(),$("#title").after(this._titleError)),this._titleError.text(e).show()},readData:function(){var e=this.getImageHandler().getActiveImage().get("isVideoLink");!e&&this._useTitleAsFilename.is(":checked")&&(e=1),this._data={categoryIDs:this._getCategoryIDs(),description:this._ckeditor.getHtml(),title:$("#title").val(),useFilenameAsTitle:e}},updateData:function(){var e,t,i,a;$(window).resize(),e=this.getImageHandler().getActiveImage().getData(),this._data={categoryIDs:e.categoryIDs||[],description:e.description||"",title:e.title||"",useFilenameAsTitle:e.useFilenameAsTitle||0},e.isVideoLink?(this._data.useFilenameAsTitle=0,this._useTitleAsFilename.closest("label").hide()):this._useTitleAsFilename.closest("label").show(),void 0!==(t=this.getImageHandler().getActiveImage().getErrors()).categoryIDs?this._showCategoryIDsError(t.categoryIDs):this._hideCategoryIDsError(),void 0!==t.description?this._showDescriptionError(t.description):this._hideDescriptionError(),void 0!==t.title?this._showTitleError(t.title):this._hideTitleError(),this._useTitleAsFilename.prop("checked",!!this._data.useFilenameAsTitle),this._data.useFilenameAsTitle?(i=e.filename,e.isVideo&&(i=e.videoFilename),i=i.substr(0,i.lastIndexOf(".")),$("#title").val(i).disable()):$("#title").val(this._data.title).enable(),$('input[name="categoryIDs[]"]').each($.proxy((function(e,t){var i=$(t);-1==this._data.categoryIDs.indexOf(parseInt(i.val()))?i.prop("checked",!1):i.prop("checked",!0)}),this));try{this._ckeditor.setHtml(this._data.description)}catch(e){}a=$(document).scrollTop(),$("#title").focus().blur(),$(document).scrollTop(a)},validateData:function(e){var t,i=e.getData(),a=!0;if(void 0===i.title||""==i.title?(e.addError("title",WCF.Language.get("wcf.global.form.error.empty")),a=!1):i.title.length>255&&(e.addError("title",WCF.Language.get("gallery.image.title.error.tooLong")),a=!1),void 0===i.description||null===i.description?i.description="":i.description.length>this._maxDescriptionLength&&(e.addError("description",WCF.Language.get("gallery.image.description.error.tooLong")),a=!1),void 0!==i.categoryIDs&&i.categoryIDs.length){for(t in i.categoryIDs)if(-1==this._categoryIDs.indexOf(i.categoryIDs[t])){e.addError("categoryIDs",WCF.Language.get("wcf.global.form.error.noValidSelection")),a=!1;break}}else e.addError("categoryIDs",WCF.Language.get("wcf.global.form.error.empty")),a=!1;return a}}),Gallery.Image.DataHandler.EnableComments=Gallery.Image.DataHandler.Base.extend({init:function(){this._super();
1var e=$(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._click,this));this._overwriteIcons.push(e),$("#enableComments").closest("label").append(e),WCF.DOMNodeInsertedHandler.execute()},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.enableComments.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setEnableComments()}),this)):this._setEnableComments()},_needOverwriteConfirmation:function(){var e,t=$("#enableComments").is(":checked")?1:0,i=this.getImageHandler().getImages();for(e in i)if(this.getImageHandler().getActiveImage().getImageID()!=e&&i[e].get("enableComments")!=t)return!0;return!1},_overwriteData:function(){this._setEnableComments(!1)},_setEnableComments:function(e){var t,i;for(i in void 0===e&&(e=!0),t=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=i&&t[i].set("enableComments",$("#enableComments").is(":checked")?1:0);e&&(new WCF.System.Notification).show()},readData:function(){this._data={enableComments:$("#enableComments").is(":checked")?1:0}},updateData:function(){var e=this.getImageHandler().getActiveImage().getData();this._data={enableComments:void 0!==e.enableComments?e.enableComments:1},$("#enableComments").prop("checked",!!this._data.enableComments)}}),Gallery.Image.DataHandler.Album=Gallery.Image.DataHandler.Base.extend({_albumIDError:null,_albumIDs:[],_maxAlbums:0,_systemNotification:null,init:function(e,t){var i,a,s;if(this._super(),this._albumIDs=e,this._maxAlbums=t,this._albumIDError=null,i=$(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._click,this)),this._overwriteIcons.push(i),(a=$("#albumID").parent().prev("dt")).children("label").css("display","inline-block"),a.append(i),!this._albumIDs.length)for(s in $("#albumID").hide(),this._overwriteIcons)this._overwriteIcons[s].hide();const n=document.getElementById("albumAddButton");e.length<t?(require(["WoltLabSuite/Gallery/Component/Album/Add"],(({setup:e})=>{e(n)})),n.addEventListener("album:created",(e=>{this._addNewAlbum(e.detail)}))):n.remove(),WCF.DOMNodeInsertedHandler.execute()},_addNewAlbum:function(e){if(this._albumIDs.push(parseInt(e.albumID)),1==this._albumIDs.length&&($("#albumID").show(),$.getLength(this._imageHandler.getImages())>1))for(var t in this._overwriteIcons)this._overwriteIcons[t].show();if($("#albumID").append($('<option value="'+e.albumID+'" />').text(e.title)).val(e.albumID),this._albumIDs.length>=this._maxAlbums){const e=document.getElementById("albumAddButton");e&&e.remove(),new WCF.System.Notification(WCF.Language.get("gallery.image.upload.albumLimitReached"),"warning").show(void 0,5e3)}else null===this._systemNotification&&(this._systemNotification=new WCF.System.Notification),this._systemNotification.show()},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.albumID.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setAlbumID()}),this)):this._setAlbumID()},_hideAlbumIDError:function(){null!==this._albumIDError&&this._albumIDError.hide()},_needOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&t[e].get("albumID"))return!0;return!1},_overwriteData:function(){this._setAlbumID(!1)},_setAlbumID:function(e){var t,i;for(i in void 0===e&&(e=!0),t=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=i&&t[i].set("albumID",parseInt($("#albumID").val()||0));e&&(new WCF.System.Notification).show()},_showAlbumIDError:function(e){null===this._albumIDError&&(this._albumIDError=$('<small class="innerError" />').hide(),$("#albumID").parent().append(this._albumIDError)),this._albumIDError.text(e).show()},_toggleOverwriteIcons:function(){this._albumIDs.length&&this._super()},readData:function(){this._data={albumID:parseInt($("#albumID").val()||0)}},updateData:function(){var e,t=this.getImageHandler().getActiveImage().getData();this._data={albumID:t.albumID||0},$("#albumID").val(this._data.albumID),void 0!==(e=this.getImageHandler().getActiveImage().getErrors()).albumID?this._showAlbumIDError(e.albumID):this._hideAlbumIDError()},validateData:function(e){var t=e.getData();return!t.albumID||-1!=this._albumIDs.indexOf(t.albumID)||(e.addError("albumID",WCF.Language.get("wcf.global.form.error.noValidSelection")),!1)}}),Gallery.Image.DataHandler.Tagging=Gallery.Image.DataHandler.Base.extend({init:function(){var e;this._super(),e=$(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._click,this)),this._overwriteIcons.push(e),$("#tagSearchInput").closest("dl").children("dt").children("label").css("display","inline-block").append(e)},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.tags.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setTags()}),this)):this._setTags()},_getTags:function(){var e,t,i=require("WoltLabSuite/Core/Ui/ItemList").getValues("tagSearchInput"),a=[];for(e=0,t=i.length;e<t;e++)a.push(i[e].value);return a},_needOverwriteConfirmation:function(){var e,t,i=this.getImageHandler().getImages();for(e in i)if(this.getImageHandler().getActiveImage().getImageID()!=e&&(t=i[e].get("tags"))&&t.length)return!0;return!1},_overwriteData:function(){this._setTags(!1)},_setTags:function(e){var t,i,a;for(a in void 0===e&&(e=!0),t=this._getTags(),i=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=a&&i[a].set("tags",t);e&&(new WCF.System.Notification).show()},readData:function(){this._data={tags:this._getTags()}},updateData:function(){var e,t,i;for(this._data={tags:this.getImageHandler().getActiveImage().getData().tags||[]},e=[],t=0,i=this._data.tags.length;t<i;t++)e.push({objectId:"",value:this._data.tags[t]});require(["WoltLabSuite/Core/Ui/ItemList"],(function(t){t.setValues("tagSearchInput",e)}))}}),Gallery.Image.DataHandler.Location=Gallery.Image.DataHandler.Base.extend({_useCoordinates:null,_geocodeInput:null,init:function(){if(this._super(),this._geocodeInput=document.getElementById("geocode"),this._geocodeInput){var e=$
1(`<button type="button" class="jsTooltip galleryOverwriteIcon" title="${WCF.Language.get("gallery.image.button.overwrite")}">\n\t\t\t\t<fa-icon size="16" name="arrows-rotate"></fa-icon>\n\t\t\t</button>`).click($.proxy(this._click,this));this._overwriteIcons.push(e),$("#imageMapContainer").children(".sectionTitle").append(e),this._useCoordinates=$("#useCoordinates").change($.proxy(this._change,this))}},_change:function(e){this._useCoordinates.prop("checked")?$(".jsCoordinatesField").show():$(".jsCoordinatesField").hide()},_click:function(e){e.preventDefault(),this._needOverwriteConfirmation()?WCF.System.Confirmation.show(WCF.Language.get("gallery.image.coordinates.overwrite.confirmMessage"),$.proxy((function(e){"confirm"===e&&this._setCoordinates()}),this)):this._setCoordinates()},_disable:function(){$("#imageMapContainer").remove(),this.getImageHandler().removeDataHandler("location")},_initLocation:function(e){0==e.get("latitude")||0==e.get("longitude")||e.get("location")||this._geocodeInput.dispatchEvent(new CustomEvent("geocoding:resolve",{detail:{latitude:e.get("latitude"),longitude:e.get("longitude"),callback:t=>{e.set("__useCoordinates",!0),e.set("location",t),e==this.getImageHandler().getActiveImage()&&(this._geocodeInput.value=t)}}}))},_needOverwriteConfirmation:function(){var e,t=this.getImageHandler().getImages();for(e in t)if(this.getImageHandler().getActiveImage().getImageID()!=e&&0!=t[e].get("latitude")&&0!=t[e].get("longitude"))return!0;return!1},_overwriteData:function(){this._setCoordinates(!1)},_setCoordinates:function(e){var t,i,a,s;void 0===e&&(e=!0);const n=this._geocodeInput.dataset.googleMapsLat,r=this._geocodeInput.dataset.googleMapsLng,o=this._geocodeInput.value.trim();for(a in t=this._useCoordinates.prop("checked"),i=this.getImageHandler().getImages())this.getImageHandler().getActiveImage().getImageID()!=a&&((s=i[a]).set("latitude",n),s.set("location",o),s.set("longitude",r),s.set("__useCoordinates",t?1:0));e&&(new WCF.System.Notification).show()},readData:function(){this._data={latitude:this._geocodeInput.dataset.googleMapsLat,longitude:this._geocodeInput.dataset.googleMapsLng},this._data.location=$("#geocode").val(),this._data.__useCoordinates=this._useCoordinates.prop("checked")?1:0},setImageHandler:function(e){this._super(e),this._geocodeInput?this._imageHandler.registerCallback("addImage",$.proxy(this._initLocation,this)):this._disable()},updateData:function(){var e=this.getImageHandler().getActiveImage().getData();this._data={latitude:e.latitude||0,location:e.location||"",longitude:e.longitude||0,__useCoordinates:void 0!==e.__useCoordinates?e.__useCoordinates:0!=e.latitude&&0!=e.longitude},0!=this._data.latitude&&0!=this._data.longitude?this._geocodeInput.dispatchEvent(new CustomEvent("geocoding:move-marker",{detail:{latitude:this._data.latitude,longitude:this._data.longitude}})):this._geocodeInput.dispatchEvent(new CustomEvent("geocoding:reset-marker")),this._useCoordinates.prop("checked",!!this._data.__useCoordinates),this._geocodeInput.value=this._data.location,this._change()}}),Gallery.Image.DataHandler.VideoThumbnail=Gallery.Image.DataHandler.Base.extend({_container:null,_deleteButton:null,_thumbnail:null,_upload:null,init:function(){this._container=$("#galleryVideoThumbnailContainer"),this._thumbnail=$("#galleryVideoThumbnailPreview"),this._deleteButton=$("#galleryVideoThumbnailDeleteButton").click(this._deleteThumbnail.bind(this)),require(["WoltLabSuite/Gallery/Ui/Video/Thumbnail/Upload"],function(e){this._upload=new e(this)}.bind(this))},_deleteThumbnail:function(){WCF.System.Confirmation.show(WCF.Language.get("gallery.video.thumbnail.delete.confirmMessage"),$.proxy((function(e){"confirm"===e&&new WCF.Action.Proxy({autoSend:!0,data:{actionName:"deleteVideoThumbnail",className:"gallery\\data\\image\\ImageAction",objectIDs:[this.getImageHandler().getActiveImage().get("imageID")]},success:$.proxy(this._success,this)})}),this))},_success:function(e,t,i){var a=this.getImageHandler().getImage(~~e.returnValues.imageID);a.set("filename",""),a.set("filesize",0),a.set("url",""),a.set("tinyURL",""),this._thumbnail.attr("src",""),this._thumbnail.hide(),this._deleteButton.hide(),a.removeThumbn
1ail()},readData:function(){this._data.url=this._thumbnail.attr("src")},setInactive:function(){this._container.hide()},updateData:function(){var e=this.getImageHandler().getActiveImage().getData();e.filename?(this._thumbnail.attr("src",e.url),this._thumbnail.show(),this._deleteButton.show()):(this._thumbnail.hide(),this._deleteButton.hide()),this._container.show()},updateAfterUpload:function(){this._thumbnail.show(),this._deleteButton.show()}}),Gallery.Image.PendingImageHandler=Class.extend({_imageHandler:null,init:function(e){this._imageHandler=e,$("#loadPendingImages").click($.proxy(this._loadImages,this)),$("#deletePendingImages").click($.proxy(this._deleteImages,this))},_deleteImages:function(){WCF.System.Confirmation.show(WCF.Language.get("gallery.image.pendingImages.delete.confirmMessage"),$.proxy((function(e){"confirm"===e&&($("#loadPendingImages").off("click"),$("#deletePendingImages").off("click"),new WCF.Action.Proxy({autoSend:!0,data:{actionName:"deletePendingImages",className:"gallery\\data\\image\\ImageAction",parameters:{tmpHash:this._imageHandler.getOption("tmpHash")}},success:$.proxy(this._success,this)}))}),this))},_loadImages:function(){$("#loadPendingImages").off("click"),$("#deletePendingImages").off("click"),new WCF.Action.Proxy({autoSend:!0,data:{actionName:"loadPendingImages",className:"gallery\\data\\image\\ImageAction",parameters:{tmpHash:this._imageHandler.getOption("tmpHash")}},success:$.proxy(this._success,this)})},_success:function(e,t,i){switch(e.actionName){case"deletePendingImages":this._imageHandler.updateRestrictions(e.returnValues.restrictions),this._imageHandler.setUserImageCount(e.returnValues.userImageCount),null!==e.returnValues.userUploadedVideoCount&&this._imageHandler.setUserUploadedVideoCount(e.returnValues.userUploadedVideoCount),null!==e.returnValues.userVideoLinkCount&&this._imageHandler.setUserVideoLinkCount(e.returnValues.userVideoLinkCount);break;case"loadPendingImages":if(e.returnValues){for(var a in e.returnValues)this._imageHandler.addImage(a,new Gallery.Image.Handler.Image(a,e.returnValues[a],null,!0));this._imageHandler.getActiveImage()||this._imageHandler.setFirstImageActive()}}(new WCF.System.Notification).show(),$("#pendingImageContainer").remove()}}),Gallery.Image.ThumbnailAreaSelector=Class.extend({_button:null,_imageDimensions:{},_imageDiv:null,_imageHandler:null,_selection:null,init:function(e){this._imageHandler=e,this._overlay=$("#galleryThumbnailAreaSelectorOverlay"),this._overlay.length||(this._overlay=$('<div id="galleryThumbnailAreaSelectorOverlay" class="dialogOverlay" />').css({height:"100%",zIndex:~~$("#pageHeaderContainer").css("z-index")-2}).appendTo(document.body),this._overlay.attr("aria-hidden","true")),this._imageDiv=$("<div />").css({overflow:"hidden",position:"absolute",zIndex:1+~~this._overlay.css("z-index")}).hide().appendTo(document.body),this._selection=$('<div id="galleryImageThumbnailAreaSelector" />').appendTo(this._imageDiv).resizable({aspectRatio:!0,containment:"parent",handles:"n, e, s, w, ne, se, sw, nw",resize:$.proxy(this._updateSelection,this)}).draggable({containment:"parent",drag:$.proxy(this._updateSelection,this)}),this._selection.append($('<div class="galleryImageThumbnailArea" />')),$(window).resize($.proxy(this._resize,this)),this._button=$("#selectThumbnailAreaButton").click($.proxy(this._click,this))},_cancelSelection:function(){var e,t,i,a;require(["WoltLabSuite/Core/Ui/Page/Action"],function(e){e.hide("galleryImageThumbnailAreaChoose"),e.hide("galleryImageThumbnailAreaCancel")}.bind(this)),this._overlay.attr("aria-hidden","true"),this._imageDiv.hide(),(e=this._imageHandler.getActiveImage()).get("thumbnailWidth")&&(t=$("#image"),i=Math.ceil(e.get("thumbnailX")/e.get("width")*t.width()),a=Math.ceil(e.get("thumbnailY")/e.get("height")*t.height()),this._selection.css({"background-position":"-"+i+"px -"+a+"px",height:Math.ceil(e.get("thumbnailHeight")*t.height()/e.get("height")),left:i,top:a,width:Math.ceil(e.get("thumbnailWidth")*t.width()/e.get("width"))}),this._selection.draggable("option","disabled",!0).resizable("option","disabled",!0).addClass("disabled"))},_click:function(e){var t,i;if(this.refresh(null,!0),t=this._imageHandler.getImageNode(),(i=this._imageHandler.getActiveImage()).get("width")>1200&&i.get("height")>900)this._selection.resizable("option","minHeight",Math.floor(t.height()/i.get("height")*Math.min(i.get("height"),900))),this._selection.resizable("option","minWidth",Math.floor(t.width()/i.get("width")*Math.min(i.get("width"),12
100)));else if(i.get("width")>560&&i.get("height")>420)this._selection.resizable("option","minHeight",Math.floor(t.height()/i.get("height")*Math.min(i.get("height"),420))),this._selection.resizable("option","minWidth",Math.floor(t.width()/i.get("width")*Math.min(i.get("width"),560)));else{if(!(i.get("width")>280&&i.get("height")>210))return;this._selection.resizable("option","minHeight",Math.floor(t.height()/i.get("height")*Math.min(i.get("height"),210))),this._selection.resizable("option","minWidth",Math.floor(t.width()/i.get("width")*Math.min(i.get("width"),280)))}require(["Language","WoltLabSuite/Core/Ui/Page/Action"],function(e,t){t.has("galleryImageThumbnailAreaChoose")?(t.show("galleryImageThumbnailAreaChoose"),t.show("galleryImageThumbnailAreaCancel")):this._createPageActions(e,t)}.bind(this)),this._overlay.attr("aria-hidden","false"),this._imageDiv.show(),this._selection.draggable("option","disabled",!1).resizable("option","disabled",!1).removeClass("disabled"),this._imageDiv.css("z-index",1+~~this._overlay.css("z-index"))},_createPageActions:function(e,t){var i=elCreate("a");i.textContent=e.get("wcf.global.button.cancel"),i.addEventListener("click",this._cancelSelection.bind(this)),t.add("galleryImageThumbnailAreaCancel",i),(i=elCreate("a")).textContent=e.get("gallery.image.thumbnail.chooseSelection"),i.addEventListener("click",this._saveArea.bind(this)),t.add("galleryImageThumbnailAreaChoose",i)},_resize:function(){var e,t,i,a=this._imageHandler.getImageNode(),s=a.getDimensions();this._selection.is(":visible")&&(e=s.height/this._imageDimensions.height,t=s.width/this._imageDimensions.width,this._selection.height(this._selection.height()*e),this._selection.width(this._selection.width()*t),this._imageDiv.height(this._imageDiv.height()*e),this._imageDiv.width(this._imageDiv.width()*t),i=a.offset(),this._imageDiv.css({left:i.left,top:i.top}),this._selection.css("background-size",s.width+"px "+s.height+"px")),this._imageDimensions=s},_saveArea:function(){var e=this._imageHandler.getActiveImage(),t=this._imageHandler.getImageNode(),i=this._selection.position();e.set("__selectionOutherHeight",this._selection.outerHeight()),e.set("__selectionOutherWidth",this._selection.outerWidth()),e.set("__selectionLeft",i.left),e.set("__selectionTop",i.top),e.set("thumbnailHeight",Math.ceil(this._selection.outerHeight()/t.height()*e.get("height"))),e.set("thumbnailWidth",Math.ceil(this._selection.outerWidth()/t.width()*e.get("width"))),e.set("thumbnailX",Math.ceil(i.left*e.get("width")/t.width())),e.set("thumbnailY",Math.ceil(i.top*e.get("height")/t.height())),e.get("thumbnailWidth")+e.get("thumbnailX")>e.get("width")&&e.set("thumbnailWidth",e.get("width")-e.get("thumbnailX")),e.get("thumbnailHeight")+e.get("thumbnailY")>e.get("height")&&e.set("thumbnailHeight",e.get("height")-e.get("thumbnailY")),require(["WoltLabSuite/Core/Ui/Page/Action"],function(e){e.hide("galleryImageThumbnailAreaChoose"),e.hide("galleryImageThumbnailAreaCancel")}.bind(this)),this._overlay.attr("aria-hidden","true"),this._imageDiv.hide(),this._imageDiv.css("z-index",0)},_updateSelection:function(e,t){this._selection.css({"background-position":"-"+t.position.left+"px -"+t.position.top+"px"})},refresh:function(e,t){var i,a,s,n,r,o=this._imageHandler.getImageNode(),l=this._imageHandler.getActiveImage();if(l.get("width")<=280&&l.get("height")<=210)return this._selection.hide(),void this._button.hide();this._button.show(),i=o.offset(),this._imageDiv.css({height:o.height(),left:i.left,top:i.top,width:o.width()}),(l.get("thumbnailWidth")||t)&&(a=this._imageDiv.height(),s=this._imageDiv.width(),n=0,r=0,l.get("thumbnailWidth")?l.get("__selectionOutherWidth")?(a=l.get("__selectionOutherHeight"),s=l.get("__selectionOutherWidth"),n=l.get("__selectionLeft"),r=l.get("__selectionTop")):(a=Math.ceil(l.get("thumbnailHeight")*o.height()/l.get("height")),s=Math.ceil(l.get("thumbnailWidth")*o.width()/l.get("width")),n=Math.ceil(l.get("thumbnailX")/l.get("width")*o.width()),r=Math.ceil(l.get("thumbnailY")/l.get("height")*o.height())):a/s<3/4?(s=parseInt(4*a/3),n=parseInt((this._imageDiv.width()-s)/2)):(a=parseInt(3*s/4),r=parseInt((this._imageDiv.height()-a)/2)),this._selection.css({"background-image":"url("+o.attr("src")+")","background-position":"-"+n+"px -"+r+"px","background-size":this._imageDiv.width()+"px "+this._imageDiv.height()+"px",height:a,left:n,top:r,width:s}),this._selection.parent().css({"background-color":"rgba(0, 0, 0, 0.5)"})),this._imageDimensions=o.getDimensions()}}),Gallery.Image.Marker={},Gallery.Image.Marker.Editor=Gallery.Image.DataHandler.Base.extend({_disableAdding:!1,_dialog:null,_markers:[],_markerHeight:0,_markerWidth:0,init:function(){$("#image > img").click($.proxy(this._addMarker,this)).droppable({accept:".galleryImageMarker",drop:$.proxy(this._updateMarkerPosition,this),over:function(e,t){t.helper[0].querySelector("fa-icon").setIcon("trash")},out:function(e,t){t.helper[0].querySelector("fa-icon").setIcon("location-pin")},tolerance:"pointer"}),this._proxy=new WCF.Action.Proxy({success:$.proxy(this._success,this),autoAbortPrevious:!0}),$(window).resize($.proxy(this._refreshMarkerPositions,this)),WCF.System.Event.addListener("com.woltlab.gallery.ImageHandler","didRotateImage",$.proxy(this._rotateMarkers,this))},_addMarker:function(e){var t,i;this._disableAdding||(this._disableAdding=!0,this.getImageHandler().getImageNode().position(),t=this._convertClickPositionToDisplayPosition({left:e.offsetX,top:e.offsetY}),i=this._createMarker(t.left,t.top),new WCF.PeriodicalExecuter($.proxy((function(e){this._showDialog(null,i),e.stop()}),this),250))},_addMarkerByData:function(e){this.getImageHandler().getActiveImage();var t,i,a,s=this.getImageHandler().getImageNode();s.width()?(s.off("load",$.proxy(this._addMarkerByData,this,e)),t=this._convertSavePositionToDisplayPosition({left:e.positionX,top:e.positionY}),this._createMarker(t.left,t.top,e),i={left:100,top:100},a=this._convertSavePositionToDisplayPosition(i),this._convertDisplayPositionToSavePosition(a),this.getImageHandler().getActiveImage(),this.getImageHandler().getImageNode()):s.on("load",$.proxy(this._addMarkerByData,this,e))},_changeMarkerType:function(e){"user"==$(e.currentTarget).val()?($("#galleryImageMarkerUser").show(),$("#galleryImageMarkerText").hide()):($("#galleryImageMarkerUser").hide(),$("#galleryImageMarkerText").show()),this._dialog.wcfDialog("render")},_convertClickPositionToDisplayPosition:function(e){this.getImageHandler().getActiveImage();var t=this.getImageHandler().getImageNode();return{left:~~(e.left+t.position().left-this._getMarkerWidth()/2),top:e.top-this._getMarkerHeight()}},_convertDisplayPositionToSavePosition:function(e){var t=this.getImageHandler().getActiveImage(),i=this.getImageHandler().getImageNode(),a=t.get("height")/i.height(),s=t.get("width")/i.width();return{left:~~((e.left-i.position().left+this._getMarkerWidth()/2)*s),top:~~((e.top+this._getMarkerHeight())*a)}},_convertSavePositionToDisplayPosition:function(e){var t=this.getImageHandler().getActiveImage(),i=this.getImageHandler().getImageNode(),a=i.height()/t.get("height"),s=i.width()/t.get("width");return{left:~~(e.left*s+i.position().left-this._getMarkerWidth()/2),top:~~(e.top*a-this._getMarkerHeight())}},_createDialog:function(){this._dialog=$("<div />").appendTo(document.body),this._dialog.append('<section class="section"><h2 class="sectionTitle">'+WCF.Language.get("gallery.image.marker.type")+'</h2><dl class="wide"><dt></dt><dd class="floated"><label><input type="radio" name="markerType" value="user" /> '+WCF.Language.get("gallery.image.marker.type.user")+'</label><label><input type="radio" name="markerType" value="text" /> '+WCF.Language.get("gallery.image.marker.type.text")+'</label></dd></dl></section><section class="section" id="galleryImageMarkerUser" style="display: none"><header class="sectionHeader"><h2 class="sectionTitle">'+WCF.Language.get("gallery.image.marker.user")+'</h2><p class="sectionDescription">'+WCF.Language.get("gallery.image.marker.user.description")+'</p></header><dl class="wide"><dt></dt><dd>
1<input type="text" name="markerUser" class="long" /></dd></dl></section><section class="section" id="galleryImageMarkerText" style="display: none"><header class="sectionHeader"><h2 class="sectionTitle">'+WCF.Language.get("gallery.image.marker.text")+'</h2><p class="sectionDescription">'+WCF.Language.get("gallery.image.marker.text.description")+'</p></header><dl class="wide"><dt></dt><dd><textarea name="markerDescription" cols="40" rows="4"></textarea></dd></dl></section><div class="formSubmit"><button type="button" class="button buttonPrimary" data-type="save">'+WCF.Language.get("wcf.global.button.save")+'</button><button type="button" class="button" data-type="delete">'+WCF.Language.get("wcf.global.button.delete")+"</button></div>"),this._dialog.find('input[name="markerType"]').change($.proxy(this._changeMarkerType,this)),this._dialog.find('button[data-type="delete"]').click($.proxy(this._deleteMarker,this)),this._dialog.find('button[data-type="save"]').click($.proxy(this._saveMarker,this)),new WCF.Search.User('#galleryImageMarkerUser input[name="markerUser"]',null,!1)},_createMarker:function(e,t,i){var a,s=$('<button type="button" class="galleryImageMarker">\n\t\t\t\t<fa-icon size="32" name="location-pin"></fa-icon>\n\t\t\t</button>').hide().appendTo(this.getImageHandler().getImageNode().parent());return i&&s.data(i),s.css({left:e,position:"absolute",top:t}).draggable({cursorAt:{left:parseInt(this._getMarkerWidth()/2)+1,top:s.height()},start:$.proxy(this._dragStart,this),stack:".galleryImageMarker",stop:$.proxy(this._dragStop,this)}),s.on("mouseup",$.proxy(this._showDialog,this)),s.show(),a=this._convertDisplayPositionToSavePosition({left:e,top:t}),s.data({imageID:this._imageHandler.getActiveImage().getImageID(),id:s.wcfIdentify(),positionX:a.left,positionY:a.top}),this._markers.push(s),s},_deleteMarker:function(){this._dialog.wcfDialog("close"),WCF.System.Confirmation.show(WCF.Language.get("gallery.image.marker.delete.confirmMessage"),$.proxy((function(e){"confirm"===e?this._removeMarker():this._dialog.wcfDialog("open")}),this))},_dragStart:function(e,t){t.helper.data("dragStartPosition",t.helper.position())},_dragStop:function(e,t){const i=t.helper[0].querySelector("fa-icon");"trash"===i.name&&(i.setIcon("spinner"),WCF.System.Confirmation.show(WCF.Language.get("gallery.image.marker.delete.confirmMessage"),$.proxy((function(e){if("confirm"===e)this._removeMarker(t.helper);else{var a=t.helper.data("dragStartPosition");t.helper.css({left:a.left,top:a.top}),i.setIcon("trash")}}),this)))},_getMarkerHeight:function(){return this._markerHeight||this._setMarkerDimensions(),this._markerHeight},_getMarkerWidth:function(){return this._markerWidth||this._setMarkerDimensions(),this._markerWidth},_removeMarker:function(e){var t,i,a,s,n;for(n=e?e.wcfIdentify():this._dialog.data("id"),t=0,i=0,a=this._markers.length;i<a;i++)if((s=this._markers[i]).data("id")==n){t=i,e||(e=s,this._dialog.wcfDialog("close"));break}e.wcfFadeOut((function(){$(this).remove()})),this._markers.splice(t,1)},_refreshMarkerPositions:function(){var e,t,i=this.getImageHandler().getImageNode();if(i.width()){if(i.off("load",$.proxy(this._refreshMarkerPositions,this)),this._imageHandler.getActiveImage().get("markers"),this._markers.length)for(e=0;e<this._markers.length;e++)(t=this._markers[e]).css(this._convertSavePositionToDisplayPosition({left:t.data("positionX"),top:t.data("positionY")}))}else i.on("load",$.proxy(this._refreshMarkerPositions,this))},_rotateMarkers:function(e){var t,i,a,s,n,r=this.getMarkers();for(t in r){switch(r[t],a=i=r[t].data("positionX"),n=s=r[t].data("positionY"),e.angle){case 90:a=e.width*e.scaleFactor-s,n=i;break;case 180:a=e.width*e.scaleFactor-i,n=e.height*e.scaleFactor-s;break;case 270:a=s,n=e.height*e.scaleFactor-i}r[t].data("positionX",parseInt(a)),r[t].data("positionY",parseInt(n))}this._markers=r,this._refreshMarkerPositions()},_saveMarker:function(e,t){var i,a,s,n,r=this._dialog.find('input[name="markerType"]:checked').val(),o=this._dialog.find('input[name="markerUser"]').val(),l=this._dialog.find('textarea[name="markerDescription"]').val();
1if(this._validateData(r,o,t,l)){for(i=null,a=0,s=this._markers.length;a<s;a++)if((n=this._markers[a]).wcfIdentify()==this._dialog.data("id")){i=n;break}i.data({description:"text"==r?l:"",type:r,userID:"user"==r?t:null,username:"user"==r?o:null}),this._dialog.wcfDialog("close")}},_setMarkerDimensions:function(){var e=$('<button type="button" class="galleryImageMarker">\n\t\t\t\t<fa-icon size="32" name="location-pin"></fa-icon>\n\t\t\t</button>').appendTo(this.getImageHandler().getImageNode().parent());this._markerHeight=e.outerHeight(),this._markerWidth=e.outerWidth(),e.remove()},_showDialog:function(e,t){var i=null;i=t||$(e.currentTarget),e&&i.hasClass("ui-draggable-dragging")||(this._dialog||this._createDialog(),this._dialog.data("id",i.wcfIdentify()),i.data("type")?(this._dialog.find('input[name="markerType"][value="'+i.data("type")+'"]').prop("checked",!0),this._dialog.find('input[name="markerUser"]').val(i.data("username")),this._dialog.find('textarea[name="markerDescription"]').val(i.data("description")),"user"==i.data("type")?($("#galleryImageMarkerUser").show(),$("#galleryImageMarkerText").hide()):($("#galleryImageMarkerUser").hide(),$("#galleryImageMarkerText").show()),this._dialog.find(".
1innerError").hide(),this._dialog.wcfDialog({title:WCF.Language.get("gallery.image.marker.edit")})):(this._dialog.find('input[name="markerType"]').prop("checked",!1),this._dialog.find('input[name="markerUser"],textarea[name="markerDescription"]').val(""),$("#galleryImageMarkerUser, #galleryImageMarkerText").hide(),this._dialog.wcfDialog({closable:!1,title:WCF.Language.get("gallery.image.marker.add")}),this._disableAdding=!1))},_success:function(e,t,i){var a,s=this._dialog.find('input[name="markerUser"]').val();if($.getLength(e.returnValues))for(a in e.returnValues)if(e.returnValues[a].label===s)return void this._saveMarker(null,e.returnValues[a].objectID);this._saveMarker(null,!1)},_updateMarkerPosition:function(e,t){var i=t.draggable,a=this._convertDisplayPositionToSavePosition(i.position());i.data({positionX:a.left,positionY:a.top})},_validateData:function(e,t,i,a){var s,n=!0;if("user"!=e&&"text"!=e?(n=!1,(s=this._dialog.find('input[name="markerType"]').parent().next(".innerError")).length||(s=$('<small class="innerError" />').text(WCF.Language.get("wcf.global.form.error.empty")),this._dialog.find('input[name="markerType"]').parent().parent().append(s)),s.show()):this._dialog.find('input[name="markerType"]').parent().next(".innerError").hide(),"user"==e)if(t){if(void 0===i)return this._proxy.setOption("data",{actionName:"getSearchResultList",className:"wcf\\data\\user\\UserAction",parameters:{data:{includeUserGroups:!1,searchString:t}}}),void this._proxy.sendRequest();!1===i&&(n=!1,(s=this._dialog.find('input[name="markerUser"]').next(".innerError")).length||(s=$('<small class="innerError" />').text(WCF.Language.get("wcf.user.username.error.notFound",{username:t})),this._dialog.find('input[name="markerUser"]').parent().append(s)),s.text(WCF.Language.get("wcf.user.username.error.notFound",{username:t})).show())}else n=!1,(s=this._dialog.find('input[name="markerUser"]').next(".innerError")).length||(s=$('<small class="innerError" />').text(WCF.Language.get("wcf.global.form.error.empty")),this._dialog.find('input[name="markerUser"]').parent().append(s)),s.text(WCF.Language.get("wcf.global.form.error.empty")).show();else this._dialog.find('input[name="markerUser"]').next(".innerError").hide();return"text"!=e||a?this._dialog.find('textarea[name="markerDescription"]').next(".innerError").hide():(n=!1,(s=this._dialog.find('textarea[name="markerDescription"]').next(".innerError")).length||(s=$('<small class="innerError" />').text(WCF.Language.get("wcf.global.form.error.empty")),this._dialog.find('textarea[name="markerDescription"]').parent().append(s)),s.show()),n},getData:function(){return{markers:this.getMarkersData(this.getMarkers())}},getMarkers:function(){return this._markers},getMarkersData:function(e){var t,i,a,s,n=[];for(t=0,i=e.length;t<i;t++)s={description:(a=e[t]).data("description")||"",id:a.wcfIdentify(),imageID:a.data("imageID"),positionX:a.data("positionX"),positionY:a.data("positionY")},a.data("markerID")&&(s.markerID=a.data("markerID")),a.data("userID")&&(s.userID=a.data("userID"),s.username=a.data("username")),n.push(s);return n},setMarkers:function(e){this.getImageHandler().getImageNode().parent().find(".galleryImageMarker").hide(),this._markers=[];for(var t=0,i=e.length;t<i;t++)e[t].id?this._markers.push($("#"+e[t].id).show()):this._addMarkerByData(e[t]);this._refreshMarkerPositions()},updateData:function(){this.setMarkers(this.getImageHandler().getActiveImage().get("markers")||[])}}),Gallery.Image.Marker.Handler=Class.extend({_image:null,_imageContainer:null,_imageHeight:0,_imageWidth:0,_markers:[],init:function(e,t,i){this._markers=e,this._imageWidth=t,this._imageHeight=i,this._imageContainer=$(".galleryImage"),this._image=this._imageContainer.find("> a > img").eq(0),this._image.width()?this._addMarkers():this._image.on("load",$.proxy(this._addMarkers,this)),$(window).resize($.proxy(this.refreshMarkerPositions,this)),$.browser.touch?$(".galleryImageMarker").click($.proxy(this._showDialog.bind(this))):$(".jsGalleryImageMarkedUser").hover($.proxy(this._highlightMarkedUser,this))},_addMarkers:function(){var e,t,i;for(this._image.off("load",$.proxy(this._addMarkers,this)),e=0,t=this._markers.length;e<t;e++)(i=this._markers[e]).userID?this._addUserMarker(i):this._addTextMarker(i)},_addTextMarker:function(e){var t=$('<span class="galleryImageMarker galleryImageTextMarker" />').data(e);this._imageContainer.append(t),this._setMarkerPosition(t)},_addUserMarker:function(e){var t=$('<span class="galleryImageMarker galleryImageUserMar
1ker userLink" />').data(e);t.attr("data-user-id",e["user-id"]),this._imageContainer.append(t),this._setMarkerPosition(t)},_highlightMarkedUser:function(e){var t=$(e.currentTarget).data("userID");this._imageContainer.children(".galleryImageMarker").each((function(e,i){var a=$(i);a.data("userID")==t&&a.toggleClass("jsMarked")}))},_setMarkerPosition:function(e){e.css({left:parseInt(this._image.position().left+e.data("positionX")*this._image.width()/this._imageWidth-e.outerWidth()/2),top:parseInt(e.data("positionY")*this._image.height()/this._imageHeight-e.outerHeight()/2)})},_showDialog:function(e){var t=$(e.currentTarget);t.hasClass("galleryImageUserMarker")?require(["Ajax","Language","Ui/Dialog"],(function(e,i,a){var s="imageMarker"+t.data("markerID");a.getDialog(s)?a.openStatic(s):e.apiOnce({data:{actionName:"getUserProfile",className:"wcf\\data\\user\\UserProfileAction",objectIDs:[t.data("userID")]},success:function(e){a.openStatic(s,e.returnValues.template,{title:i.get("gallery.image.marker")})}})})):require(["Language","Ui/Dialog"],(function(e,i){i.openStatic("imageMarker"+t.data("markerID"),t.data("description"),{title:e.get("gallery.image.marker")})}))},refreshMarkerPositions:function(){this._imageContainer.children(".galleryImageMarker").each($.proxy((function(e,t){this._setMarkerPosition($(t))}),this))}}),Gallery.Image.Marker.TextPopover=WCF.Popover.extend({init:function(){this._super(".galleryImageTextMarker")}
1,_loadContent:function(){var e=$("#"+this._activeElementID);this._insertContent(this._activeElementID,e.data("description"),!0)}});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.