/* Template Name: Your template name Template URI: http://bootexperts.com Author: BootExperts Author URI: http://bootexperts.com NOTE: This is js file contents all jQuery plugins. */ /*================================================ [ Table of contents ] ================================================ 01. Avoid `console` errors in browsers that lack a console. 02. scrollup jquery 03. slick jquery carousel 3.1 Slick MouseWheel 04. jQuery UI / price range 05. WOW / scrolling animation 06. meanMenu jquery menu plugin / mobile menu 07. Counter up min js 08. jQuery Knob (cartpie) 09. jQuery.appear (cartpie) 10. MixItUp 11. Treeview 13. Elevator Zoom 14. bootstrap-select.js 15. style customizer ====================================== [ End table content ] ======================================*/ /*------------------------------------------------------------- 01. Avoid `console` errors in browsers that lack a console. ---------------------------------------------------------------*/ (function() { var css_disclaimer_cookie = ' style="display:none; position:fixed; bottom:0; left:0; width:100%; padding:40px 10px; z-index:99999999; background:#333; color:#fff; font-size:16px;" '; var css_disclaimer_cookie_button_ok = ' style="display:inline-block; padding: 20px; margin-left:30px; background:#fff; color:#000; font-size:16px;" '; var css_disclaimer_cookie_link_normal = ' style="color:#fff; font-size:16px; text-decoration:underline;" '; if (getCookie('WG_disclaimer_cookies') == '') { $("body").append( '
' ); $(".disclaimer_cookie").show(); } var method; var noop = function () {}; var methods = [ 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn' ]; var length = methods.length; var console = (window.console = window.console || {}); while (length--) { method = methods[length]; // Only stub undefined methods. if (!console[method]) { console[method] = noop; } } }()); // Place any jQuery/helper plugins in here. /*------------------------------------------------------------- 02. scrollup jquery ---------------------------------------------------------------*/ /*! * scrollup v2.4.1 * Url: http://markgoodyear.com/labs/scrollup/ * Copyright (c) Mark Goodyear — @markgdyr — http://markgoodyear.com * License: MIT */ !function(l,o,e){"use strict";l.fn.scrollUp=function(o){l.data(e.body,"scrollUp")||(l.data(e.body,"scrollUp",!0),l.fn.scrollUp.init(o))},l.fn.scrollUp.init=function(r){var s,t,c,i,n,a,d,p=l.fn.scrollUp.settings=l.extend({},l.fn.scrollUp.defaults,r),f=!1;switch(d=p.scrollTrigger?l(p.scrollTrigger):l("",{id:p.scrollName,href:"#top"}),p.scrollTitle&&d.attr("title",p.scrollTitle),d.appendTo("body"),p.scrollImg||p.scrollTrigger||d.html(p.scrollText),d.css({display:"none",position:"fixed",zIndex:p.zIndex}),p.activeOverlay&&l("",{id:p.scrollName+"-active"}).css({position:"absolute",top:p.scrollDistance+"px",width:"100%",borderTop:"1px dotted"+p.activeOverlay,zIndex:p.zIndex}).appendTo("body"),p.animation){case"fade":s="fadeIn",t="fadeOut",c=p.animationSpeed;break;case"slide":s="slideDown",t="slideUp",c=p.animationSpeed;break;default:s="show",t="hide",c=0}i="top"===p.scrollFrom?p.scrollDistance:l(e).height()-l(o).height()-p.scrollDistance,n=l(o).scroll(function(){l(o).scrollTop()>i?f||(d[s](c),f=!0):f&&(d[t](c),f=!1)}),p.scrollTarget?"number"==typeof p.scrollTarget?a=p.scrollTarget:"string"==typeof p.scrollTarget&&(a=Math.floor(l(p.scrollTarget).offset().top)):a=0,d.click(function(o){o.preventDefault(),l("html, body").animate({scrollTop:a},p.scrollSpeed,p.easingType)})},l.fn.scrollUp.defaults={scrollName:"scrollUp",scrollDistance:300,scrollFrom:"top",scrollSpeed:300,easingType:"linear",animation:"fade",animationSpeed:200,scrollTrigger:!1,scrollTarget:!1,scrollText:"Scroll to top",scrollTitle:!1,scrollImg:!1,activeOverlay:!1,zIndex:2147483647},l.fn.scrollUp.destroy=function(r){l.removeData(e.body,"scrollUp"),l("#"+l.fn.scrollUp.settings.scrollName).remove(),l("#"+l.fn.scrollUp.settings.scrollName+"-active").remove(),l.fn.jquery.split(".")[1]>=7?l(o).off("scroll",r):l(o).unbind("scroll",r)},l.scrollUp=l.fn.scrollUp}(jQuery,window,document); /*------------------------------------------------------------- 03. slick jquery carousel ---------------------------------------------------------------*/ /* _ _ _ _ ___| (_) ___| | __ (_)___ / __| | |/ __| |/ / | / __| \__ \ | | (__| < _ | \__ \ |___/_|_|\___|_|\_(_)/ |___/ |__/ Version: 1.6.0 Author: Ken Wheeler Website: http://kenwheeler.github.io Docs: http://kenwheeler.github.io/slick Repo: http://github.com/kenwheeler/slick Issues: http://github.com/kenwheeler/slick/issues */ !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("
* k.o.call(this);
*
*/
k.o = function () {
var s = this;
this.o = null; // array of options
this.$ = null; // jQuery wrapped element
this.i = null; // mixed HTMLInputElement or array of HTMLInputElement
this.g = null; // deprecated 2D graphics context for 'pre-rendering'
this.v = null; // value ; mixed array or integer
this.cv = null; // change value ; not commited value
this.x = 0; // canvas x position
this.y = 0; // canvas y position
this.w = 0; // canvas width
this.h = 0; // canvas height
this.$c = null; // jQuery canvas element
this.c = null; // rendered canvas context
this.t = 0; // touches index
this.isInit = false;
this.fgColor = null; // main color
this.pColor = null; // previous color
this.dH = null; // draw hook
this.cH = null; // change hook
this.eH = null; // cancel hook
this.rH = null; // release hook
this.scale = 1; // scale factor
this.relative = false;
this.relativeWidth = false;
this.relativeHeight = false;
this.$div = null; // component div
this.run = function () {
var cf = function (e, conf) {
var k;
for (k in conf) {
s.o[k] = conf[k];
}
s._carve().init();
s._configure()
._draw();
};
if (this.$.data('kontroled')) return;
this.$.data('kontroled', true);
this.extend();
this.o = $.extend({
// Config
min: this.$.data('min') !== undefined ? this.$.data('min') : 0,
max: this.$.data('max') !== undefined ? this.$.data('max') : 100,
stopper: true,
readOnly: this.$.data('readonly') || (this.$.attr('readonly') === 'readonly'),
// UI
cursor: this.$.data('cursor') === true && 30
|| this.$.data('cursor') || 0,
thickness: this.$.data('thickness')
&& Math.max(Math.min(this.$.data('thickness'), 1), 0.01)
|| 0.35,
lineCap: this.$.data('linecap') || 'butt',
width: this.$.data('width') || 200,
height: this.$.data('height') || 200,
displayInput: this.$.data('displayinput') == null || this.$.data('displayinput'),
displayPrevious: this.$.data('displayprevious'),
fgColor: this.$.data('fgcolor') || '#87CEEB',
inputColor: this.$.data('inputcolor'),
font: this.$.data('font') || 'Arial',
fontWeight: this.$.data('font-weight') || 'bold',
inline: false,
step: this.$.data('step') || 1,
rotation: this.$.data('rotation'),
// Hooks
draw: null, // function () {}
change: null, // function (value) {}
cancel: null, // function () {}
release: null, // function (value) {}
// Output formatting, allows to add unit: %, ms ...
format: function(v) {
return v;
},
parse: function (v) {
return parseFloat(v);
}
}, this.o
);
// finalize options
this.o.flip = this.o.rotation === 'anticlockwise' || this.o.rotation === 'acw';
if (!this.o.inputColor) {
this.o.inputColor = this.o.fgColor;
}
// routing value
if (this.$.is('fieldset')) {
// fieldset = array of integer
this.v = {};
this.i = this.$.find('input');
this.i.each(function(k) {
var $this = $(this);
s.i[k] = $this;
s.v[k] = s.o.parse($this.val());
$this.bind(
'change blur',
function () {
var val = {};
val[k] = $this.val();
s.val(val);
}
);
});
this.$.find('legend').remove();
} else {
// input = integer
this.i = this.$;
this.v = this.o.parse(this.$.val());
this.v === '' && (this.v = this.o.min);
this.$.bind(
'change blur',
function () {
s.val(s._validate(s.o.parse(s.$.val())));
}
);
}
!this.o.displayInput && this.$.hide();
// adds needed DOM elements (canvas, div)
this.$c = $(document.createElement('canvas')).attr({
width: this.o.width,
height: this.o.height
});
// wraps all elements in a div
// add to DOM before Canvas init is triggered
this.$div = $('');
this.$.wrap(this.$div).before(this.$c);
this.$div = this.$.parent();
if (typeof G_vmlCanvasManager !== 'undefined') {
G_vmlCanvasManager.initElement(this.$c[0]);
}
this.c = this.$c[0].getContext ? this.$c[0].getContext('2d') : null;
if (!this.c) {
throw {
name: "CanvasNotSupportedException",
message: "Canvas not supported. Please use excanvas on IE8.0.",
toString: function(){return this.name + ": " + this.message}
}
}
// hdpi support
this.scale = (window.devicePixelRatio || 1) / (
this.c.webkitBackingStorePixelRatio ||
this.c.mozBackingStorePixelRatio ||
this.c.msBackingStorePixelRatio ||
this.c.oBackingStorePixelRatio ||
this.c.backingStorePixelRatio || 1
);
// detects relative width / height
this.relativeWidth = this.o.width % 1 !== 0
&& this.o.width.indexOf('%');
this.relativeHeight = this.o.height % 1 !== 0
&& this.o.height.indexOf('%');
this.relative = this.relativeWidth || this.relativeHeight;
// computes size and carves the component
this._carve();
// prepares props for transaction
if (this.v instanceof Object) {
this.cv = {};
this.copy(this.v, this.cv);
} else {
this.cv = this.v;
}
// binds configure event
this.$
.bind("configure", cf)
.parent()
.bind("configure", cf);
// finalize init
this._listen()
._configure()
._xy()
.init();
this.isInit = true;
this.$.val(this.o.format(this.v));
this._draw();
return this;
};
this._carve = function() {
if (this.relative) {
var w = this.relativeWidth ?
this.$div.parent().width() *
parseInt(this.o.width) / 100
: this.$div.parent().width(),
h = this.relativeHeight ?
this.$div.parent().height() *
parseInt(this.o.height) / 100
: this.$div.parent().height();
// apply relative
this.w = this.h = Math.min(w, h);
} else {
this.w = this.o.width;
this.h = this.o.height;
}
// finalize div
this.$div.css({
'width': this.w + 'px',
'height': this.h + 'px'
});
// finalize canvas with computed width
this.$c.attr({
width: this.w,
height: this.h
});
// scaling
if (this.scale !== 1) {
this.$c[0].width = this.$c[0].width * this.scale;
this.$c[0].height = this.$c[0].height * this.scale;
this.$c.width(this.w);
this.$c.height(this.h);
}
return this;
}
this._draw = function () {
// canvas pre-rendering
var d = true;
s.g = s.c;
s.clear();
s.dH && (d = s.dH());
d !== false && s.draw();
};
this._touch = function (e) {
var touchMove = function (e) {
var v = s.xy2val(
e.originalEvent.touches[s.t].pageX,
e.originalEvent.touches[s.t].pageY
);
if (v == s.cv) return;
if (s.cH && s.cH(v) === false) return;
s.change(s._validate(v));
s._draw();
};
// get touches index
this.t = k.c.t(e);
// First touch
touchMove(e);
// Touch events listeners
k.c.d
.bind("touchmove.k", touchMove)
.bind(
"touchend.k",
function () {
k.c.d.unbind('touchmove.k touchend.k');
s.val(s.cv);
}
);
return this;
};
this._mouse = function (e) {
var mouseMove = function (e) {
var v = s.xy2val(e.pageX, e.pageY);
if (v == s.cv) return;
if (s.cH && (s.cH(v) === false)) return;
s.change(s._validate(v));
s._draw();
};
// First click
mouseMove(e);
// Mouse events listeners
k.c.d
.bind("mousemove.k", mouseMove)
.bind(
// Escape key cancel current change
"keyup.k",
function (e) {
if (e.keyCode === 27) {
k.c.d.unbind("mouseup.k mousemove.k keyup.k");
if (s.eH && s.eH() === false)
return;
s.cancel();
}
}
)
.bind(
"mouseup.k",
function (e) {
k.c.d.unbind('mousemove.k mouseup.k keyup.k');
s.val(s.cv);
}
);
return this;
};
this._xy = function () {
var o = this.$c.offset();
this.x = o.left;
this.y = o.top;
return this;
};
this._listen = function () {
if (!this.o.readOnly) {
this.$c
.bind(
"mousedown",
function (e) {
e.preventDefault();
s._xy()._mouse(e);
}
)
.bind(
"touchstart",
function (e) {
e.preventDefault();
s._xy()._touch(e);
}
);
this.listen();
} else {
this.$.attr('readonly', 'readonly');
}
if (this.relative) {
$(window).resize(function() {
s._carve().init();
s._draw();
});
}
return this;
};
this._configure = function () {
// Hooks
if (this.o.draw) this.dH = this.o.draw;
if (this.o.change) this.cH = this.o.change;
if (this.o.cancel) this.eH = this.o.cancel;
if (this.o.release) this.rH = this.o.release;
if (this.o.displayPrevious) {
this.pColor = this.h2rgba(this.o.fgColor, "0.4");
this.fgColor = this.h2rgba(this.o.fgColor, "0.6");
} else {
this.fgColor = this.o.fgColor;
}
return this;
};
this._clear = function () {
this.$c[0].width = this.$c[0].width;
};
this._validate = function (v) {
return (~~ (((v < 0) ? -0.5 : 0.5) + (v/this.o.step))) * this.o.step;
};
// Abstract methods
this.listen = function () {}; // on start, one time
this.extend = function () {}; // each time configure triggered
this.init = function () {}; // each time configure triggered
this.change = function (v) {}; // on change
this.val = function (v) {}; // on release
this.xy2val = function (x, y) {}; //
this.draw = function () {}; // on change / on release
this.clear = function () { this._clear(); };
// Utils
this.h2rgba = function (h, a) {
var rgb;
h = h.substring(1,7)
rgb = [
parseInt(h.substring(0,2), 16),
parseInt(h.substring(2,4), 16),
parseInt(h.substring(4,6), 16)
];
return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + "," + a + ")";
};
this.copy = function (f, t) {
for (var i in f) {
t[i] = f[i];
}
};
};
/**
* k.Dial
*/
k.Dial = function () {
k.o.call(this);
this.startAngle = null;
this.xy = null;
this.radius = null;
this.lineWidth = null;
this.cursorExt = null;
this.w2 = null;
this.PI2 = 2*Math.PI;
this.extend = function () {
this.o = $.extend({
bgColor: this.$.data('bgcolor') || '#EEEEEE',
angleOffset: this.$.data('angleoffset') || 0,
angleArc: this.$.data('anglearc') || 360,
inline: true
}, this.o);
};
this.val = function (v, triggerRelease) {
if (null != v) {
// reverse format
v = this.o.parse(v);
if (triggerRelease !== false
&& v != this.v
&& this.rH
&& this.rH(v) === false) { return; }
this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v;
this.v = this.cv;
this.$.val(this.o.format(this.v));
this._draw();
} else {
return this.v;
}
};
this.xy2val = function (x, y) {
var a, ret;
a = Math.atan2(
x - (this.x + this.w2),
- (y - this.y - this.w2)
) - this.angleOffset;
if (this.o.flip) {
a = this.angleArc - a - this.PI2;
}
if (this.angleArc != this.PI2 && (a < 0) && (a > -0.5)) {
// if isset angleArc option, set to min if .5 under min
a = 0;
} else if (a < 0) {
a += this.PI2;
}
ret = ~~ (0.5 + (a * (this.o.max - this.o.min) / this.angleArc)) + this.o.min;
this.o.stopper && (ret = max(min(ret, this.o.max), this.o.min));
return ret;
};
this.listen = function () {
// bind MouseWheel
var s = this, mwTimerStop,
mwTimerRelease,
mw = function (e) {
e.preventDefault();
var ori = e.originalEvent,
deltaX = ori.detail || ori.wheelDeltaX,
deltaY = ori.detail || ori.wheelDeltaY,
v = s._validate(s.o.parse(s.$.val()))
+ (
deltaX > 0 || deltaY > 0
? s.o.step
: deltaX < 0 || deltaY < 0 ? -s.o.step : 0
);
v = max(min(v, s.o.max), s.o.min);
s.val(v, false);
if (s.rH) {
// Handle mousewheel stop
clearTimeout(mwTimerStop);
mwTimerStop = setTimeout(function () {
s.rH(v);
mwTimerStop = null;
}, 100);
// Handle mousewheel releases
if (!mwTimerRelease) {
mwTimerRelease = setTimeout(function () {
if (mwTimerStop)
s.rH(v);
mwTimerRelease = null;
}, 200);
}
}
},
kval,
to,
m = 1,
kv = {
37: -s.o.step,
38: s.o.step,
39: s.o.step,
40: -s.o.step
};
this.$
.bind(
"keydown",
function (e) {
var kc = e.keyCode;
// numpad support
if (kc >= 96 && kc <= 105) {
kc = e.keyCode = kc - 48;
}
kval = parseInt(String.fromCharCode(kc));
if (isNaN(kval)) {
(kc !== 13) // enter
&& kc !== 8 // bs
&& kc !== 9 // tab
&& kc !== 189 // -
&& (kc !== 190
|| s.$.val().match(/\./)) // . allowed once
&& e.preventDefault();
// arrows
if ($.inArray(kc,[37,38,39,40]) > -1) {
e.preventDefault();
var v = s.o.parse(s.$.val()) + kv[kc] * m;
s.o.stopper && (v = max(min(v, s.o.max), s.o.min));
s.change(v);
s._draw();
// long time keydown speed-up
to = window.setTimeout(function () {
m *= 2;
}, 30);
}
}
}
)
.bind(
"keyup",
function (e) {
if (isNaN(kval)) {
if (to) {
window.clearTimeout(to);
to = null;
m = 1;
s.val(s.$.val());
}
} else {
// kval postcond
(s.$.val() > s.o.max && s.$.val(s.o.max))
|| (s.$.val() < s.o.min && s.$.val(s.o.min));
}
}
);
this.$c.bind("mousewheel DOMMouseScroll", mw);
this.$.bind("mousewheel DOMMouseScroll", mw)
};
this.init = function () {
if (this.v < this.o.min
|| this.v > this.o.max) { this.v = this.o.min; }
this.$.val(this.v);
this.w2 = this.w / 2;
this.cursorExt = this.o.cursor / 100;
this.xy = this.w2 * this.scale;
this.lineWidth = this.xy * this.o.thickness;
this.lineCap = this.o.lineCap;
this.radius = this.xy - this.lineWidth / 2;
this.o.angleOffset
&& (this.o.angleOffset = isNaN(this.o.angleOffset) ? 0 : this.o.angleOffset);
this.o.angleArc
&& (this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc);
// deg to rad
this.angleOffset = this.o.angleOffset * Math.PI / 180;
this.angleArc = this.o.angleArc * Math.PI / 180;
// compute start and end angles
this.startAngle = 1.5 * Math.PI + this.angleOffset;
this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc;
var s = max(
String(Math.abs(this.o.max)).length,
String(Math.abs(this.o.min)).length,
2
) + 2;
this.o.displayInput
&& this.i.css({
'width' : ((this.w / 2 + 4) >> 0) + 'px',
'height' : ((this.w / 3) >> 0) + 'px',
'position' : 'absolute',
'vertical-align' : 'middle',
'margin-top' : ((this.w / 3) >> 0) + 'px',
'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px',
'border' : 0,
'background' : 'none',
'font' : this.o.fontWeight + ' ' + ((this.w / s) >> 0) + 'px ' + this.o.font,
'text-align' : 'center',
'color' : this.o.inputColor || this.o.fgColor,
'padding' : '0px',
'-webkit-appearance': 'none'
}) || this.i.css({
'width': '0px',
'visibility': 'hidden'
});
};
this.change = function (v) {
this.cv = v;
this.$.val(this.o.format(v));
};
this.angle = function (v) {
return (v - this.o.min) * this.angleArc / (this.o.max - this.o.min);
};
this.arc = function (v) {
var sa, ea;
v = this.angle(v);
if (this.o.flip) {
sa = this.endAngle + 0.00001;
ea = sa - v - 0.00001;
} else {
sa = this.startAngle - 0.00001;
ea = sa + v + 0.00001;
}
this.o.cursor
&& (sa = ea - this.cursorExt)
&& (ea = ea + this.cursorExt);
return {
s: sa,
e: ea,
d: this.o.flip && !this.o.cursor
};
};
this.draw = function () {
var c = this.g, // context
a = this.arc(this.cv), // Arc
pa, // Previous arc
r = 1;
c.lineWidth = this.lineWidth;
c.lineCap = this.lineCap;
if (this.o.bgColor !== "none") {
c.beginPath();
c.strokeStyle = this.o.bgColor;
c.arc(this.xy, this.xy, this.radius, this.endAngle - 0.00001, this.startAngle + 0.00001, true);
c.stroke();
}
if (this.o.displayPrevious) {
pa = this.arc(this.v);
c.beginPath();
c.strokeStyle = this.pColor;
c.arc(this.xy, this.xy, this.radius, pa.s, pa.e, pa.d);
c.stroke();
r = this.cv == this.v;
}
c.beginPath();
c.strokeStyle = r ? this.o.fgColor : this.fgColor ;
c.arc(this.xy, this.xy, this.radius, a.s, a.e, a.d);
c.stroke();
};
this.cancel = function () {
this.val(this.v);
};
};
$.fn.dial = $.fn.knob = function (o) {
return this.each(
function () {
var d = new k.Dial();
d.o = o;
d.$ = $(this);
d.run();
}
).parent();
};
}));
/*-------------------------------------------------------------
09. jQuery.appear (cartpie)
---------------------------------------------------------------*/
/*
* jQuery.appear
* https://github.com/bas2k/jquery.appear/
* http://code.google.com/p/jquery-appear/
*
* Copyright (c) 2009 Michael Hixson
* Copyright (c) 2012 Alexander Brovikov
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
*/
(function($) {
$.fn.appear = function(fn, options) {
var settings = $.extend({
//arbitrary data to pass to fn
data: undefined,
//call fn only on the first appear?
one: true,
// X & Y accuracy
accX: 0,
accY: 0
}, options);
return this.each(function() {
var t = $(this);
//whether the element is currently visible
t.appeared = false;
if (!fn) {
//trigger the custom event
t.trigger('appear', settings.data);
return;
}
var w = $(window);
//fires the appear event when appropriate
var check = function() {
//is the element hidden?
if (!t.is(':visible')) {
//it became hidden
t.appeared = false;
return;
}
//is the element inside the visible window?
var a = w.scrollLeft();
var b = w.scrollTop();
var o = t.offset();
var x = o.left;
var y = o.top;
var ax = settings.accX;
var ay = settings.accY;
var th = t.height();
var wh = w.height();
var tw = t.width();
var ww = w.width();
if (y + th + ay >= b &&
y <= b + wh + ay &&
x + tw + ax >= a &&
x <= a + ww + ax) {
//trigger the custom event
if (!t.appeared) t.trigger('appear', settings.data);
} else {
//it scrolled out of view
t.appeared = false;
}
};
//create a modified fn with some additional logic
var modifiedFn = function() {
//mark the element as visible
t.appeared = true;
//is this supposed to happen only once?
if (settings.one) {
//remove the check
w.unbind('scroll', check);
var i = $.inArray(check, $.fn.appear.checks);
if (i >= 0) $.fn.appear.checks.splice(i, 1);
}
//trigger the original fn
fn.apply(this, arguments);
};
//bind the modified fn to the element
if (settings.one) t.one('appear', settings.data, modifiedFn);
else t.bind('appear', settings.data, modifiedFn);
//check whenever the window scrolls
w.scroll(check);
//check whenever the dom changes
$.fn.appear.checks.push(check);
//check now
(check)();
});
};
//keep a queue of appearance checks
$.extend($.fn.appear, {
checks: [],
timeout: null,
//process the queue
checkAll: function() {
var length = $.fn.appear.checks.length;
if (length > 0) while (length--) ($.fn.appear.checks[length])();
},
//check the queue asynchronously
run: function() {
if ($.fn.appear.timeout) clearTimeout($.fn.appear.timeout);
$.fn.appear.timeout = setTimeout($.fn.appear.checkAll, 20);
}
});
//run checks when these methods are called
$.each(['append', 'prepend', 'after', 'before', 'attr',
'removeAttr', 'addClass', 'removeClass', 'toggleClass',
'remove', 'css', 'show', 'hide'], function(i, n) {
var old = $.fn[n];
if (old) {
$.fn[n] = function() {
var r = old.apply(this, arguments);
$.fn.appear.run();
return r;
}
}
});
})(jQuery);
/*-------------------------------------------------------------
10. mixItUp.
---------------------------------------------------------------*/
/**!
* MixItUp v2.1.11
*
* @copyright Copyright 2015 KunkaLabs Limited.
* @author KunkaLabs Limited.
* @link https://mixitup.kunkalabs.com
*
* @license Commercial use requires a commercial license.
* https://mixitup.kunkalabs.com/licenses/
*
* Non-commercial use permitted under terms of CC-BY-NC license.
* http://creativecommons.org/licenses/by-nc/3.0/
*/
(function($, undf){
'use strict';
/**
* MixItUp Constructor Function
* @constructor
* @extends jQuery
*/
$.MixItUp = function(){
var self = this;
self._execAction('_constructor', 0);
$.extend(self, {
/* Public Properties
---------------------------------------------------------------------- */
selectors: {
target: '.mix',
filter: '.filter',
sort: '.sort'
},
animation: {
enable: true,
effects: 'fade scale',
duration: 600,
easing: 'ease',
perspectiveDistance: '3000',
perspectiveOrigin: '50% 50%',
queue: true,
queueLimit: 1,
animateChangeLayout: false,
animateResizeContainer: true,
animateResizeTargets: false,
staggerSequence: false,
reverseOut: false
},
callbacks: {
onMixLoad: false,
onMixStart: false,
onMixBusy: false,
onMixEnd: false,
onMixFail: false,
_user: false
},
controls: {
enable: true,
live: false,
toggleFilterButtons: false,
toggleLogic: 'or',
activeClass: 'active'
},
layout: {
display: 'inline-block',
containerClass: '',
containerClassFail: 'fail'
},
load: {
filter: 'all',
sort: false
},
/* Private Properties
---------------------------------------------------------------------- */
_$body: null,
_$container: null,
_$targets: null,
_$parent: null,
_$sortButtons: null,
_$filterButtons: null,
_suckMode: false,
_mixing: false,
_sorting: false,
_clicking: false,
_loading: true,
_changingLayout: false,
_changingClass: false,
_changingDisplay: false,
_origOrder: [],
_startOrder: [],
_newOrder: [],
_activeFilter: null,
_toggleArray: [],
_toggleString: '',
_activeSort: 'default:asc',
_newSort: null,
_startHeight: null,
_newHeight: null,
_incPadding: true,
_newDisplay: null,
_newClass: null,
_targetsBound: 0,
_targetsDone: 0,
_queue: [],
_$show: $(),
_$hide: $()
});
self._execAction('_constructor', 1);
};
/**
* MixItUp Prototype
* @override
*/
$.MixItUp.prototype = {
constructor: $.MixItUp,
/* Static Properties
---------------------------------------------------------------------- */
_instances: {},
_handled: {
_filter: {},
_sort: {}
},
_bound: {
_filter: {},
_sort: {}
},
_actions: {},
_filters: {},
/* Static Methods
---------------------------------------------------------------------- */
/**
* Extend
* @since 2.1.0
* @param {object} new properties/methods
* @extends {object} prototype
*/
extend: function(extension){
for(var key in extension){
$.MixItUp.prototype[key] = extension[key];
}
},
/**
* Add Action
* @since 2.1.0
* @param {string} hook name
* @param {string} namespace
* @param {function} function to execute
* @param {number} priority
* @extends {object} $.MixItUp.prototype._actions
*/
addAction: function(hook, name, func, priority){
$.MixItUp.prototype._addHook('_actions', hook, name, func, priority);
},
/**
* Add Filter
* @since 2.1.0
* @param {string} hook name
* @param {string} namespace
* @param {function} function to execute
* @param {number} priority
* @extends {object} $.MixItUp.prototype._filters
*/
addFilter: function(hook, name, func, priority){
$.MixItUp.prototype._addHook('_filters', hook, name, func, priority);
},
/**
* Add Hook
* @since 2.1.0
* @param {string} type of hook
* @param {string} hook name
* @param {function} function to execute
* @param {number} priority
* @extends {object} $.MixItUp.prototype._filters
*/
_addHook: function(type, hook, name, func, priority){
var collection = $.MixItUp.prototype[type],
obj = {};
priority = (priority === 1 || priority === 'post') ? 'post' : 'pre';
obj[hook] = {};
obj[hook][priority] = {};
obj[hook][priority][name] = func;
$.extend(true, collection, obj);
},
/* Private Methods
---------------------------------------------------------------------- */
/**
* Initialise
* @since 2.0.0
* @param {object} domNode
* @param {object} config
*/
_init: function(domNode, config){
var self = this;
self._execAction('_init', 0, arguments);
config && $.extend(true, self, config);
self._$body = $('body');
self._domNode = domNode;
self._$container = $(domNode);
self._$container.addClass(self.layout.containerClass);
self._id = domNode.id;
self._platformDetect();
self._brake = self._getPrefixedCSS('transition', 'none');
self._refresh(true);
self._$parent = self._$targets.parent().length ? self._$targets.parent() : self._$container;
if(self.load.sort){
self._newSort = self._parseSort(self.load.sort);
self._newSortString = self.load.sort;
self._activeSort = self.load.sort;
self._sort();
self._printSort();
}
self._activeFilter = self.load.filter === 'all' ?
self.selectors.target :
self.load.filter === 'none' ?
'' :
self.load.filter;
self.controls.enable && self._bindHandlers();
if(self.controls.toggleFilterButtons){
self._buildToggleArray();
for(var i = 0; i < self._toggleArray.length; i++){
self._updateControls({filter: self._toggleArray[i], sort: self._activeSort}, true);
};
} else if(self.controls.enable){
self._updateControls({filter: self._activeFilter, sort: self._activeSort});
}
self._filter();
self._init = true;
self._$container.data('mixItUp',self);
self._execAction('_init', 1, arguments);
self._buildState();
self._$targets.css(self._brake);
self._goMix(self.animation.enable);
},
/**
* Platform Detect
* @since 2.0.0
*/
_platformDetect: function(){
var self = this,
vendorsTrans = ['Webkit', 'Moz', 'O', 'ms'],
vendorsRAF = ['webkit', 'moz'],
chrome = window.navigator.appVersion.match(/Chrome\/(\d+)\./) || false,
ff = typeof InstallTrigger !== 'undefined',
prefix = function(el){
for (var i = 0; i < vendorsTrans.length; i++){
if (vendorsTrans[i] + 'Transition' in el.style){
return {
prefix: '-'+vendorsTrans[i].toLowerCase()+'-',
vendor: vendorsTrans[i]
};
};
};
return 'transition' in el.style ? '' : false;
},
transPrefix = prefix(self._domNode);
self._execAction('_platformDetect', 0);
self._chrome = chrome ? parseInt(chrome[1], 10) : false;
self._ff = ff ? parseInt(window.navigator.userAgent.match(/rv:([^)]+)\)/)[1]) : false;
self._prefix = transPrefix.prefix;
self._vendor = transPrefix.vendor;
self._suckMode = window.atob && self._prefix ? false : true;
self._suckMode && (self.animation.enable = false);
(self._ff && self._ff <= 4) && (self.animation.enable = false);
/* Polyfills
---------------------------------------------------------------------- */
/**
* window.requestAnimationFrame
*/
for(var x = 0; x < vendorsRAF.length && !window.requestAnimationFrame; x++){
window.requestAnimationFrame = window[vendorsRAF[x]+'RequestAnimationFrame'];
}
/**
* Object.getPrototypeOf
*/
if(typeof Object.getPrototypeOf !== 'function'){
if(typeof 'test'.__proto__ === 'object'){
Object.getPrototypeOf = function(object){
return object.__proto__;
};
} else {
Object.getPrototypeOf = function(object){
return object.constructor.prototype;
};
}
}
/**
* Element.nextElementSibling
*/
if(self._domNode.nextElementSibling === undf){
Object.defineProperty(Element.prototype, 'nextElementSibling',{
get: function(){
var el = this.nextSibling;
while(el){
if(el.nodeType ===1){
return el;
}
el = el.nextSibling;
}
return null;
}
});
}
self._execAction('_platformDetect', 1);
},
/**
* Refresh
* @since 2.0.0
* @param {boolean} init
* @param {boolean} force
*/
_refresh: function(init, force){
var self = this;
self._execAction('_refresh', 0, arguments);
self._$targets = self._$container.find(self.selectors.target);
for(var i = 0; i < self._$targets.length; i++){
var target = self._$targets[i];
if(target.dataset === undf || force){
target.dataset = {};
for(var j = 0; j < target.attributes.length; j++){
var attr = target.attributes[j],
name = attr.name,
val = attr.value;
if(name.indexOf('data-') > -1){
var dataName = self._helpers._camelCase(name.substring(5,name.length));
target.dataset[dataName] = val;
}
}
}
if(target.mixParent === undf){
target.mixParent = self._id;
}
}
if(
(self._$targets.length && init) ||
(!self._origOrder.length && self._$targets.length)
){
self._origOrder = [];
for(var i = 0; i < self._$targets.length; i++){
var target = self._$targets[i];
self._origOrder.push(target);
}
}
self._execAction('_refresh', 1, arguments);
},
/**
* Bind Handlers
* @since 2.0.0
*/
_bindHandlers: function(){
var self = this,
filters = $.MixItUp.prototype._bound._filter,
sorts = $.MixItUp.prototype._bound._sort;
self._execAction('_bindHandlers', 0);
if(self.controls.live){
self._$body
.on('click.mixItUp.'+self._id, self.selectors.sort, function(){
self._processClick($(this), 'sort');
})
.on('click.mixItUp.'+self._id, self.selectors.filter, function(){
self._processClick($(this), 'filter');
});
} else {
self._$sortButtons = $(self.selectors.sort);
self._$filterButtons = $(self.selectors.filter);
self._$sortButtons.on('click.mixItUp.'+self._id, function(){
self._processClick($(this), 'sort');
});
self._$filterButtons.on('click.mixItUp.'+self._id, function(){
self._processClick($(this), 'filter');
});
}
filters[self.selectors.filter] = (filters[self.selectors.filter] === undf) ? 1 : filters[self.selectors.filter] + 1;
sorts[self.selectors.sort] = (sorts[self.selectors.sort] === undf) ? 1 : sorts[self.selectors.sort] + 1;
self._execAction('_bindHandlers', 1);
},
/**
* Process Click
* @since 2.0.0
* @param {object} $button
* @param {string} type
*/
_processClick: function($button, type){
var self = this,
trackClick = function($button, type, off){
var proto = $.MixItUp.prototype;
proto._handled['_'+type][self.selectors[type]] = (proto._handled['_'+type][self.selectors[type]] === undf) ?
1 :
proto._handled['_'+type][self.selectors[type]] + 1;
if(proto._handled['_'+type][self.selectors[type]] === proto._bound['_'+type][self.selectors[type]]){
$button[(off ? 'remove' : 'add')+'Class'](self.controls.activeClass);
delete proto._handled['_'+type][self.selectors[type]];
}
};
self._execAction('_processClick', 0, arguments);
if(!self._mixing || (self.animation.queue && self._queue.length < self.animation.queueLimit)){
self._clicking = true;
if(type === 'sort'){
var sort = $button.attr('data-sort');
if(!$button.hasClass(self.controls.activeClass) || sort.indexOf('random') > -1){
$(self.selectors.sort).removeClass(self.controls.activeClass);
trackClick($button, type);
self.sort(sort);
}
}
if(type === 'filter') {
var filter = $button.attr('data-filter'),
ndx,
seperator = self.controls.toggleLogic === 'or' ? ',' : '';
if(!self.controls.toggleFilterButtons){
if(!$button.hasClass(self.controls.activeClass)){
$(self.selectors.filter).removeClass(self.controls.activeClass);
trackClick($button, type);
self.filter(filter);
}
} else {
self._buildToggleArray();
if(!$button.hasClass(self.controls.activeClass)){
trackClick($button, type);
self._toggleArray.push(filter);
} else {
trackClick($button, type, true);
ndx = self._toggleArray.indexOf(filter);
self._toggleArray.splice(ndx, 1);
}
self._toggleArray = $.grep(self._toggleArray,function(n){return(n);});
self._toggleString = self._toggleArray.join(seperator);
self.filter(self._toggleString);
}
}
self._execAction('_processClick', 1, arguments);
} else {
if(typeof self.callbacks.onMixBusy === 'function'){
self.callbacks.onMixBusy.call(self._domNode, self._state, self);
}
self._execAction('_processClickBusy', 1, arguments);
}
},
/**
* Build Toggle Array
* @since 2.0.0
*/
_buildToggleArray: function(){
var self = this,
activeFilter = self._activeFilter.replace(/\s/g, '');
self._execAction('_buildToggleArray', 0, arguments);
if(self.controls.toggleLogic === 'or'){
self._toggleArray = activeFilter.split(',');
} else {
self._toggleArray = activeFilter.split('.');
!self._toggleArray[0] && self._toggleArray.shift();
for(var i = 0, filter; filter = self._toggleArray[i]; i++){
self._toggleArray[i] = '.'+filter;
}
}
self._execAction('_buildToggleArray', 1, arguments);
},
/**
* Update Controls
* @since 2.0.0
* @param {object} command
* @param {boolean} multi
*/
_updateControls: function(command, multi){
var self = this,
output = {
filter: command.filter,
sort: command.sort
},
update = function($el, filter){
try {
(multi && type === 'filter' && !(output.filter === 'none' || output.filter === '')) ?
$el.filter(filter).addClass(self.controls.activeClass) :
$el.removeClass(self.controls.activeClass).filter(filter).addClass(self.controls.activeClass);
} catch(e) {}
},
type = 'filter',
$el = null;
self._execAction('_updateControls', 0, arguments);
(command.filter === undf) && (output.filter = self._activeFilter);
(command.sort === undf) && (output.sort = self._activeSort);
(output.filter === self.selectors.target) && (output.filter = 'all');
for(var i = 0; i < 2; i++){
$el = self.controls.live ? $(self.selectors[type]) : self['_$'+type+'Buttons'];
$el && update($el, '[data-'+type+'="'+output[type]+'"]');
type = 'sort';
}
self._execAction('_updateControls', 1, arguments);
},
/**
* Filter (private)
* @since 2.0.0
*/
_filter: function(){
var self = this;
self._execAction('_filter', 0);
for(var i = 0; i < self._$targets.length; i++){
var $target = $(self._$targets[i]);
if($target.is(self._activeFilter)){
self._$show = self._$show.add($target);
} else {
self._$hide = self._$hide.add($target);
}
}
self._execAction('_filter', 1);
},
/**
* Sort (private)
* @since 2.0.0
*/
_sort: function(){
var self = this,
arrayShuffle = function(oldArray){
var newArray = oldArray.slice(),
len = newArray.length,
i = len;
while(i--){
var p = parseInt(Math.random()*len);
var t = newArray[i];
newArray[i] = newArray[p];
newArray[p] = t;
};
return newArray;
};
self._execAction('_sort', 0);
self._startOrder = [];
for(var i = 0; i < self._$targets.length; i++){
var target = self._$targets[i];
self._startOrder.push(target);
}
switch(self._newSort[0].sortBy){
case 'default':
self._newOrder = self._origOrder;
break;
case 'random':
self._newOrder = arrayShuffle(self._startOrder);
break;
case 'custom':
self._newOrder = self._newSort[0].order;
break;
default:
self._newOrder = self._startOrder.concat().sort(function(a, b){
return self._compare(a, b);
});
}
self._execAction('_sort', 1);
},
/**
* Compare Algorithm
* @since 2.0.0
* @param {string|number} a
* @param {string|number} b
* @param {number} depth (recursion)
* @return {number}
*/
_compare: function(a, b, depth){
depth = depth ? depth : 0;
var self = this,
order = self._newSort[depth].order,
getData = function(el){
return el.dataset[self._newSort[depth].sortBy] || 0;
},
attrA = isNaN(getData(a) * 1) ? getData(a).toLowerCase() : getData(a) * 1,
attrB = isNaN(getData(b) * 1) ? getData(b).toLowerCase() : getData(b) * 1;
if(attrA < attrB)
return order === 'asc' ? -1 : 1;
if(attrA > attrB)
return order === 'asc' ? 1 : -1;
if(attrA === attrB && self._newSort.length > depth+1)
return self._compare(a, b, depth+1);
return 0;
},
/**
* Print Sort
* @since 2.0.0
* @param {boolean} reset
*/
_printSort: function(reset){
var self = this,
order = reset ? self._startOrder : self._newOrder,
targets = self._$parent[0].querySelectorAll(self.selectors.target),
nextSibling = targets.length ? targets[targets.length -1].nextElementSibling : null,
frag = document.createDocumentFragment();
self._execAction('_printSort', 0, arguments);
for(var i = 0; i < targets.length; i++){
var target = targets[i],
whiteSpace = target.nextSibling;
if(target.style.position === 'absolute') continue;
if(whiteSpace && whiteSpace.nodeName === '#text'){
self._$parent[0].removeChild(whiteSpace);
}
self._$parent[0].removeChild(target);
}
for(var i = 0; i < order.length; i++){
var el = order[i];
if(self._newSort[0].sortBy === 'default' && self._newSort[0].order === 'desc' && !reset){
var firstChild = frag.firstChild;
frag.insertBefore(el, firstChild);
frag.insertBefore(document.createTextNode(' '), el);
} else {
frag.appendChild(el);
frag.appendChild(document.createTextNode(' '));
}
}
nextSibling ?
self._$parent[0].insertBefore(frag, nextSibling) :
self._$parent[0].appendChild(frag);
self._execAction('_printSort', 1, arguments);
},
/**
* Parse Sort
* @since 2.0.0
* @param {string} sortString
* @return {array} newSort
*/
_parseSort: function(sortString){
var self = this,
rules = typeof sortString === 'string' ? sortString.split(' ') : [sortString],
newSort = [];
for(var i = 0; i < rules.length; i++){
var rule = typeof sortString === 'string' ? rules[i].split(':') : ['custom', rules[i]],
ruleObj = {
sortBy: self._helpers._camelCase(rule[0]),
order: rule[1] || 'asc'
};
newSort.push(ruleObj);
if(ruleObj.sortBy === 'default' || ruleObj.sortBy === 'random') break;
}
return self._execFilter('_parseSort', newSort, arguments);
},
/**
* Parse Effects
* @since 2.0.0
* @return {object} effects
*/
_parseEffects: function(){
var self = this,
effects = {
opacity: '',
transformIn: '',
transformOut: '',
filter: ''
},
parse = function(effect, extract, reverse){
if(self.animation.effects.indexOf(effect) > -1){
if(extract){
var propIndex = self.animation.effects.indexOf(effect+'(');
if(propIndex > -1){
var str = self.animation.effects.substring(propIndex),
match = /\(([^)]+)\)/.exec(str),
val = match[1];
return {val: val};
}
}
return true;
} else {
return false;
}
},
negate = function(value, invert){
if(invert){
return value.charAt(0) === '-' ? value.substr(1, value.length) : '-'+value;
} else {
return value;
}
},
buildTransform = function(key, invert){
var transforms = [
['scale', '.01'],
['translateX', '20px'],
['translateY', '20px'],
['translateZ', '20px'],
['rotateX', '90deg'],
['rotateY', '90deg'],
['rotateZ', '180deg'],
];
for(var i = 0; i < transforms.length; i++){
var prop = transforms[i][0],
def = transforms[i][1],
inverted = invert && prop !== 'scale';
effects[key] += parse(prop) ? prop+'('+negate(parse(prop, true).val || def, inverted)+') ' : '';
}
};
effects.opacity = parse('fade') ? parse('fade',true).val || '0' : '1';
buildTransform('transformIn');
self.animation.reverseOut ? buildTransform('transformOut', true) : (effects.transformOut = effects.transformIn);
effects.transition = {};
effects.transition = self._getPrefixedCSS('transition','all '+self.animation.duration+'ms '+self.animation.easing+', opacity '+self.animation.duration+'ms linear');
self.animation.stagger = parse('stagger') ? true : false;
self.animation.staggerDuration = parseInt(parse('stagger') ? (parse('stagger',true).val ? parse('stagger',true).val : 100) : 100);
return self._execFilter('_parseEffects', effects);
},
/**
* Build State
* @since 2.0.0
* @param {boolean} future
* @return {object} futureState
*/
_buildState: function(future){
var self = this,
state = {};
self._execAction('_buildState', 0);
state = {
activeFilter: self._activeFilter === '' ? 'none' : self._activeFilter,
activeSort: future && self._newSortString ? self._newSortString : self._activeSort,
fail: !self._$show.length && self._activeFilter !== '',
$targets: self._$targets,
$show: self._$show,
$hide: self._$hide,
totalTargets: self._$targets.length,
totalShow: self._$show.length,
totalHide: self._$hide.length,
display: future && self._newDisplay ? self._newDisplay : self.layout.display
};
if(future){
return self._execFilter('_buildState', state);
} else {
self._state = state;
self._execAction('_buildState', 1);
}
},
/**
* Go Mix
* @since 2.0.0
* @param {boolean} animate
*/
_goMix: function(animate){
var self = this,
phase1 = function(){
if(self._chrome && (self._chrome === 31)){
chromeFix(self._$parent[0]);
}
self._setInter();
phase2();
},
phase2 = function(){
var scrollTop = window.pageYOffset,
scrollLeft = window.pageXOffset,
docHeight = document.documentElement.scrollHeight;
self._getInterMixData();
self._setFinal();
self._getFinalMixData();
(window.pageYOffset !== scrollTop) && window.scrollTo(scrollLeft, scrollTop);
self._prepTargets();
if(window.requestAnimationFrame){
requestAnimationFrame(phase3);
} else {
setTimeout(function(){
phase3();
},20);
}
},
phase3 = function(){
self._animateTargets();
if(self._targetsBound === 0){
self._cleanUp();
}
},
chromeFix = function(grid){
var parent = grid.parentElement,
placeholder = document.createElement('div'),
frag = document.createDocumentFragment();
parent.insertBefore(placeholder, grid);
frag.appendChild(grid);
parent.replaceChild(grid, placeholder);
},
futureState = self._buildState(true);
self._execAction('_goMix', 0, arguments);
!self.animation.duration && (animate = false);
self._mixing = true;
self._$container.removeClass(self.layout.containerClassFail);
if(typeof self.callbacks.onMixStart === 'function'){
self.callbacks.onMixStart.call(self._domNode, self._state, futureState, self);
}
self._$container.trigger('mixStart', [self._state, futureState, self]);
self._getOrigMixData();
if(animate && !self._suckMode){
window.requestAnimationFrame ?
requestAnimationFrame(phase1) :
phase1();
} else {
self._cleanUp();
}
self._execAction('_goMix', 1, arguments);
},
/**
* Get Target Data
* @since 2.0.0
*/
_getTargetData: function(el, stage){
var self = this,
elStyle;
el.dataset[stage+'PosX'] = el.offsetLeft;
el.dataset[stage+'PosY'] = el.offsetTop;
if(self.animation.animateResizeTargets){
elStyle = !self._suckMode ?
window.getComputedStyle(el) :
{
marginBottom: '',
marginRight: ''
};
el.dataset[stage+'MarginBottom'] = parseInt(elStyle.marginBottom);
el.dataset[stage+'MarginRight'] = parseInt(elStyle.marginRight);
el.dataset[stage+'Width'] = el.offsetWidth;
el.dataset[stage+'Height'] = el.offsetHeight;
}
},
/**
* Get Original Mix Data
* @since 2.0.0
*/
_getOrigMixData: function(){
var self = this,
parentStyle = !self._suckMode ? window.getComputedStyle(self._$parent[0]) : {boxSizing: ''},
parentBS = parentStyle.boxSizing || parentStyle[self._vendor+'BoxSizing'];
self._incPadding = (parentBS === 'border-box');
self._execAction('_getOrigMixData', 0);
!self._suckMode && (self.effects = self._parseEffects());
self._$toHide = self._$hide.filter(':visible');
self._$toShow = self._$show.filter(':hidden');
self._$pre = self._$targets.filter(':visible');
self._startHeight = self._incPadding ?
self._$parent.outerHeight() :
self._$parent.height();
for(var i = 0; i < self._$pre.length; i++){
var el = self._$pre[i];
self._getTargetData(el, 'orig');
}
self._execAction('_getOrigMixData', 1);
},
/**
* Set Intermediate Positions
* @since 2.0.0
*/
_setInter: function(){
var self = this;
self._execAction('_setInter', 0);
if(self._changingLayout && self.animation.animateChangeLayout){
self._$toShow.css('display',self._newDisplay);
if(self._changingClass){
self._$container
.removeClass(self.layout.containerClass)
.addClass(self._newClass);
}
} else {
self._$toShow.css('display', self.layout.display);
}
self._execAction('_setInter', 1);
},
/**
* Get Intermediate Mix Data
* @since 2.0.0
*/
_getInterMixData: function(){
var self = this;
self._execAction('_getInterMixData', 0);
for(var i = 0; i < self._$toShow.length; i++){
var el = self._$toShow[i];
self._getTargetData(el, 'inter');
}
for(var i = 0; i < self._$pre.length; i++){
var el = self._$pre[i];
self._getTargetData(el, 'inter');
}
self._execAction('_getInterMixData', 1);
},
/**
* Set Final Positions
* @since 2.0.0
*/
_setFinal: function(){
var self = this;
self._execAction('_setFinal', 0);
self._sorting && self._printSort();
self._$toHide.removeStyle('display');
if(self._changingLayout && self.animation.animateChangeLayout){
self._$pre.css('display',self._newDisplay);
}
self._execAction('_setFinal', 1);
},
/**
* Get Final Mix Data
* @since 2.0.0
*/
_getFinalMixData: function(){
var self = this;
self._execAction('_getFinalMixData', 0);
for(var i = 0; i < self._$toShow.length; i++){
var el = self._$toShow[i];
self._getTargetData(el, 'final');
}
for(var i = 0; i < self._$pre.length; i++){
var el = self._$pre[i];
self._getTargetData(el, 'final');
}
self._newHeight = self._incPadding ?
self._$parent.outerHeight() :
self._$parent.height();
self._sorting && self._printSort(true);
self._$toShow.removeStyle('display');
self._$pre.css('display',self.layout.display);
if(self._changingClass && self.animation.animateChangeLayout){
self._$container
.removeClass(self._newClass)
.addClass(self.layout.containerClass);
}
self._execAction('_getFinalMixData', 1);
},
/**
* Prepare Targets
* @since 2.0.0
*/
_prepTargets: function(){
var self = this,
transformCSS = {
_in: self._getPrefixedCSS('transform', self.effects.transformIn),
_out: self._getPrefixedCSS('transform', self.effects.transformOut)
};
self._execAction('_prepTargets', 0);
if(self.animation.animateResizeContainer){
self._$parent.css('height',self._startHeight+'px');
}
for(var i = 0; i < self._$toShow.length; i++){
var el = self._$toShow[i],
$el = $(el);
el.style.opacity = self.effects.opacity;
el.style.display = (self._changingLayout && self.animation.animateChangeLayout) ?
self._newDisplay :
self.layout.display;
$el.css(transformCSS._in);
if(self.animation.animateResizeTargets){
el.style.width = el.dataset.finalWidth+'px';
el.style.height = el.dataset.finalHeight+'px';
el.style.marginRight = -(el.dataset.finalWidth - el.dataset.interWidth) + (el.dataset.finalMarginRight * 1)+'px';
el.style.marginBottom = -(el.dataset.finalHeight - el.dataset.interHeight) + (el.dataset.finalMarginBottom * 1)+'px';
}
}
for(var i = 0; i < self._$pre.length; i++){
var el = self._$pre[i],
$el = $(el),
translate = {
x: el.dataset.origPosX - el.dataset.interPosX,
y: el.dataset.origPosY - el.dataset.interPosY
},
transformCSS = self._getPrefixedCSS('transform','translate('+translate.x+'px,'+translate.y+'px)');
$el.css(transformCSS);
if(self.animation.animateResizeTargets){
el.style.width = el.dataset.origWidth+'px';
el.style.height = el.dataset.origHeight+'px';
if(el.dataset.origWidth - el.dataset.finalWidth){
el.style.marginRight = -(el.dataset.origWidth - el.dataset.interWidth) + (el.dataset.origMarginRight * 1)+'px';
}
if(el.dataset.origHeight - el.dataset.finalHeight){
el.style.marginBottom = -(el.dataset.origHeight - el.dataset.interHeight) + (el.dataset.origMarginBottom * 1) +'px';
}
}
}
self._execAction('_prepTargets', 1);
},
/**
* Animate Targets
* @since 2.0.0
*/
_animateTargets: function(){
var self = this;
self._execAction('_animateTargets', 0);
self._targetsDone = 0;
self._targetsBound = 0;
self._$parent
.css(self._getPrefixedCSS('perspective', self.animation.perspectiveDistance+'px'))
.css(self._getPrefixedCSS('perspective-origin', self.animation.perspectiveOrigin));
if(self.animation.animateResizeContainer){
self._$parent
.css(self._getPrefixedCSS('transition','height '+self.animation.duration+'ms ease'))
.css('height',self._newHeight+'px');
}
for(var i = 0; i < self._$toShow.length; i++){
var el = self._$toShow[i],
$el = $(el),
translate = {
x: el.dataset.finalPosX - el.dataset.interPosX,
y: el.dataset.finalPosY - el.dataset.interPosY
},
delay = self._getDelay(i),
toShowCSS = {};
el.style.opacity = '';
for(var j = 0; j < 2; j++){
var a = j === 0 ? a = self._prefix : '';
if(self._ff && self._ff <= 20){
toShowCSS[a+'transition-property'] = 'all';
toShowCSS[a+'transition-timing-function'] = self.animation.easing+'ms';
toShowCSS[a+'transition-duration'] = self.animation.duration+'ms';
}
toShowCSS[a+'transition-delay'] = delay+'ms';
toShowCSS[a+'transform'] = 'translate('+translate.x+'px,'+translate.y+'px)';
}
if(self.effects.transform || self.effects.opacity){
self._bindTargetDone($el);
}
(self._ff && self._ff <= 20) ?
$el.css(toShowCSS) :
$el.css(self.effects.transition).css(toShowCSS);
}
for(var i = 0; i < self._$pre.length; i++){
var el = self._$pre[i],
$el = $(el),
translate = {
x: el.dataset.finalPosX - el.dataset.interPosX,
y: el.dataset.finalPosY - el.dataset.interPosY
},
delay = self._getDelay(i);
if(!(
el.dataset.finalPosX === el.dataset.origPosX &&
el.dataset.finalPosY === el.dataset.origPosY
)){
self._bindTargetDone($el);
}
$el.css(self._getPrefixedCSS('transition', 'all '+self.animation.duration+'ms '+self.animation.easing+' '+delay+'ms'));
$el.css(self._getPrefixedCSS('transform', 'translate('+translate.x+'px,'+translate.y+'px)'));
if(self.animation.animateResizeTargets){
if(el.dataset.origWidth - el.dataset.finalWidth && el.dataset.finalWidth * 1){
el.style.width = el.dataset.finalWidth+'px';
el.style.marginRight = -(el.dataset.finalWidth - el.dataset.interWidth)+(el.dataset.finalMarginRight * 1)+'px';
}
if(el.dataset.origHeight - el.dataset.finalHeight && el.dataset.finalHeight * 1){
el.style.height = el.dataset.finalHeight+'px';
el.style.marginBottom = -(el.dataset.finalHeight - el.dataset.interHeight)+(el.dataset.finalMarginBottom * 1) +'px';
}
}
}
if(self._changingClass){
self._$container
.removeClass(self.layout.containerClass)
.addClass(self._newClass);
}
for(var i = 0; i < self._$toHide.length; i++){
var el = self._$toHide[i],
$el = $(el),
delay = self._getDelay(i),
toHideCSS = {};
for(var j = 0; j<2; j++){
var a = j === 0 ? a = self._prefix : '';
toHideCSS[a+'transition-delay'] = delay+'ms';
toHideCSS[a+'transform'] = self.effects.transformOut;
toHideCSS.opacity = self.effects.opacity;
}
$el.css(self.effects.transition).css(toHideCSS);
if(self.effects.transform || self.effects.opacity){
self._bindTargetDone($el);
};
}
self._execAction('_animateTargets', 1);
},
/**
* Bind Targets TransitionEnd
* @since 2.0.0
* @param {object} $el
*/
_bindTargetDone: function($el){
var self = this,
el = $el[0];
self._execAction('_bindTargetDone', 0, arguments);
if(!el.dataset.bound){
el.dataset.bound = true;
self._targetsBound++;
$el.on('webkitTransitionEnd.mixItUp transitionend.mixItUp',function(e){
if(
(e.originalEvent.propertyName.indexOf('transform') > -1 ||
e.originalEvent.propertyName.indexOf('opacity') > -1) &&
$(e.originalEvent.target).is(self.selectors.target)
){
$el.off('.mixItUp');
el.dataset.bound = '';
self._targetDone();
}
});
}
self._execAction('_bindTargetDone', 1, arguments);
},
/**
* Target Done
* @since 2.0.0
*/
_targetDone: function(){
var self = this;
self._execAction('_targetDone', 0);
self._targetsDone++;
(self._targetsDone === self._targetsBound) && self._cleanUp();
self._execAction('_targetDone', 1);
},
/**
* Clean Up
* @since 2.0.0
*/
_cleanUp: function(){
var self = this,
targetStyles = self.animation.animateResizeTargets ?
'transform opacity width height margin-bottom margin-right' :
'transform opacity',
unBrake = function(){
self._$targets.removeStyle('transition', self._prefix);
};
self._execAction('_cleanUp', 0);
!self._changingLayout ?
self._$show.css('display',self.layout.display) :
self._$show.css('display',self._newDisplay);
self._$targets.css(self._brake);
self._$targets
.removeStyle(targetStyles, self._prefix)
.removeAttr('data-inter-pos-x data-inter-pos-y data-final-pos-x data-final-pos-y data-orig-pos-x data-orig-pos-y data-orig-height data-orig-width data-final-height data-final-width data-inter-width data-inter-height data-orig-margin-right data-orig-margin-bottom data-inter-margin-right data-inter-margin-bottom data-final-margin-right data-final-margin-bottom');
self._$hide.removeStyle('display');
self._$parent.removeStyle('height transition perspective-distance perspective perspective-origin-x perspective-origin-y perspective-origin perspectiveOrigin', self._prefix);
if(self._sorting){
self._printSort();
self._activeSort = self._newSortString;
self._sorting = false;
}
if(self._changingLayout){
if(self._changingDisplay){
self.layout.display = self._newDisplay;
self._changingDisplay = false;
}
if(self._changingClass){
self._$parent.removeClass(self.layout.containerClass).addClass(self._newClass);
self.layout.containerClass = self._newClass;
self._changingClass = false;
}
self._changingLayout = false;
}
self._refresh();
self._buildState();
if(self._state.fail){
self._$container.addClass(self.layout.containerClassFail);
}
self._$show = $();
self._$hide = $();
if(window.requestAnimationFrame){
requestAnimationFrame(unBrake);
}
self._mixing = false;
if(typeof self.callbacks._user === 'function'){
self.callbacks._user.call(self._domNode, self._state, self);
}
if(typeof self.callbacks.onMixEnd === 'function'){
self.callbacks.onMixEnd.call(self._domNode, self._state, self);
}
self._$container.trigger('mixEnd', [self._state, self]);
if(self._state.fail){
(typeof self.callbacks.onMixFail === 'function') && self.callbacks.onMixFail.call(self._domNode, self._state, self);
self._$container.trigger('mixFail', [self._state, self]);
}
if(self._loading){
(typeof self.callbacks.onMixLoad === 'function') && self.callbacks.onMixLoad.call(self._domNode, self._state, self);
self._$container.trigger('mixLoad', [self._state, self]);
}
if(self._queue.length){
self._execAction('_queue', 0);
self.multiMix(self._queue[0][0],self._queue[0][1],self._queue[0][2]);
self._queue.splice(0, 1);
}
self._execAction('_cleanUp', 1);
self._loading = false;
},
/**
* Get Prefixed CSS
* @since 2.0.0
* @param {string} property
* @param {string} value
* @param {boolean} prefixValue
* @return {object} styles
*/
_getPrefixedCSS: function(property, value, prefixValue){
var self = this,
styles = {},
prefix = '',
i = -1;
for(i = 0; i < 2; i++){
prefix = i === 0 ? self._prefix : '';
prefixValue ? styles[prefix+property] = prefix+value : styles[prefix+property] = value;
}
return self._execFilter('_getPrefixedCSS', styles, arguments);
},
/**
* Get Delay
* @since 2.0.0
* @param {number} i
* @return {number} delay
*/
_getDelay: function(i){
var self = this,
n = typeof self.animation.staggerSequence === 'function' ? self.animation.staggerSequence.call(self._domNode, i, self._state) : i,
delay = self.animation.stagger ? n * self.animation.staggerDuration : 0;
return self._execFilter('_getDelay', delay, arguments);
},
/**
* Parse MultiMix Arguments
* @since 2.0.0
* @param {array} args
* @return {object} output
*/
_parseMultiMixArgs: function(args){
var self = this,
output = {
command: null,
animate: self.animation.enable,
callback: null
};
for(var i = 0; i < args.length; i++){
var arg = args[i];
if(arg !== null){
if(typeof arg === 'object' || typeof arg === 'string'){
output.command = arg;
} else if(typeof arg === 'boolean'){
output.animate = arg;
} else if(typeof arg === 'function'){
output.callback = arg;
}
}
}
return self._execFilter('_parseMultiMixArgs', output, arguments);
},
/**
* Parse Insert Arguments
* @since 2.0.0
* @param {array} args
* @return {object} output
*/
_parseInsertArgs: function(args){
var self = this,
output = {
index: 0,
$object: $(),
multiMix: {filter: self._state.activeFilter},
callback: null
};
for(var i = 0; i < args.length; i++){
var arg = args[i];
if(typeof arg === 'number'){
output.index = arg;
} else if(typeof arg === 'object' && arg instanceof $){
output.$object = arg;
} else if(typeof arg === 'object' && self._helpers._isElement(arg)){
output.$object = $(arg);
} else if(typeof arg === 'object' && arg !== null){
output.multiMix = arg;
} else if(typeof arg === 'boolean' && !arg){
output.multiMix = false;
} else if(typeof arg === 'function'){
output.callback = arg;
}
}
return self._execFilter('_parseInsertArgs', output, arguments);
},
/**
* Execute Action
* @since 2.0.0
* @param {string} methodName
* @param {boolean} isPost
* @param {array} args
*/
_execAction: function(methodName, isPost, args){
var self = this,
context = isPost ? 'post' : 'pre';
if(!self._actions.isEmptyObject && self._actions.hasOwnProperty(methodName)){
for(var key in self._actions[methodName][context]){
self._actions[methodName][context][key].call(self, args);
}
}
},
/**
* Execute Filter
* @since 2.0.0
* @param {string} methodName
* @param {mixed} value
* @return {mixed} value
*/
_execFilter: function(methodName, value, args){
var self = this;
if(!self._filters.isEmptyObject && self._filters.hasOwnProperty(methodName)){
for(var key in self._filters[methodName]){
return self._filters[methodName][key].call(self, args);
}
} else {
return value;
}
},
/* Helpers
---------------------------------------------------------------------- */
_helpers: {
/**
* CamelCase
* @since 2.0.0
* @param {string}
* @return {string}
*/
_camelCase: function(string){
return string.replace(/-([a-z])/g, function(g){
return g[1].toUpperCase();
});
},
/**
* Is Element
* @since 2.1.3
* @param {object} element to test
* @return {boolean}
*/
_isElement: function(el){
if(window.HTMLElement){
return el instanceof HTMLElement;
} else {
return (
el !== null &&
el.nodeType === 1 &&
el.nodeName === 'string'
);
}
}
},
/* Public Methods
---------------------------------------------------------------------- */
/**
* Is Mixing
* @since 2.0.0
* @return {boolean}
*/
isMixing: function(){
var self = this;
return self._execFilter('isMixing', self._mixing);
},
/**
* Filter (public)
* @since 2.0.0
* @param {array} arguments
*/
filter: function(){
var self = this,
args = self._parseMultiMixArgs(arguments);
self._clicking && (self._toggleString = '');
self.multiMix({filter: args.command}, args.animate, args.callback);
},
/**
* Sort (public)
* @since 2.0.0
* @param {array} arguments
*/
sort: function(){
var self = this,
args = self._parseMultiMixArgs(arguments);
self.multiMix({sort: args.command}, args.animate, args.callback);
},
/**
* Change Layout (public)
* @since 2.0.0
* @param {array} arguments
*/
changeLayout: function(){
var self = this,
args = self._parseMultiMixArgs(arguments);
self.multiMix({changeLayout: args.command}, args.animate, args.callback);
},
/**
* MultiMix
* @since 2.0.0
* @param {array} arguments
*/
multiMix: function(){
var self = this,
args = self._parseMultiMixArgs(arguments);
self._execAction('multiMix', 0, arguments);
if(!self._mixing){
if(self.controls.enable && !self._clicking){
self.controls.toggleFilterButtons && self._buildToggleArray();
self._updateControls(args.command, self.controls.toggleFilterButtons);
}
(self._queue.length < 2) && (self._clicking = false);
delete self.callbacks._user;
if(args.callback) self.callbacks._user = args.callback;
var sort = args.command.sort,
filter = args.command.filter,
changeLayout = args.command.changeLayout;
self._refresh();
if(sort){
self._newSort = self._parseSort(sort);
self._newSortString = sort;
self._sorting = true;
self._sort();
}
if(filter !== undf){
filter = (filter === 'all') ? self.selectors.target : filter;
self._activeFilter = filter;
}
self._filter();
if(changeLayout){
self._newDisplay = (typeof changeLayout === 'string') ? changeLayout : changeLayout.display || self.layout.display;
self._newClass = changeLayout.containerClass || '';
if(
self._newDisplay !== self.layout.display ||
self._newClass !== self.layout.containerClass
){
self._changingLayout = true;
self._changingClass = (self._newClass !== self.layout.containerClass);
self._changingDisplay = (self._newDisplay !== self.layout.display);
}
}
self._$targets.css(self._brake);
self._goMix(args.animate ^ self.animation.enable ? args.animate : self.animation.enable);
self._execAction('multiMix', 1, arguments);
} else {
if(self.animation.queue && self._queue.length < self.animation.queueLimit){
self._queue.push(arguments);
(self.controls.enable && !self._clicking) && self._updateControls(args.command);
self._execAction('multiMixQueue', 1, arguments);
} else {
if(typeof self.callbacks.onMixBusy === 'function'){
self.callbacks.onMixBusy.call(self._domNode, self._state, self);
}
self._$container.trigger('mixBusy', [self._state, self]);
self._execAction('multiMixBusy', 1, arguments);
}
}
},
/**
* Insert
* @since 2.0.0
* @param {array} arguments
*/
insert: function(){
var self = this,
args = self._parseInsertArgs(arguments),
callback = (typeof args.callback === 'function') ? args.callback : null,
frag = document.createDocumentFragment(),
target = (function(){
self._refresh();
if(self._$targets.length){
return (args.index < self._$targets.length || !self._$targets.length) ?
self._$targets[args.index] :
self._$targets[self._$targets.length-1].nextElementSibling;
} else {
return self._$parent[0].children[0];
}
})();
self._execAction('insert', 0, arguments);
if(args.$object){
for(var i = 0; i < args.$object.length; i++){
var el = args.$object[i];
frag.appendChild(el);
frag.appendChild(document.createTextNode(' '));
}
self._$parent[0].insertBefore(frag, target);
}
self._execAction('insert', 1, arguments);
if(typeof args.multiMix === 'object'){
self.multiMix(args.multiMix, callback);
}
},
/**
* Prepend
* @since 2.0.0
* @param {array} arguments
*/
prepend: function(){
var self = this,
args = self._parseInsertArgs(arguments);
self.insert(0, args.$object, args.multiMix, args.callback);
},
/**
* Append
* @since 2.0.0
* @param {array} arguments
*/
append: function(){
var self = this,
args = self._parseInsertArgs(arguments);
self.insert(self._state.totalTargets, args.$object, args.multiMix, args.callback);
},
/**
* Get Option
* @since 2.0.0
* @param {string} string
* @return {mixed} value
*/
getOption: function(string){
var self = this,
getProperty = function(obj, prop){
var parts = prop.split('.'),
last = parts.pop(),
l = parts.length,
i = 1,
current = parts[0] || prop;
while((obj = obj[current]) && i < l){
current = parts[i];
i++;
}
if(obj !== undf){
return obj[last] !== undf ? obj[last] : obj;
}
};
return string ? self._execFilter('getOption', getProperty(self, string), arguments) : self;
},
/**
* Set Options
* @since 2.0.0
* @param {object} config
*/
setOptions: function(config){
var self = this;
self._execAction('setOptions', 0, arguments);
typeof config === 'object' && $.extend(true, self, config);
self._execAction('setOptions', 1, arguments);
},
/**
* Get State
* @since 2.0.0
* @return {object} state
*/
getState: function(){
var self = this;
return self._execFilter('getState', self._state, self);
},
/**
* Force Refresh
* @since 2.1.2
*/
forceRefresh: function(){
var self = this;
self._refresh(false, true);
},
/**
* Destroy
* @since 2.0.0
* @param {boolean} hideAll
*/
destroy: function(hideAll){
var self = this,
filters = $.MixItUp.prototype._bound._filter,
sorts = $.MixItUp.prototype._bound._sort;
self._execAction('destroy', 0, arguments);
self._$body
.add($(self.selectors.sort))
.add($(self.selectors.filter))
.off('.mixItUp');
for(var i = 0; i < self._$targets.length; i++){
var target = self._$targets[i];
hideAll && (target.style.display = '');
delete target.mixParent;
}
self._execAction('destroy', 1, arguments);
if(filters[self.selectors.filter] && filters[self.selectors.filter] > 1) {
filters[self.selectors.filter]--;
} else if(filters[self.selectors.filter] === 1) {
delete filters[self.selectors.filter];
}
if(sorts[self.selectors.sort] && sorts[self.selectors.sort] > 1) {
sorts[self.selectors.sort]--;
} else if(sorts[self.selectors.sort] === 1) {
delete sorts[self.selectors.sort];
}
delete $.MixItUp.prototype._instances[self._id];
}
};
/* jQuery Methods
---------------------------------------------------------------------- */
/**
* jQuery .mixItUp() method
* @since 2.0.0
* @extends $.fn
*/
$.fn.mixItUp = function(){
var args = arguments,
dataReturn = [],
eachReturn,
_instantiate = function(domNode, settings){
var instance = new $.MixItUp(),
rand = function(){
return ('00000'+(Math.random()*16777216<<0).toString(16)).substr(-6).toUpperCase();
};
instance._execAction('_instantiate', 0, arguments);
domNode.id = !domNode.id ? 'MixItUp'+rand() : domNode.id;
if(!instance._instances[domNode.id]){
instance._instances[domNode.id] = instance;
instance._init(domNode, settings);
}
instance._execAction('_instantiate', 1, arguments);
};
eachReturn = this.each(function(){
if(args && typeof args[0] === 'string'){
var instance = $.MixItUp.prototype._instances[this.id];
if(args[0] === 'isLoaded'){
dataReturn.push(instance ? true : false);
} else {
var data = instance[args[0]](args[1], args[2], args[3]);
if(data !== undf)dataReturn.push(data);
}
} else {
_instantiate(this, args[0]);
}
});
if(dataReturn.length){
return dataReturn.length > 1 ? dataReturn : dataReturn[0];
} else {
return eachReturn;
}
};
/**
* jQuery .removeStyle() method
* @since 2.0.0
* @extends $.fn
*/
$.fn.removeStyle = function(style, prefix){
prefix = prefix ? prefix : '';
return this.each(function(){
var el = this,
styles = style.split(' ');
for(var i = 0; i < styles.length; i++){
for(var j = 0; j < 4; j++){
switch (j) {
case 0:
var prop = styles[i];
break;
case 1:
var prop = $.MixItUp.prototype._helpers._camelCase(prop);
break;
case 2:
var prop = prefix+styles[i];
break;
case 3:
var prop = $.MixItUp.prototype._helpers._camelCase(prefix+styles[i]);
}
if(
el.style[prop] !== undf &&
typeof el.style[prop] !== 'unknown' &&
el.style[prop].length > 0
){
el.style[prop] = '';
}
if(!prefix && j === 1)break;
}
}
if(el.attributes && el.attributes.style && el.attributes.style !== undf && el.attributes.style.value === ''){
el.attributes.removeNamedItem('style');
}
});
};
})(jQuery);
/*-------------------------------------------------------------
11. Treeview
---------------------------------------------------------------*/
/*
* Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree
*
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
*
* Copyright Jörn Zaefferer
* Released under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*/
;(function($) {
// TODO rewrite as a widget, removing all the extra plugins
$.extend($.fn, {
swapClass: function(c1, c2) {
var c1Elements = this.filter('.' + c1);
this.filter('.' + c2).removeClass(c2).addClass(c1);
c1Elements.removeClass(c1).addClass(c2);
return this;
},
replaceClass: function(c1, c2) {
return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
},
hoverClass: function(className) {
className = className || "hover";
return this.hover(function() {
$(this).addClass(className);
}, function() {
$(this).removeClass(className);
});
},
heightToggle: function(animated, callback) {
animated ?
this.animate({ height: "toggle" }, animated, callback) :
this.each(function(){
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
if(callback)
callback.apply(this, arguments);
});
},
heightHide: function(animated, callback) {
if (animated) {
this.animate({ height: "hide" }, animated, callback);
} else {
this.hide();
if (callback)
this.each(callback);
}
},
prepareBranches: function(settings) {
if (!settings.prerendered) {
// mark last tree items
this.filter(":last-child:not(ul)").addClass(CLASSES.last);
// collapse whole tree, or only those marked as closed, anyway except those marked as open
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
}
// return all items with sublists
return this.filter(":has(>ul)");
},
applyClasses: function(settings, toggler) {
// TODO use event delegation
this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) {
// don't handle click events on children, eg. checkboxes
if ( this == event.target )
toggler.apply($(this).next());
}).add( $("a", this) ).hoverClass();
if (!settings.prerendered) {
// handle closed ones first
this.filter(":has(>ul:hidden)")
.addClass(CLASSES.expandable)
.replaceClass(CLASSES.last, CLASSES.lastExpandable);
// handle open ones
this.not(":has(>ul:hidden)")
.addClass(CLASSES.collapsable)
.replaceClass(CLASSES.last, CLASSES.lastCollapsable);
// create hitarea if not present
var hitarea = this.find("div." + CLASSES.hitarea);
if (!hitarea.length)
hitarea = this.prepend("").find("div." + CLASSES.hitarea);
hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {
var classes = "";
$.each($(this).parent().attr("class").split(" "), function() {
classes += this + "-hitarea ";
});
$(this).addClass( classes );
})
}
// apply event to hitarea
this.find("div." + CLASSES.hitarea).click( toggler );
},
treeview: function(settings) {
settings = $.extend({
cookieId: "treeview"
}, settings);
if ( settings.toggle ) {
var callback = settings.toggle;
settings.toggle = function() {
return callback.apply($(this).parent()[0], arguments);
};
}
// factory for treecontroller
function treeController(tree, control) {
// factory for click handlers
function handler(filter) {
return function() {
// reuse toggle event handler, applying the elements to toggle
// start searching for all hitareas
toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
// for plain toggle, no filter is provided, otherwise we need to check the parent element
return filter ? $(this).parent("." + filter).length : true;
}) );
return false;
};
}
// click on first element to collapse tree
$("a:eq(0)", control).click( handler(CLASSES.collapsable) );
// click on second to expand tree
$("a:eq(1)", control).click( handler(CLASSES.expandable) );
// click on third to toggle tree
$("a:eq(2)", control).click( handler() );
}
// handle toggle event
function toggler() {
$(this)
.parent()
// swap classes for hitarea
.find(">.hitarea")
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
.end()
// swap classes for parent li
.swapClass( CLASSES.collapsable, CLASSES.expandable )
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
// find child lists
.find( ">ul" )
// toggle them
.heightToggle( settings.animated, settings.toggle );
if ( settings.unique ) {
$(this).parent()
.siblings()
// swap classes for hitarea
.find(">.hitarea")
.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
.end()
.replaceClass( CLASSES.collapsable, CLASSES.expandable )
.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
.find( ">ul" )
.heightHide( settings.animated, settings.toggle );
}
}
this.data("toggler", toggler);
function serialize() {
function binary(arg) {
return arg ? 1 : 0;
}
var data = [];
branches.each(function(i, e) {
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
});
$.cookie(settings.cookieId, data.join(""), settings.cookieOptions );
}
function deserialize() {
var stored = $.cookie(settings.cookieId);
if ( stored ) {
var data = stored.split("");
branches.each(function(i, e) {
$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
});
}
}
// add treeview class to activate styles
this.addClass("treeview");
// prepare branches and find all tree items with child lists
var branches = this.find("li").prepareBranches(settings);
switch(settings.persist) {
case "cookie":
var toggleCallback = settings.toggle;
settings.toggle = function() {
serialize();
if (toggleCallback) {
toggleCallback.apply(this, arguments);
}
};
deserialize();
break;
case "location":
var current = this.find("a").filter(function() {
return location.href.toLowerCase().indexOf(this.href.toLowerCase()) == 0;
});
if ( current.length ) {
// TODO update the open/closed classes
var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
if (settings.prerendered) {
// if prerendered is on, replicate the basic class swapping
items.filter("li")
.swapClass( CLASSES.collapsable, CLASSES.expandable )
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
.find(">.hitarea")
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
}
}
break;
}
branches.applyClasses(settings, toggler);
// if control option is set, create the treecontroller and show it
if ( settings.control ) {
treeController(this, settings.control);
$(settings.control).show();
}
return this;
}
});
// classes used by the plugin
// need to be styled via external stylesheet, see first example
$.treeview = {};
var CLASSES = ($.treeview.classes = {
open: "open",
closed: "closed",
expandable: "expandable",
expandableHitarea: "expandable-hitarea",
lastExpandableHitarea: "lastExpandable-hitarea",
collapsable: "collapsable",
collapsableHitarea: "collapsable-hitarea",
lastCollapsableHitarea: "lastCollapsable-hitarea",
lastCollapsable: "lastCollapsable",
lastExpandable: "lastExpandable",
last: "last",
hitarea: "hitarea"
});
})(jQuery);
/*-------------------------------------------------------------
12. Treeview
---------------------------------------------------------------*/
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0The requested content cannot be loaded.
Please try again later.