(function(){"use strict";BX.namespace("BX.UI.Viewer");BX.UI.Viewer.Controller=function(e){this.items=null;this.currentIndex=null;this.handlers={handleCarouselItemError:this.handleCarouselItemError.bind(this)};this.baseContainer=e.baseContainer||document.body;this.setItems(e.items||[]);this.isBodyPaddingAdded=null;this.cycleMode=e.hasOwnProperty("cycleMode")?e.cycleMode:true;this.stretch=e.hasOwnProperty("stretch")?e.stretch:false;this.cachedData={};this.optionsByGroup={};this.layout={container:null,content:null,inner:null,title:null,itemContainer:null,next:null,prev:null,close:null,downloadBtn:null,moreBtn:null,error:null,loader:null,loaderContainer:null,loaderText:null,defaultActions:null,extraActions:null,carouselItems:null,carouselContainer:null,carouselScrollable:null};this.actionPanel={getItemById:()=>{}};this.maxParallelLoads=3;this.loadingItems=new Set;this.moreMenu=null;this.eventsAlreadyBinded=false;this.init()};BX.UI.Viewer.Controller.prototype={buildItemListByNode:function(e){var t=new BX.Promise;var i=[];if(this.isSeparateItem(e)){i=[e]}else if(e.dataset.viewerGroupBy){i=[].slice.call(e.ownerDocument.querySelectorAll("[data-viewer][data-viewer-group-by='"+e.dataset.viewerGroupBy+"']"))}else{i=[e]}this.loadExtensions(this.collectExtensionsForItems(i)).then(function(){var e=i.map((function(e){return BX.UI.Viewer.buildItemByNode(e)}));t.fulfill(e)}.bind(this));return t},isSeparateItem:function(e){return e.dataset.viewerSeparateItem},shouldProcessSeparateMode:function(e){return e.length===1&&e[0].isSeparateItem()},shouldRunViewer:function(e){if(!BX.type.isDomNode(e)||!e.dataset){return false}if(!e.dataset.hasOwnProperty("viewer")){return false}return true},collectExtensionsForItems:function(e){var t=new Set;e.forEach((function(e){if(BX.type.isString(e.dataset.viewerExtension)){t.add(e.dataset.viewerExtension)}}));var i=[];t.forEach((function(e){if(shouldLoadExtensions(e)){i.push(e)}}));return i},extractTargetFromEvent:function(e){var t=BX.getEventTarget(e);var i=false;var n=8;do{if(this.shouldRunViewer(t)){i=true;break}t=t.parentNode;n--}while(n>0&&t);return i?t:null},handleDocumentClick:function(e){var t=this.extractTargetFromEvent(e);if(!t){return}if(t.tagName!=="A"&&t.closest('a[target="_blank"]')){return false}e.preventDefault();this.buildItemListByNode(t).then(function(i){if(i.length===0){return}if(this.shouldProcessSeparateMode(i)){this.setItems(i).then(function(){this.openSeparate(0)}.bind(this));return}if(BX.browser.IsMac()&&e.metaKey||e.ctrlKey){this.runActionByNode(t,"download")}else{this.setItems(i).then(function(){this.open(this.getIndexByNode(t))}.bind(this))}}.bind(this))},bindEvents:function(){if(this.eventsAlreadyBinded){return}this.eventsAlreadyBinded=true;this.handlers.keyPress=this.handleKeyPress.bind(this);this.handlers.touchStart=this.handleTouchStart.bind(this);this.handlers.touchEnd=this.handleTouchEnd.bind(this);this.handlers.resize=this.handleWindowResize.bind(this);this.handlers.showNext=this.showNext.bind(this);this.handlers.showPrev=this.showPrev.bind(this);this.handlers.close=this.close.bind(this);this.handlers.handleClickOnItemContainer=this.handleClickOnItemContainer.bind(this);this.handlers.handleSliderCloseByEsc=this.handleSliderCloseByEsc.bind(this);BX.bind(document,"keydown",this.handlers.keyPress);BX.bind(window,"resize",this.handlers.resize);BX.bind(this.getItemContainer(),"touchstart",this.handlers.touchStart);BX.bind(this.getItemContainer(),"touchend",this.handlers.touchEnd);BX.bind(this.getItemContainer(),"click",this.handlers.handleClickOnItemContainer);BX.bind(this.getNextButton(),"click",this.handlers.showNext);BX.bind(this.getPrevButton(),"click",this.handlers.showPrev);BX.bind(this.getCloseButton(),"click",this.handlers.close);BX.addCustomEvent("SidePanel.Slider:onCloseByEsc",this.handlers.handleSliderCloseByEsc)},handleVisibleControls:function(e){if(BX.browser.IsMobile()||BX.hasClass(document.documentElement,"bx-touch")){return}if(this._timerIdReadingMode){clearTimeout(this._timerIdReadingMode)}if(!this.cursorInPerimeter(e)||BX.findParent(e.target,{className:"ui-viewer-next"})||BX.findParent(e.target,{className:"ui-viewer-prev"})){this.disableReadingMode()}else{this._timerIdReadingMode=setTimeout(function(){this.enableReadingMode()}.bind(this),2800)}},handleMoreBtnClick(){if(this.moreMenu===null){const e=this.getCurrentItem();const t=[...e.getMoreMenuItems(),...this.createMoreMenuItems(e)];if(t.length===0){return}this.moreMenu=new BX.Main.Menu({angle:true,minWidth:150,bindElement:this.getMoreButton(),offsetLeft:30,offsetTop:-20,items:t,cacheable:false,events:{onDestroy:()=>{this.moreMenu=null}}})}this.moreMenu.show()},enableReadingMode:function(e){if(BX.browser.IsMobile()||!this.isOnTop()){return}if(e){this._timerIdReadingMode=setTimeout(function(){this.layout.container.classList.add("ui-viewer-reading-mode")}.bind(this),5e3);return}this.layout.container.classList.add("ui-viewer-reading-mode")},disableReadingMode:function(){if(this._timerIdReadingMode){clearTimeout(this._timerIdReadingMode)}this.layout.container.classList.remove("ui-viewer-reading-mode")},cursorInPerimeter:function(e){var t=document.body.clientHeight/100*30;var i=document.body.clientWidth/100*30;i<300?i=300:null;t<300?t=300:null;if(e.ydocument.body.clientHeight-t||e.xdocument.body.clientWidth-i){return false}return true},handleSliderCloseByEsc:function(e){if(this.isOpen()&&this.getZindex()>e.getSlider().getZindex()){e.denyAction()}},adjustViewport:function(){var e=document.querySelector('[name="viewport"]');if(!e){return}this._viewportContent=e.getAttribute("content");e.setAttribute("content","width=device-width, user-scalable=no")},restoreViewport:function(){var e=document.querySelector('[name="viewport"]');if(!this._viewportContent||!e){return}e.setAttribute("content",this._viewportContent)},unbindEvents:function(){this.eventsAlreadyBinded=false;BX.unbind(document,"keydown",this.handlers.keyPress);BX.unbind(window,"resize",this.handlers.resize);BX.unbind(this.getItemContainer(),"touchstart",this.handlers.touchStart);BX.unbind(this.getItemContainer(),"touchend",this.handlers.touchEnd);BX.unbind(this.getItemContainer(),"click",this.handlers.handleClickOnItemContainer);BX.unbind(this.getNextButton(),"click",this.handlers.showNext);BX.unbind(this.getPrevButton(),"click",this.handlers.showPrev);BX.unbind(this.getCloseButton(),"click",this.handlers.close)},init:function(){},openByNode:function(e){this.buildItemListByNode(e).then(function(t){if(t.length===0){return}if(this.shouldProcessSeparateMode(t)){this.setItems(t).then(function(){this.openSeparate(0)}.bind(this));return}this.setItems(t).then(function(){this.open(this.getIndexByNode(e))}.bind(this))}.bind(this))},runActionByNode:function(e,t,i){this.buildItemListByNode(e).then(function(n){if(n.length===0){return}this.setItems(n).then(function(){this.runAction(this.getIndexByNode(e),t,i)}.bind(this))}.bind(this))},runAction(e,t,i){const n=this.getItemByIndex(e);if(t==="download"){window.open(n.getDownloadUrl(),this.isExternalLink(n.getDownloadUrl())?"_blank":"_self");return}var o=n.getActions().find((function(e){return e.id===t}));console.log("actionToRun",t,o);if(!BX.type.isFunction(o.action)){console.log("action is not a function");return}o.action.call(this,n,i)},getZindex:function(){var e=this.getViewerContainer();if(!e.parentNode){return 0}var t=BX.ZIndexManager.getComponent(e);return t.getZIndex()},setItems:function(e){if(!BX.type.isArray(e)){throw new Error("BX.UI.Viewer.Controller.setItems: 'items' has to be Array.")}BX.onCustomEvent("BX.UI.Viewer.Controller:onSetItems",[this,e]);if(this.items!==null){this.items.forEach((e=>{e.destroy()}))}this.items=e;this.items.forEach((function(e){e.setController(this)}),this);return this.loadExtensions(this.collectExtensionsForAction(e))},loadExtensions:function(e){return BX.loadExt(e)},collectExtensionsForAction:function(e){var t=new Set;e.forEach((function(e){var i=e.getActions()||[];i.forEach((function(e){if(!e.extension){return}if(!BX.type.isArray(e.extension)){e.extension=[e.extension]}e.extension.forEach((function(e){t.add(e)}))}))}));var i=[];t.forEach((function(e){if(shouldLoadExtensions(e)){i.push(e)}}));return i},appendItem:function(e){if(!(e instanceof BX.UI.Viewer.Item)){throw new Error("BX.UI.Viewer.Controller.appendItem: 'item' has to be instance of BX.UI.Viewer.Item.")}e.setController(this);this.items.push(e)},reloadItem:function(e,t){t=t||{};if(!(e instanceof BX.UI.Viewer.Item)){throw new Error("BX.UI.Viewer.Controller.reloadItem: 'item' has to be instance of BX.UI.Viewer.Item.")}var i=this.items.indexOf(e);if(i===-1){throw new Error("BX.UI.Viewer.Controller.reloadItem: there is no 'item' in items to reload.")}var n=null;if(e.sourceNode){n=BX.UI.Viewer.buildItemByNode(e.sourceNode)}else{n=new e.constructor(e.options)}e.destroy();n.setController(this);n.applyReloadOptions(t);this.items[i]=n},show:function(e,t){t=t||{};if(typeof e==="undefined"){e=0}BX.onCustomEvent("BX.UI.Viewer.Controller:onBeforeShow",[this,e]);var i=this.getItemByIndex(e);if(!i){return}this.hideErrorBlock();this.hideCurrentItem();this.disableReadingMode();this.showLoading();const n=e===0&&this.currentIndex===this.items.length-1;const o=this.currentIndex===0&&e===this.items.length-1;const s=e{this.unobserveItemLoading(i);if(this.getCurrentItem()===n){console.log("show item");this.processShowItem(n,t);if(t.asFirstToShow){n.asFirstToShow()}}this.processPreload(e,s)})).catch((e=>{this.unobserveItemLoading(i);var t=e.item;console.log("catch viewer");BX.onCustomEvent("BX.UI.Viewer.Controller:onItemError",[this,e,t]);if(this.getCurrentItem()===t){this.processError(e,t)}BX.onCustomEvent("BX.UI.Viewer.Controller:onAfterProcessItemError",[this,e,t])}));this.updateControls();this.lockScroll();this.adjustViewerHeight();const a=this.items.length>20&&(n||o);this.selectCarouselItem(this.currentIndex,t.asFirstToShow!==true&&!a)},processPreload(e,t){if(this.maxParallelLoads<1){return}const i=this.maxParallelLoads-1;let n=t==="backward"?e-1:e+1;const o=()=>{if(t==="backward"){return n>e-1-i}return n{this.unobserveItemLoading(e)})).catch((()=>{this.unobserveItemLoading(e)}));if(t==="backward"){n--}else{n++}}},reload:function(e,t){var i=this.getCurrentItem()===e;this.reloadItem(e,t);if(i){console.log("reload");this.show(this.currentIndex)}},reloadCurrentItem:function(e){this.reload(this.getCurrentItem(),e||{})},processShowItem:function(e,t){this.hideCurrentItem();this.hideLoading();this.unlockExtraActions();var i=BX.create("div",{props:{className:"ui-viewer-inner-content-wrapper"}});const n=e.getTitle();this.setTitle(BX.Type.isStringFilled(n)?n:"");var o=document.createDocumentFragment();o.appendChild(e.render(t));i.appendChild(o);var s=this.layout.container.classList;var r=e.listContainerModifiers();if(r.length){s.add.apply(s,r)}this.layout.itemContainer.appendChild(i);e.afterRender();this.adjustControlsSize(e.getContentWidth());BX.onCustomEvent("BX.UI.Viewer.Controller:onAfterShow",[this,e])},adjustControlsSize:function(e){this.getNextButton().style.width=null;this.getPrevButton().style.width=null;this.getNextButton().style.maxWidth=null;this.getPrevButton().style.maxWidth=null;if(e&&BX.Type.isFunction(e.then)){e.then((e=>{let t=Math.floor((document.body.offsetWidth-Math.ceil(e))/2);t=Math.max(t,70);this.getNextButton().style.width=t+"px";this.getPrevButton().style.width=t+"px";this.getNextButton().style.maxWidth="none";this.getPrevButton().style.maxWidth="none"}))}},processError:function(e,t){e=e||{};var i=e.message||null;if(BX.type.isArray(e.errors)&&e.errors.length){if(e.errors[0].code===1e3&&!e.message){i=BX.message("JS_UI_VIEWER_ITEM_TRANSFORMATION_ERROR_1").replace("#DOWNLOAD_LINK#",t.getSrc())}}this.hideCurrentItem();this.hideLoading();this.cleanExtraActions();var n=BX.create("div",{props:{className:"ui-viewer-inner-content-wrapper"}});var o=t.getTitle();this.setTitle(BX.Type.isStringFilled(o)?o:"");var s={};if(i){s.title=i}if(e.description){s.description=e.description}n.appendChild(this.getErrorBlock(s,t));this.layout.itemContainer.appendChild(n)},hideErrorBlock:function(){if(this.layout.error){BX.remove(this.layout.error)}},getErrorBlock:function(e,t){this.hideErrorBlock();var i=BX.prop.getString(e,"viewType","info");var n=BX.prop.getString(e,"title",BX.message("JS_UI_VIEWER_ITEM_TRANSFORMATION_ERROR_1").replace("#DOWNLOAD_LINK#",t.getSrc()));var o=BX.prop.getString(e,"description",BX.message("JS_UI_VIEWER_ITEM_TRANSFORMATION_HINT"));this.layout.error=BX.create("div",{props:{className:"ui-viewer-error"},style:{maxWidth:o?"440px":null},children:[BX.create("div",{props:{className:"ui-viewer-"+i+"-title"},html:n}),BX.create("div",{props:{className:"ui-viewer-"+i+"-text"},html:o})]});return this.layout.error},isExternalLink:function(e){var t=new RegExp("^([a-z]+://|//)","i");if(!t.test(e)){return false}if(!BX.getClass("URL")){return e.indexOf(location.hostname)===-1}try{return new URL(e).hostname!==location.hostname}catch(e){}return true},createMoreMenuItems(e){return e.getActions().map((t=>{const i={...t};if(!i.href&&BX.type.isFunction(i.action)){const t=i.action;i.onclick=(i,n)=>{t.call(this,e,{event:i,menuItem:n});this.moreMenu?.close()}}i.disabled=i.disableBeforeLoaded===true&&e.isLoaded===false;if(BX.Type.isArrayFilled(i.items)){i.items=i.items.map((e=>{const t={...e};if(BX.type.isString(t.onclick)){const e=new Function("event","popupItem",t.onclick);t.onclick=(t,i)=>{e(t,i);this.moreMenu?.close()}}return t}))}return i}))},refineItemActions(item){const defaultActions={download:{id:"download",type:"download",text:BX.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_DOWNLOAD"),href:item.src,buttonIconClass:"ui-btn-icon-download"},edit:{id:"edit",type:"edit",text:BX.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_EDIT"),buttonIconClass:"ui-btn-icon-edit"},share:{id:"share",type:"share",text:BX.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_SHARE"),buttonIconClass:"ui-btn-icon-share"},print:{id:"print",type:"print",text:BX.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_PRINT"),buttonIconClass:"ui-btn-icon-print ui-btn-disabled",disableBeforeLoaded:true},info:{id:"info",type:"info",text:BX.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_INFO"),buttonIconClass:"ui-btn-icon-info ui-action-panel-item-last"},delete:{id:"delete",type:"delete",text:BX.Loc.getMessage("JS_UI_VIEWER_ITEM_ACTION_DELETE"),buttonIconClass:"ui-btn-icon-remove"}};const actions=[];for(const[,nakedAction]of item.getNakedActions().entries()){const action=defaultActions[nakedAction.type]?BX.mergeEx(defaultActions[nakedAction.type],nakedAction):nakedAction;if(!action.id){action.id=action.type}if(action.id==="download"&&BX.Type.isStringFilled(action.href)){item.setDownloadUrl(action.href);continue}if(!action.action&&action.href){action.action=()=>{window.open(action.href,this.isExternalLink(action.href)?"_blank":"_self")}}if(BX.type.isString(action.action)){const params=action.params||{};const actionString=action.action;action.action=(item,additionalParams)=>{try{const fn=eval(actionString);fn.call(this,item,params,additionalParams)}catch(e){console.log(e)}}}actions.push(action)}return actions},getLoader:function(e){if(!this.layout.loader){this.layout.loader=BX.create("div",{props:{className:"ui-viewer-loader"},style:{zIndex:-1},children:[this.layout.loaderContainer=BX.create("div",{props:{className:"ui-viewer-loader-container"}}),this.layout.loaderText=BX.create("div",{props:{className:"ui-viewer-loader-text"},text:""})]});var t=new BX.Loader({size:130});t.show(this.layout.loaderContainer)}return this.layout.loader},getPrevButton:function(){if(!this.layout.prev){this.layout.prev=BX.create("div",{props:{className:"ui-viewer-prev"},events:{mousewheel:function(e){this.handleMouseWheelOnControlButton(this.layout.prev,e)}.bind(this)}})}return this.layout.prev},getNextButton:function(){if(!this.layout.next){this.layout.next=BX.create("div",{props:{className:"ui-viewer-next"},events:{mousewheel:function(e){this.handleMouseWheelOnControlButton(this.layout.next,e)}.bind(this)}})}return this.layout.next},handleMouseWheelOnControlButton:function(e,t){if(this._timeoutIdMouseWheel){clearTimeout(this._timeoutIdMouseWheel)}e.style.pointerEvents="none";this._timeoutIdMouseWheel=setTimeout((function(){e.style.pointerEvents=null}),50)},getCloseButton:function(){if(!this.layout.close){this.layout.close=BX.create("div",{props:{className:"ui-viewer-close"},html:'
'+'
'+"
"})}return this.layout.close},getDownloadButton:function(){if(!this.layout.downloadBtn){this.layout.downloadBtn=BX.Tag.render`
`}return this.layout.downloadBtn},getMoreButton:function(){if(!this.layout.moreBtn){this.layout.moreBtn=BX.Tag.render`
`}return this.layout.moreBtn},isOpen:function(){return this._isOpen},addBodyPadding:function(){var e=window.innerWidth-document.documentElement.clientWidth;if(BX.getClass("BXIM.messenger.popupMessenger")||e===0){return}document.body.style.paddingRight=e+"px";var t=document.getElementById("bx-im-bar");if(t){var i="rgb(238, 242, 244)";if(document.body.classList.contains("bitrix24-light-theme")){i="rgba(255, 255, 255, .1)"}if(document.body.classList.contains("bitrix24-dark-theme")){i="rgba(82, 92, 105, .1)"}t.style.borderRight=e+"px solid "+i}this.isBodyPaddingAdded=true},removeBodyPadding:function(){document.body.style.removeProperty("padding-right");var e=document.getElementById("bx-im-bar");if(e){e.style.removeProperty("border-right")}this.isBodyPaddingAdded=false},openSeparate:function(e){var t=this.getItemByIndex(e);if(!t){return}t.load().then(function(e){}.bind(this)).catch(function(e){var t=e.item;console.log("catch viewer");BX.onCustomEvent("BX.UI.Viewer.Controller:onItemError",[this,e,t]);if(this.getCurrentItem()===t){this.processError(e,t)}BX.onCustomEvent("BX.UI.Viewer.Controller:onAfterProcessItemError",[this,e,t])}.bind(this))},open:function(e){this.adjustViewport();this.addBodyPadding();var t=this.getViewerContainer();const i=this.baseContainer||document.body;i.appendChild(t);BX.focus(t);var n=BX.ZIndexManager.getComponent(t);if(!n){BX.ZIndexManager.register(t)}BX.ZIndexManager.bringToFront(t);this.createCarouselItems(e);this.show(e,{asFirstToShow:true});this.bindEvents();this._isOpen=true},setTitle:function(e){if(BX.Type.isStringFilled(e)){this.getTitleContainer().textContent=e}},getTitleContainer:function(){if(!this.layout.title){this.layout.title=BX.Tag.render` `}return this.layout.title},getExtraActions:function(){if(!this.layout.extraActions){this.layout.extraActions=BX.Tag.render`
`}return this.layout.extraActions},getDefaultActions:function(){if(!this.layout.defaultActions){this.layout.defaultActions=BX.Tag.render`
${this.getDownloadButton()} ${this.getMoreButton()}
`}return this.layout.defaultActions},observeItemLoading(e){const t=Object.hasOwn(Object.getPrototypeOf(e),"abort");if(e.isLoaded===true||!t){return}this.loadingItems.add(e);if(this.loadingItems.size>this.maxParallelLoads){for(const t of this.loadingItems){if(t===e||t===this.getCurrentItem()){continue}const i=t.abort();if(i===true){this.loadingItems.delete(t);break}}}},unobserveItemLoading(e){this.loadingItems.delete(e)},updateActions(e){this.getDownloadButton().setAttribute("href",e.getDownloadUrl());if(e.getActions().length>0){BX.Dom.removeClass(this.getMoreButton(),"--hidden")}else{BX.Dom.addClass(this.getMoreButton(),"--hidden")}this.renderExtraActions(e);if(!e.isLoaded){this.lockExtraActions()}},getCarouselContainer:function(){if(!this.layout.carouselContainer){this.layout.carouselContainer=BX.Tag.render`