File: /home/adventp/www/wp-content/themes/brooklyn/js/drawsvg/jquery.drawsvg.js
/*!
* jQuery DrawSVG v1.1.0 (Oct 05 2016) - http://lcdsantos.github.io/jquery-drawsvg/
*
* Copyright (c) 2016 Leonardo Santos; MIT License
*
*/
(function(factory) {
/* global define */
/* istanbul ignore next */
if ( typeof define === 'function' && define.amd ) {
define(['jquery'], factory);
} else if ( typeof module === 'object' && module.exports ) {
// Node/CommonJS
module.exports = function( root, jQuery ) {
if ( jQuery === undefined ) {
if ( typeof window !== 'undefined' ) {
jQuery = require('jquery');
} else {
jQuery = require('jquery')(root);
}
}
factory(jQuery);
return jQuery;
};
} else {
// Browser globals
factory(jQuery);
}
}(function($) {
'use strict';
var pluginName = 'drawsvg',
defaults = {
duration: 1000,
stagger: 200,
easing: 'swing',
reverse: false,
callback: $.noop
},
DrawSvg = (function() {
var fn = function fn(elm, options) {
var _this = this,
opts = $.extend(defaults, options);
_this.$elm = $(elm);
if ( !_this.$elm.is('svg') )
return;
_this.options = opts;
_this.$paths = _this.$elm.find('path');
_this.totalDuration = opts.duration + (opts.stagger * _this.$paths.length);
_this.duration = opts.duration / _this.totalDuration;
_this.$paths.each(function(index, elm) {
var pathLength = elm.getTotalLength();
elm.pathLen = pathLength;
elm.delay = (opts.stagger * index) / _this.totalDuration;
elm.style.strokeDasharray = [pathLength, pathLength].join(' ');
elm.style.strokeDashoffset = pathLength;
});
_this.$elm.attr('class', function(index, classNames) {
return [classNames, pluginName + '-initialized'].join(' ');
});
};
fn.prototype.getVal = function(p, easing) {
return 1 - $.easing[easing](p, p, 0, 1, 1);
};
fn.prototype.progress = function progress(prog) {
var _this = this,
opts = _this.options,
duration = _this.duration;
_this.$paths.each(function(index, elm) {
var elmStyle = elm.style;
if ( prog === 1 ) {
elmStyle.strokeDashoffset = 0;
} else if ( prog === 0 ) {
elmStyle.strokeDashoffset = elm.pathLen + 'px';
} else if ( prog >= elm.delay && prog <= duration + elm.delay ) {
var p = ((prog - elm.delay) / duration);
elmStyle.strokeDashoffset = ((_this.getVal(p, opts.easing) * elm.pathLen) * (opts.reverse ? -1 : 1)) + 'px';
}
});
};
fn.prototype.animate = function animate() {
var _this = this;
_this.$elm.attr('class', function(index, classNames) {
return [classNames, pluginName + '-animating'].join(' ');
});
$({ len: 0 }).animate({
len: 1
}, {
easing: 'linear',
duration: _this.totalDuration,
step: function(now, fx) {
_this.progress.call(_this, now / fx.end);
},
complete: function() {
_this.options.callback.call(this);
_this.$elm.attr('class', function(index, classNames) {
return classNames.replace(pluginName + '-animating', '');
});
}
});
};
return fn;
})();
// A really lightweight plugin wrapper around the constructor,
// preventing against multiple instantiations
$.fn[pluginName] = function(method, args) {
return this.each(function() {
var data = $.data(this, pluginName);
( data && ''+method === method && data[method] ) ?
data[method](args) :
$.data(this, pluginName, new DrawSvg(this, method));
});
};
}));