Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: liteaccordion.jquery.js
- ===================================================================
- --- liteaccordion.jquery.js (revision 47)
- +++ liteaccordion.jquery.js (revision 48)
- @@ -11,14 +11,14 @@
- **************************************************/
- ;(function($) {
- -
- +
- var LiteAccordion = function(elem, options) {
- -
- +
- var defaults = {
- containerWidth : 960, // fixed (px)
- containerHeight : 320, // fixed (px)
- headerWidth: 48, // fixed (px)
- -
- +
- activateOn : 'click', // click or mouseover
- firstSlide : 1, // displays slide (n) on page load
- slideSpeed : 800, // slide animation speed
- @@ -29,25 +29,25 @@
- pauseOnHover : false, // pause on hover
- cycleSpeed : 6000, // time between slide cycles
- easing : 'swing', // custom easing function
- -
- +
- theme : 'basic', // basic, dark, light, or colour
- rounded : false, // square or rounded corners
- - enumerateSlides : false, // put numbers on slides
- + enumerateSlides : false, // put numbers on slides
- linkable : false // link slides via hash, *not supported in IE7
- },
- - // merge defaults with options in new settings object
- + // merge defaults with options in new settings object
- settings = $.extend({}, defaults, options),
- -
- +
- // 'globals'
- slides = elem.children('ol').children('li'),
- header = slides.children(':first-child'),
- slideLen = slides.length,
- - slideWidth = settings.containerWidth - slideLen * settings.headerWidth,
- + slideWidth = settings.containerWidth - slideLen * settings.headerWidth,
- - // public methods
- + // public methods
- methods = {
- -
- +
- // start elem animation
- play : function(index) {
- var next = core.nextSlide(index && index);
- @@ -59,7 +59,7 @@
- header.eq(next()).trigger('click.liteAccordion');
- }, settings.cycleSpeed);
- },
- -
- +
- // stop elem animation
- stop : function() {
- clearInterval(core.playing);
- @@ -75,11 +75,11 @@
- // trigger previous slide
- prev : function() {
- methods.stop();
- - header.eq(core.currentSlide - 1).trigger('click.liteAccordion');
- + header.eq(core.currentSlide - 1).trigger('click.liteAccordion');
- },
- -
- +
- // destroy plugin instance
- - destroy : function() {
- + destroy : function() {
- // stop autoplay
- methods.stop();
- @@ -99,7 +99,7 @@
- .end()
- .find('b')
- .remove();
- -
- +
- slides
- .removeClass('slide')
- .children()
- @@ -115,22 +115,22 @@
- methods : methods,
- core : core
- };
- - }
- + }
- },
- // core utility and animation methods
- core = {
- -
- +
- // set style properties
- - setStyles : function() {
- + setStyles : function() {
- // set container heights, widths, theme & corner style
- elem
- .width(settings.containerWidth)
- .height(settings.containerHeight)
- .addClass('accordion')
- - .addClass(settings.rounded && 'rounded')
- + .addClass(settings.rounded && 'rounded')
- .addClass(settings.theme);
- -
- +
- // set tab width, height and selected class
- slides
- .addClass('slide')
- @@ -143,11 +143,11 @@
- // compensate for borders on 'light' theme
- if (settings.theme === 'light') slideWidth -= parseInt(elem.children('ol').css('borderTopWidth'), 10);
- - // set initial positions for each slide
- + // set initial positions for each slide
- header.each(function(index) {
- var $this = $(this),
- left = index * settings.headerWidth;
- -
- +
- if (index >= settings.firstSlide) left += slideWidth;
- $this
- @@ -166,26 +166,26 @@
- },
- // bind click and mouseover events
- - bindEvents : function() {
- + bindEvents : function() {
- if (settings.activateOn === 'click') {
- header.bind('click.liteAccordion', core.triggerSlide);
- } else if (settings.activateOn === 'mouseover') {
- header.bind({
- 'mouseover.liteAccordion' : core.triggerSlide,
- - 'click.liteAccordion' : core.triggerSlide
- + 'click.liteAccordion' : core.triggerSlide
- });
- }
- -
- - // pause on hover (can't use custom events with $.hover())
- +
- + // pause on hover (can't use custom events with $.hover())
- if (settings.pauseOnHover && settings.autoPlay) {
- elem.bind('mouseover.liteAccordion', function() {
- core.playing && methods.stop();
- }).bind('mouseout.liteAccordion', function() {
- !core.playing && methods.play(core.currentSlide);
- });
- - }
- + }
- },
- -
- +
- linkable : function() {
- var cacheSlideNames = (function() {
- var slideNames = [];
- @@ -195,15 +195,15 @@
- });
- // memoize
- - return cacheSlideNames = slideNames;
- + return cacheSlideNames = slideNames;
- })();
- -
- +
- var triggerHash = function(e) {
- var index;
- -
- +
- if (e.type === 'load' && !window.location.hash) return;
- if (e.type === 'hashchange' && core.playing) return;
- -
- +
- index = $.inArray((window.location.hash.slice(1)).toLowerCase(), cacheSlideNames);
- if (index > -1 && index < cacheSlideNames.length) header.eq(index).trigger('click.liteAccordion');
- };
- @@ -213,9 +213,9 @@
- 'load.liteAccordion' : triggerHash
- });
- },
- -
- +
- // counter for autoPlay (zero index firstSlide on init)
- - currentSlide : settings.firstSlide - 1,
- + currentSlide : settings.firstSlide - 1,
- // next slide index
- nextSlide : function(index) {
- @@ -225,11 +225,11 @@
- return function() {
- return next++ % slideLen;
- };
- - },
- -
- + },
- +
- // holds interval counter
- playing : 0,
- -
- +
- // animates left and right groups of slides
- // side: denotes left side
- animSlideGroup : function(index, next, side) {
- @@ -240,48 +240,72 @@
- .each(function() {
- var $this = $(this),
- slideIndex = slides.index($this);
- -
- +
- $this
- .children()
- .stop(true)
- .animate({
- left : (side ? 0 : slideWidth) + slideIndex * settings.headerWidth
- - },
- - settings.slideSpeed,
- + },
- + settings.slideSpeed,
- settings.easing,
- - function() {
- + function() {
- // flag ensures that fn is only called one time per triggerSlide
- if (!core.slideAnimCompleteFlag) {
- settings.onSlideAnimComplete.call(next);
- core.slideAnimCompleteFlag = true;
- }
- - });
- + });
- });
- },
- -
- +
- slideAnimCompleteFlag : false,
- -
- +
- // trigger slide animation
- triggerSlide : function(e) {
- var $this = $(this),
- index = header.index($this),
- - next = $this.next();
- -
- + next = $this.next();
- +
- + // close group if the first slide is clicked and already open
- + if(index == 0 && core.currentSlide == 0) {
- + // trigger callback in context of sibling div
- + settings.onTriggerSlide.call(next);
- +
- + slides.eq(0)
- + .children()
- + .stop(true)
- + .animate({
- + left : settings.containerWidth - settings.headerWidth * slides.length
- + },
- + settings.slideSpeed,
- + settings.easing,
- + function() {
- + // flag ensures that fn is only called one time per triggerSlide
- + if (!core.slideAnimCompleteFlag) {
- + settings.onSlideAnimComplete.call(next);
- + core.slideAnimCompleteFlag = true;
- + }
- + });
- + core.currentSlide = -1;
- + return false;
- + }
- +
- // update core.currentSlide
- core.currentSlide = index;
- -
- +
- // reset onSlideAnimComplete callback flag
- core.slideAnimCompleteFlag = false;
- // remove, then add selected class
- - header.removeClass('selected').filter($this).addClass('selected');
- -
- + header.removeClass('selected').filter($this).addClass('selected');
- +
- // reset current slide index in core.nextSlide closure
- if (e.originalEvent && settings.autoPlay) {
- methods.stop();
- methods.play(index);
- }
- -
- +
- // set location.hash
- if (settings.linkable) window.location.hash = $this.parent().attr('name');
- @@ -292,14 +316,14 @@
- core.animSlideGroup(index, next, true);
- core.animSlideGroup(index, next);
- },
- -
- +
- ieTransformTest : function() {
- var div = document.createElement('div');
- -
- - typeof div.style.msTransform === 'string' && elem.addClass('ie9');
- +
- + typeof div.style.msTransform === 'string' && elem.addClass('ie9');
- div = null;
- },
- -
- +
- init : function() {
- core.setStyles();
- core.bindEvents();
- @@ -320,7 +344,7 @@
- // expose methods
- return methods;
- -
- +
- };
- $.fn.liteAccordion = function(method) {
- @@ -331,7 +355,7 @@
- if (typeof method === 'object' || !method) {
- return elem.each(function() {
- var liteAccordion;
- -
- +
- // if plugin already instantiated, return
- if (instance) return;
- @@ -347,9 +371,9 @@
- return instance[method].call(elem);
- } else { // the rest of the methods are chainable though
- instance[method].call(elem);
- - return elem;
- + return elem;
- }
- }
- };
- -})(jQuery);
- \ No newline at end of file
- +})(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment