1const defaultOptions={captionContent:'.pswp-caption-content',type:'auto',horizontalEdgeThreshold:20,mobileCaptionOverlapRatio:0.3,mobileLayoutBreakpoint:600,verticallyCenterImage:!1};class PhotoSwipeDynamicCaption{constructor(lightbox,options){this.options={...defaultOptions,...options};this.lightbox=lightbox;this.lightbox.on('init',()=>{this.pswp=this.lightbox.pswp;this.initCaption()})} 2initCaption(){const{pswp}=this;pswp.on('change',()=>{this.showCaption(this.pswp.currSlide)});pswp.on('calcSlideSize',(e)=>this.onCalcSlideSize(e));pswp.on('slideDestroy',(e)=>{if(e.slide.dynamicCaption){if(e.slide.dynamicCaption.element){e.slide.dynamicCaption.element.remove()} 3delete e.slide.dynamicCaption}});pswp.on('zoomPanUpdate',({slide})=>{if(pswp.opener.isOpen&&slide.dynamicCaption){if(slide.currZoomLevel>slide.zoomLevels.initial){this.hideCaption(slide)}else{this.showCaption(slide)} 4if(slide.dynamicCaption.element){let captionYOffset=0;if(slide.currZoomLevel<=slide.zoomLevels.initial){const shiftedAmount=slide.pan.y-slide.bounds.center.y;if(Math.abs(shiftedAmount)>1){captionYOffset=shiftedAmount}} 5this.setCaptionYOffset(slide.dynamicCaption.element,captionYOffset)} 6this.adjustPanArea(slide,slide.currZoomLevel)}});pswp.on('beforeZoomTo',(e)=>{this.adjustPanArea(pswp.currSlide,e.destZoomLevel)});pswp.on('tapAction',(e)=>{if(e.originalEvent.target.closest('.pswp__dynamic-caption')){e.preventDefault()}})} 7adjustPanArea(slide,zoomLevel){if(slide.dynamicCaption&&slide.dynamicCaption.adjustedPanAreaSize){if(zoomLevel>slide.zoomLevels.initial){slide.panAreaSize.x=slide.dynamicCaption.originalPanAreaSize.x;slide.panAreaSize.y=slide.dynamicCaption.originalPanAreaSize.y}else{slide.panAreaSize.x=slide.dynamicCaption.adjustedPanAreaSize.x;slide.panAreaSize.y=slide.dynamicCaption.adjustedPanAreaSize.y}}} 8useMobileLayout(){const{mobileLayoutBreakpoint}=this.options;if(typeof mobileLayoutBreakpoint==='function'){return mobileLayoutBreakpoint.call(this)}else if(typeof mobileLayoutBreakpoint==='number'){if(window.innerWidth<mobileLayoutBreakpoint){return!0}} 9return!1} 10hideCaption(slide){if(slide.dynamicCaption&&!slide.dynamicCaption.hidden){const captionElement=slide.dynamicCaption.element;if(!captionElement){return} 11slide.dynamicCaption.hidden=!0;captionElement.classList.add('pswp__dynamic-caption--faded');if(slide.captionFadeTimeout){clearTimeout(slide.captionFadeTimeout)} 12slide.captionFadeTimeout=setTimeout(()=>{captionElement.style.visibility='hidden';delete slide.captionFadeTimeout},400)}} 13setCaptionYOffset(el,y){el.style.transform=`translateY(${y}px)`} 14showCaption(slide){if(slide.dynamicCaption&&slide.dynamicCaption.hidden){const captionElement=slide.dynamicCaption.element;if(!captionElement){return} 15slide.dynamicCaption.hidden=!1;captionElement.style.visibility='visible';clearTimeout(slide.captionFadeTimeout);slide.captionFadeTimeout=setTimeout(()=>{captionElement.classList.remove('pswp__dynamic-caption--faded');delete slide.captionFadeTimeout},50)}} 16setCaptionPosition(captionEl,x,y){const isOnHorizontalEdge=(x<=this.options.horizontalEdgeThreshold);captionEl.classList[isOnHorizontalEdge?'add':'remove']('pswp__dynamic-caption--on-hor-edge');captionEl.style.left=x+'px';captionEl.style.top=y+'px'} 17setCaptionWidth(captionEl,width){if(!width){captionEl.style.removeProperty('width')}else{captionEl.style.width=width+'px'}} 18setCaptionType(captionEl,type){const prevType=captionEl.dataset.pswpCaptionType;if(type!==prevType){captionEl.classList.add('pswp__dynamic-caption--'+type);captionEl.classList.remove('pswp__dynamic-caption--'+prevType);captionEl.dataset.pswpCaptionType=type}} 19updateCaptionPosition(slide){if(!slide.dynamicCaption||!slide.dynamicCaption.type||!slide.dynamicCaption.element){return} 20if(slide.dynamicCaption.type==='mobile'){this.setCaptionType(slide.dynamicCaption.element,slide.dynamicCaption.type);slide.dynamicCaption.element.style.removeProperty('left');slide.dynamicCaption.element.style.removeProperty('top');this.setCaptionWidth(slide.dynamicCaption.element,!1);return} 21const zoomLevel=slide.zoomLevels.initial;const imageWidth=Math.ceil(slide.width*zoomLevel);const imageHeight=Math.ceil(slide.height*zoomLevel);this.setCaptionType(slide.dynamicCaption.element,slide.dynamicCaption.type);if(slide.dynamicCaption.type==='aside'){this.setCaptionPosition(slide.dynamicCaption.element,slide.bounds.center.x+imageWidth,slide.bounds.center.y);this.setCaptionWidth(slide.dynamicCaption.element,!1)}else if(slide.dynamicCaption.type==='below'){this.setCaptionPosition(slide.dynamicCaption.element,slide.bounds.center.x,slide.bounds.center.y+imageHeight);this.setCaptionWidth(slide.dynamicCaption.element,imageWidth)}} 22onCalcSlideSize(e){const{slide}=e;let captionSize;let useMobileVersion;if(!slide.dynamicCaption){slide.dynamicCaption={element:undefined,type:!1,hidden:!1};const captionHTML=this.getCaptionHTML(slide);
22if(!captionHTML){return} 23slide.dynamicCaption.element=document.createElement('div');slide.dynamicCaption.element.className='pswp__dynamic-caption pswp__hide-on-close';slide.dynamicCaption.element.innerHTML=captionHTML;this.pswp.dispatch('dynamicCaptionUpdateHTML',{captionElement:slide.dynamicCaption.element,slide});slide.holderElement.appendChild(slide.dynamicCaption.element)} 24if(!slide.dynamicCaption.element){return} 25this.storeOriginalPanAreaSize(slide);slide.bounds.update(slide.zoomLevels.initial);if(this.useMobileLayout()){slide.dynamicCaption.type='mobile';useMobileVersion=!0}else{if(this.options.type==='auto'){if(slide.bounds.center.x>slide.bounds.center.y){slide.dynamicCaption.type='aside'}else{slide.dynamicCaption.type='below'}}else{slide.dynamicCaption.type=this.options.type}} 26const imageWidth=Math.ceil(slide.width*slide.zoomLevels.initial);const imageHeight=Math.ceil(slide.height*slide.zoomLevels.initial);this.setCaptionType(slide.dynamicCaption.element,slide.dynamicCaption.type);if(slide.dynamicCaption.type==='aside'){this.setCaptionWidth(slide.dynamicCaption.element,!1);captionSize=this.measureCaptionSize(slide.dynamicCaption.element,e.slide);const captionWidth=captionSize.x;const horizontalEnding=imageWidth+slide.bounds.center.x;const horizontalLeftover=(slide.panAreaSize.x-horizontalEnding);if(horizontalLeftover<=captionWidth){slide.panAreaSize.x-=captionWidth;this.recalculateZoomLevelAndBounds(slide)}else{}}else if(slide.dynamicCaption.type==='below'||useMobileVersion){this.setCaptionWidth(slide.dynamicCaption.element,useMobileVersion?this.pswp.viewportSize.x:imageWidth);captionSize=this.measureCaptionSize(slide.dynamicCaption.element,e.slide);const captionHeight=captionSize.y;if(this.options.verticallyCenterImage){slide.panAreaSize.y-=captionHeight;this.recalculateZoomLevelAndBounds(slide)}else{const verticalEnding=imageHeight+slide.bounds.center.y;const verticalLeftover=slide.panAreaSize.y-verticalEnding;const initialPanAreaHeight=slide.panAreaSize.y;if(verticalLeftover<=captionHeight){slide.panAreaSize.y-=Math.min((captionHeight-verticalLeftover)*2,captionHeight);this.recalculateZoomLevelAndBounds(slide);const maxPositionX=slide.panAreaSize.x*this.options.mobileCaptionOverlapRatio/2;if(useMobileVersion&&slide.bounds.center.x>maxPositionX){slide.panAreaSize.y=initialPanAreaHeight;this.recalculateZoomLevelAndBounds(slide)}}}}else{} 27this.storeAdjustedPanAreaSize(slide);this.updateCaptionPosition(slide)} 28measureCaptionSize(captionEl,slide){const rect=captionEl.getBoundingClientRect();const event=this.pswp.dispatch('dynamicCaptionMeasureSize',{captionEl,slide,captionSize:{x:rect.width,y:rect.height}});return event.captionSize} 29recalculateZoomLevelAndBounds(slide){slide.zoomLevels.update(slide.width,slide.height,slide.panAreaSize);slide.bounds.update(slide.zoomLevels.initial)} 30storeAdjustedPanAreaSize(slide){if(slide.dynamicCaption){if(!slide.dynamicCaption.adjustedPanAreaSize){slide.dynamicCaption.adjustedPanAreaSize={}} 31slide.dynamicCaption.adjustedPanAreaSize.x=slide.panAreaSize.x;slide.dynamicCaption.adjustedPanAreaSize.y=slide.panAreaSize.y}} 32storeOriginalPanAreaSize(slide){if(slide.dynamicCaption){if(!slide.dynamicCaption.originalPanAreaSize){slide.dynamicCaption.originalPanAreaSize={}} 33slide.dynamicCaption.originalPanAreaSize.x=slide.panAreaSize.x;slide.dynamicCaption.originalPanAreaSize.y=slide.panAreaSize.y}} 34getCaptionHTML(slide){if(typeof this.options.captionContent==='function'){return this.options.captionContent.call(this,slide)} 35const currSlideElement=slide.data.element;let captionHTML='';if(currSlideElement){const hiddenCaption=currSlideElement.querySelector(this.options.captionContent);if(hiddenCaption){captionHTML=hiddenCaption.innerHTML}else{const img=currSlideElement.querySelector('img');if(img){captionHTML=img.getAttribute('alt')}}} 36return captionHTML}} 37export default PhotoSwipeDynamicCaption
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.