Daktronics.Image=function(url,width,height,options){var _this=this;this.url=url;this.width=width;this.height=height;this.options=options;this.urlParameters=[];Object.defineProperty(this,"type",{get:function(){let widenImage=new Daktronics.WidenImage(this.url,this.width,this.height,this.options);return widenImage.isValid?"widen":"umbraco"}});this.toString=function(){let newUrl=this.url,widenImage=new Daktronics.WidenImage(this.url,this.width,this.height,this.options);if(widenImage.isValid)newUrl=widenImage.toString();else{let umbracoImage=new Daktronics.UmbracoImage(this.url,this.width,this.height,this.options);newUrl=umbracoImage.toString()}return newUrl}};Daktronics.UmbracoImage=function(url,width,height,options){this.url=url;this.width=width;this.height=height;this.options=options;let _this=this;this.toString=function(){let baseUrl=_this.url.startsWith("/")?window.location.origin:null,url=new URL(_this.url,baseUrl);if(_this.width&&url.searchParams.set("width",_this.width),_this.height&&url.searchParams.set("height",_this.height),this.options)for(var option in this.options)this.options.hasOwnProperty(option)&&url.searchParams.set(option,_this.options[option]);return url.href}};Daktronics.WidenImage=function(url,width,height,options){this.url=url;this.width=width;this.height=height;this.options=options;this.urlParameters=[];var _this=this,isValid=function(url){return/widen(cdn)?\.net/gi.test(url)},setSize=function(url,width,height){var sizeInPathRegEx=/\/\d*x?\d*px\//gi,newUrl=url,sizeSegment;return sizeInPathRegEx.test(url)?(sizeSegment="/",width&&(sizeSegment+=width.toString()),height&&(sizeSegment+="x"+height.toString()),sizeSegment+="px/",newUrl=url.replace(sizeInPathRegEx,sizeSegment)):(width&&addUrlParameter("w",width),height&&addUrlParameter("h",height)),newUrl},addUrlParameter=function(key,value){_this.urlParameters.push(key+"="+value)};this.isValid=isValid(url);this.toString=function(){var newUrl=this.url,parametersStart=this.url.indexOf("?"),option;if(this.isValid){if(newUrl=setSize(url,this.width,this.height),this.options)for(option in this.options)this.options.hasOwnProperty(option)&&addUrlParameter(option,this.options[option]);this.urlParameters.length>0&&(parametersStart=newUrl.indexOf("?"),parametersStart>-1&&(newUrl=newUrl.substring(0,parametersStart)),newUrl+="?"+this.urlParameters.join("&"))}return newUrl}};Daktronics.ImageUtils=function(){let preload=function(imgSrcs){function onImageLoad(){imagesLoadedCount++;imagesLoadedCount===imgSrcs.length&&(allImagesLoaded=!0,deferred.resolve())}var deferred=$.Deferred(),imagesLoadedCount=0,allImagesLoaded=imagesLoadedCount===imgSrcs.length;return allImagesLoaded?deferred.resolve():$.each(imgSrcs,function(index,src){if(src)$('<img src="'+src+'">').on("load error",onImageLoad)}),deferred.promise()};return{Preload:preload}}();
Vue.component("project-gallery-photo",{props:{photoUrl:String,aspectRatio:Number,sizeOnScreen:Number,sizeOnScreenSm:Number,sizeOnScreenMd:Number,sizeOnScreenLg:Number,sizeOnScreenXl:Number,defaultWidth:{type:Number,"default":2048},maxHeight:Number,crop:{type:Boolean,"default":!0},alt:String},computed:{defaultImgSrc:function(){let width=this.defaultWidth,image=new Daktronics.Image(this.photoUrl,width,this.imageHeight(width),{crop:this.crop});return image.type!=="widen"&&(image.options=this.crop?{mode:"crop"}:null),image.toString()},imgSrcSet:function(){let srcSet=[],image=new Daktronics.Image(this.photoUrl,null,null,{crop:this.crop});return image.type!=="widen"&&(image.options=this.crop?{mode:"crop"}:null),srcSet=[400,800,1600,2048].map(value=>{image.width=value;image.height=this.imageHeight(value);let imageUrl=encodeURI(image.toString());return`${imageUrl} ${value}w`}),srcSet.join(",")},imgSizes:function(){let sizes=[];return this.sizeOnScreenXl&&sizes.push(`(min-width:1200px) ${this.sizeOnScreenXl}vw`),this.sizeOnScreenLg&&sizes.push(`(min-width:992px) ${this.sizeOnScreenLg}vw`),this.sizeOnScreenMd&&sizes.push(`(min-width:768px) ${this.sizeOnScreenMd}vw`),this.sizeOnScreenSm&&sizes.push(`(min-width:576px) ${this.sizeOnScreenSm}vw`),this.sizeOnScreen&&sizes.push(`${this.sizeOnScreen}vw`),sizes.length||sizes.push("100vw"),sizes.join(",")}},methods:{imageHeight:function(width){return Math.round(width/this.aspectRatio)}},template:`
    <img    class="lazyload"
            loading="lazy"
            :src="defaultImgSrc"
            :srcset="imgSrcSet"
            :sizes="imgSizes"
            :alt="alt"
            v-on="$listeners"/>`});
Vue.component("photo-results",{props:{containerId:String,searchResults:{type:Array,"default":[]},smallSpacing:{type:Boolean,"default":!1},showPaging:{type:Boolean,"default":!0},language:String,currentPage:Number,totalPages:Number},data:function(){return{selectedProject:null,selectedAsset:null,detailsLoaded:!1,changeProjectState:{newPage:!1,back:!1},browserTitle:document.title,hasInit:!1}},computed:{projects(){return this.searchResults.reduce((accumulator,current)=>{let accumulatorHasProject=accumulator.some(a=>a.customerNumber===current.customerNumber);return accumulatorHasProject||accumulator.push(current),accumulator},[])},hasNextProjectNumber(){let hasNextProject=!0,nextProjectNumber=this.getNextProjectNumber(),hasMorePages=this.currentPage<this.totalPages;return nextProjectNumber||hasMorePages||(hasNextProject=!1),hasNextProject},hasPrevProjectNumber(){let hasNextProject=!0,nextProjectNumber=this.getNextProjectNumber(!0),isFirstPage=this.currentPage===1;return!nextProjectNumber&&isFirstPage&&(hasNextProject=!1),hasNextProject},showResults(){return this.hasInit?!this.selectedAsset||this.selectedAsset&&this.detailsLoaded:!1}},watch:{searchResults:function(){this.changeProjectState.newPage?this.setSelectedResultFromChangeProjectState():this.setSelectedResultFromUrl()}},methods:{closeDetails:function(){document.title=this.browserTitle;this.selectedProject=null;this.selectedAsset=null},setSelectedProject:function(selectedResult){this.selectedProject=selectedResult.customerNumber;this.selectedAsset=selectedResult.id},setSelectedResultFromUrl:function(){let queryString=Object.assign({},this.$route.query);this.selectedProject=queryString.project||queryString.cid||null;this.selectedAsset=queryString.media||queryString.pn||null;this.selectedProject&&this.selectedAsset&&(this.selectedResult=this.searchResults.find(r=>r.customerNumber===this.selectedProject&&r.id===this.selectedAsset));(queryString.cid||queryString.pn)&&(delete queryString.cid,delete queryString.pn,this.$router.replace({query:queryString}))},setSelectedResultFromChangeProjectState:function(){this.changeProjectState.back?this.setSelectedProject(this.projects[this.projects.length-1]):this.setSelectedProject(this.projects[0]);this.changeProjectState.newPage=!1},getNextProjectNumber(back=false){var _a;let currentIndex=this.projects.findIndex(p=>p.customerNumber===this.selectedProject),nextIndex=back?currentIndex-1:currentIndex+1,nextProjectNumber=null;return nextIndex>=0&&nextIndex<this.projects.length&&(nextProjectNumber=(_a=this.projects[nextIndex])===null||_a===void 0?void 0:_a.customerNumber),nextProjectNumber},selectNextProject(back=false){let nextProjectNumber=this.getNextProjectNumber(back);if(nextProjectNumber){let nextProject=this.projects.find(p=>p.customerNumber===nextProjectNumber);this.setSelectedProject(nextProject)}else this.changeProjectState.newPage=!0,this.changeProjectState.back=back,this.$emit("change-page",back?this.currentPage-1:this.currentPage+1)}},mounted(){this.setSelectedResultFromUrl();this.hasInit=!0},template:`
<div class="bandWrapper">
    <div class="bandContainer" v-if="showResults">
        <photo-result v-for="result in searchResults" :key="result.id"
                :search-result="result"
                :container-id="containerId"
                :small-spacing="smallSpacing"
                @select-project="setSelectedProject"></photo-result>
    </div>
    <photo-band-paging  v-if="showPaging"
                        :container-id="containerId"
                        :current-page="currentPage"
                        :total-pages="totalPages"
                        @change-page="$emit('change-page', $event)"></photo-band-paging>
    <project-detail v-if="selectedProject"
                    :project-number="selectedProject"
                    :asset-id="selectedAsset"
                    :language="language"
                    :has-next-project="hasNextProjectNumber"
                    :has-prev-project="hasPrevProjectNumber"
                    @next-project="selectNextProject"
                    @prev-project="selectNextProject(true)"
                    @close="closeDetails"
                    @loaded="detailsLoaded = true"></project-detail>
</div>`});Vue.component("photo-result",{props:{searchResult:Object,containerId:String,smallSpacing:Boolean},data:function(){return{selectedProject:null}},computed:{name:function(){return this.searchResult.customerShortName},city:function(){return this.searchResult.city},stateProvince:function(){return this.searchResult.stateOrProvince},country:function(){return this.searchResult.country},photoUrl:function(){return this.searchResult.photoUrl},customerNumber:function(){return this.searchResult.customerNumber},assetId:function(){return this.searchResult.id},detailsUrl:function(){let url=new URL("/photos/details",window.location.href);return url.searchParams.append("pn",this.assetId),url.searchParams.append("cid",this.customerNumber),url.href},location:function(){let location=[];return this.city&&location.push(this.city),this.stateProvince&&location.push(this.stateProvince),this.country&&location.push(this.country),location.join(", ")}},methods:{setCaptionBoxHeight:function(){let $this=$(`#${this.containerId} [data-id=${this.assetId}]`),$caption=$this.find(".photoBandItemCaption"),captionHeight=$caption.outerHeight(),height=Math.ceil(Math.min($this.height(),captionHeight));height<=30&&(height=height-1);$caption.css({bottom:height*-1+"px"})},imageLoaded:function(){this.setCaptionBoxHeight();this.$root.$emit("image-loaded")},selectProject:function(){this.$emit("select-project",this.searchResult)}},created:function(){this.$nextTick(function(){window.addEventListener("resize",this.setCaptionBoxHeight.bind(this))})},template:`
<div class="photoBandItem" :data-id="assetId" :class="{'smallSpacing': smallSpacing}">
    <a href="#" :title="name" @click.prevent="selectProject">
        <project-gallery-photo :photo-url="photoUrl"
                                :alt="name"
                                :aspect-ratio="3/2"
                                :size-on-screen-lg="16.7"
                                :size-on-screen-md="33.3"
                                :size-on-screen="50"
                                :default-width="400"
                                @load="imageLoaded"></project-gallery-photo>
    </a>
    <div class="photoBandItemCaption">
        <p><strong><a href="#" :title="name" @click.prevent="selectProject">{{ name }}</a></strong></p>
        <p>{{ location }}</p>
    </div>
</div>`});
Vue.component("photo-band-paging",{props:{containerId:String,currentPage:Number,totalPages:Number},methods:{changePage:function(i){this.$emit("change-page",this.currentPage+i)},setContainerHeight:function(){let $band=$(`#${this.containerId}`),$pagingContainer=$band.find(".photo-band-paging");$pagingContainer.height($band.height())}},template:`
    <div class="photo-band-paging">
      <div class="photo-band-paging-prev" v-show="currentPage > 1" @click="changePage(-1)">
        <div class="photo-band-paging-arrow-left"></div>
      </div>
      <div class="photo-band-paging-next" v-show="currentPage < totalPages" @click="changePage(1)">
        <div class="photo-band-paging-arrow-right"></div>
      </div>
    </div>`,mounted:function(){this.$root.$on("image-loaded",this.setContainerHeight);this.$nextTick(function(){window.addEventListener("resize",this.setContainerHeight.bind(this));this.setContainerHeight()})}});
Vue.component("photo-band",{props:{keywords:String,searchFields:Array,filterExpression:String,itemLimit:Number,id:String,language:String},router:Daktronics.Components.GetVueRouter(),data:function(){return{currentPage:1,showSinglePhotoMediaQuery:"(min-width:768px)",showSinglePhoto:!window.matchMedia("(min-width:768px)").matches,defaultItemLimit:12,mobileItemLimit:6}},computed:{results(){return this.$store.state.results.search},totalResults(){return this.$store.state.results.totalCount},responsiveItemLimit(){let responsiveLimit=this.itemLimit||this.defaultItemLimit;return this.showSinglePhoto&&(responsiveLimit=this.mobileItemLimit),responsiveLimit},skipResults(){return(this.currentPage-1)*this.responsiveItemLimit},totalPages(){return Math.ceil(this.totalResults/this.responsiveItemLimit)},searchQuery(){return{keywords:this.keywords,filterExpression:this.filterExpression}}},watch:{responsiveItemLimit(newVal){newVal===this.mobileItemLimit&&(this.currentPage=this.currentPage*(this.defaultItemLimit/this.mobileItemLimit)-1);newVal===this.defaultItemLimit&&(this.currentPage=Math.ceil(this.currentPage*(this.mobileItemLimit/this.defaultItemLimit)))},skipResults(newVal){this.$store.dispatch("skipResults",newVal)},searchQuery(newVal){this.$store.commit("filterExpression",newVal.filterExpression);this.$store.dispatch("newKeywordQuery",newVal.keywords).then(()=>this.setHeight())}},methods:{setHeight(){let $container=$(`#${this.id}`);$container.height("auto");$container.height($container.height()+"px")}},created(){this.$store.dispatch("init",{context:{url:"/api/projects/search"},query:{userKeywords:this.keywords,defaultKeywords:this.defaultKeywords,searchFields:this.searchFields,filterExpression:this.filterExpression,itemLimit:this.itemLimit,facetFields:this.facetFields,language:this.language,otherSearchOptions:{hasStories:this.hasStories,includeAllFacets:this.includeAllFacets}}});this.$root.$on("image-loaded",this.setHeight);window.addEventListener("resize",()=>{this.showSinglePhoto=!window.matchMedia(this.showSinglePhotoMediaQuery).matches,this.setHeight()})},template:`
<div>
    <photo-results :search-results="results"
                   :container-id="id"
                   :show-paging="true"
                    :current-page="currentPage"
                    :total-pages="totalPages"
                    @change-page="currentPage = $event"></photo-results>
</div>`});Daktronics.Components.RegisterVues(".photoBand",makeSearchComponentStore);
