From 033cf7f649a350e511ad5616ab9e38aff4f941e8 Mon Sep 17 00:00:00 2001 From: Alex McPherson Date: Thu, 28 Jun 2012 19:57:28 -0700 Subject: [PATCH 01/16] Adding working stage --- hackathonPages/browser-support.html | 277 ++++++++++++++++++++++++++++ hackathonPages/css/style.css | 0 hackathonPages/downloads.html | 277 ++++++++++++++++++++++++++++ hackathonPages/main.html | 277 ++++++++++++++++++++++++++++ 4 files changed, 831 insertions(+) create mode 100644 hackathonPages/browser-support.html create mode 100644 hackathonPages/css/style.css create mode 100644 hackathonPages/downloads.html create mode 100644 hackathonPages/main.html diff --git a/hackathonPages/browser-support.html b/hackathonPages/browser-support.html new file mode 100644 index 0000000..3d03f25 --- /dev/null +++ b/hackathonPages/browser-support.html @@ -0,0 +1,277 @@ + + + + + + + + + + + + +jQuery + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + +
+ + + +
+ + +
+ + +

jQuery

+ + + + + + + + + + + + +
+ + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/hackathonPages/css/style.css b/hackathonPages/css/style.css new file mode 100644 index 0000000..e69de29 diff --git a/hackathonPages/downloads.html b/hackathonPages/downloads.html new file mode 100644 index 0000000..3d03f25 --- /dev/null +++ b/hackathonPages/downloads.html @@ -0,0 +1,277 @@ + + + + + + + + + + + + +jQuery + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + +
+ + + +
+ + +
+ + +

jQuery

+ + + + + + + + + + + + +
+ + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/hackathonPages/main.html b/hackathonPages/main.html new file mode 100644 index 0000000..3d03f25 --- /dev/null +++ b/hackathonPages/main.html @@ -0,0 +1,277 @@ + + + + + + + + + + + + +jQuery + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + +
+ + + +
+ + +
+ + +

jQuery

+ + + + + + + + + + + + +
+ + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + From a2f2be035f5a1e1066d6cf15e18c0f80893357a0 Mon Sep 17 00:00:00 2001 From: Alex McPherson Date: Thu, 28 Jun 2012 20:07:23 -0700 Subject: [PATCH 02/16] Adding js folders --- hackathonPages/js/main.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 hackathonPages/js/main.js diff --git a/hackathonPages/js/main.js b/hackathonPages/js/main.js new file mode 100644 index 0000000..e69de29 From 7a800504ece1fa07dc6b674155e3559953360117 Mon Sep 17 00:00:00 2001 From: David Crowther Date: Thu, 28 Jun 2012 21:19:44 -0600 Subject: [PATCH 03/16] Added html for the download box and col Feature grid pieces --- hackathonPages/main.html | 83 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/hackathonPages/main.html b/hackathonPages/main.html index 3d03f25..0e02df1 100644 --- a/hackathonPages/main.html +++ b/hackathonPages/main.html @@ -166,6 +166,89 @@

jQuery

From 53501d733b73466962b9b3f41ab47192f378cb46 Mon Sep 17 00:00:00 2001 From: David Crowther Date: Thu, 28 Jun 2012 21:29:08 -0600 Subject: [PATCH 04/16] Added featured features in header and used-by links under header. --- hackathonPages/main.html | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/hackathonPages/main.html b/hackathonPages/main.html index 0e02df1..697246c 100644 --- a/hackathonPages/main.html +++ b/hackathonPages/main.html @@ -166,6 +166,30 @@

jQuery

+ +

Download the latest version

@@ -183,6 +207,19 @@

Download the latest version

Current release: v1.7.2

+
+

Used by:

+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
  • 5-col Feature Grid

      From ef94b22e7ab46114b42b2800dced498d6dd1a9f4 Mon Sep 17 00:00:00 2001 From: David Crowther Date: Thu, 28 Jun 2012 21:31:37 -0600 Subject: [PATCH 05/16] Release version should be a link to the release notes (see download page) --- hackathonPages/main.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hackathonPages/main.html b/hackathonPages/main.html index 697246c..79bce0d 100644 --- a/hackathonPages/main.html +++ b/hackathonPages/main.html @@ -204,7 +204,7 @@

      Download the latest version

    -

    Current release: v1.7.2

    +

    Current release: v1.7.2

From 6a572e75cf17b0ebcc5e99cd80de43dbb1ed4049 Mon Sep 17 00:00:00 2001 From: David Crowther Date: Thu, 28 Jun 2012 21:43:36 -0600 Subject: [PATCH 06/16] Added download / CDN link box --- hackathonPages/downloads.html | 38 ++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/hackathonPages/downloads.html b/hackathonPages/downloads.html index 3d03f25..2ad5295 100644 --- a/hackathonPages/downloads.html +++ b/hackathonPages/downloads.html @@ -166,7 +166,43 @@

jQuery

- +
+
+

CDN Hosted jQuery

+

Below are links to the CDN-hosted copies of jQuery that you may hotlink to.

+ +
+
+
+

Download jQuery

+
    +
  • + + +
  • +
  • + + +
  • +
+ +

Current release: v1.7.2

+
+
+
From cc31f66c1b9025892c5f60cb444f62824a557473 Mon Sep 17 00:00:00 2001 From: David Crowther Date: Thu, 28 Jun 2012 22:03:56 -0600 Subject: [PATCH 07/16] Keith Davenport added the About the Code section to the Download page --- hackathonPages/downloads.html | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/hackathonPages/downloads.html b/hackathonPages/downloads.html index 2ad5295..7b1be73 100644 --- a/hackathonPages/downloads.html +++ b/hackathonPages/downloads.html @@ -202,7 +202,28 @@

Download jQuery

Current release: v1.7.2

- + +
+

+ About the Code +

+

+ The code itself is written cleanly in an attempt to self-document. If you've spotted some areas of code that could be inproved, please feel freeto discuss it on the Development mailing list. All input is gladly appreciated! +

+

+ All the code is available in two formats +

    +
  • Compressed (which allows you to have a significantly smaller file size) and +
  • Uncompressed (good for debugging and to understand what is behind the magic) +
+

+

+ If your interested in downloading Plugins developed by jQuery contributors, please visit the Pluginspage. +

+

+ jQuery is provided under the following MIT and GPL licenses. +

+
From 811a319859683a134e324176ce9865625fc87703 Mon Sep 17 00:00:00 2001 From: Connor McSheffrey Date: Thu, 28 Jun 2012 21:20:08 -0700 Subject: [PATCH 08/16] added carousels --- hackathonPages/.DS_Store | Bin 0 -> 6148 bytes hackathonPages/css/style.css | 35 + hackathonPages/img/repeating-header.jpg | Bin 0 -> 3213 bytes hackathonPages/img/slide-1.jpg | Bin 0 -> 11367 bytes hackathonPages/img/slide-2.jpg | Bin 0 -> 9210 bytes hackathonPages/img/slide-3.jpg | Bin 0 -> 8423 bytes hackathonPages/js/jquery.cycle.all.js | 1545 +++++++++++++++++++++++ hackathonPages/main.html | 25 + page/index.html | 25 + 9 files changed, 1630 insertions(+) create mode 100644 hackathonPages/.DS_Store create mode 100644 hackathonPages/img/repeating-header.jpg create mode 100644 hackathonPages/img/slide-1.jpg create mode 100644 hackathonPages/img/slide-2.jpg create mode 100644 hackathonPages/img/slide-3.jpg create mode 100644 hackathonPages/js/jquery.cycle.all.js diff --git a/hackathonPages/.DS_Store b/hackathonPages/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a660656609450cc58678533efbd7743e8946d848 GIT binary patch literal 6148 zcmeHKOH0E*5Z+CzZcrf?p~uB@kv^ze@DM@;k3tJQSkZ)tjnt+zDLvF^@DKTKJo{6e z+1-kzdb7Tmf!S|%c4n9P686Cu)IO>vE#)HUlj${-J;sAP2 z!DuO(9KVqP{B{Kvv0HW>Oy7UML6oGG$}_hL#kKVfVGFU<>qf&co_g_Q7$#@!emreQ z;Z@*|&y}6}=_K*|u^Kt`(>{zSyA#I)uzM!D8-;2A!YR#WwfbRMR-4VNEN9I|tt=b+ z^(?c6Z96YwXLs-Dq~qUZ_Yb*dj>Au;WZU2z9>K8K4NHEYga(#y@FgY8%ONBNhyh|? z)eM;JRBWz#A)22UAO`*%1Gqm(P(;^Yu2F3r(BSnE$BT$4VB=c?Q5tj&<{DuHgzHp5 zoyyGy#z(UxLo5~3K;4rhFCm`OQ1@?FVO&W4dxob Q140)8MFTa&z_&8+3Xe2)CjbBd literal 0 HcmV?d00001 diff --git a/hackathonPages/css/style.css b/hackathonPages/css/style.css index e69de29..82f0512 100644 --- a/hackathonPages/css/style.css +++ b/hackathonPages/css/style.css @@ -0,0 +1,35 @@ +/* main.html */ + +.carousel { + border: 1px solid #e6e6e6; + -webkit-background-clip: padding-box; /* fix WebKit background bleed on border-radius */ + -webkit-border-radius-top-left: 0; /* pre-Safari 5, delete unused */ + -webkit-border-radius-top-right: 0; + -webkit-border-radius-bottom-right: 5px; + -webkit-border-radius-bottom-left: 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; + +} + +.carousel h2 { + background: url(../img/repeating-header.jpg); + -webkit-background-clip: padding-box; /* fix WebKit background bleed on border-radius */ + -webkit-border-radius-top-left: 5px; /* pre-Safari 5, delete unused */ + -webkit-border-radius-top-right: 5px; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + padding: 15px; + width: 100%; +} + +.carousel h2 small { + color: #86d1fc; + float: right; + font-weight: normal; +} \ No newline at end of file diff --git a/hackathonPages/img/repeating-header.jpg b/hackathonPages/img/repeating-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe1a1d931e7f8827e8eb6bdb34d2cda80b774e67 GIT binary patch literal 3213 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 B725y+ literal 0 HcmV?d00001 diff --git a/hackathonPages/img/slide-2.jpg b/hackathonPages/img/slide-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..305bb87a818ecb1d0b0133b4b83a410f60c4eb06 GIT binary patch literal 9210 zcma)g1yogA*XTa9h=g>vG#t7?ngbl^?&bg|=te|9TIrJRR#F-T0qI6sL{L&1>Bqfa z{cnu#f8)(D_SkdHHG9pu_gd@j>)jeaq2vp5000Pt6Tkuf19!Usk)oHaiyr_2Fz(4x z0C2a4&g10iiIU*sLwN97+aYc2d2Nw!K3{7TA3rac50H}eMOoXr*n2YA*gL`y(oDbG zx|kSXcG66S!cZ_2rC{#_Q}uVZ*Y$s2A*;%nRnR1&i=AhzRlW3xUOj#JL#+ z!2Do7egQtPC=WkaLReG+%+K&oV7j;FZs#DOqp18(TlXVrrhf+ILP3-AdD@Z59oc=#bat$leA9?bvJplI)5>kdPC!jK4tzcgCgAiX@LneILPM+k7# zzt#TNT>TG5DD?l$3WxudfWOsxcILM0#w4^L}^tvy6hn(1B# zFAQcUp(LazBET=8C@(H3%FnOFFAf$EkQWk@;};X;7gLtw|Cg*H($))ZkMR7LtlfWP zmHt=Rzls5ly0@%o?+){}w^MdU!WsS!S_1Z8d=V2976Z!(-s|HR`0u{_L)Pwp_eJ4< z^@Z==8NR=k_J1t(zexA>^B4N>!o45-yY%f5_x0|6U)Xp10RG?Q3fOhuHxTG<5eNgY zFfcGMF|aT(u^wREKM!%Ruy7vY;o?5T#l<7U`x^-H@CgVB@bQR=Nl1u^X{f2GY3TnA zAZ%>xM|h7Y2ni{uNQp?P{yp*ki`;bsL^wb!P>T*C0?>#+=tQ8qUZCLKKMZsb=s*1r zpkrWSfzWWUAKX*_?->Auc0Wl7pn=dZFwimY0psCc0ivN3VE~MeG5LwHu;rLYw5
K>|~YwOV?{6vI;2n3+r0|*@r6Z0RYL1;wijF0){ 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 literal 0 HcmV?d00001 diff --git a/hackathonPages/js/jquery.cycle.all.js b/hackathonPages/js/jquery.cycle.all.js new file mode 100644 index 0000000..fd4cc87 --- /dev/null +++ b/hackathonPages/js/jquery.cycle.all.js @@ -0,0 +1,1545 @@ +/*! + * jQuery Cycle Plugin (with Transition Definitions) + * Examples and documentation at: http://jquery.malsup.com/cycle/ + * Copyright (c) 2007-2010 M. Alsup + * 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 + */ +;(function($, undefined) { +"use strict"; + +var ver = '2.9999.5'; + +// if $.support is not defined (pre jQuery 1.3) add what I need +if ($.support === undefined) { + $.support = { + opacity: !($.browser.msie) + }; +} + +function debug(s) { + if ($.fn.cycle.debug) + log(s); +} +function log() { + if (window.console && console.log) + console.log('[cycle] ' + Array.prototype.join.call(arguments,' ')); +} +$.expr[':'].paused = function(el) { + return el.cyclePause; +}; + + +// the options arg can be... +// a number - indicates an immediate transition should occur to the given slide index +// a string - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc) +// an object - properties to control the slideshow +// +// the arg2 arg can be... +// the name of an fx (only used in conjunction with a numeric value for 'options') +// the value true (only used in first arg == 'resume') and indicates +// that the resume should occur immediately (not wait for next timeout) + +$.fn.cycle = function(options, arg2) { + var o = { s: this.selector, c: this.context }; + + // in 1.3+ we can fix mistakes with the ready state + if (this.length === 0 && options != 'stop') { + if (!$.isReady && o.s) { + log('DOM not ready, queuing slideshow'); + $(function() { + $(o.s,o.c).cycle(options,arg2); + }); + return this; + } + // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready() + log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)')); + return this; + } + + // iterate the matched nodeset + return this.each(function() { + var opts = handleArguments(this, options, arg2); + if (opts === false) + return; + + opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink; + + // stop existing slideshow for this container (if there is one) + 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(); + var els = $slides.get(); + + if (els.length < 2) { + log('terminating; too few slides: ' + els.length); + return; + } + + var opts2 = buildOptions($cont, $slides, els, opts, o); + if (opts2 === false) + return; + + var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards); + + // if it's an auto slideshow, kick it off + if (startTime) { + startTime += (opts2.delay || 0); + if (startTime < 10) + startTime = 10; + debug('first timeout: ' + startTime); + this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards);}, startTime); + } + }); +}; + +function triggerPause(cont, byHover, onPager) { + var opts = $(cont).data('cycle.opts'); + var paused = !!cont.cyclePause; + if (paused && opts.paused) + opts.paused(cont, opts, byHover, onPager); + else if (!paused && opts.resumed) + opts.resumed(cont, opts, byHover, onPager); +} + +// process the args that were passed to the plugin fn +function handleArguments(cont, options, arg2) { + if (cont.cycleStop === undefined) + cont.cycleStop = 0; + if (options === undefined || options === null) + options = {}; + if (options.constructor == String) { + switch(options) { + case 'destroy': + case 'stop': + var opts = $(cont).data('cycle.opts'); + if (!opts) + return false; + cont.cycleStop++; // callbacks look for change + if (cont.cycleTimeout) + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + if (opts.elements) + $(opts.elements).stop(); + $(cont).removeData('cycle.opts'); + if (options == 'destroy') + destroy(cont, opts); + return false; + case 'toggle': + cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1; + checkInstantResume(cont.cyclePause, arg2, cont); + triggerPause(cont); + return false; + case 'pause': + cont.cyclePause = 1; + triggerPause(cont); + return false; + case 'resume': + cont.cyclePause = 0; + checkInstantResume(false, arg2, cont); + triggerPause(cont); + return false; + case 'prev': + case 'next': + opts = $(cont).data('cycle.opts'); + if (!opts) { + log('options not found, "prev/next" ignored'); + return false; + } + $.fn.cycle[options](opts); + return false; + default: + options = { fx: options }; + } + return options; + } + else if (options.constructor == Number) { + // go to the requested slide + var num = options; + options = $(cont).data('cycle.opts'); + if (!options) { + log('options not found, can not advance slide'); + return false; + } + if (num < 0 || num >= options.elements.length) { + log('invalid slide index: ' + num); + return false; + } + options.nextSlide = num; + if (cont.cycleTimeout) { + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + } + if (typeof arg2 == 'string') + options.oneTimeFx = arg2; + go(options.elements, options, 1, num >= options.currSlide); + return false; + } + return options; + + function checkInstantResume(isPaused, arg2, cont) { + if (!isPaused && arg2 === true) { // resume now! + var options = $(cont).data('cycle.opts'); + if (!options) { + log('options not found, can not resume'); + return false; + } + if (cont.cycleTimeout) { + clearTimeout(cont.cycleTimeout); + cont.cycleTimeout = 0; + } + go(options.elements, options, 1, !options.backwards); + } + } +} + +function removeFilter(el, opts) { + if (!$.support.opacity && opts.cleartype && el.style.filter) { + try { el.style.removeAttribute('filter'); } + catch(smother) {} // handle old opera versions + } +} + +// unbind event handlers +function destroy(cont, opts) { + if (opts.next) + $(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(); + }); + opts.pagerAnchors = null; + $(cont).unbind('mouseenter.cycle mouseleave.cycle'); + if (opts.destroy) // callback + opts.destroy(opts); +} + +// one-time initialization +function buildOptions($cont, $slides, els, options, o) { + var startingSlideSpecified; + // support metadata plugin (v1.0 and v2.0) + var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {}); + var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null; + if (meta) + opts = $.extend(opts, meta); + if (opts.autostop) + opts.countdown = opts.autostopCount || els.length; + + var cont = $cont[0]; + $cont.data('cycle.opts', opts); + opts.$cont = $cont; + opts.stopCount = cont.cycleStop; + opts.elements = els; + opts.before = opts.before ? [opts.before] : []; + opts.after = opts.after ? [opts.after] : []; + + // push some after callbacks + if (!$.support.opacity && opts.cleartype) + opts.after.push(function() { removeFilter(this, opts); }); + if (opts.continuous) + opts.after.push(function() { go(els,opts,0,!opts.backwards); }); + + saveOriginalOpts(opts); + + // clearType corrections + if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) + clearTypeFix($slides); + + // container requires non-static position so that slides can be position within + if ($cont.css('position') == 'static') + $cont.css('position', 'relative'); + if (opts.width) + $cont.width(opts.width); + if (opts.height && opts.height != 'auto') + $cont.height(opts.height); + + if (opts.startingSlide !== undefined) { + opts.startingSlide = parseInt(opts.startingSlide,10); + if (opts.startingSlide >= els.length || opts.startSlide < 0) + opts.startingSlide = 0; // catch bogus input + else + startingSlideSpecified = true; + } + else if (opts.backwards) + opts.startingSlide = els.length - 1; + else + opts.startingSlide = 0; + + // if random, mix up the slide array + if (opts.random) { + opts.randomMap = []; + for (var i = 0; i < els.length; i++) + opts.randomMap.push(i); + opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;}); + if (startingSlideSpecified) { + // try to find the specified starting slide and if found set start slide index in the map accordingly + for ( var cnt = 0; cnt < els.length; cnt++ ) { + if ( opts.startingSlide == opts.randomMap[cnt] ) { + opts.randomIndex = cnt; + } + } + } + else { + opts.randomIndex = 1; + opts.startingSlide = opts.randomMap[1]; + } + } + else if (opts.startingSlide >= els.length) + opts.startingSlide = 0; // catch bogus input + opts.currSlide = opts.startingSlide || 0; + var first = opts.startingSlide; + + // set position and zIndex on all the slides + $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) { + var z; + if (opts.backwards) + z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i; + else + z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i; + $(this).css('z-index', z); + }); + + // make sure first slide is visible + $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case + removeFilter(els[first], opts); + + // stretch slides + if (opts.fit) { + if (!opts.aspect) { + if (opts.width) + $slides.width(opts.width); + if (opts.height && opts.height != 'auto') + $slides.height(opts.height); + } else { + $slides.each(function(){ + var $slide = $(this); + var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect; + if( opts.width && $slide.width() != opts.width ) { + $slide.width( opts.width ); + $slide.height( opts.width / ratio ); + } + + if( opts.height && $slide.height() < opts.height ) { + $slide.height( opts.height ); + $slide.width( opts.height * ratio ); + } + }); + } + } + + if (opts.center && ((!opts.fit) || opts.aspect)) { + $slides.each(function(){ + var $slide = $(this); + $slide.css({ + "margin-left": opts.width ? + ((opts.width - $slide.width()) / 2) + "px" : + 0, + "margin-top": opts.height ? + ((opts.height - $slide.height()) / 2) + "px" : + 0 + }); + }); + } + + if (opts.center && !opts.fit && !opts.slideResize) { + $slides.each(function(){ + var $slide = $(this); + $slide.css({ + "margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0, + "margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0 + }); + }); + } + + // stretch container + var reshape = opts.containerResize && !$cont.innerHeight(); + if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9 + var maxw = 0, maxh = 0; + for(var j=0; j < els.length; j++) { + var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight(); + if (!w) w = e.offsetWidth || e.width || $e.attr('width'); + if (!h) h = e.offsetHeight || e.height || $e.attr('height'); + maxw = w > maxw ? w : maxw; + maxh = h > maxh ? h : maxh; + } + if (maxw > 0 && maxh > 0) + $cont.css({width:maxw+'px',height:maxh+'px'}); + } + + var pauseFlag = false; // https://github.com/malsup/cycle/issues/44 + if (opts.pause) + $cont.bind('mouseenter.cycle', function(){ + pauseFlag = true; + this.cyclePause++; + triggerPause(cont, true); + }).bind('mouseleave.cycle', function(){ + if (pauseFlag) + this.cyclePause--; + triggerPause(cont, true); + }); + + if (supportMultiTransitions(opts) === false) + return false; + + // apparently a lot of people use image slideshows without height/width attributes on the images. + // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that. + var requeue = false; + options.requeueAttempts = options.requeueAttempts || 0; + $slides.each(function() { + // try to get height/width of each slide + var $el = $(this); + this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0); + this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0); + + if ( $el.is('img') ) { + // sigh.. sniffing, hacking, shrugging... this crappy hack tries to account for what browsers do when + // an image is being downloaded and the markup did not include sizing info (height/width attributes); + // there seems to be some "default" sizes used in this situation + var loadingIE = ($.browser.msie && this.cycleW == 28 && this.cycleH == 30 && !this.complete); + var loadingFF = ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete); + var loadingOp = ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete); + var loadingOther = (this.cycleH === 0 && this.cycleW === 0 && !this.complete); + // don't requeue for images that are still loading but have a valid size + if (loadingIE || loadingFF || loadingOp || loadingOther) { + if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever + log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH); + setTimeout(function() {$(o.s,o.c).cycle(options);}, opts.requeueTimeout); + requeue = true; + return false; // break each loop + } + else { + log('could not determine size of image: '+this.src, this.cycleW, this.cycleH); + } + } + } + return true; + }); + + if (requeue) + return false; + + opts.cssBefore = opts.cssBefore || {}; + opts.cssAfter = opts.cssAfter || {}; + opts.cssFirst = opts.cssFirst || {}; + opts.animIn = opts.animIn || {}; + opts.animOut = opts.animOut || {}; + + $slides.not(':eq('+first+')').css(opts.cssBefore); + $($slides[first]).css(opts.cssFirst); + + if (opts.timeout) { + opts.timeout = parseInt(opts.timeout,10); + // ensure that timeout and speed settings are sane + if (opts.speed.constructor == String) + 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; + } + if (opts.easing) + opts.easeIn = opts.easeOut = opts.easing; + if (!opts.speedIn) + opts.speedIn = opts.speed; + if (!opts.speedOut) + opts.speedOut = opts.speed; + + opts.slideCount = els.length; + opts.currSlide = opts.lastSlide = first; + if (opts.random) { + if (++opts.randomIndex == els.length) + opts.randomIndex = 0; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else if (opts.backwards) + opts.nextSlide = opts.startingSlide === 0 ? (els.length-1) : opts.startingSlide-1; + else + opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1; + + // run transition init fn + if (!opts.multiFx) { + var init = $.fn.cycle.transitions[opts.fx]; + if ($.isFunction(init)) + init($cont, $slides, opts); + else if (opts.fx != 'custom' && !opts.multiFx) { + log('unknown transition: ' + opts.fx,'; slideshow terminating'); + return false; + } + } + + // fire artificial events + var e0 = $slides[first]; + if (!opts.skipInitializationCallbacks) { + if (opts.before.length) + opts.before[0].apply(e0, [e0, e0, opts, true]); + if (opts.after.length) + opts.after[0].apply(e0, [e0, e0, opts, true]); + } + if (opts.next) + $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1);}); + if (opts.prev) + $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0);}); + if (opts.pager || opts.pagerAnchorBuilder) + buildPager(els,opts); + + exposeAddSlide(opts, els); + + return opts; +} + +// save off original opts so we can restore after clearing state +function saveOriginalOpts(opts) { + opts.original = { before: [], after: [] }; + opts.original.cssBefore = $.extend({}, opts.cssBefore); + opts.original.cssAfter = $.extend({}, opts.cssAfter); + opts.original.animIn = $.extend({}, opts.animIn); + opts.original.animOut = $.extend({}, opts.animOut); + $.each(opts.before, function() { opts.original.before.push(this); }); + $.each(opts.after, function() { opts.original.after.push(this); }); +} + +function supportMultiTransitions(opts) { + var i, tx, txs = $.fn.cycle.transitions; + // look for multiple effects + if (opts.fx.indexOf(',') > 0) { + opts.multiFx = true; + opts.fxs = opts.fx.replace(/\s*/g,'').split(','); + // discard any bogus effect names + for (i=0; i < opts.fxs.length; i++) { + var fx = opts.fxs[i]; + tx = txs[fx]; + if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) { + log('discarding unknown transition: ',fx); + opts.fxs.splice(i,1); + i--; + } + } + // if we have an empty list then we threw everything away! + if (!opts.fxs.length) { + log('No valid transitions named; slideshow terminating.'); + return false; + } + } + else if (opts.fx == 'all') { // auto-gen the list of transitions + opts.multiFx = true; + opts.fxs = []; + for (var p in txs) { + if (txs.hasOwnProperty(p)) { + tx = txs[p]; + if (txs.hasOwnProperty(p) && $.isFunction(tx)) + opts.fxs.push(p); + } + } + } + if (opts.multiFx && opts.randomizeEffects) { + // munge the fxs array to make effect selection random + var r1 = Math.floor(Math.random() * 20) + 30; + for (i = 0; i < r1; i++) { + var r2 = Math.floor(Math.random() * opts.fxs.length); + opts.fxs.push(opts.fxs.splice(r2,1)[0]); + } + debug('randomized fx sequence: ',opts.fxs); + } + return true; +} + +// provide a mechanism for adding slides after the slideshow has started +function exposeAddSlide(opts, els) { + opts.addSlide = function(newSlide, prepend) { + var $s = $(newSlide), s = $s[0]; + if (!opts.autostopCount) + opts.countdown++; + els[prepend?'unshift':'push'](s); + if (opts.els) + opts.els[prepend?'unshift':'push'](s); // shuffle needs this + opts.slideCount = els.length; + + // add the slide to the random map and resort + if (opts.random) { + opts.randomMap.push(opts.slideCount-1); + opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;}); + } + + $s.css('position','absolute'); + $s[prepend?'prependTo':'appendTo'](opts.$cont); + + if (prepend) { + opts.currSlide++; + opts.nextSlide++; + } + + if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) + clearTypeFix($s); + + if (opts.fit && opts.width) + $s.width(opts.width); + if (opts.fit && opts.height && opts.height != 'auto') + $s.height(opts.height); + s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height(); + s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width(); + + $s.css(opts.cssBefore); + + if (opts.pager || opts.pagerAnchorBuilder) + $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts); + + if ($.isFunction(opts.onAddSlide)) + opts.onAddSlide($s); + else + $s.hide(); // default behavior + }; +} + +// reset internal state; we do this on every pass in order to support multiple effects +$.fn.cycle.resetState = function(opts, fx) { + fx = fx || opts.fx; + opts.before = []; opts.after = []; + opts.cssBefore = $.extend({}, opts.original.cssBefore); + opts.cssAfter = $.extend({}, opts.original.cssAfter); + opts.animIn = $.extend({}, opts.original.animIn); + opts.animOut = $.extend({}, opts.original.animOut); + opts.fxFn = null; + $.each(opts.original.before, function() { opts.before.push(this); }); + $.each(opts.original.after, function() { opts.after.push(this); }); + + // re-init + var init = $.fn.cycle.transitions[fx]; + if ($.isFunction(init)) + init(opts.$cont, $(opts.elements), opts); +}; + +// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt +function go(els, opts, manual, fwd) { + var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide]; + + // opts.busy is true if we're in the middle of an animation + if (manual && opts.busy && opts.manualTrump) { + // let manual transitions requests trump active ones + debug('manualTrump in go(), stopping active transition'); + $(els).stop(true,true); + opts.busy = 0; + clearTimeout(p.cycleTimeout); + } + + // don't begin another timeout-based transition if there is one active + if (opts.busy) { + debug('transition active, ignoring new tx request'); + return; + } + + + // stop cycling if we have an outstanding stop request + if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) + return; + + // check to see if we should stop cycling based on autostop options + if (!manual && !p.cyclePause && !opts.bounce && + ((opts.autostop && (--opts.countdown <= 0)) || + (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) { + if (opts.end) + opts.end(opts); + return; + } + + // if slideshow is paused, only transition on a manual trigger + var changed = false; + if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) { + changed = true; + var fx = opts.fx; + // keep trying to get the slide size if we don't have it yet + curr.cycleH = curr.cycleH || $(curr).height(); + curr.cycleW = curr.cycleW || $(curr).width(); + next.cycleH = next.cycleH || $(next).height(); + next.cycleW = next.cycleW || $(next).width(); + + // support multiple transition types + if (opts.multiFx) { + if (fwd && (opts.lastFx === undefined || ++opts.lastFx >= opts.fxs.length)) + opts.lastFx = 0; + else if (!fwd && (opts.lastFx === undefined || --opts.lastFx < 0)) + opts.lastFx = opts.fxs.length - 1; + fx = opts.fxs[opts.lastFx]; + } + + // one-time fx overrides apply to: $('div').cycle(3,'zoom'); + if (opts.oneTimeFx) { + fx = opts.oneTimeFx; + opts.oneTimeFx = null; + } + + $.fn.cycle.resetState(opts, fx); + + // run the before callbacks + if (opts.before.length) + $.each(opts.before, function(i,o) { + if (p.cycleStop != opts.stopCount) return; + o.apply(next, [curr, next, opts, fwd]); + }); + + // stage the after callacks + var after = function() { + opts.busy = 0; + $.each(opts.after, function(i,o) { + if (p.cycleStop != opts.stopCount) return; + o.apply(next, [curr, next, opts, fwd]); + }); + if (!p.cycleStop) { + // queue next transition + queueNext(); + } + }; + + 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? + opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent); + else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ? + $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent); + else + $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent); + } + else { + queueNext(); + } + + if (changed || opts.nextSlide == opts.currSlide) { + // calculate the next slide + var roll; + opts.lastSlide = opts.currSlide; + if (opts.random) { + opts.currSlide = opts.nextSlide; + if (++opts.randomIndex == els.length) { + opts.randomIndex = 0; + opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;}); + } + opts.nextSlide = opts.randomMap[opts.randomIndex]; + if (opts.nextSlide == opts.currSlide) + opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1; + } + else if (opts.backwards) { + roll = (opts.nextSlide - 1) < 0; + if (roll && opts.bounce) { + opts.backwards = !opts.backwards; + opts.nextSlide = 1; + opts.currSlide = 0; + } + else { + opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1; + opts.currSlide = roll ? 0 : opts.nextSlide+1; + } + } + else { // sequence + roll = (opts.nextSlide + 1) == els.length; + if (roll && opts.bounce) { + opts.backwards = !opts.backwards; + opts.nextSlide = els.length-2; + opts.currSlide = els.length-1; + } + else { + opts.nextSlide = roll ? 0 : opts.nextSlide+1; + opts.currSlide = roll ? els.length-1 : opts.nextSlide-1; + } + } + } + if (changed && opts.pager) + opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass); + + function queueNext() { + // stage the next transition + var ms = 0, timeout = opts.timeout; + if (opts.timeout && !opts.continuous) { + ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd); + if (opts.fx == 'shuffle') + ms -= opts.speedOut; + } + else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic + ms = 10; + if (ms > 0) + p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards); }, ms); + } +} + +// invoked after transition +$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) { + $(pager).each(function() { + $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName); + }); +}; + +// calculate timeout value for current transition +function getTimeout(curr, next, opts, fwd) { + if (opts.timeoutFn) { + // call user provided calc fn + var t = opts.timeoutFn.call(curr,curr,next,opts,fwd); + while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout + t += opts.speed; + debug('calculated timeout: ' + t + '; speed: ' + opts.speed); + if (t !== false) + return t; + } + return opts.timeout; +} + +// expose next/prev function, caller must pass in state +$.fn.cycle.next = function(opts) { advance(opts,1); }; +$.fn.cycle.prev = function(opts) { advance(opts,0);}; + +// advance slide forward or back +function advance(opts, moveForward) { + var val = moveForward ? 1 : -1; + var els = opts.elements; + var p = opts.$cont[0], timeout = p.cycleTimeout; + if (timeout) { + clearTimeout(timeout); + p.cycleTimeout = 0; + } + if (opts.random && val < 0) { + // move back to the previously display slide + opts.randomIndex--; + if (--opts.randomIndex == -2) + opts.randomIndex = els.length-2; + else if (opts.randomIndex == -1) + opts.randomIndex = els.length-1; + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else if (opts.random) { + opts.nextSlide = opts.randomMap[opts.randomIndex]; + } + else { + opts.nextSlide = opts.currSlide + val; + if (opts.nextSlide < 0) { + if (opts.nowrap) return false; + opts.nextSlide = els.length - 1; + } + else if (opts.nextSlide >= els.length) { + if (opts.nowrap) return false; + opts.nextSlide = 0; + } + } + + var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated + if ($.isFunction(cb)) + cb(val > 0, opts.nextSlide, els[opts.nextSlide]); + go(els, opts, 1, moveForward); + return false; +} + +function buildPager(els, opts) { + var $p = $(opts.pager); + $.each(els, function(i,o) { + $.fn.cycle.createPagerAnchor(i,o,$p,els,opts); + }); + opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass); +} + +$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) { + var a; + if ($.isFunction(opts.pagerAnchorBuilder)) { + a = opts.pagerAnchorBuilder(i,el); + debug('pagerAnchorBuilder('+i+', el) returned: ' + a); + } + else + a = ''+(i+1)+''; + + if (!a) + return; + var $a = $(a); + // don't reparent if anchor is in the dom + if ($a.parents('body').length === 0) { + var arr = []; + if ($p.length > 1) { + $p.each(function() { + var $clone = $a.clone(true); + $(this).append($clone); + arr.push($clone[0]); + }); + $a = $(arr); + } + else { + $a.appendTo($p); + } + } + + opts.pagerAnchors = opts.pagerAnchors || []; + opts.pagerAnchors.push($a); + + var pagerFn = function(e) { + e.preventDefault(); + opts.nextSlide = i; + var p = opts.$cont[0], timeout = p.cycleTimeout; + if (timeout) { + clearTimeout(timeout); + p.cycleTimeout = 0; + } + var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated + if ($.isFunction(cb)) + cb(opts.nextSlide, els[opts.nextSlide]); + 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() { + pauseFlag = true; + cont.cyclePause++; + triggerPause(cont,true,true); + }, function() { + if (pauseFlag) + cont.cyclePause--; + triggerPause(cont,true,true); + } + ); + } +}; + +// helper fn to calculate the number of slides between the current and the next +$.fn.cycle.hopsFromLast = function(opts, fwd) { + var hops, l = opts.lastSlide, c = opts.currSlide; + if (fwd) + hops = c > l ? c - l : opts.slideCount - l; + else + hops = c < l ? l - c : l + opts.slideCount - c; + return hops; +}; + +// fix clearType problems in ie6 by setting an explicit bg color +// (otherwise text slides look horrible during a fade transition) +function clearTypeFix($slides) { + debug('applying clearType background-color hack'); + function hex(s) { + s = parseInt(s,10).toString(16); + return s.length < 2 ? '0'+s : s; + } + function getBg(e) { + for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) { + var v = $.css(e,'background-color'); + if (v && v.indexOf('rgb') >= 0 ) { + var rgb = v.match(/\d+/g); + return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]); + } + if (v && v != 'transparent') + return v; + } + return '#ffffff'; + } + $slides.each(function() { $(this).css('background-color', getBg(this)); }); +} + +// reset common props before the next transition +$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) { + $(opts.elements).not(curr).hide(); + if (typeof opts.cssBefore.opacity == 'undefined') + opts.cssBefore.opacity = 1; + opts.cssBefore.display = 'block'; + if (opts.slideResize && w !== false && next.cycleW > 0) + opts.cssBefore.width = next.cycleW; + if (opts.slideResize && h !== false && next.cycleH > 0) + opts.cssBefore.height = next.cycleH; + opts.cssAfter = opts.cssAfter || {}; + opts.cssAfter.display = 'none'; + $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0)); + $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1)); +}; + +// the actual fn for effecting a transition +$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) { + var $l = $(curr), $n = $(next); + var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut; + $n.css(opts.cssBefore); + if (speedOverride) { + if (typeof speedOverride == 'number') + speedIn = speedOut = speedOverride; + else + speedIn = speedOut = 1; + easeIn = easeOut = null; + } + var fn = function() { + $n.animate(opts.animIn, speedIn, easeIn, function() { + cb(); + }); + }; + $l.animate(opts.animOut, speedOut, easeOut, function() { + $l.css(opts.cssAfter); + if (!opts.sync) + fn(); + }); + if (opts.sync) fn(); +}; + +// transition definitions - only fade is defined here, transition pack defines the rest +$.fn.cycle.transitions = { + fade: function($cont, $slides, opts) { + $slides.not(':eq('+opts.currSlide+')').css('opacity',0); + opts.before.push(function(curr,next,opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.opacity = 0; + }); + opts.animIn = { opacity: 1 }; + opts.animOut = { opacity: 0 }; + opts.cssBefore = { top: 0, left: 0 }; + } +}; + +$.fn.cycle.ver = function() { return ver; }; + +// override these globally if you like (they are all optional) +$.fn.cycle.defaults = { + activePagerClass: 'activeSlide', // class name used for the active pager link + after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag) + allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling + animIn: null, // properties that define how the slide animates in + animOut: null, // properties that define how the slide animates out + aspect: false, // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option) + 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) + 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) + containerResize: 1, // resize container to fit largest slide + continuous: 0, // true to start next transition immediately after current one completes + cssAfter: null, // properties that defined the state of the slide after transitioning out + cssBefore: null, // properties that define the initial state of the slide before transitioning in + delay: 0, // additional delay (in ms) for first transition (hint: can be negative) + easeIn: null, // easing for "in" transition + easeOut: null, // easing for "out" transition + easing: null, // easing method for both in and out transitions + end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options) + fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms + fit: 0, // force slides to fit container + fx: 'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle') + fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag) + height: 'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well) + manualTrump: true, // causes manual transition to stop an active transition instead of being ignored + metaAttr: 'cycle', // data- attribute that holds the option data for the slideshow + next: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide + nowrap: 0, // true to prevent slideshow from wrapping + onPagerEvent: null, // callback fn for pager events: function(zeroBasedSlideIndex, slideElement) + onPrevNextEvent: null, // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement) + pager: null, // element, jQuery object, or jQuery selector string for the element to use as pager container + pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement) + pagerEvent: 'click.cycle', // name of event which drives the pager navigation + pause: 0, // true to enable "pause on hover" + pauseOnPagerHover: 0, // true to pause when hovering over pager link + prev: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide + prevNextEvent: 'click.cycle',// event which drives the manual transition to the previous or next slide + random: 0, // true for random, false for sequence (not applicable to shuffle fx) + randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random + requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded + requeueTimeout: 250, // ms delay for requeue + rev: 0, // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle) + shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 } + skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition + slideExpr: null, // expression for selecting slides (if something other than all children is required) + slideResize: 1, // force slide width/height to fixed size before every transition + speed: 1000, // speed of the transition (any valid fx speed value) + speedIn: null, // speed of the 'in' transition + speedOut: null, // speed of the 'out' transition + startingSlide: undefined,// zero-based index of the first slide to be displayed + 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) + 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) +}; + +})(jQuery); + + +/*! + * jQuery Cycle Plugin Transition Definitions + * This script is a plugin for the jQuery Cycle Plugin + * Examples and documentation at: http://malsup.com/jquery/cycle/ + * Copyright (c) 2007-2010 M. Alsup + * Version: 2.73 + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +(function($) { +"use strict"; + +// +// These functions define slide initialization and properties for the named +// transitions. To save file size feel free to remove any of these that you +// don't need. +// +$.fn.cycle.transitions.none = function($cont, $slides, opts) { + opts.fxFn = function(curr,next,opts,after){ + $(next).show(); + $(curr).hide(); + after(); + }; +}; + +// not a cross-fade, fadeout only fades out the top slide +$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) { + $slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 }); + opts.before.push(function(curr,next,opts,w,h,rev) { + $(curr).css('zIndex',opts.slideCount + (rev !== true ? 1 : 0)); + $(next).css('zIndex',opts.slideCount + (rev !== true ? 0 : 1)); + }); + opts.animIn.opacity = 1; + opts.animOut.opacity = 0; + opts.cssBefore.opacity = 1; + opts.cssBefore.display = 'block'; + opts.cssAfter.zIndex = 0; +}; + +// scrollUp/Down/Left/Right +$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var h = $cont.height(); + opts.cssBefore.top = h; + opts.cssBefore.left = 0; + opts.cssFirst.top = 0; + opts.animIn.top = 0; + opts.animOut.top = -h; +}; +$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var h = $cont.height(); + opts.cssFirst.top = 0; + opts.cssBefore.top = -h; + opts.cssBefore.left = 0; + opts.animIn.top = 0; + opts.animOut.top = h; +}; +$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var w = $cont.width(); + opts.cssFirst.left = 0; + opts.cssBefore.left = w; + opts.cssBefore.top = 0; + opts.animIn.left = 0; + opts.animOut.left = 0-w; +}; +$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push($.fn.cycle.commonReset); + var w = $cont.width(); + opts.cssFirst.left = 0; + opts.cssBefore.left = -w; + opts.cssBefore.top = 0; + opts.animIn.left = 0; + opts.animOut.left = w; +}; +$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) { + $cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts, fwd) { + if (opts.rev) + fwd = !fwd; + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW); + opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW; + }); + opts.cssFirst.left = 0; + opts.cssBefore.top = 0; + opts.animIn.left = 0; + opts.animOut.top = 0; +}; +$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) { + $cont.css('overflow','hidden'); + opts.before.push(function(curr, next, opts, fwd) { + if (opts.rev) + fwd = !fwd; + $.fn.cycle.commonReset(curr,next,opts); + opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1); + opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH; + }); + opts.cssFirst.top = 0; + opts.cssBefore.left = 0; + opts.animIn.top = 0; + opts.animOut.left = 0; +}; + +// slideX/slideY +$.fn.cycle.transitions.slideX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $(opts.elements).not(curr).hide(); + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.animIn.width = next.cycleW; + }); + opts.cssBefore.left = 0; + opts.cssBefore.top = 0; + opts.cssBefore.width = 0; + opts.animIn.width = 'show'; + opts.animOut.width = 0; +}; +$.fn.cycle.transitions.slideY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $(opts.elements).not(curr).hide(); + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.animIn.height = next.cycleH; + }); + opts.cssBefore.left = 0; + opts.cssBefore.top = 0; + opts.cssBefore.height = 0; + opts.animIn.height = 'show'; + opts.animOut.height = 0; +}; + +// shuffle +$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) { + var i, w = $cont.css('overflow', 'visible').width(); + $slides.css({left: 0, top: 0}); + opts.before.push(function(curr,next,opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + }); + // only adjust speed once! + if (!opts.speedAdjusted) { + opts.speed = opts.speed / 2; // shuffle has 2 transitions + opts.speedAdjusted = true; + } + opts.random = 0; + opts.shuffle = opts.shuffle || {left:-w, top:15}; + opts.els = []; + for (i=0; i < $slides.length; i++) + opts.els.push($slides[i]); + + for (i=0; i < opts.currSlide; i++) + opts.els.push(opts.els.shift()); + + // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!) + opts.fxFn = function(curr, next, opts, cb, fwd) { + if (opts.rev) + fwd = !fwd; + var $el = fwd ? $(curr) : $(next); + $(next).css(opts.cssBefore); + var count = opts.slideCount; + $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() { + var hops = $.fn.cycle.hopsFromLast(opts, fwd); + for (var k=0; k < hops; k++) { + if (fwd) + opts.els.push(opts.els.shift()); + else + opts.els.unshift(opts.els.pop()); + } + if (fwd) { + for (var i=0, len=opts.els.length; i < len; i++) + $(opts.els[i]).css('z-index', len-i+count); + } + else { + var z = $(curr).css('z-index'); + $el.css('z-index', parseInt(z,10)+1+count); + } + $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() { + $(fwd ? this : curr).hide(); + if (cb) cb(); + }); + }); + }; + $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 }); +}; + +// turnUp/Down/Left/Right +$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.cssBefore.top = next.cycleH; + opts.animIn.height = next.cycleH; + opts.animOut.width = next.cycleW; + }); + opts.cssFirst.top = 0; + opts.cssBefore.left = 0; + opts.cssBefore.height = 0; + opts.animIn.top = 0; + opts.animOut.height = 0; +}; +$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssFirst.top = 0; + opts.cssBefore.left = 0; + opts.cssBefore.top = 0; + opts.cssBefore.height = 0; + opts.animOut.height = 0; +}; +$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.cssBefore.left = next.cycleW; + opts.animIn.width = next.cycleW; + }); + opts.cssBefore.top = 0; + opts.cssBefore.width = 0; + opts.animIn.left = 0; + opts.animOut.width = 0; +}; +$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.animIn.width = next.cycleW; + opts.animOut.left = curr.cycleW; + }); + $.extend(opts.cssBefore, { top: 0, left: 0, width: 0 }); + opts.animIn.left = 0; + opts.animOut.width = 0; +}; + +// zoom +$.fn.cycle.transitions.zoom = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,false,true); + opts.cssBefore.top = next.cycleH/2; + opts.cssBefore.left = next.cycleW/2; + $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH }); + $.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 }); + }); + opts.cssFirst.top = 0; + opts.cssFirst.left = 0; + opts.cssBefore.width = 0; + opts.cssBefore.height = 0; +}; + +// fadeZoom +$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,false); + opts.cssBefore.left = next.cycleW/2; + opts.cssBefore.top = next.cycleH/2; + $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH }); + }); + opts.cssBefore.width = 0; + opts.cssBefore.height = 0; + opts.animOut.opacity = 0; +}; + +// blindX +$.fn.cycle.transitions.blindX = function($cont, $slides, opts) { + var w = $cont.css('overflow','hidden').width(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.width = next.cycleW; + opts.animOut.left = curr.cycleW; + }); + opts.cssBefore.left = w; + opts.cssBefore.top = 0; + opts.animIn.left = 0; + opts.animOut.left = w; +}; +// blindY +$.fn.cycle.transitions.blindY = function($cont, $slides, opts) { + var h = $cont.css('overflow','hidden').height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssBefore.top = h; + opts.cssBefore.left = 0; + opts.animIn.top = 0; + opts.animOut.top = h; +}; +// blindZ +$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) { + var h = $cont.css('overflow','hidden').height(); + var w = $cont.width(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH; + }); + opts.cssBefore.top = h; + opts.cssBefore.left = w; + opts.animIn.top = 0; + opts.animIn.left = 0; + opts.animOut.top = h; + opts.animOut.left = w; +}; + +// growX - grow horizontally from centered 0 width +$.fn.cycle.transitions.growX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true); + opts.cssBefore.left = this.cycleW/2; + opts.animIn.left = 0; + opts.animIn.width = this.cycleW; + opts.animOut.left = 0; + }); + opts.cssBefore.top = 0; + opts.cssBefore.width = 0; +}; +// growY - grow vertically from centered 0 height +$.fn.cycle.transitions.growY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false); + opts.cssBefore.top = this.cycleH/2; + opts.animIn.top = 0; + opts.animIn.height = this.cycleH; + opts.animOut.top = 0; + }); + opts.cssBefore.height = 0; + opts.cssBefore.left = 0; +}; + +// curtainX - squeeze in both edges horizontally +$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,false,true,true); + opts.cssBefore.left = next.cycleW/2; + opts.animIn.left = 0; + opts.animIn.width = this.cycleW; + opts.animOut.left = curr.cycleW/2; + opts.animOut.width = 0; + }); + opts.cssBefore.top = 0; + opts.cssBefore.width = 0; +}; +// curtainY - squeeze in both edges vertically +$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) { + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,false,true); + opts.cssBefore.top = next.cycleH/2; + opts.animIn.top = 0; + opts.animIn.height = next.cycleH; + opts.animOut.top = curr.cycleH/2; + opts.animOut.height = 0; + }); + opts.cssBefore.height = 0; + opts.cssBefore.left = 0; +}; + +// cover - curr slide covered by next slide +$.fn.cycle.transitions.cover = function($cont, $slides, opts) { + var d = opts.direction || 'left'; + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts); + if (d == 'right') + opts.cssBefore.left = -w; + else if (d == 'up') + opts.cssBefore.top = h; + else if (d == 'down') + opts.cssBefore.top = -h; + else + opts.cssBefore.left = w; + }); + opts.animIn.left = 0; + opts.animIn.top = 0; + opts.cssBefore.top = 0; + opts.cssBefore.left = 0; +}; + +// uncover - curr slide moves off next slide +$.fn.cycle.transitions.uncover = function($cont, $slides, opts) { + var d = opts.direction || 'left'; + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + if (d == 'right') + opts.animOut.left = w; + else if (d == 'up') + opts.animOut.top = -h; + else if (d == 'down') + opts.animOut.top = h; + else + opts.animOut.left = -w; + }); + opts.animIn.left = 0; + opts.animIn.top = 0; + opts.cssBefore.top = 0; + opts.cssBefore.left = 0; +}; + +// toss - move top slide and fade away +$.fn.cycle.transitions.toss = function($cont, $slides, opts) { + var w = $cont.css('overflow','visible').width(); + var h = $cont.height(); + opts.before.push(function(curr, next, opts) { + $.fn.cycle.commonReset(curr,next,opts,true,true,true); + // provide default toss settings if animOut not provided + if (!opts.animOut.left && !opts.animOut.top) + $.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 }); + else + opts.animOut.opacity = 0; + }); + opts.cssBefore.left = 0; + opts.cssBefore.top = 0; + opts.animIn.left = 0; +}; + +// wipe - clip animation +$.fn.cycle.transitions.wipe = function($cont, $slides, opts) { + var w = $cont.css('overflow','hidden').width(); + var h = $cont.height(); + opts.cssBefore = opts.cssBefore || {}; + var clip; + if (opts.clip) { + if (/l2r/.test(opts.clip)) + clip = 'rect(0px 0px '+h+'px 0px)'; + else if (/r2l/.test(opts.clip)) + clip = 'rect(0px '+w+'px '+h+'px '+w+'px)'; + else if (/t2b/.test(opts.clip)) + clip = 'rect(0px '+w+'px 0px 0px)'; + else if (/b2t/.test(opts.clip)) + clip = 'rect('+h+'px '+w+'px '+h+'px 0px)'; + else if (/zoom/.test(opts.clip)) { + var top = parseInt(h/2,10); + var left = parseInt(w/2,10); + clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)'; + } + } + + opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)'; + + var d = opts.cssBefore.clip.match(/(\d+)/g); + var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10); + + opts.before.push(function(curr, next, opts) { + if (curr == next) return; + var $curr = $(curr), $next = $(next); + $.fn.cycle.commonReset(curr,next,opts,true,true,false); + opts.cssAfter.display = 'block'; + + var step = 1, count = parseInt((opts.speedIn / 13),10) - 1; + (function f() { + var tt = t ? t - parseInt(step * (t/count),10) : 0; + var ll = l ? l - parseInt(step * (l/count),10) : 0; + var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h; + var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w; + $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' }); + (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none'); + })(); + }); + $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 }); + opts.animIn = { left: 0 }; + opts.animOut = { left: 0 }; +}; + +})(jQuery); diff --git a/hackathonPages/main.html b/hackathonPages/main.html index 79bce0d..25d340b 100644 --- a/hackathonPages/main.html +++ b/hackathonPages/main.html @@ -20,6 +20,7 @@ + @@ -220,6 +221,30 @@

Download the latest version

  • + + + -