0byt3m1n1
Path:
/
home1
/
aserty
/
public_html
/
beatlesmontreal.com
/
wp-contentebbd3f
/
wptouch-data
/
cache
/
[
Home
]
File: wptouch-b5e2f89e100073cbae5bec955ce206ef9c0120e5.js
/* WPtouch Simple Theme JS File */ /* Public functions called here reside in base.js, found in the Foundation theme */ function doSimpleReady() { jQuery( 'iframe' ).load( function(){ jQuery( '#map' ).addClass( 'hide' ).css( 'margin-top', 'hidden' ); }); jQuery( '.map-address' ).on( 'click', function() { jQuery( '#map' ).removeClass( 'start' ).toggleClass( 'hide' ); }); simpleWebApp(); } function doSimpleTouchedClasses(){ /* Adds/removes a 'touched' class to elements when they're actually touched (after 100ms delay) for a better UI experience (tappable module) */ jQuery( '.homepage-menu a, .homepage-menu span, #menu li' ).each( function(){ jQuery( this ).addClass( 'tappable' ); }); } function simpleWebApp(){ if ( navigator.standalone ) { jQuery( 'body' ).prepend( '<span class="fixed-header-fill"></span>' ); } } jQuery( document ).ready( function() { doSimpleReady(); }); jQuery( window ).load( function() { doSimpleTouchedClasses(); }); //fgnass.github.com/spin.js#v1.2.7 !function(e,t,n){function o(e,n){var r=t.createElement(e||"div"),i;for(i in n)r[i]=n[i];return r}function u(e){for(var t=1,n=arguments.length;t<n;t++)e.appendChild(arguments[t]);return e}function f(e,t,n,r){var o=["opacity",t,~~(e*100),n,r].join("-"),u=.01+n/r*100,f=Math.max(1-(1-e)/t*(100-u),e),l=s.substring(0,s.indexOf("Animation")).toLowerCase(),c=l&&"-"+l+"-"||"";return i[o]||(a.insertRule("@"+c+"keyframes "+o+"{"+"0%{opacity:"+f+"}"+u+"%{opacity:"+e+"}"+(u+.01)+"%{opacity:1}"+(u+t)%100+"%{opacity:"+e+"}"+"100%{opacity:"+f+"}"+"}",a.cssRules.length),i[o]=1),o}function l(e,t){var i=e.style,s,o;if(i[t]!==n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(o=0;o<r.length;o++){s=r[o]+t;if(i[s]!==n)return s}}function c(e,t){for(var n in t)e.style[l(e,n)||n]=t[n];return e}function h(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)e[i]===n&&(e[i]=r[i])}return e}function p(e){var t={x:e.offsetLeft,y:e.offsetTop};while(e=e.offsetParent)t.x+=e.offsetLeft,t.y+=e.offsetTop;return t}var r=["webkit","Moz","ms","O"],i={},s,a=function(){var e=o("style",{type:"text/css"});return u(t.getElementsByTagName("head")[0],e),e.sheet||e.styleSheet}(),d={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"},v=function m(e){if(!this.spin)return new m(e);this.opts=h(e||{},m.defaults,d)};v.defaults={},h(v.prototype,{spin:function(e){this.stop();var t=this,n=t.opts,r=t.el=c(o(0,{className:n.className}),{position:n.position,width:0,zIndex:n.zIndex}),i=n.radius+n.length+n.width,u,a;e&&(e.insertBefore(r,e.firstChild||null),a=p(e),u=p(r),c(r,{left:(n.left=="auto"?a.x-u.x+(e.offsetWidth>>1):parseInt(n.left,10)+i)+"px",top:(n.top=="auto"?a.y-u.y+(e.offsetHeight>>1):parseInt(n.top,10)+i)+"px"})),r.setAttribute("aria-role","progressbar"),t.lines(r,t.opts);if(!s){var f=0,l=n.fps,h=l/n.speed,d=(1-n.opacity)/(h*n.trail/100),v=h/n.lines;(function m(){f++;for(var e=n.lines;e;e--){var i=Math.max(1-(f+e*v)%h*d,n.opacity);t.opacity(r,n.lines-e,i,n)}t.timeout=t.el&&setTimeout(m,~~(1e3/l))})()}return t},stop:function(){var e=this.el;return e&&(clearTimeout(this.timeout),e.parentNode&&e.parentNode.removeChild(e),this.el=n),this},lines:function(e,t){function i(e,r){return c(o(),{position:"absolute",width:t.length+t.width+"px",height:t.width+"px",background:e,boxShadow:r,transformOrigin:"left",transform:"rotate("+~~(360/t.lines*n+t.rotate)+"deg) translate("+t.radius+"px"+",0)",borderRadius:(t.corners*t.width>>1)+"px"})}var n=0,r;for(;n<t.lines;n++)r=c(o(),{position:"absolute",top:1+~(t.width/2)+"px",transform:t.hwaccel?"translate3d(0,0,0)":"",opacity:t.opacity,animation:s&&f(t.opacity,t.trail,n,t.lines)+" "+1/t.speed+"s linear infinite"}),t.shadow&&u(r,c(i("#000","0 0 4px #000"),{top:"2px"})),u(e,u(r,i(t.color,"0 0 1px rgba(0,0,0,.1)")));return e},opacity:function(e,t,n){t<e.childNodes.length&&(e.childNodes[t].style.opacity=n)}}),function(){function e(e,t){return o("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',t)}var t=c(o("group"),{behavior:"url(#default#VML)"});!l(t,"transform")&&t.adj?(a.addRule(".spin-vml","behavior:url(#default#VML)"),v.prototype.lines=function(t,n){function s(){return c(e("group",{coordsize:i+" "+i,coordorigin:-r+" "+ -r}),{width:i,height:i})}function l(t,i,o){u(a,u(c(s(),{rotation:360/n.lines*t+"deg",left:~~i}),u(c(e("roundrect",{arcsize:n.corners}),{width:r,height:n.width,left:n.radius,top:-n.width>>1,filter:o}),e("fill",{color:n.color,opacity:n.opacity}),e("stroke",{opacity:0}))))}var r=n.length+n.width,i=2*r,o=-(n.width+n.length)*2+"px",a=c(s(),{position:"absolute",top:o,left:o}),f;if(n.shadow)for(f=1;f<=n.lines;f++)l(f,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(f=1;f<=n.lines;f++)l(f);return u(t,a)},v.prototype.opacity=function(e,t,n,r){var i=e.firstChild;r=r.shadow&&r.lines||0,i&&t+r<i.childNodes.length&&(i=i.childNodes[t+r],i=i&&i.firstChild,i=i&&i.firstChild,i&&(i.opacity=n))}):s=l(t,"animation")}(),typeof define=="function"&&define.amd?define(function(){return v}):e.Spinner=v}(window,document); /* You can now create a spinner using any of the variants below: $("#el").spin(); // Produces default Spinner using the text color of #el. $("#el").spin("small"); // Produces a 'small' Spinner using the text color of #el. $("#el").spin("large", "white"); // Produces a 'large' Spinner in white (or any valid CSS color). $("#el").spin({ ... }); // Produces a Spinner using your custom settings. $("#el").spin(false); // Kills the spinner. */ (function($) { $.fn.spin = function(opts, color) { var presets = { "tiny": { lines: 8, length: 2, width: 2, radius: 3 }, "small": { lines: 8, length: 4, width: 3, radius: 5 }, "large": { lines: 10, length: 8, width: 4, radius: 8 } }; if (Spinner) { return this.each(function() { var $this = $(this), data = $this.data(); if (data.spinner) { data.spinner.stop(); delete data.spinner; } if (opts !== false) { if (typeof opts === "string") { if (opts in presets) { opts = presets[opts]; } else { opts = {}; } if (color) { opts.color = color; } } data.spinner = new Spinner($.extend({color: $this.css('color')}, opts)).spin(this); } }); } else { throw "Spinner class not available."; } }; })(jQuery); /* * Swipe 2.0 * * Brad Birdsall * Copyright 2013, MIT License * */ function Swipe(container, options) { "use strict"; // utilities var noop = function() {}; // simple no operation function var offloadFn = function(fn) { setTimeout(fn || noop, 0) }; // offload a functions execution // check browser capabilities var browser = { addEventListener: !!window.addEventListener, touch: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch, transitions: (function(temp) { var props = ['transitionProperty', 'WebkitTransition', 'MozTransition', 'OTransition', 'msTransition']; for ( var i in props ) if (temp.style[ props[i] ] !== undefined) return true; return false; })(document.createElement('swipe')) }; // quit if no root element if (!container) return; var element = container.children[0]; var slides, slidePos, width, length; options = options || {}; var index = parseInt(options.startSlide, 10) || 0; var speed = options.speed || 300; options.continuous = options.continuous !== undefined ? options.continuous : true; function setup() { // cache slides slides = element.children; length = slides.length; // set continuous to false if only one slide if (slides.length < 2) options.continuous = false; //special case if two slides if (browser.transitions && options.continuous && slides.length < 3) { element.appendChild(slides[0].cloneNode(true)); element.appendChild(element.children[1].cloneNode(true)); slides = element.children; } // create an array to store current positions of each slide slidePos = new Array(slides.length); // determine width of each slide width = container.getBoundingClientRect().width || container.offsetWidth; element.style.width = (slides.length * width) + 'px'; // stack elements var pos = slides.length; while(pos--) { var slide = slides[pos]; slide.style.width = width + 'px'; slide.setAttribute('data-index', pos); if (browser.transitions) { slide.style.left = (pos * -width) + 'px'; move(pos, index > pos ? -width : (index < pos ? width : 0), 0); } } // reposition elements before and after index if (options.continuous && browser.transitions) { move(circle(index-1), -width, 0); move(circle(index+1), width, 0); } if (!browser.transitions) element.style.left = (index * -width) + 'px'; container.style.visibility = 'visible'; } function prev() { if (options.continuous) slide(index-1); else if (index) slide(index-1); } function next() { if (options.continuous) slide(index+1); else if (index < slides.length - 1) slide(index+1); } function circle(index) { // a simple positive modulo using slides.length return (slides.length + (index % slides.length)) % slides.length; } function slide(to, slideSpeed) { // do nothing if already on requested slide if (index == to) return; if (browser.transitions) { var direction = Math.abs(index-to) / (index-to); // 1: backward, -1: forward // get the actual position of the slide if (options.continuous) { var natural_direction = direction; direction = -slidePos[circle(to)] / width; // if going forward but to < index, use to = slides.length + to // if going backward but to > index, use to = -slides.length + to if (direction !== natural_direction) to = -direction * slides.length + to; } var diff = Math.abs(index-to) - 1; // move all the slides between index and to in the right direction while (diff--) move( circle((to > index ? to : index) - diff - 1), width * direction, 0); to = circle(to); move(index, width * direction, slideSpeed || speed); move(to, 0, slideSpeed || speed); if (options.continuous) move(circle(to - direction), -(width * direction), 0); // we need to get the next in place } else { to = circle(to); animate(index * -width, to * -width, slideSpeed || speed); //no fallback for a circular continuous if the browser does not accept transitions } index = to; offloadFn(options.callback && options.callback(index, slides[index])); } function move(index, dist, speed) { translate(index, dist, speed); slidePos[index] = dist; } function translate(index, dist, speed) { var slide = slides[index]; var style = slide && slide.style; if (!style) return; style.webkitTransitionDuration = style.MozTransitionDuration = style.msTransitionDuration = style.OTransitionDuration = style.transitionDuration = speed + 'ms'; style.webkitTransform = 'translate(' + dist + 'px,0)' + 'translateZ(0)'; style.msTransform = style.MozTransform = style.OTransform = 'translateX(' + dist + 'px)'; } function animate(from, to, speed) { // if not an animation, just reposition if (!speed) { element.style.left = to + 'px'; return; } var start = +new Date; var timer = setInterval(function() { var timeElap = +new Date - start; if (timeElap > speed) { element.style.left = to + 'px'; if (delay) begin(); options.transitionEnd && options.transitionEnd.call(event, index, slides[index]); clearInterval(timer); return; } element.style.left = (( (to - from) * (Math.floor((timeElap / speed) * 100) / 100) ) + from) + 'px'; }, 4); } // setup auto slideshow var delay = options.auto || 0; var interval; function begin() { interval = setTimeout(next, delay); } function stop() { delay = 0; clearTimeout(interval); } // setup initial vars var start = {}; var delta = {}; var isScrolling; // setup event capturing var events = { handleEvent: function(event) { switch (event.type) { case 'touchstart': this.start(event); break; case 'touchmove': this.move(event); break; case 'touchend': offloadFn(this.end(event)); break; case 'webkitTransitionEnd': case 'msTransitionEnd': case 'oTransitionEnd': case 'otransitionend': case 'transitionend': offloadFn(this.transitionEnd(event)); break; case 'resize': offloadFn(setup.call()); break; } if (options.stopPropagation) event.stopPropagation(); }, start: function(event) { var touches = event.touches[0]; // measure start values start = { // get initial touch coords x: touches.pageX, y: touches.pageY, // store time to determine touch duration time: +new Date }; // used for testing first move event isScrolling = undefined; // reset delta and end measurements delta = {}; // attach touchmove and touchend listeners element.addEventListener('touchmove', this, false); element.addEventListener('touchend', this, false); }, move: function(event) { // ensure swiping with one touch and not pinching if ( event.touches.length > 1 || event.scale && event.scale !== 1) return if (options.disableScroll) event.preventDefault(); var touches = event.touches[0]; // measure change in x and y delta = { x: touches.pageX - start.x, y: touches.pageY - start.y } // determine if scrolling test has run - one time test if ( typeof isScrolling == 'undefined') { isScrolling = !!( isScrolling || Math.abs(delta.x) < Math.abs(delta.y) ); } // if user is not trying to scroll vertically if (!isScrolling) { // prevent native scrolling event.preventDefault(); // stop slideshow stop(); // increase resistance if first or last slide if (options.continuous) { // we don't add resistance at the end translate(circle(index-1), delta.x + slidePos[circle(index-1)], 0); translate(index, delta.x + slidePos[index], 0); translate(circle(index+1), delta.x + slidePos[circle(index+1)], 0); } else { delta.x = delta.x / ( (!index && delta.x > 0 // if first slide and sliding left || index == slides.length - 1 // or if last slide and sliding right && delta.x < 0 // and if sliding at all ) ? ( Math.abs(delta.x) / width + 1 ) // determine resistance level : 1 ); // no resistance if false // translate 1:1 translate(index-1, delta.x + slidePos[index-1], 0); translate(index, delta.x + slidePos[index], 0); translate(index+1, delta.x + slidePos[index+1], 0); } } }, end: function(event) { // measure duration var duration = +new Date - start.time; // determine if slide attempt triggers next/prev slide var isValidSlide = Number(duration) < 250 // if slide duration is less than 250ms && Math.abs(delta.x) > 20 // and if slide amt is greater than 20px || Math.abs(delta.x) > width/2; // or if slide amt is greater than half the width // determine if slide attempt is past start and end var isPastBounds = !index && delta.x > 0 // if first slide and slide amt is greater than 0 || index == slides.length - 1 && delta.x < 0; // or if last slide and slide amt is less than 0 if (options.continuous) isPastBounds = false; // determine direction of swipe (true:right, false:left) var direction = delta.x < 0; // if not scrolling vertically if (!isScrolling) { if (isValidSlide && !isPastBounds) { if (direction) { if (options.continuous) { // we need to get the next in this direction in place move(circle(index-1), -width, 0); move(circle(index+2), width, 0); } else { move(index-1, -width, 0); } move(index, slidePos[index]-width, speed); move(circle(index+1), slidePos[circle(index+1)]-width, speed); index = circle(index+1); } else { if (options.continuous) { // we need to get the next in this direction in place move(circle(index+1), width, 0); move(circle(index-2), -width, 0); } else { move(index+1, width, 0); } move(index, slidePos[index]+width, speed); move(circle(index-1), slidePos[circle(index-1)]+width, speed); index = circle(index-1); } options.callback && options.callback(index, slides[index]); } else { if (options.continuous) { move(circle(index-1), -width, speed); move(index, 0, speed); move(circle(index+1), width, speed); } else { move(index-1, -width, speed); move(index, 0, speed); move(index+1, width, speed); } } } // kill touchmove and touchend event listeners until touchstart called again element.removeEventListener('touchmove', events, false) element.removeEventListener('touchend', events, false) }, transitionEnd: function(event) { if (parseInt(event.target.getAttribute('data-index'), 10) == index) { if (delay) begin(); options.transitionEnd && options.transitionEnd.call(event, index, slides[index]); } } } // trigger setup setup(); // start auto slideshow if applicable if (delay) begin(); // add event listeners if (browser.addEventListener) { // set touchstart event on element if (browser.touch) element.addEventListener('touchstart', events, false); if (browser.transitions) { element.addEventListener('webkitTransitionEnd', events, false); element.addEventListener('msTransitionEnd', events, false); element.addEventListener('oTransitionEnd', events, false); element.addEventListener('otransitionend', events, false); element.addEventListener('transitionend', events, false); } // set resize event on window window.addEventListener('resize', events, false); } else { window.onresize = function () { setup() }; // to play nice with old IE } // expose the Swipe API return { setup: function() { setup(); }, slide: function(to, speed) { // cancel slideshow stop(); slide(to, speed); }, prev: function() { // cancel slideshow stop(); prev(); }, next: function() { // cancel slideshow stop(); next(); }, getPos: function() { // return current index position return index; }, getNumSlides: function() { // return total number of slides return length; }, kill: function() { // cancel slideshow stop(); // reset element element.style.width = 'auto'; element.style.left = 0; // reset slides var pos = slides.length; while(pos--) { var slide = slides[pos]; slide.style.width = '100%'; slide.style.left = 0; if (browser.transitions) translate(pos, 0, 0); } // removed event listeners if (browser.addEventListener) { // remove current event listeners element.removeEventListener('touchstart', events, false); element.removeEventListener('webkitTransitionEnd', events, false); element.removeEventListener('msTransitionEnd', events, false); element.removeEventListener('oTransitionEnd', events, false); element.removeEventListener('otransitionend', events, false); element.removeEventListener('transitionend', events, false); window.removeEventListener('resize', events, false); } else { window.onresize = null; } } } } if ( window.jQuery || window.Zepto ) { (function($) { $.fn.Swipe = function(params) { return this.each(function() { $(this).data('Swipe', new Swipe($(this)[0], params)); }); } })( window.jQuery || window.Zepto ) } function wptouchFdnSetupMenu( menuContainer ) { menuContainer = jQuery( menuContainer ); menuContainer.find( 'li.menu-item ul' ).each( function() { if ( !jQuery( this ).children().length > 0 ) { jQuery( this ).remove(); } }); menuContainer.find( 'li.menu-item' ).has( 'ul' ).addClass( 'has_children' ).prepend( '<span></span>' ); jQuery( 'ul li.has_children span', menuContainer ).on( 'click', function( e ) { jQuery( this ).toggleClass( 'toggle' ).parent().toggleClass( 'open-tree' ); jQuery( this ).parent().find( 'ul' ).first().webkitSlideToggle(); e.preventDefault(); e.stopPropagation(); }); //If parent links are turned off var noParentLinks = jQuery( 'ul.no-parent-links' ); if ( jQuery( noParentLinks ).length ) { menuContainer.each( function(){ jQuery( noParentLinks, this ).off().on( 'click', 'li.has_children > a', function( e ){ jQuery( this ).parent().find( 'span' ).trigger( 'click' ); e.preventDefault(); e.stopPropagation(); }); }); } } // Setup show/hide menus function wptouchFdnSetupAllMenus() { jQuery( '.show-hide-menu, .slide-menu' ).each( function() { var menuId = jQuery( this ).prop( 'id' ); if ( menuId ) { wptouchFdnSetupMenu( '#' + menuId ); } }); } function wptouchDoFdnMenuReady() { wptouchFdnSetupAllMenus(); } jQuery( document ).ready( function() { wptouchDoFdnMenuReady(); } ); /* WPtouch Pro Foundation Base JS */ /* Description: This file holds all the default jQuery & Ajax functions for the Foundation parent theme on mobile & tablets, used by all child themes */ // Try to get out of frames! function wptouchFdnEscFrames() { if ( window.top != window.self && window.top.location.pathname.indexOf( 'customize.php' ) == '-1' ) { window.top.location = self.location.href; } } function wptouchFdnIfFixed() { if ( wptouchFdnHasFixedPos() ) { jQuery( 'body' ).addClass( 'has-fixed' ); } } function wptouchFdnBindBackButtons( buttonElement ) { if ( typeof( buttonElement ) === 'undefined' ) buttonElement = '.back-button'; jQuery( buttonElement ).on( 'click', function( e ) { history.back(); e.preventDefault(); }); } function wptouchFdnBindFwdButtons( buttonElement ) { if ( typeof( buttonElement ) === 'undefined' ) buttonElement = '.fwd-button'; jQuery( buttonElement ).on( 'click', function( e ) { history.forward(); e.preventDefault(); }); } // Try to make smaller elements nicer in posts function wptouchFdnCenterImages( elements, imgWidth ) { jQuery( elements ).each( function() { if ( !jQuery( this ).hasClass( 'aligncenter' ) && jQuery( this ).width() > imgWidth ) { jQuery( this ).not('.post-thumbnail').addClass( 'aligncenter' ); } }); } function wptouchFdnSetupSlideToggles() { jQuery( '.slide-toggle' ).each( function() { var targetId = jQuery( this ).attr( 'data-effect-target' ); wptouchFdnSlideToggle( this, '#' + targetId, 500 ); }); } /* Detect screen sizes and other device details and add or remove corresponding 'smartphone' or 'tablet' classes Using document.body.clientWidth because it's faster (and it's what jQuery uses under the hood, anyways) */ function wptouchFdnUpdateDevice() { var bodyEl = jQuery( 'body' ); // Update the body class if the device width is equal to or bigger than 768px if ( document.body.clientWidth < 768 && !bodyEl.hasClass( 'smartphone' ) ) { bodyEl.addClass( 'smartphone' ).removeClass( 'tablet' ); // Create a cookie for the device class so we can reference it via PHP afterwards if needed wptouchCreateCookie( 'wptouch-device-type', 'smartphone', 365 ); } else if ( document.body.clientWidth >= 768 && !bodyEl.hasClass( 'tablet' ) ) { bodyEl.addClass( 'tablet' ).removeClass( 'smartphone' ); // Create a cookie for the device class so we can reference it via PHP afterwards if needed wptouchCreateCookie( 'wptouch-device-type', 'tablet', 365 ); } } function wptouchFdnUpdateOrientation() { var bodyEl = jQuery( 'body' ); // Update scroll position slightly to fix fixed elements // var scrollPosition = bodyEl.scrollTop() + 1; // window.scrollTo( 0, scrollPosition, 100 ); // If it's a smartphone & the clientWidth is less than 480, assume it's portrait, else landscape (works for iPhone 5, as well ) if ( bodyEl.hasClass( 'smartphone' ) ) { if ( document.body.clientWidth < 480 ) { bodyEl.addClass( 'portrait' ).removeClass( 'landscape' ); wptouchCreateCookie( 'wptouch-device-orientation', 'portrait', 365 ); } else { bodyEl.addClass( 'landscape' ).removeClass( 'portrait' ); wptouchCreateCookie( 'wptouch-device-orientation', 'landscape', 365 ); } } // If it's a tablet & the clientWidth is less than 1024, assume it's portrait, else landscape if ( bodyEl.hasClass( 'tablet' ) ) { if ( document.body.clientWidth < 1024 ) { bodyEl.addClass( 'portrait' ).removeClass( 'landscape' ); wptouchCreateCookie( 'wptouch-device-orientation', 'portrait', 365 ); } else { bodyEl.addClass( 'landscape' ).removeClass( 'portrait' ); wptouchCreateCookie( 'wptouch-device-orientation', 'landscape', 365 ); } } } function wptouchFdnDoDeviceAndOrientationListener() { jQuery( window ).on( 'resize', function() { wptouchFdnUpdateDevice(); wptouchFdnUpdateOrientation(); }).resize(); } // Back to top links in themes function wptouchFdnSetupBackToTopLinks() { jQuery( 'body' ).on( 'click', '.back-to-top', function( e ){ jQuery( 'body, html' ).animate( { scrollTop: jQuery( 'body' ).offset().top }, 550 ); e.preventDefault(); }); } function wptouchFdnSetupShowHideToggles() { jQuery( '.show-hide-toggle' ).each( function() { var targetId = jQuery( this ).attr( 'data-effect-target' ); var closeId = jQuery( this ).attr( 'data-effect-close' ); var linkId = jQuery( this ).prop( 'id' ); jQuery( this ).on( 'click', function( e ) { if ( typeof( closeId ) !== 'undefined' ) { var originalId = jQuery( '#' + closeId ).attr( 'data-source-click' ); if ( typeof( originalId ) !== 'undefined' ) { jQuery( '#' + originalId ).removeClass( 'toggle-open' ); jQuery( '#' + closeId ).data( 'data-source-click', '' ); } jQuery( '#' + closeId ).hide(); } jQuery( this ).toggleClass( 'toggle-open' ); jQuery( '#' + targetId ).attr( 'data-source-click', linkId ).webkitSlideToggle(); e.preventDefault(); e.stopImmediatePropagation(); }); }); } function wptouchFdnSwitchToggle() { jQuery( '#switch' ).on( 'click', '.off', function() { jQuery( '.on' ).removeClass( 'active' ); jQuery( this ).addClass( 'active' ); }); } function wptouchFdnHandleShortcode() { if ( !navigator.standalone ) { jQuery( '.wptouch-shortcode-mobile-only' ).show(); } } function wptouchFdnSetupjQuery() { // jQuery function opacityToggle() jQuery.fn.opacityToggle = function( speed, easing, callback ) { return this.animate( { opacity: 'toggle' }, speed, easing, callback ); } // jQuery function webkitSlideToggle() jQuery.fn.webkitSlideToggle = function() { this.toggle(); } // jQuery function viewportCenter() jQuery.fn.viewportCenter = function() { this.css( 'position', 'absolute' ); this.css( 'top', ( ( jQuery( window ).height() - this.outerHeight() ) / 3 ) + jQuery( window ).scrollTop() + 'px' ); this.css( 'left', ( ( jQuery( window ).width() - this.outerWidth() ) / 2 ) + jQuery( window ).scrollLeft() + 'px' ); return this; } // Set form elements tabindex automagically jQuery( function() { var tabindex = 1; jQuery( 'input, select, textarea' ).each( function() { if ( this.type != "hidden" ) { var inputToTab = jQuery( this ); inputToTab.attr( 'tabindex', tabindex ); tabindex++; } }); }); } function wptouchFdnSetupWPML() { var wpmlLanguageSwitch = jQuery( '#wpml-language-chooser select' ); if ( wpmlLanguageSwitch.length ) { wpmlLanguageSwitch.change( function() { var switchLink = wpmlLanguageSwitch.val(); document.location.href = switchLink; }); } } function wptouchFdnBaseReady() { wptouchFdnEscFrames(); wptouchFdnIfFixed(); wptouchFdnBindBackButtons(); wptouchFdnBindFwdButtons(); wptouchFdnCenterImages( '.post img, .wp-caption', 105 ); wptouchFdnSetupSlideToggles(); wptouchFdnDoDeviceAndOrientationListener(); wptouchFdnSetupBackToTopLinks(); wptouchFdnSetupShowHideToggles(); wptouchFdnSwitchToggle(); wptouchFdnHandleShortcode(); wptouchFdnSetupjQuery(); wptouchFdnSetupWPML(); } jQuery( document ).ready( function() { wptouchFdnBaseReady(); } ); /* WPtouch Pro Public Foundation JavaScript Functions */ /* Description: These functions can be used in themes as needed */ function wptouchFdnIsiOS6() { return ( '-webkit-filter' in document.body.style ); } function wptouchFdnHasFixedPos() { if ('-webkit-overflow-scrolling' in document.body.style ){ return true; } else { return false; } } // Function for fade-toggling hidden elements function wptouchFdnShowHideToggle( linkTrigger, hiddenElement ) { jQuery( linkTrigger ).on( 'click', function( e ) { jQuery( linkTrigger ).toggleClass( 'toggle-open' ); jQuery( hiddenElement ).opacityToggle( 380 ); e.preventDefault(); }); } // Function for slide-toggling hidden elements function wptouchFdnSlideToggle( linkTrigger, hiddenElement, speed ) { jQuery( linkTrigger ).on( 'click', function( e ) { jQuery( linkTrigger ).toggleClass( 'toggle-open' ); jQuery( hiddenElement ).slideToggle( speed ); e.preventDefault(); }); } // Create a cookie function wptouchCreateCookie( name, value, days ) { if ( days ) { var date = new Date(); date.setTime( date.getTime() + ( days*24*60*60*1000 ) ); var expires = '; expires='+date.toGMTString(); } else var expires = ''; document.cookie = name+'='+value+expires+'; path='+wptouchMain.siteurl; } // Read a cookie function wptouchReadCookie( name ) { var nameEQ = name + "="; var ca = document.cookie.split( ';' ); for( var i=0; i < ca.length; i++ ) { var c = ca[i]; while ( c.charAt( 0 )==' ' ) c = c.substring( 1, c.length ); if ( c.indexOf( nameEQ ) == 0 ) return c.substring( nameEQ.length, c.length ); } return null; } // Erase a cookie function wptouchEraseCookie( name ) { wptouchCreateCookie( name, '', -1 ); } // List all cookies (useful in alerts for testing) function wptouchListCookies() { var theCookies = document.cookie.split(';'); var aString = ''; for (var i = 1 ; i <= theCookies.length; i++) { aString += i + ' ' + theCookies[i-1] + "\n"; } return aString; } /* WPtouch Foundation Google Fonts Code */ var googleBodyEls = ( 'form *' ); var googleHeadingEls = ( 'h1, h2, h3, h4, h5, h6' ); function addGoogleFontClasses() { jQuery( googleBodyEls ).addClass( 'body-font' ); jQuery( googleHeadingEls ).addClass( 'heading-font' ); } jQuery( document ).ready( function() { addGoogleFontClasses(); }); jQuery( document ).ajaxComplete( function() { addGoogleFontClasses(); }); function doFoundationLoadMoreReady() { var loadMoreLink = 'a.load-more-link'; jQuery( '#content' ).on( 'click', loadMoreLink, function( e ) { jQuery( loadMoreLink ).addClass( 'ajaxing' ).text( wptouchFdn.ajaxLoading ).prepend( '<span class="spinner"></span>' ); jQuery( '.spinner' ).spin( 'tiny' ); var loadMoreURL = jQuery( loadMoreLink ).attr( 'rel' ); jQuery( loadMoreLink ).after( "<span class='ajax-target'></span>" ); jQuery( '.ajax-target' ).load( loadMoreURL + ' #content > div, #content .load-more-link', function() { jQuery( '.ajax-target' ).replaceWith( jQuery( this ).html() ); jQuery( '.ajaxing' ).animate( { height: 'toggle' }, 200, 'linear', function(){ jQuery( this ).remove(); } ); }); e.preventDefault(); }); // Load More Comments var loadMoreComsLink = '.load-more-comments-wrap a'; jQuery( '.commentlist' ).on( 'click', loadMoreComsLink, function() { jQuery( loadMoreComsLink ).addClass( 'ajaxing' ).text( wptouchFdn.ajaxLoading ).prepend( '<span class="spinner"></span>' ); jQuery( '.spinner' ).spin( 'tiny' ); var loadMoreURL = jQuery( loadMoreComsLink ).prop( 'href' ); jQuery( loadMoreComsLink ).parent().after( "<span class='ajax-target'></span>" ); jQuery( '.ajax-target' ).load( loadMoreURL + ' ol.commentlist > li', function() { jQuery( '.ajax-target' ).replaceWith( jQuery( this ).html() ); jQuery( '.ajaxing' ).animate( { height: 'toggle' }, 200, 'linear', function(){ jQuery( this ).parent().remove(); } ); }); return false; }); // Load More Post Search Results var loadMorePostSearchLink = 'a.load-more-post-link'; jQuery( '#content' ).on( 'click', loadMorePostSearchLink, function( e ) { jQuery( loadMorePostSearchLink ).addClass( 'ajaxing' ).text( wptouchFdn.ajaxLoading ).prepend( '<span class="spinner"></span>' ); jQuery( '.spinner' ).spin( 'tiny' ); var loadMoreURL = jQuery( loadMorePostSearchLink ).attr( 'rel' ); jQuery( loadMorePostSearchLink ).after( "<span class='ajax-target'></span>" ); jQuery( '.ajax-target' ).load( loadMoreURL + ' #content #post-results, #content .load-more-post-link', function() { jQuery( '.ajax-target' ).replaceWith( jQuery( this ).html() ); jQuery( '.ajaxing' ).animate( { height: 'toggle' }, 200, 'linear', function(){ jQuery( this ).remove(); } ); }); e.preventDefault(); }); // Load More Page Search Results var loadMorePageSearchLink = 'a.load-more-page-link'; jQuery( '#content' ).on( 'click', loadMorePageSearchLink, function( e ) { jQuery( loadMorePageSearchLink ).addClass( 'ajaxing' ).text( wptouchFdn.ajaxLoading ).prepend( '<span class="spinner"></span>' ); jQuery( '.spinner' ).spin( 'tiny' ); var loadMoreURL = jQuery( loadMorePageSearchLink ).attr( 'rel' ); jQuery( loadMorePageSearchLink ).after( "<span class='ajax-target'></span>" ); jQuery( '.ajax-target' ).load( loadMoreURL + ' #content #page-results, #content .load-more-page-link', function() { jQuery( '.ajax-target' ).replaceWith( jQuery( this ).html() ); jQuery( '.ajaxing' ).animate( { height: 'toggle' }, 200, 'linear', function(){ jQuery( this ).remove(); } ); }); e.preventDefault(); }); } jQuery( document ).ready( function() { doFoundationLoadMoreReady(); }); /*jshint browser:true */ /*! * FitVids 1.1 * * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ * Released under the WTFPL license - http://sam.zoy.org/wtfpl/ * */ ;(function( $ ){ 'use strict'; $.fn.fitVids = function( options ) { var settings = { customSelector: null, ignore: null }; if(!document.getElementById('fit-vids-style')) { // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js var head = document.head || document.getElementsByTagName('head')[0]; var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'; var div = document.createElement("div"); div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>'; head.appendChild(div.childNodes[1]); } if ( options ) { $.extend( settings, options ); } return this.each(function(){ var selectors = [ 'iframe[src*="player.vimeo.com"]', 'iframe[src*="youtube.com"]', 'iframe[src*="youtube-nocookie.com"]', 'iframe[src*="kickstarter.com"][src*="video.html"]', 'iframe[src*="funnyordie.com"]', 'iframe[src*="media.mtvnservices.com"]', 'iframe[src*="trailers.apple.com"]', 'iframe[src*="media.mtvnservices.com"]', 'iframe[src*="brightcove.com"]', 'iframe[src*="break.com"]', 'iframe[src*="blip.tv"]', 'iframe[src*="d.yimg.com"]', 'iframe[src*="movies.yahoo.com"]', 'iframe[src*="vine.co"]', 'iframe[src*="dailymotion.com"]', 'iframe[src*="s.mcstatic.com"]', "object", "embed" ]; if (settings.customSelector) { selectors.push(settings.customSelector); } var ignoreList = '.fitvidsignore'; if(settings.ignore) { ignoreList = ignoreList + ', ' + settings.ignore; } var $allVideos = $(this).find(selectors.join(',')); $allVideos = $allVideos.not('object object'); // SwfObj conflict patch $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. $allVideos.each(function(count){ var $this = $(this); if($this.parents(ignoreList).length > 0) { return; // Disable FitVids on this video. } if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) { $this.attr('height', 9); $this.attr('width', 16); } var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), aspectRatio = height / width; if(!$this.attr('id')){ var videoID = 'fitvid' + count; $this.attr('id', videoID); } $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); $this.removeAttr('height').removeAttr('width'); }); }); }; // Works with either jQuery or Zepto })( window.jQuery || window.Zepto ); /* WPtouch Foundation Media Handling Code */ function handleVids(){ // Add dynamic automatic video resizing via fitVids (if enabled) if ( jQuery.isFunction( jQuery.fn.fitVids ) ) { jQuery( '#content' ).fitVids(); } // If we have html5 videos, add controls for them if they're not specified, CSS will style them appropriately if ( jQuery( '#content video' ).length ) { jQuery( '#content video' ).attr( 'controls', 'controls' ); } } // Fixes all HTML5 videos from trigging when menus are overtop function listenForMenuOpenHideVideos(){ jQuery( '.show-hide-toggle' ).on( 'click', function(){ setTimeout( function(){ var selectors = jQuery( '.css-videos video, .css-videos embed, .css-videos object, .css-videos .mejs-container' ); var menuDisplay = jQuery( '#menu, #alt-menu' ).css( 'display' ); if ( menuDisplay == 'block' ) { selectors.css( 'visibility', 'hidden' ); } else { selectors.css( 'visibility', 'visible' ); } }, 500 ); }); } jQuery( document ).ready( function() { handleVids(); listenForMenuOpenHideVideos(); }); function doFoundationFeaturedLoaded() { foundationCreateDots(); var slideNumber = 0; var isContinuous = false; var slideOption = '0'; if ( jQuery( '#slider' ).hasClass( 'slide' ) ) { slideOption = '4000'; if ( jQuery( '#slider' ).hasClass( 'slow') ) { slideOption = '6000'; } else if ( jQuery( '#slider').hasClass( 'fast') ) { slideOption = '2500'; } } if ( jQuery( '#slider' ).hasClass( 'continuous' ) ) { isContinuous = true; } var bullets = jQuery( '.dots' ).find( 'li' ); var sliderOptions = { startSlide: slideNumber, continuous: isContinuous, callback: function( pos ) { if ( isNaN( pos ) ) { pos = 0; } var i = bullets.length; if ( i > 0 ) { while (i--) { bullets[i].className = ' '; } bullets[pos].className = 'active'; } } } // only include this parameter if it's non-zero if ( slideOption > 0 && !jQuery( 'body' ).hasClass( 'rtl' ) ) { sliderOptions.auto = slideOption; } jQuery( '.one-swipe-image' ).css( 'visibility', 'visible' ); var featuredSlider = new Swipe( document.getElementById( 'slider' ), sliderOptions ); } function foundationCreateDots() { var sliderEl = jQuery( '#slider' ); var images = sliderEl.find( 'a' ); var slideNumber = 0; // Create dots var dots = '<ul class="dots">'; for ( i = 0; i < images.length; i++ ) { dots = dots + '<li data-pos="'+i+'"> </li>'; } dots = dots + '</ul>'; sliderEl.before( dots ); jQuery( '.dots' ).find( 'li[data-pos="'+slideNumber+'"]' ).addClass( 'active' ); } jQuery( document ).ready( function() { if ( jQuery( '#slider' ).length ) { doFoundationFeaturedLoaded(); } }); /* WPtouch Foundation FastClick w/ jQuery Code */ jQuery( function() { FastClick.attach( document.body ); }); (function(){function FastClick(layer,options){var oldOnClick;options=options||{};this.trackingClick=false;this.trackingClickStart=0;this.targetElement=null;this.touchStartX=0;this.touchStartY=0;this.lastTouchIdentifier=0;this.touchBoundary=options.touchBoundary||10;this.layer=layer;this.tapDelay=options.tapDelay||200;this.tapTimeout=options.tapTimeout||700;if(FastClick.notNeeded(layer)){return}function bind(method,context){return function(){return method.apply(context,arguments)}}var methods=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"];var context=this;for(var i=0,l=methods.length;i<l;i++){context[methods[i]]=bind(context[methods[i]],context)}if(deviceIsAndroid){layer.addEventListener("mouseover",this.onMouse,true);layer.addEventListener("mousedown",this.onMouse,true);layer.addEventListener("mouseup",this.onMouse,true)}layer.addEventListener("click",this.onClick,true);layer.addEventListener("touchstart",this.onTouchStart,false);layer.addEventListener("touchmove",this.onTouchMove,false);layer.addEventListener("touchend",this.onTouchEnd,false);layer.addEventListener("touchcancel",this.onTouchCancel,false);if(!Event.prototype.stopImmediatePropagation){layer.removeEventListener=function(type,callback,capture){var rmv=Node.prototype.removeEventListener;if(type==="click"){rmv.call(layer,type,callback.hijacked||callback,capture)}else{rmv.call(layer,type,callback,capture)}};layer.addEventListener=function(type,callback,capture){var adv=Node.prototype.addEventListener;if(type==="click"){adv.call(layer,type,callback.hijacked||(callback.hijacked=function(event){if(!event.propagationStopped){callback(event)}}),capture)}else{adv.call(layer,type,callback,capture)}}}if(typeof layer.onclick==="function"){oldOnClick=layer.onclick;layer.addEventListener("click",function(event){oldOnClick(event)},false);layer.onclick=null}}var deviceIsWindowsPhone=navigator.userAgent.indexOf("Windows Phone")>=0;var deviceIsAndroid=navigator.userAgent.indexOf("Android")>0&&!deviceIsWindowsPhone;var deviceIsIOS=/iP(ad|hone|od)/.test(navigator.userAgent)&&!deviceIsWindowsPhone;var deviceIsIOS4=deviceIsIOS&&(/OS 4_\d(_\d)?/).test(navigator.userAgent);var deviceIsIOSWithBadTarget=deviceIsIOS&&(/OS [6-7]_\d/).test(navigator.userAgent);var deviceIsBlackBerry10=navigator.userAgent.indexOf("BB10")>0;FastClick.prototype.needsClick=function(target){switch(target.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(target.disabled){return true}break;case"input":if((deviceIsIOS&&target.type==="file")||target.disabled){return true}break;case"label":case"iframe":case"video":return true}return(/\bneedsclick\b/).test(target.className)};FastClick.prototype.needsFocus=function(target){switch(target.nodeName.toLowerCase()){case"textarea":return true;case"select":return !deviceIsAndroid;case"input":switch(target.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return false}return !target.disabled&&!target.readOnly;default:return(/\bneedsfocus\b/).test(target.className)}};FastClick.prototype.sendClick=function(targetElement,event){var clickEvent,touch;if(document.activeElement&&document.activeElement!==targetElement){document.activeElement.blur()}touch=event.changedTouches[0];clickEvent=document.createEvent("MouseEvents");clickEvent.initMouseEvent(this.determineEventType(targetElement),true,true,window,1,touch.screenX,touch.screenY,touch.clientX,touch.clientY,false,false,false,false,0,null);clickEvent.forwardedTouchEvent=true;targetElement.dispatchEvent(clickEvent)};FastClick.prototype.determineEventType=function(targetElement){if(deviceIsAndroid&&targetElement.tagName.toLowerCase()==="select"){return"mousedown"}return"click"};FastClick.prototype.focus=function(targetElement){var length;if(deviceIsIOS&&targetElement.setSelectionRange&&targetElement.type.indexOf("date")!==0&&targetElement.type!=="time"&&targetElement.type!=="month"){length=targetElement.value.length;targetElement.setSelectionRange(length,length)}else{targetElement.focus()}};FastClick.prototype.updateScrollParent=function(targetElement){var scrollParent,parentElement;scrollParent=targetElement.fastClickScrollParent;if(!scrollParent||!scrollParent.contains(targetElement)){parentElement=targetElement;do{if(parentElement.scrollHeight>parentElement.offsetHeight){scrollParent=parentElement;targetElement.fastClickScrollParent=parentElement;break}parentElement=parentElement.parentElement}while(parentElement)}if(scrollParent){scrollParent.fastClickLastScrollTop=scrollParent.scrollTop}};FastClick.prototype.getTargetElementFromEventTarget=function(eventTarget){if(eventTarget.nodeType===Node.TEXT_NODE){return eventTarget.parentNode}return eventTarget};FastClick.prototype.onTouchStart=function(event){var targetElement,touch,selection;if(event.targetTouches.length>1){return true}targetElement=this.getTargetElementFromEventTarget(event.target);touch=event.targetTouches[0];if(deviceIsIOS){selection=window.getSelection();if(selection.rangeCount&&!selection.isCollapsed){return true}if(!deviceIsIOS4){if(touch.identifier&&touch.identifier===this.lastTouchIdentifier){event.preventDefault();return false}this.lastTouchIdentifier=touch.identifier;this.updateScrollParent(targetElement)}}this.trackingClick=true;this.trackingClickStart=event.timeStamp;this.targetElement=targetElement;this.touchStartX=touch.pageX;this.touchStartY=touch.pageY;if((event.timeStamp-this.lastClickTime)<this.tapDelay){event.preventDefault()}return true};FastClick.prototype.touchHasMoved=function(event){var touch=event.changedTouches[0],boundary=this.touchBoundary;if(Math.abs(touch.pageX-this.touchStartX)>boundary||Math.abs(touch.pageY-this.touchStartY)>boundary){return true}return false};FastClick.prototype.onTouchMove=function(event){if(!this.trackingClick){return true}if(this.targetElement!==this.getTargetElementFromEventTarget(event.target)||this.touchHasMoved(event)){this.trackingClick=false;this.targetElement=null}return true};FastClick.prototype.findControl=function(labelElement){if(labelElement.control!==undefined){return labelElement.control}if(labelElement.htmlFor){return document.getElementById(labelElement.htmlFor)}return labelElement.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")};FastClick.prototype.onTouchEnd=function(event){var forElement,trackingClickStart,targetTagName,scrollParent,touch,targetElement=this.targetElement;if(!this.trackingClick){return true}if((event.timeStamp-this.lastClickTime)<this.tapDelay){this.cancelNextClick=true;return true}if((event.timeStamp-this.trackingClickStart)>this.tapTimeout){return true}this.cancelNextClick=false;this.lastClickTime=event.timeStamp;trackingClickStart=this.trackingClickStart;this.trackingClick=false;this.trackingClickStart=0;if(deviceIsIOSWithBadTarget){touch=event.changedTouches[0];targetElement=document.elementFromPoint(touch.pageX-window.pageXOffset,touch.pageY-window.pageYOffset)||targetElement;targetElement.fastClickScrollParent=this.targetElement.fastClickScrollParent}targetTagName=targetElement.tagName.toLowerCase();if(targetTagName==="label"){forElement=this.findControl(targetElement);if(forElement){this.focus(targetElement);if(deviceIsAndroid){return false}targetElement=forElement}}else{if(this.needsFocus(targetElement)){if((event.timeStamp-trackingClickStart)>100||(deviceIsIOS&&window.top!==window&&targetTagName==="input")){this.targetElement=null;return false}this.focus(targetElement);this.sendClick(targetElement,event);if(!deviceIsIOS||targetTagName!=="select"){this.targetElement=null;event.preventDefault()}return false}}if(deviceIsIOS&&!deviceIsIOS4){scrollParent=targetElement.fastClickScrollParent;if(scrollParent&&scrollParent.fastClickLastScrollTop!==scrollParent.scrollTop){return true}}if(!this.needsClick(targetElement)){event.preventDefault();this.sendClick(targetElement,event)}return false};FastClick.prototype.onTouchCancel=function(){this.trackingClick=false;this.targetElement=null};FastClick.prototype.onMouse=function(event){if(!this.targetElement){return true}if(event.forwardedTouchEvent){return true}if(!event.cancelable){return true}if(!this.needsClick(this.targetElement)||this.cancelNextClick){if(event.stopImmediatePropagation){event.stopImmediatePropagation()}else{event.propagationStopped=true}event.stopPropagation();event.preventDefault();return false}return true};FastClick.prototype.onClick=function(event){var permitted;if(this.trackingClick){this.targetElement=null;this.trackingClick=false;return true}if(event.target.type==="submit"&&event.detail===0){return true}permitted=this.onMouse(event);if(!permitted){this.targetElement=null}return permitted};FastClick.prototype.destroy=function(){var layer=this.layer;if(deviceIsAndroid){layer.removeEventListener("mouseover",this.onMouse,true);layer.removeEventListener("mousedown",this.onMouse,true);layer.removeEventListener("mouseup",this.onMouse,true)}layer.removeEventListener("click",this.onClick,true);layer.removeEventListener("touchstart",this.onTouchStart,false);layer.removeEventListener("touchmove",this.onTouchMove,false);layer.removeEventListener("touchend",this.onTouchEnd,false);layer.removeEventListener("touchcancel",this.onTouchCancel,false)};FastClick.notNeeded=function(layer){var metaViewport;var chromeVersion;var blackberryVersion;var firefoxVersion;if(typeof window.ontouchstart==="undefined"){return true}chromeVersion=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1];if(chromeVersion){if(deviceIsAndroid){metaViewport=document.querySelector("meta[name=viewport]");if(metaViewport){if(metaViewport.content.indexOf("user-scalable=no")!==-1){return true}if(chromeVersion>31&&document.documentElement.scrollWidth<=window.outerWidth){return true}}}else{return true}}if(deviceIsBlackBerry10){blackberryVersion=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/);if(blackberryVersion[1]>=10&&blackberryVersion[2]>=3){metaViewport=document.querySelector("meta[name=viewport]");if(metaViewport){if(metaViewport.content.indexOf("user-scalable=no")!==-1){return true}if(document.documentElement.scrollWidth<=window.outerWidth){return true}}}}if(layer.style.msTouchAction==="none"||layer.style.touchAction==="manipulation"){return true}firefoxVersion=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1];if(firefoxVersion>=27){metaViewport=document.querySelector("meta[name=viewport]");if(metaViewport&&(metaViewport.content.indexOf("user-scalable=no")!==-1||document.documentElement.scrollWidth<=window.outerWidth)){return true}}if(layer.style.touchAction==="none"||layer.style.touchAction==="manipulation"){return true}return false};FastClick.attach=function(layer,options){return new FastClick(layer,options)};if(typeof define==="function"&&typeof define.amd==="object"&&define.amd){define(function(){return FastClick})}else{if(typeof module!=="undefined"&&module.exports){module.exports=FastClick.attach;module.exports.FastClick=FastClick}else{window.FastClick=FastClick}}}()); /* * jquery.tappable.js version 0.2 * * 'Tapped' touch behaviour for elements * * - A 'touched' class is added to the element as soon as it is tapped (or, in * the case of a "long tap" - when the user keeps their finger down for a * moment - after a specified delay). * * - The supplied callback is called as soon as the user lifts their finger. * * - The class is removed, and firing of the callback cancelled, if the user moves * their finger (though this can be disabled). * * - If the browser doesn't support touch events, it falls back to click events. * * More detailed explanation of behaviour and background: * http://aanandprasad.com/articles/jquery-tappable/ * * See it in action here: http://nnnnext.com * * I recommend that you add a `-webkit-tap-highlight-color: rgba(0,0,0,0)` * style rule to any elements you wish to make tappable, to hide the ugly grey * click overlay. * * Tested on iOS 4.3 and some version of Android, I don't know. Leave me alone. * * Basic usage: * * $(element).tappable(function() { console.log("Hello World!") }) * * Advanced usage: * * $(element).tappable({ * callback: function() { console.log("Hello World!") }, * cancelOnMove: false, * touchDelay: 150, * onlyIf: function(el) { return $(el).hasClass('enabled') } * }) * * Options: * * cancelOnMove: If truthy, then as soon as the user moves their finger, the * 'touched' class is removed from the element. When they lift * their finger, the callback will *not* be fired. Defaults to * true. * * touchDelay: Time to wait (ms) before adding the 'touched' class when the * user performs a "long tap". Best employed on elements that the * user is likely to touch while scrolling. Around 150 will work * well. Defaults to 0. * * onlyIf: Function to run as soon as the user touches the element, to * determine whether to do anything. If it returns a falsy value, * the 'touched' class will not be added and the callback will * not be fired. * */ (function($){var touchSupported=("ontouchstart" in window);$.fn.tappable=function(options){var cancelOnMove=true,onlyIf=function(){return true},touchDelay=0,callback;switch(typeof options){case"function":callback=options;break;case"object":callback=options.callback;if(typeof options.cancelOnMove!="undefined"){cancelOnMove=options.cancelOnMove}if(typeof options.onlyIf!="undefined"){onlyIf=options.onlyIf}if(typeof options.touchDelay!="undefined"){touchDelay=options.touchDelay}break}var fireCallback=function(el,event){if(typeof callback=="function"&&onlyIf(el)){callback.call(el,event)}};if(touchSupported){this.bind("touchstart",function(event){var el=this;if(onlyIf(this)){$(el).addClass("touch-started");window.setTimeout(function(){if($(el).hasClass("touch-started")){$(el).addClass("touched")}},touchDelay)}return true});this.bind("touchend",function(event){var el=this;if($(el).hasClass("touch-started")){$(el).removeClass("touched").removeClass("touch-started");fireCallback(el,event)}return true});/*this.bind("click",function(event){ event.preventDefault() });*/if(cancelOnMove){this.bind("touchmove",function(){$(this).removeClass("touched").removeClass("touch-started")})}}else{if(typeof callback=="function"){this.bind("click",function(event){if(onlyIf(this)){callback.call(this,event)}})}}return this}})(jQuery); jQuery( window ).load( function() { bindTappableEls( '.tappable, .show-hide-toggle, .slide-toggle, .menu-btn' ); }); jQuery( document ).ajaxComplete( function() { bindTappableEls( '.tappable, .show-hide-toggle, .slide-toggle, .menu-btn' ); }); function bindTappableEls( elements ){ jQuery( elements ).each( function(){ jQuery( this ).tappable({ touchDelay: 74 }); }); } // WPtouch Basic Client-side Ajax Routines function WPtouchAjax( actionName, actionParams, callback ) { var ajaxData = { action: "wptouch_client_ajax", wptouch_action: actionName, wptouch_nonce: wptouchMain.security_nonce }; for ( name in actionParams ) { ajaxData[name] = actionParams[name]; } jQuery.post( wptouchMain.ajaxurl, ajaxData, function( result ) { callback( result ); }); } jQuery( 'table' ).parent( 'p,div' ).addClass( 'table-parent' ); jQuery( '#footer .back-to-top' ).click( function( e ) { e.preventDefault(); jQuery( window ).scrollTop( 0 ); }); function doWPtouchReady() { // Parse query vars json wptouchMain.query_vars = jQuery.parseJSON( wptouchMain.query_vars ); // Shortcode var shortcodeDiv = jQuery( '.wptouch-sc-content' ); if ( shortcodeDiv.length ) { // We have a shortcode var params = { post_id: shortcodeDiv.attr( 'data-post-id' ), post_content: jQuery( '.wptouch-orig-content' ).html(), post_nonce: wptouchMain.security_nonce }; jQuery.post( wptouchMain.current_shortcode_url + '¤t_time=' + jQuery.now(), params, function( result ) { shortcodeDiv.html( result ); jQuery( document ).trigger( 'wptouch_ajax_content_loaded' ); } ); } } jQuery( document ).ready( function() { doWPtouchReady(); }); // Add the preview code to load more URLs to ensure they load the WPtouch version of blog posts function wptouchCustomizerThemeReady(){ var loadMoreLnk = jQuery( 'a.load-more-link, a.infinite-link' ); var currentRel = loadMoreLnk.attr( 'rel' ); if ( loadMoreLnk.length ) { if( currentRel.indexOf( '?' ) > -1 ) { var toAppend = '&wptouch_preview_theme=enabled'; } else { var toAppend = '?wptouch_preview_theme=enabled'; } var newRel = currentRel + toAppend; jQuery( 'a.load-more-link, a.infinite-link' ).attr( 'rel', newRel ); } } jQuery( document ).ready( function() { wptouchCustomizerThemeReady(); });