This commit is contained in:
thijs 2026-05-08 10:46:13 +02:00
commit ac9945b918
95 changed files with 41056 additions and 0 deletions

View file

@ -0,0 +1,210 @@
// Main Particle Theme JS
(function ($) {
"use strict";
// Navbar
// browser window scroll (in pixels) after which the "menu" link is shown
var offset = 300;
var navigationContainer = $('#st-nav'),
mainNavigation = navigationContainer.find('#st-main-nav ul');
//hide or show the "menu" link
checkMenu();
$(window).scroll(function () {
checkMenu();
});
//open or close the menu clicking on the bottom "menu" link
$('.st-nav-trigger').on('click', function () {
$(this).toggleClass('menu-is-open');
//we need to remove the transitionEnd event handler (we add it when scolling up with the menu open)
mainNavigation.off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend').toggleClass('is-visible');
});
function checkMenu() {
if ($(window).scrollTop() > offset && !navigationContainer.hasClass('is-fixed')) {
navigationContainer.addClass('is-fixed').find('.st-nav-trigger').one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function () {
mainNavigation.addClass('has-transitions');
});
} else if ($(window).scrollTop() <= offset) {
//check if the menu is open when scrolling up
if (mainNavigation.hasClass('is-visible') && !$('html').hasClass('no-csstransitions')) {
//close the menu with animation
mainNavigation.addClass('is-hidden').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
//wait for the menu to be closed and do the rest
mainNavigation.removeClass('is-visible is-hidden has-transitions');
navigationContainer.removeClass('is-fixed');
$('.st-nav-trigger').removeClass('menu-is-open');
});
//check if the menu is open when scrolling up - fallback if transitions are not supported
} else if (mainNavigation.hasClass('is-visible') && $('html').hasClass('no-csstransitions')) {
mainNavigation.removeClass('is-visible has-transitions');
navigationContainer.removeClass('is-fixed');
$('.st-nav-trigger').removeClass('menu-is-open');
//scrolling up with menu closed
} else {
navigationContainer.removeClass('is-fixed');
mainNavigation.removeClass('has-transitions');
}
}
}
// WOW Init
new WOW().init();
// Scrolling Navigation
$(function () {
$.extend($.easing,
{
easeInOutExpo: function (x, t, b, c, d) {
t /= d / 2;
if (t < 1) {
return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
}
t--;
return c / 2 * (-Math.pow(2, -10 * t) + 2) + b;
}
}
);
$('a.page-scroll').bind('click', function (event) {
var $anchor = $(this);
$('html, body').stop().animate({
scrollTop: $($anchor.attr('href')).offset().top
}, 1600, 'easeInOutExpo');
event.preventDefault();
});
});
// Counter Up Init
$('.counter').counterUp({
delay: 20,
time: 2200
});
// Particles
particlesJS("particles-js", {
"particles": {
"number": {
"value": 90,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "FFFFFF"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#FFFFFF"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.15,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 5,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "FFFFFF",
"opacity": 0.1,
"width": 1
},
"move": {
"enable": true,
"speed": 1,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "grab"
},
"onclick": {
"enable": true,
"mode": "bubble"
},
"resize": true
},
"modes": {
"grab": {
"distance": 350,
"line_linked": {
"opacity": 0.65
}
},
"bubble": {
"distance": 350,
"size": 12,
"duration": 1.542946703372556,
"opacity": 0.9,
"speed": 3
},
"repulse": {
"distance": 350,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
});
// Typed JS
$(".skilltechtypetext").typed({
strings: sentences,
contentType: 'text', // 'html' or 'text'
typeSpeed: 30,
loop: true,
backDelay: 1200,
showCursor: true,
cursorChar: "|"
});
})(jQuery);

View file

@ -0,0 +1,185 @@
// Portfoilo Item JS
(function ($) {
"use strict";
// Navbar
// browser window scroll (in pixels) after which the "menu" link is shown
var offset = 300;
var navigationContainer = $('#st-nav'),
mainNavigation = navigationContainer.find('#st-main-nav ul');
//hide or show the "menu" link
checkMenu();
$(window).scroll(function () {
checkMenu();
});
//open or close the menu clicking on the bottom "menu" link
$('.st-nav-trigger').on('click', function () {
$(this).toggleClass('menu-is-open');
//we need to remove the transitionEnd event handler (we add it when scolling up with the menu open)
mainNavigation.off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend').toggleClass('is-visible');
});
function checkMenu() {
if ($(window).scrollTop() > offset && !navigationContainer.hasClass('is-fixed')) {
navigationContainer.addClass('is-fixed').find('.st-nav-trigger').one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function () {
mainNavigation.addClass('has-transitions');
});
} else if ($(window).scrollTop() <= offset) {
//check if the menu is open when scrolling up
if (mainNavigation.hasClass('is-visible') && !$('html').hasClass('no-csstransitions')) {
//close the menu with animation
mainNavigation.addClass('is-hidden').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
//wait for the menu to be closed and do the rest
mainNavigation.removeClass('is-visible is-hidden has-transitions');
navigationContainer.removeClass('is-fixed');
$('.st-nav-trigger').removeClass('menu-is-open');
});
//check if the menu is open when scrolling up - fallback if transitions are not supported
} else if (mainNavigation.hasClass('is-visible') && $('html').hasClass('no-csstransitions')) {
mainNavigation.removeClass('is-visible has-transitions');
navigationContainer.removeClass('is-fixed');
$('.st-nav-trigger').removeClass('menu-is-open');
//scrolling up with menu closed
} else {
navigationContainer.removeClass('is-fixed');
mainNavigation.removeClass('has-transitions');
}
}
}
// WOW Init
new WOW().init();
// Typed JS
$(".skilltechtypetext").typed({
strings: sentences,
contentType: 'html',
typeSpeed: 30,
loop: false,
backDelay: 1200,
showCursor: true,
cursorChar: "|"
});
// Particles JS
particlesJS("particles-js", {
"particles": {
"number": {
"value": 150,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "FFFFFF"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#FFFFFF"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.3,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "FFFFFF",
"opacity": 0.3,
"width": 1
},
"move": {
"enable": true,
"speed": 4,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "grab"
},
"onclick": {
"enable": true,
"mode": "repulse"
},
"resize": true
},
"modes": {
"grab": {
"distance": 231,
"line_linked": {
"opacity": 0.6
}
},
"bubble": {
"distance": 231,
"size": 12,
"duration": 1.542946703372556,
"opacity": 0.9,
"speed": 3
},
"repulse": {
"distance": 231,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
});
// Scroll Down
$('#project-info').on('click', function () {
$('html,body').animate({scrollTop: $('#portfolio-details').offset().top}, 1000, 'swing');
});
})(jQuery);

View file

@ -0,0 +1,74 @@
// Service Item JS
(function ($) {
"use strict";
// Navbar
// browser window scroll (in pixels) after which the "menu" link is shown
var offset = 300;
var navigationContainer = $('#st-nav'),
mainNavigation = navigationContainer.find('#st-main-nav ul');
//hide or show the "menu" link
checkMenu();
$(window).scroll(function () {
checkMenu();
});
//open or close the menu clicking on the bottom "menu" link
$('.st-nav-trigger').on('click', function () {
$(this).toggleClass('menu-is-open');
//we need to remove the transitionEnd event handler (we add it when scolling up with the menu open)
mainNavigation.off('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend').toggleClass('is-visible');
});
function checkMenu() {
if ($(window).scrollTop() > offset && !navigationContainer.hasClass('is-fixed')) {
navigationContainer.addClass('is-fixed').find('.st-nav-trigger').one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function () {
mainNavigation.addClass('has-transitions');
});
} else if ($(window).scrollTop() <= offset) {
//check if the menu is open when scrolling up
if (mainNavigation.hasClass('is-visible') && !$('html').hasClass('no-csstransitions')) {
//close the menu with animation
mainNavigation.addClass('is-hidden').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
//wait for the menu to be closed and do the rest
mainNavigation.removeClass('is-visible is-hidden has-transitions');
navigationContainer.removeClass('is-fixed');
$('.st-nav-trigger').removeClass('menu-is-open');
});
//check if the menu is open when scrolling up - fallback if transitions are not supported
} else if (mainNavigation.hasClass('is-visible') && $('html').hasClass('no-csstransitions')) {
mainNavigation.removeClass('is-visible has-transitions');
navigationContainer.removeClass('is-fixed');
$('.st-nav-trigger').removeClass('menu-is-open');
//scrolling up with menu closed
} else {
navigationContainer.removeClass('is-fixed');
mainNavigation.removeClass('has-transitions');
}
}
}
// WOW Init
new WOW().init();
// Typed JS
$(".skilltechtypetext").typed({
strings: sentences,
contentType: 'html',
typeSpeed: 30,
loop: false,
backDelay: 1200,
showCursor: true,
cursorChar: "|"
});
// Scroll Down
$('.arrow-down').on('click', function () {
$('html,body').animate({scrollTop: $('#service-details').offset().top}, 1000, 'swing');
});
})(jQuery);

2377
assets/js/libraries/bootstrap.js vendored Normal file

File diff suppressed because it is too large Load diff

9814
assets/js/libraries/jquery-2.2.4.js vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
/*!
* jquery.counterup.js 1.0
*
* Copyright 2013, Benjamin Intal http://gambit.ph @bfintal
* Released under the GPL v2 License
*
* Date: Nov 26, 2013
*/
(function( $ ){
"use strict";
$.fn.counterUp = function( options ) {
// Defaults
var settings = $.extend({
'time': 400,
'delay': 10
}, options);
return this.each(function(){
// Store the object
var $this = $(this);
var $settings = settings;
var counterUpper = function() {
var nums = [];
var divisions = $settings.time / $settings.delay;
var num = $this.text();
var isComma = /[0-9]+,[0-9]+/.test(num);
num = num.replace(/,/g, '');
var isInt = /^[0-9]+$/.test(num);
var isFloat = /^[0-9]+\.[0-9]+$/.test(num);
var decimalPlaces = isFloat ? (num.split('.')[1] || []).length : 0;
// Generate list of incremental numbers to display
for (var i = divisions; i >= 1; i--) {
// Preserve as int if input was int
var newNum = parseInt(num / divisions * i);
// Preserve float if input was float
if (isFloat) {
newNum = parseFloat(num / divisions * i).toFixed(decimalPlaces);
}
// Preserve commas if input had commas
if (isComma) {
while (/(\d+)(\d{3})/.test(newNum.toString())) {
newNum = newNum.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
}
}
nums.unshift(newNum);
}
$this.data('counterup-nums', nums);
$this.text('0');
// Updates the number until we're done
var f = function() {
$this.text($this.data('counterup-nums').shift());
if ($this.data('counterup-nums').length) {
setTimeout($this.data('counterup-func'), $settings.delay);
} else {
delete $this.data('counterup-nums');
$this.data('counterup-nums', null);
$this.data('counterup-func', null);
}
};
$this.data('counterup-func', f);
// Start the count up
setTimeout($this.data('counterup-func'), $settings.delay);
};
// Perform counts when the element gets into view
$this.waypoint(counterUpper, { offset: '100%', triggerOnce: true });
});
};
})( jQuery );

View file

@ -0,0 +1,605 @@
/* -----------------------------------------------
/* Author : Vincent Garreau - vincentgarreau.com
/* MIT license: http://opensource.org/licenses/MIT
/* Demo / Generator : vincentgarreau.com/particles.js
/* GitHub : github.com/VincentGarreau/particles.js
/* How to use? : Check the GitHub README
/* v2.0.0
/* ----------------------------------------------- */
function hexToRgb(e) {
var a = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
e = e.replace(a, function(e, a, t, i) {
return a + a + t + t + i + i
});
var t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);
return t ? {
r: parseInt(t[1], 16),
g: parseInt(t[2], 16),
b: parseInt(t[3], 16)
} : null
}
function clamp(e, a, t) {
return Math.min(Math.max(e, a), t)
}
function isInArray(e, a) {
return a.indexOf(e) > -1
}
var pJS = function(e, a) {
var t = document.querySelector("#" + e + " > .particles-js-canvas-el");
this.pJS = {
canvas: {
el: t,
w: t.offsetWidth,
h: t.offsetHeight
},
particles: {
number: {
value: 400,
density: {
enable: !0,
value_area: 800
}
},
color: {
value: "#fff"
},
shape: {
type: "circle",
stroke: {
width: 0,
color: "#ff0000"
},
polygon: {
nb_sides: 5
},
image: {
src: "",
width: 100,
height: 100
}
},
opacity: {
value: 1,
random: !1,
anim: {
enable: !1,
speed: 2,
opacity_min: 0,
sync: !1
}
},
size: {
value: 20,
random: !1,
anim: {
enable: !1,
speed: 20,
size_min: 0,
sync: !1
}
},
line_linked: {
enable: !0,
distance: 100,
color: "#fff",
opacity: 1,
width: 1
},
move: {
enable: !0,
speed: 2,
direction: "none",
random: !1,
straight: !1,
out_mode: "out",
bounce: !1,
attract: {
enable: !1,
rotateX: 3e3,
rotateY: 3e3
}
},
array: []
},
interactivity: {
detect_on: "canvas",
events: {
onhover: {
enable: !0,
mode: "grab"
},
onclick: {
enable: !0,
mode: "push"
},
resize: !0
},
modes: {
grab: {
distance: 100,
line_linked: {
opacity: 1
}
},
bubble: {
distance: 200,
size: 80,
duration: .4
},
repulse: {
distance: 200,
duration: .4
},
push: {
particles_nb: 4
},
remove: {
particles_nb: 2
}
},
mouse: {}
},
retina_detect: !1,
fn: {
interact: {},
modes: {},
vendors: {}
},
tmp: {}
};
var i = this.pJS;
a && Object.deepExtend(i, a), i.tmp.obj = {
size_value: i.particles.size.value,
size_anim_speed: i.particles.size.anim.speed,
move_speed: i.particles.move.speed,
line_linked_distance: i.particles.line_linked.distance,
line_linked_width: i.particles.line_linked.width,
mode_grab_distance: i.interactivity.modes.grab.distance,
mode_bubble_distance: i.interactivity.modes.bubble.distance,
mode_bubble_size: i.interactivity.modes.bubble.size,
mode_repulse_distance: i.interactivity.modes.repulse.distance
}, i.fn.retinaInit = function() {
i.retina_detect && window.devicePixelRatio > 1 ? (i.canvas.pxratio = window.devicePixelRatio, i.tmp.retina = !0) : (i.canvas.pxratio = 1, i.tmp.retina = !1), i.canvas.w = i.canvas.el.offsetWidth * i.canvas.pxratio, i.canvas.h = i.canvas.el.offsetHeight * i.canvas.pxratio, i.particles.size.value = i.tmp.obj.size_value * i.canvas.pxratio, i.particles.size.anim.speed = i.tmp.obj.size_anim_speed * i.canvas.pxratio, i.particles.move.speed = i.tmp.obj.move_speed * i.canvas.pxratio, i.particles.line_linked.distance = i.tmp.obj.line_linked_distance * i.canvas.pxratio, i.interactivity.modes.grab.distance = i.tmp.obj.mode_grab_distance * i.canvas.pxratio, i.interactivity.modes.bubble.distance = i.tmp.obj.mode_bubble_distance * i.canvas.pxratio, i.particles.line_linked.width = i.tmp.obj.line_linked_width * i.canvas.pxratio, i.interactivity.modes.bubble.size = i.tmp.obj.mode_bubble_size * i.canvas.pxratio, i.interactivity.modes.repulse.distance = i.tmp.obj.mode_repulse_distance * i.canvas.pxratio
}, i.fn.canvasInit = function() {
i.canvas.ctx = i.canvas.el.getContext("2d")
}, i.fn.canvasSize = function() {
i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i && i.interactivity.events.resize && window.addEventListener("resize", function() {
i.canvas.w = i.canvas.el.offsetWidth, i.canvas.h = i.canvas.el.offsetHeight, i.tmp.retina && (i.canvas.w *= i.canvas.pxratio, i.canvas.h *= i.canvas.pxratio), i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i.particles.move.enable || (i.fn.particlesEmpty(), i.fn.particlesCreate(), i.fn.particlesDraw(), i.fn.vendors.densityAutoParticles()), i.fn.vendors.densityAutoParticles()
})
}, i.fn.canvasPaint = function() {
i.canvas.ctx.fillRect(0, 0, i.canvas.w, i.canvas.h)
}, i.fn.canvasClear = function() {
i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h)
}, i.fn.particle = function(e, a, t) {
if (this.radius = (i.particles.size.random ? Math.random() : 1) * i.particles.size.value, i.particles.size.anim.enable && (this.size_status = !1, this.vs = i.particles.size.anim.speed / 100, i.particles.size.anim.sync || (this.vs = this.vs * Math.random())), this.x = t ? t.x : Math.random() * i.canvas.w, this.y = t ? t.y : Math.random() * i.canvas.h, this.x > i.canvas.w - 2 * this.radius ? this.x = this.x - this.radius : this.x < 2 * this.radius && (this.x = this.x + this.radius), this.y > i.canvas.h - 2 * this.radius ? this.y = this.y - this.radius : this.y < 2 * this.radius && (this.y = this.y + this.radius), i.particles.move.bounce && i.fn.vendors.checkOverlap(this, t), this.color = {}, "object" == typeof e.value)
if (e.value instanceof Array) {
var s = e.value[Math.floor(Math.random() * i.particles.color.value.length)];
this.color.rgb = hexToRgb(s)
} else void 0 != e.value.r && void 0 != e.value.g && void 0 != e.value.b && (this.color.rgb = {
r: e.value.r,
g: e.value.g,
b: e.value.b
}), void 0 != e.value.h && void 0 != e.value.s && void 0 != e.value.l && (this.color.hsl = {
h: e.value.h,
s: e.value.s,
l: e.value.l
});
else "random" == e.value ? this.color.rgb = {
r: Math.floor(256 * Math.random()) + 0,
g: Math.floor(256 * Math.random()) + 0,
b: Math.floor(256 * Math.random()) + 0
} : "string" == typeof e.value && (this.color = e, this.color.rgb = hexToRgb(this.color.value));
this.opacity = (i.particles.opacity.random ? Math.random() : 1) * i.particles.opacity.value, i.particles.opacity.anim.enable && (this.opacity_status = !1, this.vo = i.particles.opacity.anim.speed / 100, i.particles.opacity.anim.sync || (this.vo = this.vo * Math.random()));
var n = {};
switch (i.particles.move.direction) {
case "top":
n = {
x: 0,
y: -1
};
break;
case "top-right":
n = {
x: .5,
y: -.5
};
break;
case "right":
n = {
x: 1,
y: -0
};
break;
case "bottom-right":
n = {
x: .5,
y: .5
};
break;
case "bottom":
n = {
x: 0,
y: 1
};
break;
case "bottom-left":
n = {
x: -.5,
y: 1
};
break;
case "left":
n = {
x: -1,
y: 0
};
break;
case "top-left":
n = {
x: -.5,
y: -.5
};
break;
default:
n = {
x: 0,
y: 0
}
}
i.particles.move.straight ? (this.vx = n.x, this.vy = n.y, i.particles.move.random && (this.vx = this.vx * Math.random(), this.vy = this.vy * Math.random())) : (this.vx = n.x + Math.random() - .5, this.vy = n.y + Math.random() - .5), this.vx_i = this.vx, this.vy_i = this.vy;
var r = i.particles.shape.type;
if ("object" == typeof r) {
if (r instanceof Array) {
var c = r[Math.floor(Math.random() * r.length)];
this.shape = c
}
} else this.shape = r;
if ("image" == this.shape) {
var o = i.particles.shape;
this.img = {
src: o.image.src,
ratio: o.image.width / o.image.height
}, this.img.ratio || (this.img.ratio = 1), "svg" == i.tmp.img_type && void 0 != i.tmp.source_svg && (i.fn.vendors.createSvgImg(this), i.tmp.pushing && (this.img.loaded = !1))
}
}, i.fn.particle.prototype.draw = function() {
function e() {
i.canvas.ctx.drawImage(r, a.x - t, a.y - t, 2 * t, 2 * t / a.img.ratio)
}
var a = this;
if (void 0 != a.radius_bubble) var t = a.radius_bubble;
else var t = a.radius;
if (void 0 != a.opacity_bubble) var s = a.opacity_bubble;
else var s = a.opacity;
if (a.color.rgb) var n = "rgba(" + a.color.rgb.r + "," + a.color.rgb.g + "," + a.color.rgb.b + "," + s + ")";
else var n = "hsla(" + a.color.hsl.h + "," + a.color.hsl.s + "%," + a.color.hsl.l + "%," + s + ")";
switch (i.canvas.ctx.fillStyle = n, i.canvas.ctx.beginPath(), a.shape) {
case "circle":
i.canvas.ctx.arc(a.x, a.y, t, 0, 2 * Math.PI, !1);
break;
case "edge":
i.canvas.ctx.rect(a.x - t, a.y - t, 2 * t, 2 * t);
break;
case "triangle":
i.fn.vendors.drawShape(i.canvas.ctx, a.x - t, a.y + t / 1.66, 2 * t, 3, 2);
break;
case "polygon":
i.fn.vendors.drawShape(i.canvas.ctx, a.x - t / (i.particles.shape.polygon.nb_sides / 3.5), a.y - t / .76, 2.66 * t / (i.particles.shape.polygon.nb_sides / 3), i.particles.shape.polygon.nb_sides, 1);
break;
case "star":
i.fn.vendors.drawShape(i.canvas.ctx, a.x - 2 * t / (i.particles.shape.polygon.nb_sides / 4), a.y - t / 1.52, 2 * t * 2.66 / (i.particles.shape.polygon.nb_sides / 3), i.particles.shape.polygon.nb_sides, 2);
break;
case "image":
if ("svg" == i.tmp.img_type) var r = a.img.obj;
else var r = i.tmp.img_obj;
r && e()
}
i.canvas.ctx.closePath(), i.particles.shape.stroke.width > 0 && (i.canvas.ctx.strokeStyle = i.particles.shape.stroke.color, i.canvas.ctx.lineWidth = i.particles.shape.stroke.width, i.canvas.ctx.stroke()), i.canvas.ctx.fill()
}, i.fn.particlesCreate = function() {
for (var e = 0; e < i.particles.number.value; e++) i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value))
}, i.fn.particlesUpdate = function() {
for (var e = 0; e < i.particles.array.length; e++) {
var a = i.particles.array[e];
if (i.particles.move.enable) {
var t = i.particles.move.speed / 2;
a.x += a.vx * t, a.y += a.vy * t
}
if (i.particles.opacity.anim.enable && (1 == a.opacity_status ? (a.opacity >= i.particles.opacity.value && (a.opacity_status = !1), a.opacity += a.vo) : (a.opacity <= i.particles.opacity.anim.opacity_min && (a.opacity_status = !0), a.opacity -= a.vo), a.opacity < 0 && (a.opacity = 0)), i.particles.size.anim.enable && (1 == a.size_status ? (a.radius >= i.particles.size.value && (a.size_status = !1), a.radius += a.vs) : (a.radius <= i.particles.size.anim.size_min && (a.size_status = !0), a.radius -= a.vs), a.radius < 0 && (a.radius = 0)), "bounce" == i.particles.move.out_mode) var s = {
x_left: a.radius,
x_right: i.canvas.w,
y_top: a.radius,
y_bottom: i.canvas.h
};
else var s = {
x_left: -a.radius,
x_right: i.canvas.w + a.radius,
y_top: -a.radius,
y_bottom: i.canvas.h + a.radius
};
switch (a.x - a.radius > i.canvas.w ? (a.x = s.x_left, a.y = Math.random() * i.canvas.h) : a.x + a.radius < 0 && (a.x = s.x_right, a.y = Math.random() * i.canvas.h), a.y - a.radius > i.canvas.h ? (a.y = s.y_top, a.x = Math.random() * i.canvas.w) : a.y + a.radius < 0 && (a.y = s.y_bottom, a.x = Math.random() * i.canvas.w), i.particles.move.out_mode) {
case "bounce":
a.x + a.radius > i.canvas.w ? a.vx = -a.vx : a.x - a.radius < 0 && (a.vx = -a.vx), a.y + a.radius > i.canvas.h ? a.vy = -a.vy : a.y - a.radius < 0 && (a.vy = -a.vy)
}
if (isInArray("grab", i.interactivity.events.onhover.mode) && i.fn.modes.grabParticle(a), (isInArray("bubble", i.interactivity.events.onhover.mode) || isInArray("bubble", i.interactivity.events.onclick.mode)) && i.fn.modes.bubbleParticle(a), (isInArray("repulse", i.interactivity.events.onhover.mode) || isInArray("repulse", i.interactivity.events.onclick.mode)) && i.fn.modes.repulseParticle(a), i.particles.line_linked.enable || i.particles.move.attract.enable)
for (var n = e + 1; n < i.particles.array.length; n++) {
var r = i.particles.array[n];
i.particles.line_linked.enable && i.fn.interact.linkParticles(a, r), i.particles.move.attract.enable && i.fn.interact.attractParticles(a, r), i.particles.move.bounce && i.fn.interact.bounceParticles(a, r)
}
}
}, i.fn.particlesDraw = function() {
i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h), i.fn.particlesUpdate();
for (var e = 0; e < i.particles.array.length; e++) {
var a = i.particles.array[e];
a.draw()
}
}, i.fn.particlesEmpty = function() {
i.particles.array = []
}, i.fn.particlesRefresh = function() {
cancelRequestAnimFrame(i.fn.checkAnimFrame), cancelRequestAnimFrame(i.fn.drawAnimFrame), i.tmp.source_svg = void 0, i.tmp.img_obj = void 0, i.tmp.count_svg = 0, i.fn.particlesEmpty(), i.fn.canvasClear(), i.fn.vendors.start()
}, i.fn.interact.linkParticles = function(e, a) {
var t = e.x - a.x,
s = e.y - a.y,
n = Math.sqrt(t * t + s * s);
if (n <= i.particles.line_linked.distance) {
var r = i.particles.line_linked.opacity - n / (1 / i.particles.line_linked.opacity) / i.particles.line_linked.distance;
if (r > 0) {
var c = i.particles.line_linked.color_rgb_line;
i.canvas.ctx.strokeStyle = "rgba(" + c.r + "," + c.g + "," + c.b + "," + r + ")", i.canvas.ctx.lineWidth = i.particles.line_linked.width, i.canvas.ctx.beginPath(), i.canvas.ctx.moveTo(e.x, e.y), i.canvas.ctx.lineTo(a.x, a.y), i.canvas.ctx.stroke(), i.canvas.ctx.closePath()
}
}
}, i.fn.interact.attractParticles = function(e, a) {
var t = e.x - a.x,
s = e.y - a.y,
n = Math.sqrt(t * t + s * s);
if (n <= i.particles.line_linked.distance) {
var r = t / (1e3 * i.particles.move.attract.rotateX),
c = s / (1e3 * i.particles.move.attract.rotateY);
e.vx -= r, e.vy -= c, a.vx += r, a.vy += c
}
}, i.fn.interact.bounceParticles = function(e, a) {
var t = e.x - a.x,
i = e.y - a.y,
s = Math.sqrt(t * t + i * i),
n = e.radius + a.radius;
n >= s && (e.vx = -e.vx, e.vy = -e.vy, a.vx = -a.vx, a.vy = -a.vy)
}, i.fn.modes.pushParticles = function(e, a) {
i.tmp.pushing = !0;
for (var t = 0; e > t; t++) i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value, {
x: a ? a.pos_x : Math.random() * i.canvas.w,
y: a ? a.pos_y : Math.random() * i.canvas.h
})), t == e - 1 && (i.particles.move.enable || i.fn.particlesDraw(), i.tmp.pushing = !1)
}, i.fn.modes.removeParticles = function(e) {
i.particles.array.splice(0, e), i.particles.move.enable || i.fn.particlesDraw()
}, i.fn.modes.bubbleParticle = function(e) {
function a() {
e.opacity_bubble = e.opacity, e.radius_bubble = e.radius
}
function t(a, t, s, n, c) {
if (a != t)
if (i.tmp.bubble_duration_end) {
if (void 0 != s) {
var o = n - p * (n - a) / i.interactivity.modes.bubble.duration,
l = a - o;
d = a + l, "size" == c && (e.radius_bubble = d), "opacity" == c && (e.opacity_bubble = d)
}
} else if (r <= i.interactivity.modes.bubble.distance) {
if (void 0 != s) var v = s;
else var v = n;
if (v != a) {
var d = n - p * (n - a) / i.interactivity.modes.bubble.duration;
"size" == c && (e.radius_bubble = d), "opacity" == c && (e.opacity_bubble = d)
}
} else "size" == c && (e.radius_bubble = void 0), "opacity" == c && (e.opacity_bubble = void 0)
}
if (i.interactivity.events.onhover.enable && isInArray("bubble", i.interactivity.events.onhover.mode)) {
var s = e.x - i.interactivity.mouse.pos_x,
n = e.y - i.interactivity.mouse.pos_y,
r = Math.sqrt(s * s + n * n),
c = 1 - r / i.interactivity.modes.bubble.distance;
if (r <= i.interactivity.modes.bubble.distance) {
if (c >= 0 && "mousemove" == i.interactivity.status) {
if (i.interactivity.modes.bubble.size != i.particles.size.value)
if (i.interactivity.modes.bubble.size > i.particles.size.value) {
var o = e.radius + i.interactivity.modes.bubble.size * c;
o >= 0 && (e.radius_bubble = o)
} else {
var l = e.radius - i.interactivity.modes.bubble.size,
o = e.radius - l * c;
o > 0 ? e.radius_bubble = o : e.radius_bubble = 0
}
if (i.interactivity.modes.bubble.opacity != i.particles.opacity.value)
if (i.interactivity.modes.bubble.opacity > i.particles.opacity.value) {
var v = i.interactivity.modes.bubble.opacity * c;
v > e.opacity && v <= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v)
} else {
var v = e.opacity - (i.particles.opacity.value - i.interactivity.modes.bubble.opacity) * c;
v < e.opacity && v >= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v)
}
}
} else a();
"mouseleave" == i.interactivity.status && a()
} else if (i.interactivity.events.onclick.enable && isInArray("bubble", i.interactivity.events.onclick.mode)) {
if (i.tmp.bubble_clicking) {
var s = e.x - i.interactivity.mouse.click_pos_x,
n = e.y - i.interactivity.mouse.click_pos_y,
r = Math.sqrt(s * s + n * n),
p = ((new Date).getTime() - i.interactivity.mouse.click_time) / 1e3;
p > i.interactivity.modes.bubble.duration && (i.tmp.bubble_duration_end = !0), p > 2 * i.interactivity.modes.bubble.duration && (i.tmp.bubble_clicking = !1, i.tmp.bubble_duration_end = !1)
}
i.tmp.bubble_clicking && (t(i.interactivity.modes.bubble.size, i.particles.size.value, e.radius_bubble, e.radius, "size"), t(i.interactivity.modes.bubble.opacity, i.particles.opacity.value, e.opacity_bubble, e.opacity, "opacity"))
}
}, i.fn.modes.repulseParticle = function(e) {
function a() {
var a = Math.atan2(d, p);
if (e.vx = u * Math.cos(a), e.vy = u * Math.sin(a), "bounce" == i.particles.move.out_mode) {
var t = {
x: e.x + e.vx,
y: e.y + e.vy
};
t.x + e.radius > i.canvas.w ? e.vx = -e.vx : t.x - e.radius < 0 && (e.vx = -e.vx), t.y + e.radius > i.canvas.h ? e.vy = -e.vy : t.y - e.radius < 0 && (e.vy = -e.vy)
}
}
if (i.interactivity.events.onhover.enable && isInArray("repulse", i.interactivity.events.onhover.mode) && "mousemove" == i.interactivity.status) {
var t = e.x - i.interactivity.mouse.pos_x,
s = e.y - i.interactivity.mouse.pos_y,
n = Math.sqrt(t * t + s * s),
r = {
x: t / n,
y: s / n
},
c = i.interactivity.modes.repulse.distance,
o = 100,
l = clamp(1 / c * (-1 * Math.pow(n / c, 2) + 1) * c * o, 0, 50),
v = {
x: e.x + r.x * l,
y: e.y + r.y * l
};
"bounce" == i.particles.move.out_mode ? (v.x - e.radius > 0 && v.x + e.radius < i.canvas.w && (e.x = v.x), v.y - e.radius > 0 && v.y + e.radius < i.canvas.h && (e.y = v.y)) : (e.x = v.x, e.y = v.y)
} else if (i.interactivity.events.onclick.enable && isInArray("repulse", i.interactivity.events.onclick.mode))
if (i.tmp.repulse_finish || (i.tmp.repulse_count++, i.tmp.repulse_count == i.particles.array.length && (i.tmp.repulse_finish = !0)), i.tmp.repulse_clicking) {
var c = Math.pow(i.interactivity.modes.repulse.distance / 6, 3),
p = i.interactivity.mouse.click_pos_x - e.x,
d = i.interactivity.mouse.click_pos_y - e.y,
m = p * p + d * d,
u = -c / m * 1;
c >= m && a()
} else 0 == i.tmp.repulse_clicking && (e.vx = e.vx_i, e.vy = e.vy_i)
}, i.fn.modes.grabParticle = function(e) {
if (i.interactivity.events.onhover.enable && "mousemove" == i.interactivity.status) {
var a = e.x - i.interactivity.mouse.pos_x,
t = e.y - i.interactivity.mouse.pos_y,
s = Math.sqrt(a * a + t * t);
if (s <= i.interactivity.modes.grab.distance) {
var n = i.interactivity.modes.grab.line_linked.opacity - s / (1 / i.interactivity.modes.grab.line_linked.opacity) / i.interactivity.modes.grab.distance;
if (n > 0) {
var r = i.particles.line_linked.color_rgb_line;
i.canvas.ctx.strokeStyle = "rgba(" + r.r + "," + r.g + "," + r.b + "," + n + ")", i.canvas.ctx.lineWidth = i.particles.line_linked.width, i.canvas.ctx.beginPath(), i.canvas.ctx.moveTo(e.x, e.y), i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x, i.interactivity.mouse.pos_y), i.canvas.ctx.stroke(), i.canvas.ctx.closePath()
}
}
}
}, i.fn.vendors.eventsListeners = function() {
"window" == i.interactivity.detect_on ? i.interactivity.el = window : i.interactivity.el = i.canvas.el, (i.interactivity.events.onhover.enable || i.interactivity.events.onclick.enable) && (i.interactivity.el.addEventListener("mousemove", function(e) {
if (i.interactivity.el == window) var a = e.clientX,
t = e.clientY;
else var a = e.offsetX || e.clientX,
t = e.offsetY || e.clientY;
i.interactivity.mouse.pos_x = a, i.interactivity.mouse.pos_y = t, i.tmp.retina && (i.interactivity.mouse.pos_x *= i.canvas.pxratio, i.interactivity.mouse.pos_y *= i.canvas.pxratio), i.interactivity.status = "mousemove"
}), i.interactivity.el.addEventListener("mouseleave", function(e) {
i.interactivity.mouse.pos_x = null, i.interactivity.mouse.pos_y = null, i.interactivity.status = "mouseleave"
})), i.interactivity.events.onclick.enable && i.interactivity.el.addEventListener("click", function() {
if (i.interactivity.mouse.click_pos_x = i.interactivity.mouse.pos_x, i.interactivity.mouse.click_pos_y = i.interactivity.mouse.pos_y, i.interactivity.mouse.click_time = (new Date).getTime(), i.interactivity.events.onclick.enable) switch (i.interactivity.events.onclick.mode) {
case "push":
i.particles.move.enable ? i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb, i.interactivity.mouse) : 1 == i.interactivity.modes.push.particles_nb ? i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb, i.interactivity.mouse) : i.interactivity.modes.push.particles_nb > 1 && i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);
break;
case "remove":
i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);
break;
case "bubble":
i.tmp.bubble_clicking = !0;
break;
case "repulse":
i.tmp.repulse_clicking = !0, i.tmp.repulse_count = 0, i.tmp.repulse_finish = !1, setTimeout(function() {
i.tmp.repulse_clicking = !1
}, 1e3 * i.interactivity.modes.repulse.duration)
}
})
}, i.fn.vendors.densityAutoParticles = function() {
if (i.particles.number.density.enable) {
var e = i.canvas.el.width * i.canvas.el.height / 1e3;
i.tmp.retina && (e /= 2 * i.canvas.pxratio);
var a = e * i.particles.number.value / i.particles.number.density.value_area,
t = i.particles.array.length - a;
0 > t ? i.fn.modes.pushParticles(Math.abs(t)) : i.fn.modes.removeParticles(t)
}
}, i.fn.vendors.checkOverlap = function(e, a) {
for (var t = 0; t < i.particles.array.length; t++) {
var s = i.particles.array[t],
n = e.x - s.x,
r = e.y - s.y,
c = Math.sqrt(n * n + r * r);
c <= e.radius + s.radius && (e.x = a ? a.x : Math.random() * i.canvas.w, e.y = a ? a.y : Math.random() * i.canvas.h, i.fn.vendors.checkOverlap(e))
}
}, i.fn.vendors.createSvgImg = function(e) {
var a = i.tmp.source_svg,
t = /#([0-9A-F]{3,6})/gi,
s = a.replace(t, function(a, t, i, s) {
if (e.color.rgb) var n = "rgba(" + e.color.rgb.r + "," + e.color.rgb.g + "," + e.color.rgb.b + "," + e.opacity + ")";
else var n = "hsla(" + e.color.hsl.h + "," + e.color.hsl.s + "%," + e.color.hsl.l + "%," + e.opacity + ")";
return n
}),
n = new Blob([s], {
type: "image/svg+xml;charset=utf-8"
}),
r = window.URL || window.webkitURL || window,
c = r.createObjectURL(n),
o = new Image;
o.addEventListener("load", function() {
e.img.obj = o, e.img.loaded = !0, r.revokeObjectURL(c), i.tmp.count_svg++
}), o.src = c
}, i.fn.vendors.destroypJS = function() {
cancelAnimationFrame(i.fn.drawAnimFrame), t.remove(), pJSDom = null
}, i.fn.vendors.drawShape = function(e, a, t, i, s, n) {
var r = s * n,
c = s / n,
o = 180 * (c - 2) / c,
l = Math.PI - Math.PI * o / 180;
e.save(), e.beginPath(), e.translate(a, t), e.moveTo(0, 0);
for (var v = 0; r > v; v++) e.lineTo(i, 0), e.translate(i, 0), e.rotate(l);
e.fill(), e.restore()
}, i.fn.vendors.exportImg = function() {
window.open(i.canvas.el.toDataURL("image/png"), "_blank")
}, i.fn.vendors.loadImg = function(e) {
if (i.tmp.img_error = void 0, "" != i.particles.shape.image.src)
if ("svg" == e) {
var a = new XMLHttpRequest;
a.open("GET", i.particles.shape.image.src), a.onreadystatechange = function(e) {
4 == a.readyState && (200 == a.status ? (i.tmp.source_svg = e.currentTarget.response, i.fn.vendors.checkBeforeDraw()) : (console.log("Error pJS - Image not found"), i.tmp.img_error = !0))
}, a.send()
} else {
var t = new Image;
t.addEventListener("load", function() {
i.tmp.img_obj = t, i.fn.vendors.checkBeforeDraw()
}), t.src = i.particles.shape.image.src
} else console.log("Error pJS - No image.src"), i.tmp.img_error = !0
}, i.fn.vendors.draw = function() {
"image" == i.particles.shape.type ? "svg" == i.tmp.img_type ? i.tmp.count_svg >= i.particles.number.value ? (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) : i.tmp.img_error || (i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw)) : void 0 != i.tmp.img_obj ? (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) : i.tmp.img_error || (i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw)) : (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame))
}, i.fn.vendors.checkBeforeDraw = function() {
"image" == i.particles.shape.type ? "svg" == i.tmp.img_type && void 0 == i.tmp.source_svg ? i.tmp.checkAnimFrame = requestAnimFrame(check) : (cancelRequestAnimFrame(i.tmp.checkAnimFrame), i.tmp.img_error || (i.fn.vendors.init(), i.fn.vendors.draw())) : (i.fn.vendors.init(), i.fn.vendors.draw())
}, i.fn.vendors.init = function() {
i.fn.retinaInit(), i.fn.canvasInit(), i.fn.canvasSize(), i.fn.canvasPaint(), i.fn.particlesCreate(), i.fn.vendors.densityAutoParticles(), i.particles.line_linked.color_rgb_line = hexToRgb(i.particles.line_linked.color)
}, i.fn.vendors.start = function() {
isInArray("image", i.particles.shape.type) ? (i.tmp.img_type = i.particles.shape.image.src.substr(i.particles.shape.image.src.length - 3), i.fn.vendors.loadImg(i.tmp.img_type)) : i.fn.vendors.checkBeforeDraw()
}, i.fn.vendors.eventsListeners(), i.fn.vendors.start()
};
Object.deepExtend = function(e, a) {
for (var t in a) a[t] && a[t].constructor && a[t].constructor === Object ? (e[t] = e[t] || {}, arguments.callee(e[t], a[t])) : e[t] = a[t];
return e
}, window.requestAnimFrame = function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e) {
window.setTimeout(e, 1e3 / 60)
}
}(), window.cancelRequestAnimFrame = function() {
return window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout
}(), window.pJSDom = [], window.particlesJS = function(e, a) {
"string" != typeof e && (a = e, e = "particles-js"), e || (e = "particles-js");
var t = document.getElementById(e),
i = "particles-js-canvas-el",
s = t.getElementsByClassName(i);
if (s.length)
for (; s.length > 0;) t.removeChild(s[0]);
var n = document.createElement("canvas");
n.className = i, n.style.width = "100%", n.style.height = "100%";
var r = document.getElementById(e).appendChild(n);
null != r && pJSDom.push(new pJS(e, a))
}, window.particlesJS.load = function(e, a, t) {
var i = new XMLHttpRequest;
i.open("GET", a), i.onreadystatechange = function(a) {
if (4 == i.readyState)
if (200 == i.status) {
var s = JSON.parse(a.currentTarget.response);
window.particlesJS(e, s), t && t()
} else console.log("Error pJS - XMLHttpRequest status: " + i.status), console.log("Error pJS - File config not found")
}, i.send()
};

View file

@ -0,0 +1,438 @@
// The MIT License (MIT)
// Typed.js | Copyright (c) 2016 Matt Boldt | www.mattboldt.com
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
! function($) {
"use strict";
var Typed = function(el, options) {
// chosen element to manipulate text
this.el = $(el);
// options
this.options = $.extend({}, $.fn.typed.defaults, options);
// attribute to type into
this.isInput = this.el.is('input');
this.attr = this.options.attr;
// show cursor
this.showCursor = this.isInput ? false : this.options.showCursor;
// text content of element
this.elContent = this.attr ? this.el.attr(this.attr) : this.el.text();
// html or plain text
this.contentType = this.options.contentType;
// typing speed
this.typeSpeed = this.options.typeSpeed;
// add a delay before typing starts
this.startDelay = this.options.startDelay;
// backspacing speed
this.backSpeed = this.options.backSpeed;
// amount of time to wait before backspacing
this.backDelay = this.options.backDelay;
// div containing strings
this.stringsElement = this.options.stringsElement;
// input strings of text
this.strings = this.options.strings;
// character number position of current string
this.strPos = 0;
// current array position
this.arrayPos = 0;
// number to stop backspacing on.
// default 0, can change depending on how many chars
// you want to remove at the time
this.stopNum = 0;
// Looping logic
this.loop = this.options.loop;
this.loopCount = this.options.loopCount;
this.curLoop = 0;
// for stopping
this.stop = false;
// custom cursor
this.cursorChar = this.options.cursorChar;
// shuffle the strings
this.shuffle = this.options.shuffle;
// the order of strings
this.sequence = [];
// All systems go!
this.build();
};
Typed.prototype = {
constructor: Typed,
init: function() {
// begin the loop w/ first current string (global self.strings)
// current string will be passed as an argument each time after this
var self = this;
self.timeout = setTimeout(function() {
for (var i=0;i<self.strings.length;++i) self.sequence[i]=i;
// shuffle the array if true
if(self.shuffle) self.sequence = self.shuffleArray(self.sequence);
// Start typing
self.typewrite(self.strings[self.sequence[self.arrayPos]], self.strPos);
}, self.startDelay);
},
build: function() {
var self = this;
// Insert cursor
if (this.showCursor === true) {
this.cursor = $("<span class=\"typed-cursor\">" + this.cursorChar + "</span>");
this.el.after(this.cursor);
}
if (this.stringsElement) {
this.strings = [];
this.stringsElement.hide();
console.log(this.stringsElement.children());
var strings = this.stringsElement.children();
$.each(strings, function(key, value){
self.strings.push($(value).html());
});
}
this.init();
},
// pass current string state to each function, types 1 char per call
typewrite: function(curString, curStrPos) {
// exit when stopped
if (this.stop === true) {
return;
}
// varying values for setTimeout during typing
// can't be global since number changes each time loop is executed
var humanize = Math.round(Math.random() * (100 - 30)) + this.typeSpeed;
var self = this;
// ------------- optional ------------- //
// backpaces a certain string faster
// ------------------------------------ //
// if (self.arrayPos == 1){
// self.backDelay = 50;
// }
// else{ self.backDelay = 500; }
// contain typing function in a timeout humanize'd delay
self.timeout = setTimeout(function() {
// check for an escape character before a pause value
// format: \^\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^
// single ^ are removed from string
var charPause = 0;
var substr = curString.substr(curStrPos);
if (substr.charAt(0) === '^') {
var skip = 1; // skip atleast 1
if (/^\^\d+/.test(substr)) {
substr = /\d+/.exec(substr)[0];
skip += substr.length;
charPause = parseInt(substr);
}
// strip out the escape character and pause value so they're not printed
curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip);
}
if (self.contentType === 'html') {
// skip over html tags while typing
var curChar = curString.substr(curStrPos).charAt(0)
if (curChar === '<' || curChar === '&') {
var tag = '';
var endTag = '';
if (curChar === '<') {
endTag = '>'
}
else {
endTag = ';'
}
while (curString.substr(curStrPos + 1).charAt(0) !== endTag) {
tag += curString.substr(curStrPos).charAt(0);
curStrPos++;
if (curStrPos + 1 > curString.length) { break; }
}
curStrPos++;
tag += endTag;
}
}
// timeout for any pause after a character
self.timeout = setTimeout(function() {
if (curStrPos === curString.length) {
// fires callback function
self.options.onStringTyped(self.arrayPos);
// is this the final string
if (self.arrayPos === self.strings.length - 1) {
// animation that occurs on the last typed string
self.options.callback();
self.curLoop++;
// quit if we wont loop back
if (self.loop === false || self.curLoop === self.loopCount)
return;
}
self.timeout = setTimeout(function() {
self.backspace(curString, curStrPos);
}, self.backDelay);
} else {
/* call before functions if applicable */
if (curStrPos === 0) {
self.options.preStringTyped(self.arrayPos);
}
// start typing each new char into existing string
// curString: arg, self.el.html: original text inside element
var nextString = curString.substr(0, curStrPos + 1);
if (self.attr) {
self.el.attr(self.attr, nextString);
} else {
if (self.isInput) {
self.el.val(nextString);
} else if (self.contentType === 'html') {
self.el.html(nextString);
} else {
self.el.text(nextString);
}
}
// add characters one by one
curStrPos++;
// loop the function
self.typewrite(curString, curStrPos);
}
// end of character pause
}, charPause);
// humanized value for typing
}, humanize);
},
backspace: function(curString, curStrPos) {
// exit when stopped
if (this.stop === true) {
return;
}
// varying values for setTimeout during typing
// can't be global since number changes each time loop is executed
var humanize = Math.round(Math.random() * (100 - 30)) + this.backSpeed;
var self = this;
self.timeout = setTimeout(function() {
// ----- this part is optional ----- //
// check string array position
// on the first string, only delete one word
// the stopNum actually represents the amount of chars to
// keep in the current string. In my case it's 14.
// if (self.arrayPos == 1){
// self.stopNum = 14;
// }
//every other time, delete the whole typed string
// else{
// self.stopNum = 0;
// }
if (self.contentType === 'html') {
// skip over html tags while backspacing
if (curString.substr(curStrPos).charAt(0) === '>') {
var tag = '';
while (curString.substr(curStrPos - 1).charAt(0) !== '<') {
tag -= curString.substr(curStrPos).charAt(0);
curStrPos--;
if (curStrPos < 0) { break; }
}
curStrPos--;
tag += '<';
}
}
// ----- continue important stuff ----- //
// replace text with base text + typed characters
var nextString = curString.substr(0, curStrPos);
if (self.attr) {
self.el.attr(self.attr, nextString);
} else {
if (self.isInput) {
self.el.val(nextString);
} else if (self.contentType === 'html') {
self.el.html(nextString);
} else {
self.el.text(nextString);
}
}
// if the number (id of character in current string) is
// less than the stop number, keep going
if (curStrPos > self.stopNum) {
// subtract characters one by one
curStrPos--;
// loop the function
self.backspace(curString, curStrPos);
}
// if the stop number has been reached, increase
// array position to next string
else if (curStrPos <= self.stopNum) {
self.arrayPos++;
if (self.arrayPos === self.strings.length) {
self.arrayPos = 0;
// Shuffle sequence again
if(self.shuffle) self.sequence = self.shuffleArray(self.sequence);
self.init();
} else
self.typewrite(self.strings[self.sequence[self.arrayPos]], curStrPos);
}
// humanized value for typing
}, humanize);
},
/**
* Shuffles the numbers in the given array.
* @param {Array} array
* @returns {Array}
*/
shuffleArray: function(array) {
var tmp, current, top = array.length;
if(top) while(--top) {
current = Math.floor(Math.random() * (top + 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array;
},
// Start & Stop currently not working
// , stop: function() {
// var self = this;
// self.stop = true;
// clearInterval(self.timeout);
// }
// , start: function() {
// var self = this;
// if(self.stop === false)
// return;
// this.stop = false;
// this.init();
// }
// Reset and rebuild the element
reset: function() {
var self = this;
clearInterval(self.timeout);
var id = this.el.attr('id');
this.el.empty();
if (typeof this.cursor !== 'undefined') {
this.cursor.remove();
}
this.strPos = 0;
this.arrayPos = 0;
this.curLoop = 0;
// Send the callback
this.options.resetCallback();
}
};
$.fn.typed = function(option) {
return this.each(function() {
var $this = $(this),
data = $this.data('typed'),
options = typeof option == 'object' && option;
if (data) { data.reset(); }
$this.data('typed', (data = new Typed(this, options)));
if (typeof option == 'string') data[option]();
});
};
$.fn.typed.defaults = {
strings: ["These are the default values...", "You know what you should do?", "Use your own!", "Have a great day!"],
stringsElement: null,
// typing speed
typeSpeed: 0,
// time before typing starts
startDelay: 0,
// backspacing speed
backSpeed: 0,
// shuffle the strings
shuffle: false,
// time before backspacing
backDelay: 500,
// loop
loop: false,
// false = infinite
loopCount: false,
// show cursor
showCursor: true,
// character for cursor
cursorChar: "|",
// attribute to type (null == text)
attr: null,
// either html or text
contentType: 'html',
// call when done callback function
callback: function() {},
// starting callback function before each string
preStringTyped: function() {},
//callback for every typed string
onStringTyped: function() {},
// callback for reset
resetCallback: function() {}
};
}(window.jQuery);

View file

@ -0,0 +1,484 @@
// Generated by CoffeeScript 1.6.2
/*
jQuery Waypoints - v2.0.3
Copyright (c) 2011-2013 Caleb Troughton
Dual licensed under the MIT license and GPL license.
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
*/
(function() {
var t = [].indexOf || function(t) {
for (var e = 0, n = this.length; e < n; e++) {
if (e in this && this[e] === t) return e
}
return -1
},
e = [].slice;
(function(t, e) {
if (typeof define === "function" && define.amd) {
return define("waypoints", ["jquery"], function(n) {
return e(n, t)
})
} else {
return e(t.jQuery, t)
}
})(this, function(n, r) {
var i, o, l, s, f, u, a, c, h, d, p, y, v, w, g, m;
i = n(r);
c = t.call(r, "ontouchstart") >= 0;
s = {
horizontal: {},
vertical: {}
};
f = 1;
a = {};
u = "waypoints-context-id";
p = "resize.waypoints";
y = "scroll.waypoints";
v = 1;
w = "waypoints-waypoint-ids";
g = "waypoint";
m = "waypoints";
o = function() {
function t(t) {
var e = this;
this.$element = t;
this.element = t[0];
this.didResize = false;
this.didScroll = false;
this.id = "context" + f++;
this.oldScroll = {
x: t.scrollLeft(),
y: t.scrollTop()
};
this.waypoints = {
horizontal: {},
vertical: {}
};
t.data(u, this.id);
a[this.id] = this;
t.bind(y, function() {
var t;
if (!(e.didScroll || c)) {
e.didScroll = true;
t = function() {
e.doScroll();
return e.didScroll = false
};
return r.setTimeout(t, n[m].settings.scrollThrottle)
}
});
t.bind(p, function() {
var t;
if (!e.didResize) {
e.didResize = true;
t = function() {
n[m]("refresh");
return e.didResize = false
};
return r.setTimeout(t, n[m].settings.resizeThrottle)
}
})
}
t.prototype.doScroll = function() {
var t, e = this;
t = {
horizontal: {
newScroll: this.$element.scrollLeft(),
oldScroll: this.oldScroll.x,
forward: "right",
backward: "left"
},
vertical: {
newScroll: this.$element.scrollTop(),
oldScroll: this.oldScroll.y,
forward: "down",
backward: "up"
}
};
if (c && (!t.vertical.oldScroll || !t.vertical.newScroll)) {
n[m]("refresh")
}
n.each(t, function(t, r) {
var i, o, l;
l = [];
o = r.newScroll > r.oldScroll;
i = o ? r.forward : r.backward;
n.each(e.waypoints[t], function(t, e) {
var n, i;
if (r.oldScroll < (n = e.offset) && n <= r.newScroll) {
return l.push(e)
} else if (r.newScroll < (i = e.offset) && i <= r.oldScroll) {
return l.push(e)
}
});
l.sort(function(t, e) {
return t.offset - e.offset
});
if (!o) {
l.reverse()
}
return n.each(l, function(t, e) {
if (e.options.continuous || t === l.length - 1) {
return e.trigger([i])
}
})
});
return this.oldScroll = {
x: t.horizontal.newScroll,
y: t.vertical.newScroll
}
};
t.prototype.refresh = function() {
var t, e, r, i = this;
r = n.isWindow(this.element);
e = this.$element.offset();
this.doScroll();
t = {
horizontal: {
contextOffset: r ? 0 : e.left,
contextScroll: r ? 0 : this.oldScroll.x,
contextDimension: this.$element.width(),
oldScroll: this.oldScroll.x,
forward: "right",
backward: "left",
offsetProp: "left"
},
vertical: {
contextOffset: r ? 0 : e.top,
contextScroll: r ? 0 : this.oldScroll.y,
contextDimension: r ? n[m]("viewportHeight") : this.$element.height(),
oldScroll: this.oldScroll.y,
forward: "down",
backward: "up",
offsetProp: "top"
}
};
return n.each(t, function(t, e) {
return n.each(i.waypoints[t], function(t, r) {
var i, o, l, s, f;
i = r.options.offset;
l = r.offset;
o = n.isWindow(r.element) ? 0 : r.$element.offset()[e.offsetProp];
if (n.isFunction(i)) {
i = i.apply(r.element)
} else if (typeof i === "string") {
i = parseFloat(i);
if (r.options.offset.indexOf("%") > -1) {
i = Math.ceil(e.contextDimension * i / 100)
}
}
r.offset = o - e.contextOffset + e.contextScroll - i;
if (r.options.onlyOnScroll && l != null || !r.enabled) {
return
}
if (l !== null && l < (s = e.oldScroll) && s <= r.offset) {
return r.trigger([e.backward])
} else if (l !== null && l > (f = e.oldScroll) && f >= r.offset) {
return r.trigger([e.forward])
} else if (l === null && e.oldScroll >= r.offset) {
return r.trigger([e.forward])
}
})
})
};
t.prototype.checkEmpty = function() {
if (n.isEmptyObject(this.waypoints.horizontal) && n.isEmptyObject(this.waypoints.vertical)) {
this.$element.unbind([p, y].join(" "));
return delete a[this.id]
}
};
return t
}();
l = function() {
function t(t, e, r) {
var i, o;
r = n.extend({}, n.fn[g].defaults, r);
if (r.offset === "bottom-in-view") {
r.offset = function() {
var t;
t = n[m]("viewportHeight");
if (!n.isWindow(e.element)) {
t = e.$element.height()
}
return t - n(this).outerHeight()
}
}
this.$element = t;
this.element = t[0];
this.axis = r.horizontal ? "horizontal" : "vertical";
this.callback = r.handler;
this.context = e;
this.enabled = r.enabled;
this.id = "waypoints" + v++;
this.offset = null;
this.options = r;
e.waypoints[this.axis][this.id] = this;
s[this.axis][this.id] = this;
i = (o = t.data(w)) != null ? o : [];
i.push(this.id);
t.data(w, i)
}
t.prototype.trigger = function(t) {
if (!this.enabled) {
return
}
if (this.callback != null) {
this.callback.apply(this.element, t)
}
if (this.options.triggerOnce) {
return this.destroy()
}
};
t.prototype.disable = function() {
return this.enabled = false
};
t.prototype.enable = function() {
this.context.refresh();
return this.enabled = true
};
t.prototype.destroy = function() {
delete s[this.axis][this.id];
delete this.context.waypoints[this.axis][this.id];
return this.context.checkEmpty()
};
t.getWaypointsByElement = function(t) {
var e, r;
r = n(t).data(w);
if (!r) {
return []
}
e = n.extend({}, s.horizontal, s.vertical);
return n.map(r, function(t) {
return e[t]
})
};
return t
}();
d = {
init: function(t, e) {
var r;
if (e == null) {
e = {}
}
if ((r = e.handler) == null) {
e.handler = t
}
this.each(function() {
var t, r, i, s;
t = n(this);
i = (s = e.context) != null ? s : n.fn[g].defaults.context;
if (!n.isWindow(i)) {
i = t.closest(i)
}
i = n(i);
r = a[i.data(u)];
if (!r) {
r = new o(i)
}
return new l(t, r, e)
});
n[m]("refresh");
return this
},
disable: function() {
return d._invoke(this, "disable")
},
enable: function() {
return d._invoke(this, "enable")
},
destroy: function() {
return d._invoke(this, "destroy")
},
prev: function(t, e) {
return d._traverse.call(this, t, e, function(t, e, n) {
if (e > 0) {
return t.push(n[e - 1])
}
})
},
next: function(t, e) {
return d._traverse.call(this, t, e, function(t, e, n) {
if (e < n.length - 1) {
return t.push(n[e + 1])
}
})
},
_traverse: function(t, e, i) {
var o, l;
if (t == null) {
t = "vertical"
}
if (e == null) {
e = r
}
l = h.aggregate(e);
o = [];
this.each(function() {
var e;
e = n.inArray(this, l[t]);
return i(o, e, l[t])
});
return this.pushStack(o)
},
_invoke: function(t, e) {
t.each(function() {
var t;
t = l.getWaypointsByElement(this);
return n.each(t, function(t, n) {
n[e]();
return true
})
});
return this
}
};
n.fn[g] = function() {
var t, r;
r = arguments[0], t = 2 <= arguments.length ? e.call(arguments, 1) : [];
if (d[r]) {
return d[r].apply(this, t)
} else if (n.isFunction(r)) {
return d.init.apply(this, arguments)
} else if (n.isPlainObject(r)) {
return d.init.apply(this, [null, r])
} else if (!r) {
return n.error("jQuery Waypoints needs a callback function or handler option.")
} else {
return n.error("The " + r + " method does not exist in jQuery Waypoints.")
}
};
n.fn[g].defaults = {
context: r,
continuous: true,
enabled: true,
horizontal: false,
offset: 0,
triggerOnce: false
};
h = {
refresh: function() {
return n.each(a, function(t, e) {
return e.refresh()
})
},
viewportHeight: function() {
var t;
return (t = r.innerHeight) != null ? t : i.height()
},
aggregate: function(t) {
var e, r, i;
e = s;
if (t) {
e = (i = a[n(t).data(u)]) != null ? i.waypoints : void 0
}
if (!e) {
return []
}
r = {
horizontal: [],
vertical: []
};
n.each(r, function(t, i) {
n.each(e[t], function(t, e) {
return i.push(e)
});
i.sort(function(t, e) {
return t.offset - e.offset
});
r[t] = n.map(i, function(t) {
return t.element
});
return r[t] = n.unique(r[t])
});
return r
},
above: function(t) {
if (t == null) {
t = r
}
return h._filter(t, "vertical", function(t, e) {
return e.offset <= t.oldScroll.y
})
},
below: function(t) {
if (t == null) {
t = r
}
return h._filter(t, "vertical", function(t, e) {
return e.offset > t.oldScroll.y
})
},
left: function(t) {
if (t == null) {
t = r
}
return h._filter(t, "horizontal", function(t, e) {
return e.offset <= t.oldScroll.x
})
},
right: function(t) {
if (t == null) {
t = r
}
return h._filter(t, "horizontal", function(t, e) {
return e.offset > t.oldScroll.x
})
},
enable: function() {
return h._invoke("enable")
},
disable: function() {
return h._invoke("disable")
},
destroy: function() {
return h._invoke("destroy")
},
extendFn: function(t, e) {
return d[t] = e
},
_invoke: function(t) {
var e;
e = n.extend({}, s.vertical, s.horizontal);
return n.each(e, function(e, n) {
n[t]();
return true
})
},
_filter: function(t, e, r) {
var i, o;
i = a[n(t).data(u)];
if (!i) {
return []
}
o = [];
n.each(i.waypoints[e], function(t, e) {
if (r(i, e)) {
return o.push(e)
}
});
o.sort(function(t, e) {
return t.offset - e.offset
});
return n.map(o, function(t) {
return t.element
})
}
};
n[m] = function() {
var t, n;
n = arguments[0], t = 2 <= arguments.length ? e.call(arguments, 1) : [];
if (h[n]) {
return h[n].apply(null, t)
} else {
return h.aggregate.call(null, n)
}
};
n[m].settings = {
resizeThrottle: 100,
scrollThrottle: 30
};
return i.load(function() {
return n[m]("refresh")
})
})
}).call(this);

513
assets/js/libraries/wow.js Normal file
View file

@ -0,0 +1,513 @@
(function() {
var MutationObserver, Util, WeakMap, getComputedStyle, getComputedStyleRX,
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
Util = (function() {
function Util() {}
Util.prototype.extend = function(custom, defaults) {
var key, value;
for (key in defaults) {
value = defaults[key];
if (custom[key] == null) {
custom[key] = value;
}
}
return custom;
};
Util.prototype.isMobile = function(agent) {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);
};
Util.prototype.createEvent = function(event, bubble, cancel, detail) {
var customEvent;
if (bubble == null) {
bubble = false;
}
if (cancel == null) {
cancel = false;
}
if (detail == null) {
detail = null;
}
if (document.createEvent != null) {
customEvent = document.createEvent('CustomEvent');
customEvent.initCustomEvent(event, bubble, cancel, detail);
} else if (document.createEventObject != null) {
customEvent = document.createEventObject();
customEvent.eventType = event;
} else {
customEvent.eventName = event;
}
return customEvent;
};
Util.prototype.emitEvent = function(elem, event) {
if (elem.dispatchEvent != null) {
return elem.dispatchEvent(event);
} else if (event in (elem != null)) {
return elem[event]();
} else if (("on" + event) in (elem != null)) {
return elem["on" + event]();
}
};
Util.prototype.addEvent = function(elem, event, fn) {
if (elem.addEventListener != null) {
return elem.addEventListener(event, fn, false);
} else if (elem.attachEvent != null) {
return elem.attachEvent("on" + event, fn);
} else {
return elem[event] = fn;
}
};
Util.prototype.removeEvent = function(elem, event, fn) {
if (elem.removeEventListener != null) {
return elem.removeEventListener(event, fn, false);
} else if (elem.detachEvent != null) {
return elem.detachEvent("on" + event, fn);
} else {
return delete elem[event];
}
};
Util.prototype.innerHeight = function() {
if ('innerHeight' in window) {
return window.innerHeight;
} else {
return document.documentElement.clientHeight;
}
};
return Util;
})();
WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() {
function WeakMap() {
this.keys = [];
this.values = [];
}
WeakMap.prototype.get = function(key) {
var i, item, j, len, ref;
ref = this.keys;
for (i = j = 0, len = ref.length; j < len; i = ++j) {
item = ref[i];
if (item === key) {
return this.values[i];
}
}
};
WeakMap.prototype.set = function(key, value) {
var i, item, j, len, ref;
ref = this.keys;
for (i = j = 0, len = ref.length; j < len; i = ++j) {
item = ref[i];
if (item === key) {
this.values[i] = value;
return;
}
}
this.keys.push(key);
return this.values.push(value);
};
return WeakMap;
})());
MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() {
function MutationObserver() {
if (typeof console !== "undefined" && console !== null) {
console.warn('MutationObserver is not supported by your browser.');
}
if (typeof console !== "undefined" && console !== null) {
console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');
}
}
MutationObserver.notSupported = true;
MutationObserver.prototype.observe = function() {};
return MutationObserver;
})());
getComputedStyle = this.getComputedStyle || function(el, pseudo) {
this.getPropertyValue = function(prop) {
var ref;
if (prop === 'float') {
prop = 'styleFloat';
}
if (getComputedStyleRX.test(prop)) {
prop.replace(getComputedStyleRX, function(_, _char) {
return _char.toUpperCase();
});
}
return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null;
};
return this;
};
getComputedStyleRX = /(\-([a-z]){1})/g;
this.WOW = (function() {
WOW.prototype.defaults = {
boxClass: 'wow',
animateClass: 'animated',
offset: 0,
mobile: true,
live: true,
callback: null,
scrollContainer: null
};
function WOW(options) {
if (options == null) {
options = {};
}
this.scrollCallback = bind(this.scrollCallback, this);
this.scrollHandler = bind(this.scrollHandler, this);
this.resetAnimation = bind(this.resetAnimation, this);
this.start = bind(this.start, this);
this.scrolled = true;
this.config = this.util().extend(options, this.defaults);
if (options.scrollContainer != null) {
this.config.scrollContainer = document.querySelector(options.scrollContainer);
}
this.animationNameCache = new WeakMap();
this.wowEvent = this.util().createEvent(this.config.boxClass);
}
WOW.prototype.init = function() {
var ref;
this.element = window.document.documentElement;
if ((ref = document.readyState) === "interactive" || ref === "complete") {
this.start();
} else {
this.util().addEvent(document, 'DOMContentLoaded', this.start);
}
return this.finished = [];
};
WOW.prototype.start = function() {
var box, j, len, ref;
this.stopped = false;
this.boxes = (function() {
var j, len, ref, results;
ref = this.element.querySelectorAll("." + this.config.boxClass);
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
results.push(box);
}
return results;
}).call(this);
this.all = (function() {
var j, len, ref, results;
ref = this.boxes;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
results.push(box);
}
return results;
}).call(this);
if (this.boxes.length) {
if (this.disabled()) {
this.resetStyle();
} else {
ref = this.boxes;
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
this.applyStyle(box, true);
}
}
}
if (!this.disabled()) {
this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
this.util().addEvent(window, 'resize', this.scrollHandler);
this.interval = setInterval(this.scrollCallback, 50);
}
if (this.config.live) {
return new MutationObserver((function(_this) {
return function(records) {
var k, len1, node, record, results;
results = [];
for (k = 0, len1 = records.length; k < len1; k++) {
record = records[k];
results.push((function() {
var l, len2, ref1, results1;
ref1 = record.addedNodes || [];
results1 = [];
for (l = 0, len2 = ref1.length; l < len2; l++) {
node = ref1[l];
results1.push(this.doSync(node));
}
return results1;
}).call(_this));
}
return results;
};
})(this)).observe(document.body, {
childList: true,
subtree: true
});
}
};
WOW.prototype.stop = function() {
this.stopped = true;
this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
this.util().removeEvent(window, 'resize', this.scrollHandler);
if (this.interval != null) {
return clearInterval(this.interval);
}
};
WOW.prototype.sync = function(element) {
if (MutationObserver.notSupported) {
return this.doSync(this.element);
}
};
WOW.prototype.doSync = function(element) {
var box, j, len, ref, results;
if (element == null) {
element = this.element;
}
if (element.nodeType !== 1) {
return;
}
element = element.parentNode || element;
ref = element.querySelectorAll("." + this.config.boxClass);
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
if (indexOf.call(this.all, box) < 0) {
this.boxes.push(box);
this.all.push(box);
if (this.stopped || this.disabled()) {
this.resetStyle();
} else {
this.applyStyle(box, true);
}
results.push(this.scrolled = true);
} else {
results.push(void 0);
}
}
return results;
};
WOW.prototype.show = function(box) {
this.applyStyle(box);
box.className = box.className + " " + this.config.animateClass;
if (this.config.callback != null) {
this.config.callback(box);
}
this.util().emitEvent(box, this.wowEvent);
this.util().addEvent(box, 'animationend', this.resetAnimation);
this.util().addEvent(box, 'oanimationend', this.resetAnimation);
this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation);
this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation);
return box;
};
WOW.prototype.applyStyle = function(box, hidden) {
var delay, duration, iteration;
duration = box.getAttribute('data-wow-duration');
delay = box.getAttribute('data-wow-delay');
iteration = box.getAttribute('data-wow-iteration');
return this.animate((function(_this) {
return function() {
return _this.customStyle(box, hidden, duration, delay, iteration);
};
})(this));
};
WOW.prototype.animate = (function() {
if ('requestAnimationFrame' in window) {
return function(callback) {
return window.requestAnimationFrame(callback);
};
} else {
return function(callback) {
return callback();
};
}
})();
WOW.prototype.resetStyle = function() {
var box, j, len, ref, results;
ref = this.boxes;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
results.push(box.style.visibility = 'visible');
}
return results;
};
WOW.prototype.resetAnimation = function(event) {
var target;
if (event.type.toLowerCase().indexOf('animationend') >= 0) {
target = event.target || event.srcElement;
return target.className = target.className.replace(this.config.animateClass, '').trim();
}
};
WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {
if (hidden) {
this.cacheAnimationName(box);
}
box.style.visibility = hidden ? 'hidden' : 'visible';
if (duration) {
this.vendorSet(box.style, {
animationDuration: duration
});
}
if (delay) {
this.vendorSet(box.style, {
animationDelay: delay
});
}
if (iteration) {
this.vendorSet(box.style, {
animationIterationCount: iteration
});
}
this.vendorSet(box.style, {
animationName: hidden ? 'none' : this.cachedAnimationName(box)
});
return box;
};
WOW.prototype.vendors = ["moz", "webkit"];
WOW.prototype.vendorSet = function(elem, properties) {
var name, results, value, vendor;
results = [];
for (name in properties) {
value = properties[name];
elem["" + name] = value;
results.push((function() {
var j, len, ref, results1;
ref = this.vendors;
results1 = [];
for (j = 0, len = ref.length; j < len; j++) {
vendor = ref[j];
results1.push(elem["" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);
}
return results1;
}).call(this));
}
return results;
};
WOW.prototype.vendorCSS = function(elem, property) {
var j, len, ref, result, style, vendor;
style = getComputedStyle(elem);
result = style.getPropertyCSSValue(property);
ref = this.vendors;
for (j = 0, len = ref.length; j < len; j++) {
vendor = ref[j];
result = result || style.getPropertyCSSValue("-" + vendor + "-" + property);
}
return result;
};
WOW.prototype.animationName = function(box) {
var animationName, error;
try {
animationName = this.vendorCSS(box, 'animation-name').cssText;
} catch (error) {
animationName = getComputedStyle(box).getPropertyValue('animation-name');
}
if (animationName === 'none') {
return '';
} else {
return animationName;
}
};
WOW.prototype.cacheAnimationName = function(box) {
return this.animationNameCache.set(box, this.animationName(box));
};
WOW.prototype.cachedAnimationName = function(box) {
return this.animationNameCache.get(box);
};
WOW.prototype.scrollHandler = function() {
return this.scrolled = true;
};
WOW.prototype.scrollCallback = function() {
var box;
if (this.scrolled) {
this.scrolled = false;
this.boxes = (function() {
var j, len, ref, results;
ref = this.boxes;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
box = ref[j];
if (!(box)) {
continue;
}
if (this.isVisible(box)) {
this.show(box);
continue;
}
results.push(box);
}
return results;
}).call(this);
if (!(this.boxes.length || this.config.live)) {
return this.stop();
}
}
};
WOW.prototype.offsetTop = function(element) {
var top;
while (element.offsetTop === void 0) {
element = element.parentNode;
}
top = element.offsetTop;
while (element = element.offsetParent) {
top += element.offsetTop;
}
return top;
};
WOW.prototype.isVisible = function(box) {
var bottom, offset, top, viewBottom, viewTop;
offset = box.getAttribute('data-wow-offset') || this.config.offset;
viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset;
viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset;
top = this.offsetTop(box);
bottom = top + box.clientHeight;
return top <= viewBottom && bottom >= viewTop;
};
WOW.prototype.util = function() {
return this._util != null ? this._util : this._util = new Util();
};
WOW.prototype.disabled = function() {
return !this.config.mobile && this.util().isMobile(navigator.userAgent);
};
return WOW;
})();
}).call(this);