From bf65fde2013ac0463f1c31c55d18074db62527de Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Mon, 16 Apr 2012 17:18:25 -0500 Subject: [PATCH 01/38] Initial commit of Touch Integration modifications to jquery cycle. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 423 +++++++++++++++++++++++++++-- touchexample/css/style.css | 273 +++++++++++++++++++ touchexample/index.html | 88 ++++++ touchexample/js/libs/jquery.min.js | 4 + 4 files changed, 768 insertions(+), 20 deletions(-) create mode 100644 touchexample/css/style.css create mode 100644 touchexample/index.html create mode 100644 touchexample/js/libs/jquery.min.js diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index caef8ea..b0482c0 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -6,6 +6,11 @@ * Dual licensed under the MIT and GPL licenses. * http://jquery.malsup.com/license.html * Requires: jQuery v1.3.2 or later + * + * Touch Support integration features ( "TOUCHMOD" ) + * TOUCHMOD Requires: jQuery v1.4.3 or later + * Modified By: Keegan Brown -- TOUCHMOD Version: 0.9 (APR-2012) + * */ ;(function($, undefined) { "use strict"; @@ -22,7 +27,7 @@ if ($.support === undefined) { function debug(s) { if ($.fn.cycle.debug) log(s); -} +} function log() { if (window.console && console.log) console.log('[cycle] ' + Array.prototype.join.call(arguments,' ')); @@ -66,7 +71,7 @@ $.fn.cycle = function(options, arg2) { return; opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink; - + // stop existing slideshow for this container (if there is one) if (this.cycleTimeout) clearTimeout(this.cycleTimeout); @@ -181,7 +186,7 @@ function handleArguments(cont, options, arg2) { return false; } return options; - + function checkInstantResume(isPaused, arg2, cont) { if (!isPaused && arg2 === true) { // resume now! var options = $(cont).data('cycle.opts'); @@ -211,7 +216,7 @@ function destroy(cont, opts) { $(opts.next).unbind(opts.prevNextEvent); if (opts.prev) $(opts.prev).unbind(opts.prevNextEvent); - + if (opts.pager || opts.pagerAnchorBuilder) $.each(opts.pagerAnchors || [], function() { this.unbind().remove(); @@ -222,8 +227,282 @@ function destroy(cont, opts) { opts.destroy(opts); } +// +// BEGIN TOUCHMOD SUPPORT HANDLING +var supportsTouch = false; +function detectTouchSupport(bypass) { + var testEle = document.createElement('div'); + testEle.setAttribute('ontouchstart', 'return;'); + supportsTouch = !!testEle.ontouchstart; + testEle.setAttribute('ontouchstart', null); + + // Add jQuery support for CSS3 + vendor prefixes + if ( supportsTouch ) { + $.fn.cycle.addCSS3Support(); + } + testEle = null; + + return supportsTouch; +} +$.fn.cycle.haveCheckedCSS3Support = false; +$.fn.cycle.addCSS3Support = function () { + haveCheckedCSS3Support = true; + var addSupportFor = [ 'userSelect', 'userModify', 'userDrag', 'tapHighlightColor' ]; + var extraSupport = [ 'transitionDuration', 'transitionDelay', 'transform', 'transformOrigin', 'transformStyle', + 'transitionProperty', 'perspective', 'backfaceVisibility' ]; + + var checkSupportForCSS3d = false; + if ( navigator.userAgent.match(/webkit/gi) ) { + var style3d = $('').appendTo('head'); + var testEle3d = $(' ').appendTo('body'); + checkSupportForCSS3d = !!(testEle3d.css('display') == 'none'); + style3d.remove(); + testEle3d.remove(); + style3d = null; + testEle3d = null; + } else { + checkSupportForCSS3d = !navigator.userAgent.match(/webkit/gi); + } + if ( checkSupportForCSS3d ) { + var totalsup = addSupportFor.join('|') + '|' + extraSupport.join('|'); + addSupportFor = totalsup.split('|'); + } + + $( addSupportFor ).each( checkStyleSupport ); +} +function checkStyleSupport( index, prop ) { + var vendorProp, supportedProp, + // capitalize first character of the prop to test vendor prefix + capProp = prop.charAt(0).toUpperCase() + prop.slice(1), + prefixes = [ "Moz", "Webkit", "O", "ms" ], + div = document.createElement( "div" ); + + if ( prop in div.style ) { + // browser supports standard CSS property name + supportedProp = prop; + } else { + // otherwise test support for vendor-prefixed property names + for ( var i = 0; i < prefixes.length; i++ ) { + vendorProp = prefixes[i] + capProp; + if ( vendorProp in div.style ) { + supportedProp = vendorProp; + break; + } + } + } + + // avoid memory leak in IE + div = null; + // add property to $.support so it can be accessed elsewhere + $.support[ prop ] = supportedProp; + + if ( !!supportedProp && supportedProp !== prop ) { + $.cssHooks[prop] = { + get: function( elem, computed, extra ) { + return $.css( elem, supportedProp ); + }, + set: function( elem, value) { + elem.style[ supportedProp ] = value; + } + } + } + return supportedProp; +} +function bindTouchPause ($cont, touchPause, touchUnpause) { + //TOUCHMOD -- ADD PAUSE ON TOUCH BINDINGS + $cont.bind({ + touchstart: touchPause, + touchend: touchUnpause + }); +} +function bindClickAndDrag ($cont, touchPause, touchUnpause) { + //TOUCHMOD -- CLICK AND DRAG BEHAVIOR FOR EMULATING TOUCH EVENTS ON DESKTOP + $cont.bind({ + mouseover: touchPause, + mouseout: touchUnpause + }); + //TOUCHMOD -- PREVENT TRANSITIONS IF USER IS HOVERING OVER CYCLE + opts.touchClickDrag == true + $cont.bind({ + mouseover: touchPause, + mouseout: touchUnpause + }); +} +function integrateTouch (opts, cont) { + if ( !!supportsTouch && ( !!opts.touchFx || $.fn.cycle.transitions[opts.fx].activeDir ) ) { + + var getTouchPos = function (event) { + if ( !!event && !!event.originalEvent && !!event.originalEvent.touches ) { + return ({ pageX: event.originalEvent.touches[0].pageX, pageY: event.originalEvent.touches[0].pageY }); + } else if ( !!event && ( !!event.pageX || !!event.pageY ) ) { + return ({ pageX: event.pageX, pageY: event.pageY }); + } + return ({ pageX: 0, pageY: 0 }); + } + + var initPos = getTouchPos(), + diffPos = getTouchPos(), + dragging = false, + prevElem, currElem, nextElem, + $cont = opts.$cont, + mainContSize = { + width: $cont.width(), + height: $cont.height() + }, + touchFx = null, + dir = { x: 0, y: 0 }, + currStart = { x: 0, y: 0 }, + changeCycle = 0, + dragstate = null, + revdir = ( !!opts.rev ) ? -1 : 1; + + + //TOUCHMOD -- ADD CSS RULES TO HELP ENGAGE iOS Hardware Acceleration + //$cont.css( { transform: 'translate3d(0,0,0)' } ); + $(opts.elements).add( opts.pager + " *" ).css( { perspective: 0, backfaceVisibility: 'hidden', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent', transitionDuration: 0, transformStyle: 'flat' } ); + + //TOUCHMOD -- TOUCH BEHAVIOR INITIALIZATION + var initSlidePos, snapSlideBack, dragSlideTick; + + //TOUCHMOD -- TOUCH TRANSITION & ASSOCIATED OPTIONS + if ( !!opts.touchFx && !!$.fn.cycle.transitions[opts.touchFx] ) { + touchFx = opts.touchFx; + dir = $.fn.cycle.transitions[opts.touchFx].activeDir || { x: 1, y: 0 }; + if ( !!dir.x ) { + changeCycle = (mainContSize.width/4); + } else { + changeCycle = (mainContSize.height/4); + } + + //ALLOW USER OPTION TO OVERRIDE DEFAULT TOUCH BEHAVIOR INITIALIZATION + if ( !!$.fn.cycle.transitions[opts.touchFx].initSlidePos ) { + initSlidePos = $.fn.cycle.transitions[opts.touchFx].initSlidePos; + } + if ( !!$.fn.cycle.transitions[opts.touchFx].snapSlideBack ) { + snapSlideBack = $.fn.cycle.transitions[opts.touchFx].snapSlideBack; + } + if ( !!$.fn.cycle.transitions[opts.touchFx].dragSlideTick ) { + dragSlideTick = $.fn.cycle.transitions[opts.touchFx].dragSlideTick; + } + } else { + touchFx = 'touchScrollHorz'; + dir.x = 1; + changeCycle = (mainContSize.width/4); + } + changeCycle = ( !!opts.touchCycleLimit ) ? opts.touchCycleLimit : changeCycle; + + // TOUCHMOD -- DEFAULT TOUCH BEHAVIOR INITIALIZATION + if ( !!!initSlidePos && !!!snapSlideBack && !!!dragSlideTick ) { + + } + + //TOUCHMOD -- TOUCH CORE FUNCTIONALITY -- GETTING POSITION OF TOUCH EVENTS, PREPARING ELEMENTS FOR DRAGGING + var dragStart = function (event) { + if ( !!!opts.busy ) { + var currPos = getTouchPos(event); + initPos.pageX = currPos.pageX - initPos.pageX; + initPos.pageY = currPos.pageY - initPos.pageY; + var prevNum = (opts.elements.length + opts.currSlide - 1) % opts.elements.length; + var nextNum = (opts.elements.length + opts.currSlide + 1) % opts.elements.length; + + $(opts.elements).stop(true,false); + + prevElem = $( opts.elements[prevNum] ); + currElem = $( opts.elements[opts.currSlide] ); + nextElem = $( opts.elements[nextNum] ); + + currStart.x = currElem.position().left; + currStart.y = currElem.position().top; + + initSlidePos( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ); + + dragging = true; + dragstate = null; + //event.preventDefault(); + } + } + var dragMove = function (event) { + if ( !!!opts.busy && dragging && dragstate !== 'locked' ) { + var currPos = getTouchPos(event); + diffPos.pageX = currPos.pageX - initPos.pageX; + diffPos.pageY = currPos.pageY - initPos.pageY; + + if ( dragstate !== 'locked' && ( Math.abs( diffPos.pageX ) * dir.x > opts.touchMinDrag || Math.abs( diffPos.pageY ) * dir.y > opts.touchMinDrag ) ) { + dragSlideTick( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); + dragstate = 'dragging'; + event.preventDefault(); + } else { + snapSlideBack( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); + } + + if ( dragstate !== 'dragging' && !!opts.touchMinDrag && + ( Math.abs( diffPos.pageX ) * dir.y > opts.touchMinDrag || Math.abs( diffPos.pageY ) * dir.x > opts.touchMinDrag ) ) { + dragstate = 'locked'; + } + } + } + var dragEnd = function (event) { + if ( !!!opts.busy && dragging ) { + var cacheOpts = { speed: opts.speed, fx: opts.fx, ease: opts.easing } + + opts.fx = touchFx; + opts.easing = 'linear'; + if ( dragstate !== 'locked' && dragging && !!dir.x && Math.abs(diffPos.pageX) > changeCycle ) { + opts.speed = opts.speedIn = opts.speedOut = Math.round( opts.speed * ( ( mainContSize.width - (mainContSize.width/4) - Math.abs( diffPos.pageX ) ) / mainContSize.width ) ) + 50; + if ( diffPos.pageX < 0 ) advance(opts,1); + if ( diffPos.pageX > 0) advance(opts,0); + } else if ( dragstate !== 'locked' && dragging && !!dir.y && Math.abs(diffPos.pageY) > changeCycle ) { + opts.speed = opts.speedIn = opts.speedOut = Math.round( opts.speed * ( ( mainContSize.height - (mainContSize.height/4) - Math.abs( diffPos.pageY ) ) / mainContSize.height ) ) + 50; + if ( diffPos.pageY < 0 ) advance(opts,1); + if ( diffPos.pageY > 0) advance(opts,0); + } else { + snapSlideBack( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); + } + opts.speed = opts.speedIn = opts.speedOut = cacheOpts.speed; + opts.fx = cacheOpts.fx; + opts.easing = cacheOpts.ease; + + initPos = getTouchPos(); + diffPos = getTouchPos(); + + dragging = false; + dragstate = null; + event.preventDefault(); + } + } + var dragCancel = function () { + dragging = false; + snapSlideBack( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ); + } + + $cont.bind({ + touchstart: dragStart, + touchmove: dragMove, + touchend: dragEnd, + touchcancel: dragCancel + }); + + if (opts.touchClickDrag) { + $cont.bind({ + mousedown: dragStart, + mousemove: dragMove, + mouseup: dragEnd + }); + } + } +} +// END TOUCHMOD SUPPORT HANDLING +// + + // one-time initialization function buildOptions($cont, $slides, els, options, o) { + + //TOUCHMOD -- DETECT TOUCH SUPPORT ON DEVICE + supportsTouch = detectTouchSupport(); + if ( !!supportsTouch ) { + $.fn.cycle.defaults.pauseOnTouch = 1; + } + var startingSlideSpecified; // support metadata plugin (v1.0 and v2.0) var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {}); @@ -241,6 +520,12 @@ function buildOptions($cont, $slides, els, options, o) { opts.before = opts.before ? [opts.before] : []; opts.after = opts.after ? [opts.after] : []; + //TOUCHMOD -- INTEGRATE TOUCH SUPPORT IF AVAILABLE + TRANSITION SPECIFIED + if ( !!opts.touchFx && !!opts.touchClickDrag ) supportsTouch = true; + if ( !!opts.touchFx ) { + integrateTouch(opts, cont); + } + // push some after callbacks if (!$.support.opacity && opts.cleartype) opts.after.push(function() { removeFilter(this, opts); }); @@ -265,7 +550,7 @@ function buildOptions($cont, $slides, els, options, o) { opts.startingSlide = parseInt(opts.startingSlide,10); if (opts.startingSlide >= els.length || opts.startSlide < 0) opts.startingSlide = 0; // catch bogus input - else + else startingSlideSpecified = true; } else if (opts.backwards) @@ -358,7 +643,7 @@ function buildOptions($cont, $slides, els, options, o) { }); }); } - + // stretch container var reshape = opts.containerResize && !$cont.innerHeight(); if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9 @@ -442,7 +727,7 @@ function buildOptions($cont, $slides, els, options, o) { opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10); if (!opts.sync) opts.speed = opts.speed / 2; - + var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250; while((opts.timeout - opts.speed) < buffer) // sanitize timeout opts.timeout += opts.speed; @@ -700,7 +985,7 @@ function go(els, opts, manual, fwd) { }; debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide); - + // get ready to perform the transition opts.busy = 1; if (opts.fxFn) // fx function provided? @@ -755,7 +1040,7 @@ function go(els, opts, manual, fwd) { } if (changed && opts.pager) opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass); - + function queueNext() { // stage the next transition var ms = 0, timeout = opts.timeout; @@ -852,7 +1137,7 @@ $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { } else a = ''+(i+1)+''; - + if (!a) return; var $a = $(a); @@ -874,7 +1159,7 @@ $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { opts.pagerAnchors = opts.pagerAnchors || []; opts.pagerAnchors.push($a); - + var pagerFn = function(e) { e.preventDefault(); opts.nextSlide = i; @@ -889,30 +1174,30 @@ $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { go(els,opts,1,opts.currSlide < i); // trigger the trans // return false; // <== allow bubble }; - + if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) { $a.hover(pagerFn, function(){/* no-op */} ); } else { $a.bind(opts.pagerEvent, pagerFn); } - + if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) $a.bind('click.cycle', function(){return false;}); // suppress click - + var cont = opts.$cont[0]; var pauseFlag = false; // https://github.com/malsup/cycle/issues/44 if (opts.pauseOnPagerHover) { $a.hover( - function() { + function() { pauseFlag = true; - cont.cyclePause++; + cont.cyclePause++; triggerPause(cont,true,true); - }, function() { + }, function() { if (pauseFlag) - cont.cyclePause--; + cont.cyclePause--; triggerPause(cont,true,true); - } + } ); } }; @@ -985,7 +1270,7 @@ $.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) { }; $l.animate(opts.animOut, speedOut, easeOut, function() { $l.css(opts.cssAfter); - if (!opts.sync) + if (!opts.sync) fn(); }); if (opts.sync) fn(); @@ -1541,4 +1826,102 @@ $.fn.cycle.transitions.wipe = function($cont, $slides, opts) { opts.animOut = { left: 0 }; }; + +//TOUCHMOD -- TRANSITIONS WITH TOUCH-ENHANCEMENTS +$.fn.cycle.transitions.touchScrollHorz = function($cont, $slides, opts) { + //$cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts, fwd) { + var dirrev = -1; + if (opts.rev) { + fwd = !fwd; + dirrev = 1; + } + $.fn.cycle.commonReset(curr,next,opts); + opts.animOut.left = fwd ? curr.cycleW * dirrev : -curr.cycleW * dirrev; + }); + opts.after.push(function(curr, next, opts, fwd) { + $cont + }); + opts.cssBefore.top = 0; + opts.animIn.left = 0; + opts.animOut.top = 0; +} +$.fn.cycle.transitions.touchScrollHorz.activeDir = { x: 1, y: 0 } +$.fn.cycle.transitions.touchScrollHorz.initSlidePos = function ( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ) { + var move = { x: (mainContSize.width * dir.x * revdir), y: (mainContSize.height * dir.y * revdir) } + prevElem.css( { left: -move.x + currStart.x, top: -move.y + currStart.y, display: 'block', opacity: 1 } ); + nextElem.css( { left: move.x + currStart.x, top: move.y + currStart.y, display: 'block', opacity: 1 } ); +} +$.fn.cycle.transitions.touchScrollHorz.snapSlideBack = function ( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ) { + var move = { x: (mainContSize.width * dir.x * revdir), y: (mainContSize.height * dir.y * revdir) } + prevElem.stop(true,false).animate( { left: -move.x, top: -move.y }, opts.speed/4 ); + currElem.stop(true,false).animate( { left: 0, top: 0 }, opts.speed/4 ); + nextElem.stop(true,false).animate( { left: move.x, top: move.y }, opts.speed/4 ); +} +$.fn.cycle.transitions.touchScrollHorz.dragSlideTick = function ( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ) { + prevElem.stop(true,false).css( { + left: ( ( -mainContSize.width + diffPos.pageX ) * dir.x ) + currStart.x, + top: ( ( -mainContSize.height + diffPos.pageY ) * dir.y ) + currStart.y, + display: 'block', opacity: 1 + } ); + currElem.stop(true,false).css( { + left: ( ( 0 + diffPos.pageX ) * dir.x ) + currStart.x, + top: ( ( 0 + diffPos.pageY ) * dir.y ) + currStart.y, + display: 'block', opacity: 1 + } ); + nextElem.stop(true,false).css( { + left: ( ( mainContSize.width + diffPos.pageX ) * dir.x ) + currStart.x, + top: ( ( mainContSize.height + diffPos.pageY ) * dir.y ) + currStart.y, + display: 'block', opacity: 1 + } ); +} + +$.fn.cycle.transitions.touchScrollVert = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push(function(curr, next, opts, fwd) { + var dirrev = -1; + if (opts.rev) { + fwd = !fwd; + dirrev = 1; + } + $.fn.cycle.commonReset(curr,next,opts); + //opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1); + opts.animOut.top = fwd ? curr.cycleH*dirrev : -curr.cycleH*dirrev; + }); + //opts.cssFirst.top = 0; + opts.cssBefore.left = 0; + opts.animIn.top = 0; + opts.animOut.left = 0; +} +$.fn.cycle.transitions.touchScrollVert.activeDir = { x: 0, y: 1 } +$.fn.cycle.transitions.touchScrollVert.initSlidePos = function ( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ) { + var move = { x: (mainContSize.width * dir.x * revdir), y: (mainContSize.height * dir.y * revdir) } + prevElem.css( { left: -move.x + currStart.x, top: -move.y + currStart.y, display: 'block', opacity: 1 } ); + nextElem.css( { left: move.x + currStart.x, top: move.y + currStart.y, display: 'block', opacity: 1 } ); +} +$.fn.cycle.transitions.touchScrollVert.snapSlideBack = function ( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ) { + var move = { x: (mainContSize.width * dir.x * revdir), y: (mainContSize.height * dir.y * revdir) } + prevElem.stop(true,false).animate( { left: -move.x, top: -move.y }, opts.speed/4 ); + currElem.stop(true,false).animate( { left: 0, top: 0 }, opts.speed/4 ); + nextElem.stop(true,false).animate( { left: move.x, top: move.y }, opts.speed/4 ); +} +$.fn.cycle.transitions.touchScrollVert.dragSlideTick = function ( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ) { + prevElem.stop(true,false).css( { + left: ( ( -mainContSize.width + diffPos.pageX ) * dir.x ) + currStart.x, + top: ( ( -mainContSize.height + diffPos.pageY ) * dir.y ) + currStart.y, + display: 'block', opacity: 1 + } ); + currElem.stop(true,false).css( { + left: ( ( 0 + diffPos.pageX ) * dir.x ) + currStart.x, + top: ( ( 0 + diffPos.pageY ) * dir.y ) + currStart.y, + display: 'block', opacity: 1 + } ); + nextElem.stop(true,false).css( { + left: ( ( mainContSize.width + diffPos.pageX ) * dir.x ) + currStart.x, + top: ( ( mainContSize.height + diffPos.pageY ) * dir.y ) + currStart.y, + display: 'block', opacity: 1 + } ); +} + + })(jQuery); diff --git a/touchexample/css/style.css b/touchexample/css/style.css new file mode 100644 index 0000000..d0fd77c --- /dev/null +++ b/touchexample/css/style.css @@ -0,0 +1,273 @@ +html, body, body div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, figure, footer, header, hgroup, menu, nav, section, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +article, aside, figure, footer, header, hgroup, nav, section {display: block;} + +/* Responsive images and other embedded objects + Note: keeping IMG here will cause problems if you're using foreground images as sprites. + If this default setting for images is causing issues, you might want to replace it with a .responsive class instead. */ +object, +embed {max-width: 100%;} + +html {overflow-y: scroll;} + +ul {list-style: none;} + +blockquote, q {quotes: none;} + +blockquote:before, +blockquote:after, +q:before, +q:after {content: ''; content: none;} + +a {margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent;} + +del {text-decoration: line-through;} + +abbr[title], dfn[title] {border-bottom: 1px dotted #000; cursor: help;} + +/* tables still need cellspacing="0" in the markup */ +table {border-collapse: collapse; border-spacing: 0;} +th {font-weight: bold; vertical-align: bottom;} +td {font-weight: normal; vertical-align: top;} + +hr {display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0;} + +input, select {vertical-align: middle;} + +pre { + white-space: pre; /* CSS2 */ + white-space: pre-wrap; /* CSS 2.1 */ + white-space: pre-line; /* CSS 3 (and 2.1) */ + word-wrap: break-word; /* IE */ +} + +input[type="radio"] {vertical-align: text-bottom;} +input[type="checkbox"] {vertical-align: bottom; *vertical-align: baseline;} +.ie6 input {vertical-align: text-bottom;} + +select, input, textarea {font: 99% sans-serif;} + +table {font-size: inherit; font: 100%;} + +a:hover, a:active {outline: none;} + +small {font-size: 85%;} + +strong, th {font-weight: bold;} + +td, td img {vertical-align: top;} + +sub, sup {font-size: 65%; line-height: 0; position: relative; vertical-align:baseline} +sup {top: -0.5em;} +sub {bottom: -0.25em;} + +pre, code, kbd, samp {font-family: monospace, sans-serif;} + +.clickable, +label, +input[type=button], +input[type=submit], +button {cursor: pointer;} + +button, input, select, textarea {margin: 0;} + +button {width: auto; overflow: visible;} + +.ie7 img {-ms-interpolation-mode: bicubic;} +.ie6 {filter: expression(document.execCommand("BackgroundImageCache", false, true));} + +body {font: 14px Gudea, Arial, Helvetica, Helmet, Freesans, sans-serif;} +body, select, input, textarea {color: #000;} + +a {color: #00853F; text-decoration: none; } +a:hover {color: #00853F; text-decoration: underline;} +a:active, a:focus { outline: 0 none;} + +::-moz-selection{background: #8CC63F; color: #FFF; text-shadow: none;} +::selection {background: #8CC63F; color: #FFF; text-shadow: none;} + + +a:link {-webkit-tap-highlight-color: #8CC63F;} + +ins {background-color: #00853F; color: #000; text-decoration: none;} +mark {background-color: #00853F; color: #000; font-style: italic; font-weight: bold;} + +/* IOS(IPAD) HARDWARE ACCELERATION FIX +@media screen and (max-device-width: 1024px) { + body { + -webkit-transform: translate3d(0,0,0); + } + #main { + -webkit-perspective: 0; + -webkit-backface-visibility: hidden; + -webkit-transition-duration: 0; + } +} +*/ + +/* ============================================================================= + Primary styles + Author: Keegan Brown for Peter Mayer Advertising + ========================================================================== */ + +/* TEXT FORMATTING */ +h1 { font-size: 170% } +h2 { font-size: 150% } +h3 { font-size: 130% } +h4 { font-size: 120% } +h5 { font-size: 110% } +h6 { font-size: 100% } + +body { + text-align: center; +} +#container { + width: 100%; + max-width: 980px; + margin: 0 auto; + text-align: left; + -webkit-transform: translate3d(0,0,0); + background-color: #000; + position: relative; +} +#header { + padding: 0 20px; + background-color: #DDD; + height: 10%; +} +#main { + padding: 0 20px; + background-color: #000; + min-height: 80%; +} +#footer { + padding: 0 20px; + background-color: #DDD; + height: 10%; +} +#header h1, #footer > p { + padding: 15px 0; +} +#cycle { + min-height: 300px; + overflow: hidden; +} + +.cycleItem { + height: 100%; + width: 100%; + display: block; +} + +.item1 { background-color: #999999; } +.item2 { background-color: #99FFFF; } +.item3 { background-color: #FF99FF; } +.item4 { background-color: #FFFF99; } +.item5 { background-color: #9999FF; } + +.item1 .itemWrap { height: 100%; } +.item2 .itemWrap { height: 200%; } +.item3 .itemWrap { height: 300%; } +.item4 .itemWrap { height: 180%; } +.item5 .itemWrap { height: 130%; } + +.cycleItem .itemWrap { padding: 20px; } + +.pager { + width: 100%; +} +.pager a { + width: 20%; + display: block; + padding: 10px 0; + background-color: #000; + color: #FFF; + text-align: center; + float: left; + font-weight: bold; +} +.pager .activeSlide { + background-color: #00853F; +} + + + + + + + +/* ============================================================================= + Non-semantic helper classes + Please define your styles before this section. + ========================================================================== */ + +/* For image replacement */ +.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; } +.ir br { display: none; } +.abir { position: absolute; top: 0; left: 0; } + +/* Hide for both screenreaders and browsers: + css-discuss.incutio.com/wiki/Screenreader_Visibility */ +.hidden { display: none; visibility: hidden; } + +/* Hide only visually, but have it available for screenreaders: by Jon Neal. + www.webaim.org/techniques/css/invisiblecontent/ & j.mp/visuallyhidden */ +.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } + +/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: drupal.org/node/897638 */ +.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; } + +/* Hide visually and from screenreaders, but maintain layout */ +.invisible { visibility: hidden; } + +/* Contain floats: nicolasgallagher.com/micro-clearfix-hack/ */ +.clearfix:before, .clearfix:after { content: ""; display: table; } +.clearfix:after { clear: both; } +.clearfix { zoom: 1; } + + + +/* ============================================================================= + PLACEHOLDER Media Queries for Responsive Design. + These override the primary ('mobile first') styles + Modify as content requires. + ========================================================================== */ + +@media only screen and (min-width: 480px) { + /* Style adjustments for viewports 480px and over go here */ + +} + +@media only screen and (min-width: 768px) { + /* Style adjustments for viewports 768px and over go here */ + +} + + +/* ============================================================================= + Print styles. + Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ + ========================================================================== */ + +@media print { + * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: sanbeiji.com/archives/953 */ + a, a:visited { color: #444 !important; text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */ + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */ + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3 { orphans: 3; widows: 3; } + h2, h3{ page-break-after: avoid; } +} diff --git a/touchexample/index.html b/touchexample/index.html new file mode 100644 index 0000000..334a278 --- /dev/null +++ b/touchexample/index.html @@ -0,0 +1,88 @@ + + + + + + jQuery-Cycle Touch Integration Example + + + + + + + + + + + + +
+ +
+
+
    +
  • +
    +

    This is Cycle Item 1

    +

    This is some content, with a link

    +
    +
  • +
  • +
    +

    This is Cycle Item 2

    +
    +
  • +
  • +
    +

    This is Cycle Item 3

    +
    +
  • +
  • +
    +

    This is Cycle Item 4

    +
    +
  • +
  • +
    +

    This is Cycle Item 5

    +
    +
  • +
+
+ +
+ + + + + + + + + + diff --git a/touchexample/js/libs/jquery.min.js b/touchexample/js/libs/jquery.min.js new file mode 100644 index 0000000..16ad06c --- /dev/null +++ b/touchexample/js/libs/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file From fdc65c8dcb12899bbfb99a98a7e182287b728c43 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Mon, 16 Apr 2012 17:46:45 -0500 Subject: [PATCH 02/38] Cleaned up example a little. Added iOS hardware acceleration back in. Had commented out for testing Android devices. Signed-off-by: Keegan Brown --- touchexample/index.html => index.html | 13 +++---------- jquery.cycle.all.js | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 17 deletions(-) rename touchexample/index.html => index.html (79%) diff --git a/touchexample/index.html b/index.html similarity index 79% rename from touchexample/index.html rename to index.html index 334a278..61e3c74 100644 --- a/touchexample/index.html +++ b/index.html @@ -9,10 +9,9 @@ - + - - + @@ -58,15 +57,9 @@

This is Cycle Item 5

- + + + + +
+ +
+
+
    +
  • +
    +

    This is Cycle Item 1

    +

    This is some content, with a link

    +
    +
  • +
  • +
    +

    This is Cycle Item 2

    +
    +
  • +
  • +
    +

    This is Cycle Item 3

    +
    +
  • +
  • +
    +

    This is Cycle Item 4

    +
    +
  • +
  • +
    +

    This is Cycle Item 5

    +
    +
  • +
+
+ +
+ + + + + + + + + + From 0b0d00c55e0612b224c2b0f626e36afe72c6a8b2 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 17 Apr 2012 10:22:31 -0500 Subject: [PATCH 04/38] Added more touch-compatible examples. Some small iOS hardware-acceleration related changes. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 2 +- touchexample2.html | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index e0714a5..7f3d8a2 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -358,7 +358,7 @@ function integrateTouch (opts, cont) { //TOUCHMOD -- ADD CSS RULES TO HELP ENGAGE iOS Hardware Acceleration if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { - $cont.css( { transform: 'translate3d(0,0,0)' } ); + $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); } $(opts.elements).add( opts.pager + " *" ).css( { perspective: 0, backfaceVisibility: 'hidden', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent', transitionDuration: 0, transformStyle: 'flat' } ); diff --git a/touchexample2.html b/touchexample2.html index 83e59ce..d2bc363 100644 --- a/touchexample2.html +++ b/touchexample2.html @@ -64,8 +64,16 @@

This is Cycle Item 5

$.fn.cycle.transitions.customTouch = function($cont, $slides, opts) { $cont.css('overflow','hidden').width(); opts.before.push(function(curr, next, opts, fwd) { - $(curr).css('height','auto'); - var newheight = opts.height = $(curr).children('div').height(); + var cssBeforeLeft; + + if ( $(next).css('display') !== 'none' ) { + cssBeforeLeft = $(next).position().left; + } else { + cssBeforeLeft = fwd ? (next.cycleW-1) : (1-next.cycleW); + } + + $(next).css('height','auto'); + var newheight = opts.height = $(next).children('div').height(); $cont.height(newheight); var dirrev = -1; @@ -74,7 +82,9 @@

This is Cycle Item 5

dirrev = 1; } $.fn.cycle.commonReset(curr,next,opts); - opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW); + + //opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW); + opts.cssBefore.left = cssBeforeLeft; opts.animOut.left = fwd ? curr.cycleW * dirrev : -curr.cycleW * dirrev; }); opts.after.push(function(curr, next, opts, fwd) { @@ -82,10 +92,15 @@

This is Cycle Item 5

var newheight = opts.height = $(this).children('div').height(); $cont.height(newheight); }); - console.log( opts ); - opts.cssFirst.left = $slides.eq(opts.currSlide).position().left; - opts.cssBefore.top = $slides.eq(opts.currSlide).position().top; + opts.cssFirst.height = opts.height = $slides.eq(opts.currSlide).height(); + $cont.height(opts.height); + + console.log( $cont.height() ); + //opts.cssFirst.left = $slides.eq(opts.currSlide).position().left; + //opts.cssBefore.top = $slides.eq(opts.currSlide).position().top; opts.animIn.left = 0; + opts.animIn.top = 0; + opts.animOut.left = 0; opts.animOut.top = 0; } $.fn.cycle.transitions.customTouch.activeDir = { x: 1, y: 0 } @@ -122,6 +137,8 @@

This is Cycle Item 5

fx: 'customTouch', speed: 500, touchFx: 'customTouch', + slideResize: 0, + containerResize: 0, touchClickDrag: true, timeout: 0, pager: '.pager', From 432c427d1c715c659ba763f924ec38a2d3ead502 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 17 Apr 2012 10:36:30 -0500 Subject: [PATCH 05/38] Edited README and Added touch options back in. Signed-off-by: Keegan Brown --- README.md | 15 ++++++++++++++- jquery.cycle.all.js | 5 +++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 13f83a3..c707be5 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,17 @@ Links * [Options Reference](http://jquery.malsup.com/cycle/options.html) * [Effects Browser](http://jquery.malsup.com/cycle/browser.html) * [Download](http://jquery.malsup.com/cycle/download.html) - \ No newline at end of file + + +Touch Integration +=================== + +Integrating touch-compatibility requires a number of user-settable new options, and some modification/addition of core functionality in cycle. + +A sizable amount of code used in integrating Touch events exists in individual transitions, therefore some work has to be done to enable previous transitions to be touch-friendly. + +Hopefully, I'll find a place to host the demos soon. As they exist now, you should be able to download the project and run them locally. + +Touch-capability tested on Android 2.3 and iOS 4+. + +Feedback is greatly appreciated. diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 7f3d8a2..80fb2d9 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -1355,6 +1355,11 @@ $.fn.cycle.defaults = { sync: 1, // true if in/out transitions should occur simultaneously timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance) timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag) + touchFx: null, // name of touch transition effect. Touch Functionality will not be enabled if left "null" or "false" + touchCycleLimit: 0, // Number (in px) for touch gesture before a touchend event will force a cycle. + touchClickDrag: 0, // true to enable mouse slide-dragging. + touchMinDrag: 0, // Minimum (in px) before touch handling will effect positioning of the cycle + touchPagerEvent: 'touchstart.cycle', //Touch Event to use for pagers. updateActivePagerLink: null,// callback fn invoked to update the active pager link (adds/removes activePagerClass style) width: null // container width (if the 'fit' option is true, the slides will be set to this width as well) }; From a610b6f0f63196f7a7a0a30c723bd9a60910c328 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 17 Apr 2012 12:20:47 -0500 Subject: [PATCH 06/38] Moved iOS Acceleration into the transition itself, Fleshed out touchexample2.html more. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 12 ++++++++++++ touchexample2.html | 16 ++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 80fb2d9..a6d4b17 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -357,9 +357,11 @@ function integrateTouch (opts, cont) { //TOUCHMOD -- ADD CSS RULES TO HELP ENGAGE iOS Hardware Acceleration + /* if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); } + */ $(opts.elements).add( opts.pager + " *" ).css( { perspective: 0, backfaceVisibility: 'hidden', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent', transitionDuration: 0, transformStyle: 'flat' } ); //TOUCHMOD -- TOUCH BEHAVIOR INITIALIZATION @@ -1852,6 +1854,11 @@ $.fn.cycle.transitions.touchScrollHorz = function($cont, $slides, opts) { opts.cssBefore.top = 0; opts.animIn.left = 0; opts.animOut.top = 0; + + //CSS RULES TO HELP ENGAGE iOS Hardware Acceleration + if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { + $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); + } } $.fn.cycle.transitions.touchScrollHorz.activeDir = { x: 1, y: 0 } $.fn.cycle.transitions.touchScrollHorz.initSlidePos = function ( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ) { @@ -1899,6 +1906,11 @@ $.fn.cycle.transitions.touchScrollVert = function($cont, $slides, opts) { opts.cssBefore.left = 0; opts.animIn.top = 0; opts.animOut.left = 0; + + //CSS RULES TO HELP ENGAGE iOS Hardware Acceleration + if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { + $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); + } } $.fn.cycle.transitions.touchScrollVert.activeDir = { x: 0, y: 1 } $.fn.cycle.transitions.touchScrollVert.initSlidePos = function ( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ) { diff --git a/touchexample2.html b/touchexample2.html index d2bc363..053039a 100644 --- a/touchexample2.html +++ b/touchexample2.html @@ -7,7 +7,7 @@ - + @@ -63,6 +63,10 @@

This is Cycle Item 5

$(function () { $.fn.cycle.transitions.customTouch = function($cont, $slides, opts) { $cont.css('overflow','hidden').width(); + if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { + $('body').css( { transform: 'translate3d(0,0,0)' } ); + } + $slides.css('display','block') opts.before.push(function(curr, next, opts, fwd) { var cssBeforeLeft; @@ -92,10 +96,9 @@

This is Cycle Item 5

var newheight = opts.height = $(this).children('div').height(); $cont.height(newheight); }); - opts.cssFirst.height = opts.height = $slides.eq(opts.currSlide).height(); - $cont.height(opts.height); + //opts.cssFirst.height = opts.height = $slides.eq(opts.currSlide).height(); + //$cont.height(opts.height); - console.log( $cont.height() ); //opts.cssFirst.left = $slides.eq(opts.currSlide).position().left; //opts.cssBefore.top = $slides.eq(opts.currSlide).position().top; opts.animIn.left = 0; @@ -139,10 +142,11 @@

This is Cycle Item 5

touchFx: 'customTouch', slideResize: 0, containerResize: 0, - touchClickDrag: true, + touchClickDrag: false, + touchCycleLimit: 30, timeout: 0, pager: '.pager', - touchMinDrag: 5, + touchMinDrag: 20, rev: 0 }).css({ cursor: 'move' From 2e1098a4b5d18f14452bf69e5cc9ddd8bc0b348d Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Wed, 18 Apr 2012 16:01:05 -0500 Subject: [PATCH 07/38] Android performance fixes and more fixes for Hardware Acceleration in iOS. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 41 ++++++++++++++++++++--------------------- touchexample2.html | 24 +++++++++++++++--------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index a6d4b17..1b57b7a 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -357,12 +357,7 @@ function integrateTouch (opts, cont) { //TOUCHMOD -- ADD CSS RULES TO HELP ENGAGE iOS Hardware Acceleration - /* - if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { - $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); - } - */ - $(opts.elements).add( opts.pager + " *" ).css( { perspective: 0, backfaceVisibility: 'hidden', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent', transitionDuration: 0, transformStyle: 'flat' } ); + $(opts.elements).css( { backfaceVisibility: 'hidden', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent' } ); //TOUCHMOD -- TOUCH BEHAVIOR INITIALIZATION var initSlidePos, snapSlideBack, dragSlideTick; @@ -395,13 +390,6 @@ function integrateTouch (opts, cont) { } changeCycle = ( !!opts.touchCycleLimit ) ? opts.touchCycleLimit : changeCycle; - // TOUCHMOD -- DEFAULT TOUCH BEHAVIOR INITIALIZATION - /* - if ( !!!initSlidePos && !!!snapSlideBack && !!!dragSlideTick ) { - - } - */ - //TOUCHMOD -- TOUCH CORE FUNCTIONALITY -- GETTING POSITION OF TOUCH EVENTS, PREPARING ELEMENTS FOR DRAGGING var dragStart = function (event) { if ( !!!opts.busy ) { @@ -428,8 +416,12 @@ function integrateTouch (opts, cont) { } } var dragMove = function (event) { + var currPos = getTouchPos(event); + if ( dragstate !== 'dragging' && !!opts.touchMinDrag && + ( Math.abs( diffPos.pageX ) * dir.y > opts.touchMinDrag || Math.abs( diffPos.pageY ) * dir.x > opts.touchMinDrag ) ) { + dragstate = 'locked'; + } if ( !!!opts.busy && dragging && dragstate !== 'locked' ) { - var currPos = getTouchPos(event); diffPos.pageX = currPos.pageX - initPos.pageX; diffPos.pageY = currPos.pageY - initPos.pageY; @@ -440,11 +432,6 @@ function integrateTouch (opts, cont) { } else { snapSlideBack( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); } - - if ( dragstate !== 'dragging' && !!opts.touchMinDrag && - ( Math.abs( diffPos.pageX ) * dir.y > opts.touchMinDrag || Math.abs( diffPos.pageY ) * dir.x > opts.touchMinDrag ) ) { - dragstate = 'locked'; - } } } var dragEnd = function (event) { @@ -474,10 +461,13 @@ function integrateTouch (opts, cont) { dragging = false; dragstate = null; event.preventDefault(); + } else { + dragCancel(); } } var dragCancel = function () { dragging = false; + dragstate = null; snapSlideBack( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ); } @@ -667,7 +657,7 @@ function buildOptions($cont, $slides, els, options, o) { } var pauseFlag = false; // https://github.com/malsup/cycle/issues/44 - if (opts.pause) + if (opts.pause) { $cont.bind('mouseenter.cycle', function(){ pauseFlag = true; this.cyclePause++; @@ -677,6 +667,8 @@ function buildOptions($cont, $slides, els, options, o) { this.cyclePause--; triggerPause(cont, true); }); + } + if (supportMultiTransitions(opts) === false) return false; @@ -1186,7 +1178,14 @@ $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { $a.hover(pagerFn, function(){/* no-op */} ); } else { - $a.bind(opts.pagerEvent, pagerFn); + // TOUCHMOD -- INTEGRATE TOUCH FUNCTIONALITY INTO PAGERS + if ( !supportsTouch ) { + $a.bind(opts.pagerEvent, pagerFn); + } else { + $a.bind(opts.touchPagerEvent, pagerFn); + $a.bind(opts.pagerEvent, function (e) { e.preventDefault(); }); + //$a.bind(opts.pagerEvent, pagerFn); + } } if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) diff --git a/touchexample2.html b/touchexample2.html index 053039a..8f71274 100644 --- a/touchexample2.html +++ b/touchexample2.html @@ -7,7 +7,7 @@ - + @@ -62,11 +62,17 @@

This is Cycle Item 5

From 841c68d871a7731ebf1243e665fc644397e90007 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Wed, 25 Apr 2012 14:02:43 -0500 Subject: [PATCH 09/38] Updated README.md Signed-off-by: Keegan Brown --- README.md | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c707be5..5f3f1ca 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,28 @@ -jQuery Cycle Plugin +Touch Integration =================== -Cycle is an easy-to-use slideshow plugin that provides many options and effects for creating beautiful slideshows. +* [Touch Example 1](http://www.devpam.com/touch-cycle/touchexample1.html) +* [Touch Example 2](http://www.devpam.com/touch-cycle/touchexample2.html) -Links +Integrating touch-compatibility requires a number of user-settable new options, and some modification/addition to core functionality in cycle. -* [Home Page](http://jquery.malsup.com/cycle/) -* [Options Reference](http://jquery.malsup.com/cycle/options.html) -* [Effects Browser](http://jquery.malsup.com/cycle/browser.html) -* [Download](http://jquery.malsup.com/cycle/download.html) +A sizable amount of code used in integrating Touch events exists within individual transitions, therefore some work has to be done to enable non-touch enabled transitions to be touch-friendly. Touch-enabled transitions are more complicated than non-touch enabled transitions, because touch interactions are inherently more complicated than click interactions. +There is an option to allow the developer to emulate touch events by clicking-and-dragging, making integrating touch support into new transitions easier. -Touch Integration -=================== +Touch-capability tested on Android 2.3 and iOS 4+. -Integrating touch-compatibility requires a number of user-settable new options, and some modification/addition of core functionality in cycle. +Feedback is greatly appreciated. -A sizable amount of code used in integrating Touch events exists in individual transitions, therefore some work has to be done to enable previous transitions to be touch-friendly. -Hopefully, I'll find a place to host the demos soon. As they exist now, you should be able to download the project and run them locally. +jQuery Cycle Plugin +=================== -Touch-capability tested on Android 2.3 and iOS 4+. +Cycle is an easy-to-use slideshow plugin that provides many options and effects for creating beautiful slideshows. -Feedback is greatly appreciated. +Links + +* [Home Page](http://jquery.malsup.com/cycle/) +* [Options Reference](http://jquery.malsup.com/cycle/options.html) +* [Effects Browser](http://jquery.malsup.com/cycle/browser.html) +* [Download](http://jquery.malsup.com/cycle/download.html) From ab12f750989ef0985ced935d3bb771cdcb76cc92 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Wed, 25 Apr 2012 14:06:02 -0500 Subject: [PATCH 10/38] Merged code with latest from malsup Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index baeaddd..11941bc 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -2,7 +2,7 @@ * jQuery Cycle Plugin (with Transition Definitions) * Examples and documentation at: http://jquery.malsup.com/cycle/ * Copyright (c) 2007-2010 M. Alsup - * Version: 2.9999.4 (29-MAR-2012) + * Version: 2.9999.5 (10-APR-2012) * Dual licensed under the MIT and GPL licenses. * http://jquery.malsup.com/license.html * Requires: jQuery v1.3.2 or later @@ -15,7 +15,7 @@ ;(function($, undefined) { "use strict"; -var ver = '2.9999.4'; +var ver = '2.9999.5'; // if $.support is not defined (pre jQuery 1.3) add what I need if ($.support === undefined) { @@ -76,6 +76,7 @@ $.fn.cycle = function(options, arg2) { if (this.cycleTimeout) clearTimeout(this.cycleTimeout); this.cycleTimeout = this.cyclePause = 0; + this.cycleStop = 0; // issue #108 var $cont = $(this); var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children(); From f315a9657b28909461a2cc9e5705a308e742fff8 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Thu, 17 May 2012 17:25:36 -0500 Subject: [PATCH 11/38] A few small modifications for device specific issues. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 16 +++------------- touchexample1.html | 2 -- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 11941bc..9f0f965 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -250,18 +250,8 @@ $.fn.cycle.addCSS3Support = function () { var extraSupport = [ 'transitionDuration', 'transitionDelay', 'transform', 'transformOrigin', 'transformStyle', 'transitionProperty', 'perspective', 'backfaceVisibility' ]; - var checkSupportForCSS3d = false; - if ( navigator.userAgent.match(/webkit/gi) ) { - var style3d = $('').appendTo('head'); - var testEle3d = $(' ').appendTo('body'); - checkSupportForCSS3d = !!(testEle3d.css('display') == 'none'); - style3d.remove(); - testEle3d.remove(); - style3d = null; - testEle3d = null; - } else { - checkSupportForCSS3d = !navigator.userAgent.match(/webkit/gi); - } + var checkSupportForCSS3d = !!( navigator.userAgent.match(/ipod|ipad|iphone/gi) ); + if ( checkSupportForCSS3d ) { var totalsup = addSupportFor.join('|') + '|' + extraSupport.join('|'); addSupportFor = totalsup.split('|'); @@ -356,7 +346,7 @@ function integrateTouch (opts, cont) { //TOUCHMOD -- ADD CSS RULES TO HELP ENGAGE iOS Hardware Acceleration - $(opts.elements).css( { backfaceVisibility: 'hidden', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent' } ); + $(opts.elements).css( { transform: 'translate3d(0,0,0)', userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent' } ); //TOUCHMOD -- TOUCH BEHAVIOR INITIALIZATION var initSlidePos, snapSlideBack, dragSlideTick; diff --git a/touchexample1.html b/touchexample1.html index 61e3c74..d62038d 100644 --- a/touchexample1.html +++ b/touchexample1.html @@ -70,8 +70,6 @@

This is Cycle Item 5

pager: '.pager', touchMinDrag: 5, rev: 0 - }).css({ - cursor: 'move' }); }); From 4af9f076a3ce315bac90cea486ced262e07c4d73 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Fri, 18 May 2012 11:10:14 -0500 Subject: [PATCH 12/38] Transition fixes, performance tweaks Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 29 ++++++++++++----------------- touchexample1.html | 12 +++++------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 9f0f965..1465969 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -9,7 +9,7 @@ * * Touch Support integration features ( "TOUCHMOD" ) * TOUCHMOD Requires: jQuery v1.4.3 or later - * Modified By: Keegan Brown -- TOUCHMOD Version: 0.9 (APR-2012) + * Modified By: Keegan Brown -- TOUCHMOD Version: 0.9.1 (MAY-2012) * */ ;(function($, undefined) { @@ -1833,7 +1833,10 @@ $.fn.cycle.transitions.wipe = function($cont, $slides, opts) { //TOUCHMOD -- TRANSITIONS WITH TOUCH-ENHANCEMENTS $.fn.cycle.transitions.touchScrollHorz = function($cont, $slides, opts) { - //$cont.css('overflow','hidden').width(); + if ( !!this && !this.isSetup ) { + $slides.css( { position: 'absolute', display: 'block', top: 0, left: 0, zIndex: 5, opacity: 1 } ); + this.isSetup = true; + } opts.before.push(function(curr, next, opts, fwd) { var dirrev = -1; if (opts.rev) { @@ -1843,20 +1846,17 @@ $.fn.cycle.transitions.touchScrollHorz = function($cont, $slides, opts) { $.fn.cycle.commonReset(curr,next,opts); opts.animOut.left = fwd ? curr.cycleW * dirrev : -curr.cycleW * dirrev; }); + opts.cssFirst.left = 0; opts.cssBefore.top = 0; opts.animIn.left = 0; opts.animOut.top = 0; - - //CSS RULES TO HELP ENGAGE iOS Hardware Acceleration - if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { - $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); - } } $.fn.cycle.transitions.touchScrollHorz.activeDir = { x: 1, y: 0 } $.fn.cycle.transitions.touchScrollHorz.initSlidePos = function ( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ) { var move = { x: (mainContSize.width * dir.x * revdir), y: (mainContSize.height * dir.y * revdir) } - prevElem.css( { left: -move.x + currStart.x, top: -move.y + currStart.y, display: 'block', opacity: 1 } ); - nextElem.css( { left: move.x + currStart.x, top: move.y + currStart.y, display: 'block', opacity: 1 } ); + prevElem.stop(true,false).css( { left: -move.x + currStart.x, top: -move.y + currStart.y, display: 'block', opacity: 1 } ); + currElem.stop(true,false).css( { left: 0, top: 0, display: 'block', opacity: 1 } ); + nextElem.stop(true,false).css( { left: move.x + currStart.x, top: move.y + currStart.y, display: 'block', opacity: 1 } ); } $.fn.cycle.transitions.touchScrollHorz.snapSlideBack = function ( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ) { var move = { x: (mainContSize.width * dir.x * revdir), y: (mainContSize.height * dir.y * revdir) } @@ -1868,17 +1868,17 @@ $.fn.cycle.transitions.touchScrollHorz.dragSlideTick = function ( opts, prevElem prevElem.stop(true,false).css( { left: ( ( -mainContSize.width + diffPos.pageX ) * dir.x ) + currStart.x, top: ( ( -mainContSize.height + diffPos.pageY ) * dir.y ) + currStart.y, - display: 'block', opacity: 1 + display: 'block', opacity: 1, zIndex: 9 } ); currElem.stop(true,false).css( { left: ( ( 0 + diffPos.pageX ) * dir.x ) + currStart.x, top: ( ( 0 + diffPos.pageY ) * dir.y ) + currStart.y, - display: 'block', opacity: 1 + display: 'block', opacity: 1, zIndex: 10 } ); nextElem.stop(true,false).css( { left: ( ( mainContSize.width + diffPos.pageX ) * dir.x ) + currStart.x, top: ( ( mainContSize.height + diffPos.pageY ) * dir.y ) + currStart.y, - display: 'block', opacity: 1 + display: 'block', opacity: 1, zIndex: 9 } ); } @@ -1898,11 +1898,6 @@ $.fn.cycle.transitions.touchScrollVert = function($cont, $slides, opts) { opts.cssBefore.left = 0; opts.animIn.top = 0; opts.animOut.left = 0; - - //CSS RULES TO HELP ENGAGE iOS Hardware Acceleration - if ( !!window.navigator.userAgent.match(/ipad|ipod|iphone/) ) { - $cont.parent().css( { transform: 'translate3d(0,0,0)' } ); - } } $.fn.cycle.transitions.touchScrollVert.activeDir = { x: 0, y: 1 } $.fn.cycle.transitions.touchScrollVert.initSlidePos = function ( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ) { diff --git a/touchexample1.html b/touchexample1.html index d62038d..8dbf92d 100644 --- a/touchexample1.html +++ b/touchexample1.html @@ -12,6 +12,8 @@ + + @@ -55,15 +57,11 @@

This is Cycle Item 5

- - - - - -
@@ -56,10 +55,9 @@

This is Cycle Item 5

This is a fork of cycle.

- + - + + + +
+ +
+
+
    +
  • +
    +

    This is Cycle Item 1

    +

    This is some content, with a link

    +
    +
  • +
  • +
    +

    This is Cycle Item 2

    +
    +
  • +
+
+ +
+ + + + + + + + + From 0b5c9f3a4b3ab43cfa158b49163b2aa3711716ad Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Mon, 23 Jul 2012 17:08:42 -0500 Subject: [PATCH 24/38] Added fancy 3d Touch Transition example in touchexample3.html. Signed-off-by: Keegan Brown --- touchexample3.html | 419 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 419 insertions(+) create mode 100644 touchexample3.html diff --git a/touchexample3.html b/touchexample3.html new file mode 100644 index 0000000..69a9efb --- /dev/null +++ b/touchexample3.html @@ -0,0 +1,419 @@ + + + + + + jQuery-Cycle Touch Integration Example + + + + + + + + + + + + +
+ +
+
+
    +
  • +
    +

    This is Cycle Item 1

    +

    This is some content, with a link

    +
    +
  • +
  • +
    +

    This is Cycle Item 2

    +
    +
  • +
  • +
    +

    This is Cycle Item 3

    +
    +
  • +
  • +
    +

    This is Cycle Item 4

    +
    +
  • +
  • +
    +

    This is Cycle Item 5

    +
    +
  • +
+
+ +
+ + + + + + + + + From fa15d379125a423a215c0caadf171206730238bf Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 09:34:28 -0500 Subject: [PATCH 25/38] Fixing examples to make them more usable. Signed-off-by: Keegan Brown --- touchexample/css/style.css | 9 ++++++ touchexample1.html | 8 +++--- touchexample2.html | 10 +++---- touchexample3.html | 58 ++------------------------------------ touchexample4.html | 6 ++-- 5 files changed, 24 insertions(+), 67 deletions(-) diff --git a/touchexample/css/style.css b/touchexample/css/style.css index 9fa3d5b..c0df191 100644 --- a/touchexample/css/style.css +++ b/touchexample/css/style.css @@ -161,6 +161,15 @@ body { overflow: hidden; } +#cycle * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + .cycleItem { min-height: 100%; width: 100%; diff --git a/touchexample1.html b/touchexample1.html index 6de0d01..4acaa53 100644 --- a/touchexample1.html +++ b/touchexample1.html @@ -61,12 +61,12 @@

This is Cycle Item 5

$('#cycle').cycle({ fx: 'scrollHorz', speed: 500, - touchFx: 'touchScrollHorz', - touchClickDrag: true, timeout: 0, pager: '.pager', - touchMinDrag: 5, - rev: 0 + rev: 0, + touchFx: 'touchScrollHorz', + touchClickDrag: true, + touchMinDrag: 5 }); }); diff --git a/touchexample2.html b/touchexample2.html index fdb539f..d592d00 100644 --- a/touchexample2.html +++ b/touchexample2.html @@ -145,15 +145,15 @@

This is Cycle Item 5

$('#cycle').cycle({ fx: 'customTouch', speed: 500, - touchFx: 'customTouch', slideResize: 0, containerResize: 0, - touchClickDrag: false, - touchCycleLimit: 70, timeout: 0, pager: '.pager', - touchMinDrag: 5, - rev: 0 + rev: 0, + touchFx: 'customTouch', + touchClickDrag: true, + touchCycleLimit: 70, + touchMinDrag: 5 }) }); diff --git a/touchexample3.html b/touchexample3.html index 69a9efb..05b4eea 100644 --- a/touchexample3.html +++ b/touchexample3.html @@ -15,7 +15,6 @@ -webkit-transform: translate3d(0,0,0); height: 300px; } - @@ -90,10 +89,6 @@

This is Cycle Item 5

transitionProperty : String($.support['transform']).toLowerCase().replace(/(\w+)(?=transform)/,'-$1-') + ', left', transitionDuration : '0s' }); - $slides.children().css({ - //transformStyle: 'flat', - //backfaceVisibility : "hidden" - }); $cont.css({ overflow :'hidden', @@ -103,7 +98,6 @@

This is Cycle Item 5

}); opts.before.push(function(curr, next, opts, fwd) { - var $curr = $(curr), $next = $(next), dirrev = -1, @@ -163,53 +157,7 @@

This is Cycle Item 5

}); } setTimeout( transition, 1); - //opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW); - //opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW; - }); - opts.after.push(function(curr, next, opts, fwd) { -/* - var $curr = $(curr), - $next = $(next), - dirrev = -1, - folddir = 1, - orgdir = '100% 50%', - nextdir = '0% 50%', - pushlen = opts.$cont.width(); - - if (opts.rev) { - fwd = !fwd; - dirrev = 1; - } - if ( !fwd ) { - folddir = -1; - orgdir = '0% 50%'; - nextdir = '100% 50%'; - } - - console.log( "$curr: " + pushlen*-folddir ); - - $curr.css({ - top: 0, - left: pushlen*-folddir, - transform : 'rotateY('+(90*-folddir)+'deg) translate3d(0,0,0)', - //transitionDuration : opts.speed+'ms', - transformOrigin : orgdir - }); - $next.css({ - top: 0, - left: 0, - display : 'block', - transform : 'rotateY(0deg) translate3d(0,0,0)', - //transitionDuration : opts.speed+'ms', - transformOrigin : nextdir - }); -*/ - //$slides.css( { transform: 'rotateY(0) translate3d(0,0,0)', transitionDuration: 0 } ); }); - //opts.cssBefore.top = 0; - //opts.animIn.left = 0; - //opts.animIn.transitionDuration = '0ms'; - //opts.animOut.transitionDuration = '0ms'; } $.fn.cycle.transitions.touchFoldHorz = function($cont, $slides, opts) { if ( !$.fn.cycle.haveCheckedCSS3Support ) { @@ -406,10 +354,10 @@

This is Cycle Item 5

$('#cycle').cycle({ fx: 'foldHorz', speed: 500, + timeout: 8000, + pager: '.pager', touchFx: 'touchFoldHorz', - touchClickDrag: true, - timeout: 4000, - pager: '.pager' + touchClickDrag: true }) }); diff --git a/touchexample4.html b/touchexample4.html index 7d4d20a..81606fa 100644 --- a/touchexample4.html +++ b/touchexample4.html @@ -49,12 +49,12 @@

This is Cycle Item 2

$('#cycle').cycle({ fx: 'scrollHorz', speed: 500, - touchFx: 'touchScrollHorz', - touchClickDrag: true, timeout: 0, pager: '.pager', + rev: 0, touchMinDrag: 5, - rev: 0 + touchFx: 'touchScrollHorz', + touchClickDrag: true }); }); From 524a972bfb01c310475fc36e0f443fbc991a582b Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 14:11:12 -0500 Subject: [PATCH 26/38] Add gh-pages to README.md. Move example links. Signed-off-by: Keegan Brown --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5f3f1ca..4412e66 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ -Touch Integration +Cycle + Touch =================== -* [Touch Example 1](http://www.devpam.com/touch-cycle/touchexample1.html) -* [Touch Example 2](http://www.devpam.com/touch-cycle/touchexample2.html) +Fork homepage: [http://keeganbrown.github.com/cycle/] (http://keeganbrown.github.com/cycle/) + +* [Simple Example] (http://keeganbrown.github.com/cycle/touchexample1.html) +* [Custom Transition Example] (http://keeganbrown.github.com/cycle/touchexample2.html) +* [Super Fancy 3D Custom Transition] (http://keeganbrown.github.com/cycle/touchexample3.html) +* [Example with only 2 Slides] (http://keeganbrown.github.com/cycle/touchexample4.html) Integrating touch-compatibility requires a number of user-settable new options, and some modification/addition to core functionality in cycle. From e70445658380e5bd783bb0b1dcb4f9ed5db67dfa Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 16:14:48 -0500 Subject: [PATCH 27/38] Touch detection had false positive in IE 8. Trying a more robust solution. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 14 +++++++++----- touchexample1.html | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 5243d52..e8daa51 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -238,14 +238,18 @@ function destroy(cont, opts) { // BEGIN TOUCHMOD SUPPORT HANDLING var supportsTouch = false; var detectTouchSupport = function (bypass) { - var testEle = document.createElement('div'); - testEle.setAttribute('ontouchstart', 'return;'); - supportsTouch = !!testEle.ontouchstart; - testEle.setAttribute('ontouchstart', null); + try { + if ( 'ontouchstart' in window && + 'createTouch' in document && + typeof TouchEvent != "undefined" && + typeof Touch == "object" && + "ontouchend" in document) { + supportsTouch = !!testEle.ontouchstart; + } + } catch (e) { supportsTouch = false; } // Add jQuery support for CSS3 + vendor prefixes if ( supportsTouch ) { $.fn.cycle.addCSS3Support(); } - testEle = null; return supportsTouch; } diff --git a/touchexample1.html b/touchexample1.html index 4acaa53..af7d316 100644 --- a/touchexample1.html +++ b/touchexample1.html @@ -63,10 +63,10 @@

This is Cycle Item 5

speed: 500, timeout: 0, pager: '.pager', - rev: 0, + rev: 0 /*, touchFx: 'touchScrollHorz', touchClickDrag: true, - touchMinDrag: 5 + touchMinDrag: 5 */ }); }); From ca796c7df38b1c6d8a06354498ed0a3a3367c438 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 16:32:47 -0500 Subject: [PATCH 28/38] More tweaks to touch detection. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index e8daa51..8eab17c 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -243,8 +243,9 @@ var detectTouchSupport = function (bypass) { 'createTouch' in document && typeof TouchEvent != "undefined" && typeof Touch == "object" && - "ontouchend" in document) { - supportsTouch = !!testEle.ontouchstart; + "ontouchend" in document ) + { + supportsTouch = true; } } catch (e) { supportsTouch = false; } From 92b046fc944653a90e84f1f90567117287d55676 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 16:38:53 -0500 Subject: [PATCH 29/38] bug fixes Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 26 +++++++++++++------------- touchexample1.html | 7 ++++--- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 8eab17c..bf17c4f 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -255,19 +255,6 @@ var detectTouchSupport = function (bypass) { return supportsTouch; } $.fn.cycle.haveCheckedCSS3Support = false; -$.fn.cycle.addCSS3Support = function () { - $.fn.cycle.haveCheckedCSS3Support = true; - var addSupportFor = [ 'userSelect', 'userModify', 'userDrag', 'tapHighlightColor' ]; - var extraSupport = [ 'transitionDuration', 'transitionDelay', 'transform', 'transformOrigin', 'transformStyle','transitionProperty', 'transition', 'perspective', 'backfaceVisibility' ]; - - var checkSupportForCSS3d = !!navigator.userAgent.match(/ipod|ipad|iphone/gi); - - if ( checkSupportForCSS3d ) { - var totalsup = addSupportFor.join('|') + '|' + extraSupport.join('|'); - addSupportFor = totalsup.split('|'); - } - $( addSupportFor ).each( checkStyleSupport ); -} $.fn.cycle.checkStyleSupport = function checkStyleSupport ( index, prop ) { var vendorProp, supportedProp, // capitalize first character of the prop to test vendor prefix @@ -306,6 +293,19 @@ $.fn.cycle.checkStyleSupport = function checkStyleSupport ( index, prop ) { } return supportedProp; } +$.fn.cycle.addCSS3Support = function () { + $.fn.cycle.haveCheckedCSS3Support = true; + var addSupportFor = [ 'userSelect', 'userModify', 'userDrag', 'tapHighlightColor' ]; + var extraSupport = [ 'transitionDuration', 'transitionDelay', 'transform', 'transformOrigin', 'transformStyle','transitionProperty', 'transition', 'perspective', 'backfaceVisibility' ]; + + var checkSupportForCSS3d = !!navigator.userAgent.match(/ipod|ipad|iphone/gi); + + if ( checkSupportForCSS3d ) { + var totalsup = addSupportFor.join('|') + '|' + extraSupport.join('|'); + addSupportFor = totalsup.split('|'); + } + $( addSupportFor ).each( $.fn.cycle.checkStyleSupport ); +} function bindTouchPause ($cont, touchPause, touchUnpause) { //TOUCHMOD -- ADD PAUSE ON TOUCH BINDINGS $cont.bind({ diff --git a/touchexample1.html b/touchexample1.html index af7d316..816c828 100644 --- a/touchexample1.html +++ b/touchexample1.html @@ -63,10 +63,11 @@

This is Cycle Item 5

speed: 500, timeout: 0, pager: '.pager', - rev: 0 /*, - touchFx: 'touchScrollHorz', + rev: 0, + touchFx: 'touchScrollHorz' /*, touchClickDrag: true, - touchMinDrag: 5 */ + touchMinDrag: 5 + */ }); }); From 6124357377cb71a8f6e96318e6ddc3ad02bfc626 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 16:49:24 -0500 Subject: [PATCH 30/38] Removed one of the the touch tests because it fails on android. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 1 - 1 file changed, 1 deletion(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index bf17c4f..8865461 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -242,7 +242,6 @@ var detectTouchSupport = function (bypass) { if ( 'ontouchstart' in window && 'createTouch' in document && typeof TouchEvent != "undefined" && - typeof Touch == "object" && "ontouchend" in document ) { supportsTouch = true; From 43ef2bec9ecd7ccfef7deffc1a97e188472eba95 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 16:55:58 -0500 Subject: [PATCH 31/38] Removed one more touch test due to failure on a different android device. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 1 - 1 file changed, 1 deletion(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 8865461..ae5ad5d 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -240,7 +240,6 @@ var supportsTouch = false; var detectTouchSupport = function (bypass) { try { if ( 'ontouchstart' in window && - 'createTouch' in document && typeof TouchEvent != "undefined" && "ontouchend" in document ) { From a35f6a3ff4a0dc8c9ca82bc32f50b09a323d5173 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Tue, 24 Jul 2012 17:02:43 -0500 Subject: [PATCH 32/38] caught a rogue style that was causing some android probs. remember not to use the hardware acceleration trick for ios in android. it makes things bad. Signed-off-by: Keegan Brown --- touchexample/css/style.css | 2 +- touchexample1.html | 7 ++----- touchexample2.html | 2 +- touchexample3.html | 2 +- touchexample4.html | 2 +- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/touchexample/css/style.css b/touchexample/css/style.css index c0df191..60ee1f3 100644 --- a/touchexample/css/style.css +++ b/touchexample/css/style.css @@ -134,7 +134,7 @@ body { max-width: 980px; margin: 0 auto; text-align: left; - -webkit-transform: translate3d(0,0,0); + /*-webkit-transform: translate3d(0,0,0);*/ background-color: #000; position: relative; } diff --git a/touchexample1.html b/touchexample1.html index 816c828..24b8e27 100644 --- a/touchexample1.html +++ b/touchexample1.html @@ -7,7 +7,7 @@ - + @@ -64,10 +64,7 @@

This is Cycle Item 5

timeout: 0, pager: '.pager', rev: 0, - touchFx: 'touchScrollHorz' /*, - touchClickDrag: true, - touchMinDrag: 5 - */ + touchFx: 'touchScrollHorz' }); }); diff --git a/touchexample2.html b/touchexample2.html index d592d00..3504218 100644 --- a/touchexample2.html +++ b/touchexample2.html @@ -7,7 +7,7 @@ - + diff --git a/touchexample3.html b/touchexample3.html index 05b4eea..d4310ef 100644 --- a/touchexample3.html +++ b/touchexample3.html @@ -7,7 +7,7 @@ - + - - - - - -
- -
-
-
    -
  • -
    -

    This is Cycle Item 1

    -

    This is some content, with a link

    -
    -
  • -
  • -
    -

    This is Cycle Item 2

    -
    -
  • -
  • -
    -

    This is Cycle Item 3

    -
    -
  • -
  • -
    -

    This is Cycle Item 4

    -
    -
  • -
  • -
    -

    This is Cycle Item 5

    -
    -
  • -
-
- -
- - - - - - - - - diff --git a/touchexample4.html b/touchexample4.html deleted file mode 100644 index 8108538..0000000 --- a/touchexample4.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - jQuery-Cycle Touch Integration Example - - - - - - - - - - - -
- -
-
-
    -
  • -
    -

    This is Cycle Item 1

    -

    This is some content, with a link

    -
    -
  • -
  • -
    -

    This is Cycle Item 2

    -
    -
  • -
-
- -
- - - - - - - - - From 7f687db0d2c846ad87505cf1a94838cfc1cf39d7 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Fri, 24 Aug 2012 14:35:33 -0500 Subject: [PATCH 34/38] Syncing up my local branch. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 8e6e464..20064c5 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -487,8 +487,15 @@ function integrateTouch (opts, cont) { var dragMove = function (event) { window.cycle_touchMoveCurrentPos = getTouchPos(event); - if ( dragstate === 'dragging' ) { - event.preventDefault(); + event.preventDefault(); + + // allow touch scrolling. + var scrollDifX = ( window.cycle_touchMoveCurrentPos.pageX - initPos.pageX ) * dir.y; + var scrollDifY = ( window.cycle_touchMoveCurrentPos.pageY - initPos.pageY ) * dir.x; + + if ( dragstate === 'locked' ) { + if ( !!scrollDifY ) $(window).scrollTop($(window).scrollTop() - scrollDifY); + if ( !!scrollDifX ) $(window).scrollLeft($(window).scrollLeft() - scrollDifX); } } From d0ed2b3d8abca72fda1072b927015e8b3b5f0709 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Fri, 24 Aug 2012 14:50:31 -0500 Subject: [PATCH 35/38] small fix --- jquery.cycle.all.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 20064c5..25bf469 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -490,8 +490,8 @@ function integrateTouch (opts, cont) { event.preventDefault(); // allow touch scrolling. - var scrollDifX = ( window.cycle_touchMoveCurrentPos.pageX - initPos.pageX ) * dir.y; - var scrollDifY = ( window.cycle_touchMoveCurrentPos.pageY - initPos.pageY ) * dir.x; + var scrollDifX = ( window.cycle_touchMoveCurrentPos.pageX - initPos.pageX ) * dir.x; + var scrollDifY = ( window.cycle_touchMoveCurrentPos.pageY - initPos.pageY ) * dir.y; if ( dragstate === 'locked' ) { if ( !!scrollDifY ) $(window).scrollTop($(window).scrollTop() - scrollDifY); From 1a24a7d62832a3aac90ac39c4ecc16d641d87d78 Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Fri, 26 Oct 2012 10:52:46 -0500 Subject: [PATCH 36/38] Sync up latest version. a few tweaks. pretty much given up on issue #2. bleh. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index 25bf469..db3ef87 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -460,6 +460,9 @@ function integrateTouch (opts, cont) { dragging = true; dragstate = null; } + if( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) { + event.preventDefault(); + } } var dragFrameTick = function () { @@ -469,6 +472,14 @@ function integrateTouch (opts, cont) { Math.abs( diffPos.pageY ) * dir.x > opts.touchMinDrag ) ) { dragstate = 'locked'; } + if ( dragstate === 'locked' ) { + if( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) { + var scrollDifY = $(window).scrollTop() - ( ( window.cycle_touchMoveCurrentPos.pageY - initPos.pageY ) * dir.x ); + var scrollDifX = $(window).scrollLeft() - ( ( window.cycle_touchMoveCurrentPos.pageX - initPos.pageX ) * dir.y ); + if ( !!scrollDifY ) $(window).scrollTop(scrollDifY); + if ( !!scrollDifY ) $(window).scrollLeft(scrollDifX); + } + } if ( !!!opts.busy && dragging && dragstate !== 'locked' ) { diffPos.pageX = currPos.pageX - initPos.pageX; diffPos.pageY = currPos.pageY - initPos.pageY; @@ -482,20 +493,11 @@ function integrateTouch (opts, cont) { } window.requestAnimationFrame( dragFrameTick ); } - window.requestAnimationFrame( dragFrameTick ); - var dragMove = function (event) { window.cycle_touchMoveCurrentPos = getTouchPos(event); - event.preventDefault(); - - // allow touch scrolling. - var scrollDifX = ( window.cycle_touchMoveCurrentPos.pageX - initPos.pageX ) * dir.x; - var scrollDifY = ( window.cycle_touchMoveCurrentPos.pageY - initPos.pageY ) * dir.y; - - if ( dragstate === 'locked' ) { - if ( !!scrollDifY ) $(window).scrollTop($(window).scrollTop() - scrollDifY); - if ( !!scrollDifX ) $(window).scrollLeft($(window).scrollLeft() - scrollDifX); + if ( dragstate === 'dragging' || ( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) ) { + event.preventDefault(); } } @@ -530,7 +532,6 @@ function integrateTouch (opts, cont) { dragging = false; dragstate = null; - event.preventDefault(); } } var dragCancel = function (e) { @@ -560,6 +561,8 @@ function integrateTouch (opts, cont) { mouseup: dragEnd }); } + + dragFrameTick(); } } // END TOUCHMOD SUPPORT HANDLING From 136d1c8a45ed982906a8ba40c4d58575ba51621e Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Thu, 8 Nov 2012 12:33:08 -0600 Subject: [PATCH 37/38] Version bump. Signed-off-by: Keegan Brown --- jquery.cycle.all.js | 274 ++++++++++++++++++++++---------------------- 1 file changed, 135 insertions(+), 139 deletions(-) diff --git a/jquery.cycle.all.js b/jquery.cycle.all.js index db3ef87..795b025 100644 --- a/jquery.cycle.all.js +++ b/jquery.cycle.all.js @@ -9,13 +9,13 @@ * * Touch Support integration features ( "TOUCHMOD" ) * TOUCHMOD Requires: jQuery v1.4.3 or later - * Modified By: Keegan Brown -- TOUCHMOD Version: 0.9.5 (26-JULY-2012) + * Modified By: Keegan Brown -- TOUCHMOD Version: 0.9.8 (08-NOV-2012) * */ ;(function($, undefined) { "use strict"; -var ver = '2.9999.5'; +var ver = '2.9999.5' + " + TOUCHMOD"; // if $.support is not defined (pre jQuery 1.3) add what I need if ($.support === undefined) { @@ -297,40 +297,12 @@ $.fn.cycle.addCSS3Support = function () { var extraSupport = [ 'transitionDuration', 'transitionDelay', 'transform', 'transformOrigin', 'transformStyle','transitionProperty', 'transition', 'perspective', 'backfaceVisibility' ]; var checkSupportForCSS3d = !!navigator.userAgent.match(/ipod|ipad|iphone/gi); - if ( checkSupportForCSS3d ) { var totalsup = addSupportFor.join('|') + '|' + extraSupport.join('|'); addSupportFor = totalsup.split('|'); } $( addSupportFor ).each( $.fn.cycle.checkStyleSupport ); } -function bindTouchPause ($cont, touchPause, touchUnpause) { - //TOUCHMOD -- ADD PAUSE ON TOUCH BINDINGS - $cont.bind({ - touchstart: touchPause, - touchend: touchUnpause - }); -} -function bindClickAndDrag ($cont, touchPause, touchUnpause) { - //TOUCHMOD -- CLICK AND DRAG BEHAVIOR - // FOR EMULATING TOUCH EVENTS ON DESKTOP - $cont.bind({ - mouseover: touchPause, - mouseout: touchUnpause - }); -} -function onTouchPause () { - $(this).data( 'touchPauseFlag', true ); - this.cyclePause++; - triggerPause(this, true); -} -function onTouchUnPause () { - var pauseFlag = !!$(this).data( 'touchPauseFlag' ); - if (pauseFlag) - this.cyclePause--; - triggerPause(this, true); - $(this).data( 'touchPauseFlag', false ); -} function destroyTouch (cont, opts) { //TOUCHMOD -- DESTROY TOUCHMOD RELATED EVENT LISTENERS. @@ -372,12 +344,6 @@ function integrateTouch (opts, cont) { polyfillRequestAnimFrame(window); if ( !!supportsTouch && ( !!opts.touchFx || $.fn.cycle.transitions[opts.fx].activeDir ) ) { - - bindTouchPause($(cont), onTouchPause, onTouchUnPause ); - if ( !!opts.touchClickDrag ) { - bindClickAndDrag($(cont), onTouchPause, onTouchUnPause ); - } - var getTouchPos = function (event) { if ( !!event && !!event.originalEvent && !!event.originalEvent.touches ) { return ({ pageX: event.originalEvent.touches[0].pageX, pageY: event.originalEvent.touches[0].pageY }); @@ -387,37 +353,78 @@ function integrateTouch (opts, cont) { return ({ pageX: 0, pageY: 0 }); } - var initPos = getTouchPos(), - diffPos = getTouchPos(), - dragging = false, - prevElem, currElem, nextElem, - $cont = opts.$cont, - mainContSize = { - width: $cont.width(), - height: $cont.height() - }, - touchFx = null, - dir = { x: 0, y: 0 }, - currStart = { x: 0, y: 0 }, - changeCycle = 0, - dragstate = null, - revdir = ( !!opts.rev ) ? -1 : 1; + var SCROLLING_DRAGSTATE = "locked_for_page_scroll", + DRAGGING_DRAGSTATE = "dragging_cycle_elements", + INIT_DRAGSTATE = "init_dragging"; + + var $cont = opts.$cont; + + opts.touch = { + initPos: getTouchPos(), diffPos: getTouchPos(), + prevElem: null, currElem: null, nextElem: null, + mainContSize: { width: $cont.width(), height: $cont.height() }, + touchFx: null, + dir: { x: 0, y: 0 }, + currStart: { x: 0, y: 0 }, + changeCycle: 0, dragstate: null, + revdir: ( ( !!opts.rev ) ? -1 : 1 ) + } + + //window.opts = opts; + var bindTouchPause = function ($cont, touchPause, touchUnpause) { + $(window).bind({ + touchstart: touchPause, + touchend: touchUnpause + }); + } + var bindPauseOnClickAndDrag = function ($cont, touchPause, touchUnpause) { + $(window).bind({ + mouseover: touchPause, + mouseout: touchUnpause + }); + } + var onTouchPause = function () { + $cont.data( 'touchPauseFlag', true ); + $cont[0].cyclePause++; + triggerPause( $cont[0], true ); + } + var onTouchUnPause = function () { + var pauseFlag = !!$cont.data( 'touchPauseFlag' ); + if ( pauseFlag ) + $cont[0].cyclePause--; + triggerPause( $cont[0], true ); + $cont.data( 'touchPauseFlag', false ); + } + bindTouchPause( $(cont), onTouchPause, onTouchUnPause ); + if ( !!opts.touchClickDrag ) { + bindPauseOnClickAndDrag( $(cont), onTouchPause, onTouchUnPause ); + } + + //TOUCHMOD -- HANDLING FOR SCROLLING RESULTING JAVASCRIPT PROBLEMS + var abortDrag = function () { + opts.touch.initPos = getTouchPos(); + opts.touch.diffPos = getTouchPos(); + opts.touch.dragstate = null; + } //TOUCHMOD -- ADD CSS RULES TO PREVENT ODD BEHAVIOR, EG SELECTING TEXT WHILE TOUCHMOVE - $(opts.elements).css( { userSelect: 'none', userModify: 'read-only', userDrag: 'none', tapHighlightColor: 'transparent' } ); + $(opts.elements).css( { + userSelect: 'none', userModify: 'read-only', + userDrag: 'none', tapHighlightColor: 'transparent' + } ); //TOUCHMOD -- TOUCH BEHAVIOR INITIALIZATION var initSlidePos, snapSlideBack, dragSlideTick; //TOUCHMOD -- TOUCH TRANSITION & ASSOCIATED OPTIONS if ( !!opts.touchFx && !!$.fn.cycle.transitions[opts.touchFx] ) { - touchFx = opts.touchFx; - dir = ( !!$.fn.cycle.transitions[opts.touchFx].activeDir ) ? $.fn.cycle.transitions[opts.touchFx].activeDir : { x: 1, y: 0 }; - if ( !!dir.x ) { - changeCycle = (mainContSize.width/4); - } else if ( !!dir.y ) { - changeCycle = (mainContSize.height/4); + opts.touch.touchFx = opts.touchFx; + opts.touch.dir = ( !!$.fn.cycle.transitions[opts.touchFx].activeDir ) ? $.fn.cycle.transitions[opts.touchFx].activeDir : { x: 1, y: 0 }; + if ( !!opts.touch.dir.x ) { + opts.touch.changeCycle = (opts.touch.mainContSize.width/4); + } else if ( !!opts.touch.dir.y ) { + opts.touch.changeCycle = (opts.touch.mainContSize.height/4); } //ALLOW USER OPTION TO OVERRIDE DEFAULT TOUCH BEHAVIOR INITIALIZATION @@ -433,70 +440,67 @@ function integrateTouch (opts, cont) { } else { return false; } - changeCycle = ( !!opts.touchCycleLimit ) ? opts.touchCycleLimit : changeCycle; + + opts.touch.changeCycle = ( !!opts.touchCycleLimit ) ? opts.touchCycleLimit : opts.touch.changeCycle; //TOUCHMOD -- TOUCH CORE FUNCTIONALITY -- GETTING POSITION OF TOUCH EVENTS, PREPARING ELEMENTS FOR DRAGGING + var resetTransition = function () { + $.fn.cycle.resetState(opts); + } var dragStart = function (event) { - if ( !!!opts.busy ) { + if( !!opts.busy || !!( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) ) { event.preventDefault(); } + if( !!opts.busy ) { resetTransition(); } + + if ( !opts.touch.dragstate && !opts.busy ) { window.cycle_touchMoveCurrentPos = getTouchPos(event); var currPos = window.cycle_touchMoveCurrentPos; - initPos.pageX = currPos.pageX - initPos.pageX; - initPos.pageY = currPos.pageY - initPos.pageY; + opts.touch.initPos.pageX = currPos.pageX - opts.touch.initPos.pageX; + opts.touch.initPos.pageY = currPos.pageY - opts.touch.initPos.pageY; + var prevNum = (opts.elements.length + opts.currSlide - 1) % opts.elements.length; var nextNum = (opts.elements.length + opts.currSlide + 1) % opts.elements.length; - $(opts.elements).stop(true,true); - - prevElem = $( opts.elements[prevNum] ); - currElem = $( opts.elements[opts.currSlide] ); - nextElem = $( opts.elements[nextNum] ); + opts.touch.prevElem = $( opts.elements[prevNum] ); + opts.touch.currElem = $( opts.elements[opts.currSlide] ); + opts.touch.nextElem = $( opts.elements[nextNum] ); - currStart.x = currElem.position().left; - currStart.y = currElem.position().top; + opts.touch.currStart.x = opts.touch.currElem.position().left; + opts.touch.currStart.y = opts.touch.currElem.position().top; - initSlidePos( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ); + initSlidePos( opts, opts.touch.prevElem, opts.touch.currElem, opts.touch.nextElem, opts.touch.initPos, opts.touch.mainContSize, opts.touch.dir, opts.touch.revdir, opts.touch.currStart ); - dragging = true; - dragstate = null; - } - if( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) { - event.preventDefault(); + opts.touch.dragstate = INIT_DRAGSTATE; } } var dragFrameTick = function () { var currPos = window.cycle_touchMoveCurrentPos; - if ( dragstate !== 'dragging' && !!opts.touchMinDrag && - ( Math.abs( diffPos.pageX ) * dir.y > opts.touchMinDrag || - Math.abs( diffPos.pageY ) * dir.x > opts.touchMinDrag ) ) { - dragstate = 'locked'; - } - if ( dragstate === 'locked' ) { - if( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) { - var scrollDifY = $(window).scrollTop() - ( ( window.cycle_touchMoveCurrentPos.pageY - initPos.pageY ) * dir.x ); - var scrollDifX = $(window).scrollLeft() - ( ( window.cycle_touchMoveCurrentPos.pageX - initPos.pageX ) * dir.y ); - if ( !!scrollDifY ) $(window).scrollTop(scrollDifY); - if ( !!scrollDifY ) $(window).scrollLeft(scrollDifX); - } - } - if ( !!!opts.busy && dragging && dragstate !== 'locked' ) { - diffPos.pageX = currPos.pageX - initPos.pageX; - diffPos.pageY = currPos.pageY - initPos.pageY; - if ( dragstate !== 'locked' && ( Math.abs( diffPos.pageX ) * dir.x > opts.touchMinDrag || Math.abs( diffPos.pageY ) * dir.y > opts.touchMinDrag ) ) { - dragSlideTick( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); - dragstate = 'dragging'; + opts.touch.diffPos.pageX = currPos.pageX - opts.touch.initPos.pageX; + opts.touch.diffPos.pageY = currPos.pageY - opts.touch.initPos.pageY; + + if ( opts.touch.dragstate === DRAGGING_DRAGSTATE ) { + if ( Math.abs( opts.touch.diffPos.pageX ) * opts.touch.dir.x > opts.touchMinDrag || Math.abs( opts.touch.diffPos.pageY ) * opts.touch.dir.y > opts.touchMinDrag ) { + dragSlideTick( opts, opts.touch.prevElem, opts.touch.currElem, opts.touch.nextElem, opts.touch.diffPos, opts.touch.mainContSize, opts.touch.dir, opts.touch.revdir, opts.touch.currStart ); } else { - snapSlideBack( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); + snapSlideBack( opts, opts.touch.prevElem, opts.touch.currElem, opts.touch.nextElem, opts.touch.diffPos, opts.touch.mainContSize, opts.touch.dir, opts.touch.revdir, opts.touch.currStart ); } } window.requestAnimationFrame( dragFrameTick ); } var dragMove = function (event) { - window.cycle_touchMoveCurrentPos = getTouchPos(event); - if ( dragstate === 'dragging' || ( navigator.userAgent.match(/android/gi) || location.href.match('testandroid') ) ) { + if ( !!opts.touch.dragstate && !opts.busy ) { + window.cycle_touchMoveCurrentPos = getTouchPos(event); + if ( opts.touch.dragstate === INIT_DRAGSTATE && ( Math.abs( opts.touch.diffPos.pageX ) * opts.touch.dir.x > opts.touchMinDrag || Math.abs( opts.touch.diffPos.pageY ) * opts.touch.dir.y > opts.touchMinDrag ) ) { + opts.touch.dragstate = DRAGGING_DRAGSTATE; + } + if ( opts.touch.dragstate === INIT_DRAGSTATE && ( Math.abs( opts.touch.diffPos.pageX ) * opts.touch.dir.y > opts.touchMinDrag || Math.abs( opts.touch.diffPos.pageY ) * opts.touch.dir.x > opts.touchMinDrag ) ) { + opts.touch.dragstate = SCROLLING_DRAGSTATE; + } + } + if ( opts.touch.dragstate === DRAGGING_DRAGSTATE || !!opts.busy ) { event.preventDefault(); } } @@ -504,55 +508,55 @@ function integrateTouch (opts, cont) { window.cycle_touchMoveCurrentPos = getTouchPos(); var dragEnd = function (event) { - if ( !!!opts.busy && dragging ) { + if ( opts.touch.dragstate === DRAGGING_DRAGSTATE ) { var cacheOpts = { speed: opts.speed, fx: opts.fx, ease: opts.easing } + var newspeed = 0; - opts.fx = touchFx; + opts.fx = opts.touch.touchFx; opts.easing = 'linear'; - $(opts.elements).stop(true,true); - - if ( dragstate !== 'locked' && dragging && !!dir.x && Math.abs(diffPos.pageX) > changeCycle ) { - opts.speed = opts.speedIn = opts.speedOut = Math.round( opts.speed * ( ( mainContSize.width - (mainContSize.width/4) - Math.abs( diffPos.pageX ) ) / mainContSize.width ) ) + 50; - if ( diffPos.pageX < 0 ) advance(opts,1); - if ( diffPos.pageX > 0) advance(opts,0); - } else if ( dragstate !== 'locked' && dragging && !!dir.y && Math.abs(diffPos.pageY) > changeCycle ) { - opts.speed = opts.speedIn = opts.speedOut = Math.round( opts.speed * ( ( mainContSize.height - (mainContSize.height/4) - Math.abs( diffPos.pageY ) ) / mainContSize.height ) ) + 50; - if ( diffPos.pageY < 0 ) advance(opts,1); - if ( diffPos.pageY > 0) advance(opts,0); + if ( !!opts.touch.dir.x && Math.abs(opts.touch.diffPos.pageX) > opts.touch.changeCycle ) { + newspeed = Math.round( opts.speed * ( ( opts.touch.mainContSize.width - (opts.touch.mainContSize.width/4) - Math.abs( opts.touch.diffPos.pageX ) ) / opts.touch.mainContSize.width ) ) + 50; + opts.speed = newspeed; + opts.speedIn = newspeed; + opts.speedOut = newspeed; + + if ( opts.touch.diffPos.pageX <= 0) advance(opts,1); + if ( opts.touch.diffPos.pageX > 0) advance(opts,0); + } else if ( !!opts.touch.dir.y && Math.abs(opts.touch.diffPos.pageY) > opts.touch.changeCycle ) { + newspeed = Math.round( opts.speed * ( ( opts.touch.mainContSize.height - (opts.touch.mainContSize.height/4) - Math.abs( opts.touch.diffPos.pageY ) ) / opts.touch.mainContSize.height ) ) + 50; + opts.speed = newspeed; + opts.speedIn = newspeed; + opts.speedOut = newspeed; + + if ( opts.touch.diffPos.pageY <= 0) advance(opts,1); + if ( opts.touch.diffPos.pageY > 0) advance(opts,0); } else { - snapSlideBack( opts, prevElem, currElem, nextElem, diffPos, mainContSize, dir, revdir, currStart ); + snapSlideBack( opts, opts.touch.prevElem, opts.touch.currElem, opts.touch.nextElem, opts.touch.diffPos, opts.touch.mainContSize, opts.touch.dir, opts.touch.revdir, opts.touch.currStart ); } - opts.speed = opts.speedIn = opts.speedOut = cacheOpts.speed; + opts.touch.dragstate = null; + opts.speed = cacheOpts.speed; + opts.speedIn = cacheOpts.speed; + opts.speedOut = cacheOpts.speed; opts.fx = cacheOpts.fx; opts.easing = cacheOpts.ease; - initPos = getTouchPos(); - diffPos = getTouchPos(); - - dragging = false; - dragstate = null; - } - } - var dragCancel = function (e) { - if ( !!e.originalEvent && !!e.originalEvent.touches && !!e.originalEvent.touches.length ) { + opts.touch.initPos = getTouchPos(); + opts.touch.diffPos = getTouchPos(); + } else { abortDrag(); } } - var abortDrag = function () { - snapSlideBack( opts, prevElem, currElem, nextElem, initPos, mainContSize, dir, revdir, currStart ); - - dragging = false; - dragstate = null; - opts.busy = false; + var dragCancel = function (e) { + abortDrag(); } - $cont.bind( { + $cont.bind({ touchstart: dragStart, touchmove: dragMove, touchend: dragEnd, touchcancel: dragCancel - } ); + }); if (opts.touchClickDrag) { $cont.bind({ @@ -1259,14 +1263,7 @@ $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { $a.hover(pagerFn, function(){/* no-op */} ); } else { - // TOUCHMOD -- INTEGRATE TOUCH FUNCTIONALITY INTO PAGERS - if ( !supportsTouch ) { - $a.bind(opts.pagerEvent, pagerFn); - } else { - $a.bind(opts.touchPagerEvent, pagerFn); - $a.bind(opts.pagerEvent, function (e) { e.preventDefault(); }); - //$a.bind(opts.pagerEvent, pagerFn); - } + $a.bind(opts.pagerEvent, pagerFn); } if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) @@ -1390,7 +1387,7 @@ $.fn.cycle.defaults = { autostop: 0, // true to end slideshow after X transitions (where X == slide count) autostopCount: 0, // number of transitions (optionally used with autostop to define X) backwards: false, // true to start slideshow at last slide and move backwards through the stack - before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag) + before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag) center: null, // set to true to have cycle add top/left margin to each slide (use with width and height options) cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE) cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides) @@ -1437,11 +1434,10 @@ $.fn.cycle.defaults = { sync: 1, // true if in/out transitions should occur simultaneously timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance) timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag) - touchFx: null, // name of touch transition effect. Touch Functionality will not be enabled if left "null" or "false" + touchFx: null, // name of touch transition effect. Touch Functionality will not be enabled if left "null" or "false" touchCycleLimit: 0, // Number (in px) for touch gesture before a touchend event will force a cycle. touchClickDrag: 0, // true to enable mouse slide-dragging. touchMinDrag: 0, // Minimum (in px) before touch handling will effect positioning of the cycle - touchPagerEvent: 'touchstart.cycle', //Touch Event to use for pagers. updateActivePagerLink: null,// callback fn invoked to update the active pager link (adds/removes activePagerClass style) width: null // container width (if the 'fit' option is true, the slides will be set to this width as well) }; From ef9c9d8ea033f7be027ce01f02b23008ad0ef32a Mon Sep 17 00:00:00 2001 From: Keegan Brown Date: Wed, 22 May 2013 09:36:35 -0500 Subject: [PATCH 38/38] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4412e66..b91b51b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +Note: Currently in a bit of state of disrepair. Use at your own risk. + + Cycle + Touch ===================