1/** 2 * Comment Likes - JavaScript 3 * 4 * This handles liking and unliking comments, as well as viewing who has 5 * liked a particular comment. 6 * 7 * @dependency Swipe (dynamically loaded when needed) 8 * 9 * @package Comment_Likes 10 * @subpackage JavaScript 11 */ 12(function () { 13 function init() { 14 let extWin; 15 let extWinCheck; 16 let commentLikeEvent; 17 18 // Only run once. 19 if (window.comment_likes_loaded) { 20 return; 21 } 22 window.comment_likes_loaded = true; 23 24 // Client-side cache of who liked a particular comment to avoid 25 // having to hit the server multiple times for the same data. 26 const commentLikeCache = {}; 27 28 let swipeLibPromise; 29 30 // Load the Swipe library, if it's not already loaded. 31 function swipeLibLoader() { 32 if (!swipeLibPromise) { 33 swipeLibPromise = new Promise((resolve, reject) => { 34 if (window.Swipe) { 35 resolve(window.Swipe); 36 } else { 37 const swipeScript = document.createElement('script'); 38 swipeScript.src = comment_like_text.swipeUrl; 39 swipeScript.async = true; 40 document.body.appendChild(swipeScript); 41 swipeScript.addEventListener('load', () => resolve(window.Swipe)); 42 swipeScript.addEventListener('error', error => reject(error)); 43 } 44 }); 45 } 46 return swipeLibPromise; 47 } 48 49 /** 50 * Parse the comment ID from a comment like link. 51 */ 52 function getCommentId(link) { 53 const commentId = 54 link && link.getAttribute('href') && link.getAttribute('href').split('like_comment='); 55 return commentId[1].split('&_wpnonce=')[0]; 56 } 57 58 /** 59 * Handle an ajax action on the comment like link. 60 */ 61 function handleLinkAction(link, action, commentId, callback) { 62 const nonce = 63 link && link.getAttribute('href') && link.getAttribute('href').split('_wpnonce=')[1]; 64 65 fetch('/wp-admin/admin-ajax.php', { 66 method: 'POST', 67 body: new URLSearchParams({ 68 action: action, 69 _wpnonce: nonce, 70 like_comment: commentId, 71 blog_id: Number(link.dataset.blog), 72 }), 73 headers: { 74 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 75 'X-Requested-With': 'XMLHttpRequest', 76 Accept: 'application/json', 77 'cache-control': 'no-cache', 78 pragma: 'no-cache', 79 }, 80 }) 81 .then(response => response.json()) 82 .then(callback); 83 } 84 85 function startPolling() { 86 // Append cookie polling login iframe to this window to wait for user to finish logging in (or cancel) 87 const loginIframe = document.createElement('iframe'); 88 loginIframe.id = 'wp-login-polling-iframe'; 89 loginIframe.src = 'https://wordpress.com/public.api/connect/?iframe=true'; 90 document.body.appendChild(loginIframe); 91 loginIframe.style.display = 'none'; 92 } 93 94 function stopPolling() { 95 const iframe = document.querySelector('#wp-login-polling-iframe'); 96 if (iframe) { 97 iframe.remove(); 98 } 99 } 100 101 function hide(el) { 102 if (el && el.style) { 103 el.style.display = 'none'; 104 } 105 } 106 107 function show(el) { 108 if (el && el.style) { 109 el.style.removeProperty('display'); 110 } 111 } 112 113 // Overlay used for displaying comment like info. 114 class Overlay { 115 constructor() { 116 // Overlay element. 117 this.el = document.createElement('div'); 118 this.el.classList.add('comment-likes-overlay'); 119 document.body.appendChild(this.el); 120 hide(this.el); 121 122 this.el.addEventListener('mouseenter', () => { 123 // Don't hide the overlay if the user is mousing over it. 124 overlay.cancelHide(); 125 }); 126 127 this.el.addEventListener('mouseleave', () => overlay.requestHide()); 128 129 // Inner contents of overlay. 130 this.innerEl = null; 131 132 // Instance of the Swipe library. 133 this.swipe = null; 134 135 // Timeout used for hiding the overlay. 136 this.hideTimeout = null; 137 } 138 139 // Initialise the overlay for use, removing any old content. 140 clear() { 141 // Unload any previous instance of Swipe (to avoid leaking a global 142 // event handler). This is done before clearing the contents of the 143 // overlay because Swipe expects the slides to still be present. 144 if (this.swipe) { 145 this.swipe.kill(); 146 this.swipe = null; 147 } 148 this.el.innerHTML = ''; 149 this.innerEl = document.createElement('div'); 150 this.innerEl.classList.add('inner'); 151 this.el.appendChild(this.innerEl); 152 } 153 154 /** 155 * Construct a list (<ul>) of user (gravatar, name) details. 156 * 157 * @param data liker data returned from the server 158 * @param klass CSS class to apply to the <ul> element 159 * @param start index of user to start at 160 * @param length number of users to include in the list 161 * 162 * @return A container element with the list 163 */ 164 getUserBits(data, klass, start, length) { 165 start = start || 0; 166 let last = start + (length || data.length); 167 last = last > data.length ? data.length : last; 168 const container = document.createElement('div'); 169 container.classList.add('liker-list'); 170 let html = `<ul class="${klass || ''}">`; 171 for (let i = start; i < last; ++i) { 172 const user = data[i]; 173 html += ` 174 <li> 175 <a rel="nofollow" title="${user.display_name_esc}" href="${user.profile_url_esc}"> 176 <img src="${user.avatar_url_esc}" alt="${user.display_name_esc}" /> 177 <span class="user-name">${user.display_name_esc}</span> 178 </a> 179 </li> 180 `; 181 } 182 html += '</ul>'; 183 container.innerHTML = html; 184 return container; 185 } 186 187 /** 188 * Render the display of who has liked this comment. The type of 189 * display depends on how many people have liked the comment. 190 * If more than 10 people have liked the comment, this function 191 * renders navigation controls and sets up the Swipe library for 192 * changing between pages. 193 * 194 * @param link the element over which the user is hovering 195 * @param data the results retrieved from the server 196 */ 197 showLikes(link, data) { 198 this.clear(); 199 200 link.dataset.likeCount = data.length; 201 if (data.length === 0) { 202 // No likers after all. 203 hide(this.el); 204 return; 205 } 206 207 this.innerEl.style.padding = '12px'; 208 209 if (data.length < 6) { 210 // Only one column needed. 211 this.innerEl.style.maxWidth = '200px'; 212 this.innerEl.innerHTML = ''; 213 this.innerEl.appendChild(this.getUserBits(data, 'single')); 214 this.setPosition(link); 215 } else if (data.length < 11) { 216 // Two columns, but only one page. 217 this.innerEl.innerHTML = ''; 218 this.innerEl.appendChild(this.getUserBits(data, 'double')); 219 this.setPosition(link); 220 } else { 221 // Multiple pages. 222 this.renderLikesWithPagination(data, link); 223 } 224 } 225 226 /**
227 * Render multiple pages of likes with pagination controls. 228 * This function is intended to be called by `showLikes` above. 229 * 230 * @param data the results retrieved from the server 231 */ 232 renderLikesWithPagination(data, link) { 233 swipeLibLoader().then(() => { 234 const page_count = Math.ceil(data.length / 10); 235 // Swipe requires two nested containers. 236 const swipe = document.createElement('div'); 237 swipe.classList.add('swipe'); 238 this.innerEl.appendChild(swipe); 239 240 const wrap = document.createElement('div'); 241 wrap.classList.add('swipe-wrap'); 242 swipe.appendChild(wrap); 243 244 for (let i = 0; i < page_count; ++i) { 245 wrap.appendChild(this.getUserBits(data, 'double', i * 10, 10)); 246 } 247 248 /** 249 * Navigation controls. 250 * This is based on the Newdash controls found in 251 * reader/recommendations-templates.php 252 */ 253 const nav = document.createElement('nav'); 254 nav.classList.add('slider-nav'); 255 256 let navContents = ` 257 <a href="#" class="prev"> 258 <span class="noticon noticon-previous" title="Previous" alt="<"></span> 259 </a> 260 <span class="position"> 261 `; 262 for (let i = 0; i < page_count; ++i) { 263 navContents += `<em data-page="${i}" class="${i === 0 ? 'on' : ''}">•</em>`; 264 } 265 navContents += ` 266 </span> 267 <a href="#" class="next"> 268 <span class="noticon noticon-next" title="Next" alt=">"></span> 269 </a> 270 `; 271 this.innerEl.appendChild(nav); 272 nav.innerHTML = navContents; 273 274 /** Set up Swipe. **/ 275 // Swipe cannot be set up successfully unless its container 276 // is visible, so we show it now. 277 show(this.el); 278 this.setPosition(link); 279 280 this.swipe = new Swipe(swipe, { 281 callback: function (pos) { 282 // Update the pagination indicators. 283 // 284 // If there are exactly two pages, Swipe has a weird 285 // special case where it duplicates both pages and 286 // can return index 2 and 3 even though those aren't 287 // real pages (see swipe.js, line 47). To deal with 288 // this, we use the expression `pos % page_count`. 289 pos = pos % page_count; 290 nav.querySelectorAll('em').forEach(em => { 291 const page = Number(em.dataset.page); 292 em.setAttribute('class', pos === page ? 'on' : ''); 293 }); 294 }, 295 }); 296 297 nav.querySelectorAll('em').forEach(em => { 298 em.addEventListener('click', e => { 299 // Go to the page corresponding to the indicator clicked. 300 this.swipe.slide(Number(em.dataset.page)); 301 e.preventDefault(); 302 }); 303 }); 304 // Previous and next buttons. 305 nav.querySelector('.prev').addEventListener('click', e => { 306 this.swipe.prev(); 307 e.preventDefault(); 308 }); 309 nav.querySelector('.next').addEventListener('click', e => { 310 this.swipe.next(); 311 e.preventDefault(); 312 }); 313 }); 314 } 315 316 /** 317 * Open the overlay and show a loading message. 318 */ 319 showLoadingMessage(link) { 320 this.clear(); 321 this.innerEl.textContent = comment_like_text.loading; 322 this.setPosition(link); 323 } 324 325 /** 326 * Position the overlay near the current comment. 327 * 328 * @param link element near which to position the overlay 329 */ 330 setPosition(link) { 331 // Prepare a down arrow icon for the bottom of the overlay. 332 const icon = document.createElement('span'); 333 this.el.appendChild(icon); 334 icon.classList.add('icon', 'noticon', 'noticon-downarrow'); 335 icon.style.textShadow = '0px 1px 1px rgb(223, 223, 223)'; 336 337 const rect = link.getBoundingClientRect(); 338 const win = document.defaultView; 339 const offset = { 340 top: rect.top + win.scrollY, 341 left: rect.left + win.scrollX, 342 }; 343 344 // Take measurements with the element fully visible. 345 show(this.el); 346 let left = offset.left - (this.el.offsetWidth - link.offsetWidth) / 2; 347 left = left < 5 ? 5 : left; 348 let top = offset.top - this.el.offsetHeight + 5; 349 hide(this.el); 350 351 const adminBar = document.querySelector('#wpadminbar'); 352 353 // Check if the overlay would appear off the screen. 354 if (top < win.scrollY + ((adminBar && adminBar.offsetHeight) || 0)) { 355 // We'll display the overlay beneath the link instead. 356 top = offset.top + link.offsetHeight; 357 // Instead of using the down arrow icon, use an up arrow. 358 icon.remove(); 359 this.el.prepend(icon); 360 icon.classList.remove('noticon-downarrow'); 361 icon.classList.add('noticon-uparrow'); 362 icon.style.textShadow = '0px -1px 1px rgb(223, 223, 223)'; 363 icon.style.verticalAlign = 'bottom'; 364 } 365 366 this.el.style.left = `${left}px`; 367 this.el.style.top = `${top}px`; 368 show(this.el); 369 370 // The height of the arrow icon differs slightly between browsers, 371 // so we compute the margin here to make sure it isn't disjointed 372 // from the overlay. 373 icon.style.marginTop = `${icon.scrollHeight - 26}px`; 374 icon.style.marginBottom = `${20 - icon.scrollHeight}px`; 375 376 // Position the arrow to be horizontally centred on the link. 377 icon.style.paddingLeft = `${ 378 offset.left - left + (link.offsetWidth - icon.scrollWidth) / 2 379 }px`; 380 } 381 382 /** 383 * Return whether the overlay is visible. 384 */ 385 isVisible() { 386 return this.el.style.getPropertyValue('display') !== 'none'; 387 } 388 389 /** 390 * Request that the overlay be hidden after a short delay. 391 */ 392 requestHide() { 393 if (this.hideTimeout !== null) { 394 return; 395 } 396 this.hideTimeout = setTimeout(() => { 397 hide(this.el); 398 this.clear(); 399 }, 300); 400 } 401 402 /** 403 * Cancel a request to hide the overlay. 404 */ 405 cancelHide() { 406 if (this.hideTimeout !== null) { 407 clearTimeout(this.hideTimeout); 408 this.hideTimeout = null; 409 } 410 } 411 } 412 413 // Overlay used for displaying comment like info.
414 const overlay = new Overlay(); 415 416 // The most recent comment for which the user has requested to see 417 // who liked it. 418 var relevantComment; 419 420 // Precache after this timeout. 421 var precacheTimeout = null; 422 423 /** 424 * Fetch the like data for a particular comment. 425 */ 426 function fetchLikeData(link, commentId) { 427 commentLikeCache[commentId] = null; 428 429 const container = link && link.parentElement && link.parentElement.parentElement; 430 const star = container.querySelector('a.comment-like-link'); 431 star && 432 handleLinkAction(star, 'view_comment_likes', commentId, data => { 433 // Populate the cache. 434 commentLikeCache[commentId] = data; 435 436 // Only show the overlay if the user is interested. 437 if (overlay.isVisible() && relevantComment === commentId) { 438 overlay.showLikes(link, data); 439 } 440 }); 441 } 442 443 function readCookie(c) { 444 const nameEQ = c + '='; 445 const cookieStrings = document.cookie.split(';'); 446 447 for (let i = 0; i < cookieStrings.length; i++) { 448 let cookieString = cookieStrings[i]; 449 while (cookieString.charAt(0) === ' ') { 450 cookieString = cookieString.substring(1, cookieString.length); 451 } 452 if (cookieString.indexOf(nameEQ) === 0) { 453 const chunk = cookieString.substring(nameEQ.length, cookieString.length); 454 const pairs = chunk.split('&'); 455 const cookieData = {}; 456 for (let num = pairs.length - 1; num >= 0; num--) { 457 const pair = pairs[num].split('='); 458 cookieData[pair[0]] = decodeURIComponent(pair[1]); 459 } 460 return cookieData; 461 } 462 } 463 return null; 464 } 465 466 function getServiceData() { 467 const data = readCookie('wpc_wpc'); 468 if (data === null || typeof data.access_token === 'undefined' || !data.access_token) { 469 return false; 470 } 471 return data; 472 } 473 474 function readMessage(msg) { 475 const event = msg.data; 476 477 if (typeof event.event === 'undefined') { 478 return; 479 } 480 481 if (event.event === 'login' && event.success) { 482 extWinCheck = setInterval(function () { 483 if (!extWin || extWin.closed) { 484 clearInterval(extWinCheck); 485 if (getServiceData()) { 486 // Load page in an iframe to get the current comment nonce 487 const nonceIframe = document.createElement('iframe'); 488 nonceIframe.id = 'wp-login-comment-nonce-iframe'; 489 nonceIframe.style.display = 'none'; 490 nonceIframe.src = commentLikeEvent + ''; 491 document.body.appendChild(nonceIframe); 492 493 const commentLikeId = (commentLikeEvent + '') 494 .split('like_comment=')[1] 495 .split('&_wpnonce=')[0]; 496 let c; 497 498 // Set a 5 second timeout to redirect to the comment page without doing the Like as a fallback 499 const commentLikeTimeout = setTimeout(() => { 500 window.location = commentLikeEvent; 501 }, 5000); 502 503 // Check for a new nonced redirect and use that if available before timing out 504 const commentLikeCheck = setInterval(() => { 505 const iframe = document.querySelector('#wp-login-comment-nonce-iframe'); 506 if (iframe) { 507 c = iframe.querySelector(`#comment-like-${commentLikeId} .comment-like-link`); 508 } 509 if (c && typeof c.href !== 'undefined') { 510 clearTimeout(commentLikeTimeout); 511 clearInterval(commentLikeCheck); 512 window.location = c.href; 513 } 514 }, 100); 515 } 516 } 517 }, 100); 518 519 if (extWin) { 520 if (!extWin.closed) { 521 extWin.close(); 522 } 523 extWin = false; 524 } 525 526 stopPolling(); 527 } 528 } 529 530 if (typeof window.postMessage !== 'undefined') { 531 window.addEventListener('message', e => { 532 let message = e && e.data; 533 if (typeof message === 'string') { 534 try { 535 message = JSON.parse(message); 536 } catch (err) { 537 return; 538 } 539 } 540 541 const type = message && message.type; 542 if (type === 'loginMessage') { 543 readMessage(message); 544 } 545 }); 546 } 547 548 document.body.addEventListener('click', e => { 549 let target = e.target; 550 551 // Don't do anything when clicking on the "X people" link. 552 if (target.matches('p.comment-likes a.view-likers')) { 553 e.preventDefault(); 554 return; 555 } 556 557 // Retrieve the surrounding paragraph to the star, if it hasn't been liked. 558 const notLikedPar = target.closest('p.comment-not-liked'); 559 560 // Return if not clicking on star or surrounding paragraph. 561 if (!target.matches('a.comment-like-link') && !notLikedPar) { 562 return; 563 } 564 565 // When a comment hasn't been liked, make the text clickable, too. 566 if (notLikedPar) { 567 target = notLikedPar.querySelector('a.comment-like-link'); 568 if (!target) { 569 return; 570 } 571 } 572 573 if (target.classList.contains('needs-login')) { 574 e.preventDefault(); 575 commentLikeEvent = target; 576 if (extWin) { 577 if (!extWin.closed) { 578 extWin.close(); 579 } 580 extWin = false;
581 } 582 583 stopPolling(); 584 585 const url = 'https://wordpress.com/public.api/connect/?action=request&service=wordpress'; 586 extWin = window.open( 587 url, 588 'likeconn', 589 'status=0,toolbar=0,location=1,menubar=0,directories=0,resizable=1,scrollbars=1,height=560,width=500' 590 ); 591 592 startPolling(); 593 594 return false; 595 } 596 597 // Record that the user likes or does not like this comment. 598 const commentId = getCommentId(target); 599 target.classList.add('loading'); 600 601 let commentEl = document.querySelector(`p#comment-like-${commentId}`); 602 // Determine whether to like or unlike based on whether the comment is 603 // currently liked. 604 const action = 605 commentEl && commentEl.dataset.liked === 'comment-liked' 606 ? 'unlike_comment' 607 : 'like_comment'; 608 handleLinkAction(target, action, commentId, data => { 609 // Invalidate the like cache for this comment. 610 delete commentLikeCache[commentId]; 611 612 const countEl = document.querySelector(`#comment-like-count-${data.context}`); 613 if (countEl) { 614 countEl.innerHTML = data.display; 615 } 616 617 commentEl = document.querySelector(`p#comment-like-${data.context}`); 618 if (action === 'like_comment') { 619 commentEl.classList.remove('comment-not-liked'); 620 commentEl.classList.add('comment-liked'); 621 commentEl.dataset.liked = 'comment-liked'; 622 } else { 623 commentEl.classList.remove('comment-liked'); 624 commentEl.classList.add('comment-not-liked'); 625 commentEl.dataset.liked = 'comment-not-liked'; 626 } 627 628 // Prefetch new data for this comment (if there are likers left). 629 const parent = target.closest('.comment-likes'); 630 const link = parent && parent.querySelector('a.view-likers'); 631 if (link) { 632 fetchLikeData(link, commentId); 633 } 634 635 target.classList.remove('loading'); 636 }); 637 e.preventDefault(); 638 e.stopPropagation(); 639 }); 640 641 document.body.addEventListener( 642 'mouseenter', 643 function (e) { 644 if (!e.target.matches('p.comment-likes a.view-likers')) { 645 return; 646 } 647 // Show the user a list of who has liked this comment. 648 649 const link = e.target; 650 if (Number(link.dataset.likeCount || 0) === 0) { 651 // No one has liked this comment. 652 return; 653 } 654 655 // Don't hide the overlay. 656 overlay.cancelHide(); 657 658 // Get the comment ID. 659 const container = link.parentElement && link.parentElement.parentElement; 660 const star = container && container.querySelector('a.comment-like-link'); 661 const commentId = star && getCommentId(star); 662 relevantComment = commentId; 663 664 // Check if the list of likes for this comment is already in 665 // the cache. 666 if (commentId in commentLikeCache) { 667 const entry = commentLikeCache[commentId];
668 // Only display the likes if the ajax request is 669 // actually done. 670 if (entry !== null) { 671 overlay.showLikes(link, entry); 672 } else { 673 // Make sure the overlay is visible (in case 674 // the user moved the mouse away while loading 675 // but then came back before it finished 676 // loading). 677 overlay.showLoadingMessage(link); 678 } 679 return; 680 } 681 682 // Position the "Loading..." overlay. 683 overlay.showLoadingMessage(link); 684 685 // Fetch the data. 686 fetchLikeData(link, commentId); 687 }, 688 true 689 ); 690 691 document.body.addEventListener( 692 'mouseleave', 693 e => { 694 if (!e.target.matches('p.comment-likes a.view-likers')) { 695 return; 696 } 697 // User has moved cursor away - hide the overlay. 698 overlay.requestHide(); 699 }, 700 true 701 ); 702 703 document.body.addEventListener( 704 'mouseenter', 705 e => { 706 if (!e.target.matches('.comment') || !e.target.querySelector('a.comment-like-link')) { 707 return; 708 } 709 // User is moving over a comment - precache the comment like data.
710 if (precacheTimeout !== null) { 711 clearTimeout(precacheTimeout); 712 precacheTimeout = null; 713 } 714 715 const star = e.target.querySelector('a.comment-like-link'); 716 const parent = star.closest('.comment-likes'); 717 const link = parent && parent.querySelector('a.view-likers'); 718 if (!link || Number(link.dataset.likeCount || 0) === 0) { 719 // No likes. 720 return; 721 } 722 const commentId = getCommentId(star); 723 if (commentId in commentLikeCache) { 724 // Already in cache. 725 return; 726 } 727 728 precacheTimeout = setTimeout(() => { 729 precacheTimeout = null; 730 if (commentId in commentLikeCache) { 731 // Was cached in the interim. 732 return; 733 } 734 fetchLikeData(link, commentId); 735 }, 1000); 736 }, 737 true 738 ); 739 } 740 741 if (document.readyState !== 'loading') { 742 init(); 743 } else { 744 document.addEventListener('DOMContentLoaded', init); 745 } 746})(); 747; 748!function(e){var o={};function n(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=o,n.d=function(e,o,t){n.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,o){if(1&o&&(e=n(e)),8&o)return e;if(4&o&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(n.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&o&&"string"!=typeof e)for(var r in e)n.d(t,r,function(o){return e[o]}.bind(null,r));return t},n.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(o,"a",o),o},n.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},n.p="",n(n.s=273)}({273:function(e,o){!function(){"use strict";let e,o;function n(e){return new Promise((o,n)=>{const t=document.createElement("script");t.onload=()=>o(),t.onerror=e=>n(e),t.src=e,document.body.appendChild(t)})}function t(){if(e)return e;const o=window.wpcom_coblocks_js;return e=n(o.coblocks_lightbox_js),e}function r(){if(o)return o;window.wpcomJQueryUsageLoggerDisabled=!0;const e=window.wpcom_coblocks_js,t=window.jQuery?Promise.resolve():n(e.jquery_core_js).then(()=>n(e.jquery_migrate_js)),r=t.then(()=>window.imagesLoaded?Promise.resolve():n(e.imagesloaded_js)),c=t.then(()=>window.Masonry?Promise.resolve():n(e.masonry_js)),u=Promise.all([t,r,c]).then(()=>n(e.coblocks_masonry_js));return o=u,o}function c(){document.querySelector(".wp-block-coblocks-gallery-masonry")&&r(),document.querySelector(".has-lightbox")&&t(),document.body.classList.contains("block-editor-page")&&(r(),t())}"loading"!==document.readyState?c():document.addEventListener("DOMContentLoaded",c)}()}});; 749/** 750 * File skip-link-focus-fix.js. 751 * 752 * Helps with accessibility for keyboard only users. 753 * 754 * Learn more: https://git.io/vWdr2 755 */ 756(function() { 757 var isIe = /(trident|msie)/i.test( navigator.userAgent ); 758 759 if ( isIe && document.getElementById && window.addEventListener ) { 760 window.addEventListener( 'hashchange', function() { 761 var id = location.hash.substring( 1 ), 762 element; 763 764 if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { 765 return; 766 } 767 768 element = document.getElementById( id ); 769 770 if ( element ) { 771 if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { 772 element.tabIndex = -1; 773 } 774 775 element.focus(); 776 } 777 }, false ); 778 } 779})(); 780; 781/* 782 * jQuery FlexSlider v2.2.2 783 * http://www.woothemes.com/flexslider/ 784 * 785 * Copyright 2012 WooThemes 786 * Free to use under the GPLv2 license. 787 * http://www.gnu.org/licenses/gpl-2.0.html 788 * 789 * Contributing author: Tyler Smith (@mbmufffin) 790 */ 791 792; 793(function ($) { 794 795 //FlexSlider: Object Instance 796 $.flexslider = function(el, options) { 797 var slider = $(el); 798 799 // making variables public 800 slider.vars = $.extend({}, $.flexslider.defaults, options); 801 802 var namespace = slider.vars.namespace, 803 msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture, 804 touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch, 805 // depricating this idea, as devices are being released with both of these events 806 //eventType = (touch) ? "touchend" : "click", 807 eventType = "click touchend MSPointerUp", 808 watchedEvent = "", 809 watchedEventClearTimer, 810 vertical = slider.vars.direction === "vertical", 811 reverse = slider.vars.reverse, 812 carousel = (slider.vars.itemWidth > 0), 813 fade = slider.vars.animation === "fade", 814 asNav = slider.vars.asNavFor !== "", 815 methods = {}, 816 focused = true; 817 818 // Store a reference to the slider object 819 $.data(el, "flexslider", slider); 820 821 // Private slider methods 822 methods = { 823 init: function() { 824 slider.animating = false;
825 // Get current slide and make sure it is a number 826 slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 ); 827 if ( isNaN( slider.currentSlide ) ) slider.currentSlide = 0; 828 slider.animatingTo = slider.currentSlide; 829 slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last); 830 slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' ')); 831 slider.slides = $(slider.vars.selector, slider); 832 slider.container = $(slider.containerSelector, slider); 833 slider.count = slider.slides.length; 834 // SYNC: 835 slider.syncExists = $(slider.vars.sync).length > 0; 836 // SLIDE: 837 if (slider.vars.animation === "slide") slider.vars.animation = "swing"; 838 slider.prop = (vertical) ? "top" : "marginLeft"; 839 slider.args = {}; 840 // SLIDESHOW: 841 slider.manualPause = false; 842 slider.stopped = false; 843 //PAUSE WHEN INVISIBLE 844 slider.started = false; 845 slider.startTimeout = null; 846 // TOUCH/USECSS: 847 slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() { 848 var obj = document.createElement('div'), 849 props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']; 850 for (var i in props) { 851 if ( obj.style[ props[i] ] !== undefined ) { 852 slider.pfx = props[i].replace('Perspective','').toLowerCase(); 853 slider.prop = "-" + slider.pfx + "-transform"; 854 return true; 855 } 856 } 857 return false; 858 }()); 859 // CONTROLSCONTAINER: 860 if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer); 861 // MANUAL: 862 if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls); 863 864 // RANDOMIZE: 865 if (slider.vars.randomize) { 866 slider.slides.sort(function() { return (Math.round(Math.random())-0.5); }); 867 slider.container.empty().append(slider.slides); 868 } 869 870 slider.doMath(); 871 872 // INIT 873 slider.setup("init"); 874 875 // CONTROLNAV: 876 if (slider.vars.controlNav) methods.controlNav.setup(); 877 878 // DIRECTIONNAV: 879 if (slider.vars.directionNav) methods.directionNav.setup(); 880 881 // KEYBOARD: 882 if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) { 883 $(document).bind('keyup', function(event) { 884 var keycode = event.keyCode; 885 if (!slider.animating && (keycode === 39 || keycode === 37)) { 886 var target = (keycode === 39) ? slider.getTarget('next') : 887 (keycode === 37) ? slider.getTarget('prev') : false; 888 slider.flexAnimate(target, slider.vars.pauseOnAction); 889 } 890 }); 891 } 892 // MOUSEWHEEL: 893 if (slider.vars.mousewheel) { 894 slider.bind('mousewheel', function(event, delta, deltaX, deltaY) { 895 event.preventDefault(); 896 var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev'); 897 slider.flexAnimate(target, slider.vars.pauseOnAction); 898 }); 899 } 900 901 // PAUSEPLAY 902 if (slider.vars.pausePlay) methods.pausePlay.setup(); 903 904 //PAUSE WHEN INVISIBLE 905 if (slider.vars.slideshow && slider.vars.pauseInvisible) methods.pauseInvisible.init(); 906 907 // SLIDSESHOW 908 if (slider.vars.slideshow) { 909 if (slider.vars.pauseOnHover) { 910 slider.hover(function() { 911 if (!slider.manualPlay && !slider.manualPause) slider.pause(); 912 }, function() { 913 if (!slider.manualPause && !slider.manualPlay && !slider.stopped) slider.play(); 914 }); 915 } 916 // initialize animation 917 //If we're visible, or we don't use PageVisibility API
918 if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) { 919 (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play(); 920 } 921 } 922 923 // ASNAV: 924 if (asNav) methods.asNav.setup(); 925 926 // TOUCH 927 if (touch && slider.vars.touch) methods.touch(); 928 929 // FADE&&SMOOTHHEIGHT || SLIDE: 930 if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize orientationchange focus", methods.resize); 931 932 slider.find("img").attr("draggable", "false"); 933 934 // API: start() Callback 935 setTimeout(function(){ 936 slider.vars.start(slider); 937 }, 200); 938 }, 939 asNav: { 940 setup: function() { 941 slider.asNav = true; 942 slider.animatingTo = Math.floor(slider.currentSlide/slider.move); 943 slider.currentItem = slider.currentSlide; 944 slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide"); 945 if(!msGesture){ 946 slider.slides.on(eventType, function(e){ 947 e.preventDefault(); 948 var $slide = $(this), 949 target = $slide.index(); 950 var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container 951 if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) { 952 slider.flexAnimate(slider.getTarget("prev"), true); 953 } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + "active-slide")) { 954 slider.direction = (slider.currentItem < target) ? "next" : "prev"; 955 slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true); 956 } 957 }); 958 }else{ 959 el._slider = slider; 960 slider.slides.each(function (){ 961 var that = this; 962 that._gesture = new MSGesture(); 963 that._gesture.target = that; 964 that.addEventListener("MSPointerDown", function (e){ 965 e.preventDefault(); 966 if(e.currentTarget._gesture) 967 e.currentTarget._gesture.addPointer(e.pointerId); 968 }, false); 969 that.addEventListener("MSGestureTap", function (e){ 970 e.preventDefault(); 971 var $slide = $(this), 972 target = $slide.index(); 973 if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) { 974 slider.direction = (slider.currentItem < target) ? "next" : "prev"; 975 slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true); 976 } 977 }); 978 }); 979 } 980 } 981 }, 982 controlNav: { 983 setup: function() { 984 if (!slider.manualControls) { 985 methods.controlNav.setupPaging(); 986 } else { // MANUALCONTROLS: 987 methods.controlNav.setupManual(); 988 } 989 }, 990 setupPaging: function() { 991 var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging', 992 j = 1, 993 item, 994 slide; 995 996 slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>'); 997 998 if (slider.pagingCount > 1) { 999 for (var i = 0; i < slider.pagingCount; i++) { 1000 slide = slider.slides.eq(i); 1001 item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"/>' : '<a>' + j + '</a>'; 1002 if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) { 1003 var captn = slide.attr( 'data-thumbcaption' ); 1004 if ( '' != captn && undefined != captn ) item += '<span class="' + namespace + 'caption">' + captn + '</span>'; 1005 } 1006 slider.controlNavScaffold.append('<li>' + item + '</li>'); 1007 j++; 1008 } 1009 } 1010 1011 // CONTROLSCONTAINER: 1012 (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold); 1013 methods.controlNav.set(); 1014 1015 methods.controlNav.active(); 1016 1017 slider.controlNavScaffold.delegate('a, img', eventType, function(event) { 1018 event.preventDefault(); 1019 1020 if (watchedEvent === "" || watchedEvent === event.type) { 1021 var $this = $(this), 1022 target = slider.controlNav.index($this); 1023 1024 if (!$this.hasClass(namespace + 'active')) { 1025 slider.direction = (target > slider.currentSlide) ? "next" : "prev"; 1026 slider.flexAnimate(target, slider.vars.pauseOnAction); 1027 } 1028 } 1029 1030 // setup flags to prevent event duplication 1031 if (watchedEvent === "") { 1032 watchedEvent = event.type; 1033 } 1034 methods.setToClearWatchedEvent(); 1035 1036 }); 1037 }, 1038 setupManual: function() { 1039 slider.controlNav = slider.manualControls; 1040 methods.controlNav.active(); 1041 1042 slider.controlNav.bind(eventType, function(event) { 1043 event.preventDefault(); 1044 1045 if (watchedEvent === "" || watchedEvent === event.type) { 1046 var $this = $(this), 1047 target = slider.controlNav.index($this); 1048 1049 if (!$this.hasClass(namespace + 'active')) { 1050 (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev"; 1051 slider.flexAnimate(target, slider.vars.pauseOnAction); 1052 } 1053 } 1054 1055 // setup flags to prevent event duplication 1056 if (watchedEvent === "") { 1057 watchedEvent = event.type; 1058 } 1059 methods.setToClearWatchedEvent(); 1060 }); 1061 }, 1062 set: function() { 1063 var selector = (slider.vars.controlNav === "thumbnails") ? 'img' : 'a'; 1064 slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider); 1065 }, 1066 active: function() { 1067 slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active"); 1068 }, 1069 update: function(action, pos) { 1070 if (slider.pagingCount > 1 && action === "add") { 1071 slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>')); 1072 } else if (slider.pagingCount === 1) { 1073 slider.controlNavScaffold.find('li').remove(); 1074 } else { 1075 slider.controlNav.eq(pos).closest('li').remove(); 1076 } 1077 methods.controlNav.set(); 1078 (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active(); 1079 } 1080 }, 1081 directionNav: { 1082 setup: function() { 1083 var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li><a class="' + namespace + 'prev" href="#">
vendor: 9,047 bytes, lines 1083-1286
1083' + slider.vars.prevText + '</a></li><li><a class="' + namespace + 'next" href="#">' + slider.vars.nextText + '</a></li></ul>'); 1084 1085 // CONTROLSCONTAINER: 1086 if (slider.controlsContainer) { 1087 $(slider.controlsContainer).append(directionNavScaffold); 1088 slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer); 1089 } else { 1090 slider.append(directionNavScaffold); 1091 slider.directionNav = $('.' + namespace + 'direction-nav li a', slider); 1092 } 1093 1094 methods.directionNav.update(); 1095 1096 slider.directionNav.bind(eventType, function(event) { 1097 event.preventDefault(); 1098 var target; 1099 1100 if (watchedEvent === "" || watchedEvent === event.type) { 1101 target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev'); 1102 slider.flexAnimate(target, slider.vars.pauseOnAction); 1103 } 1104 1105 // setup flags to prevent event duplication 1106 if (watchedEvent === "") { 1107 watchedEvent = event.type; 1108 } 1109 methods.setToClearWatchedEvent(); 1110 }); 1111 }, 1112 update: function() { 1113 var disabledClass = namespace + 'disabled'; 1114 if (slider.pagingCount === 1) { 1115 slider.directionNav.addClass(disabledClass).attr('tabindex', '-1'); 1116 } else if (!slider.vars.animationLoop) { 1117 if (slider.animatingTo === 0) { 1118 slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass).attr('tabindex', '-1'); 1119 } else if (slider.animatingTo === slider.last) { 1120 slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass).attr('tabindex', '-1'); 1121 } else { 1122 slider.directionNav.removeClass(disabledClass).removeAttr('tabindex'); 1123 } 1124 } else { 1125 slider.directionNav.removeClass(disabledClass).removeAttr('tabindex'); 1126 } 1127 } 1128 }, 1129 pausePlay: { 1130 setup: function() { 1131 var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>'); 1132 1133 // CONTROLSCONTAINER: 1134 if (slider.controlsContainer) { 1135 slider.controlsContainer.append(pausePlayScaffold); 1136 slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer); 1137 } else { 1138 slider.append(pausePlayScaffold); 1139 slider.pausePlay = $('.' + namespace + 'pauseplay a', slider); 1140 } 1141 1142 methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play'); 1143 1144 slider.pausePlay.bind(eventType, function(event) { 1145 event.preventDefault(); 1146 1147 if (watchedEvent === "" || watchedEvent === event.type) { 1148 if ($(this).hasClass(namespace + 'pause')) { 1149 slider.manualPause = true; 1150 slider.manualPlay = false; 1151 slider.pause(); 1152 } else { 1153 slider.manualPause = false; 1154 slider.manualPlay = true; 1155 slider.play(); 1156 } 1157 } 1158 1159 // setup flags to prevent event duplication 1160 if (watchedEvent === "") { 1161 watchedEvent = event.type; 1162 } 1163 methods.setToClearWatchedEvent(); 1164 }); 1165 }, 1166 update: function(state) { 1167 (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').html(slider.vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').html(slider.vars.pauseText); 1168 } 1169 }, 1170 touch: function() { 1171 var startX, 1172 startY, 1173 offset, 1174 cwidth, 1175 dx, 1176 startT, 1177 scrolling = false, 1178 localX = 0, 1179 localY = 0, 1180 accDx = 0; 1181 1182 if(!msGesture){ 1183 el.addEventListener('touchstart', onTouchStart, false); 1184 1185 function onTouchStart(e) { 1186 if (slider.animating) { 1187 e.preventDefault(); 1188 } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) { 1189 slider.pause(); 1190 // CAROUSEL: 1191 cwidth = (vertical) ? slider.h : slider. w; 1192 startT = Number(new Date()); 1193 // CAROUSEL: 1194 1195 // Local vars for X and Y points. 1196 localX = e.touches[0].pageX; 1197 localY = e.touches[0].pageY; 1198 1199 offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 : 1200 (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) : 1201 (carousel && slider.currentSlide === slider.last) ? slider.limit : 1202 (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide : 1203 (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth; 1204 startX = (vertical) ? localY : localX; 1205 startY = (vertical) ? localX : localY; 1206 1207 el.addEventListener('touchmove', onTouchMove, false); 1208 el.addEventListener('touchend', onTouchEnd, false); 1209 } 1210 } 1211 1212 function onTouchMove(e) { 1213 // Local vars for X and Y points. 1214 1215 localX = e.touches[0].pageX; 1216 localY = e.touches[0].pageY; 1217 1218 dx = (vertical) ? startX - localY : startX - localX; 1219 scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY)); 1220 1221 var fxms = 500; 1222 1223 if ( ! scrolling || Number( new Date() ) - startT > fxms ) { 1224 e.preventDefault(); 1225 if (!fade && slider.transitions) { 1226 if (!slider.vars.animationLoop) { 1227 dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1); 1228 } 1229 slider.setProps(offset + dx, "setTouch"); 1230 } 1231 } 1232 } 1233 1234 function onTouchEnd(e) { 1235 // finish the touch by undoing the touch session 1236 el.removeEventListener('touchmove', onTouchMove, false); 1237 1238 if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) { 1239 var updateDx = (reverse) ? -dx : dx, 1240 target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev'); 1241 1242 if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) { 1243 slider.flexAnimate(target, slider.vars.pauseOnAction); 1244 } else { 1245 if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); 1246 } 1247 } 1248 el.removeEventListener('touchend', onTouchEnd, false); 1249 1250 startX = null; 1251 startY = null; 1252 dx = null; 1253 offset = null; 1254 } 1255 }else{ 1256 el.style.msTouchAction = "none"; 1257 el._gesture = new MSGesture(); 1258 el._gesture.target = el; 1259 el.addEventListener("MSPointerDown", onMSPointerDown, false); 1260 el._slider = slider; 1261 el.addEventListener("MSGestureChange", onMSGestureChange, false); 1262 el.addEventListener("MSGestureEnd", onMSGestureEnd, false); 1263 1264 function onMSPointerDown(e){ 1265 e.stopPropagation(); 1266 if (slider.animating) { 1267 e.preventDefault(); 1268 }else{ 1269 slider.pause(); 1270 el._gesture.addPointer(e.pointerId); 1271 accDx = 0; 1272 cwidth = (vertical) ? slider.h : slider. w; 1273 startT = Number(new Date()); 1274 // CAROUSEL: 1275 1276 offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 : 1277 (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) : 1278 (carousel && slider.currentSlide === slider.last) ? slider.limit : 1279 (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide : 1280 (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth; 1281 } 1282 } 1283 1284 function onMSGestureChange(e) { 1285 e.stopPropagation(); 1286 var slider = e.target._slider;
1287 if(!slider){ 1288 return; 1289 } 1290 var transX = -e.translationX, 1291 transY = -e.translationY; 1292 1293 //Accumulate translations. 1294 accDx = accDx + ((vertical) ? transY : transX); 1295 dx = accDx; 1296 scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY)); 1297 1298 if(e.detail === e.MSGESTURE_FLAG_INERTIA){ 1299 setImmediate(function (){ 1300 el._gesture.stop(); 1301 }); 1302 1303 return; 1304 } 1305 1306 if (!scrolling || Number(new Date()) - startT > 500) { 1307 e.preventDefault(); 1308 if (!fade && slider.transitions) { 1309 if (!slider.vars.animationLoop) { 1310 dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1); 1311 } 1312 slider.setProps(offset + dx, "setTouch"); 1313 } 1314 } 1315 } 1316 1317 function onMSGestureEnd(e) { 1318 e.stopPropagation(); 1319 var slider = e.target._slider; 1320 if(!slider){ 1321 return; 1322 } 1323 if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) { 1324 var updateDx = (reverse) ? -dx : dx, 1325 target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev'); 1326 1327 if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) { 1328 slider.flexAnimate(target, slider.vars.pauseOnAction); 1329 } else { 1330 if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); 1331 } 1332 } 1333 1334 startX = null; 1335 startY = null; 1336 dx = null; 1337 offset = null; 1338 accDx = 0; 1339 } 1340 } 1341 }, 1342 resize: function() { 1343 if (!slider.animating && slider.is(':visible')) { 1344 if (!carousel) slider.doMath(); 1345 1346 if (fade) { 1347 // SMOOTH HEIGHT: 1348 methods.smoothHeight(); 1349 } else if (carousel) { //CAROUSEL: 1350 slider.slides.width(slider.computedW); 1351 slider.update(slider.pagingCount); 1352 slider.setProps(); 1353 } 1354 else if (vertical) { //VERTICAL: 1355 slider.viewport.height(slider.h); 1356 slider.setProps(slider.h, "setTotal"); 1357 } else { 1358 // SMOOTH HEIGHT: 1359 if (slider.vars.smoothHeight) methods.smoothHeight(); 1360 slider.newSlides.width(slider.computedW); 1361 slider.setProps(slider.computedW, "setTotal"); 1362 } 1363 } 1364 }, 1365 smoothHeight: function(dur) { 1366 if (!vertical || fade) { 1367 var $obj = (fade) ? slider : slider.viewport; 1368 (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height()); 1369 } 1370 }, 1371 sync: function(action) { 1372 var $obj = $(slider.vars.sync).data("flexslider"), 1373 target = slider.animatingTo; 1374 1375 switch (action) { 1376 case "animate": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break; 1377 case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break; 1378 case "pause": $obj.pause(); break; 1379 } 1380 }, 1381 uniqueID: function($clone) { 1382 $clone.find( '[id]' ).each(function() { 1383 var $this = $(this); 1384 $this.attr( 'id', $this.attr( 'id' ) + '_clone' ); 1385 }); 1386 return $clone; 1387 }, 1388 pauseInvisible: { 1389 visProp: null, 1390 init: function() { 1391 var prefixes = ['webkit','moz','ms','o']; 1392 1393 if ('hidden' in document) return 'hidden'; 1394 for (var i = 0; i < prefixes.length; i++) { 1395 if ((prefixes[i] + 'Hidden') in document) 1396 methods.pauseInvisible.visProp = prefixes[i] + 'Hidden'; 1397 } 1398 if (methods.pauseInvisible.visProp) { 1399 var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange'; 1400 document.addEventListener(evtname, function() { 1401 if (methods.pauseInvisible.isHidden()) { 1402 if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible 1403 else slider.pause(); //Or just pause 1404 } 1405 else { 1406 if(slider.started) slider.play(); //Initiated before, just play 1407 else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it 1408 } 1409 }); 1410 } 1411 }, 1412 isHidden: function() { 1413 return document[methods.pauseInvisible.visProp] || false; 1414 } 1415 }, 1416 setToClearWatchedEvent: function() { 1417 clearTimeout(watchedEventClearTimer); 1418 watchedEventClearTimer = setTimeout(function() { 1419 watchedEvent = ""; 1420 }, 3000); 1421 } 1422 }; 1423 1424 // public methods 1425 slider.flexAnimate = function(target, pause, override, withSync, fromNav) { 1426 if (!slider.vars.animationLoop && target !== slider.currentSlide) { 1427 slider.direction = (target > slider.currentSlide) ? "next" : "prev"; 1428 } 1429 1430 if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev"; 1431
vendor: 5,334 bytes, lines 1432-1544
1432 if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) { 1433 if (asNav && withSync) { 1434 var master = $(slider.vars.asNavFor).data('flexslider'); 1435 slider.atEnd = target === 0 || target === slider.count - 1; 1436 master.flexAnimate(target, true, false, true, fromNav); 1437 slider.direction = (slider.currentItem < target) ? "next" : "prev"; 1438 master.direction = slider.direction; 1439 1440 if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) { 1441 slider.currentItem = target; 1442 slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide"); 1443 target = Math.floor(target/slider.visible); 1444 } else { 1445 slider.currentItem = target; 1446 slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide"); 1447 return false; 1448 } 1449 } 1450 1451 slider.animating = true; 1452 slider.animatingTo = target; 1453 1454 // SLIDESHOW: 1455 if (pause) slider.pause(); 1456 1457 // API: before() animation Callback 1458 slider.vars.before(slider); 1459 1460 // SYNC: 1461 if (slider.syncExists && !fromNav) methods.sync("animate"); 1462 1463 // CONTROLNAV 1464 if (slider.vars.controlNav) methods.controlNav.active(); 1465 1466 // !CAROUSEL: 1467 // CANDIDATE: slide active class (for add/remove slide) 1468 if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); 1469 1470 // INFINITE LOOP: 1471 // CANDIDATE: atEnd 1472 slider.atEnd = target === 0 || target === slider.last; 1473 1474 // DIRECTIONNAV: 1475 if (slider.vars.directionNav) methods.directionNav.update(); 1476 1477 if (target === slider.last) { 1478 // API: end() of cycle Callback 1479 slider.vars.end(slider); 1480 // SLIDESHOW && !INFINITE LOOP: 1481 if (!slider.vars.animationLoop) slider.pause(); 1482 } 1483 1484 // SLIDE: 1485 if (!fade) { 1486 var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW, 1487 margin, slideString, calcNext; 1488 1489 // INFINITE LOOP / REVERSE: 1490 if (carousel) { 1491 //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin; 1492 margin = slider.vars.itemMargin; 1493 calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo; 1494 slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext; 1495 } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== "next") { 1496 slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0; 1497 } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== "prev") { 1498 slideString = (reverse) ? 0 : (slider.count + 1) * dimension; 1499 } else { 1500 slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension; 1501 } 1502 slider.setProps(slideString, "", slider.vars.animationSpeed); 1503 if (slider.transitions) { 1504 if (!slider.vars.animationLoop || !slider.atEnd) { 1505 slider.animating = false; 1506 slider.currentSlide = slider.animatingTo; 1507 } 1508 slider.container.unbind("webkitTransitionEnd transitionend"); 1509 slider.container.bind("webkitTransitionEnd transitionend", function() { 1510 slider.wrapup(dimension); 1511 }); 1512 } else { 1513 slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){ 1514 slider.wrapup(dimension); 1515 }); 1516 } 1517 } else { // FADE: 1518 if (!touch) { 1519 //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing); 1520 //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup); 1521 1522 slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing); 1523 slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup); 1524 1525 } else { 1526 slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 }); 1527 slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 }); 1528 slider.wrapup(dimension); 1529 } 1530 } 1531 // SMOOTH HEIGHT: 1532 if (slider.vars.smoothHeight) methods.smoothHeight(slider.vars.animationSpeed); 1533 } 1534 }; 1535 slider.wrapup = function(dimension) { 1536 // SLIDE: 1537 if (!fade && !carousel) { 1538 if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) { 1539 slider.setProps(dimension, "jumpEnd"); 1540 } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) { 1541 slider.setProps(dimension, "jumpStart"); 1542 } 1543 } 1544 slider.animating = false;
1545 slider.currentSlide = slider.animatingTo; 1546 // API: after() animation Callback 1547 slider.vars.after(slider); 1548 }; 1549 1550 // SLIDESHOW: 1551 slider.animateSlides = function() { 1552 if (!slider.animating && focused ) slider.flexAnimate(slider.getTarget("next")); 1553 }; 1554 // SLIDESHOW: 1555 slider.pause = function() { 1556 clearInterval(slider.animatedSlides); 1557 slider.animatedSlides = null; 1558 slider.playing = false; 1559 // PAUSEPLAY: 1560 if (slider.vars.pausePlay) methods.pausePlay.update("play"); 1561 // SYNC: 1562 if (slider.syncExists) methods.sync("pause"); 1563 }; 1564 // SLIDESHOW: 1565 slider.play = function() { 1566 if (slider.playing) clearInterval(slider.animatedSlides); 1567 slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed); 1568 slider.started = slider.playing = true; 1569 // PAUSEPLAY: 1570 if (slider.vars.pausePlay) methods.pausePlay.update("pause"); 1571 // SYNC: 1572 if (slider.syncExists) methods.sync("play"); 1573 }; 1574 // STOP: 1575 slider.stop = function () { 1576 slider.pause(); 1577 slider.stopped = true; 1578 }; 1579 slider.canAdvance = function(target, fromNav) { 1580 // ASNAV: 1581 var last = (asNav) ? slider.pagingCount - 1 : slider.last; 1582 return (fromNav) ? true : 1583 (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true : 1584 (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false : 1585 (target === slider.currentSlide && !asNav) ? false : 1586 (slider.vars.animationLoop) ? true : 1587 (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false : 1588 (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false : 1589 true; 1590 }; 1591 slider.getTarget = function(dir) { 1592 slider.direction = dir; 1593 if (dir === "next") { 1594 return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1; 1595 } else { 1596 return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1; 1597 } 1598 }; 1599 1600 // SLIDE: 1601 slider.setProps = function(pos, special, dur) { 1602 var target = (function() { 1603 var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo, 1604 posCalc = (function() { 1605 if (carousel) { 1606 return (special === "setTouch") ? pos : 1607 (reverse && slider.animatingTo === slider.last) ? 0 : 1608 (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) : 1609 (slider.animatingTo === slider.last) ? slider.limit : posCheck; 1610 } else { 1611 switch (special) { 1612 case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos; 1613 case "setTouch": return (reverse) ? pos : pos; 1614 case "jumpEnd": return (reverse) ? pos : slider.count * pos; 1615 case "jumpStart": return (reverse) ? slider.count * pos : pos; 1616 default: return pos; 1617 } 1618 } 1619 }()); 1620 1621 return (posCalc * -1) + "px"; 1622 }()); 1623 1624 if (slider.transitions) { 1625 target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)"; 1626 dur = (dur !== undefined) ? (dur/1000) + "s" : "0s"; 1627 slider.container.css("-" + slider.pfx + "-transition-duration", dur); 1628 slider.container.css("transition-duration", dur); 1629 } 1630 1631 slider.args[slider.prop] = target; 1632 if (slider.transitions || dur === undefined) slider.container.css(slider.args); 1633 1634 slider.container.css('transform',target); 1635 }; 1636 1637 slider.setup = function(type) { 1638 // SLIDE: 1639 if (!fade) { 1640 var sliderOffset, arr; 1641 1642 if (type === "init") {
1643 slider.viewport = $('<div class="' + namespace + 'viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container); 1644 // INFINITE LOOP: 1645 slider.cloneCount = 0; 1646 slider.cloneOffset = 0; 1647 // REVERSE: 1648 if (reverse) { 1649 arr = $.makeArray(slider.slides).reverse(); 1650 slider.slides = $(arr); 1651 slider.container.empty().append(slider.slides); 1652 } 1653 } 1654 // INFINITE LOOP && !CAROUSEL: 1655 if (slider.vars.animationLoop && !carousel) { 1656 slider.cloneCount = 2; 1657 slider.cloneOffset = 1; 1658 // clear out old clones 1659 if (type !== "init") slider.container.find('.clone').remove(); 1660 slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true')); 1661 methods.uniqueID( slider.slides.first().clone().addClass('clone') ).appendTo( slider.container ); 1662 methods.uniqueID( slider.slides.last().clone().addClass('clone') ).prependTo( slider.container ); 1663 } 1664 slider.newSlides = $(slider.vars.selector, slider); 1665 1666 sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset; 1667 // VERTICAL: 1668 if (vertical && !carousel) { 1669 slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%"); 1670 setTimeout(function(){ 1671 slider.newSlides.css({"display": "block"}); 1672 slider.doMath(); 1673 slider.viewport.height(slider.h); 1674 slider.setProps(sliderOffset * slider.h, "init"); 1675 }, (type === "init") ? 100 : 0); 1676 } else { 1677 slider.container.width((slider.count + slider.cloneCount) * 200 + "%"); 1678 slider.setProps(sliderOffset * slider.computedW, "init"); 1679 setTimeout(function(){ 1680 slider.doMath(); 1681 slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"}); 1682 // SMOOTH HEIGHT: 1683 if (slider.vars.smoothHeight) methods.smoothHeight(); 1684 }, (type === "init") ? 100 : 0); 1685 } 1686 } else { // FADE: 1687 slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"}); 1688 if (type === "init") { 1689 if (!touch) { 1690 //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing); 1691 slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing); 1692 } else { 1693 slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2}); 1694 } 1695 } 1696 // SMOOTH HEIGHT: 1697 if (slider.vars.smoothHeight) methods.smoothHeight(); 1698 } 1699 // !CAROUSEL: 1700 // CANDIDATE: active slide 1701 if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide"); 1702 1703 //FlexSlider: init() Callback 1704 slider.vars.init(slider); 1705 }; 1706 1707 slider.doMath = function() { 1708 var slide = slider.slides.first(), 1709 slideMargin = slider.vars.itemMargin, 1710 minItems = slider.vars.minItems, 1711 maxItems = slider.vars.maxItems; 1712 1713 slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width(); 1714 slider.h = slide.height(); 1715 slider.boxPadding = slide.outerWidth() - slide.width(); 1716 1717 // CAROUSEL: 1718 if (carousel) { 1719 slider.itemT = slider.vars.itemWidth + slideMargin; 1720 slider.minW = (minItems) ? minItems * slider.itemT : slider.w; 1721 slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w; 1722 slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems : 1723 (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems : 1724 (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth; 1725 1726 slider.visible = Math.floor(slider.w/(slider.itemW)); 1727 slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;
vendor: 5,363 bytes, lines 1728-1851
1728 slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1); 1729 slider.last = slider.pagingCount - 1; 1730 slider.limit = (slider.pagingCount === 1) ? 0 : 1731 (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin; 1732 } else { 1733 slider.itemW = slider.w; 1734 slider.pagingCount = slider.count; 1735 slider.last = slider.count - 1; 1736 } 1737 slider.computedW = slider.itemW - slider.boxPadding; 1738 }; 1739 1740 slider.update = function(pos, action) { 1741 slider.doMath(); 1742 1743 // update currentSlide and slider.animatingTo if necessary 1744 if (!carousel) { 1745 if (pos < slider.currentSlide) { 1746 slider.currentSlide += 1; 1747 } else if (pos <= slider.currentSlide && pos !== 0) { 1748 slider.currentSlide -= 1; 1749 } 1750 slider.animatingTo = slider.currentSlide; 1751 } 1752 1753 // update controlNav 1754 if (slider.vars.controlNav && !slider.manualControls) { 1755 if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) { 1756 methods.controlNav.update("add"); 1757 } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) { 1758 if (carousel && slider.currentSlide > slider.last) { 1759 slider.currentSlide -= 1; 1760 slider.animatingTo -= 1; 1761 } 1762 methods.controlNav.update("remove", slider.last); 1763 } 1764 } 1765 // update directionNav 1766 if (slider.vars.directionNav) methods.directionNav.update(); 1767 1768 }; 1769 1770 slider.addSlide = function(obj, pos) { 1771 var $obj = $(obj); 1772 1773 slider.count += 1; 1774 slider.last = slider.count - 1; 1775 1776 // append new slide 1777 if (vertical && reverse) { 1778 (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj); 1779 } else { 1780 (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj); 1781 } 1782 1783 // update currentSlide, animatingTo, controlNav, and directionNav 1784 slider.update(pos, "add"); 1785 1786 // update slider.slides 1787 slider.slides = $(slider.vars.selector + ':not(.clone)', slider); 1788 // re-setup the slider to accomdate new slide 1789 slider.setup(); 1790 1791 //FlexSlider: added() Callback 1792 slider.vars.added(slider); 1793 }; 1794 slider.removeSlide = function(obj) { 1795 var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj; 1796 1797 // update count 1798 slider.count -= 1; 1799 slider.last = slider.count - 1; 1800 1801 // remove slide 1802 if (isNaN(obj)) { 1803 $(obj, slider.slides).remove(); 1804 } else { 1805 (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove(); 1806 } 1807 1808 // update currentSlide, animatingTo, controlNav, and directionNav 1809 slider.doMath(); 1810 slider.update(pos, "remove"); 1811 1812 // update slider.slides 1813 slider.slides = $(slider.vars.selector + ':not(.clone)', slider); 1814 // re-setup the slider to accomdate new slide 1815 slider.setup(); 1816 1817 // FlexSlider: removed() Callback 1818 slider.vars.removed(slider); 1819 }; 1820 1821 //FlexSlider: Initialize 1822 methods.init(); 1823 }; 1824 1825 // Ensure the slider isn't focussed if the window loses focus. 1826 $( window ).blur( function ( e ) { 1827 focused = false; 1828 }).focus( function ( e ) { 1829 focused = true; 1830 }); 1831 1832 //FlexSlider: Default Settings 1833 $.flexslider.defaults = { 1834 namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin 1835 selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril 1836 animation: "fade", //String: Select your animation type, "fade" or "slide" 1837 easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported! 1838 direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical" 1839 reverse: false, //{NEW} Boolean: Reverse the animation direction 1840 animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end 1841 smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode 1842 startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide) 1843 slideshow: true, //Boolean: Animate slider automatically 1844 slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds 1845 animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds 1846 initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds 1847 randomize: false, //Boolean: Randomize slide order 1848 thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav. 1849 1850 // Usability features 1851 pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
1852 pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering 1853 pauseInvisible: true, //{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage. 1854 useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available 1855 touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices 1856 video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches 1857 1858 // Primary Controls 1859 controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage 1860 directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false) 1861 prevText: "Previous", //String: Set the text for the "previous" directionNav item 1862 nextText: "Next", //String: Set the text for the "next" directionNav item 1863 1864 // Secondary Navigation 1865 keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys 1866 multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present. 1867 mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel 1868 pausePlay: false, //Boolean: Create pause/play dynamic element 1869 pauseText: "Pause", //String: Set the text for the "pause" pausePlay item 1870 playText: "Play", //String: Set the text for the "play" pausePlay item 1871 1872 // Special properties 1873 controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found. 1874 manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs. 1875 sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care. 1876 asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider 1877 1878 // Carousel Options 1879 itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding. 1880 itemMargin: 0, //{NEW} Integer: Margin between carousel items. 1881 minItems: 1, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this. 1882 maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit. 1883 move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items. 1884 allowOneSlide: true, //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide 1885 1886 // Callback API 1887 start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide 1888 before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation 1889 after: function(){}, //Callback: function(slider) - Fires after each slider animation completes 1890 end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous) 1891 added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added 1892 removed: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is removed 1893 init: function() {} //{NEW}
1893 Callback: function(slider) - Fires after the slider is initially setup 1894 }; 1895 1896 //FlexSlider: Plugin Function 1897 $.fn.flexslider = function(options) { 1898 if (options === undefined) options = {}; 1899 1900 if (typeof options === "object") { 1901 return this.each(function() { 1902 var $this = $(this), 1903 selector = (options.selector) ? options.selector : ".slides > li", 1904 $slides = $this.find(selector); 1905 1906 if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) { 1907 $slides.fadeIn(400); 1908 if (options.start) options.start($this); 1909 } else if ($this.data('flexslider') === undefined) { 1910 new $.flexslider(this, options); 1911 } 1912 }); 1913 } else { 1914 // Helper strings to quickly perform functions on the slider 1915 var $slider = $(this).data('flexslider'); 1916 switch (options) { 1917 case "play": $slider.play(); break; 1918 case "pause": $slider.pause(); break; 1919 case "stop": $slider.stop(); break; 1920 case "next": $slider.flexAnimate($slider.getTarget("next"), true); break; 1921 case "prev": 1922 case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break; 1923 default: if (typeof options === "number") $slider.flexAnimate(options, true); 1924 } 1925 } 1926 }; 1927})(jQuery); 1928; 1929/*! This file is auto-generated */ 1930/*! 1931 * imagesLoaded PACKAGED v5.0.0 1932 * JavaScript is all like "You images are done yet or what?" 1933 * MIT License 1934 */ 1935!function(t,e){"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,(function(){function t(){}let e=t.prototype;return e.on=function(t,e){if(!t||!e)return this;let i=this._events=this._events||{},s=i[t]=i[t]||[];return s.includes(e)||s.push(e),this},e.once=function(t,e){if(!t||!e)return this;this.on(t,e);let i=this._onceEvents=this._onceEvents||{};return(i[t]=i[t]||{})[e]=!0,this},e.off=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;let s=i.indexOf(e);return-1!=s&&i.splice(s,1),this},e.emitEvent=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;i=i.slice(0),e=e||[];let s=this._onceEvents&&this._onceEvents[t];for(let n of i){s&&s[n]&&(this.off(t,n),delete s[n]),n.apply(this,e)}return this},e.allOff=function(){return delete this._events,delete this._onceEvents,this},t})), 1936/*! 1937 * imagesLoaded v5.0.0 1938 * JavaScript is all like "You images are done yet or what?" 1939 * MIT License 1940 */ 1941function(t,e){"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}("undefined"!=typeof window?window:this,(function(t,e){let i=t.jQuery,s=t.console;
vendor: 4,185 bytes, lines 1941-1942
1941function n(t,e,o){if(!(this instanceof n))return new n(t,e,o);let r=t;var h;("string"==typeof t&&(r=document.querySelectorAll(t)),r)?(this.elements=(h=r,Array.isArray(h)?h:"object"==typeof h&&"number"==typeof h.length?[...h]:[h]),this.options={},"function"==typeof e?o=e:Object.assign(this.options,e),o&&this.on("always",o),this.getImages(),i&&(this.jqDeferred=new i.Deferred),setTimeout(this.check.bind(this))):s.error(`Bad element for imagesLoaded ${r||t}`)}n.prototype=Object.create(e.prototype),n.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)};const o=[1,9,11];n.prototype.addElementImages=function(t){"IMG"===t.nodeName&&this.addImage(t),!0===this.options.background&&this.addElementBackgroundImages(t);let{nodeType:e}=t;if(!e||!o.includes(e))return;let i=t.querySelectorAll("img");for(let t of i)this.addImage(t);if("string"==typeof this.options.background){let e=t.querySelectorAll(this.options.background);for(let t of e)this.addElementBackgroundImages(t)}};const r=/url\((['"])?(.*?)\1\)/gi;function h(t){this.img=t}function d(t,e){this.url=t,this.element=e,this.img=new Image}return n.prototype.addElementBackgroundImages=function(t){let e=getComputedStyle(t);if(!e)return;let i=r.exec(e.backgroundImage);for(;null!==i;){let s=i&&i[2];s&&this.addBackground(s,t),i=r.exec(e.backgroundImage)}},n.prototype.addImage=function(t){let e=new h(t);this.images.push(e)},n.prototype.addBackground=function(t,e){let i=new d(t,e);this.images.push(i)},n.prototype.check=function(){if(this.progressedCount=0,this.hasAnyBroken=!1,!this.images.length)return void this.complete();let t=(t,e,i)=>{setTimeout((()=>{this.progress(t,e,i)}))};this.images.forEach((function(e){e.once("progress",t),e.check()}))},n.prototype.progress=function(t,e,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!t.isLoaded,this.emitEvent("progress",[this,t,e]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,t),this.progressedCount===this.images.length&&this.complete(),this.options.debug&&s&&s.log(`progress: ${i}`,t,e)},n.prototype.complete=function(){let t=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(t,[this]),this.emitEvent("always",[this]),this.jqDeferred){let t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},h.prototype=Object.create(e.prototype),h.prototype.check=function(){this.getIsImageComplete()?this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.img.crossOrigin&&(this.proxyImage.crossOrigin=this.img.crossOrigin),this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.proxyImage.src=this.img.currentSrc||this.img.src)},h.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},h.prototype.confirm=function(t,e){this.isLoaded=t;let{parentNode:i}=this.img,s="PICTURE"===i.nodeName?i:this.img;this.emitEvent("progress",[this,s,e])},h.prototype.handleEvent=function(t){let e="on"+t.type;this[e]&&this[e](t)},h.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},h.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},h.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype=Object.create(h.prototype),d.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url,this.getIsImageComplete()&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},d.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype.confirm=function(t,e){this.isLoaded=t,this.emitEvent("progress",[this,this.element,e])},n.makeJQueryPlugin=function(e){(e=e||t.jQuery)&&(i=e,i.fn.imagesLoaded=function(t,e){return new n(this,t,e).jqDeferred.promise(i(this))})},n.makeJQueryPlugin(),n}));; 1942/*! This file is auto-generated */
vendor: 24,103 bytes, lines 1943-1951
1943/*! 1944 * Masonry PACKAGED v4.2.2 1945 * Cascading grid layout library 1946 * https://masonry.desandro.com 1947 * MIT License 1948 * by David DeSandro 1949 */ 1950 1951!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,r,a){function h(t,e,n){var o,r="$()."+i+'("'+e+'")';return t.each(function(t,h){var u=a.data(h,i);if(!u)return void s(i+" not initialized. Cannot call methods, i.e. "+r);var d=u[e];if(!d||"_"==e.charAt(0))return void s(r+" is not a valid method");var l=d.apply(u,n);o=void 0===o?l:o}),void 0!==o?o:t}function u(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(r.prototype.option||(r.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return h(this,t,e)}return u(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(t,r),delete n[r]),r.apply(this,e)}return this}},e.allOff=function(){delete this._events,delete this._onceEvents},t}),function(t,e){"function"==typeof define&&define.amd?define("get-size/get-size",e):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;u>e;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s=200==Math.round(t(o.width)),r.isBoxSizeOuter=s,i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i<e.length;i++){var n=e[i],o=n+"MatchesSelector";if(t[o])return o}}();return function(e,i){return e[t](i)}}),function(t,e){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["desandro-matches-selector/matches-selector"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("desandro-matches-selector")):t.fizzyUIUtils=e(t,t.matchesSelector)}(window,function(t,e){var i={};i.extend=function(t,e){for(var i in e)t[i]=e[i];return t},i.modulo=function(t,e){return(t%e+e)%e};var n=Array.prototype.slice;i.makeArray=function(t){if(Array.isArray(t))return t;if(null===t||void 0===t)return[];var e="object"==typeof t&&"number"==typeof t.length;return e?n.call(t):[t]},i.removeFrom=function(t,e){var i=t.indexOf(e);-1!=i&&t.splice(i,1)},i.getParent=function(t,i){for(;t.parentNode&&t!=document.body;)if(t=t.parentNode,e(t,i))return t},i.getQueryElement=function(t){return"string"==typeof t?document.querySelector(t):t},i.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},i.filterFindElements=function(t,n){t=i.makeArray(t);var o=[];return t.forEach(function(t){if(t instanceof HTMLElement){if(!n)return void o.push(t);e(t,n)&&o.push(t);for(var i=t.querySelectorAll(n),r=0;r<i.length;r++)o.push(i[r])}}),o},i.debounceMethod=function(t,e,i){i=i||100;var n=t.prototype[e],o=e+"Timeout";t.prototype[e]=function(){var t=this[o];clearTimeout(t);var e=arguments,r=this;this[o]=setTimeout(function(){n.apply(r,e),delete r[o]},i)}},i.docReady=function(t){var e=document.readyState;"complete"==e||"interactive"==e?setTimeout(t):document.addEventListener("DOMContentLoaded",t)},i.toDashed=function(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()};var o=t.console;return i.htmlInit=function(e,n){i.docReady(function(){var r=i.toDashed(n),s="data-"+r,a=document.querySelectorAll("["+s+"]"),h=document.querySelectorAll(".js-"+r),u=i.makeArray(a).concat(i.makeArray(h)),d=s+"-options",l=t.jQuery;u.forEach(function(t){var i,r=t.getAttribute(s)||t.getAttribute(d);try{i=r&&JSON.parse(r)}catch(a){return void(o&&o.error("Error parsing "+s+" on "+t.className+": "+a))}var h=new e(t,i);l&&l.data(t,n,h)})})},i}),function(t,e){"function"==typeof define&&define.amd?define("outlayer/item",["ev-emitter/ev-emitter","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("ev-emitter"),require("get-size")):(t.Outlayer={},t.Outlayer.Item=e(t.EvEmitter,t.getSize))}(window,function(t,e){"use strict";function i(t){for(var e in t)return!1;return e=null,!0}function n(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}function o(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}var r=document.documentElement.style,s="string"==typeof r.transition?"transition":"WebkitTransition",a="string"==typeof r.transform?"transform":"WebkitTransform",h={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[s],u={transform:a,transition:s,transitionDuration:s+"Duration",transitionProperty:s+"Property",transitionDelay:s+"Delay"},d=n.prototype=Object.create(t.prototype);d.constructor=n,d._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},d.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},d.getSize=function(){this.size=e(this.element)},d.css=function(t){var e=this.element.style;for(var i in t){var n=u[i]||i;e[n]=t[i]}},d.getPosition=function(){var t=getComputedStyle(this.element),e=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),n=t[e?"left":"right"],o=t[i?"top":"bottom"],r=parseFloat(n),s=parseFloat(o),a=this.layout.size;-1!=n.indexOf("%")&&(r=r/100*a.width),-1!=o.indexOf("%")&&(s=s/100*a.height),r=isNaN(r)?0:r,s=isNaN(s)?0:s,r-=e?a.paddingLeft:a.paddingRight,s-=i?a.paddingTop:a.paddingBottom,this.position.x=r,this.position.y=s},d.layoutPosition=function(){var t=this.layout.size,e={},i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),o=i?"paddingLeft":"paddingRight",r=i?"left":"right",s=i?"right":"left",a=this.position.x+t[o];e[r]=this.getXValue(a),e[s]="";var h=n?"paddingTop":"paddingBottom",u=n?"top":"bottom",d=n?"bottom":"top",l=this.position.y+t[h];e[u]=this.getYValue(l),e[d]="",this.css(e),this.emitEvent("layout",[this])},d.getXValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!e?t/this.layout.size.width*100+"%":t+"px"},d.getYValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&e?t/this.layout.size.height*100+"%":t+"px"},d._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=t==this.position.x&&e==this.position.y;if(this.setPosition(t,e),o&&!this.isTransitioning)return void this.layoutPosition();var r=t-i,s=e-n,a={};a.transform=this.getTranslate(r,s),this.transition({to:a,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},d.getTranslate=function(t,e){var i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop");return t=i?t:-t,e=n?e:-e,"translate3d("+t+"px, "+e+"px, 0)"},d.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},d.moveTo=d._transitionTo,d.setPosition=function(t,e){this.position.x=parseFloat(t),this.position.y=parseFloat(e)},d._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},d.transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(t);var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var l="opacity,"+o(a);d.enableTransition=function(){if(!this.isTransitioning){var t=this.layout.options.transitionDuration;t="number"==typeof t?t+"ms":t,this.css({transitionProperty:l,transitionDuration:t,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(h,this,!1)}},d.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},d.onotransitionend=function(t){this.ontransitionend(t)};var c={"-webkit-transform":"transform"};d.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=c[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},d.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(h,this,!1),this.isTransitioning=!1},d._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var f={transitionProperty:"",transitionDuration:"",transitionDelay:""};return d.removeTransitionStyles=function(){this.css(f)},d.stagger=function(t){t=isNaN(t)?0:t,this.staggerDelay=t+"ms"},d.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},d.remove=function(){return s&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",function(){this.removeElem()}),void this.hide()):void this.removeElem()},d.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("visibleStyle");e[i]=this.onRevealTransitionEnd,this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0,onTransitionEnd:e})},d.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},d.getHideRevealTransitionEndProperty=function(t){var e=this.layout.options[t];if(e.opacity)return"opacity";for(var i in e)return i},d.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("hiddenStyle");e[i]=this.onHideTransitionEnd,this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:e})},d.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},d.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},n}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("outlayer/outlayer",["ev-emitter/ev-emitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(i,n,o,r){return e(t,i,n,o,r)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):t.Outlayer=e(t,t.EvEmitter,t.getSize,t.fizzyUIUtils,t.Outlayer.Item)}(window,function(t,e,i,n,o){"use strict";function r(t,e){var i=n.getQueryElement(t);if(!i)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(i||t)));this.element=i,u&&(this.$element=u(this.element)),this.options=n.extend({},this.constructor.defaults),this.option(e);var o=++l;this.element.outlayerGUID=o,c[o]=this,this._create();var r=this._getOption("initLayout");r&&this.layout()}function s(t){function e(){t.apply(this,arguments)}return e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e}function a(t){if("number"==typeof t)return t;var e=t.match(/(^\d*\.?\d*)(\w*)/),i=e&&e[1],n=e&&e[2];if(!i.length)return 0;i=parseFloat(i);var o=m[n]||1;return i*o}var h=t.console,u=t.jQuery,d=function(){},l=0,c={};r.namespace="outlayer",r.Item=o,r.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var f=r.prototype;n.extend(f,e.prototype),f.option=function(t){n.extend(this.options,t)},f._getOption=function(t){var e=this.constructor.compatOptions[t];return e&&void 0!==this.options[e]?this.options[e]:this.options[t]},r.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},f._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),n.extend(this.element.style,this.options.containerStyle);var t=this._getOption("resize");t&&this.bindResize()},f.reloadItems=function(){this.items=this._itemize(this.element.children)},f._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0;o<e.length;o++){var r=e[o],s=new i(r,this);n.push(s)}return n},f._filterFindItemElements=function(t){return n.filterFindElements(t,this.options.itemSelector)},f.getItemElements=function(){return this.items.map(function(t){return t.element})},f.layout=function(){this._resetLayout(),this._manageStamps();var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;this.layoutItems(this.items,e),this._isLayoutInited=!0},f._init=f.layout,f._resetLayout=function(){this.getSize()},f.getSize=function(){this.size=i(this.element)},f._getMeasurement=function(t,e){var n,o=this.options[t];o?("string"==typeof o?n=this.element.querySelector(o):o instanceof HTMLElement&&(n=o),this[t]=n?i(n)[e]:o):this[t]=0},f.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},f._getItemsForLayout=function(t){return t.filter(function(t){return!t.isIgnored})},f._layoutItems=function(t,e){if(this._emitCompleteOnItems("layout",t),t&&t.length){var i=[];t.forEach(function(t){var n=this._getItemLayoutPosition(t);n.item=t,n.isInstant=e||t.isLayoutInstant,i.push(n)},this),this._processLayoutQueue(i)}},f._getItemLayoutPosition=function(){return{x:0,y:0}},f._processLayoutQueue=function(t){this.updateStagger(),t.forEach(function(t,e){this._positionItem(t.item,t.x,t.y,t.isInstant,e)},this)},f.updateStagger=function(){var t=this.options.stagger;return null===t||void 0===t?void(this.stagger=0):(this.stagger=a(t),this.stagger)},f._positionItem=function(t,e,i,n,o){n?t.goTo(e,i):(t.stagger(o*this.stagger),t.moveTo(e,i))},f._postLayout=function(){this.resizeContainer()},f.resizeContainer=function(){var t=this._getOption("resizeContainer");if(t){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},f._getContainerSize=d,f._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},f._emitCompleteOnItems=function(t,e){function i(){o.dispatchEvent(t+"Complete",null,[e])}function n(){s++,s==r&&i()}var o=this,r=e.length;if(!e||!r)return void i();var s=0;e.forEach(function(e){e.once(t,n)})},f.dispatchEvent=function(t,e,i){var n=e?[e].concat(i):i;if(this.emitEvent(t,n),u)if(this.$element=this.$element||u(this.element),e){var o=u.Event(e);o.type=t,this.$element.trigger(o,i)}else this.$element.trigger(t,i)},f.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},f.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},f.stamp=function(t){t=this._find(t),t&&(this.stamps=this.stamps.concat(t),t.forEach(this.ignore,this))},f.unstamp=function(t){t=this._find(t),t&&t.forEach(function(t){n.removeFrom(this.stamps,t),this.unignore(t)},this)},f._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n.makeArray(t)):void 0},f._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},f._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},f._manageStamp=d,f._getElementOffset=function(t){var e=t.getBoundingClientRect(),n=this._boundingRect,o=i(t),r={left:e.left-n.left-o.marginLeft,top:e.top-n.top-o.marginTop,right:n.right-e.right-o.marginRight,bottom:n.bottom-e.bottom-o.marginBottom};return r},f.handleEvent=n.handleEvent,f.bindResize=function(){t.addEventListener("resize",this),this.isResizeBound=!0},f.unbindResize=function(){t.removeEventListener("resize",this),this.isResizeBound=!1},f.onresize=function(){this.resize()},n.debounceMethod(r,"onresize",100),f.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},f.needsResizeLayout=function(){var t=i(this.element),e=this.size&&t;return e&&t.innerWidth!==this.size.innerWidth},f.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},f.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},f.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},f.reveal=function(t){if(this._emitCompleteOnItems("reveal",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.reveal()})}},f.hide=function(t){if(this._emitCompleteOnItems("hide",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.hide()})}},f.revealItemElements=function(t){var e=this.getItems(t);this.reveal(e)},f.hideItemElements=function(t){var e=this.getItems(t);this.hide(e)},f.getItem=function(t){for(var e=0;e<this.items.length;e++){var i=this.items[e];if(i.element==t)return i}},f.getItems=function(t){t=n.makeArray(t);var e=[];return t.forEach(function(t){var i=this.getItem(t);i&&e.push(i)},this),e},f.remove=function(t){var e=this.getItems(t);this._emitCompleteOnItems("remove",e),e&&e.length&&e.forEach(function(t){t.remove(),n.removeFrom(this.items,t)},this)},f.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="",this.items.forEach(function(t){t.destroy()}),this.unbindResize();var e=this.element.outlayerGUID;delete c[e],delete this.element.outlayerGUID,u&&u.removeData(this.element,this.constructor.namespace)},r.data=function(t){t=n.getQueryElement(t);var e=t&&t.outlayerGUID;return e&&c[e]},r.create=function(t,e){var i=s(r);return i.defaults=n.extend({},r.defaults),n.extend(i.defaults,e),i.compatOptions=n.extend({},r.compatOptions),i.namespace=t,i.data=r.data,i.Item=s(o),n.htmlInit(i,t),u&&u.bridget&&u.bridget(t,i),i};var m={ms:1,s:1e3};return r.Item=o,r}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer"),require("get-size")):t.Masonry=e(t.Outlayer,t.getSize)}(window,function(t,e){var i=t.create("masonry");i.compatOptions.fitWidth="isFitWidth";var n=i.prototype;return n._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var t=0;t<this.cols;t++)this.colYs.push(0);this.maxY=0,this.horizontalColIndex=0},n.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}var n=this.columnWidth+=this.gutter,o=this.containerWidth+this.gutter,r=o/n,s=n-o%n,a=s&&1>s?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i});
1951; 1952/** 1953 * Theme functions file 1954 * 1955 * 1956 */ 1957 1958( function( $ ) { 1959 1960 $( document ).ready( function( $ ) { 1961 /** 1962 * Initial Masonry setup 1963 */ 1964 1965 // posts block for Masonry 1966 var $blocks = $( '#posts' ); 1967 1968 // Helper: safely refresh Masonry layout 1969 function refreshMasonry() { 1970 if ( !$blocks.length || !$blocks.data( 'masonry' ) ) return; 1971 $blocks.masonry( 'reloadItems' ).masonry( 'layout' ); 1972 } 1973 1974 // Determine text direction 1975 var ltr = true; 1976 if ( $('html' ).attr( 'dir' ) == 'rtl') { 1977 ltr = false; 1978 } 1979 1980 // fire up Masonry! 1981 $blocks.imagesLoaded( function() { 1982 $blocks.masonry( { 1983 columnWidth: 1, 1984 itemSelector: '.post-container', 1985 transitionDuration: 0, 1986 isOriginLeft: ltr, 1987 } ).masonry( 'layout' ); 1988 1989 var masonryChild = $blocks.find( '.post-container' ); 1990 1991 // Animating JS based off Huntt theme 1992 masonryChild.each( function( i ) { 1993 // Show content 1994 setTimeout( function() { 1995 masonryChild.eq( i ).addClass( 'post-loaded fade-in' ); 1996 }, 100 * ( i + 1 ) ); 1997 } ); 1998 1999 $( '#spinner' ).fadeOut( 250, function() { 2000 $( this ).remove(); 2001 } ); 2002 } ); 2003 2004 // Re-run Masonry when the page is shown again (e.g. back button / bfcache) 2005 $( window ).on( 'pageshow', function( e ) { 2006 refreshMasonry(); 2007 } ); 2008 2009 // Re-layout Masonry on resize or screen orientation changes 2010 $( window ).on( 'resize', refreshMasonry ); 2011 2012 if ( window.screen?.orientation ) { 2013 screen.orientation.addEventListener( 'change', refreshMasonry ); 2014 } 2015 2016 // Flexslider for Gallery posts 2017 $( ".flexslider" ).flexslider( { 2018 animation: "slide", 2019 controlNav: false, 2020 prevText: "Previous", 2021 nextText: "Next", 2022 smoothHeight: false, 2023 startAt : 1, // make sure order reflects order in gallery format 2024 } ); 2025 2026 /** 2027 * Masonry update after Infinte Scroll 2028 * JS based off Huntt theme 2029 */ 2030 2031 $( document.body ).on( 'post-load', function() { 2032 2033 // make sure we're only grabbing new posts 2034 var newEl = $blocks.children().not( '.post-loaded, span.infinite-loader' ).addClass( 'post-loaded' ); 2035 2036 // (defined higher up as refreshMasonry) 2037 2038 // check if images loaded in these new posts 2039 newEl.imagesLoaded( function () { 2040 2041 console.log( newEl ); 2042 2043 // if images loaded, add new posts and update masonry layout 2044 $blocks.masonry( 'appended', newEl, true ).masonry('reloadItems').masonry( 'layout' ); 2045 2046 // reinitialize flexslider for new posts, and re-run masonry when complete 2047 $( ".flexslider" ).flexslider( { 2048 animation: "slide", 2049 controlNav: false, 2050 prevText: "Previous", 2051 nextText: "Next", 2052 smoothHeight: false, 2053 startAt : 1, 2054 start: refreshMasonry, // reload masonry layout on finish, just in case flexslider was slow 2055 } ); 2056 2057 2058 newEl.delay( 500 ).each( function( i ) { 2059 // then have a small delay between displaying each post 2060 setTimeout( function() { 2061 newEl.eq( i ).addClass( 'fade-in' ); 2062 }, 200 * ( i + 1 ) ); 2063 } ); 2064 2065 } ); 2066 2067 // reloading masonry layout again, after delay 2068 // fixes edge case issue with Facebook embed reloading and messing up layout 2069 setTimeout( refreshMasonry, 3000 ); 2070 } ); 2071 2072 2073 /** 2074 * Enables menu toggle for small screens 2075 */ 2076 2077 ( function() { 2078 var nav = $( '.navigation' ), button, menu; 2079 if ( ! nav ) { 2080 return; 2081 } 2082 2083 button = nav.find( '.nav-toggle' ); 2084 if ( ! button ) { 2085 return; 2086 } 2087 2088 // Hide button if menu is missing or empty. 2089 menu = nav.find( '.main-navigation' ); 2090 if ( ! menu || ! menu.children().length ) { 2091 button.hide(); 2092 return; 2093 } 2094 2095 button.on( 'click.baskerville', function() { 2096 nav.toggleClass( 'toggled-on' ); 2097 $( this ).toggleClass( "active" ); 2098 $( ".main-navigation" ).slideToggle(); 2099 } ); 2100 2101 // Fix sub-menus for touch devices. 2102 if ( 'ontouchstart' in window ) { 2103 menu.find( '.has-children > a, .page_item_has_children a' ).on( 'touchstart.baskerville', function( e ) { 2104 var el = $( this ).parent( 'li' ); 2105 2106 if ( ! el.hasClass( 'focus' ) ) { 2107 e.preventDefault(); 2108 el.toggleClass( 'focus' ); 2109 el.siblings( '.focus' ).removeClass( 'focus' ); 2110 } 2111 } ); 2112 } 2113 2114 // Better focus for hidden submenu items for accessibility. 2115 menu.find( 'a' ).on( 'focus.baskerville blur.baskerville', function() { 2116 $( this ).parents( '.menu-item, .page_item' ).toggleClass( 'focus' ); 2117 } ); 2118 2119 } )(); 2120 2121 2122 // Makes "skip to content" link work correctly in IE9 and Chrome for better 2123 // accessibility. 2124 2125 // @link http://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/ 2126
2127 $( window ).on( 'hashchange.baskerville', function() { 2128 var hash = location.hash.substring( 1 ), element; 2129 if ( ! hash ) { 2130 return; 2131 } 2132 element = document.getElementById( hash ); 2133 if ( element ) { 2134 if ( ! /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) { 2135 element.tabIndex = -1; 2136 } 2137 element.focus(); 2138 // Repositions the window on jump-to-anchor to account for header height. 2139 window.scrollBy( 0, -80 ); 2140 } 2141 } ); 2142 2143 2144 // Toggle search form 2145 2146 var toggleSwitch = $( ".search-toggle" ), 2147 slideContainer = $( '.header-search-block' ), 2148 slideContainerOpen = false, 2149 lastFocus = document.activeElement, 2150 escapeKey = 27; 2151 2152 toggleSwitch.on( "click", function() { 2153 $( this ).toggleClass( "active" ); 2154 $( ".header-search-block" ).slideToggle(); 2155 $( ".header-search-block .search-field" ).focus(); 2156 return false; 2157 } ); 2158 2159 // Smooth scroll to header 2160 $( '.tothetop' ).click( function() { 2161 $( 'html, body' ).animate( { 2162 scrollTop: 0 2163 }, 500 ); 2164 $( this ).unbind( "mouseenter mouseleave" ); 2165 return false; 2166 } ); 2167 2168 2169 // Add 'focus' style to search bar and comment inputs 2170 $('.wrapper .search-form input, .footer .search-form input').focus( function() { 2171 $( this ).closest( 'form' ).addClass( 'focus' ); 2172 } ).blur( function() { 2173 $( this ).closest( 'form' ).removeClass( 'focus' ); 2174 } ); 2175 2176 $('.comment-form-author input, .comment-form-email input, .comment-form-url input').focus( function() { 2177 $( this ).parent().addClass( 'focus' ); 2178 } ).blur( function() { 2179 $( this ).parent().removeClass( 'focus' ); 2180 } ); 2181 2182 2183 // Detect CSS3 Transform support in browsers 2184 var supports = ( function() { 2185 var div = document.createElement( 'div' ), 2186 vendors = 'Khtml Ms O Moz Webkit'.split( ' ' ), 2187 len = vendors.length; 2188 2189 return function( prop ) { 2190 if ( prop in div.style ) { 2191 return true; 2192 } 2193 2194 prop = prop.replace( /^[a-z]/, function( val ) { 2195 return val.toUpperCase(); 2196 } ); 2197 2198 while ( len-- ) { 2199 if ( vendors[len] + prop in div.style ) { 2200 return true; 2201 } 2202 } 2203 return false; 2204 }; 2205 } ) (); 2206 2207 if ( supports( 'transform' ) ) { 2208 // Add a css-transform class to the html element 2209 document.documentElement.className += ' css-transform'; 2210 } 2211 2212 2213 // To add placeholder text to header search in IE9 2214 // based on https://gist.github.com/samgro/823300 2215 if ( navigator.appVersion.indexOf( "MSIE 9." ) !=-1 ) { 2216 $( '[placeholder]' ).focus( function() { 2217 var input = $( this ); 2218 if ( input.hasClass( 'placeholder' ) ) { 2219 input.val( '' ); 2220 input.removeClass( 'placeholder' ); 2221 } 2222 } ).blur( function() { 2223 var input = $( this ); 2224 if ( input.val() === '' ) { 2225 input.addClass( 'placeholder' ); 2226 input.val( input.attr( 'placeholder' ) ); 2227 } 2228 } ).blur().parents( 'form' ).submit( function() { 2229 $( this ).find( '[placeholder]' ).each( function() { 2230 var input = $( this ); 2231 if ( input.hasClass( 'placeholder' ) ) { 2232 input.val( '' ); 2233 } 2234 } ); 2235 } ); 2236 2237 // Clear input on refresh so that the placeholder class gets added back 2238 $( window ).unload( function() { 2239 $( '[placeholder]' ).val( '' ); 2240 } ); 2241 } 2242 } ); 2243} )( jQuery ); 2244; 2245!function(){"use strict";var e,t={noop:function(){},texturize:function(e){return(e=(e=(e=(e+="").replace(/'/g,"’").replace(/'/g,"’")).replace(/"/g,"”").replace(/"/g,"”").replace(/"/g,"”").replace(/[\u201D]/g,"”")).replace(/([\w]+)=&#[\d]+;(.+?)&#[\d]+;/g,'$1="$2"')).trim()},applyReplacements:function(e,t){if(e)return t?e.replace(/{(\d+)}/g,function(e,r){return void 0!==t[r]?t[r]:e}):e},getBackgroundImage:function(e){var t=document.createElement("canvas"),r=t.getContext&&t.getContext("2d");if(e){r.filter="blur(20px) ",r.drawImage(e,0,0);var o=t.toDataURL("image/png");return t=null,o}}},r=function(){function e(e,t){return Element.prototype.matches?e.matches(t):Element.prototype.msMatchesSelector?e.msMatchesSelector(t):void 0}function r(e,t,r,o){if(!e)return o();e.jpCarouselCancelFade&&e.jpCarouselCancelFade(),e.classList.remove("jp-carousel-fade"),e.style.removeProperty("display"),e.style.opacity=t,e.style.pointerEvents="none",e.offsetWidth,e.classList.add("jp-carousel-fade"),e.style.opacity=r;var a=1e3*parseFloat(getComputedStyle(e).transitionDuration)||0,n=setTimeout(function(){e.jpCarouselCancelFade=null,e.style.removeProperty("pointer-events"),o()},a+50);e.jpCarouselCancelFade=function(){clearTimeout(n),e.jpCarouselCancelFade=null}}return{closest:function(t,r){if(t.closest)return t.closest(r);var o=t;do{if(e(o,r))return o;o=o.parentElement||o.parentNode}while(null!==o&&1===o.nodeType);return null},matches:e,hide:function(e){e&&(e.style.display="none")},show:function(e){e&&(e.style.display="block")},fadeIn:function(e,o){r(e,0,1,o=o||t.noop)},fadeOut:function(e,o){o=o||t.noop,r(e,1,0,function(){e&&(e.style.display="none"),o()})},scrollToElement:function(e,t,r){if(!e||!t)return r?r():void 0;var o=t.querySelector(".jp-carousel-info-extra");o&&(o.style.minHeight=window.innerHeight-64+"px");var a=!0,n=Date.now(),i=t.scrollTop,l=Math.max(0,e.offsetTop-Math.max(0,window.innerHeight-function(e){var t=e.querySelector(".jp-carousel-info-footer"),r=e.querySelector(".jp-carousel-info-extra"),o=e.querySelector(".jp-carousel-info-content-wrapper");if(t&&r&&o){var a=window.getComputedStyle(r),n=parseInt(a.paddingTop,10)+parseInt(a.paddingBottom,10);return n=isNaN(n)?0:n,o.offsetHeight+t.offsetHeight+n}return 0}(t)))-t.scrollTop;function s(){a=!1}
2245l=Math.min(l,t.scrollHeight-window.innerHeight),t.addEventListener("wheel",s),function e(){var c,u=Date.now(),d=(c=(u-n)/300)<.5?2*c*c:1-Math.pow(-2*c+2,2)/2,m=(d=d>1?1:d)*l;if(t.scrollTop=i+m,u<=n+300&&a)return requestAnimationFrame(e);r&&r(),o&&(o.style.minHeight=""),a=!1,t.removeEventListener("wheel",s)}()},getJSONAttribute:function(e,t){if(e&&e.hasAttribute(t))try{return JSON.parse(e.getAttribute(t))}catch{return}},convertToPlainText:function(e){var t=document.createElement("div");return t.textContent=e,t.innerHTML},stripHTML:function(e){var t=document.createElement("div");return t.innerHTML=e.replace(/<[^>]*>?/gm,""),t.textContent},emitEvent:function(e,t,r){var o;try{o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:r||null})}catch{(o=document.createEvent("CustomEvent")).initCustomEvent(t,!0,!0,r||null)}e.dispatchEvent(o)},isTouch:function(){return"ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch},prefersReducedMotion:function(){return!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}}}();function o(){var o,a,n,i,l={},s={},c="",u=!1,d="div.gallery, div.tiled-gallery, ul.wp-block-gallery, ul.blocks-gallery-grid, figure.wp-block-gallery.has-nested-images, div.wp-block-jetpack-tiled-gallery, a.single-image-gallery",m=".gallery-item, .tiled-gallery-item, .blocks-gallery-item, .tiled-gallery__item",p=m+", .wp-block-image",g={},h="undefined"!=typeof wpcom&&wpcom.carousel&&wpcom.carousel.stat?wpcom.carousel.stat:t.noop,f="undefined"!=typeof wpcom&&wpcom.carousel&&wpcom.carousel.pageview?wpcom.carousel.pageview:t.noop;function v(t){if(!u)switch(t.which){case 38:t.preventDefault(),g.overlay.scrollTop-=100;break;case 40:t.preventDefault(),g.overlay.scrollTop+=100;break;case 39:t.preventDefault(),e.slideNext();break;case 37:case 8:t.preventDefault(),e.slidePrev();break;case 27:t.preventDefault(),k()}}function y(){u=!0}function w(){u=!1}function S(e){e.role="button",e.tabIndex=0,e.ariaLabel=jetpackCarouselStrings.image_label}function j(){g.overlay||(g.overlay=document.querySelector(".jp-carousel-overlay"),g.container=g.overlay.querySelector(".jp-carousel-wrap"),g.gallery=g.container.querySelector(".jp-carousel"),g.info=g.overlay.querySelector(".jp-carousel-info"),g.caption=g.info.querySelector(".jp-carousel-caption"),g.commentField=g.overlay.querySelector("#jp-carousel-comment-form-comment-field"),g.emailField=g.overlay.querySelector("#jp-carousel-comment-form-email-field"),g.authorField=g.overlay.querySelector("#jp-carousel-comment-form-author-field"),g.urlField=g.overlay.querySelector("#jp-carousel-comment-form-url-field"),window.innerWidth<=760&&Math.round(window.innerWidth/760*110)<40&&r.isTouch(),[g.commentField,g.emailField,g.authorField,g.urlField].forEach(function(e){e&&(e.addEventListener("focus",y),e.addEventListener("blur",w))}),g.overlay.addEventListener("click",function(e){var t,o,a=e.target,n=!!r.closest(a,".jp-carousel-close-hint"),i=!!window.matchMedia("(max-device-width: 760px)").matches;a===g.overlay?i||k():n?k():a.classList.contains("jp-carousel-image-download")?h("download_original_click"):a.classList.contains("jp-carousel-comment-login")?(t=g.currentSlide,o=t?t.attrs.attachmentId:"0",window.location.href=jetpackCarouselStrings.login_url+"%23jp-carousel-"+o):r.closest(a,"#jp-carousel-comment-form-container")?function(e){var t=e.target,o=r.getJSONAttribute(g.container,"data-carousel-extra")||{},a=g.currentSlide.attrs.attachmentId,n=document.querySelector("#jp-carousel-comment-form-submit-and-info-wrapper"),i=document.querySelector("#jp-carousel-comment-form-spinner"),s=document.querySelector("#jp-carousel-comment-form-button-submit"),c=document.querySelector("#jp-carousel-comment-form");if(g.commentField&&g.commentField.getAttribute("id")===t.getAttribute("id"))y(),r.show(n);else if(r.matches(t,'input[type="submit"]')){e.preventDefault(),e.stopPropagation(),r.show(i),c.classList.add("jp-carousel-is-disabled");var u={action:"post_attachment_comment",nonce:jetpackCarouselStrings.nonce,blog_id:o.blog_id,id:a,comment:g.commentField.value};if(!u.comment.length)return void b(jetpackCarouselStrings.no_comment_text,!1);if(1!==Number(jetpackCarouselStrings.is_logged_in)&&(u.email=g.emailField.value,u.author=g.authorField.value,u.url=g.urlField.value,1===Number(jetpackCarouselStrings.require_name_email))){if(!u.email.length||!u.email.match("@"))return void b(jetpackCarouselStrings.no_comment_email,!1);if(!u.author.length)return void b(jetpackCarouselStrings.no_comment_author,!1)}var d=new XMLHttpRequest;d.open("POST",jetpackCarouselStrings.ajaxurl,!0),d.setRequestHeader("X-Requested-With","XMLHttpRequest"),d.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"),d.onreadystatechange=function(){if(this.readyState===XMLHttpRequest.DONE&&this.status>=200&&this.status<300){var e;try{e=JSON.parse(this.response)}catch{return void b(jetpackCarouselStrings.comment_post_error,!1)}if("approved"===e.comment_status){b(jetpackCarouselStrings.comment_approved,!0);var t=function(e){for(var t=0;t<g.slides.length;t++)if(g.slides[t].attrs.attachmentId===e)return g.slides[t];return null}(a);t&&(t.attrs.commentsCount=(parseInt(t.attrs.commentsCount,10)||0)+1)}else"unapproved"===e.comment_status?b(jetpackCarouselStrings.comment_unapproved,!0):b(jetpackCarouselStrings.comment_post_error,!1);W(),delete l[a],_(a,void 0,!0),s.value=jetpackCarouselStrings.post_comment,r.hide(i),c.classList.remove("jp-carousel-is-disabled")}else b(jetpackCarouselStrings.comment_post_error,!1)};var m=[];for(var p in u)if(p){var h=encodeURIComponent(p)+"="+encodeURIComponent(u[p]);m.push(h.replace(/%20/g,"+"))}var f=m.join("&");d.send(f)}}(e):(r.closest(a,".jp-carousel-photo-icons-container")||a.classList.contains("jp-carousel-photo-title"))&&function(e){e.preventDefault();var t=e.target,o=g.info.querySelector(".jp-carousel-info-extra"),a=g.info.querySelector(".jp-carousel-image-meta"),n=g.info.querySelector(".jp-carousel-comments-wrapper"),i=g.info.querySelector(".jp-carousel-icon-info"),s=g.info.querySelector(".jp-carousel-icon-comments");function c(){s&&s.classList.remove("jp-carousel-selected"),i.classList.toggle("jp-carousel-selected"),n&&n.classList.remove("jp-carousel-show"),a&&(a.classList.toggle("jp-carousel-show"),a.classList.contains("jp-carousel-show")?o.classList.add("jp-carousel-show"):o.classList.remove("jp-carousel-show"))}function u(){if(i&&i.classList.remove("jp-carousel-selected"),s.classList.toggle("jp-carousel-selected"),a&&a.classList.remove("jp-carousel-show"),n)if(n.classList.toggle("jp-carousel-show"),n.classList.contains("jp-carousel-show")){o.classList.add("jp-carousel-show");var e=g.currentSlide;if(e){var t=l[e.attrs.attachmentId];t?t.hasMore&&T(e.attrs.attachmentId,t.nextOffset):_(e.attrs.attachmentId)}}else o.classList.remove("jp-carousel-show")}(r.closest(t,".jp-carousel-icon-info")||t.classList.contains("jp-carousel-photo-title"))&&(a&&a.classList.contains("jp-carousel-show")?r.scrollToElement(g.overlay,g.overlay,c):(c(),r.scrollToElement(g.info,g.overlay))),r.closest(t,".jp-carousel-icon-comments")&&(n&&n.classList.contains("jp-carousel-show")?r.scrollToElement(g.overlay,g.overlay,u):(u(),r.scrollToElement(g.info,g.overlay)))}(e)}),window.addEventListener("keydown",v),g.overlay.addEventListener("jp_carousel.afterOpen",function(){w(),g.slides.length<=1||(g.slides.length<=5?r.show(g.info.querySelector(".jp-swiper-pagination")):r.show(g.info.querySelector(".jp-carousel-pagination")))}),g.overlay.addEventListener("jp_carousel.beforeClose",function(){y(),document.documentElement.style.removeProperty("height"),e&&e.enable(),r.hide(g.info.querySelector(".jp-swiper-pagination")),r.hide(g.info.querySelector(".jp-carousel-pagination"))}),g.overlay.addEventListener("jp_carousel.afterClose",function(){window.history.pushState?history.pushState("",document.title,window.location.pathname+window.location.search):window.location.href="",c="",g.isOpen=!1}),g.overlay.addEventListener("touchstart",function(e){e.touches.length>1&&e.preventDefault()}))}function b(e,t){var o=g.overlay.querySelector("#jp-carousel-comment-post-results"),a="jp-carousel-comment-post-"+(t?"success":"error");o.innerHTML='<span class="'+a+'">'+e+"</span>",r.hide(g.overlay.querySelector("#jp-carousel-comment-form-spinner")),g.overlay.querySelector("#jp-carousel-comment-form").classList.remove("jp-carousel-is-disabled"),r.show(o)}function L(){var e=document.querySelectorAll("a img[data-attachment-id]");Array.prototype.forEach.call(e,function(e){var t=e.parentElement,o=t.parentElement;if(!o.classList.contains("gallery-icon")&&!r.closest(o,m)&&t.hasAttribute("href")){var a=!1;t.getAttribute("href").split("?")[0]===e.getAttribute("data-orig-file").split("?")[0]&&1===Number(jetpackCarouselStrings.single_image_gallery_media_file)&&(a=!0),t.getAttribute("href")===e.getAttribute("data-permalink")&&(a=!0),a&&(S(e),t.classList.add("single-image-gallery"),t.setAttribute("data-carousel-extra",JSON.stringify({blog_id:Number(jetpackCarouselStrings.blog_id)})))}})}function x(t,r){g.isOpen?(C(r),e.slideTo(r+1)):z(t,{startIndex:r})}function C(e){(!e||e<0||e>g.slides.length)&&(e=0),g.currentSlide=g.slides[e];var a,n,i=g.currentSlide,s=i.attrs.attachmentId;M(g.slides[e]),function(e){var t=[],r=g.slides.length;if(r>1){var o=e>0?e-1:r-1;t.push(o);var a=e<r-1?e+1:0;t.push(a)}t.forEach(function(e){var t=g.slides[e];t&&(M(t),1!==Number(jetpackCarouselStrings.display_background_image)||t.backgroundImage||F(t))})}(e),1!==Number(jetpackCarouselStrings.display_background_image)||g.slides[e].backgroundImage||F(g.slides[e]),r.hide(g.caption),function(e){var t,o,a,n,i,l,s;if(n=g.overlay.querySelector(".jp-carousel-photo-caption"),i=g.overlay.querySelector(".jp-carousel-caption"),l=g.overlay.querySelector(".jp-carousel-photo-title"),s=g.overlay.querySelector(".jp-carousel-photo-description"),r.hide(n),r.hide(i),r.hide(l),r.hide(s),t=A(e.caption)||"",o=A(e.title)||"",a=A(e.desc)||"",(t||o||a)&&(t&&(n.innerHTML=t,i.innerHTML=t,r.show(n),r.show(i)),r.stripHTML(t)===r.stripHTML(o)&&(o=""),r.stripHTML(t)===r.stripHTML(a)&&(a=""),r.stripHTML(o)===r.stripHTML(a)&&(a=""),a&&(s.innerHTML=a,r.show(s),o||t||(n.textContent=r.stripHTML(a),r.show(n))),o)){var c=r.stripHTML(o);l.textContent=c,t||(n.textContent=c,i.textContent=c,r.show(n)),r.show(l)}}
2245({caption:i.attrs.caption,title:i.attrs.title,desc:i.attrs.desc}),function(e){if(!e||1!==Number(jetpackCarouselStrings.display_exif))return!1;var t=g.info.querySelector(".jp-carousel-image-meta");if(!t)return!1;var r="";for(var o in e){var a=e[o],n=jetpackCarouselStrings.meta_data||[];if(0!==parseFloat(a)&&a.length&&-1!==n.indexOf(o)){switch(o){case"focal_length":a+="mm";break;case"shutter_speed":a=E(a);break;case"aperture":a="f/"+a}r+="<li><h5>"+jetpackCarouselStrings[o]+"</h5>"+a+"</li>"}}var i=t.querySelector("ul.jp-carousel-image-exif");if(""!==r){if(!i){(i=document.createElement("ul")).className="jp-carousel-image-exif";var l=t.querySelector(".jp-carousel-title-and-caption");l&&l.nextSibling?t.insertBefore(i,l.nextSibling):t.insertBefore(i,t.firstChild)}i.innerHTML=r,i.style.removeProperty("display")}else i&&i.parentNode.removeChild(i)}(g.slides[e].attrs.imageMeta),function(e){if(!e)return!1;var r,o=[e.attrs.origWidth,e.attrs.origHeight],a=document.createElement("a");a.href=e.attrs.src.replace(/\?.+$/,""),r=null!==a.hostname.match(/^i[\d]{1}\.wp\.com$/i)?a.href:e.attrs.origFile.replace(/\?.+$/,"");var n=g.info.querySelector(".jp-carousel-download-text"),i=g.info.querySelector(".jp-carousel-image-download");n.innerHTML=t.applyReplacements(jetpackCarouselStrings.download_original,o),i.setAttribute("href",r),i.style.removeProperty("display")}(i),1===Number(jetpackCarouselStrings.display_comments)&&(a=g.slides[e].attrs.commentsOpened,n=g.info.querySelector("#jp-carousel-comment-form-container"),1===parseInt(a,10)?r.fadeIn(n):r.fadeOut(n),function(e){var t=e.attrs.attachmentId,a=g.info.querySelector(".jp-carousel-comments"),n=l[t];if(clearInterval(o),r.hide(g.info.querySelector("#jp-carousel-comments-loading")),n)return a.innerHTML=n.html,H(n.count),r.show(a),void(n.hasMore&&I()&&T(t,n.nextOffset));a.innerHTML="",r.hide(a),H(parseInt(e.attrs.commentsCount,10)||0),I()&&_(t)}(i),r.hide(g.info.querySelector("#jp-carousel-comment-post-results")));var u=g.info.querySelector(".jp-carousel-pagination");if(u&&g.slides.length>5){var d=e+1;u.innerHTML="<span>"+d+" / "+g.slides.length+"</span>"}jetpackCarouselStrings.stats&&g.isOpen&&((new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?"+jetpackCarouselStrings.stats+"&post="+encodeURIComponent(s)+"&rand="+Math.random()),g.isOpen&&f(s),c="#jp-carousel-"+s,window.location.hash=c}function k(){document.body.style.overflow=a,document.documentElement.style.overflow=n,W(),y(),r.emitEvent(g.overlay,"jp_carousel.beforeClose"),window.scrollTo(window.scrollX||window.pageXOffset||0,i||0),g.isOpen=!1,e.destroy(),g.slides=[],l={},s={},g.currentSlide=void 0,g.gallery.innerHTML="",r.fadeOut(g.overlay,function(){r.emitEvent(g.overlay,"jp_carousel.afterClose")})}function q(e){if("object"!=typeof e&&(e={}),void 0===e.origFile)return"";if(void 0===e.origWidth||void 0===e.maxWidth)return e.origFile;if(!e.largeFile)return e.origFile;var t=document.createElement("a");t.href=e.largeFile;var r=/^i[0-2]\.wp\.com$/i.test(t.hostname),o=function(e,t,r){var o,a=r?e.replace(/.*=([\d]+%2C[\d]+).*$/,"$1"):e.replace(/.*-([\d]+x[\d]+)\..+$/,"$1");return"9999"===(o=a!==e?r?a.split("%2C"):a.split("x"):[t,0])[0]&&(o[0]="0"),"9999"===o[1]&&(o[1]="0"),o}(e.largeFile,e.origWidth,r),a=parseInt(o[0],10),n=parseInt(o[1],10);e.origMaxWidth=e.maxWidth,e.origMaxHeight=e.maxHeight,void 0!==window.devicePixelRatio&&window.devicePixelRatio>1&&(e.maxWidth=e.maxWidth*window.devicePixelRatio,e.maxHeight=e.maxHeight*window.devicePixelRatio);var i=e.zoomHeadroom||1;if(i>1&&(e.maxWidth=e.maxWidth*i,e.maxHeight=e.maxHeight*i),a>=e.maxWidth||n>=e.maxHeight)return e.largeFile;if(r){if(-1===e.largeFile.lastIndexOf("?"))return e.largeFile;var l=function(e){var t;try{t=new URL(e)}catch(t){return e}var r=["quality","ssl","filter","brightness","contrast","colorize","smooth"],o=Array.from(t.searchParams.entries());return t.search="",o.forEach(([e,o])=>{r.includes(e)&&t.searchParams.append(e,o)}),t}(e.largeFile);return(e.origWidth>e.maxWidth||e.origHeight>e.maxHeight)&&(e.origMaxWidth=e.maxWidth,e.origMaxHeight=e.maxHeight,l.searchParams.set("fit",e.origMaxWidth+","+e.origMaxHeight)),l.toString()}return e.origFile}function E(e){return e>=1?Math.round(10*e)/10+"s":"1/"+Math.round(1/e)+"s"}
2245function A(e){return!e.match(" ")&&e.match("_")?"":e}function I(){var e=g.info.querySelector(".jp-carousel-comments-wrapper");return!!e&&e.classList.contains("jp-carousel-show")}function H(e){var t=g.info.querySelector(".jp-carousel-icon-comments .jp-carousel-has-comments-indicator");t&&(e>0?(t.innerText=e,t.classList.add("jp-carousel-show")):t.classList.remove("jp-carousel-show"))}function T(e,t){clearInterval(o),o=setInterval(function(){g.container.scrollTop+150>window.innerHeight&&(clearInterval(o),_(e,t))},300)}function _(e,t,a){var n=void 0===t;if(clearInterval(o),e&&g.currentSlide&&g.currentSlide.attrs.attachmentId===e&&(!s[e]||a)){(!t||t<1)&&(t=0);var i=g.info.querySelector(".jp-carousel-comments"),c=g.info.querySelector("#jp-carousel-comments-loading");r.show(c),n&&(r.hide(i),i.innerHTML="");var u=new XMLHttpRequest;s[e]=u;var d=function(){return s[e]===u},m=jetpackCarouselStrings.ajaxurl+"?action=get_attachment_comments&nonce="+jetpackCarouselStrings.nonce+"&id="+e+"&offset="+t;u.open("GET",m),u.setRequestHeader("X-Requested-With","XMLHttpRequest");var p=function(){r.fadeIn(i),r.fadeOut(c)};u.onload=function(){if(d()&&(delete s[e],g.currentSlide&&g.currentSlide.attrs.attachmentId===e)){var o,a=u.status>=200&&u.status<300;try{o=JSON.parse(u.responseText)}catch{}if(a&&o&&Array.isArray(o)){n&&(i.innerHTML="");for(var m=0;m<o.length;m++){var h=o[m];if(!i.querySelector("#jp-carousel-comment-"+h.id)){var f=document.createElement("div");f.classList.add("jp-carousel-comment"),f.setAttribute("id","jp-carousel-comment-"+h.id),f.innerHTML='<div class="comment-gravatar">'+h.gravatar_markup+'</div><div class="comment-content"><div class="comment-author">'+h.author_markup+'</div><div class="comment-date">'+h.date_gmt+"</div>"+h.content+"</div>",i.appendChild(f)}}var v=o.length>=10,y=t+10;v&&T(e,y);var w=i.querySelectorAll(".jp-carousel-comment").length,S=Math.max(parseInt(g.currentSlide.attrs.commentsCount,10)||0,w);o.length>0&&(r.show(i),H(S)),l[e]={html:i.innerHTML,count:S,hasMore:v,nextOffset:y},r.hide(c)}else p()}},u.onerror=function(){d()&&(delete s[e],g.currentSlide&&g.currentSlide.attrs.attachmentId===e&&p())},u.send()}}function M(e){var t=e.attrs,r=e.el.querySelector("img");if(!r.hasAttribute("data-loaded"))if(r.setAttribute("itemprop","image"),r.setAttribute("data-loaded",1),t.previewImage&&t.previewImage!==t.src){r.src=t.previewImage,r.style.filter="blur(8px)";var o=new window.Image;o.addEventListener("load",function(){r.hasAttribute("data-zoom-loaded")||(r.src=t.src),r.style.filter=""},{once:!0}),o.addEventListener("error",function(){r.style.filter=""},{once:!0}),o.src=t.src}else r.src=t.src}function F(e){var t=e.attrs.originalElement;if(t)if(t.complete&&0!==t.naturalHeight)O(e,t);else{var r=function(){t.removeEventListener("error",o),O(e,t)},o=function(){t.removeEventListener("load",r)};t.addEventListener("load",r,{once:!0}),t.addEventListener("error",o,{once:!0})}}function O(e,r){var o=t.getBackgroundImage(r);o&&(e.backgroundImage=o,e.el.style.backgroundImage="url("+o+")",e.el.style.backgroundSize="cover",e.el.style.backgroundPosition="center")}function W(){g.commentField&&(g.commentField.value="")}function N(e,o){g.slides=[];var a={width:window.innerWidth,height:window.innerHeight-64};0!==o&&null!==e[o].getAttribute("data-gallery-src")&&((new Image).src=e[o].getAttribute("data-gallery-src")),Array.prototype.forEach.call(e,function(e,o){var n=r.closest(e,"a"),i=e.getAttribute("data-orig-file")||e.getAttribute("src-orig"),l=e.getAttribute("data-attachment-id")||e.getAttribute("data-id")||"0",s=document.querySelector('img[data-attachment-id="'+l+'"] + figcaption');s=s?s.innerHTML:e.getAttribute("data-image-caption");var c={originalElement:e,attachmentId:l,commentsOpened:e.getAttribute("data-comments-opened")||"0",commentsCount:e.getAttribute("data-comments-count")||"0",imageMeta:r.getJSONAttribute(e,"data-image-meta")||{},title:e.getAttribute("data-image-title")||"",desc:e.getAttribute("data-image-description")||"",largeFile:e.getAttribute("data-large-file")||"",origFile:i||"",thumbSize:{width:e.naturalWidth,height:e.naturalHeight},caption:s||"",permalink:n&&n.getAttribute("href"),src:i||e.getAttribute("src")||""},u=r.closest(e,".tiled-gallery-item"),d=u&&u.querySelector(".tiled-gallery-caption"),m=d&&d.innerHTML;m&&(c.caption=m);var p=function(e){var t=e.getAttribute("data-orig-size")||"";if(t){var r=t.split(",");return{width:parseInt(r[0],10),height:parseInt(r[1],10)}}return{width:e.getAttribute("data-original-width")||e.getAttribute("width")||void 0,height:e.getAttribute("data-original-height")||e.getAttribute("height")||void 0}}(e);if(c.origWidth=p.width||c.thumbSize.width,c.origHeight=p.height||c.thumbSize.height,"undefined"!=typeof wpcom&&wpcom.carousel&&wpcom.carousel.generateImgSrc)c.src=wpcom.carousel.generateImgSrc(e,a);else{var h=function(e){return{origFile:c.src,origWidth:c.origWidth,origHeight:c.origHeight,maxWidth:a.width,maxHeight:a.height,largeFile:c.largeFile,zoomHeadroom:e}};c.zoomSrc=q(h(2)),c.src=q(h(1))}if(e.setAttribute("data-gallery-src",c.src),"0"!==c.attachmentId){c.title=t.texturize(c.title),c.desc=t.texturize(c.desc),c.caption=t.texturize(c.caption);var f=new Image,v=document.createElement("div");v.classList.add("swiper-slide"),v.setAttribute("itemprop","associatedMedia"),v.setAttribute("itemscope",""),v.setAttribute("itemtype","https://schema.org/ImageObject");var y=document.createElement("div");y.classList.add("swiper-zoom-container"),g.gallery.appendChild(v),v.appendChild(y),y.appendChild(f),v.setAttribute("data-attachment-id",c.attachmentId),v.setAttribute("data-permalink",c.permalink),v.setAttribute("data-orig-file",c.origFile),c.previewImage=e.currentSrc||e.getAttribute("src")||"";var w={el:v,attrs:c,index:o};g.slides.push(w)}})}function z(e,t){if(!window.JetpackSwiper){var o=document.querySelector("#jp-carousel-loading-overlay");r.show(o);var a=document.createElement("script");return a.id="jetpack-carousel-swiper-js",a.src=window.jetpackSwiperLibraryPath.url,a.async=!0,a.onload=function(){r.hide(o),R(e,t)},a.onerror=function(){r.hide(o)},void document.head.appendChild(a)}R(e,t)}function R(t,o){var c,u={imgSelector:".gallery-item [data-attachment-id], .tiled-gallery-item [data-attachment-id], img[data-attachment-id], img[data-id]",startIndex:0},d=r.getJSONAttribute(t,"data-carousel-extra");if(!d)return;const m=t.querySelectorAll(u.imgSelector);if(m.length&&(j(),!g.isOpen)){for(var p in g.isOpen=!0,a=getComputedStyle(document.body).overflow,document.body.style.overflow="hidden",n=getComputedStyle(document.documentElement).overflow,document.documentElement.style.overflow="hidden",i=window.scrollY||window.pageYOffset||0,g.container.setAttribute("data-carousel-extra",JSON.stringify(d)),h(["open","view_image"]),o||{})u[p]=o[p];-1===u.startIndex&&(u.startIndex=0),r.emitEvent(g.overlay,"jp_carousel.beforeOpen"),g.gallery.innerHTML="",l={},s={},g.overlay.style.opacity=1,g.overlay.style.display="block",N(m,u.startIndex),(e=new window.JetpackSwiper(".jp-carousel-swiper-container",{centeredSlides:!0,speed:r.prefersReducedMotion()?0:250,zoom:!0,loop:g.slides.length>1,enabled:g.slides.length>1,pagination:{el:".jp-swiper-pagination",clickable:!0},navigation:{nextEl:".jp-swiper-button-next",prevEl:".jp-swiper-button-prev"},initialSlide:u.startIndex,on:{init:function(){C(u.startIndex)}},preventClicks:!1,preventClicksPropagation:!1,preventInteractionOnTransition:!r.isTouch(),threshold:5})).on("slideChange",function(e){g.isOpen&&(C(e.realIndex),g.overlay.classList.remove("jp-carousel-hide-control
2245s"))}),e.on("zoomChange",function(e,t){t>1&&(function(e){if(e&&e.attrs.zoomSrc&&e.attrs.zoomSrc!==e.attrs.src){var t=e.el.querySelector("img");t&&!t.hasAttribute("data-zoom-loaded")&&(t.setAttribute("data-zoom-loaded",1),t.src=e.attrs.zoomSrc)}}(g.currentSlide),g.overlay.classList.add("jp-carousel-hide-controls")),1===t&&g.overlay.classList.remove("jp-carousel-hide-controls")}),e.on("doubleTap",function(e){if(clearTimeout(c),1===e.zoom.scale)var t=setTimeout(function(){g.overlay.classList.remove("jp-carousel-hide-controls"),clearTimeout(t)},150)}),e.on("tap",function(){e.zoom.scale>1&&(c=setTimeout(function(){g.overlay.classList.toggle("jp-carousel-hide-controls")},150))}),r.fadeIn(g.overlay,function(){r.emitEvent(g.overlay,"jp_carousel.afterOpen")})}}function P(e){if("click"!==e.type){if("keydown"===e.type){const t=document.activeElement.parentElement,r=t&&t.classList.contains("tiled-gallery__item");" "!==e.key&&"Enter"!==e.key||!r||$(e)}}else $(e)}function D(e){return(e||"").split("?")[0].replace(/\/$/,"")}function J(e){"A"===e.tagName&&(e=e.querySelector("img")||e);var t=e.parentElement,o=t?t.parentElement:null,a=null;if(o&&o.classList.contains("wp-block-image")?a=t.getAttribute("href"):t&&t.classList.contains("wp-block-image")&&t.querySelector(":scope > a")&&(a=t.querySelector(":scope > a").getAttribute("href")),a){var n=D(a),i=D(e.getAttribute("data-orig-file")),l=D(e.getAttribute("data-permalink"));if(n!==i&&n!==l)return!1}return!(t&&t.classList.contains("gallery-caption")||r.matches(t,"figcaption"))}function $(e){if(window.CSS&&window.CSS.supports&&window.CSS.supports("display","grid")){var t,o=e.target,a=r.closest(o,d);if(a){if(!(t=a)||!t.getAttribute("data-carousel-extra"))return;if(!J(o))return;document.documentElement.style.height="auto",e.preventDefault(),e.stopPropagation();var n=r.closest(o,p),i=Array.prototype.indexOf.call(a.querySelectorAll(p),n);z(a,{startIndex:i})}}}document.body.addEventListener("click",P),document.body.addEventListener("keydown",P),document.querySelectorAll(m+"img").forEach(function(e){J(e)&&S(e)}),1===Number(jetpackCarouselStrings.single_image_gallery)&&(L(),document.body.addEventListener("is.post-load",function(){L()})),window.addEventListener("hashchange",function(){var e=/jp-carousel-(\d+)/;if(window.location.hash&&e.test(window.location.hash)){if(window.location.hash!==c||!g.isOpen)if(window.location.hash&&g.gallery&&!g.isOpen&&history.back)history.back();else{c=window.location.hash;for(var t=window.location.hash.match(e),r=parseInt(t[1],10),o=document.querySelectorAll(d),a=0;a<o.length;a++){for(var n,i=o[a],l=i.querySelectorAll("img"),s=0;s<l.length;s++)if(parseInt(l[s].getAttribute("data-attachment-id"),10)===r||parseInt(l[s].getAttribute("data-id"),10)===r){n=s;break}if(void 0!==n){x(i,n);break}}}}else g.isOpen&&k()}),window.location.hash&&r.emitEvent(window,"hashchange")}"loading"!==document.readyState?o():document.addEventListener("DOMContentLoaded",o)}();; 2246( function () { 2247 'use strict'; 2248 2249 if ( typeof window.wpcom === 'undefined' ) { 2250 window.wpcom = {}; 2251 } 2252 2253 if ( window.wpcom.carousel ) { 2254 return; 2255 } 2256 2257 var prebuilt_widths = jetpackCarouselStrings.widths; 2258 var pageviews_stats_args = jetpackCarouselStrings.stats_query_args; 2259 2260 var findFirstLargeEnoughWidth = function ( original_w, original_h, dest_w, dest_h ) { 2261 var inverse_ratio = original_h / original_w; 2262 2263 for ( var i = 0; i < prebuilt_widths.length; ++i ) { 2264 if ( prebuilt_widths[ i ] >= dest_w || prebuilt_widths[ i ] * inverse_ratio >= dest_h ) { 2265 return prebuilt_widths[ i ]; 2266 } 2267 } 2268 2269 return original_w; 2270 }; 2271 2272 var removeResizeFromImageURL = function ( url ) { 2273 return removeArgFromURL( url, 'resize' ); 2274 }; 2275 2276 var removeArgFromURL = function ( url, arg ) { 2277 var re = new RegExp( '[\\?&]' + arg + '(=[^?&]+)?' ); 2278 if ( url.match( re ) ) { 2279 return url.replace( re, '' ); 2280 } 2281 return url; 2282 }; 2283 2284 var addWidthToImageURL = function ( url, width ) { 2285 width = parseInt( width, 10 ); 2286 // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc) 2287 if ( 'undefined' !== typeof window.devicePixelRatio && window.devicePixelRatio > 1 ) { 2288 width = Math.round( width * window.devicePixelRatio ); 2289 } 2290 url = addArgToURL( url, 'w', width ); 2291 url = addArgToURL( url, 'h', '' ); 2292 return url; 2293 }; 2294 2295 var addArgToURL = function ( url, arg, value ) {
2296 var re = new RegExp( arg + '=[^?&]+' ); 2297 if ( url.match( re ) ) { 2298 return url.replace( re, arg + '=' + value ); 2299 } else { 2300 var divider = url.indexOf( '?' ) !== -1 ? '&' : '?'; 2301 return url + divider + arg + '=' + value; 2302 } 2303 }; 2304 2305 var stat = function ( names ) { 2306 if ( typeof names !== 'string' ) { 2307 names = names.join( ',' ); 2308 } 2309 2310 new Image().src = window.location.protocol + 2311 '//pixel.wp.com/g.gif?v=wpcom-no-pv' + 2312 '&x_carousel=' + names + 2313 '&baba=' + Math.random(); 2314 }; 2315 2316 var lastTrackedPostId = null; 2317 2318 var pageview = function ( post_id ) { 2319 // Prevent duplicate tracking of the same post during slide transitions 2320 if ( post_id === lastTrackedPostId ) { 2321 return; 2322 } 2323 2324 lastTrackedPostId = post_id; 2325 2326 new Image().src = window.location.protocol + 2327 '//pixel.wp.com/g.gif?host=' + encodeURIComponent( window.location.host ) + 2328 '&ref=' + encodeURIComponent( document.referrer ) + 2329 '&rand=' + Math.random() + 2330 '&' + pageviews_stats_args + 2331 '&post=' + encodeURIComponent( post_id ); 2332 }; 2333 2334 var generateImgSrc = function ( srcItem, max ) { 2335 var origSize = srcItem.getAttribute( 'data-orig-size' ) || ''; 2336 2337 var src = srcItem.getAttribute( 'src' ) || srcItem.getAttribute( 'original' ) || srcItem.getAttribute( 'data-original' ) || srcItem.getAttribute( 'data-lazy-src' ); 2338 if ( src.indexOf( 'imgpress' ) !== -1 ) { 2339 src = srcItem.getAttribute( 'data-orig-file' ); 2340 } 2341 // Square/Circle galleries use a resize param that needs to be removed. 2342 src = removeResizeFromImageURL( src ); 2343 src = addWidthToImageURL( 2344 src, 2345 findFirstLargeEnoughWidth( origSize.width, origSize.height, max.width, max.height ) 2346 ); 2347 2348 return src; 2349 }; 2350 2351 window.wpcom.carousel = { 2352 findFirstLargeEnoughWidth: findFirstLargeEnoughWidth, 2353 removeResizeFromImageURL: removeResizeFromImageURL, 2354 addWidthToImageURL: addWidthToImageURL, 2355 stat: stat, 2356 pageview: pageview, 2357 generateImgSrc: generateImgSrc 2358 }; 2359 2360} )(); 2361; 2362!function(){var e=document.currentScript;function t(t){var n=document.createElement("script"),o=e||document.getElementsByTagName("script")[0];n.setAttribute("async",!0),n.setAttribute("src",t),o.parentNode.insertBefore(n,o)}function n(e,t){return Element.prototype.matches?e.matches(t):Element.prototype.msMatchesSelector?e.msMatchesSelector(t):void 0}function o(e,t){if(e.closest)return e.closest(t);var o=e;do{if(n(o,t))return o;o=o.parentElement||o.parentNode}while(null!==o&&1===o.nodeType);return null}function i(e,t){for(var n=0;n<e.length;n++)t(e[n],n,e)}var r,s=".sharing-hidden .inner",a="data-sharing-more-button-id";function c(e){this.button=e,this.pane=o(e,"div").querySelector(s),this.openedBy=null,this.recentlyOpenedByHover=!1,c.instances.push(this),this.pane.setAttribute(a,c.instances.length-1),this.attachHandlers()}if(c.instances=[],c.hoverOpenDelay=200,c.recentOpenDelay=400,c.hoverCloseDelay=300,c.instantiateOrReuse=function(e){var t=o(e,"div").querySelector(s),n=t&&t.getAttribute(a),i=c.instances[n];return i||new c(e)},c.getButtonInstanceFromPane=function(e){var t=e&&e.getAttribute(a);return c.instances[t]},c.closeAll=function(){for(var e=0;e<c.instances.length;e++)c.instances[e].close()},c.prototype.open=function(){var e,t,n=[0,0];function o(e){var t=e.getBoundingClientRect();return[t.left+(window.scrollX||window.pageXOffset||0),t.top+(window.scrollY||window.pageYOffset||0)]}function i(e,t){return parseInt(getComputedStyle(e).getPropertyValue(t)||0)}for(e=o(this.button),t=this.button.offsetParent||document.documentElement;t&&(t===document.body||t===document.documentElement)&&"static"===getComputedStyle(t).getPropertyValue("position");)t=t.parentNode;t&&t!==this.button&&1===t.nodeType&&(n=[(n=o(t))[0]+i(t,"border-left-width"),n[1]+i(t,"border-top-width")]);var r,s=e[0]-n[0]-i(this.button,"margin-left"),a=e[1]-n[1]-i(this.button,"margin-top");this.pane.style.left=s+"px",this.pane.style.top=a+this.button.offsetHeight+3+"px",(r=this.pane)&&r.style.removeProperty("display")},c.prototype.close=function(){var e;(e=this.pane)&&(e.style.display="none"),this.openedBy=null},c.prototype.toggle=function(){var e;(e=this.pane)&&"none"!==e.style.display?this.close():this.open()}
2362,c.prototype.nonHoverOpen=function(){clearTimeout(this.openTimer),clearTimeout(this.closeTimer),this.recentlyOpenedByHover?(this.recentlyOpenedByHover=!1,clearTimeout(this.hoverOpenTimer),this.open()):this.toggle()},c.prototype.resetCloseTimer=function(){clearTimeout(this.closeTimer),this.closeTimer=setTimeout(this.close.bind(this),c.hoverCloseDelay)},c.prototype.attachHandlers=function(){this.buttonClick=function(e){e.preventDefault(),e.stopPropagation(),this.openedBy="click",this.nonHoverOpen()}.bind(this),this.buttonKeydown=function(e){13!==e.keyCode&&32!==e.keyCode||(e.preventDefault(),e.stopPropagation(),this.openedBy="keydown",this.nonHoverOpen())}.bind(this),this.buttonEnter=function(){this.openedBy||(this.openTimer=setTimeout(function(){this.open(),this.openedBy="hover",this.recentlyOpenedByHover=!0,this.hoverOpenTimer=setTimeout(function(){this.recentlyOpenedByHover=!1}.bind(this),c.recentOpenDelay)}.bind(this),c.hoverOpenDelay)),clearTimeout(this.closeTimer)}.bind(this),this.buttonLeave=function(){"hover"===this.openedBy&&this.resetCloseTimer(),clearTimeout(this.openTimer)}.bind(this),this.paneEnter=function(){clearTimeout(this.closeTimer)}.bind(this),this.paneLeave=function(){"hover"===this.openedBy&&this.resetCloseTimer()}.bind(this),this.documentClick=function(){this.close()}.bind(this),this.button.addEventListener("click",this.buttonClick),this.button.addEventListener("keydown",this.buttonKeydown),document.addEventListener("click",this.documentClick),void 0===document.ontouchstart&&(this.button.addEventListener("mouseenter",this.buttonEnter),this.button.addEventListener("mouseleave",this.buttonLeave),this.pane.addEventListener("mouseenter",this.paneEnter),this.pane.addEventListener("mouseleave",this.paneLeave))},window.sharing_js_options&&window.sharing_js_options.counts){var u={done_urls:[],get_counts:function(){var e,n,o,i,r;if("undefined"!=typeof WPCOM_sharing_counts)for(e in WPCOM_sharing_counts)if(o=WPCOM_sharing_counts[e],void 0===u.done_urls[o]){for(i in n={pinterest:[window.location.protocol+"//api.pinterest.com/v1/urls/count.json?callback=WPCOMSharing.update_pinterest_count&url="+encodeURIComponent(e)]})if(document.querySelector("a[data-shared=sharing-"+i+"-"+o+"]")){for(;r=n[i].pop();)t(r);window.sharing_js_options.is_stats_active&&u.bump_sharing_count_stat(i)}u.done_urls[o]=!0}},update_pinterest_count:function(e){void 0!==e.count&&1*e.count>0&&u.inject_share_count("sharing-pinterest-"+WPCOM_sharing_counts[e.url],e.count)},inject_share_count:function(e,t){i(document.querySelectorAll("a[data-shared="+e+"] > span"),function(e){var n,o=e.querySelector(".share-count");(n=o)&&n.parentNode&&n.parentNode.removeChild(n);var i=document.createElement("span");i.className="share-count",i.textContent=u.format_count(t),e.appendChild(i)})},format_count:function(e){return e<1e3?e:e>=1e3&&e<1e4?String(e).substring(0,1)+"K+":"10K+"},bump_sharing_count_stat:function(e){(new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?v=wpcom-no-pv&x_sharing-count-request="+e+"&r="+Math.random()}};window.WPCOMSharing=u}function d(e,t){e.setAttribute("jetpack-share-click-count",t)}function l(e){var t=e.getAttribute("jetpack-share-click-count");return null===t?0:parseInt(t,10)}function h(e,t){var n,o=new XMLHttpRequest;o.open("POST",e,!0),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"),o.setRequestHeader("x-requested-with","XMLHttpRequest"),o.send((n=t,(encodeURIComponent("email-share-nonce")+"="+encodeURIComponent(n)).replace(/%20/g,"+")))}function p(){m()}function m(){window.WPCOMSharing&&window.WPCOMSharing.get_counts(),i(document.querySelectorAll(".sharedaddy a"),function(e){var t=e.getAttribute("href");t&&-1!==t.indexOf("share=")&&-1===t.indexOf("&nb=1")&&e.setAttribute("href",t+"&nb=1")}),i(document.querySelectorAll(".sharedaddy a.sharing-anchor"),function(e){c.instantiateOrReuse(e)}),void 0!==document.ontouchstart&&document.body.classList.add("jp-sharing-input-touch"),i(document.querySelectorAll(".sharedaddy ul"),function(e){"true"!==e.getAttribute("data-sharing-events-added")&&(e.setAttribute("data-sharing-events-added","true"),i(e.querySelectorAll("a.share-print"),function(e){e.addEventListener("click",function(t){t.preventDefault(),t.stopPropagation();var n=e.getAttribute("href")||"",i=function(){if(-1===n.indexOf("#print")){var e=(new Date).getTime();t=e,o=n,(i=document.createElement("iframe")).setAttribute("style","position:fixed; top:100; left:100; height:1px; width:1px; border:none;"),i.setAttribute("id","printFrame-"+t),i.setAttribute("name",i.getAttribute("id")),i.setAttribute("src",o),i.setAttribute("onload",'frames["printFrame-'+t+'"].focus();frames["printFrame-'+t+'"].print();'),document.body.appendChild(i)}else window.print();var t,o,i}
2362,r=o(e,s);if(r){var a=c.getButtonInstanceFromPane(r);a&&(a.close(),i())}else i()})}),i(e.querySelectorAll("a.share-press-this"),function(e){var t="wp-press-this-"+Math.random().toString(36).slice(2);e.addEventListener("click",function(n){n.preventDefault(),n.stopPropagation();var o="";if(window.getSelection?o=window.getSelection():document.getSelection?o=document.getSelection():document.selection&&(o=document.selection.createRange().text),o){var i=e.getAttribute("href");e.setAttribute("href",i+"&sel="+encodeURI(o))}window.open(e.getAttribute("href"),t,"toolbar=0,resizable=1,scrollbars=1,status=1,width=720,height=570")||(document.location.href=e.getAttribute("href"))})}),i(e.querySelectorAll("a.share-email"),function(t){d(t,0);var n,o,r=t.getAttribute("data-email-share-nonce"),s=t.getAttribute("data-email-share-track-url");r&&s&&(n=s,o=window.location.protocol+"//"+window.location.hostname+"/",0===String(n).indexOf(o))&&t.addEventListener("click",function(){var n;d(n=t,l(n)+1),l(t)>2&&function(e,t){var n=t.parentElement;if(n.classList.contains("sd-content")){i(n.querySelectorAll(".share-email-error"),function(e){e.parentElement.removeChild(e)});var o=document.createElement("div");o.className="share-email-error";var r=document.createElement("h6");r.className="share-email-error-title",r.innerText=e.getAttribute("data-email-share-error-title"),o.appendChild(r);var s=document.createElement("p");s.className="share-email-error-text",s.innerText=e.getAttribute("data-email-share-error-text"),o.appendChild(s),n.appendChild(o)}}(t,e),h(s,r)})}))}),i(document.querySelectorAll("li.share-email, li.share-custom a.sharing-anchor"),function(e){e.classList.add("share-service-visible")})}"loading"!==document.readyState?p():document.addEventListener("DOMContentLoaded",p),document.body.addEventListener("is.post-load",m);var f={};!0!==window.WPCOM_sharing_popups_bound&&(document.body.addEventListener("click",function(e){var t=e.target;if(t&&1===t.nodeType){var n=function(e){if("A"===e.nodeName)return e;var t=e.parentNode;return t&&"A"===t.nodeName?t:null}(t);if(n){var o=function(e){var t=window.WPCOM_sharing_popups;if(!t)return null;for(var n="share-",o=(e.getAttribute("class")||"").split(/\s+/),i=0;i<o.length;i++)if(0===o[i].indexOf(n)){var r=o[i].slice(6);if("string"==typeof t[r])return r}return null}(n);o&&(e.preventDefault(),r&&r.close(),r=window.open(n.getAttribute("href"),function(e){return"string"!=typeof f[e]&&(f[e]="wpcom"+e+"-"+Math.random().toString(36).slice(2)),f[e]}(o),window.WPCOM_sharing_popups[o]))}}}),window.WPCOM_sharing_popups_bound=!0)}();;
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.