1/* ----------------------------------------------------------------------------------------------------------------------- */ 2/* Embedded Gallery with Thumbs ------------------------------------------------------------------------------------------ */ 3/* ----------------------------------------------------------------------------------------------------------------------- */ 4if($(".embedded-gallery").length) { 5 $('.embedded-gallery').each(function() { 6 var gallery = $(this); 7 8 $(gallery).wrap('<div class="embedded-gallery-wrap"></div>'); 9 10 // --------------------------------- 11 // Gallery, Arrows, and Thumbs Setup 12 // --------------------------------- 13 if($(gallery).find('.slide').length>2) { 14 $(gallery).prepend('<a href="#" class="prev-arrow"><span>Prev</span></a><a href="#" class="next-arrow"><span>Next</span></a>'); 15 if($(gallery).attr('data-type') != 'chromeless') { 16 $(gallery).after('<div class="embedded-gallery-nav-wrapper"><ul class="embedded-gallery-nav"></ul></div>'); 17 $(gallery).addClass('has-embedded-gallery-nav'); 18 } 19 } 20 21 var prev_link = ($(gallery).closest('.embedded-gallery-wrap').find('.prev-arrow').length?$(gallery).closest('.embedded-gallery-wrap').find('.prev-arrow'):false); 22 var next_link = ($(gallery).closest('.embedded-gallery-wrap').find('.next-arrow').length?$(gallery).closest('.embedded-gallery-wrap').find('.next-arrow'):false); 23 var gallery_nav = ($(gallery).closest('.embedded-gallery-wrap').find('.embedded-gallery-nav').length?$(gallery).closest('.embedded-gallery-wrap').find('.embedded-gallery-nav'):false); 24 25 var timeout_speed = parseInt($(gallery).attr("data-timeout")); 26 27 // set first slide to be "current" and "no-slideshow" if not enough slides for slideshow 28 if($(gallery).find(".stage .slide:not(.placeholder)").length == 1) $(gallery).find(".stage .slide:not(.placeholder)").addClass('current').addClass('no-slideshow'); 29 30 $(gallery).find(".stage").cycle({ 31 fx: $(gallery).attr("data-fx"), 32 speed: $(gallery).attr("data-speed"), 33 timeout: timeout_speed, 34 prev: $(prev_link), 35 next: $(next_link), 36 slideExpr: ".slide:not(.placeholder)", 37 before: function(currSlideElement, nextSlideElement, options, forwardFlag) { 38 if($(currSlideElement).find('iframe').length) { 39 if($(currSlideElement).find('iframe').attr('src').indexOf('vimeo') >= 0) { 40 if(vimeo_js_loaded) { 41 var pause_iframe = $(currSlideElement).find('iframe')[0]; 42 var pause_player = new Vimeo.Player(pause_iframe); 43 if (typeof pause_player.pause == 'function') { 44 pause_player.pause(); 45 } 46 } 47 } else { 48 if(youtube_iframe_api_is_ready) { 49 var player_id = $(currSlideElement).find('iframe').closest('.ss-youtube-vimeo-player').attr('data-id'); 50 if (typeof yt_players[player_id].pauseVideo == 'function') { 51 yt_players[player_id].pauseVideo(); 52 } 53 } 54 } 55 } 56 57 $(gallery).find(".slide.current").removeClass("current"); 58 $(nextSlideElement).addClass("current"); 59 60 $(window).resize(); 61 62 }, 63 after: function(currSlideElement, nextSlideElement, options, forwardFlag) { 64 if($(gallery).find('.slide.placeholder').find('.ss-youtube-vimeo-player').length) { 65 var vheight = $(gallery).find('.slide').not('.placeholder').find('.ss-youtube-vimeo-player').first().height(); 66 var vwidth = $(gallery).find('.slide').not('.placeholder').find('.ss-youtube-vimeo-player').first().width(); 67 var percent = (vheight/vwidth) * 100; 68 $(gallery).find('.slide.placeholder').css({'height':'0','padding-top':percent+'%'}).find('.ss-youtube-vimeo-player').hide(); 69 } 70 71 $(window).resize(); 72 }, 73 pager: $(gallery_nav), 74 // callback fn that creates a thumbnail to use as pager anchor 75 pagerAnchorBuilder: function(idx, slide) { 76 if($(gallery).attr('data-type') != 'chromeless') { 77 if($(slide).find('.ss-youtube-vimeo-player').length) { 78 var img_src = $(slide).find(".ss-youtube-vimeo-player").css("background-image").slice(4, -1).replace(/"/g, "") 79 console.log(img_src); 80 } else { 81 var img_src = $(slide).find(".image").find("img").attr("src"); 82 } 83 return '<li><a href="#"><img src="' + img_src + '" alt="Slide #'+(idx+1)+' Anchor Link" /></a></li>'; 84 } 85 }, 86 slideResize: false, 87 containerResize: true 88 }).addClass('cycle-loaded'); 89 90 var thumb_height = $(gallery).attr('data-thumb-height'); 91 if(thumb_height) { 92 $(gallery_nav).find("li a").each(function() { 93 $(this).css({"height":thumb_height+"px"}); 94 }); 95 } 96 97 // ---------------- 98 // Caption Handling 99 // ---------------- 100 $(".next-arrow, .prev-arrow").click(function() { 101 $(gallery).find(".slide").not(".current").stop(1,1).find(".caption").slideDown("fsat"); 102 $(gallery).find(".slide.current").find(".caption").stop(1,1).slideDown("fast"); 103 }); 104 $(gallery).find(".slide .caption").hide(); 105 $(gallery).hover( 106 function() { 107 $(gallery).find(".slide.current").find(".caption").stop(1,1).slideDown("fast"); 108 }, 109 function() { 110 $(gallery).find(".slide.current").find(".caption").stop(1,1).slideUp("fast"); 111 } 112 ); 113 114 // ----------------------- 115 // Thumb Wrapper Scrolling 116 // ----------------------- 117 var embedded_gallery = $(gallery); 118 var div = $(gallery_nav).closest('.embedded-gallery-nav-wrapper'); 119 var ul = $(gallery_nav); 120 var divWidth = div.width(); 121 var lastLi = ul.find("li:last-child"); 122 123 $(div).css({"overflow":"hidden"}); 124 125 var deviceAgent = navigator.userAgent.toLowerCase();
126 var agentID = deviceAgent.match(/(iphone|ipod|ipad)/); 127 if (agentID) { 128 $(div).touchwipe({ 129 wipeLeft: function() { div.stop(1,1).animate({scrollLeft: div.scrollLeft()+350}, "slow"); }, 130 wipeRight: function() { div.stop(1,1).animate({scrollLeft: div.scrollLeft()-350}, "slow"); }, 131 wipeUp: function() { }, 132 wipeDown: function() { }, 133 min_move_x: 20, 134 min_move_y: 20, 135 preventDefaultEvents: false 136 }); 137 138 $(embedded_gallery).touchwipe({ 139 wipeLeft: function() { $(embedded_gallery).find(".next-arrow").click(); }, 140 wipeRight: function() { $(embedded_gallery).find(".prev-arrow").click(); }, 141 wipeUp: function() { }, 142 wipeDown: function() { }, 143 min_move_x: 20, 144 min_move_y: 20, 145 preventDefaultEvents: false 146 }); 147 } else { 148 $(div).mousemove(function(e) { 149 var photoThumbOffset = $(div).offset(); 150 var relativeThumbPosition = e.pageX-photoThumbOffset.left; 151 152 var ulWidth = lastLi[0].offsetLeft + lastLi.outerWidth(); 153 154 var left = (e.pageX - div.offset().left) * (ulWidth-divWidth) / divWidth; 155 div.scrollLeft(left); 156 }); 157 } 158 159 $(gallery_nav).waitForImages(function() { 160 var offset = 0; 161 $(ul).find("li").each(function() { 162 $(this).css({"left":offset+"px"}); 163 offset = offset + $(this).width()+parseInt($(this).css("padding-left").replace("px",""))+parseInt($(this).css("padding-right").replace("px","")); 164 165 if($(this).find("img").height() < $(this).find("a").height()) { 166 $(this).find("img").css({ 167 "height":"100%", 168 "width":"auto" 169 }); 170 } 171 }); 172 173 $(ul).fadeIn("slow"); 174 }); 175 176 177 // Fullscreen mode 178 if(typeof $(gallery).attr('data-has-fullscreen-mode') !== 'undefined' && $(gallery).attr('data-has-fullscreen-mode') == 1) { 179 $(gallery).prepend('<div class="inline-gallery-fullscreen-mode-message">Press <span>Esc</span> to exit full screen</div><a href="#" class="inline-gallery-fullscreen-toggle-link" title="Enter Fullscreen Mode">Fullscreen</a>'); 180 } 181 }); 182 183 $(document).on('click','.inline-gallery-fullscreen-toggle-link',function() { 184 $(this).c 185 var gallery_wrap = $(this).closest('.embedded-gallery-wrap'); 186 187 if($(gallery_wrap).hasClass('fullscreen-mode')) { 188 $('.inline-gallery-wrap.has-gallery-in-fullscreen-mode').removeClass('has-gallery-in-fullscreen-mode').html('').append($(gallery_wrap)); 189 $(this).attr('title','Enter Fullscreen Mode'); 190 $('body').removeClass('has-fullscreen-inline-gallery'); 191 192 } else { 193 $(gallery_wrap).closest('.inline-gallery-wrap').addClass('has-gallery-in-fullscreen-mode'); 194 $('body').prepend($(gallery_wrap)).addClass('has-fullscreen-inline-gallery'); 195 $(gallery_wrap).clone().appendTo($('.inline-gallery-wrap.has-gallery-in-fullscreen-mode')); 196 $(this).attr('title','Exit Fullscreen Mode'); 197 } 198 if($('.embedded-gallery-wrap.focused').length) $('.embedded-gallery-wrap.focused').removeClass('focused'); 199 $(this).closest('.embedded-gallery-wrap').addClass('focused'); 200 $(gallery_wrap).toggleClass('fullscreen-mode'); 201 return false; 202 }); 203 204 if($('.inline-gallery-fullscreen-toggle-link').length) { 205 $.when( 206 add_js(shared_root+'/js/jquery/jquery.tipsy/jquery.tipsy.js',1), 207 ).done(function() { 208 if($(window).width() > 1024) { 209 $(".inline-gallery-fullscreen-toggle-link").tipsy({ 210 live: true, 211 html: true, 212 gravity: 'e' 213 }); 214 } 215 }); 216 add_css(shared_root+'/js/jquery/jquery.tipsy/jquery.tipsy.css'); 217 } 218 219 // left/right/escape arrow handling 220 $('.embedded-gallery-wrap .prev-arrow, .embedded-gallery-wrap .next-arrow').click(function(e) { 221 if($('.embedded-gallery-wrap.focused').length) $('.embedded-gallery-wrap.focused').removeClass('focused'); 222 $(this).closest('.embedded-gallery-wrap').addClass('focused'); 223 }); 224 225 $(document).on('click','body',function(e) { 226 if($('.embedded-gallery-wrap.focused').length) $('.embedded-gallery-wrap.focused').removeClass('focused'); 227 if($(e.target).closest('.embedded-gallery-wrap').length) { 228 $(e.target).closest('.embedded-gallery-wrap').addClass('focused'); 229 } 230 }); 231 232 $(document).on('keydown','body',function(e) { 233 // arrow left 234 if(e.keyCode == 37 && $('.embedded-gallery-wrap.focused').length) { 235 $('.embedded-gallery-wrap.focused').find('.stage').cycle('prev'); 236 } 237 238 // arrow right 239 if(e.keyCode == 39 && $('.embedded-gallery-wrap.focused').length) { 240 $('.embedded-gallery-wrap.focused').find('.stage').cycle('next'); 241 } 242 243 // escape 244 if(e.keyCode == 27 && $('.inline-gallery-wrap.has-gallery-in-fullscreen-mode').length) { 245 $('.embedded-gallery-wrap.fullscreen-mode .inline-gallery-fullscreen-toggle-link').click(); 246 } 247 }); 248 249} 250 251 252/* ----------------------------------------------------------------------------------------------------------------------- */ 253/* Mosaic / Grid Gallery ------------------------------------------------------------------------------------------------- */ 254/* ----------------------------------------------------------------------------------------------------------------------- */ 255if($('.embedded-mosaic-gallery').length) { 256 $.when(add_js(shared_root+'/js/jquery/jquery.masonry/masonry.pkgd.min.js')).done(function() { 257 $('body').addClass('mosaic-gallery-page'); 258 259 $('.embedded-mosaic-gallery').each(function() { 260 var $container = $(this); 261 $container.before('<p id="no-records" class="dn bmt tac">There are no photos currently added to this gallery.</p>'); 262 $container.prepend('<div class="grid-sizer"></div><div class="gutter-sizer"></div>'); 263 264 if($(window).width()>600) { 265 $container.find('img').each(function() { 266 var title = ''; 267 if($(this).closest('.slide').length && $(this).closest('.slide').find('.caption').length) { 268 var re1 = new RegExp("'", 'g'); 269 var re2 = new RegExp('"', 'g'); 270 title = $(this).closest('.slide').find('.caption').text().replace(re1,''').replace(re2,'"'); 271 } 272 var url = $(this).attr('src'); 273 var has_external_url = false; 274 if($(this).closest('a').length) { 275 url = $(this).closest('a').attr('href'); 276 has_external_url = 1; 277 } 278 $(this).wrap('<a href="'+url+'" target="_blank" '+(!has_external_url?'class="fancybox" rel="mosaic-photo-gallery-link"':'')+' title="'+title+'"></a>'); 279 }); 280 } 281 282 init_masonry(); 283 284 $container.waitForImages(function() { 285 init_masonry(); 286 setTimeout(function() { $container.addClass('images-loaded'); }, 500); 287 288 if(parseInt($container.find('.slide').first().css('margin-bottom').replace('px','')) > 0) { 289 var masonry_t; 290 $(window).resize(function() { 291 clearTimeout(masonry_t); 292 masonry_t = setTimeout(function() { 293 $('.slide').css({'margin-bottom':$('.gutter-sizer').width()+'px'}); 294 $container.masonry('layout'); 295 },250); 296 }).resize(); 297 } 298 }); 299 }); 300 301 function init_masonry() { 302 $('.embedded-mosaic-gallery').each(function() { 303 $(this).masonry({ 304 "columnWidth" : ".grid-sizer", 305 "itemSelector" : ".slide", 306 "gutter" : ".gutter-sizer" 307 }); 308 }); 309 } 310 311 if($(window).width()>600) { 312 add_css(shared_root+'/js/jquery/jquery.fancybox/jquery.fancybox-1.3.4.css'); 313 $.when(add_js(shared_root+'/js/jquery/jquery.fancybox/jquery.fancybox-1.3.4.pack.js')).done(function() { 314 $('.fancybox').fancybox({ 315 'overlayColor' : '#000', 316 'padding': 0 317 }); 318 }); 319 } 320 }); 321}
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.