1/** 2 * Module: WP-JS-Hooks 3 * Props: Carl Danley & 10up 4 */ 5!function(a){"use strict";var b=function(){function a(a,b,c,d){return"string"==typeof a&&"function"==typeof b&&(c=parseInt(c||10,10),h("actions",a,b,c,d)),k}function b(){var a=Array.prototype.slice.call(arguments),b=a.shift();return"string"==typeof b&&j("actions",b,a),k}function c(a,b){return"string"==typeof a&&g("actions",a,b),k}function d(a,b,c,d){return"string"==typeof a&&"function"==typeof b&&(c=parseInt(c||10,10),h("filters",a,b,c,d)),k}function e(){var a=Array.prototype.slice.call(arguments),b=a.shift();return"string"==typeof b?j("filters",b,a):k}function f(a,b){return"string"==typeof a&&g("filters",a,b),k}function g(a,b,c,d){if(l[a][b])if(c){var e,f=l[a][b];if(d)for(e=f.length;e--;){var g=f[e];g.callback===c&&g.context===d&&f.splice(e,1)}else for(e=f.length;e--;)f[e].callback===c&&f.splice(e,1)}else l[a][b]=[]}function h(a,b,c,d,e){var f={callback:c,priority:d,context:e},g=l[a][b];g?(g.push(f),g=i(g)):g=[f],l[a][b]=g}function i(a){for(var b,c,d,e=1,f=a.length;f>e;e++){for(b=a[e],c=e;(d=a[c-1])&&d.priority>b.priority;)a[c]=a[c-1],--c;a[c]=b}return a}function j(a,b,c){var d=l[a][b];if(!d)return"filters"===a?c[0]:!1;var e=0,f=d.length;if("filters"===a)for(;f>e;e++)c[0]=d[e].callback.apply(d[e].context,c);else for(;f>e;e++)d[e].callback.apply(d[e].context,c);return"filters"===a?c[0]:!0}var k={removeFilter:f,applyFilters:e,addFilter:d,removeAction:c,doAction:b,addAction:a},l={actions:{},filters:{}};return k};a.wp=a.wp||{},a.wp.hooks=new b}(window); 6 7var everlightboxQualifyURL = function (url) { 8 var img = document.createElement('img'); 9 img.src = url; // set string url 10 url = img.src; // get qualified url 11 img.src = null; // no server request 12 return url; 13}; 14 15function evshare(e) { 16 var $ = jQuery; 17 var slide = $( '#everlightbox-slider .slide.current' ); 18 var text = document.title; 19 if(slide.find(".everlightbox-caption").length) 20 text = slide.find(".everlightbox-caption").text(); 21 22 var image = $( '#everlightbox-slider .slide.current img' ).attr("src"); 23 24 var social = $(e).data("social"); 25 26 var url = ""; 27 28 if(social == "pinterest") { 29 url = "http://pinterest.com/pin/create/button/?url=" + encodeURIComponent(location.href) + "&description=" + encodeURI(text); 30 url += ("&media=" + encodeURIComponent(everlightboxQualifyURL(image))); 31 } 32 if(social == "twitter") { 33 url = "https://twitter.com/intent/tweet?url=" + encodeURI(location.href.split('#')[0]) + "&text=" + encodeURI(text) 34 } 35 if(social == "gplus") { 36 url = "https://plus.google.com/share?url=" + encodeURI(location.href); 37 } 38 if(social == "houzz") { 39 url = "http://www.houzz.com/imageClipperUpload?imageUrl=" + encodeURIComponent(everlightboxQualifyURL(image)) + 40 "&link=" + encodeURI(location.href) + "&title=" + encodeURI(text); 41 } 42 if(social == "facebook") { 43 url = "//www.facebook.com/sharer.php?u=" + location.href; 44 } 45 46 var w = window.open(url, "ftgw", "location=1,status=1,scrollbars=1,width=600,height=400"); 47 w.moveTo((screen.width / 2) - (300), (screen.height / 2) - (200)); 48} 49 50;( function ( window, document, $, undefined ) { 51 52 $.everlightbox = function( elem, options ) { 53 // Default options 54 var ui, 55 defaults = { 56 useCSS : true, 57 useSVG : true, 58 initialIndexOnArray : 0, 59 vimeoColor : 'cccccc', 60 beforeOpen: null, 61 afterOpen: null, 62 afterClose: null, 63 afterMedia: null, 64 nextSlide: null, 65 prevSlide: null, 66 loopAtEnd: false, 67 keyboard: true, 68 autoplayVideos: false, 69 queryStringData: {}, 70 toggleClassOnLoad: '', 71 facebookIcon: false, 72 twitterIcon: false, 73 pinterestIcon: false, 74 houzzIcon: false, 75 googleplusIcon: false, 76 tumblrIcon: false, 77 facebookLike: false, 78 facebookCommentCount: false, 79 downloadIcon: false, 80 fullscreenIcon: false, 81 facebookComments: false, 82 closeBg: false, 83 anchorButtonsToEdges: false, 84 rootCssClass: '', 85 selector: '.everlightbox-trigger' 86 }, 87 88 plugin = this, 89 elements = [], // slides array [ { href:'...', title:'...' }, ...], 90 $elem, 91 isMobile = navigator.userAgent.match( /(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i ), 92 isTouch = isMobile !== null || document.createTouch !== undefined || ( 'ontouchstart' in window ) || ( 'onmsgesturechange' in window ) || navigator.msMaxTouchPoints, 93 supportSVG = !! document.createElementNS && !! document.createElementNS( 'http://www.w3.org/2000/svg', 'svg').createSVGRect, 94 winWidth = window.innerWidth ? window.innerWidth : $( window ).width(), 95 winHeight = window.innerHeight ? window.innerHeight : $( window ).height(), 96 currentX = 0, 97 /* jshint multistr: true */ 98 html = '<div id="everlightbox-overlay">\ 99 <div id="everlightbox-container">\ 100 <div id="everlightbox-slider"></div>\ 101 <a id="everlightbox-prev"><i class="ev-icon-left-open-big"></i></a>\ 102 <a id="everlightbox-next"><i class="ev-icon-right-open-big"></i></a>\ 103 </div>\ 104 </div>'; 105 106 plugin.settings = {}; 107 108 $.everlightbox.close = function () { 109 ui.closeSlide(); 110 }; 111 112 $.everlightbox.extend = function () { 113 return ui; 114 }; 115 116 plugin.init = function() { 117 118 plugin.settings = $.extend( {}, defaults, options ); 119 120 if ( $.isArray( elem ) ) { 121 122 elements = elem; 123 ui.target = $( window ); 124 ui.init( plugin.settings.initialIndexOnArray ); 125 126 } else if( plugin.settings.selector ) { 127 $( document ).on( 'click', plugin.settings.selector, function( event ) { 128 // console.log( isTouch ); 129 130 if ( event.target.parentNode.className === 'slide current' ) { 131 132 return false;
133 } 134 135 if ( ! $.isArray( elem ) ) { 136 ui.destroy(); 137 $elem = $( plugin.settings.selector ); 138 ui.actions(); 139 } 140 141 elements = []; 142 var index, relType, relVal; 143 144 // Allow for HTML5 compliant attribute before legacy use of rel 145 if ( ! relVal ) { 146 relType = 'data-rel'; 147 relVal = $( this ).attr( relType ); 148 } 149 150 if ( ! relVal ) { 151 relType = 'rel'; 152 relVal = $( this ).attr( relType ); 153 } 154 155 if ( relVal && relVal !== '' && relVal !== 'nofollow' ) { 156 $elem = $( plugin.settings.selector ).filter( '[' + relType + '="' + relVal + '"]' ); 157 } else { 158 $elem = $( plugin.settings.selector ); 159 } 160 161 $elem.each( function() { 162 163 var title = null, 164 href = null; 165 166 if ( $( this ).data( 'title' ) ) { 167 title = $( this ).data( 'title' ); 168 } 169 170 if ( !title && $( this ).attr( 'title' ) ) { 171 title = $( this ).attr( 'title' ); 172 } 173 174 if ( !title && $( this ).attr( 'data-caption-title' ) ) { 175 title = $( this ).attr( 'data-caption-title' ); 176 } 177 178 179 if ( $( this ).attr( 'href' ) ) { 180 href = $( this ).attr( 'href' ); 181 } 182 183 elements.push( { 184 href: href, 185 title: title 186 } ); 187 } ); 188 189 index = $elem.index( $( this ) ); 190 event.preventDefault(); 191 event.stopPropagation(); 192 ui.target = $( event.target ); 193 ui.init( index ); 194 } ); 195 } 196 }; 197 198 plugin.next = function () { 199 ui.getNext(); 200 }; 201 202 plugin.prev = function () { 203 ui.getPrev(); 204 }; 205 206 ui = { 207 208 /** 209 * Initiate Swipebox 210 */ 211 init : function( index ) { 212 if ( plugin.settings.beforeOpen ) { 213 plugin.settings.beforeOpen(); 214 } 215 this.target.trigger( 'everlightbox-start' ); 216 $.everlightbox.isOpen = true; 217 this.build(); 218 this.openSlide( index ); 219 this.openMedia( index ); 220 this.preloadMedia( index+1 ); 221 this.preloadMedia( index-1 ); 222 if ( plugin.settings.afterOpen ) { 223 plugin.settings.afterOpen(index); 224 } 225 $(window).bind('everlightbox.next', this.getNext); 226 }, 227 228 /** 229 * Built HTML containers and fire main functions 230 */ 231 build : function () { 232 var $this = this, bg; 233 234 $( 'body' ).append( html ); 235 236 $("#everlightbox-overlay").addClass('everlightbox-theme-'+plugin.settings.rootCssClass) 237 .addClass(isMobile ? 'everlightbox-mobile' : 'everlightbox-no-mobile'); 238 239 $.each( elements, function() { 240 $( '#everlightbox-slider' ).append( '<div class="slide"></div>' ); 241 } ); 242 243 $this.setDim(); 244 $this.actions(); 245 246 if ( isTouch ) { 247 $this.gesture(); 248 } 249 250 // Devices can have both touch and keyboard input so always allow key events 251 if(plugin.settings.keyboard) 252 $this.keyboard(); 253 254 $this.setupSocial(); 255 $this.resize(); 256 257 }, 258 259 /** 260 * Set dimensions depending on windows width and height 261 */ 262 setDim : function () { 263 264 var width, height, sliderCss = {}; 265 266 // Reset dimensions on mobile orientation change 267 if ( 'onorientationchange' in window ) { 268 269 window.addEventListener( 'orientationchange', function() { 270 if ( window.orientation === 0 ) { 271 width = winWidth; 272 height = winHeight; 273 } else if ( window.orientation === 90 || window.orientation === -90 ) { 274 width = winHeight; 275 height = winWidth; 276 } 277 }, false ); 278 279 280 } else { 281 282 width = window.innerWidth ? window.innerWidth : $( window ).width(); 283 height = window.innerHeight ? window.innerHeight : $( window ).height(); 284 } 285 286 sliderCss = { 287 width : '100%', 288 height : height 289 }; 290 291 $('#everlightbox-overlay').css( sliderCss ); 292 $("#everlightbox-slider .slide").each(function (i, slide) { 293 $img = $(slide).find("img"); 294 var w = $img.width(); 295 var h = $img.height(); 296 var pos = $img.position(); 297 if(w && h && !plugin.settings.anchorButtonsToEdges) { 298 $(slide).find(".everlightbox-glass").css({ 299 top: pos.top, 300 left: pos.left, 301 width: w, 302 height: h 303 }); 304 } 305 var data = { slide: $(slide), width: w, height: h, position: pos }; 306 wp.hooks.applyFilters('everlightbox.setDim', data); 307 }); 308 }, 309 310 getCurrentTitle: function () { 311 var slide = $( '#everlightbox-slider .slide.current' ); 312 if(slide.find(".everlightbox-caption").length) 313 return slide.find(".everlightbox-caption").text(); 314 315 return document.title; 316 }, 317 318 setupSocial: function () { 319 320 }, 321 322 /** 323 * Reset dimensions on window resize event 324 */ 325 resize : function () { 326 var $this = this; 327 328 $( window ).resize( function() { 329 $this.setDim(); 330 } ).resize(); 331 }, 332 333 /** 334 * Check if device supports CSS transitions 335 */ 336 supportTransition : function () { 337 338 var prefixes = 'transition WebkitTransition MozTransition OTransition msTransition KhtmlTransition'.split( ' ' ), 339 i; 340 341 for ( i = 0; i < prefixes.length; i++ ) { 342 if ( document.createElement( 'div' ).style[ prefixes[i] ] !== undefined ) { 343 return prefixes[i]; 344 } 345 } 346 return false;
347 }, 348 349 /** 350 * Check if CSS transitions are allowed (options + devicesupport) 351 */ 352 doCssTrans : function () { 353 if ( plugin.settings.useCSS && this.supportTransition() ) { 354 return true; 355 } 356 }, 357 358 /** 359 * Touch navigation 360 */ 361 gesture : function () { 362 363 var $this = this, 364 index, 365 hDistance, 366 vDistance, 367 hDistanceLast, 368 vDistanceLast, 369 hDistancePercent, 370 vSwipe = false, 371 hSwipe = false, 372 hSwipMinDistance = 10, 373 vSwipMinDistance = 50, 374 startCoords = {}, 375 endCoords = {}, 376 bars = $( 'dummy' ), 377 slider = $( '#everlightbox-slider' ); 378 379 bars.addClass( 'visible-bars' ); 380 $this.setTimeout(); 381 382 $( 'body' ).bind( 'touchstart', function( event ) { 383 384 $( this ).addClass( 'touching' ); 385 index = $( '#everlightbox-slider .slide' ).index( $( '#everlightbox-slider .slide.current' ) ); 386 endCoords = event.originalEvent.targetTouches[0]; 387 startCoords.pageX = event.originalEvent.targetTouches[0].pageX; 388 startCoords.pageY = event.originalEvent.targetTouches[0].pageY; 389 390 $( '#everlightbox-slider' ).css( { 391 '-webkit-transform' : 'translate3d(' + currentX +'%, 0, 0)', 392 'transform' : 'translate3d(' + currentX + '%, 0, 0)' 393 } ); 394 395 $( '.touching' ).bind( 'touchmove',function( event ) { 396 event.preventDefault(); 397 event.stopPropagation(); 398 endCoords = event.originalEvent.targetTouches[0]; 399 400 if ( ! hSwipe ) { 401 vDistanceLast = vDistance; 402 vDistance = endCoords.pageY - startCoords.pageY; 403 if ( Math.abs( vDistance ) >= vSwipMinDistance || vSwipe ) { 404 var opacity = 0.75 - Math.abs(vDistance) / slider.height(); 405 406 slider.css( { 'top': vDistance + 'px' } ); 407 slider.css( { 'opacity': opacity } ); 408 409 vSwipe = true; 410 } 411 } 412 413 hDistanceLast = hDistance;
414 hDistance = endCoords.pageX - startCoords.pageX; 415 hDistancePercent = hDistance * 100 / winWidth; 416 417 if ( ! hSwipe && ! vSwipe && Math.abs( hDistance ) >= hSwipMinDistance ) { 418 $( '#everlightbox-slider' ).css( { 419 '-webkit-transition' : '', 420 'transition' : '' 421 } ); 422 hSwipe = true; 423 } 424 425 if ( hSwipe ) { 426 427 // swipe left 428 if ( 0 < hDistance ) { 429 430 // first slide 431 if ( 0 === index ) { 432 // console.log( 'first' ); 433 $( '#everlightbox-overlay' ).addClass( 'leftSpringTouch' ); 434 } else { 435 // Follow gesture 436 $( '#everlightbox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' ); 437 $( '#everlightbox-slider' ).css( { 438 '-webkit-transform' : 'translate3d(' + ( currentX + hDistancePercent ) +'%, 0, 0)', 439 'transform' : 'translate3d(' + ( currentX + hDistancePercent ) + '%, 0, 0)' 440 } ); 441 } 442 443 // swipe rught 444 } else if ( 0 > hDistance ) { 445 446 // last Slide 447 if ( elements.length === index +1 ) { 448 // console.log( 'last' ); 449 $( '#everlightbox-overlay' ).addClass( 'rightSpringTouch' ); 450 } else { 451 $( '#everlightbox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' ); 452 $( '#everlightbox-slider' ).css( { 453 '-webkit-transform' : 'translate3d(' + ( currentX + hDistancePercent ) +'%, 0, 0)', 454 'transform' : 'translate3d(' + ( currentX + hDistancePercent ) + '%, 0, 0)' 455 } ); 456 } 457 458 } 459 } 460 } ); 461 462 return false; 463 464 } ).bind( 'touchend',function( event ) { 465 event.preventDefault(); 466 event.stopPropagation(); 467 468 $( '#everlightbox-slider' ).css( { 469 '-webkit-transition' : '-webkit-transform 0.4s ease', 470 'transition' : 'transform 0.4s ease' 471 } ); 472 473 vDistance = endCoords.pageY - startCoords.pageY;
474 hDistance = endCoords.pageX - startCoords.pageX; 475 hDistancePercent = hDistance*100/winWidth; 476 477 // Swipe to bottom to close 478 if ( vSwipe ) { 479 vSwipe = false; 480 if ( Math.abs( vDistance ) >= 2 * vSwipMinDistance && Math.abs( vDistance ) > Math.abs( vDistanceLast ) ) { 481 var vOffset = vDistance > 0 ? slider.height() : - slider.height(); 482 slider.animate( { top: vOffset + 'px', 'opacity': 0 }, 483 300, 484 function () { 485 $this.closeSlide(); 486 } ); 487 } else { 488 slider.animate( { top: 0, 'opacity': 1 }, 300 ); 489 } 490 491 } else if ( hSwipe ) { 492 493 hSwipe = false; 494 495 // swipeLeft 496 if( hDistance >= hSwipMinDistance && hDistance >= hDistanceLast) { 497 498 $this.getPrev(); 499 500 // swipeRight 501 } else if ( hDistance <= -hSwipMinDistance && hDistance <= hDistanceLast) { 502 503 $this.getNext(); 504 } 505 506 } else { // Top and bottom bars have been removed on touchable devices 507 // tap 508 if ( ! bars.hasClass( 'visible-bars' ) ) { 509 $this.setTimeout(); 510 } else { 511 $this.clearTimeout(); 512 } 513 } 514 515 $( '#everlightbox-slider' ).css( { 516 '-webkit-transform' : 'translate3d(' + currentX + '%, 0, 0)', 517 'transform' : 'translate3d(' + currentX + '%, 0, 0)' 518 } ); 519 520 $( '#everlightbox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' ); 521 $( '.touching' ).off( 'touchmove' ).removeClass( 'touching' ); 522 523 } ); 524 }, 525 526 /** 527 * Set timer to hide the action bars 528 */ 529 setTimeout: function () { 530 if ( plugin.settings.hideBarsDelay > 0 ) { 531 var $this = this; 532 $this.clearTimeout(); 533 $this.timeout = window.setTimeout( function() { 534 $this.hideBars(); 535 }, 536 537 plugin.settings.hideBarsDelay 538 ); 539 } 540 }, 541 542 /** 543 * Clear timer 544 */ 545 clearTimeout: function () { 546 window.clearTimeout( this.timeout ); 547 this.timeout = null; 548 }, 549 550 /** 551 * Keyboard navigation 552 */ 553 keyboard : function () { 554 var $this = this; 555 $( window ).bind( 'keyup', function( event ) { 556 event.preventDefault(); 557 event.stopPropagation(); 558 559 if ( event.keyCode === 37 ) { 560 561 $this.getPrev(); 562 563 } else if ( event.keyCode === 39 ) { 564 565 $this.getNext(); 566 567 } else if ( event.keyCode === 27 ) { 568 $this.closeSlide(); 569 } 570 } ); 571 }, 572 573 /** 574 * Navigation events : go to next slide, go to prevous slide and close 575 */ 576 actions : function () { 577 var $this = this, 578 action = 'touchend click'; // Just detect for both event types to allow for multi-input 579 580 if ( elements.length < 2 ) { 581 582 $( '#everlightbox-bottom-bar' ).hide(); 583 584 } else { 585 $( '#everlightbox-prev' ).bind( action, function( event ) { 586 event.preventDefault(); 587 event.stopPropagation(); 588 $this.getPrev(); 589 $this.setTimeout(); 590 } ); 591 592 $( '#everlightbox-next' ).bind( action, function( event ) { 593 event.preventDefault(); 594 event.stopPropagation(); 595 $this.getNext(); 596 $this.setTimeout(); 597 } ); 598 } 599 600 $( 'body' ).on(action, '.everlightbox-close', function() { 601 $this.closeSlide(); 602 } ); 603 }, 604 605 /** 606 * Set current slide 607 */ 608 setSlide : function ( index, isFirst ) { 609 610 isFirst = isFirst || false; 611 612 var slider = $( '#everlightbox-slider' ); 613 614 currentX = -index*100; 615 616 if ( this.doCssTrans() ) { 617 slider.css( {
618 '-webkit-transform' : 'translate3d(' + (-index*100)+'%, 0, 0)', 619 'transform' : 'translate3d(' + (-index*100)+'%, 0, 0)' 620 } ); 621 } else { 622 slider.animate( { left : ( -index*100 )+'%' } ); 623 } 624 625 $( '#everlightbox-slider .slide' ).removeClass( 'current' ); 626 $( '#everlightbox-slider .slide' ).eq( index ).addClass( 'current' ); 627 628 629 if ( isFirst ) { 630 slider.fadeIn(); 631 } 632 633 $( '#everlightbox-prev, #everlightbox-next' ).removeClass( 'disabled' ); 634 635 if ( index === 0 ) { 636 $( '#everlightbox-prev' ).addClass( 'disabled' ); 637 } else if ( index === elements.length - 1 && plugin.settings.loopAtEnd !== true ) { 638 $( '#everlightbox-next' ).addClass( 'disabled' ); 639 } 640 }, 641 642 /** 643 * Open slide 644 */ 645 openSlide : function ( index ) { 646 $( 'html' ).addClass( 'everlightbox-html' ); 647 if ( isTouch ) { 648 $( 'html' ).addClass( 'everlightbox-touch' ); 649 650 } else { 651 $( 'html' ).addClass( 'everlightbox-no-touch' ); 652 } 653 $( window ).trigger( 'resize' ); // fix scroll bar visibility on desktop 654 this.setSlide( index, true ); 655 wp.hooks.applyFilters('everlightbox.openSlide', index); 656 }, 657 658 /** 659 * Set a time out if the media is a video 660 */ 661 preloadMedia : function ( index ) { 662 var $this = this, 663 src = null; 664 665 if ( elements[ index ] !== undefined ) { 666 src = elements[ index ].href; 667 } 668 669 if ( ! $this.isVideo( src ) ) { 670 setTimeout( function() { 671 $this.openMedia( index ); 672 }, 1000); 673 } else { 674 $this.openMedia( index ); 675 } 676 }, 677 678 /** 679 * Open 680 */ 681 openMedia : function ( index ) { 682 var $this = this, 683 src, 684 slide; 685 686 if ( elements[ index ] !== undefined ) { 687 src = elements[ index ].href; 688 } 689 690 if ( index < 0 || index >= elements.length ) { 691 return false; 692 } 693 694 slide = $( '#everlightbox-slider .slide' ).eq( index ); 695 696 if ( ! $this.isVideo( src ) ) { 697 slide.addClass( 'slide-loading' ); 698 $this.loadMedia( src, function() { 699 slide.removeClass( 'slide-loading' ); 700 slide.html(this); 701 slide.prepend("<div class='everlightbox-backstage'></div>"); 702 703 if(plugin.settings.closeBg) 704 slide.find(".everlightbox-backstage").click(function () { 705 $this.closeSlide(); 706 }); 707 708 var $img = this; 709 var img_pos = this.position(); 710 711 var $glass = $("<div class='everlightbox-glass'></div>"); 712 $glass.css({ 713 top: plugin.settings.anchorButtonsToEdges ? 0 : img_pos.top, 714 left: plugin.settings.anchorButtonsToEdges ? 0 : img_pos.left, 715 width: plugin.settings.anchorButtonsToEdges ? '100%' : $img.width(), 716 height: plugin.settings.anchorButtonsToEdges ? '100%' : $img.height(), 717 zIndex: 1000 718 }); 719 720 slide.append($glass); 721 $glass.append("<div class='everlightbox-top-bar'></div>"); 722 var $topbar = $glass.find(".everlightbox-top-bar"); 723 724 $glass.append("<div class='everlightbox-bottom-bar'></div>"); 725 var $bottombar = $glass.find(".everlightbox-bottom-bar"); 726 727 $topbar.append("<div class='everlightbox-right-side'></div>"); 728 var $topbarRight = $topbar.find(".everlightbox-right-side"); 729 730 $topbar.append("<div class='everlightbox-left-side'></div>"); 731 var $topbarLeft = $topbar.find(".everlightbox-left-side"); 732 733 var title = null; 734 if ( elements[ index ] !== undefined ) { 735 title = elements[ index ].title; 736 } 737 738 if ( title ) { 739 $topbar.append("<p class='everlightbox-caption'><span>"+title+"</span></p>"); 740 } 741 742 if(plugin.settings.fullscreenIcon) { 743 $topbarRight.append('<a title="Fullscreen" data-status="off" class="everlightbox-fullscreen everlightbox-button"><i class="ev-icon-resize-full"></i><i class="ev-icon-resize-small"></i></a>'); 744 $topbarRight.find(".everlightbox-fullscreen").on("touchstart click", function () { 745 746 var status = $(this).data("status"); 747 if(status == "off") { 748 var elem = document.getElementById("everlightbox-overlay"); 749 if (elem.requestFullscreen) { 750 elem.requestFullscreen(); 751 } else if (elem.msRequestFullscreen) { 752 elem.msRequestFullscreen(); 753 } else if (elem.mozRequestFullScreen) { 754 elem.mozRequestFullScreen(); 755 } else if (elem.webkitRequestFullscreen) { 756 elem.webkitRequestFullscreen(); 757 } 758 $(this).data("status", "on"); 759 $(this) 760 } else { 761 if (document.cancelFullScreen) { 762 document.cancelFullScreen(); 763 } else if (document.mozCancelFullScreen) { 764 document.mozCancelFullScreen(); 765 } else if (document.webkitCancelFullScreen) { 766 document.webkitCancelFullScreen(); 767 } 768 $(this).data("status", "off"); 769 } 770 $(this).toggleClass("on"); 771 }); 772 } 773 774 $topbarRight.append('<a class="everlightbox-close everlightbox-button"><i class="ev-icon-cancel"></i></a>'); 775 776 var social = []; 777 if(plugin.settings.facebookIcon) 778 social.push('<a onclick="evshare(this)" data-social="facebook" title="Share on Facebook" class="everlightbox-button everlightbox-facebook"><i class="ev-icon-facebook"></i></a>'); 779 if(plugin.settings.pinterestIcon) 780 social.push('<a onclick="evshare(this)" data-social="pinterest" title="Share on Pinterest" class="everlightbox-button everlightbox-pinterest"><i class="ev-icon-pinterest"></i></a>'); 781 if(plugin.settings.tumblrIcon) 782 social.push('<a onclick="evshare(this)" data-social="tumblr" title="Share on Tumblr" class="everlightbox-button everlightbox-tumblr"><i class="ev-icon-tumblr"></i></a>'); 783 if(plugin.settings.twitterIcon) 784 social.push('<a onclick="evshare(this)" data-social="twitter" title="Share on Twitter" class="everlightbox-button everlightbox-twitter"><i class="ev-icon-twitter"></i></a>'); 785 if(plugin.settings.houzzIcon) 786 social.push('<a onclick="evshare(this)" data-social="houzz" share="Share on Houzz" class="everlightbox-button everlightbox-houzz"><i class="ev-icon-houzz"></i></a>'); 787 if(plugin.settings.googleplusIcon) 788 social.push('<a onclick="evshare(this)" data-social="gplus" title="Share on Google+" class="everlightbox-button everlightbox-googleplus"><i class="ev-icon-gplus"></i></a>'); 789 if(plugin.settings.downloadIcon) 790 social.push('<a title="Download image" href="'+ this.attr("src") +'" download class="everlightbox-button everlightbox-download"><i class="ev-icon-install"></i></a>'); 791 if(plugin.settings.facebookLike) 792 social.push('<div class="everlightbox-button fb-like" data-href="'+ this.attr("src") +'" data-layout="everlightbox-button" data-action="like" data-size="small" data-show-faces="false" data-share="false"></div>'); 793 794 if(social.length) { 795 $bottombar.append("<div class='everlightbox-social'>" + social.join('') + "</div>"); 796 $bottombar.find(".everlightbox-social").children().last(
796).addClass("last-element"); 797 } 798 799 if(plugin.settings.facebookLike) { 800 if (typeof FB != "undefined" && FB != null) 801 FB.XFBML.parse($glass.find(".everlightbox-social").get(0)); 802 } 803 804 if(plugin.settings.facebookComments) 805 { 806 $topbarLeft.append('<a title="Show comments" class="everlightbox-comments everlightbox-button"><i class="ev-icon-commenting-o"></i></a>'); 807 808 if(plugin.settings.facebookCommentCount) { 809 $.get(everlightbox_ajax_object.ajaxurl, { 810 url: $img.attr("src"), 811 action: 'fetch_comments_count', 812 everlightbox: plugin.settings.nonce 813 }, function (r) { 814 if(r) { 815 try { 816 var data = JSON.parse(r); 817 if(data && data.share && data.share.comment_count && data.share.comment_count > 0) 818 $topbarLeft.append("<span class='everlightbox-comment-count'>"+ data.share.comment_count +" " + 819 plugin.settings.labels["comments"] + "</span>"); 820 } catch(err) { 821 console.info(err); 822 } 823 } 824 }); 825 } 826 827 $topbar.on("touchstart click", ".everlightbox-comments, .everlightbox-comment-count", function () { 828 $topbarLeft.find(".everlightbox-comments").toggleClass("everlightbox-comments-active"); 829 if($topbarLeft.find(".everlightbox-comments").hasClass("everlightbox-comments-active")) { 830 if($topbar.find(".fb-comments").length) { 831 $topbar.find(".fb-comments").show(); 832 } else { 833 $topbar.append('<div class="fb-comments" data-href="'+ $img.attr("src") + '" data-width="300" data-numposts="5"></div>'); 834 if (typeof FB != "undefined" && FB != null) 835 FB.XFBML.parse($topbar.get(0)); 836 } 837 } else { 838 $glass.find('.fb-comments').hide(); 839 } 840 }); 841 } 842 wp.hooks.applyFilters('everlightbox.openMedia', slide); 843 if ( plugin.settings.afterMedia ) { 844 plugin.settings.afterMedia( index ); 845 } 846 } ); 847 } else { 848 slide.html( $this.getVideo( src ) ); 849 850 if ( plugin.settings.afterMedia ) { 851 plugin.settings.afterMedia( index ); 852 } 853 } 854 855 }, 856 857 858 /** 859 * Check if the URL is a video 860 */ 861 isVideo : function ( src ) { 862 863 if ( src ) { 864 if ( src.match( /(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || src.match( /vimeo\.com\/([0-9]*)/ ) || src.match( /youtu\.be\/([a-zA-Z0-9\-_]+)/ ) ) { 865 return true; 866 } 867 868 if ( src.toLowerCase().indexOf( 'everlightboxvideo=1' ) >= 0 ) { 869 870 return true; 871 } 872 } 873 874 }, 875 876 /** 877 * Parse URI querystring and: 878 * - overrides value provided via dictionary 879 * - rebuild it again returning a string 880 */ 881 parseUri : function (uri, customData) { 882 var a = document.createElement('a'), 883 qs = {}; 884 885 // Decode the URI 886 a.href = decodeURIComponent( uri ); 887 888 // QueryString to Object 889 if ( a.search ) { 890 qs = JSON.parse( '{"' + a.search.toLowerCase().replace('?','').replace(/&/g,'","').replace(/=/g,'":"') + '"}' ); 891 } 892 893 // Extend with custom data 894 if ( $.isPlainObject( customData ) ) { 895 qs = $.extend( qs, customData, plugin.settings.queryStringData ); // The dev has always the final word 896 } 897 898 // Return querystring as a string 899 return $ 900 .map( qs, function (val, key) { 901 if ( val && val > '' ) { 902 return encodeURIComponent( key ) + '=' + encodeURIComponent( val ); 903 } 904 }) 905 .join('&'); 906 }, 907 908 /** 909 * Get video iframe code from URL 910 */ 911 getVideo : function( url ) { 912 var iframe = '', 913 youtubeUrl = url.match( /((?:www\.)?youtube\.com|(?:www\.)?youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/ ), 914 youtubeShortUrl = url.match(/(?:www\.)?youtu\.be\/([a-zA-Z0-9\-_]+)/), 915 vimeoUrl = url.match( /(?:www\.)?vimeo\.com\/([0-9]*)/ ), 916 qs = ''; 917 if ( youtubeUrl || youtubeShortUrl) { 918 if ( youtubeShortUrl ) { 919 youtubeUrl = youtubeShortUrl; 920 } 921 qs = ui.parseUri( url, { 922 'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ), 923 'v' : '' 924 }); 925 iframe = '<iframe width="560" height="315" src="//' + youtubeUrl[1] + '/embed/' + youtubeUrl[2] + '?' + qs + '" frameborder="0" allowfullscreen></iframe>'; 926 927 } else if ( vimeoUrl ) { 928 qs = ui.parseUri( url, { 929 'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ), 930 'byline' : '0', 931 'portrait' : '0', 932 'color': plugin.settings.vimeoColor 933 }); 934 iframe = '<iframe width="560" height="315" src="//player.vimeo.com/video/' + vimeoUrl[1] + '?' + qs + '" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'; 935 936 } else { 937 iframe = '<iframe width="560" height="315" src="' + url + '" frameborder="0" allowfullscreen></iframe>'; 938 } 939 940 return '<div class="everlightbox-video-container"><div class="everlightbox-video">' + iframe + '</div></div>'; 941 }, 942 943 /** 944 * Load image 945 */ 946 loadMedia : function ( src, callback ) { 947 // Inline content 948 if ( src && src.trim().indexOf('#') === 0 ) { 949 callback.call( 950 $('<div>', { 951 'class' : 'everlightbox-inline-container' 952 }) 953 .append( 954 $(src) 955 .clone() 956 .toggleClass( plugin.settings.toggleClassOnLoad ) 957 ) 958 ); 959 } 960 // Everything else 961 else { 962 if ( ! this.isVideo( src ) ) { 963 var img = $( '<img>' ).on( 'load', function() { 964 callback.call( img ); 965 } ); 966 967 img.attr( 'src', src ); 968 } 969 } 970 }, 971 972 /** 973 * Get next slide 974 */ 975 getNext : function () { 976 var $this = this, 977 src, 978 index = $( '#everlightbox-slider .slide' ).index( $( '#everlightbox-slider .slide.current' ) ); 979 if ( index + 1 < elements.length ) { 980 981 src = $( '#everlightbox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' ); 982 $( '#everlightbox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); 983 index++; 984 $this.setSlide( index ); 985 $this.preloadMedia( index+1 ); 986 if ( plugin.settings.nextSlide ) { 987 plugin.settings.nextSlide(index); 988 } 989 } else { 990 991 if ( plugin.settings.loopAtEnd === true ) { 992 src = $( '#everlightbox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' ); 993 $( '#everlightbox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); 994 index = 0; 995 $this.preloadMedia( index ); 996 $this.setSlide( index ); 997 $this.preloadMedia( index + 1 ); 998 if ( plugin.settings.nextSlide ) { 999 plugin.settings.nextSlide(index); 1000 } 1001 } else { 1002 $( '#everlightbox-overlay' ).addClass( 'rightSpring' ); 1003 setTimeout( function() { 1004 $( '#everlightbox-overlay' ).removeClass( 'rightSpring' ); 1005 }, 500 ); 1006 } 1007 } 1008 }, 1009 1010 /** 1011 * Get previous slide 1012 */ 1013 getPrev : function () { 1014 var index = $( '#everlightbox-slider .slide' ).index( $( '#everlightbox-slider .slide.current' ) ), 1015 src; 1016 if ( index > 0 ) { 1017 src = $( '#everlightbox-slider .slide' ).eq( index ).contents().find( 'iframe').attr( 'src' ); 1018 $( '#everlightbox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); 1019 index--; 1020 this.setSlide( index ); 1021 this.preloadMedia( index-1 ); 1022 if ( plugin.settings.prevSlide ) { 1023 plugin.settings.prevSlide(index); 1024 } 1025 } else { 1026 $( '#everlightbox-overlay' ).addClass( 'leftSpring' ); 1027 setTimeout( function() { 1028 $( '#everlightbox-overlay' ).removeClass( 'leftSpring' ); 1029 }, 500 ); 1030 } 1031 }, 1032 /* jshint unused:false */ 1033 nextSlide : function ( index ) { 1034 // Callback for next slide 1035 }, 1036 1037 prevSlide : function ( index ) { 1038 // Callback for prev slide 1039 }, 1040 1041 /** 1042 * Close 1043 */ 1044 closeSlide : function () { 1045 $( 'html' ).removeClass( 'everlightbox-html' ); 1046 $( 'html' ).removeClass( 'everlightbox-touch' ); 1047 $( window ).trigger( 'resize' ); 1048 this.destroy(); 1049 }, 1050 1051 /** 1052 * Destroy the whole thing 1053 */ 1054 destroy : function () { 1055 $( window ).unbind( 'keyup' ); 1056 $( 'body' ).unbind( 'touchstart' ); 1057 $( 'body' ).unbind( 'touchmove' ); 1058 $( 'body' ).unbind( 'touchend' ); 1059 $( '#everlightbox-slider' ).unbind(); 1060 $( '#everlightbox-overlay' ).remove(); 1061 1062 if ( ! $.isArray( elem ) ) { 1063 elem.removeData( '_everlightbox' ); 1064 } 1065 1066 if ( this.target ) { 1067 this.target.trigger( 'everlightbox-destroy' ); 1068 } 1069 1070 $.everlightbox.isOpen = false;
1071 1072 if ( plugin.settings.afterClose ) { 1073 plugin.settings.afterClose(); 1074 } 1075 } 1076 }; 1077 1078 plugin.init(); 1079 }; 1080 1081 $.fn.everlightbox = function( options ) { 1082 1083 if ( ! $.data( this, '_everlightbox' ) ) { 1084 window.everlightbox = new $.everlightbox( this, options ); 1085 this.data( '_everlightbox', everlightbox ); 1086 } 1087 1088 return this.data( '_everlightbox' ); 1089 1090 }; 1091 1092}( window, document, jQuery ) );
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.