1var slidInfo; 2var searchPaginatedResultsMod = (function(){ 3 var pageBaseUrl = '/cs/Satellite?pagename=KnollUtilities/Library/Page', // +{id} 4 assetBaseUrl = '/cs/Satellite?pagename=KnollUtilities/Library/Asset', // +{id} 5 currentPage = 0, 6 cache = {}, 7 curOffset, 8 pagesTotalCount = 1, 9 isWindowLoaded = false, 10 pageSizeCount, 11 resultsTotalCount, 12 loadingMessage, 13 isUsingRoutes = false, 14 hasData = false, 15 paginationStyle = 'scrolling', 16 imagePopupWidth = 0, 17 imagePopupLeft = 0, 18 downloadModalContentSectionWidth = 0, 19 downloadModalBannerWidth = 0, 20 21 setup = function(options){ 22 if (options){ 23 pageBaseUrl = options.url; 24 } 25 26 // This probably doesn't belong here - basically, unbind the style selects stuff from the window event 27 $(window).unbind('load',Custom.init) 28 // Get the load more button ready 29 updateGetPageButton() 30 31 if(isUsingRoutes){ 32 $.routes.add('{id:int}', function() {}) 33 $.routes.load(location.hash) 34 } 35 36 // Load the custom init with default settings 37 Custom.init(); 38 bindEvents(); 39 }, 40 41 bindEvents = function(){ 42 43 $('#loadNextPage').click(function(e){ 44 45 var pageid = $(this).attr('href').replace('#',''); 46 if (pageid > pagesTotalCount){ 47 e.preventDefault(); 48 return 49 } 50 51 if (!isUsingRoutes){ 52 e.preventDefault(); 53 } 54 55 getPageData(pageid); 56 57 }) 58 // no longer in use, just sets a flag that the window is loaded 59 $(window).load(function() { 60 isWindowLoaded = true; 61 }); 62 63 $(window).scroll(function () { 64 if($(window).scrollTop() >= $(document).height() - $(window).height() - 5000){ 65 $('#loadNextPage').click(); 66 } 67 }); 68 69 //Get asset id off of the jsagentdata attribute. data-attr should be renamed 70 // so should the jsAgent - data-jsAgent=fetchAsset, data-assetid 71 $('#results').on('click','[data-jsAgent="modalOpener"]', function(e){ 72 $('.lg-download-button .lg-download').addClass('downld'); 73 e.preventDefault(); 74 75 $('#mediaid').val($(this).data('mediaid')); 76 var assestDataa = $(this).data('jsagentdata'); 77 console.log(assestDataa); 78 getAssetData($(this).data('jsagentdata')); 79 80 }) 81 82 // add to the form on the page for the hi-rez image 83 84 // Do keywordSearch 85 /*$('.downloadModalContentSection .keywords-tag a').on('click','[data-jsAgent="keywordSearch"]', function(){ 86 keywordSearch($(this).data('jsagentkeyword')); 87 })*/ 88 89 // Do downloadFile function 90 $('.fileDownloadModal').on('click', '[data-jsAgent="downloadFile"]', function(e){}) 91 92 // All bound up - call click if there is no data 93 if(!hasData){ 94 $('#loadNextPage').click().show(); 95 hasData = true; 96 } 97 98 }, 99 cleanHash = function(hash){ 100 return id; 101 }, 102 getDataParameters = function(selected){ 103 var defaultUrlObj = {}, 104 defaultObjectKey = "pList" 105 parentSeparator = "|;", 106 childSeparator = ";", 107 defaultObjectValue = ''; 108 109 defaultUrlObj[defaultObjectKey] = ''; 110 111 $('#defaultParameters > li').each(function(i,el){ 112 var $this = $(this); 113 if(selected){ 114 115 if($this.children('input').is(':checked')){ 116 defaultObjectValue += $this.children('input:checked').val(); 117 defaultObjectValue += parentSeparator; 118 } else { 119 120 return 121 } 122 } else { 123 124 defaultObjectValue += $this.children('input').eq(0).val(); 125 defaultObjectValue += parentSeparator; 126 } 127 128 129 if ($this.children('.subFilter')){ 130 $this.children('.subFilter').children('li').each(function(i, el){ 131 var idx = i; 132 var subfilterstring = ''; 133 134 var $this = $(this); 135 if(selected){ 136 if($this.children('input').is(':checked')){ 137 138 subfilterstring = $this.children('input:checked').val() + childSeparator; 139 140 } else { 141 return 142 } 143 144 } else { 145 146 defaultObjectValue += $this.children('input').eq(0).val(); 147 defaultObjectValue += childSeparator; 148 } 149 150 defaultObjectValue+=subfilterstring; 151 }) 152 } 153 }) 154
155 defaultUrlObj[defaultObjectKey] = defaultObjectValue; 156 // needs to return an object 157 return defaultUrlObj; 158 }, 159 createPageAjaxUrl = function(){ 160 161 var url, 162 // creates an object of query string parameters from url 163 originalUrlParams = $.deparam.querystring(), 164 // creates a page object 165 currentHash = {page:currentPage}; 166 if($.isEmptyObject(originalUrlParams )){ 167 url = getDataParameters(); 168 } else { 169 url = getDataParameters("selected"); 170 }; 171 if(url.pList.length==0 && $.isEmptyObject(url.pList )){ 172 url = getDataParameters(); 173 } 174 // extend object to include the page object 175 url = $.extend(originalUrlParams,url,currentHash); 176 url = $.param(url); 177 return url; 178 } 179 180 updateGetPageButton = function(){ 181 182 currentPage++; 183 $('#loadNextPage').attr('href', '#'+currentPage); 184 return; 185 }, 186 187 // id == next page id. 188 getPageData = function(id){ 189 190 // not sure what the difference would be if we were using routes. The id would be passed in through 191 // the hashchange function, which would just click the link directly, but would still need to build the url 192 if(!isUsingRoutes){ 193 var url = pageBaseUrl+'&'+createPageAjaxUrl(id); 194 } 195 // we check against the cache so that we don't call the same url twice before data has come back 196 if(!cache[id]){ 197 cache[id] = url 198 }else{ 199 return; 200 } 201 202 $.ajax({ 203 type: "GET", 204 url: url, 205 dataType: 'json', 206 success: function(data) { 207 displayPageData(data) 208 //initializeLightGallery(); 209 } 210 }); 211 212 }, 213 214 displayPageData = function(data){ 215 216 var template = $('#libraryThumbnailTemplate').html(); 217 var results = Mustache.to_html(template, data); 218 219 var pageEl = $( "<div/>", {id: "page"+currentPage,"class":"clearfix"}); 220 221 pageEl.html(results).appendTo("#results"); 222 if(currentPage != data.data.totalpages){ 223 pageEl.css({'min-height':'2480px'}); 224 } 225 //$("#results :nth-child(5n)").addClass("last"); 226 227 pagesTotalCount = data.data.totalpages; 228 pageSizeCount = data.data.pagesize; 229 resultsTotalCount = data.data.totalitems; 230 231 // the lazy load the images in the data set 232 Custom.init(pageEl.attr('id')); 233 updateGetPageButton(); 234 //initializeLightGallery(); 235 236 }, 237 238 getAssetData = function(id,slid_info){ 239 slidInfo = slid_info 240 var url = assetBaseUrl+'&assetId='+id 241 242 $.ajax({ 243 type: "GET", 244 url: url, 245 dataType: 'json', 246 success: function(data) { 247 //On Successfull service call 248 displayAssetData(data) 249 } 250 }); 251 }, 252 253 displayAssetData = function(data){ 254 var slideType = slid_info; 255 $(document).off('click', '.lg-download-button .lg-download'); 256 var template = $('#libraryModalTemplate').html(); 257 var results = Mustache.to_html(template, data); 258 259 var downloadTemplate = $('#libraryDownloadModalTemplate').html(); 260 var downloadResults = Mustache.to_html(downloadTemplate, data); 261 262 var downloadVideoTemplate = $('#libraryVideoDownloadModalTemplate').html(); 263 var downloadvideoResults = Mustache.to_html(downloadVideoTemplate, data); 264 addDownloadVideo(); 265 console.log("videoUrl",videoUrl) 266 /*$('.downloadResolution .active').click(function() { 267 $('.downloadResolution.active').hide(); 268 });*/ 269 270 //slideType = $('#lg-outer-1').data('lg-slide-type'); 271 $('.lg-download-button .lg-download').html(downloadvideoResults); 272 addDownloadVideo(); 273 $('.lg-download-button .lg-download').addClass('downld'); 274 $('.fileDownloadModal').removeClass('videoModal'); 275 $('.lg-infoicon-button .lg-infoicon').click(function() { 276 $('.downloadModalContentSection').remove(); 277 $('.fileDownloadModal').remove();/* KCD-397 changes */ 278 $('.downloadResolution').hide(); 279 $('.lg-img-wrap').addClass('infoPopup'); 280 $('.lg-close-button').addClass('infoOverlay'); 281 $('.lg-img-wrap.infoPopup').append(results); 282 addClikEventToTags(); 283 }); 284 //KCD-395: starts 285 //changed for high resolution form and made form to not close until close or submitt button is clicked. 286 $('.lg-download-button .lg-download').off('click'); 287 $('.lg-download-button .lg-download').on('click', function(e) { 288 $('.lg-infoicon-button .lg-infoicon').removeClass('infoPopup'); 289 $('.lg-img-wrap.infoPopup').removeClass('infoPopup'); 290 $('.lg-close-button').removeClass('infoOverlay'); 291 if (slideType === 'image') { 292 $('.lg-download-button .lg-download').removeAttr("href"); 293 $('.downloadModalContentSection').hide(); 294 $('.fileDownloadModal').remove(); /* KCD-397 changes */ 295 $(this).addClass('downloadPopup'); 296 $('.lg-download-button').addClass('active');//KCD-399:Media Bank Pop Up - Download button position 297 $('.lg-download-button .download').remove(); 298 $('.lg-download.downloadPopup').addClass('active'); 299 300 $('.lg-download-button').append(downloadResults); 301 $('.downloadResolution').addClass('active'); 302 addClickEventTo_High_res(); 303 } 304 //KCD-395: ends 305 else if (slideType === 'video') { 306 var browserInfo = getBrowserInfo(); 307 if (browserInfo.name == 'Chrome') { 308 e.preventDefault(); 309 var videoUrl = videoSource; 310 var fileName = videoUrl.substring(videoUrl.lastIndexOf('/') + 1); 311 fetch(videoUrl) 312 .then(response => response.blob()) 313 .then(blob => { 314 var link = document.createElement('a'); 315 link.href = window.URL.createObjectURL(blob); 316 link.download = fileName; 317 document.body.appendChild(link); 318 link.click(); 319 setTimeout(function() { 320 document.body.removeChild(link); 321 }, 100); 322 });
323 } 324 } 325 addDownloadVideo(); 326 }); 327 328 329 330 // Reset imagePopup and child widths 331 if ( imagePopupWidth > 0 ) { 332 $('.fileDownloadModal .currentPopup .downloadModalBanner').width( downloadModalBannerWidth ); 333 $('.fileDownloadModal .currentPopup .downloadModalContentSection').width( downloadModalContentSectionWidth ); 334 $('.fileDownloadModal .currentPopup').parent().width( imagePopupWidth ); 335 $('.fileDownloadModal .currentPopup').parent().css( 'left', imagePopupLeft ); 336 } 337 338 // *** hide medium and low res if not available. 339 $('.fileDownloadModal .currentPopup .resolution li').each(function() { 340 if(($(this).children('a').attr('href')=="/media/") || ($(this).children('a').attr('href')=="") ||($(this).children('a').attr('href') =="undefined") || ($(this).children('a').attr('href') == null)){ // CN check actual result 341 $(this).hide(); // or remove 342 } 343 // *** hide medium and low res if not available. 344 345 }); 346 //*** video embed 347 348 $('input[name="p"]','#requestHiresForm').val(data.data.items.assetID); 349 350 }; 351 352 return { 353 init: setup 354 }; 355 356})(); 357 358function downloadImage(event) { 359 event.preventDefault(); 360 const url = event.currentTarget.href; 361 362 // Extract the filename from the URL 363 const urlParts = url.split('/'); 364 const filenameWithParams = urlParts[urlParts.length - 1]; 365 const filename = filenameWithParams.split('?')[0]; // Remove any query parameters 366 367 fetch(url) 368 .then(response => response.blob()) 369 .then(blob => { 370 const downloadUrl = window.URL.createObjectURL(blob); 371 const a = document.createElement('a'); 372 a.style.display = 'none'; 373 a.href = downloadUrl; 374 a.download = filename; // Use the extracted filename 375 document.body.appendChild(a); 376 a.click(); 377 window.URL.revokeObjectURL(downloadUrl); 378 }) 379 .catch(() => alert('Failed to download image.')); 380} 381addClikEventToTags = function() { 382 $('.keywords-tag a[data-jsAgent="keywordSearch"]').click(function() { 383 keywordSearch($(this).data('jsagentkeyword')); 384 }); 385 $('.info_Close').click(function() { 386 event.stopPropagation(); 387 $('.downloadModalContentSection').hide(); 388 $('.lg-infoicon-button .lg-infoicon').removeClass('infoPopup'); 389 $('.lg-close-button').removeClass('infoOverlay'); 390 //event.preventDefault(); 391 }); 392} 393 394function downloadImage(event) { 395 event.preventDefault(); 396 const url = event.currentTarget.href; 397 398 // Extract the filename from the URL 399 const urlParts = url.split('/'); 400 const filenameWithParams = urlParts[urlParts.length - 1]; 401 const filename = filenameWithParams.split('?')[0]; // Remove any query parameters 402 403 fetch(url) 404 .then(response => response.blob()) 405 .then(blob => { 406 const downloadUrl = window.URL.createObjectURL(blob); 407 const a = document.createElement('a'); 408 a.style.display = 'none'; 409 a.href = downloadUrl; 410 a.download = filename; // Use the extracted filename 411 document.body.appendChild(a); 412 a.click(); 413 window.URL.revokeObjectURL(downloadUrl); 414 }) 415 .catch(() => alert('Failed to download image.')); 416} 417 418addClickEventTo_High_res = function() { 419 $('.low-res').click(function(event) { 420 downloadImage(event); 421 $('.downloadResolution.active').hide(); 422 423 event.stopPropagation(); 424 }); 425 $('.med-res').click(function(event) { 426 downloadImage(event); 427 $('.downloadResolution.active').hide(); 428 event.stopPropagation(); 429 }); 430 $('.high-res').click(function() { 431 $('.downloadResolution.active').hide(); 432 $('.fileDownloadModal').remove();/* KCD-397 changes */ 433 $('.lg-content').append(fileDownloadModal_template); /* KCD-397 changes */ 434 $('.fileDownloadModal').addClass('active'); 435 $('.fileDownloadModal .imagePopup').addClass('active'); 436 /*changes for KCD-416-starts */ 437 $('.lg-show-in #closePopup1').addClass('close_high_res_form'); 438 $('.lg-show-in .close_high_res_form').click(function() { 439 $('.fileDownloadModal.active').removeClass('active'); 440 event.stopPropagation(); 441 }); 442 /*changes for KCD-416-ends */ 443 $('.downloadResolution.active').hide(); 444 //$('.fileDownloadModal.active .imagePopup').css('display', 'block'); 445 //$('.downloadPopup ul.downloadResolution').css('display', 'none'); 446 event.stopPropagation(); 447 448 449 }); 450 451} 452 var videoUrl; 453 var fileName; 454addDownloadVideo = function(){ 455 var videoLink = $('.lg-download-button .lg-download a.downloadVideo').hasClass('downloadVideo'); 456 if (videoLink) { 457 videoUrl = $('.lg-download-button .lg-download a.downloadVideo').data('videourl'); 458 fileName = videoUrl.substring(videoUrl.lastIndexOf('/') + 1); 459 //var downloadUrl = videoUrl + '?content-type=video/mp4&Content-Disposition=attachment;filename=' + encodeURIComponent(fileName) + '&MDT-Type=abinary; charset=UTF-8'; 460 $('.lg-download-button .lg-download').attr('href', videoUrl); 461 //$('.lg-download-button .lg-download').attr('download', fileName); 462 //$('.lg-download-button .lg-download').attr('type','video/mp4'); 463 //$('.lg-download-button .lg-download').attr('target',"_blank"); 464 //$('.lg-download-button .lg-download').attr('data-jsAgent',"downloadFile"); 465 $('.lg-download-button .lg-download').attr('data-videourl',videoUrl); 466 $('.lg-download-button .lg-download').removeAttr("target"); 467 $('.lg-download-button .lg-download').removeAttr("rel"); 468 $('.lg-download-button .lg-download .download_video .downloadVideo').remove(); 469 } 470} 471 472//KCD-471 changes starts 473 gridAssetInfoData = function(response){ 474 $(document).off('click', '.lg-download-button .lg-download'); 475 $('.lg-download-button .lg-download').addClass('downld'); 476 $('.fileDownloadModal').removeClass('videoModal'); 477 $('.downloadModalContentSection').remove(); 478 $('.fileDownloadModal').remove(); 479 $('.downloadResolution').hide(); 480 $('.lg-current .lg-img-wrap').addClass('infoPopup'); 481 $('.lg-close-button').addClass('infoOverlay'); 482 $('.lg-show-in .lg-current .lg-img-wrap.infoPopup').append(response); 483 addClikEventToTags(); 484 485 } 486 487 gridAssetDownloadData = function(response){ 488 var slideType = slid_info; 489 $('.lg-infoicon-button .lg-infoicon').removeClass('infoPopup'); 490 $('.lg-img-wrap.infoPopup').removeClass('infoPopup'); 491 $('.lg-close-button').removeClass('infoOverlay'); 492 if (slideType === 'image') { 493 $('.lg-download-button .lg-download').removeAttr("href"); 494 $('.downloadModalContentSection').hide(); 495 $('.fileDownloadModal').remove(); 496 $('.lg-download-button .lg-download').addClass('downloadPopup'); 497 $('.lg-download-button').addClass('active'); 498 $('.lg-download-button .download').remove(); 499 $('.lg-download.downloadPopup').addClass('active'); 500 $('.lg-show-in .lg-download-button').append(response); 501 $('.downloadResolution').addClass('active'); 502 addClickEventTo_High_res(); 503 } 504 else if (slideType === 'video') { 505 var browserInfo = getBrowserInfo(); 506 if (browserInfo.name == 'Chrome') { 507 e.preventDefault(); 508 var videoUrl = videoSource; 509 var fileName = videoUrl.substring(videoUrl.lastIndexOf('/') + 1); 510 fetch(videoUrl) 511 .then(response => response.blob()) 512 .then(blob => { 513 var link = document.createElement('a'); 514 link.href = window.URL.createObjectURL(blob); 515 link.download = fileName; 516 document.body.appendChild(link); 517 link.click(); 518 setTimeout(function() { 519 document.body.removeChild(link); 520 }, 100); 521 });
522 } 523 } 524 addDownloadVideo(); 525 }; 526//KCD-471 changes ends 527 528var fileDownloadModal_template; 529console.log("media_bank"); 530$(window).on('load', function() { 531fileDownloadModal_template = document.querySelector('.fileDownloadModal'); 532}); 533 534// Start of KCD-374: New Pop Up for Media Bank Library Page - Lazy Load and Filter compatible. 535// using mutation observer to listen for changes in results,clearfix class elements for lazy loaded media items on media bank pages. 536var prev_ele; 537const mutationCallback = function(mutationsList) { 538 mutationsList.forEach(function(mutation) { 539 if (mutation.target.className === 'clearfix') { 540 if(mutation.type == 'childList'){ 541 ele = mutation.addedNodes[0].id; 542 if(ele != prev_ele){ 543 attachLightGallery(ele); 544 prev_ele = ele; 545 } 546 } 547 } 548 }); 549}; 550 551 const observer = new MutationObserver(mutationCallback); 552 const targetNode = document.getElementById('results'); 553 if (targetNode) { 554 observer.observe(targetNode, { subtree: true, childList: true }); 555 } else { 556 console.error("Target node not found or is not a valid DOM element."); 557} 558 559function attachLightGallery(ele){ 560 var mediaImage = document.getElementById(ele); 561 if (mediaImage) { 562 lgInst = lightGallery(mediaImage, { 563 licenseKey : 'BF6D4415-F44A-40B6-A338-FFDCEAAB2F2E', 564 plugins: [lgVideo], 565 'selector' : '.media_items', 566 'width' : '700px', 567 'height' : '470px', 568 'mode' : 'lg-fade', 569 'addClass' : 'fixed-size', 570 'controls' : true, 571 'closable' : true, 572 'showCloseIcon' : true, 573 'download': true, 574 'infoicon': true, 575 'previousSlide':'Previous slide', 576 'nextSlide':'Next slide', 577 'speed': 500, 578 'videoMaxWidth': '1000px', 579 'videojs': false, 580 'videoAutoplay': false, 581 'videojsOptions': { 582 'autoplay': false, 583 'controls': true, 584 'preload': 'auto', 585 'width': '600px', 586 'height': '460px' 587 } 588 }); 589 } 590} 591 592//End of KCD-374
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.