1// wppa-main.js 2// 3// contains common functions 4// 5 6wppaWppaVer = '9.1.12.002'; 7 8// jQuery(document).ready(function(){wppaConsoleLog('Document.ready')}); 9 10// jQuery(window).on('scroll',function(){wppaConsoleLog('scroll');}); 11// jQuery(window).on('resize',function(){wppaConsoleLog('resize');}); 12// jQuery(window).on('wheel',function(){wppaConsoleLog('wheel');}); 13 14// Tabby click function 15function wppaTabbyClick(){ 16 17 jQuery(window).trigger("resize"); 18 jQuery(document).trigger("tabbychange"); 19 jQuery(window).trigger("orientationchange"); 20 wppaAdjustAllFilmstrips(wppaEasingSlide); 21 22}; 23 24// Init at dom ready 25jQuery(document).ready(function() { 26 wppaDoInit(); 27}); 28 29// Init nicescrollers 30jQuery(document).ready(function(){ 31 if ( jQuery().niceScroll ) { 32 jQuery(document).ready(function(){ 33 jQuery(".wppa-edit-area").niceScroll(".wppa-nicewrap",wppaNiceScrollOpts); 34 }); 35 } 36}); 37 38// QR code 39function wppaQRUpdate(url) { 40 41 wppaAjaxSetQrCodeSrc(url, "#wppa-qr-img"); 42 return; 43} 44jQuery(document).ready(function(){ 45 wppaQRUpdate(document.location.href); 46}); 47window.onpopstate = function( event ) { 48 wppaQRUpdate(document.location.href); 49} 50 51// General initialisation 52function wppaDoInit() { 53 54 // Misc. init 55 _wppaTextDelay = wppaAnimationSpeed; 56 if ( wppaFadeInAfterFadeOut ) { 57 _wppaTextDelay *= 2; 58 } 59 if ( wppaIsMobile && wppaNoAnimateOnMobile ) { 60 _wppaTextDelay = 10; 61 } 62 63 // Make sure ajax spinners dies 64 jQuery( '.wppa-ajax-spin' ).hide(); 65 66 // Make sure ovl spinner dies 67 jQuery( '.wppa-ovl-spin' ).hide(); 68 69 // Fade ubbs out 70 setTimeout( function() { 71 72 jQuery(".wppa-ubb").each(function(){ 73 74 var divId = jQuery(this).attr('id'); 75 var mocc = divId.substr(6); 76 wppaUbb(mocc,'l','hide'); 77 wppaUbb(mocc,'r','hide'); 78 }); 79 80 }, 3000 ); 81 82 // Responsive handlers 83 jQuery(window).on("DOMContentLoaded load resize scroll wheel orientationchange",wppaDoAllAutocols); 84 85 // Size scrollable areas 86 jQuery(window).on('DOMContentLoaded load resize scroll wheel orientationchange',wppaSizeArea); 87 88 // Init masonryplus 89 jQuery(window).on('DOMContentLoaded load resize scroll wheel orientationchange', wppaInitMasonryPlus); 90 91 // When the window size changes, filmstrip needs immediate adjustment 92 jQuery(window).on('resize', function(){wppaAdjustAllFilmstrips(wppaEasingSlide)}); 93 94 // Resize nicescrollers, re-layout masonryplus 95 jQuery(window).on("DOMContentLoaded load resize scroll wheel orientationchange", function(){ 96 97 setTimeout( function() { 98 99 wppaResizeNice('wppaDoInit'); 100 wppaInitMasonryPlus(); 101 102 }, 1000); 103 }); 104 105 // Fake a resize 106 jQuery(window).trigger('resize'); 107 108 // Protect rightclick 109 wppaProtect(); 110 111 // For tabby plugin: 112 setTimeout(function(){ 113 jQuery(".responsive-tabs__heading").on("click", wppaTabbyClick); 114 jQuery(".responsive-tabs__list__item").on("click", wppaTabbyClick); 115 },10); 116 117 jQuery(document).on("tabbychange",function(){ 118 119 wppaResizeNice('tabbychange'); 120 setTimeout(function(){ 121 wppaDoAllAutocols(); 122 jQuery(window).trigger("resize"); 123 jQuery("#wppa-ovl-spin").hide(); 124 },1500); 125 }); 126 127 // Lightbox global 128 if ( wppaOvlGlobal ) { 129 jQuery("a").each(function(){ // get all a tags 130 var href = jQuery(this).attr("href"); // find href 131 if ( href ) { 132 var temp = href.split('.'); 133 var ext = temp[temp.length-1]; // find extension 134 if ( ext == 'jpg' || ext == 'jpeg' || ext == 'png' ) { // If its an image 135 if ( ! jQuery(this).attr("data-rel") ) { // should not already have attr data-rel 136 jQuery(this).attr("data-rel",wppaOvlGlobal); // Add: 'data-rel="wppa"' or: 'data-rel="wppa[single]"' 137 } 138 } 139 } 140 }); 141 } 142 143 // Align ajax spinner 144 jQuery(".wppa-ajax-spin").css({top:wppaWindowHeight()/2,left:wppaWindowWidth()/2}); 145} 146 147// Resize all nicescrollers 148var wppaResizeNiceTimer; 149var wppaResizeNiceTimestamp; 150function wppaResizeNice(from) { 151// console.log('Nice resize called from '+from); 152 clearTimeout(wppaResizeNiceTimer); 153 wppaResizeNiceTimestamp = Date.now(); 154 wppaResizeNiceTimer = setTimeout(function(){_wppaResizeNice(from)}, Math.max(wppaResizeEndDelay, wppaScrollEndDelay)); 155} 156function _wppaResizeNice(from) { 157 158 // Body? 159 if ( typeof jQuery("body").getNiceScroll == "function" ) { 160 jQuery("body").getNiceScroll().resize(); 161 } 162 163 // Areas 164 jQuery(".wppa-nicescroll").each(function(){ 165 jQuery(this).getNiceScroll().resize(); 166 }); 167} 168 169// resize end listener 170var wppaResizeEndTimer; 171jQuery(document).ready(function(){ 172 jQuery(window).on( 'resize load', function () { 173 clearTimeout( wppaResizeEndTimer ); 174 wppaResizeEndTimer = setTimeout( function () { 175 jQuery(window).trigger('wpparesizeend'); 176 }, wppaResizeEndDelay ); 177 }); 178}); 179 180// scroll end listener 181var wppaScrollEndTimer; 182jQuery(document).ready(function(){ 183 jQuery(window).on( 'scroll wheel load', function () { 184 clearTimeout( wppaScrollEndTimer ); 185 wppaScrollEndTimer = setTimeout( function () { 186 jQuery(window).trigger('wppascrollend'); 187 }, wppaScrollEndDelay ); 188 }); 189}); 190 191// Install auto div sizer 192jQuery(document).ready(function(){ 193 jQuery(window).on("DOMContentLoaded load resize scroll wheel orientationchange", wppaSizeAutoDiv); 194}); 195 196// Size auto wppa_div 197function wppaSizeAutoDiv() { 198 jQuery('.wppa-autodiv').each(function(index) { 199 var totHeight = jQuery(window).height(); 200 var factor = jQuery(this).attr('data-max-height'); 201 jQuery(this).css({maxHeight:totHeight*factor}); 202 }); 203} 204 205var wppaLastAllAutocols = 0; 206var wppaLastAllAutocolsTimer = 0; 207// Do the auto cols 208function wppaDoAllAutocols(e) { 209 210 // Too soon? 211 if ( wppaTimNow() < ( wppaLastAllAutocols + 200 ) ) { 212 if ( ! wppaLastAllAutocolsTimer ) { 213 wppaLastAllAutocolsTimer = setTimeout( wppaDoAllAutocols, 200 ); 214 } 215 return; 216 } 217 clearTimeout( wppaLastAllAutocolsTimer ); 218 wppaLastAllAutocols = wppaTimNow(); 219 220 _wppaDoAllAutocols(0); 221} 222 223function _wppaDoAllAutocols(i) { 224// console.log('doing all autocols'); 225 // Do occurrences that are responsive 226 jQuery(".wppa-container").each(function(){ 227 var divId = jQuery(this).attr("id"); 228 var mocc = divId.substr(15); 229 if ( wppaAutoColumnWidth[mocc] ) { 230 _wppaDoAutocol( mocc, i); 231 } 232 }); 233
234 // Do retries if configured (-1 is infinite) 235 if ( i < wppaExtendedResizeCount || wppaExtendedResizeCount == -1 ) { 236 setTimeout(function(){_wppaDoAllAutocols(i+1)}, wppaExtendedResizeDelay); 237 } 238 239 wppaResizeNice('wppaDoAllAutocols'); 240 241 return true; 242} 243 244// If disable right mouseclick 245function wppaProtect() { 246 if ( wppaHideRightClick ) { 247 jQuery('img' ).bind('contextmenu', function(e) { 248 return false; 249 }); 250 jQuery('video' ).bind('contextmenu', function(e) { 251 return false; 252 }); 253 jQuery('canvas' ).bind('contextmenu', function(e) { 254 return false; 255 }); 256 } 257} 258 259// Initialize Ajax render partial page content and history update 260jQuery(document).ready( function( e ) { 261 262 // Are we allowed and capable to ajax? 263 jQuery(document).ready(function(){ 264 if ( wppaAllowAjax && jQuery.ajax ) wppaCanAjaxRender = true; 265 }); 266 267 // Can we do history.pushState ? 268 if ( typeof( history.pushState ) != 'undefined') { 269 wppaCanPushState = true; 270 } 271}); 272 273// On the fly init lightbox 274function wppaUpdateLightboxes() { 275 276 // Native wppa lightbox 277 if ( typeof( wppaInitOverlay ) == 'function') { 278 wppaInitOverlay(); 279 } 280 281 // Lightbox-3 282 if ( typeof( myLightbox ) != 'undefined') { 283 if ( typeof( myLightbox.updateImageList ) == 'function') {
284 myLightbox.updateImageList(); 285 } 286 } 287 288 // PrettyPhoto 289 if ( jQuery().prettyPhoto ) { 290 jQuery( "a[rel^='prettyPhoto']" ).prettyPhoto( { 291 deeplinking: false, 292 }); 293 } 294} 295 296// Stop video of a given occurrency 297function wppaStopVideo( mocc ) { 298 var id = []; 299 var video; 300 var i; 301 302 id[1] = 'wppa-overlay-img'; 303 id[2] = 'theimg0-'+mocc; 304 id[3] = 'theimg1-'+mocc; 305 i = 0; 306 307 while ( i < 3 ) { 308 i++; 309 if ( i != 1 || mocc == 0 ) { // Stop video on lighbox only when mocc = 0, i.e. stop all video 310 video = document.getElementById( id[i] ); 311 if ( video ) { 312 if ( typeof( video.pause ) == 'function') { 313 video.pause(); 314 } 315 } 316 } 317 } 318} 319 320// Stop audio 321function wppaStopAudio( mocc ) { 322 323 var items = jQuery( '.wppa-audio-' + mocc ); 324 var i = 0; 325 while ( i < items.length ) { 326 items[i].pause(); 327// console.log('Stop audio '+mocc+' '+jQuery(items[i]).attr('id')); 328 i++; 329 } 330} 331 332// Convert a thumbnail url to a fs url 333function wppaMakeFullsizeUrl( url ) { 334var temp; 335var temp2; 336 337 url = url.replace( '/thumbs/', '/' ); // Not a thumb 338 339 // Remove sizespec for Cloudinary 340 temp = url.split( '//' ); 341 if ( temp[1] ) { 342 temp2 = temp[1].split( '/' ); 343 url = temp[0]+'//'; 344 } 345 else { 346 temp2 = temp[0].split( '/' ); 347 url = ''; 348 } 349 var j = 0; 350 while ( j < temp2.length ) { 351 var chunk = temp2[j]; 352 var w = chunk.split('_' ); 353 if ( w[0] != 'w') { 354 if ( j != 0 ) url += '/'; 355 url += chunk; 356 } 357 j++; 358 } 359 return url; 360} 361 362// Get the width of a container 363function wppaGetContainerWidth( mocc ) { 364 365 var elm = document.getElementById('wppa-container-'+mocc ); 366 if ( ! elm ) { 367 return; // container vanishd (by pla) 368 } 369 370 var w = 0; 371 372 if ( ! wppaAutoColumnWidth[mocc] ) { 373 return elm.clientWidth; 374 } 375 376 while ( w == 0 ) { 377 elm = elm.parentNode; 378 w = jQuery( elm ).width(); 379 } 380 return parseInt( w ); //* wppaAutoColumnFrac[mocc] ); 381} 382 383// Do the responsive size adjustment 384function _wppaDoAutocol( mocc, i ) { 385 386 // Auto? 387 if ( ! wppaAutoColumnWidth[mocc] ) { 388 return true; 389 } 390 391 var w; 392 var h; 393 var old; 394 var exists; 395 396 // Container 397 w = wppaGetContainerWidth(mocc); 398 399 // Anything to do here? 400 var container = document.getElementById( 'wppa-container-' + mocc ); 401 if ( ! container ) { 402 return; 403 } 404 405 // Covers 406 if ( ! wppaCoverImageResponsive[mocc] ) { 407 exists = jQuery( ".wppa-asym-text-frame-"+mocc ); 408 if ( exists.length > 1 ) { 409 old = jQuery( exists[0] ).width(); 410 411 if ( wppaResponseSpeed == 0 ) { 412 jQuery( ".wppa-asym-text-frame-"+mocc ).css( {width:(w - wppaTextFrameDelta)} ); 413 jQuery( ".wppa-cover-box-"+mocc ).css( {width:w} ); 414 } 415 else { 416 wppaAnimate( ".wppa-asym-text-frame-"+mocc, {width:(w - wppaTextFrameDelta)}, wppaResponseSpeed, wppaEasingDefault ); 417 wppaAnimate( ".wppa-cover-box-"+mocc, {width:w}, wppaResponseSpeed, wppaEasingDefault ); 418 } 419 } 420 } 421 422 // Multi Column Responsive covers 423 exists = jQuery( ".wppa-cover-box-mcr-"+mocc ); 424 if ( exists.length > 1 ) { // Yes there are 425 426 var cw = document.getElementById('wppa-albumlist-' + mocc ).clientWidth; 427 var nCovers = parseInt( ( cw + wppaCoverSpacing )/( wppaMaxCoverWidth+wppaCoverSpacing ) ) + 1; 428 var coverMax1 = nCovers - 1; 429 var MCRWidth = parseInt( ( ( cw + wppaCoverSpacing )/nCovers ) - wppaCoverSpacing ); 430 431 if ( wppaColWidth[mocc] != cw || wppaMCRWidth[mocc] != MCRWidth ) { 432 433 wppaColWidth[mocc] = cw; 434 wppaMCRWidth[mocc] = MCRWidth; 435 436 var idx = 0; 437 while ( idx < exists.length ) { 438 var col = idx % nCovers; 439 switch ( col ) { 440 case 0: /* left */ 441 jQuery( exists[idx] ).css( {'marginLeft': '0px', 'clear': 'both', 'float': 'left'}); 442 break; 443 case coverMax1: /* right */ 444 jQuery( exists[idx] ).css( {'marginLeft': '0px', 'clear': 'none', 'float': 'right'}); 445 break; 446 default: 447 jQuery( exists[idx] ).css( {'marginLeft': wppaCoverSpacing, 'clear': 'none', 'float': 'left'}); 448 } 449 idx++; 450 } 451 452 if ( wppaCoverImageResponsive[mocc] ) { 453 } 454 else { 455 wppaAnimate( ".wppa-asym-text-frame-mcr-"+mocc, {width: (MCRWidth - wppaTextFrameDelta)}, wppaResponseSpeed, wppaEasingDefault ); 456 } 457 old = jQuery( exists[0] ).width(); 458 wppaAnimate( ".wppa-cover-box-mcr-"+mocc, {width:MCRWidth}, wppaResponseSpeed, wppaEasingDefault ); 459 } 460 } 461 else if ( exists.length == 1 ) { // One cover: full width, 0 covers don't care 462 if ( wppaCoverImageResponsive[mocc] ) { 463 } 464 else { 465 wppaAnimate( ".wppa-asym-text-frame-mcr-"+mocc, {width:(w - wppaTextFrameDelta)}, wppaResponseSpeed, wppaEasingDefault ); 466 var myCss = { 467 'marginLeft': '0px', 468 'float' : 'left' 469 } 470 jQuery( ".wppa-cover-box-mcr-"+mocc ).css( myCss ); 471 } 472 } 473 474 // Grid covers. set container linheight to 0 475 var isGrid = jQuery( '.wppa-album-cover-grid-'+mocc ).length; 476 477 if ( isGrid > 0 ) { 478 479 // Set container linheight to 0 480// jQuery('#wppa-container-'+mocc).css( 'line-height', '0' ); 481 482 // Calculate width 483 var nItems = parseInt( ( w / wppaMaxCoverWidth ) + 0.9999 ); 484 if ( nItems < 1 ) nItems = 1; 485 486 // Set widths 487 jQuery( '.wppa-album-cover-grid-'+mocc ).css( {width:(100/nItems)+'%'} ); 488 } 489 490 // Thumbframes default 491 if ( wppaThumbSpaceAuto ) { 492 var tfw = parseInt( jQuery( ".thumbnail-frame-"+mocc ).css('width') ); 493 if ( tfw ) { 494 var minspc = wppaMinThumbSpace; 495 var weff = w - wppaThumbnailAreaDelta - 7; 496 var nthumbs = Math.max( 1, parseInt( weff / ( tfw + minspc ) ) ); 497 var availsp = weff - nthumbs * tfw; 498 var newspc = parseInt( availsp / ( nthumbs+1 ) ); 499 500 jQuery( ".thumbnail-frame-"+mocc ).css( {marginLeft:newspc}); 501 } 502 } 503 504 // Comalt thumbmails 505 jQuery( ".thumbnail-frame-comalt-"+mocc ).css('width', w - wppaThumbnailAreaDelta ); 506 jQuery( ".wppa-com-alt-"+mocc ).css('width', w - wppaThumbnailAreaDelta - wppaComAltSize - 16 ); 507 508 // Masonry thumbnails horizontal 509 var row = 1; 510 var rowHeightPix; 511 var rowHeightPerc = jQuery( '#wppa-mas-h-'+row+'-'+mocc ).attr('data-height-perc' ); 512 while ( rowHeightPerc ) { 513 rowHeightPix = rowHeightPerc * ( w - wppaThumbnailAreaDelta ) / 100; 514 jQuery( '#wppa-mas-h-'+row+'-'+mocc ).css('height', rowHeightPix ); 515 row++; 516 rowHeightPerc = jQuery( '#wppa-mas-h-'+row+'-'+mocc ).attr('data-height-perc' ); 517 } 518
519 // Fix bug in ie and chrome 520 wppaSetMasHorFrameWidthsForIeAndChrome(mocc); 521 522 // Slide 523 if ( document.getElementById( 'slide_frame-'+mocc ) ) { 524 wppaFormatSlide( mocc ); 525 } 526 527 // Audio 528 jQuery( "#audio-slide-"+mocc ).css('width', w - wppaBoxDelta - 6 ); 529 530 // Comments 531 jQuery( ".wppa-comment-textarea-"+mocc ).css('width',w * 0.7 ); 532 533 // Filmstrip 534 _wppaAdjustFilmstrip( mocc, wppaEasingSlide ); // reposition content 535 536 // Texts in slideshow and browsebar 537 if ( ! wppaIsMini[mocc] && typeof( _wppaSlides[mocc] ) != 'undefined') { // Mini is properly initialized 538 if ( wppaColWidth[mocc] < wppaMiniTreshold ) { 539 jQuery( '#wppa-avg-rat-'+mocc ).html( __( 'Avg', 'wp-photo-album-plus' ) ); 540 jQuery( '#wppa-my-rat-'+mocc ).html( __( 'Mine', 'wp-photo-album-plus' ) ); 541 542 jQuery( '#counter-'+mocc ).html( ( _wppaCurIdx[mocc]+1 )+' / '+_wppaSlides[mocc].length ); 543 } 544 else { 545 jQuery( '#wppa-avg-rat-'+mocc ).html( __( 'Average rating', 'wp-photo-album-plus' ) ); 546 jQuery( '#wppa-my-rat-'+mocc ).html( __( 'My rating', 'wp-photo-album-plus' ) ); 547 548 jQuery( '#counter-'+mocc ).html( __( 'Photo', 'wp-photo-album-plus' )+' '+( _wppaCurIdx[mocc]+1 )+' '+__( 'of', 'wp-photo-album-plus' )+' '+_wppaSlides[mocc].length ); 549 } 550 } 551 552 // Single photo 553 jQuery( ".wppa-sphoto-"+mocc ).css('width',w ); 554 jQuery( ".wppa-simg-"+mocc ).css('width',w - 2*wppaSlideBorderWidth ); 555 jQuery( ".wppa-simg-"+mocc ).css('height', '' ); 556 557 // Mphoto 558 jQuery( ".wppa-mphoto-"+mocc ).css('width',w + 10 ); 559 jQuery( ".wppa-mimg-"+mocc ).css('width',w ); 560 jQuery( ".wppa-mimg-"+mocc ).css('height', '' ); 561 562 // smxpdf 563 jQuery( ".smxpdf-"+mocc ).css('height', 0.8 * wppaWindowHeight() ); 564 565 // Search box 566 if ( wppaSearchBoxSelItems[mocc] > 0 ) { 567 if ( w / wppaSearchBoxSelItems[mocc] < 125 ) { 568 jQuery( ".wppa-searchsel-item-"+mocc ).css('width', '100%' ); 569 } 570 else { 571 jQuery( ".wppa-searchsel-item-"+mocc ).css('width', ( 100 / wppaSearchBoxSelItems[mocc] ) + '%' ); 572 } 573 } 574 575 // Upload dialog album selectionbox 576 jQuery( ".wppa-upload-album-"+mocc ).css('maxWidth', 0.6 * w ); 577 578 // Real calendar 579 wppaSetRealCalendarHeights( mocc ); 580 581 // Selection boxes max width 582 jQuery( ".wppa-box" ).find("select").each(function(){ 583 jQuery(this).css({maxWidth:jQuery(this).parent().width()}); 584 }); 585 586 return true; 587} 588 589// Set heights in real calendar 590function wppaSetRealCalendarHeights( mocc ) { 591 592 var w = jQuery('#wppa-real-calendar-'+mocc).width(); 593 594 if ( w > 0 ) { 595 596 var ready = true; 597
598 var h = w*wppaThumbAspect/7; 599 jQuery('.wppa-real-calendar-day-'+mocc).css({height:h}); 600 601 var f = (w/50+2); 602 jQuery('#wppa-real-calendar-'+mocc).css({fontSize:f}); 603 604 var m = f/4; 605 jQuery('.wppa-real-calendar-head-td-'+mocc).css({marginTop:m,marginBottom:m}); 606 607 var b = h/2; 608 jQuery('.wppa-realcalimg-'+mocc).each(function(){ 609 if ( this.height == 0 ) { 610 ready = false; 611 } 612 else { 613 var day = jQuery(this).attr('data-day'); 614 thisb = b - (h-this.height)/2; 615 jQuery('.wppa-real-calendar-day-content-'+day+'-'+mocc).css({bottom:thisb}); 616 } 617 }); 618 619 if ( ! ready ) { 620 setTimeout(function(){wppaSetRealCalendarHeights( mocc );},100); 621 } 622 } 623} 624 625// Fix bug in IE and Chrome 626function wppaSetMasHorFrameWidthsForIeAndChrome(mocc) { 627 // For IE and Chrome there is the class .wppa-mas-h-{mocc} 628 // Set widths of frames for IE and Chrome. These browsers interprete width:auto 629 // sometimes not in relation to the specified height, but to the available space. 630 var frames = jQuery( '.wppa-mas-h-'+mocc ); 631 var tnm = wppaMinThumbSpace; 632 for ( var i=0;i<frames.length;i++ ) { 633 634 var img = wppaGetChildI( frames[i] ); 635 if ( img ) { 636 if ( img.nodeName == 'IMG') { 637 if ( ! img.complete ) { 638 setTimeout('wppaSetMasHorFrameWidthsForIeAndChrome( '+mocc+' )', 400 ); // Try again after 400 ms. 639 return; 640 } 641 } 642 var wd = ( ( img.naturalWidth ) / ( img.naturalHeight ) * ( img.height ) ) + tnm; 643 jQuery( frames[i] ).css( {'width': wd } ); 644 } 645 } 646} 647// get (grand)child of parent with id like i-... 648function wppaGetChildI( parent ) { 649 650 var children = parent.childNodes; 651 var img = false; 652 var i; 653 654 for ( i=0; i<children.length; i++ ) { 655 var child = children[i]; 656 if ( child.id ) { 657 if ( child.id.substr( 0, 2 ) == 'i-' ) { 658 return child; 659 } 660 } 661 var grandChild = wppaGetChildI( child ); 662 if ( grandChild ) { 663 return grandChild; 664 } 665 } 666 return false; 667} 668 669// Fotomoto 670var wppaFotomotoLoaded = false; 671var wppaFotomotoToolbarIds = []; 672function fotomoto_loaded() { 673 wppaFotomotoLoaded = true; 674} 675function wppaFotomotoToolbar( mocc, url ) { 676 if ( wppaColWidth[mocc] >= wppaFotomotoMinWidth ) { // Space enough to show the toolbar 677 jQuery( '#wppa-fotomoto-container-'+mocc ).css('display','inline' ); 678 jQuery( '#wppa-fotomoto-checkout-'+mocc ).css('display','inline' ); 679 } 680 else { 681 jQuery( '#wppa-fotomoto-container-'+mocc ).css('display','none' ); 682 jQuery( '#wppa-fotomoto-checkout-'+mocc ).css('display','none' ); 683 return; // Too small 684 } 685 if ( wppaFotomoto && document.getElementById('wppa-fotomoto-container-'+mocc ) ) { // Configured and container present 686 if ( wppaFotomotoLoaded ) { 687 FOTOMOTO.API.checkinImage( url ); 688 wppaFotomotoToolbarIds[mocc] = FOTOMOTO.API.showToolbar('wppa-fotomoto-container-'+mocc, url ); 689 } 690 else { // Not loaded yet, retry after 200 ms 691 setTimeout('wppaFotomotoToolbar( '+mocc+',"'+url+'" )', 200 ); 692 } 693 } 694} 695function wppaFotomotoHide( mocc ) { 696 jQuery( '#wppa-fotomoto-container-'+mocc ).css('display','none' ); 697 jQuery( '#wppa-fotomoto-checkout-'+mocc ).css('display','none' ); 698} 699 700// Sanitize utility 701function wppaStringContainsForbiddenChars( str ) { 702var forbidden = [ '?', '&', '#', '/', '"', "'" ]; 703var i=0; 704 705 while ( i < forbidden.length ) { 706 if ( str.indexOf( forbidden[i] ) != -1 ) { 707 return true; 708 } 709 i++; 710 } 711 return false; 712} 713 714// Setup an event handler for popstate events 715window.onpopstate = function( event ) { 716 717 if ( wppaCanPushState ) { 718 if ( event.state ) { 719 if ( event.state.type ) { 720 if ( event.state.type == 'slide' ) { 721 wppaNoStackPush = true; 722 _wppaGoto( event.state.occur, event.state.slide ); 723 return; 724 } 725 if ( event.state.type == 'ajax' ) { 726 document.location.reload(); 727 return; 728 } 729 } 730 } 731 } 732}; 733 734// Push history stack for a slideshow 735function wppaPushStateSlide( mocc, slide, url ) { 736 737 if ( wppaNoStackPush ) { 738 wppaNoStackPush = false; 739// console.log('stackpush skipped'); 740 return; 741 } 742 743 if ( ! wppaIsMini[mocc] ) { // Not from a widget 744 if ( wppaCanPushState && wppaUpdateAddressLine ) { 745 if ( url != '' ) { 746 jQuery(document).ready(function(){ 747 setTimeout(function(){ 748 try { 749 history.pushState( {type: 'slide', slide: slide, occur: mocc}, "", url ); 750 wppaQRUpdate(url); 751// console.log( 'slidehistory pushed mocc = '+mocc+', slide = '+slide ); 752 } 753 catch( err ) { 754 wppaConsoleLog( 'Slide history stack update failed' ); 755 } 756 }, 1000); 757 }); 758 } 759 } 760 } 761} 762 763// Filter enables the use of <script> tags inside a script 764function wppaRepairScriptTags( text ) { 765var temp; 766var newtext; 767 768 // Just to be sure we do not run into undefined error 769 if ( typeof( text ) == 'undefined') return ''; 770 771 while ( text.indexOf( '[script') != -1 ) { 772 text = text.replace( '[script', '<script' ); 773 } 774 while ( text.indexOf( '[/script') != -1 ) { 775 text = text.replace( '[/script', '</script' ); 776 } 777 778 return text; 779 780} 781 782// Filter enables the use of a <br> tag while they are removed with strip_tags 783// Also fixes [a ] and [/a], and [img and /] 784function wppaRepairBrTags( text ) { 785var newtext; 786 787 // Just to be sure we do not run into undefined error 788 if ( typeof(text) == 'undefined') return ''; 789 790 newtext = text; 791 newtext = newtext.replace( '[br /]', '<br />' ); 792 newtext = newtext.replace( '[a', '<a' ); 793 newtext = newtext.replace( /"/g, '"' ); 794 newtext = newtext.replace( '"]', '">' ); 795 newtext = newtext.replace( '[/a]', '</a>' ); 796 newtext = newtext.replace( '[img', '<img' ); 797 newtext = newtext.replace( '/]', '/>' ); 798 799 return newtext; 800} 801 802// Replace text that is too long by ellipses 803function wppaTrimAlt( text ) { 804var newtext; 805 806 // Just to be sure we do not run into undefined error 807 if ( typeof(text) == 'undefined') return ''; 808 809 if ( text.length > 13 ) { 810 newtext = text.substr( 0,10 ) + '...'; 811 } 812 else newtext = text; 813 return newtext; 814} 815 816// Initialize FaceBook sdk 817var wppaFbInitBusy = false; 818function wppaFbInit() { 819 if ( ! wppaFbInitBusy ) { 820 if ( typeof( FB ) != 'undefined') { 821 wppaFbInitBusy = true; // set busy 822 setTimeout('_wppaFbInit()', 10 ); // do it async over 10 ms 823 } 824 else { 825 setTimeout('wppaFbInit()', 200 ); 826 } 827 } 828} 829 830var wppaFbInitDone = false; 831function _wppaFbInit() { 832 if ( wppaFbInitDone ) return; 833 FB.init( {status : true, xfbml : true } ); 834 wppaFbInitBusy = false; 835 wppaFbInitDone = true; 836} 837 838// Insert ( an emoticon ) in a comment text 839function wppaInsertAtCursor( elm, value ) { 840 841 //IE support 842 if ( document.selection ) { 843 elm.focus(); 844 sel = document.selection.createRange(); 845 sel.text = value; 846 } 847 848 //MOZILLA and others 849 else if ( elm.selectionStart || elm.selectionStart == '0') { 850 var startPos = elm.selectionStart; 851 var endPos = elm.selectionEnd; 852 elm.value = elm.value.substring( 0, startPos ) 853 + value 854 + elm.value.substring( endPos, elm.value.length ); 855 elm.selectionStart = startPos + value.length; 856 elm.selectionEnd = startPos + value.length; 857 } else { 858 elm.value += value; 859 } 860} 861 862// Initialize Google Maps 863function wppaGeoInit( mocc, lat, lon ) { 864 var mapDiv = document.getElementById( "map-canvas-"+mocc ); 865 if ( ! mapDiv ) return; 866 867 var myLatLng = new google.maps.LatLng( lat, lon ); 868 var mapOptions = { 869 disableDefaultUI: false, 870 panControl: false, 871 zoomControl: true, 872 mapTypeControl: true, 873 scaleControl: true, 874 streetViewControl: true, 875 overviewMapControl: true,
876 zoom: wppaGeoZoom, 877 center: myLatLng, 878// mapTypeId: google.maps.MapTypeId.TERRAIN, 879// mapTypeControlOptions: { 880// mapTypeIds: [ google.maps.MapTypeId.TERRAIN, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID ], 881// style: google.maps.MapTypeControlStyle.DROPDOWN_MENU 882// }, 883 }; 884 var map = new google.maps.Map( document.getElementById( "map-canvas-"+mocc ), mapOptions ); 885 var marker = new google.maps.Marker( { 886 position: myLatLng, 887 map: map, 888 title:"" 889 }); 890 891 google.maps.event.addListener( map, "center_changed", function() { 892 // 1 second after the center of the map has changed, pan back to the 893 // marker. 894 window.setTimeout(function() { 895 map.panTo( marker.getPosition() ); 896 }, 1000 ); 897 }); 898} 899 900// Encode funny chars 901function wppaEncode( xtext ) { 902 var text, result; 903 904 if ( typeof( xtext )=='undefined') return; 905 906 text = String(xtext); 907 result = text.replace( /#/g, '%23' ); 908 text = result; 909 result = text.replace( /&/g, '%26' ); 910 text = result; 911// result = text.replace( /+/g, '%2B' ); 912 var temp = text.split( '+' ); 913 var idx = 0; 914 result = ''; 915 while ( idx < temp.length ) { 916 result += temp[idx]; 917 idx++; 918 if ( idx < temp.length ) result += '%2B'; 919 } 920 921 return result; 922} 923 924// Compute photo id out of an url 925function wppaUrlToId( url ) { 926 var temp = url.split( '/wppa/' ); // if '/wppa/' found, a wppa image 927 if ( temp.length == 1 ) { 928 temp = url.split( '/upload/' ); // if '/upload/' found, a cloudinary image 929 } 930 if ( temp.length == 1 ) { 931 return 0; // Still nothing, not a wppa image or ahires image, return 0 932 } 933 // Find image id 934 temp = temp[1]; 935 temp = temp.split( '.' ); 936 temp = temp[0].replace( '/', '' ); 937 temp = temp.replace( '/', '' ); 938 temp = temp.replace( '/', '' ); 939 temp = temp.replace( '/', '' ); 940 temp = temp.replace( '/', '' ); 941 942 return temp; 943} 944 945// Init supersearch 946jQuery(document).ready(function () { 947 jQuery('.wppa-ss-button').each(function(){ 948 mocc = jQuery(this).attr('data-mocc'); 949 wppaSuperSearchSelect(mocc); 950 }); 951}); 952 953 954// Opens/closes selection boxes in supersearch html 955function wppaSuperSearchSelect( mocc, go ) { 956 957 // Init 958 jQuery( '#wppa-ss-albumopt-'+mocc ).css('display', 'none'); 959 jQuery( '#wppa-ss-albumcat-'+mocc ).css('display', 'none'); 960 jQuery( '#wppa-ss-albumname-'+mocc ).css('display', 'none'); 961 jQuery( '#wppa-ss-albumtext-'+mocc ).css('display', 'none'); 962 jQuery( '#wppa-ss-photoopt-'+mocc ).css('display', 'none'); 963 jQuery( '#wppa-ss-photoname-'+mocc ).css('display', 'none'); 964 jQuery( '#wppa-ss-photoowner-'+mocc ).css('display', 'none'); 965 jQuery( '#wppa-ss-phototag-'+mocc ).css('display', 'none'); 966 jQuery( '#wppa-ss-phototext-'+mocc ).css('display', 'none'); 967 jQuery( '#wppa-ss-photoexif-'+mocc ).css('display', 'none'); 968 jQuery( '#wppa-ss-photoiptc-'+mocc ).css('display', 'none'); 969 jQuery( '#wppa-ss-exifopts-'+mocc ).css('display', 'none'); 970 jQuery( '#wppa-ss-iptcopts-'+mocc ).css('display', 'none'); 971 jQuery( '#wppa-ss-spinner-'+mocc ).css('display', 'none'); 972 jQuery( '#wppa-ss-button-'+mocc ).css('display', 'none'); 973 974 var s1 = jQuery( '#wppa-ss-pa-'+mocc ).val(); 975 var s2 = ''; 976 var s3 = ''; 977 var data = ''; 978 switch ( s1 ) { 979 case 'a': 980 jQuery( '#wppa-ss-albumopt-'+mocc ).css('display', ''); 981 s2 = jQuery( '#wppa-ss-albumopt-'+mocc ).val(); 982 switch ( s2 ) { 983 case 'c': 984 jQuery( '#wppa-ss-albumcat-'+mocc ).css('display', ''); 985 var set = jQuery( '.wppa-ss-albumcat-'+mocc ); 986 data = ''; 987 var i; 988 for ( i = 0; i < set.length; i++ ) { 989 if ( jQuery( set[i] ).prop('selected')) { 990 data += '.' + jQuery( set[i] ).val(); 991 } 992 } 993 data = data.substr( 1 ); 994 995 if ( data != '' ) { 996 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 997 } 998 break; 999 case 'n': 1000 jQuery( '#wppa-ss-albumname-'+mocc ).css('display', ''); 1001 data = jQuery( '#wppa-ss-albumname-'+mocc ).val(); 1002 if ( data != null ) { 1003 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1004 } 1005 break; 1006 case 't': 1007 jQuery( '#wppa-ss-albumtext-'+mocc ).css('display', ''); 1008 var set = jQuery( '.wppa-ss-albumtext-'+mocc ); 1009 data = ''; 1010 var i; 1011 for ( i = 0; i < set.length; i++ ) {
1012 if ( jQuery( set[i] ).prop('selected')) { 1013 data += ';' + jQuery( set[i] ).val(); 1014 } 1015 } 1016 data = data.substr( 1 ); 1017 1018 if ( data != '' ) { 1019 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1020 } 1021 break; 1022 } 1023 break; 1024 1025 case 'p': 1026 jQuery( '#wppa-ss-photoopt-'+mocc ).css('display', ''); 1027 s2 = jQuery( '#wppa-ss-photoopt-'+mocc ).val(); 1028 switch ( s2 ) { 1029 case 'n': 1030 jQuery( '#wppa-ss-photoname-'+mocc ).css('display', ''); 1031 data = jQuery( '#wppa-ss-photoname-'+mocc ).val(); 1032 if ( data != null ) { 1033 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1034 } 1035 break; 1036 case 'o': 1037 jQuery( '#wppa-ss-photoowner-'+mocc ).css('display', ''); 1038 data = jQuery( '#wppa-ss-photoowner-'+mocc ).val(); 1039 if ( data != null ) { 1040 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1041 } 1042 break; 1043 case 'g': 1044 jQuery( '#wppa-ss-phototag-'+mocc ).css('display', ''); 1045 var set = jQuery( '.wppa-ss-phototag-'+mocc ); 1046 data = ''; 1047 var i; 1048 for ( i=0; i<set.length; i++ ) { 1049 if ( jQuery( set[i] ).prop('selected')) { 1050 data += '.' + jQuery( set[i] ).val(); 1051 } 1052 } 1053 data = data.substr( 1 ); 1054 1055 if ( data != '' ) { 1056 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1057 } 1058 break; 1059 case 't': 1060 jQuery( '#wppa-ss-phototext-'+mocc ).css('display', ''); 1061 var set = jQuery( '.wppa-ss-phototext-'+mocc ); 1062 data = ''; 1063 var i; 1064 for ( i=0; i<set.length; i++ ) { 1065 if ( jQuery( set[i] ).prop('selected')) { 1066 data += ';' + jQuery( set[i] ).val(); 1067 } 1068 } 1069 data = data.substr( 1 ); 1070 1071 if ( data != '' ) { 1072 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1073 } 1074 break; 1075 case 'i': 1076 jQuery( '#wppa-ss-photoiptc-'+mocc ).css('display', ''); 1077 s3 = jQuery( '#wppa-ss-photoiptc-'+mocc ).val(); 1078 if ( s3 ) { 1079 if ( s3.length > 2 ) { 1080 s3 = s3.replace( '#', 'H' ); // Replace # by H 1081 } 1082 if ( s3 != '' ) { 1083 jQuery( '#wppa-ss-iptcopts-'+mocc ).css('display', ''); 1084 if ( wppaLastIptc != s3 ) { 1085 wppaAjaxGetSsIptcList( mocc, s3, 'wppa-ss-iptcopts-'+mocc ); 1086 wppaLastIptc = s3; 1087 } 1088 else { 1089 data = jQuery( '#wppa-ss-iptcopts-'+mocc ).val(); 1090 if ( data != null && data != '' ) { 1091 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1092 } 1093 } 1094 } 1095 } 1096 break; 1097 case 'e': 1098 jQuery( '#wppa-ss-photoexif-'+mocc ).css('display', ''); 1099 s3 = jQuery( '#wppa-ss-photoexif-'+mocc ).val(); 1100 if ( s3 ) { 1101 if ( s3.length > 2 ) { 1102 s3 = s3.replace( '#', 'H' ); // Replace # by H 1103 } 1104 if ( s3 != '' ) { 1105 jQuery( '#wppa-ss-exifopts-'+mocc ).css('display', ''); 1106 if ( wppaLastExif != s3 ) { 1107 wppaAjaxGetSsExifList( mocc, s3, 'wppa-ss-exifopts-'+mocc ); 1108 wppaLastExif = s3; 1109 } 1110 else { 1111 data = jQuery( '#wppa-ss-exifopts-'+mocc ).val(); 1112 if ( data != null && data != '' ) { 1113 jQuery( '#wppa-ss-button-'+mocc ).css('display', ''); 1114 } 1115 } 1116 } 1117 } 1118 break; 1119 } 1120 break; 1121 } 1122 1123 // Find results 1124 if ( go ) { 1125 var url = jQuery( '#wppa-ss-pageurl-'+mocc ).val(); 1126 if ( url.indexOf( '?' ) == -1 ) { 1127 url += '?'; 1128 } 1129 else { 1130 url += '&'; 1131 } 1132 url += 'occur=1&wppa-supersearch='+s1+','+s2+','+s3+','+data; 1133 document.location.href = url; 1134 } 1135} 1136 1137// Supersearch function set size of exif/iptc itemlist 1138function wppaSetIptcExifSize( clas, selid ) { 1139 return; 1140 var t = jQuery( clas ); 1141 var n = t.length; 1142 if ( n > 6 ) n = 6; 1143 if ( n < 2 ) n = 2; 1144 jQuery( selid ).attr('size', n ); 1145} 1146 1147function wppaUpdateSearchRoot( text, root ) { 1148 var items = jQuery( ".wppa-search-root" ); 1149 var i = 0; 1150 while ( i < items.length ) { 1151 jQuery( items[i] ).html( text ); 1152 i++; 1153 } 1154 items = jQuery( ".wppa-rootbox" ); 1155 i = 0; 1156 while ( i < items.length ) { 1157 if ( root ) { 1158 jQuery( items[i] ).prop('checked', false ); 1159 jQuery( items[i] ).prop('disabled', false ); 1160 } 1161 else { 1162 jQuery( items[i] ).prop('checked', true ); 1163 jQuery( items[i] ).prop('disabled', true ); 1164 } 1165 i++; 1166 } 1167 items = jQuery( ".wppa-search-root-id" ); 1168 i = 0; 1169 while ( i < items.length ) { 1170 jQuery( items[i] ).val( root ); 1171 i++; 1172 } 1173} 1174 1175function wppaSubboxChange( elm ) { 1176 if ( jQuery( elm ).prop('checked') ) { 1177 jQuery( ".wppa-rootbox" ).each(function(index) { 1178 jQuery(this).prop('checked',true); 1179 }); 1180 } 1181} 1182 1183function wppaClearSubsearch() { 1184 var items = jQuery( ".wppa-display-searchstring" ); 1185 var i = 0; 1186 while ( i < items.length ) { 1187 jQuery( items[i] ).html( '' ); 1188 i++; 1189 } 1190 items = jQuery( ".wppa-search-sub-box" ); 1191 i = 0; 1192 while ( i < items.length ) { 1193 jQuery( items[i] ).prop('disabled', true ); 1194 i++; 1195 } 1196} 1197 1198function wppaEnableSubsearch() { 1199 var items = jQuery( ".wppa-search-sub-box" ); 1200 var i = 0; 1201 while ( i < items.length ) { 1202 jQuery( items[i] ).removeAttr('disabled' ); 1203 i++; 1204 } 1205} 1206 1207function wppaDisplaySelectedFiles(id,sep) { 1208 var theFiles = jQuery('#'+id); 1209 var i = 0; 1210 var result = ''; 1211 if ( ! sep ) { 1212 sep = ' '; 1213 } 1214 1215 while ( i<theFiles[0].files.length ) { 1216 result += theFiles[0].files[i].name+sep; 1217 i++; 1218 } 1219 1220 jQuery('#'+id+'-display').val(result); 1221 jQuery('#'+id+'-display').html(result); 1222} 1223 1224function wppaIsEmpty( str ) { 1225 if ( str == null ) return true; 1226 if ( typeof( str ) == 'undefined') return true; 1227 if ( str == '' ) return true; 1228 if ( str == false ) return true; 1229 if ( str == 0 ) return true; 1230} 1231 1232function wppaGetUploadOptions( yalb, mocc, where, onComplete ) { 1233 1234 var options = { 1235 beforeSend: function( xhr ) { 1236 if ( wppaAjaxMethod == 'rest' ) { 1237 xhr.setRequestHeader( 'X-WP-NONCE', wppaObj.restNonce ); 1238 } 1239 jQuery('#progress-'+yalb+'-'+mocc).show(); 1240 jQuery('#bar-'+yalb+'-'+mocc).width('0%'); 1241 jQuery('#message-'+yalb+'-'+mocc).html(''); 1242 jQuery('#percent-'+yalb+'-'+mocc).html(''); 1243 }, 1244 uploadProgress: function(event, position, total, percentComplete) { 1245 jQuery('#bar-'+yalb+'-'+mocc).css('backgroundColor','#7F7'); 1246 jQuery('#bar-'+yalb+'-'+mocc).width(percentComplete+'%'); 1247 if ( percentComplete < 95 ) { 1248 jQuery('#percent-'+yalb+'-'+mocc).html(percentComplete+'%'); 1249 } 1250 else { 1251 jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Processing...', 'wp-photo-album-plus' )); 1252 } 1253 }, 1254 success: function() { 1255 jQuery('#bar-'+yalb+'-'+mocc).width('100%'); 1256 jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Done!', 'wp-photo-album-plus' )); 1257 if (wppaUploadButtonText) jQuery('.wppa-upload-button').val(wppaUploadButtonText); 1258 }, 1259 complete: function(response) { 1260 var txt; 1261 if ( wppaAjaxMethod == 'rest' ) { 1262 txt = response.responseJSON.html; 1263 } 1264 else { 1265 theResult = JSON.parse(response.responseText); 1266 txt = theResult.html; 1267 } 1268 1269 if (txt && txt.indexOf(__( 'Upload failed', 'wp-photo-album-plus' ))!=-1) { 1270 jQuery('#bar-'+yalb+'-'+mocc).css('backgroundColor','#F77'); 1271 jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Upload failed', 'wp-photo-album-plus' )); 1272 jQuery('#message-'+yalb+'-'+mocc).html( '<span style="font-size: 10px;" >'+txt+'</span>' ); 1273 } 1274 else { 1275 jQuery('#message-'+yalb+'-'+mocc).html( '<span style="font-size: 10px;" >'+txt+'</span>' ); 1276 if ( where == 'thumb' || where == 'cover') { 1277 eval(onComplete); 1278 } 1279 } 1280 }, 1281 error: function( xhr, status, error ) { 1282 jQuery('#message-'+yalb+'-'+mocc).html( '<span style="color: red;" >'+__( 'Server error.', 'wp-photo-album-plus' )+'</span>' ); 1283 jQuery('#bar-'+yalb+'-'+mocc).css('backgroundColor','#F77'); 1284 jQuery('#percent-'+yalb+'-'+mocc).html(__( 'Upload failed', 'wp-photo-album-plus' )); 1285 wppaConsoleLog('Error = '+error+', status = '+status ); 1286 } 1287 }; 1288 1289 return options; 1290} 1291 1292// (re)-initialize masonryplus using jQuery().masonry() 1293function wppaInitMasonryPlus() { 1294//wppaConsoleLog('doing initmasplus'); 1295 jQuery('.grid-masonryplus').each(function(){ 1296 1297 var divId = jQuery(this).attr('id'); 1298 var mocc = divId.substr(5); 1299 var w = wppaGetContainerWidth(mocc) - wppaThumbnailAreaDelta; 1300 var cnt = parseInt( ( w + wppaTfMargin ) / ( wppaThumbSize * 0.75 + wppaTfMargin ) ); 1301 if ( cnt == 0 ) cnt = 1; 1302 var colWidth = parseInt( w / cnt ); 1303
1304 jQuery(".grid-item").css('visibility', 'visible'); 1305 jQuery(".grid-item-" + mocc).css('width', colWidth + 'px'); 1306 jQuery('#grid-' + mocc ).masonry({ 1307 itemSelector: '.grid-item-' + mocc, 1308 columnWidth: colWidth, 1309 fitWidth: true, 1310 transitionDuration: 0 1311 }); 1312 }); 1313} 1314 1315/* Start fullscreen functions */ 1316// Initialize 1317jQuery(document).ready(function(){ 1318 1319 // Create global buttons if required 1320 jQuery(document).ready(function(){ 1321 if ( wppaFsPolicy == 'global' ) wppaGlobalFS(); 1322 }); 1323 1324 // Install handlers 1325 jQuery(window).on("DOMContentLoaded load", wppaFsShow); 1326 jQuery(document).on("fullscreenchange mozfullscreenchange webkitfullscreenchange msfullscreenchange", wppaFsChange); 1327 1328}); 1329 1330// Handle fullscreen change event 1331function wppaFsChange() { 1332 1333 // Show the right buttons 1334 wppaFsShow(); 1335 1336 // Re-display lightbox 1337 wppaOvlShowSame('fschange'); 1338} 1339 1340// Create global fullsize buttons 1341function wppaGlobalFS() { 1342 1343 if ( wppaIsIpad ) return false; 1344 if ( wppaIsSafari ) return false; 1345 1346 var top = parseInt( wppaGlobalFsIconSize / 4 ); 1347 var rgt = top; 1348 if ( ! wppaIsMobile && jQuery( '#wpadminbar' ).length > 0 ) { 1349 top += jQuery( '#wpadminbar' ).height(); 1350 } 1351 1352 jQuery('body').append( 1353 '<div' + 1354 ' id="wppa-fulls-btn-1"' + 1355 ' class="wppa-fulls-btn"' + 1356 ' style="position:fixed;top:' + top + 'px;right:' + rgt + 'px;display:none;"' + 1357 ' title="Enter fullscreen"' + 1358 ' onclick="wppaFsOn()"' + 1359 ' >' + 1360 wppaSvgHtml( 'Full-Screen', wppaGlobalFsIconSize + 'px', true, false, '0', '0', '0', '0' ) + 1361 '</div>'); 1362 1363 jQuery('body').append( 1364 '<div' + 1365 ' id="wppa-exit-fulls-btn-1"' + 1366 ' class="wppa-exit-fulls-btn"' + 1367 ' style="position:fixed;top:' + top + 'px;right:' + rgt + 'px;display:none;"' + 1368 ' title="Leave fullscreen"' + 1369 ' onclick="wppaFsOff()"' + 1370 ' >' + 1371 wppaSvgHtml( 'Exit-Full-Screen', wppaGlobalFsIconSize + 'px', true, false, '0', '0', '0', '0' ) + 1372 '</div>'); 1373 1374 wppaFsShow(); 1375 1376} 1377 1378// Switch fullscreen on 1379function wppaFsOn() { 1380 1381 var docElm = document.documentElement; 1382 if (docElm.requestFullscreen) { 1383 docElm.requestFullscreen(); 1384 } 1385 else if (docElm.mozRequestFullScreen) { 1386 docElm.mozRequestFullScreen(); 1387 } 1388 else if (docElm.webkitRequestFullScreen) { 1389 docElm.webkitRequestFullScreen(); 1390 } 1391 1392} 1393 1394// Switch fullscreen off 1395function wppaFsOff() { 1396 1397 if (document.exitFullscreen) { 1398 document.exitFullscreen(); 1399 } 1400 else if (document.mozCancelFullScreen) { 1401 document.mozCancelFullScreen(); 1402 } 1403 else if (document.webkitCancelFullScreen) { 1404 document.webkitCancelFullScreen(); 1405 } 1406 1407} 1408 1409// Is fullscreen on? 1410function wppaIsFs() { 1411 1412 if ( wppaIsIpad ) return false; 1413 if ( wppaIsSafari ) return false; 1414 return ( document.fullscreenElement !== null ); 1415} 1416 1417// Show / hide the right buttons 1418function wppaFsShow() { 1419 1420 if ( wppaIsFs() ) { 1421 jQuery( '.wppa-fulls-btn' ).hide(); 1422 jQuery( '.wppa-exit-fulls-btn' ).show(); 1423 } 1424 else { 1425 jQuery( '.wppa-fulls-btn' ).show(); 1426 jQuery( '.wppa-exit-fulls-btn' ).hide(); 1427 } 1428 1429 if ( wppaOvlOpen && wppaFsPolicy == 'global' && wppaOvlBigBrowse ) { 1430 jQuery( '#wppa-fulls-btn-1' ).hide(); 1431 jQuery( '#wppa-exit-fulls-btn-1' ).hide(); 1432 } 1433 1434} 1435 1436 1437var wppaAudioSeqno; 1438var wppaAudioOnlyRuns = []; 1439// Do the audio only 1440function wppaDoAudioOnly(tagid,urls,seqno,mocc) { 1441 1442 wppaAudioSeqno = seqno; 1443 1444 var body; 1445 var oldurl; 1446 var newurl = urls[0]; 1447 1448 body = ''; 1449 urls.forEach( function(currentValue, index){ 1450 var t = currentValue.split('.'); 1451 var ext = t[t.length-1]; 1452 body += '<source id="wppa-audio-source-'+index+'-'+mocc+'" src="'+currentValue+'" type="audio/'+ext+'">'; 1453 }); 1454 body += 'Your browser does not support the audio element.'; 1455 1456 // Get current url 1457 oldurl = jQuery("#wppa-audio-source-0-"+mocc).attr("src"); 1458 1459 // Not running 1460 if ( oldurl == "" ) { 1461 wppaAudioOnlyRuns[mocc] = false; 1462 } 1463 1464 // Same: stop when playing 1465 if ( oldurl == newurl && wppaAudioOnlyRuns[mocc] ) { 1466 document.getElementById("wppa-audioonly-"+mocc).pause(); 1467 wppaAudioOnlyRuns[mocc] = false; 1468 } 1469 1470 // Same: resume when stopped 1471 else if ( oldurl == urls[0] ) { 1472 document.getElementById("wppa-audioonly-"+mocc).play(); 1473 wppaAudioOnlyRuns[mocc] = seqno; 1474 wppaShowAudioDesc(seqno,mocc); 1475 } 1476 1477 // Different 1478 else { 1479 jQuery("#"+tagid).html(body); 1480 document.getElementById("wppa-audioonly-"+mocc).load(); 1481 document.getElementById("wppa-audioonly-"+mocc).play(); 1482 jQuery(".wppa-audiolabel-"+mocc).css("font-weight","normal"); 1483 jQuery("#audiolabel-"+mocc+"-"+seqno).css("font-weight","bold"); 1484 jQuery("#audiolabel-"+mocc+"-"+(seqno-1)).blur(); 1485 jQuery("#audiolabel-"+mocc+"-"+seqno).blur(); 1486 1487 // Hide previous 1488 wppaHideAudioDesc(wppaAudioOnlyRuns[mocc],mocc,true); 1489 1490 wppaAudioOnlyRuns[mocc] = seqno; 1491 1492 // Show current 1493 wppaShowAudioDesc(seqno,mocc); 1494 } 1495}; 1496function wppaAudioOnlyNext(mocc) { 1497 jQuery("#audiolabel-"+mocc+"-"+(wppaAudioSeqno+1)).trigger("click"); 1498}; 1499 1500function wppaShowAudioDesc(seqno,mocc) { 1501 var tagid = 'audiodesc-'+mocc+'-'+seqno; 1502 jQuery("#"+tagid).show(); 1503}; 1504function wppaHideAudioDesc(seqno,mocc,force) { 1505 1506 if ( ! seqno ) return; // may be false 1507 1508 var tagid = 'audiodesc-'+mocc+'-'+seqno; 1509 if ( force || wppaAudioOnlyRuns[mocc] != seqno ) { 1510 jQuery("#"+tagid).hide(); 1511 } 1512}; 1513 1514var wppaAlbLbBusy = false; 1515function wppaAlbLb(event,albumid) { 1516 event.stopPropagation(); 1517 1518 if (wppaAlbLbBusy) { 1519 wppaAlbLbBusy = false; 1520 return; 1521 } 1522 wppaAlbLbBusy = true; 1523 1524 jQuery('#wppa-ovl-spin').show(); 1525 jQuery('.first-'+albumid).trigger('click'); 1526 return false; 1527}; 1528 1529// Delayed Search 1530function wppaDelayedSearch( url, mocc, n ) { 1531 1532 jQuery( '#wppa-ajax-spin-'+mocc ).fadeIn(); 1533 1534 // Make the url 1535 url += '?'; 1536 if ( jQuery( '#wppa-searchstring-'+mocc ).length == 1 ) url += "wppa-searchstring=" + jQuery( '#wppa-searchstring-'+mocc ).val() + '&'; 1537 if ( jQuery( '#wppa-searchroot-'+mocc ).length == 1 ) url += "wppa-searchroot=" + jQuery( '#wppa-searchroot-'+mocc ).val() + '&';
1538 if ( jQuery( '#wppa-forceroot-'+mocc ).length == 1 ) url += "wppa-forceroot=" + jQuery( '#wppa-forceroot-'+mocc ).val() + '&'; 1539 if ( jQuery( '#wppa-subsearch-'+mocc).prop('checked' ) ) url +="wppa-subsearch=on" + '&'; 1540 if ( jQuery( '#wppa-rootsearch-'+mocc).prop('checked' ) ) url +="wppa-rootsearch=on" + '&'; 1541 if ( jQuery( '#wppa-catbox-'+mocc ).length == 1 ) url += "wppa-catbox=" + jQuery( '#wppa-catbox-'+mocc ).val() + '&'; 1542 if ( jQuery( '#wppa-rootbox-'+mocc ).prop('checked') ) url += "wppa-rootbox=on" + '&'; 1543 1544 if ( n > 0 ) { 1545 var i; 1546 for ( i = 0; i< n; i++ ) { 1547 if ( jQuery( '#wppa-searchselbox-' + i + '-' + mocc ).val() ) { 1548 url += 'wppa-searchselbox-' + i + '=' + jQuery('#wppa-searchselbox-' + i + '-' + mocc ).val() + '&'; 1549 } 1550 } 1551 } 1552 1553 url = url.slice(0,-1); 1554 1555 // Go to it after a few second 1556// console.log(url); 1557 1558 setTimeout( function() { document.location.href = url }, 2000 ); 1559 1560} 1561 1562
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.