forked from jmar777/kwicks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.kwicks.min.js
8 lines (8 loc) · 5.89 KB
/
jquery.kwicks.min.js
1
2
3
4
5
6
7
8
/*!
* Kwicks: Sexy Sliding Panels for jQuery - v2.0.0
* http://devsmash.com/projects/kwicks
*
* Copyright 2012 Jeremy Martin (jmar777)
* Released under the MIT license
* http://www.opensource.org/licenses/mit-license.php
*/(function(e){var t={init:function(t){var r=e.extend({duration:500,spacing:5},t);if(typeof r.size=="undefined")throw new Error('Kwicks option "size" is required');if(typeof r.minSize=="undefined"&&typeof r.maxSize=="undefined")throw new Error('One of Kwicks options "minSize" or "maxSize" is required');if(typeof r.minSize!="undefined"&&typeof r.maxSize!="undefined")throw new Error('Kwicks options "minSize" and "maxSize" may not both be set');if(r.minSize>r.size)throw new Error('Kwicks option "minSize" may not be greater than "size"');if(r.maxSize<r.size)throw new Error('Kwicks option "maxSize" may not be less than "size"');if(r.behavior&&r.behavior!=="menu")throw new Error("Unrecognized Kwicks behavior specified: "+r.behavior);return this.each(function(){e(this).data("kwicks",new n(this,r))})},expand:function(t){return this.each(function(){var n=e(this),r;if(n.is(".kwicks-processed")){if(typeof t!="number")throw new Error('Kwicks method "expand" requires an index');t>=0&&(r=n.children().eq(t))}else{if(!n.parent().is(".kwicks-processed"))throw new Error('Cannot call "expand" method on a non-Kwicks element');r=n,t=r.index()}var i=r&&r.length?r:n;i.trigger("expand.kwicks",{index:t})})},expanded:function(){var e=this.first().data("kwicks");if(!e)throw new Error('Cannot called "expanded" method on a non-Kwicks element');return e.expandedIndex},select:function(t){return this.each(function(){var n=e(this),r;if(n.is(".kwicks-processed")){if(typeof t!="number")throw new Error('Kwicks method "select" requires an index');t>=0&&(r=n.children().eq(t))}else{if(!n.parent().is(".kwicks-processed"))throw new Error('Cannot call "expand" method on a non-Kwicks element');r=n,t=r.index()}var i=r&&r.length?r:n;i.trigger("select.kwicks",{index:t})})},selected:function(){var e=this.first().data("kwicks");if(!e)throw new Error('Cannot called "selected" method on a non-Kwicks element');return e.selectedIndex}};e.fn.kwicks=function(e){if(t[e])return t[e].apply(this,Array.prototype.slice.call(arguments,1));if(typeof e=="object"||!e)return t.init.apply(this,arguments);throw new Error("Unrecognized kwicks method: "+e)},e.event.special.expand={_default:function(t,n){if(t.namespace!=="kwicks")return;var r=e(t.target),i=r.data("kwicks")||r.parent().data("kwicks");if(!i)return;i.expand(n.index)}},e.event.special.select={_default:function(t,n){if(t.namespace!=="kwicks")return;var r=e(t.target),i=r.data("kwicks")||r.parent().data("kwicks");if(!i)return;i.select(n.index)}};var n=function(n,r){this.opts=r;var i=r.isVertical?"vertical":"horizontal";this.$container=e(n).addClass("kwicks").addClass("kwicks-"+i),this.$panels=this.$container.children();var s=this.$panels.length;typeof r.minSize=="undefined"?r.minSize=(r.size*s-r.maxSize)/(s-1):r.maxSize=r.size*s-r.minSize*(s-1),this.selectedIndex=this.$panels.filter(".kwicks-selected").index(),this.expandedIndex=this.selectedIndex,this.primaryDimension=r.isVertical?"height":"width",this.secondaryDimension=r.isVertical?"width":"height",this.primaryAlignment=r.isVertical?"top":"left",this.secondaryAlignment=r.isVertical?"bottom":"right",this.$timer=e({progress:0}),this.offsets=this.getOffsetsForExpanded(),this.initStyles(),this.initBehavior()};n.prototype.getOffsetsForExpanded=function(){var e=this.expandedIndex,t=this.$panels.length,n=this.opts.spacing,r=this.opts.size,i=this.opts.minSize,s=this.opts.maxSize,o=[0];for(var u=1;u<t;u++)e===-1?o[u]=u*(r+n):u<=e?o[u]=u*(i+n):o[u]=s+i*(u-1)+u*n;return o},n.prototype.setStyle=function(){return e.support.style?function(e,t){e.setAttribute("style",t)}:function(e,t){e.style.cssText=t}}(),n.prototype.updatePanelStyles=function(){var e=this.offsets,t=this.$panels,n=this.primaryDimension,r=this.primaryAlignment,i=this.secondaryAlignment,s=this.opts.spacing,o=this._containerSize;o||(o=this._containerSize=this.$container.css(n).replace("px",""));var u=this._stylesInited?"":"position:absolute;",a,f,l,c;for(var h=t.length;h--;)l=a,a=Math.round(e[h]),h===t.length-1?(f=o-a,c=i+":0;"+n+":"+f+"px;"):(f=l-a-s,c=r+":"+a+"px;"+n+":"+f+"px;"),this.setStyle(t[h],u+c);this._stylesInited||(this.$container.addClass("kwicks-processed"),this._stylesInited=!0)},n.prototype.initStyles=function(){var e=this.opts,t=this.$container,n=this.$panels,r=n.length,i=this.primaryDimension,s=this.secondaryDimension;t.css(i,e.size*r+e.spacing*(r-1)),t.css(s,n.eq(0).css(s)),this.updatePanelStyles()},n.prototype.initBehavior=function(){if(!this.opts.behavior)return;var t=this.$container;switch(this.opts.behavior){case"menu":this.$container.on("mouseleave",function(){t.kwicks("expand",-1)}).children().on("mouseover",function(){e(this).kwicks("expand")}).click(function(){e(this).kwicks("select")});break;default:throw new Error("Unrecognized behavior option: "+this.opts.behavior)}},n.prototype.getExpandedPanel=function(){return this.expandedIndex===-1?e([]):this.$panels.eq(this.expandedIndex)},n.prototype.getSelectedPanel=function(){return this.selectedIndex===-1?e([]):this.$panels.eq(this.selectedIndex)},n.prototype.select=function(e){if(e===this.selectedIndex)return this.expand(e);this.getSelectedPanel().removeClass("kwicks-selected"),this.selectedIndex=e,this.getSelectedPanel().addClass("kwicks-selected"),this.expand(e)},n.prototype.expand=function(e){var t=this;e===-1&&(e=this.selectedIndex);if(e===this.expandedIndex)return;this.getExpandedPanel().removeClass("kwicks-expanded"),this.expandedIndex=e,this.getExpandedPanel().addClass("kwicks-expanded");var n=this.$timer,r=this.$panels.length,i=this.offsets.slice(),s=this.offsets,o=this.getOffsetsForExpanded();n.stop()[0].progress=0,n.animate({progress:1},{duration:this.opts.duration,easing:this.opts.easing,step:function(e){s.length=0;for(var n=0;n<r;n++){var u=o[n],a=u-(u-i[n])*(1-e);s[n]=a}t.updatePanelStyles()}})}})(jQuery);