/*
Name: Theme Base
Written by: Okler Themes - (http://www.okler.net)
Theme Version: 8.1.0
*/
// Theme
window.theme = {};
// Theme Common Functions
window.theme.fn = {
getOptions: function(opts) {
if (typeof(opts) == 'object') {
return opts;
} else if (typeof(opts) == 'string') {
try {
return JSON.parse(opts.replace(/'/g,'"').replace(';',''));
} catch(e) {
return {};
}
} else {
return {};
}
}
};
// Animate
(function(theme, $) {
theme = theme || {};
var instanceName = '__animate';
var PluginAnimate = function($el, opts) {
return this.initialize($el, opts);
};
PluginAnimate.defaults = {
accX: 0,
accY: -80,
delay: 100,
duration: '750ms',
minWindowWidth: 767
};
PluginAnimate.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginAnimate.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this;
if($('body').hasClass('loading-overlay-showing')) {
$(window).on('loading.overlay.ready', function(){
self.animate();
});
} else {
self.animate();
}
return this;
},
animate: function() {
var self = this,
$el = this.options.wrapper,
delay = 0,
duration = this.options.duration,
elTopDistance = $el.offset().top,
windowTopDistance = $(window).scrollTop();
$el.addClass('appear-animation animated');
if (!$('html').hasClass('no-csstransitions') && $(window).width() > self.options.minWindowWidth && elTopDistance >= windowTopDistance) {
$el.appear(function() {
$el.one('animation:show', function(ev) {
delay = ($el.attr('data-appear-animation-delay') ? $el.attr('data-appear-animation-delay') : self.options.delay);
duration = ($el.attr('data-appear-animation-duration') ? $el.attr('data-appear-animation-duration') : self.options.duration);
if (duration != '750ms') {
$el.css('animation-duration', duration);
}
$el.css('animation-delay', delay + 'ms');
$el.addClass($el.attr('data-appear-animation') + ' appear-animation-visible');
});
$el.trigger('animation:show');
}, {
accX: self.options.accX,
accY: self.options.accY
});
} else {
$el.addClass('appear-animation-visible');
}
return this;
}
};
// expose to scope
$.extend(theme, {
PluginAnimate: PluginAnimate
});
// jquery plugin
$.fn.themePluginAnimate = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginAnimate($this, opts);
}
});
};
}).apply(this, [window.theme, jQuery]);
// Before / After
(function(theme, $) {
theme = theme || {};
var instanceName = '__beforeafter';
var PluginBeforeAfter = function($el, opts) {
return this.initialize($el, opts);
};
PluginBeforeAfter.defaults = {
};
PluginBeforeAfter.prototype = {
initialize: function($el, opts) {
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginBeforeAfter.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.twentytwenty))) {
return this;
}
var self = this;
self.options.wrapper
.twentytwenty(self.options);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginBeforeAfter: PluginBeforeAfter
});
// jquery plugin
$.fn.themePluginBeforeAfter = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginBeforeAfter($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Carousel
(function(theme, $) {
theme = theme || {};
var instanceName = '__carousel';
var PluginCarousel = function($el, opts) {
return this.initialize($el, opts);
};
PluginCarousel.defaults = {
loop: true,
responsive: {
0: {
items: 1
},
479: {
items: 1
},
768: {
items: 2
},
979: {
items: 3
},
1199: {
items: 4
}
},
navText: []
};
PluginCarousel.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginCarousel.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.owlCarousel))) {
return this;
}
var self = this,
$el = this.options.wrapper;
// Add Theme Class
$el.addClass('owl-theme');
// Add Loading
$el.addClass('owl-loading');
// Force RTL according to HTML dir attribute
if ($('html').attr('dir') == 'rtl') {
this.options = $.extend(true, {}, this.options, {
rtl: true
});
}
if (this.options.items == 1) {
this.options.responsive = {}
}
if (this.options.items > 4) {
this.options = $.extend(true, {}, this.options, {
responsive: {
1199: {
items: this.options.items
}
}
});
}
// Auto Height Fixes
if (this.options.autoHeight) {
var itemsHeight = [];
$el.find('.owl-item').each(function(){
if( $(this).hasClass('active') ) {
itemsHeight.push( $(this).height() );
}
});
$(window).afterResize(function() {
$el.find('.owl-stage-outer').height( Math.max.apply(null, itemsHeight) );
});
$(window).on('load', function() {
$el.find('.owl-stage-outer').height( Math.max.apply(null, itemsHeight) );
});
}
// Initialize OwlCarousel
$el.owlCarousel(this.options).addClass('owl-carousel-init');
// Nav Offset
if( this.options.navVerticalOffset ) {
$el.find('.owl-nav').css({
top: 'calc( 50% - '+ self.options.navVerticalOffset +' )'
});
}
// Nav Outside
if( $el.hasClass('nav-outside') ) {
$(window).on('owl.carousel.nav.outside', function(){
if( $(window).width() < 992 ) {
self.options.stagePadding = 40;
$el.addClass('stage-margin');
} else {
self.options.stagePadding = 0;
$el.removeClass('stage-margin');
}
$el.owlCarousel('destroy').owlCarousel( self.options );
// Nav Offset
if( self.options.navVerticalOffset ) {
$el.find('.owl-nav').css({
top: 'calc( 50% - '+ self.options.navVerticalOffset +' )'
});
}
});
// Window Resize
$(window).on('load', function(){
$(window).afterResize(function(){
$(window).trigger('owl.carousel.nav.outside');
});
});
// First Load
$(window).trigger('owl.carousel.nav.outside');
}
// Nav style 5 (SVG Arrows)
if( $el.hasClass('nav-svg-arrows-1') ) {
var svg_arrow = '' +
'';
$el.find('.owl-next, .owl-prev').append( svg_arrow );
}
// Sync
if( $el.attr('data-sync') ) {
$el.on('change.owl.carousel', function(event) {
if (event.namespace && event.property.name === 'position') {
var target = event.relatedTarget.relative(event.property.value, true);
$( $el.data('sync') ).owlCarousel('to', target, 300, true);
}
});
}
// Carousel Center Active Item
if( $el.hasClass('carousel-center-active-item') ) {
var itemsActive = $el.find('.owl-item.active'),
indexCenter = Math.floor( ($el.find('.owl-item.active').length - 1) / 2 ),
itemCenter = itemsActive.eq(indexCenter);
itemCenter.addClass('current');
$el.on('change.owl.carousel', function(event) {
$el.find('.owl-item').removeClass('current');
setTimeout(function(){
var itemsActive = $el.find('.owl-item.active'),
indexCenter = Math.floor( ($el.find('.owl-item.active').length - 1) / 2 ),
itemCenter = itemsActive.eq(indexCenter);
itemCenter.addClass('current');
}, 100);
});
// Refresh
$el.trigger('refresh.owl.carousel');
}
// Remove Loading
$el.removeClass('owl-loading');
// Remove Height
$el.css('height', 'auto');
return this;
}
};
// expose to scope
$.extend(theme, {
PluginCarousel: PluginCarousel
});
// jquery plugin
$.fn.themePluginCarousel = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginCarousel($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Chart Circular
(function(theme, $) {
theme = theme || {};
var instanceName = '__chartCircular';
var PluginChartCircular = function($el, opts) {
return this.initialize($el, opts);
};
PluginChartCircular.defaults = {
accX: 0,
accY: -150,
delay: 1,
barColor: '#0088CC',
trackColor: '#f2f2f2',
scaleColor: false,
scaleLength: 5,
lineCap: 'round',
lineWidth: 13,
size: 175,
rotate: 0,
animate: ({
duration: 2500,
enabled: true
})
};
PluginChartCircular.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginChartCircular.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.appear)) || !($.isFunction($.fn.easyPieChart))) {
return this;
}
var self = this,
$el = this.options.wrapper,
value = ($el.attr('data-percent') ? $el.attr('data-percent') : 0),
percentEl = $el.find('.percent');
$.extend(true, self.options, {
onStep: function(from, to, currentValue) {
percentEl.html(parseInt(currentValue));
}
});
$el.attr('data-percent', 0);
$el.appear(function() {
$el.easyPieChart(self.options);
setTimeout(function() {
$el.data('easyPieChart').update(value);
$el.attr('data-percent', value);
}, self.options.delay);
}, {
accX: self.options.accX,
accY: self.options.accY
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginChartCircular: PluginChartCircular
});
// jquery plugin
$.fn.themePluginChartCircular = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginChartCircular($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Countdown
(function(theme, $) {
theme = theme || {};
var instanceName = '__countdown';
var PluginCountdown = function($el, opts) {
return this.initialize($el, opts);
};
PluginCountdown.defaults = {
date: '2030/06/10 12:00:00',
textDay: 'DAY',
textHour: 'HRS',
textMin: 'MIN',
textSec: 'SEC',
uppercase: true,
numberClass: '',
wrapperClass: '',
insertHTMLbefore: '',
insertHTMLafter: ''
};
PluginCountdown.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginCountdown.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.countTo))) {
return this;
}
var self = this,
$el = this.options.wrapper,
numberClass = ( self.options.numberClass ) ? ' ' + self.options.numberClass : '',
wrapperClass = ( self.options.wrapperClass ) ? ' ' + self.options.wrapperClass : '';
if( self.options.uppercase ) {
$el.countdown(self.options.date).on('update.countdown', function(event) {
var $this = $(this).html(event.strftime(self.options.insertHTMLbefore
+ '%D '+ self.options.textDay +'%!d
'
+ '%H '+ self.options.textHour +' '
+ '%M '+ self.options.textMin +' '
+ '%S '+ self.options.textSec +' '
+ self.options.insertHTMLafter
));
});
} else {
$el.countdown(self.options.date).on('update.countdown', function(event) {
var $this = $(this).html(event.strftime(self.options.insertHTMLbefore
+ '%D '+ self.options.textDay +'%!d '
+ '%H '+ self.options.textHour +' '
+ '%M '+ self.options.textMin +' '
+ '%S '+ self.options.textSec +' '
+ self.options.insertHTMLafter
));
});
}
return this;
}
};
// expose to scope
$.extend(theme, {
PluginCountdown: PluginCountdown
});
// jquery plugin
$.fn.themePluginCountdown = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginCountdown($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Counter
(function(theme, $) {
theme = theme || {};
var instanceName = '__counter';
var PluginCounter = function($el, opts) {
return this.initialize($el, opts);
};
PluginCounter.defaults = {
accX: 0,
accY: 0,
speed: 3000,
refreshInterval: 100,
decimals: 0,
onUpdate: null,
onComplete: null
};
PluginCounter.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginCounter.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.countTo))) {
return this;
}
var self = this,
$el = this.options.wrapper;
$.extend(self.options, {
onComplete: function() {
if ($el.data('append')) {
$el.html($el.html() + $el.data('append'));
}
if ($el.data('prepend')) {
$el.html($el.data('prepend') + $el.html());
}
}
});
$el.appear(function() {
$el.countTo(self.options);
}, {
accX: self.options.accX,
accY: self.options.accY
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginCounter: PluginCounter
});
// jquery plugin
$.fn.themePluginCounter = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginCounter($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Float Element
(function(theme, $) {
'use strict';
theme = theme || {};
var instanceName = '__floatElement';
var PluginFloatElement = function($el, opts) {
return this.initialize($el, opts);
};
PluginFloatElement.defaults = {
startPos: 'top',
speed: 3,
horizontal: false,
isInsideSVG: false,
transition: false,
transitionDelay: 0,
transitionDuration: 500
};
PluginFloatElement.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginFloatElement.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper,
$window = $(window),
minus;
if( self.options.style ) {
$el.attr('style', self.options.style);
}
if( $window.width() > 767 ) {
// Set Start Position
if( self.options.startPos == 'none' ) {
minus = '';
} else if( self.options.startPos == 'top' ) {
$el.css({
top: 0
});
minus = '';
} else {
$el.css({
bottom: 0
});
minus = '-';
}
// Set Transition
if( self.options.transition ) {
$el.css({
transition: 'ease-out transform '+ self.options.transitionDuration +'ms ' + self.options.transitionDelay + 'ms'
});
}
// First Load
self.movement(minus);
// Scroll
$window.on('scroll', function(){
self.movement(minus);
});
}
return this;
},
movement: function(minus) {
var self = this,
$el = this.options.wrapper,
$window = $(window),
scrollTop = $window.scrollTop(),
elementOffset = $el.offset().top,
currentElementOffset = (elementOffset - scrollTop),
factor = ( self.options.isInsideSVG ) ? 2 : 100;
var scrollPercent = factor * currentElementOffset / ($window.height());
if( $el.visible( true ) ) {
if( !self.options.horizontal ) {
$el.css({
transform: 'translate3d(0, '+ minus + scrollPercent / self.options.speed +'%, 0)'
});
} else {
$el.css({
transform: 'translate3d('+ minus + scrollPercent / self.options.speed +'%, '+ minus + scrollPercent / self.options.speed +'%, 0)'
});
}
}
}
};
// expose to scope
$.extend(theme, {
PluginFloatElement: PluginFloatElement
});
// jquery plugin
$.fn.themePluginFloatElement = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginFloatElement($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Icon
(function(theme, $) {
'use strict';
theme = theme || {};
var instanceName = '__icon';
var PluginIcon = function($el, opts) {
return this.initialize($el, opts);
};
PluginIcon.defaults = {
color: '#2388ED',
animated: false,
delay: 300,
onlySVG: false
};
PluginIcon.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginIcon.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper,
color = self.options.color,
elTopDistance = $el.offset().top,
windowTopDistance = $(window).scrollTop(),
duration = ( self.options.animated && !self.options.strokeBased ) ? 200 : 100;
// Check origin
if( window.location.origin === 'file://' ) {
$el.css('opacity', 1);
return;
}
// Duration
if( self.options.duration ) {
duration = self.options.duration;
}
// SVG Content
var SVGContent = $.get({
url: $el.attr('src'),
success: function(data, status, xhr){
var iconWrapper = $('
'+ xhr.responseText +'
'),
uniqid = 'icon_' + Math.floor(Math.random() * 26) + Date.now();
iconWrapper.find('svg').attr('id', uniqid);
if( $el.attr('width') ) {
iconWrapper.find('svg')
.attr('width', $el.attr('width'))
.attr('height', $el.attr('width'));
}
$el.replaceWith(iconWrapper);
if( self.options.extraClass ) {
iconWrapper.addClass( self.options.extraClass );
}
if( self.options.onlySVG ) {
return;
}
$el = iconWrapper;
var icon = new Vivus(uniqid, {start: 'manual', type: 'sync', selfDestroy: true, duration: duration, onReady: function(obj){
var styleElement = document.createElementNS("http://www.w3.org/2000/svg", "style"),
animateStyle = '';
// SVG Fill Based
if( self.options.animated && !self.options.strokeBased || !self.options.animated && color && !self.options.strokeBased ) {
animateStyle = 'stroke-width: 0.1px; fill-opacity: 0; transition: ease fill-opacity 300ms;';
// Set Style on SVG inside object
styleElement.textContent = '#' + uniqid + ' path, #' + uniqid + ' line, #' + uniqid + ' rect, #' + uniqid + ' circle, #' + uniqid + ' polyline { fill: '+ color +'; stroke: '+ color +'; '+ animateStyle + (self.options.svgStyle ? self.options.svgStyle : "") + ' } .finished path { fill-opacity: 1; }';
obj.el.appendChild(styleElement);
}
// SVG Stroke Based
if( self.options.animated && self.options.strokeBased || !self.options.animated && color && self.options.strokeBased ) {
// Set Style on SVG inside object
styleElement.textContent = '#' + uniqid + ' path, #' + uniqid + ' line, #' + uniqid + ' rect, #' + uniqid + ' circle, #' + uniqid + ' polyline { stroke: '+ color +'; ' + (self.options.svgStyle ? self.options.svgStyle : "") + '}';
obj.el.appendChild(styleElement);
}
$.event.trigger('theme.plugin.icon.svg.ready');
}});
// Isn't animated
if( !self.options.animated ) {
setTimeout(function(){
icon.finish();
}, 10);
$el.css({ opacity: 1 });
}
// Animated
if( self.options.animated && $(window).width() > 767 ) {
// First Load
if( $el.visible( true ) ) {
self.startIconAnimation( icon, $el );
} else if( elTopDistance < windowTopDistance ) {
self.startIconAnimation( icon, $el );
}
// On Scroll
$(window).on('scroll', function(){
if( $el.visible( true ) ) {
self.startIconAnimation( icon, $el );
}
});
} else {
$el.css({ opacity: 1 });
icon.finish();
$(window).on('theme.plugin.icon.svg.ready', function(){
setTimeout(function(){
icon.el.setAttribute('class', 'finished');
icon.finish();
}, 300);
});
}
}
});
return this;
},
startIconAnimation: function(icon, $el) {
var self = this;
// Animate for better performance
$({to:0}).animate({to:1}, ((self.options.strokeBased) ? self.options.delay : self.options.delay + 300 ), function() {
$el.css({ opacity: 1 });
});
$({to:0}).animate({to:1}, self.options.delay, function() {
icon.play(1);
setTimeout(function(){
icon.el.setAttribute('class', 'finished');
}, icon.duration * 5 );
});
}
};
// expose to scope
$.extend(theme, {
PluginIcon: PluginIcon
});
// jquery plugin
$.fn.themePluginIcon = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginIcon($this, opts);
}
});
};
}).apply(this, [window.theme, jQuery]);
// Lazy Load
(function(theme, $) {
theme = theme || {};
var instanceName = '__lazyload';
var PluginLazyLoad = function($el, opts) {
return this.initialize($el, opts);
};
PluginLazyLoad.defaults = {
effect: 'show',
appearEffect: '',
imgFluid: true,
appear: function(elements_left, settings) {
},
load: function(elements_left, settings) {
$(this).addClass($.trim('lazy-load-loaded ' + settings.appearEffect)).css({
'animation-duration': '1s'
});
}
};
PluginLazyLoad.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build()
.events();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginLazyLoad.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.lazyload))) {
return this;
}
var self = this;
// Add height on images based on
height attribute. This prevent some issues like isotope position, etc...
if( self.options.wrapper.attr('height') ) {
self.options.wrapper.height( self.options.wrapper.attr('height') );
}
self.options.wrapper.lazyload(this.options);
return this;
},
events: function() {
var self = this;
if( self.options.imgFluid && self.options.wrapper.is('img') ) {
self.options.wrapper.on('appear', function(){
setTimeout(function(){
self.options.wrapper.addClass('img-fluid');
setTimeout(function(){
self.options.wrapper.css('height', '');
if( self.options.wrapper.closest('.isotope-item') ) {
self.options.wrapper.closest('.isotope-item').closest('.sort-destination').isotope('layout');
}
}, 700);
}, 500);
});
}
return this;
}
};
// expose to scope
$.extend(theme, {
PluginLazyLoad: PluginLazyLoad
});
// jquery plugin
$.fn.themePluginLazyLoad = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginLazyLoad($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Lightbox
(function(theme, $) {
theme = theme || {};
var instanceName = '__lightbox';
var PluginLightbox = function($el, opts) {
return this.initialize($el, opts);
};
PluginLightbox.defaults = {
tClose: 'Close (Esc)', // Alt text on close button
tLoading: 'Loading...', // Text that is displayed during loading. Can contain %curr% and %total% keys
gallery: {
tPrev: 'Previous (Left arrow key)', // Alt text on left arrow
tNext: 'Next (Right arrow key)', // Alt text on right arrow
tCounter: '%curr% of %total%' // Markup for "1 of 7" counter
},
image: {
tError: 'The image could not be loaded.' // Error message when image could not be loaded
},
ajax: {
tError: 'The content could not be loaded.' // Error message when ajax request failed
},
callbacks: {
open: function() {
$('html').addClass('lightbox-opened');
},
close: function() {
$('html').removeClass('lightbox-opened');
}
}
};
PluginLightbox.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginLightbox.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.magnificPopup))) {
return this;
}
this.options.wrapper.magnificPopup(this.options);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginLightbox: PluginLightbox
});
// jquery plugin
$.fn.themePluginLightbox = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginLightbox($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Loading Overlay
(function(theme, $) {
'use strict';
theme = theme || {};
var loadingOverlayTemplate = [
''
].join('');
var LoadingOverlay = function( $wrapper, options ) {
return this.initialize( $wrapper, options );
};
LoadingOverlay.prototype = {
options: {
css: {},
hideDelay: 500
},
initialize: function( $wrapper, options ) {
this.$wrapper = $wrapper;
this
.setVars()
.setOptions( options )
.build()
.events();
this.$wrapper.data( 'loadingOverlay', this );
},
setVars: function() {
this.$overlay = this.$wrapper.find('.loading-overlay');
return this;
},
setOptions: function( options ) {
if ( !this.$overlay.get(0) ) {
this.matchProperties();
}
this.options = $.extend( true, {}, this.options, options, theme.fn.getOptions(this.$wrapper.data('plugin-options')) );
this.loaderClass = this.getLoaderClass( this.options.css.backgroundColor );
return this;
},
build: function() {
if ( !this.$overlay.closest(document.documentElement).get(0) ) {
if ( !this.$cachedOverlay ) {
this.$overlay = $( loadingOverlayTemplate ).clone();
if ( this.options.css ) {
this.$overlay.css( this.options.css );
this.$overlay.find( '.loader' ).addClass( this.loaderClass );
}
} else {
this.$overlay = this.$cachedOverlay.clone();
}
this.$wrapper.append( this.$overlay );
}
if ( !this.$cachedOverlay ) {
this.$cachedOverlay = this.$overlay.clone();
}
return this;
},
events: function() {
var _self = this;
if ( this.options.startShowing ) {
_self.show();
}
if ( this.$wrapper.is('body') || this.options.hideOnWindowLoad ) {
$( window ).on( 'load error', function() {
_self.hide();
});
}
if ( this.options.listenOn ) {
$( this.options.listenOn )
.on( 'loading-overlay:show beforeSend.ic', function( e ) {
e.stopPropagation();
_self.show();
})
.on( 'loading-overlay:hide complete.ic', function( e ) {
e.stopPropagation();
_self.hide();
});
}
this.$wrapper
.on( 'loading-overlay:show beforeSend.ic', function( e ) {
if ( e.target === _self.$wrapper.get(0) ) {
e.stopPropagation();
_self.show();
return true;
}
return false;
})
.on( 'loading-overlay:hide complete.ic', function( e ) {
if ( e.target === _self.$wrapper.get(0) ) {
e.stopPropagation();
_self.hide();
return true;
}
return false;
});
return this;
},
show: function() {
this.build();
this.position = this.$wrapper.css( 'position' ).toLowerCase();
if ( this.position != 'relative' || this.position != 'absolute' || this.position != 'fixed' ) {
this.$wrapper.css({
position: 'relative'
});
}
this.$wrapper.addClass( 'loading-overlay-showing' );
},
hide: function() {
var _self = this;
setTimeout(function() {
_self.$wrapper.removeClass( 'loading-overlay-showing' );
if ( this.position != 'relative' || this.position != 'absolute' || this.position != 'fixed' ) {
_self.$wrapper.css({ position: '' });
}
$(window).trigger('loading.overlay.ready');
}, _self.options.hideDelay);
},
matchProperties: function() {
var i,
l,
properties;
properties = [
'backgroundColor',
'borderRadius'
];
l = properties.length;
for( i = 0; i < l; i++ ) {
var obj = {};
obj[ properties[ i ] ] = this.$wrapper.css( properties[ i ] );
$.extend( this.options.css, obj );
}
},
getLoaderClass: function( backgroundColor ) {
if ( !backgroundColor || backgroundColor === 'transparent' || backgroundColor === 'inherit' ) {
return 'black';
}
var hexColor,
r,
g,
b,
yiq;
var colorToHex = function( color ){
var hex,
rgb;
if( color.indexOf('#') >- 1 ){
hex = color.replace('#', '');
} else {
rgb = color.match(/\d+/g);
hex = ('0' + parseInt(rgb[0], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2);
}
if ( hex.length === 3 ) {
hex = hex + hex;
}
return hex;
};
hexColor = colorToHex( backgroundColor );
r = parseInt( hexColor.substr( 0, 2), 16 );
g = parseInt( hexColor.substr( 2, 2), 16 );
b = parseInt( hexColor.substr( 4, 2), 16 );
yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
return ( yiq >= 128 ) ? 'black' : 'white';
}
};
// expose to scope
$.extend(theme, {
LoadingOverlay: LoadingOverlay
});
// expose as a jquery plugin
$.fn.loadingOverlay = function( opts ) {
return this.each(function() {
var $this = $( this );
var loadingOverlay = $this.data( 'loadingOverlay' );
if ( loadingOverlay ) {
return loadingOverlay;
} else {
var options = opts || $this.data( 'loading-overlay-options' ) || {};
return new LoadingOverlay( $this, options );
}
});
}
// auto init
$('[data-loading-overlay]').loadingOverlay();
}).apply(this, [window.theme, jQuery]);
// Masonry
(function(theme, $) {
theme = theme || {};
var instanceName = '__masonry';
var PluginMasonry = function($el, opts) {
return this.initialize($el, opts);
};
PluginMasonry.defaults = {
};
PluginMasonry.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginMasonry.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.isotope))) {
return this;
}
var self = this,
$window = $(window);
self.$loader = false;
if (self.options.wrapper.parents('.masonry-loader').get(0)) {
self.$loader = self.options.wrapper.parents('.masonry-loader');
self.createLoader();
}
self.options.wrapper.one('layoutComplete', function(event, laidOutItems) {
self.removeLoader();
});
self.options.wrapper.waitForImages(function() {
self.options.wrapper.isotope(self.options);
});
// IE10/11 fix
if( $('html').hasClass('ie10') || $('html').hasClass('ie11') ) {
var padding = parseInt( self.options.wrapper.children().css('padding-left') ) + parseInt( self.options.wrapper.children().css('padding-right') );
}
$(window).on('resize', function() {
setTimeout(function() {
self.options.wrapper.isotope('layout');
}, 300);
});
setTimeout(function() {
self.removeLoader();
}, 3000);
return this;
},
createLoader: function() {
var self = this;
var loaderTemplate = [
''
].join('');
self.$loader.append(loaderTemplate);
return this;
},
removeLoader: function() {
var self = this;
if (self.$loader) {
self.$loader.removeClass('masonry-loader-showing');
setTimeout(function() {
self.$loader.addClass('masonry-loader-loaded');
}, 300);
}
}
};
// expose to scope
$.extend(theme, {
PluginMasonry: PluginMasonry
});
// jquery plugin
$.fn.themePluginMasonry = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginMasonry($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Match Height
(function(theme, $) {
theme = theme || {};
var instanceName = '__matchHeight';
var PluginMatchHeight = function($el, opts) {
return this.initialize($el, opts);
};
PluginMatchHeight.defaults = {
byRow: true,
property: 'height',
target: null,
remove: false
};
PluginMatchHeight.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginMatchHeight.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.matchHeight))) {
return this;
}
var self = this;
self.options.wrapper.matchHeight(self.options);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginMatchHeight: PluginMatchHeight
});
// jquery plugin
$.fn.themePluginMatchHeight = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginMatchHeight($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Parallax
(function(theme, $) {
theme = theme || {};
var instanceName = '__parallax';
var PluginParallax = function($el, opts) {
return this.initialize($el, opts);
};
PluginParallax.defaults = {
speed: 1.5,
horizontalPosition: '50%',
offset: 0,
parallaxHeight: '180%',
scrollableParallax: false,
scrollableParallaxMinWidth: 991,
startOffset: 7,
transitionDuration: '200ms',
cssProperty: 'width',
cssValueStart: 40,
cssValueEnd: 100,
cssValueUnit: 'vw'
};
PluginParallax.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginParallax.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$window = $(window),
offset,
yPos,
bgpos,
background,
rotateY;
// Scrollable
if( self.options.scrollableParallax && $(window).width() > self.options.scrollableParallaxMinWidth ) {
var $scrollableWrapper = self.options.wrapper.find('.scrollable-parallax-wrapper');
if( $scrollableWrapper.get(0) ) {
var progress = ( $(window).scrollTop() > ( self.options.wrapper.offset().top + $(window).outerHeight() ) ) ? self.options.cssValueEnd : self.options.cssValueStart,
cssValueUnit = self.options.cssValueUnit ? self.options.cssValueUnit : '';
$scrollableWrapper.css({
'background-image' : 'url(' + self.options.wrapper.data('image-src') + ')',
'background-size' : 'cover',
'background-position' : 'center',
'background-attachment' : 'fixed',
'transition' : 'ease '+ self.options.cssProperty +' '+ self.options.transitionDuration,
'width' : progress + '%'
});
$(window).on('scroll', function(e){
if( self.options.wrapper.visible( true ) ) {
var $window = $(window),
scrollTop = $window.scrollTop(),
elementOffset = self.options.wrapper.offset().top,
currentElementOffset = (elementOffset - scrollTop);
var scrollPercent = Math.abs( +( currentElementOffset - $window.height() ) / (self.options.startOffset ? self.options.startOffset : 7) );
// Increment progress value according scroll position
if( scrollPercent <= self.options.cssValueEnd && progress <= self.options.cssValueEnd ) {
progress = self.options.cssValueStart + scrollPercent;
}
// Adjust CSS end value
if( progress > self.options.cssValueEnd ) {
progress = self.options.cssValueEnd;
}
// Adjust CSS start value
if( progress < self.options.cssValueStart ) {
progress = self.options.cssValueStart;
}
var styles = {}
styles[self.options.cssProperty] = progress + cssValueUnit;
$scrollableWrapper.css(styles);
}
});
}
return;
}
// Create Parallax Element
if( self.options.fadeIn ) {
background = $('');
} else {
background = $('');
}
// Set Style for Parallax Element
background.css({
'background-image' : 'url(' + self.options.wrapper.data('image-src') + ')',
'background-size' : 'cover',
'position' : 'absolute',
'top' : 0,
'left' : 0,
'width' : '100%',
'height' : self.options.parallaxHeight
});
// Add Parallax Element on DOM
self.options.wrapper.prepend(background);
// Set Overlfow Hidden and Position Relative to Parallax Wrapper
self.options.wrapper.css({
'position' : 'relative',
'overflow' : 'hidden'
});
// Parallax Effect on Scroll & Resize
var parallaxEffectOnScrolResize = function() {
$window.on('scroll resize', function() {
offset = self.options.wrapper.offset();
yPos = -($window.scrollTop() - (offset.top - 100)) / ((self.options.speed + 2 ));
plxPos = (yPos < 0) ? Math.abs(yPos) : -Math.abs(yPos);
rotateY = ( $('html[dir="rtl"]').get(0) ) ? ' rotateY(180deg)' : ''; // RTL
background.css({
'transform' : 'translate3d(0, '+ ( (plxPos - 50) + (self.options.offset) ) +'px, 0)' + rotateY,
'background-position-x' : self.options.horizontalPosition
});
});
$window.trigger('scroll');
}
if (!$.browser.mobile) {
parallaxEffectOnScrolResize();
} else {
if( self.options.enableOnMobile == true ) {
parallaxEffectOnScrolResize();
} else {
self.options.wrapper.addClass('parallax-disabled');
}
}
return this;
}
};
// expose to scope
$.extend(theme, {
PluginParallax: PluginParallax
});
// jquery plugin
$.fn.themePluginParallax = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginParallax($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Progress Bar
(function(theme, $) {
theme = theme || {};
var instanceName = '__progressBar';
var PluginProgressBar = function($el, opts) {
return this.initialize($el, opts);
};
PluginProgressBar.defaults = {
accX: 0,
accY: -50,
delay: 1
};
PluginProgressBar.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginProgressBar.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.appear))) {
return this;
}
var self = this,
$el = this.options.wrapper,
delay = 1;
$el.appear(function() {
delay = ($el.attr('data-appear-animation-delay') ? $el.attr('data-appear-animation-delay') : self.options.delay);
$el.addClass($el.attr('data-appear-animation'));
setTimeout(function() {
$el.animate({
width: $el.attr('data-appear-progress-animation')
}, 1500, 'easeOutQuad', function() {
$el.find('.progress-bar-tooltip').animate({
opacity: 1
}, 500, 'easeOutQuad');
});
}, delay);
}, {
accX: self.options.accX,
accY: self.options.accY
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginProgressBar: PluginProgressBar
});
// jquery plugin
$.fn.themePluginProgressBar = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginProgressBar($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Revolution Slider
(function(theme, $) {
theme = theme || {};
var instanceName = '__revolution';
var PluginRevolutionSlider = function($el, opts) {
return this.initialize($el, opts);
};
PluginRevolutionSlider.defaults = {
sliderType: 'standard',
sliderLayout: 'fullwidth',
delay: 9000,
gridwidth: 1170,
gridheight: 500,
spinner: 'spinner3',
disableProgressBar: 'on',
parallax: {
type: 'off',
bgparallax: 'off'
},
navigation: {
keyboardNavigation: 'off',
keyboard_direction: 'horizontal',
mouseScrollNavigation: 'off',
onHoverStop: 'off',
touch: {
touchenabled: 'on',
swipe_threshold: 75,
swipe_min_touches: 1,
swipe_direction: 'horizontal',
drag_block_vertical: false
},
arrows: {
enable: true,
hide_onmobile: false,
hide_under: 0,
hide_onleave: true,
hide_delay: 200,
hide_delay_mobile: 1200,
left: {
h_align: 'left',
v_align: 'center',
h_offset: 30,
v_offset: 0
},
right: {
h_align: 'right',
v_align: 'center',
h_offset: 30,
v_offset: 0
}
}
},
/* ADDONS */
addOnTypewriter: {
enable: false
},
addOnWhiteboard: {
enable: false,
},
whiteboard: {
movehand: {
src: '../vendor/rs-plugin/revolution-addons/whiteboard/assets/images/hand_point_right.png',
width: 400,
height: 1000,
handtype: 'right',
transform: {
transformX: 50,
transformY: 50
},
jittering: {
distance: '80',
distance_horizontal: '100',
repeat: '5',
offset: '10',
offset_horizontal: '0'
},
rotation: {
angle: '10',
repeat: '3'
}
},
writehand: {
src: '../vendor/rs-plugin/revolution-addons/whiteboard/assets/images/write_right_angle.png',
width: 572,
height: 691,
handtype: 'right',
transform: {
transformX: 50,
transformY: 50
},
jittering: {
distance: '80',
distance_horizontal: '100',
repeat: '5',
offset: '10',
offset_horizontal: '0'
},
rotation:{
angle: '10',
repeat: '3'
}
}
},
addOnParticles: {
enable: false
},
particles: {
startSlide: "first",
endSlide: "last",
zIndex: "1",
particles: {
number: {value: 80}, color: {value: "#ffffff"},
shape: {
type: "circle", stroke: {width: 0, color: "#ffffff", opacity: 1},
image: {src: ""}
},
opacity: {value: 0.5, random: true, min: 0.25, anim: {enable: false, speed: 3, opacity_min: 0, sync: false}},
size: {value: 2, random: false, min: 30, anim: {enable: false, speed: 40, size_min: 1, sync: false}},
line_linked: {enable: true, distance: 150, color: "#ffffff", opacity: 0.4, width: 1},
move: {enable: true, speed: 6, direction: "none", random: true, min_speed: 6, straight: false, out_mode: "out"}
},
interactivity: {
events: {onhover: {enable: false, mode: "repulse"}, onclick: {enable: false, mode: "repulse"}},
modes: {grab: {distance: 400, line_linked: {opacity: 0.5}}, bubble: {distance: 400, size: 40, opacity: 0.4}, repulse: {distance: 200}}
}
},
addOnCountdown: {
enable: false,
targetdate: new Date().getTime() + 864000000, // http://www.freeformatter.com/epoch-timestamp-to-date-converter.html
slidechanges: [{days: 0, hours: 0, minutes: 0, seconds: 0, slide: 2}]
},
addOnSlicey: {
enable: false
},
addOnFilmstrip: {
enable: false
},
addOnBeforeAfter : {
enable: false,
options: {
cursor: "move",
carousel: false,
arrowStyles: {
leftIcon: "fa-icon-caret-left",
rightIcon: "fa-icon-caret-right",
topIcon: "fa-icon-caret-up",
bottomIcon: "fa-icon-caret-down",
size: "35",
color: "#ffffff",
spacing: "10",
bgColor: "transparent",
padding: "0",
borderRadius: "0"
},
dividerStyles: {
width: "1",
color: "rgba(255, 255, 255, 0.5)"
}
}
},
addOnPanorama: {
enable: false
},
addOnRevealer: {
enable: false,
},
revealer: {
direction: "open_horizontal",
color: "#ffffff",
duration: "1500",
delay: "0",
easing: "Power2.easeInOut",
overlay_enabled: true,
overlay_color: "#000000",
overlay_duration: "1500",
overlay_delay: "0",
overlay_easing: "Power2.easeInOut",
spinner: "1",
spinnerColor: "#006dd2",
spinnerHtml: "<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div><\/div \/>"
},
addOnDuotone: {
enable: false
},
addOnBubblemorph: {
enable: false
},
addOnDistortion: {
enable: false
}
};
PluginRevolutionSlider.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build()
.events();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginRevolutionSlider.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.revolution))) {
return this;
}
// Single Slider Class
if(this.options.wrapper.find('> ul > li').length == 1) {
this.options.wrapper.addClass('slider-single-slide');
// Remove Bullets
// this.options.navigation.bullets.enable = false;
$.extend(this.options.navigation, {
bullets: {
enable: false
}
});
}
// Full Screen Class
if(this.options.sliderLayout == 'fullscreen') {
this.options.wrapper.closest('.slider-container').addClass('fullscreen-slider');
}
// Initialize Revolution Slider
this.options.wrapper.revolution(this.options);
// Addon Init - Typewriter
if(this.options.addOnTypewriter.enable) {
RsTypewriterAddOn($, this.options.wrapper);
}
// Addon Init - Whiteboard
if(this.options.addOnWhiteboard.enable) {
this.options.wrapper.rsWhiteBoard();
}
// Addon Init - Particles
if(this.options.addOnParticles.enable) {
RsParticlesAddOn(this.options.wrapper);
}
// Addon Init - Countdown
if(this.options.addOnCountdown.enable) {
tp_countdown(this.options.wrapper, this.options.addOnCountdown.targetdate, this.options.addOnCountdown.slidechanges);
}
// Addon Init - Slicey
if(this.options.addOnSlicey.enable) {
this.options.wrapper.revSliderSlicey();
}
// Addon Init - Filmstrip
if(this.options.addOnFilmstrip.enable) {
RsFilmstripAddOn($, this.options.wrapper, '../vendor/rs-plugin/revolution-addons/filmstrip/', false);
}
// Addon Init - Before After
if(this.options.addOnBeforeAfter.enable) {
RevSliderBeforeAfter($, this.options.wrapper, this.options.addOnBeforeAfter.options);
}
// Addon Init - Panorama
if(this.options.addOnPanorama.enable) {
RsAddonPanorama($, this.options.wrapper);
}
// Addon Init - Revealer
if(this.options.addOnRevealer.enable) {
RsRevealerAddOn($, this.options.wrapper, this.options.revealer.spinnerHtml);
}
// Addon Init - Duotone
if(this.options.addOnDuotone.enable) {
RsAddonDuotone($, this.options.wrapper, true, "cubic-bezier(0.645, 0.045, 0.355, 1.000)", "1000");
}
// Addon Init - Bubblemorph
if(this.options.addOnBubblemorph.enable) {
BubbleMorphAddOn($, this.options.wrapper, false);
}
// Addon Init - Distortion
if(this.options.addOnDistortion.enable) {
RsLiquideffectAddOn($, this.options.wrapper);
}
return this;
},
events: function() {
return this;
}
};
// expose to scope
$.extend(theme, {
PluginRevolutionSlider: PluginRevolutionSlider
});
// jquery plugin
$.fn.themePluginRevolutionSlider = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginRevolutionSlider($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Scroll to Top
(function(theme, $) {
theme = theme || {};
$.extend(theme, {
PluginScrollToTop: {
defaults: {
wrapper: $('body'),
offset: 150,
buttonClass: 'scroll-to-top',
iconClass: 'fas fa-chevron-up',
delay: 1000,
visibleMobile: false,
label: false,
easing: 'easeOutBack'
},
initialize: function(opts) {
initialized = true;
// Don't initialize if the page has Section Scroll
if( $('body[data-plugin-section-scroll]').get(0) ) {
return;
}
this
.setOptions(opts)
.build()
.events();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts);
return this;
},
build: function() {
var self = this,
$el;
// Base HTML Markup
$el = $('')
.addClass(self.options.buttonClass)
.attr({
'href': '#',
})
.append(
$('')
.addClass(self.options.iconClass)
);
// Visible Mobile
if (!self.options.visibleMobile) {
$el.addClass('hidden-mobile');
}
// Label
if (self.options.label) {
$el.append(
$('').html(self.options.label)
);
}
this.options.wrapper.append($el);
this.$el = $el;
return this;
},
events: function() {
var self = this,
_isScrolling = false;
// Click Element Action
self.$el.on('click', function(e) {
e.preventDefault();
$('body, html').animate({
scrollTop: 0
}, self.options.delay, self.options.easing);
return false;
});
// Show/Hide Button on Window Scroll event.
$(window).scroll(function() {
if (!_isScrolling) {
_isScrolling = true;
if ($(window).scrollTop() > self.options.offset) {
self.$el.stop(true, true).addClass('visible');
_isScrolling = false;
} else {
self.$el.stop(true, true).removeClass('visible');
_isScrolling = false;
}
}
});
return this;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Scrollable
(function(theme, $) {
theme = theme || {};
var instanceName = '__scrollable';
var PluginScrollable = function($el, opts) {
return this.initialize($el, opts);
};
PluginScrollable.updateModals = function() {
PluginScrollable.updateBootstrapModal();
};
PluginScrollable.updateBootstrapModal = function() {
var updateBoostrapModal;
updateBoostrapModal = typeof $.fn.modal !== 'undefined';
updateBoostrapModal = updateBoostrapModal && typeof $.fn.modal.Constructor !== 'undefined';
updateBoostrapModal = updateBoostrapModal && typeof $.fn.modal.Constructor.prototype !== 'undefined';
updateBoostrapModal = updateBoostrapModal && typeof $.fn.modal.Constructor.prototype.enforceFocus !== 'undefined';
if ( !updateBoostrapModal ) {
return false;
}
var originalFocus = $.fn.modal.Constructor.prototype.enforceFocus;
$.fn.modal.Constructor.prototype.enforceFocus = function() {
originalFocus.apply( this );
var $scrollable = this.$element.find('.scrollable');
if ( $scrollable ) {
if ( $.isFunction($.fn['themePluginScrollable']) ) {
$scrollable.themePluginScrollable();
}
if ( $.isFunction($.fn['nanoScroller']) ) {
$scrollable.nanoScroller();
}
}
};
};
PluginScrollable.defaults = {
contentClass: 'scrollable-content',
paneClass: 'scrollable-pane',
sliderClass: 'scrollable-slider',
alwaysVisible: true,
preventPageScrolling: true
};
PluginScrollable.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginScrollable.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
this.options.wrapper.nanoScroller(this.options);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginScrollable: PluginScrollable
});
// jquery plugin
$.fn.themePluginScrollable = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginScrollable($this, opts);
}
});
};
$(function() {
PluginScrollable.updateModals();
});
}).apply(this, [window.theme, jQuery]);
// Section Scroll
(function(theme, $) {
theme = theme || {};
var instanceName = '__sectionScroll';
var PluginSectionScroll = function($el, opts) {
return this.initialize($el, opts);
};
PluginSectionScroll.defaults = {
targetClass: '.section',
dotsNav: true,
changeHeaderLogo: true,
headerLogoDark: 'img/logo-default-slim.png',
headerLogoLight: 'img/logo-default-slim-dark.png'
};
PluginSectionScroll.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build()
.events();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginSectionScroll.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper;
// Check type of header and change the target for header (by change header color purpose)
if( $('html').hasClass('side-header-overlay-full-screen') ) {
self.$header = $('.sticky-wrapper');
} else {
self.$header = $('#header');
}
// Turn the section full height or not depeding on the content size
self.updateSectionsHeight();
// Wrap all sections in a section wrapper
$( this.options.targetClass ).wrap('');
// Set the section wrapper height
$('.section-wrapper').each(function(){
$(this).height( $(this).find('.section-scroll').outerHeight() );
});
// Add active class to the first section on page load
$('.section-wrapper').first().addClass('active');
var flag = false,
scrollableFlag = false,
touchDirection = '',
touchstartY = 0,
touchendY = 0;
$(window).on('touchstart', function(event) {
touchstartY = event.changedTouches[0].screenY;
});
var wheelEvent = 'onwheel' in document ? 'wheel' : document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';
if( $(window).width() < 992 && $('html').hasClass('touch') ) {
wheelEvent = 'onwheel' in document ? 'wheel touchend' : document.onmousewheel !== undefined ? 'mousewheel touchend' : 'DOMMouseScroll touchend';
}
if( $(window).width() < 992 ) {
$('html').removeClass('overflow-hidden');
$(window).on('scroll', function(){
var index = 0;
$('.section-scroll').each(function(){
if( $(this).offset().top <= $(window).scrollTop() + 50 ) {
var $currentSection2 = $('.section-wrapper').eq( index ).find('.section-scroll');
$('.section-scroll-dots-navigation > ul > li').removeClass('active');
$('.section-scroll-dots-navigation > ul > li').eq( index ).addClass('active');
$(window).trigger({
type: 'section.scroll.mobile.change.header.color',
currentSection: $currentSection2
});
}
index++;
});
});
$(window).on('section.scroll.mobile.change.header.color', function(e){
if( typeof e.currentSection == 'undefined' ) {
return;
}
var $currentSection = e.currentSection,
headerColor = $currentSection.data('section-scroll-header-color');
$('#header .header-nav').removeClass('header-nav-light-text header-nav-dark-text').addClass('header-nav-' + headerColor + '-text');
$('#header .header-nav-features').removeClass('header-nav-features-dark header-nav-features-light').addClass('header-nav-features-' + headerColor);
$('#header .header-social-icons').removeClass('social-icons-icon-dark social-icons-icon-light').addClass('social-icons-icon-' + headerColor);
// Change Logo
if( self.options.changeHeaderLogo && headerColor != undefined ) {
if( headerColor == 'light' ) {
$('#header .header-logo img').attr('src', self.options.headerLogoLight);
} else if( headerColor == 'dark' ) {
$('#header .header-logo img').attr('src', self.options.headerLogoDark);
}
}
self.$header.css({
opacity: 1
});
});
}
$(window).on(wheelEvent, function(e){
if( $(window).width() < 992 ) {
return;
}
if( $(window).width() < 992 && $('html').hasClass('touch') ) {
if( $(e.target).closest('.section-scroll-dots-navigation').get(0) || $(e.target).closest('.header-body').get(0) || $(e.target).closest('.owl-carousel').get(0) ) {
return;
}
}
// Side Header Overlay Full Screen
if( $('html.side-header-overlay-full-screen.side-header-hide').get(0) ) {
return;
}
var wheelDirection = e.originalEvent.wheelDelta == undefined ? e.originalEvent.deltaY > 0 : e.originalEvent.wheelDelta < 0;
if( $(window).width() < 992 && $('html').hasClass('touch') ) {
touchendY = event.changedTouches[0].screenY;
if( touchendY <= touchstartY ) {
touchDirection = 'up';
}
if( touchendY >= touchstartY ) {
touchDirection = 'down';
}
if( touchendY == touchstartY ) {
return;
}
}
var $currentSection = $('.section-wrapper').eq( self.getCurrentIndex() ).find('.section-scroll'),
$nextSection = self.getNextSection(wheelDirection, touchDirection),
nextSectionOffsetTop;
// If is the last section, then change the offsetTop value
if( self.getCurrentIndex() == $('.section-wrapper').length - 1 ) {
nextSectionOffsetTop = $(document).height();
} else {
nextSectionOffsetTop = $nextSection.offset().top;
}
if( $(window).width() < 992 && $('html').hasClass('touch') ) {
setTimeout(function(){
if( $('.section-wrapper').eq( self.getCurrentIndex() ).find('.section-scroll').hasClass('section-scroll-scrollable') ) {
$('html').removeClass('overflow-hidden');
} else {
$('html').addClass('overflow-hidden');
}
}, 1200);
}
// For non full height sections
if( $currentSection.hasClass('section-scroll-scrollable') ) {
if( !flag && !scrollableFlag ) {
// Scroll Direction
if(wheelDirection || touchDirection == 'up') {
if( ( $(window).scrollTop() + $(window).height() ) >= nextSectionOffsetTop ) {
flag = true;
setTimeout(function(){
$(window).trigger('section.scroll.change.header.color');
setTimeout(function(){
flag = false;
}, 500);
}, 1000);
if( self.getCurrentIndex() == ( $('.section-wrapper').length - 1 ) ) {
return false;
}
// Move to the next section
self.moveTo( $currentSection.offset().top + $currentSection.outerHeight() );
// Change Section Active Class
self.changeSectionActiveState( $nextSection );
self.$header.css({
opacity: 0,
transition: 'ease opacity 500ms'
});
}
if( !$('html').hasClass('touch') ) {
for( var i = 1; i < 100; i++ ) {
$('body, html').scrollTop( $(window).scrollTop() + 1 );
if( ( $(window).scrollTop() + $(window).height() ) >= nextSectionOffsetTop ) {
scrollableFlag = true;
setTimeout(function(){
$(window).trigger('section.scroll.change.header.color');
scrollableFlag = false;
}, 500);
break;
}
}
}
} else {
if( $(window).scrollTop() <= $currentSection.offset().top ) {
flag = true;
setTimeout(function(){
$(window).trigger('section.scroll.change.header.color');
setTimeout(function(){
flag = false;
}, 500);
}, 1000);
if( self.getCurrentIndex() == 0 ) {
return false;
}
// Move to the next section
self.moveTo( $currentSection.offset().top - $(window).height() );
// Change Section Active Class
self.changeSectionActiveState( $nextSection );
self.$header.css({
opacity: 0,
transition: 'ease opacity 500ms'
});
}
if( !$('html').hasClass('touch') ) {
for( var i = 1; i < 100; i++ ) {
$('body, html').scrollTop( $(window).scrollTop() - 1 );
if( $(window).scrollTop() <= $currentSection.offset().top ) {
scrollableFlag = true;
setTimeout(function(){
$(window).trigger('section.scroll.change.header.color');
scrollableFlag = false;
}, 500);
break;
}
}
}
}
// Change Dots Active Class
self.changeDotsActiveState();
return;
}
}
// For full height sections
if( !flag && !scrollableFlag ) {
if(wheelDirection || touchDirection == 'up') {
if( self.getCurrentIndex() == ( $('.section-wrapper').length - 1 ) ) {
return false;
}
// Change Section Active Class
self.changeSectionActiveState( $nextSection );
setTimeout(function(){
// Move to the next section
self.moveTo( $nextSection.offset().top );
}, 150);
} else {
if( self.getCurrentIndex() == 0 ) {
return false;
}
// Change Section Active Class
self.changeSectionActiveState( $nextSection );
if( $nextSection.height() > $(window).height() ) {
// Move to the next section
self.moveTo( $currentSection.offset().top - $(window).height() );
} else {
setTimeout(function(){
// Move to the next section
self.moveTo( $nextSection.offset().top );
}, 150);
}
}
// Change Dots Active Class
self.changeDotsActiveState();
self.$header.css({
opacity: 0,
transition: 'ease opacity 500ms'
});
// Style next section
$nextSection.css({
position: 'relative',
opacity: 1,
'z-index': 1,
transform: 'translate3d(0,0,0) scale(1)'
});
// Style previous section
$currentSection.css({
position: 'fixed',
width: '100%',
top: 0,
left: 0,
opacity: 0,
'z-index': 0,
transform: 'translate3d(0,0,-10px) scale(0.7)',
transition: 'ease transform 600ms, ease opacity 600ms',
});
setTimeout(function(){
$currentSection.css({
position: 'relative',
opacity: 1,
transform: 'translate3d(0,0,-10px) scale(1)'
});
$(window).trigger('section.scroll.change.header.color');
setTimeout(function(){
flag = false;
}, 500);
}, 1000);
flag = true;
}
return;
});
// Dots Navigation
if( this.options.dotsNav ) {
self.dotsNavigation();
}
// First Load
setTimeout(function(){
if( $(window.location.hash).get(0) ) {
self.moveTo( $(window.location.hash).parent().offset().top );
self.changeSectionActiveState( $(window.location.hash) );
// Change Dots Active Class
self.changeDotsActiveState();
self.updateHash( true );
} else {
var hash = window.location.hash,
index = hash.replace('#','');
if( !hash ) {
index = 1;
}
self.moveTo( $('.section-wrapper').eq( index - 1 ).offset().top );
self.changeSectionActiveState( $('.section-wrapper').eq( index - 1 ).find('.section-scroll') );
// Change Dots Active Class
self.changeDotsActiveState();
self.updateHash( true );
}
$(window).trigger('section.scroll.ready');
}, 500);
return this;
},
updateSectionsHeight: function() {
var self = this;
$('.section-scroll').css({ height: '' });
$('.section-scroll').each(function(){
if( $(this).outerHeight() < ( $(window).height() + 3 ) ) {
$(this).css({ height: '100vh' });
} else {
$(this).addClass('section-scroll-scrollable');
}
});
// Set the section wrapper height
$('.section-wrapper').each(function(){
$(this).height( $(this).find('.section-scroll').outerHeight() );
});
return this;
},
updateHash: function( first_load ){
var self = this;
if( !window.location.hash ) {
window.location.hash = 1;
} else {
if(!first_load) {
var $section = $('.section-wrapper').eq( self.getCurrentIndex() ).find('.section-scroll'),
section_id = $section.attr('id') ? $section.attr('id') : $section.parent().index() + 1;
window.location.hash = section_id;
}
}
return this;
},
getCurrentIndex: function() {
var self = this,
currentIndex = 0;
currentIndex = $('.section-wrapper.active').index();
return currentIndex;
},
moveTo: function( $scrollTopValue, first_load ) {
var self = this;
$('body, html').animate({
scrollTop: $scrollTopValue
}, 1000, 'easeOutQuint');
setTimeout(function(){
self.updateHash();
}, 500);
return this;
},
getNextSection: function(wheelDirection, touchDirection) {
var self = this,
$nextSection = '';
// Scroll Direction
if(wheelDirection || touchDirection == 'up') {
$nextSection = $('.section-wrapper').eq( self.getCurrentIndex() + 1 ).find('.section-scroll');
} else {
$nextSection = $('.section-wrapper').eq( self.getCurrentIndex() - 1 ).find('.section-scroll');
}
return $nextSection;
},
changeSectionActiveState: function( $nextSection ) {
var self = this;
$('.section-wrapper').removeClass('active');
$nextSection.parent().addClass('active');
return this;
},
changeDotsActiveState: function() {
var self = this;
$('.section-scroll-dots-navigation > ul > li').removeClass('active');
$('.section-scroll-dots-navigation > ul > li').eq( self.getCurrentIndex() ).addClass('active');
return this;
},
dotsNavigation: function() {
var self = this;
var dotsNav = $(''),
currentSectionIndex = self.getCurrentIndex();
if( self.options.dotsClass ) {
dotsNav.addClass( self.options.dotsClass );
}
for( var i = 0; i < $('.section-scroll').length; i++ ) {
var title = $('.section-wrapper').eq( i ).find('.section-scroll').data('section-scroll-title');
dotsNav.find('> ul').append( ''+ title +'' );
}
$('.body').append( dotsNav );
dotsNav.find('a[data-nav-id]').on('click touchstart', function(e){
e.preventDefault();
var $this = $(this);
$('.section-scroll').css({
opacity: 0,
transition: 'ease opacity 300ms'
});
self.$header.css({
opacity: 0,
transition: 'ease opacity 500ms'
});
setTimeout(function(){
self.moveTo( $('.section-wrapper').eq( $this.data('nav-id') ).offset().top )
$('.section-wrapper').removeClass('active');
$('.section-wrapper').eq( $this.data('nav-id') ).addClass('active');
$('.section-wrapper').eq( self.getCurrentIndex() ).find('.section-scroll').css({
opacity: 1
});
setTimeout(function(){
$('.section-scroll').css({ opacity: 1 });
$(window).trigger('section.scroll.change.header.color');
}, 500);
if( $(window).width() > 991 ) {
self.changeDotsActiveState();
}
}, 500);
});
return this;
},
events: function() {
var self = this;
$(window).on('section.scroll.ready', function(){
$(window).scrollTop(0);
});
$(window).on('section.scroll.change.header.color', function(){
var headerColor = $('.section-wrapper').eq( self.getCurrentIndex() ).find('.section-scroll').data('section-scroll-header-color');
$('#header .header-nav').removeClass('header-nav-light-text header-nav-dark-text').addClass('header-nav-' + headerColor + '-text');
$('#header .header-nav-features').removeClass('header-nav-features-dark header-nav-features-light').addClass('header-nav-features-' + headerColor);
$('#header .header-social-icons').removeClass('social-icons-icon-dark social-icons-icon-light').addClass('social-icons-icon-' + headerColor);
// Change Logo
if( self.options.changeHeaderLogo && headerColor != undefined ) {
if( headerColor == 'light' ) {
$('#header .header-logo img').attr('src', self.options.headerLogoLight);
} else if( headerColor == 'dark' ) {
$('#header .header-logo img').attr('src', self.options.headerLogoDark);
}
}
self.$header.css({
opacity: 1
});
});
$(document).ready(function(){
$(window).afterResize(function(){
self.updateSectionsHeight();
if( $(window).width() < 992 ) {
$('html').removeClass('overflow-hidden');
}
});
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginSectionScroll: PluginSectionScroll
});
// jquery plugin
$.fn.themePluginSectionScroll = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSectionScroll($this, opts);
}
});
};
}).apply(this, [window.theme, jQuery]);
// Sort
(function(theme, $) {
theme = theme || {};
var instanceName = '__sort';
var PluginSort = function($el, opts) {
return this.initialize($el, opts);
};
PluginSort.defaults = {
useHash: true,
itemSelector: '.isotope-item',
layoutMode: 'masonry',
filter: '*',
hiddenStyle: {
opacity: 0
},
visibleStyle: {
opacity: 1
},
stagger: 30,
isOriginLeft: ($('html').attr('dir') == 'rtl' ? false : true)
};
PluginSort.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginSort.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.isotope))) {
return this;
}
var self = this,
$source = this.options.wrapper,
$destination = $('.sort-destination[data-sort-id="' + $source.attr('data-sort-id') + '"]'),
$window = $(window);
if ($destination.get(0)) {
self.$source = $source;
self.$destination = $destination;
self.$loader = false;
self.setParagraphHeight($destination);
if (self.$destination.parents('.sort-destination-loader').get(0)) {
self.$loader = self.$destination.parents('.sort-destination-loader');
self.createLoader();
}
$destination.attr('data-filter', '*');
$destination.one('layoutComplete', function(event, laidOutItems) {
self.removeLoader();
});
// IE10/11 fix
if( $('html').hasClass('ie10') || $('html').hasClass('ie11') ) {
var padding = parseInt( self.options.wrapper.children().css('padding-left') ) + parseInt( self.options.wrapper.children().css('padding-right') );
}
$destination.waitForImages(function() {
$destination.isotope(self.options);
self.events();
});
setTimeout(function() {
self.removeLoader();
}, 3000);
}
return this;
},
events: function() {
var self = this,
filter = null,
$window = $(window);
self.$source.find('a').click(function(e) {
e.preventDefault();
filter = $(this).parent().data('option-value');
self.setFilter(filter);
if (e.originalEvent) {
self.$source.trigger('filtered');
}
return this;
});
self.$destination.trigger('filtered');
self.$source.trigger('filtered');
if (self.options.useHash) {
self.hashEvents();
}
$window.on('resize', function() {
setTimeout(function() {
self.$destination.isotope('layout');
}, 300);
});
setTimeout(function() {
$window.trigger('resize');
}, 300);
return this;
},
setFilter: function(filter) {
var self = this,
page = false,
currentFilter = filter;
self.$source.find('.active').removeClass('active');
self.$source.find('li[data-option-value="' + filter + '"], li[data-option-value="' + filter + '"] > a').addClass('active');
self.options.filter = currentFilter;
if (self.$destination.attr('data-current-page')) {
currentFilter = currentFilter + '[data-page-rel=' + self.$destination.attr('data-current-page') + ']';
}
self.$destination.attr('data-filter', filter).isotope({
filter: currentFilter
}).one('arrangeComplete', function( event, filteredItems ) {
if (self.options.useHash) {
if (window.location.hash != '' || self.options.filter.replace('.', '') != '*') {
window.location.hash = self.options.filter.replace('.', '');
}
}
$(window).trigger('scroll');
}).trigger('filtered');
return this;
},
hashEvents: function() {
var self = this,
hash = null,
hashFilter = null,
initHashFilter = '.' + location.hash.replace('#', '');
if (initHashFilter != '.' && initHashFilter != '.*') {
self.setFilter(initHashFilter);
}
$(window).on('hashchange', function(e) {
hashFilter = '.' + location.hash.replace('#', '');
hash = (hashFilter == '.' || hashFilter == '.*' ? '*' : hashFilter);
self.setFilter(hash);
});
return this;
},
setParagraphHeight: function() {
var self = this,
minParagraphHeight = 0,
paragraphs = $('span.thumb-info-caption p', self.$destination);
paragraphs.each(function() {
if ($(this).height() > minParagraphHeight) {
minParagraphHeight = ($(this).height() + 10);
}
});
paragraphs.height(minParagraphHeight);
return this;
},
createLoader: function() {
var self = this;
var loaderTemplate = [
''
].join('');
self.$loader.append(loaderTemplate);
return this;
},
removeLoader: function() {
var self = this;
if (self.$loader) {
self.$loader.removeClass('sort-destination-loader-showing');
setTimeout(function() {
self.$loader.addClass('sort-destination-loader-loaded');
}, 300);
}
}
};
// expose to scope
$.extend(theme, {
PluginSort: PluginSort
});
// jquery plugin
$.fn.themePluginSort = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSort($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Star Rating
(function(theme, $) {
theme = theme || {};
var instanceName = '__starrating';
var PluginStarRating = function($el, opts) {
return this.initialize($el, opts);
};
PluginStarRating.defaults = {
theme: 'krajee-fas',
color: 'primary',
showClear: false,
showCaption: false
};
PluginStarRating.prototype = {
initialize: function($el, opts) {
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginStarRating.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.rating))) {
return this;
}
var self = this;
self.options.wrapper
.rating(self.options);
self.options.wrapper.parents('.rating-container')
.addClass('rating-' + self.options.color);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginStarRating: PluginStarRating
});
// jquery plugin
$.fn.themePluginStarRating = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginStarRating($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Sticky
(function(theme, $) {
theme = theme || {};
var instanceName = '__sticky';
var PluginSticky = function($el, opts) {
return this.initialize($el, opts);
};
PluginSticky.defaults = {
minWidth: 991,
activeClass: 'sticky-active'
};
PluginSticky.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build()
.events();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginSticky.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.pin))) {
return this;
}
var self = this,
$window = $(window);
self.options.wrapper.pin(self.options);
if( self.options.wrapper.hasClass('sticky-wrapper-transparent') ) {
self.options.wrapper.parent().addClass('position-absolute w-100');
}
$window.afterResize(function() {
self.options.wrapper.removeAttr('style').removeData('pin');
self.options.wrapper.pin(self.options);
$window.trigger('scroll');
});
// Change Logo Src
if( self.options.wrapper.find('img').attr('data-change-src') ) {
var $logo = self.options.wrapper.find('img'),
logoSrc = $logo.attr('src'),
logoNewSrc = $logo.attr('data-change-src');
self.changeLogoSrc = function(activate) {
if(activate) {
$logo.attr('src', logoNewSrc);
} else {
$logo.attr('src', logoSrc);
}
}
}
return this;
},
events: function() {
var self = this,
$window = $(window),
$logo = self.options.wrapper.find('img'),
sticky_activate_flag = true,
sticky_deactivate_flag = false,
class_to_check = ( self.options.wrapper.hasClass('sticky-wrapper-effect-1') ) ? 'sticky-effect-active' : 'sticky-active';
$window.on('scroll sticky.effect.active', function(){
if( self.options.wrapper.hasClass( class_to_check ) ) {
if( sticky_activate_flag ) {
if( $logo.attr('data-change-src') ) {
self.changeLogoSrc(true);
}
sticky_activate_flag = false;
sticky_deactivate_flag = true;
}
} else {
if( sticky_deactivate_flag ) {
if( $logo.attr('data-change-src') ) {
self.changeLogoSrc(false);
}
sticky_deactivate_flag = false;
sticky_activate_flag = true;
}
}
});
var is_backing = false;
if( self.options.stickyStartEffectAt ) {
// First Load
if( self.options.stickyStartEffectAt < $window.scrollTop() ) {
self.options.wrapper.addClass('sticky-effect-active');
$window.trigger('sticky.effect.active');
}
$window.on('scroll', function(){
if( self.options.stickyStartEffectAt < $window.scrollTop() ) {
self.options.wrapper.addClass('sticky-effect-active');
is_backing = true;
$window.trigger('sticky.effect.active');
} else {
if( is_backing ) {
self.options.wrapper.find('.sticky-body').addClass('position-fixed');
is_backing = false;
}
if( $window.scrollTop() == 0 ) {
self.options.wrapper.find('.sticky-body').removeClass('position-fixed');
}
self.options.wrapper.removeClass('sticky-effect-active');
}
});
}
// Refresh Sticky Plugin if click in a data-toggle="collapse"
if( $('[data-toggle="collapse"]').get(0) ) {
$('[data-toggle="collapse"]').on('click', function(){
setTimeout(function(){
self.build();
$(window).trigger('scroll');
}, 1000);
});
}
}
};
// expose to scope
$.extend(theme, {
PluginSticky: PluginSticky
});
// jquery plugin
$.fn.themePluginSticky = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSticky($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Toggle
(function(theme, $) {
theme = theme || {};
var instanceName = '__toggle';
var PluginToggle = function($el, opts) {
return this.initialize($el, opts);
};
PluginToggle.defaults = {
duration: 350,
isAccordion: false
};
PluginToggle.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginToggle.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$wrapper = this.options.wrapper,
$items = $wrapper.find('> .toggle'),
$el = null;
$items.each(function() {
$el = $(this);
if ($el.hasClass('active')) {
$el.find('> p').addClass('preview-active');
$el.find('> .toggle-content').slideDown(self.options.duration);
}
self.events($el);
});
if (self.options.isAccordion) {
self.options.duration = self.options.duration / 2;
}
return this;
},
events: function($el) {
var self = this,
previewParCurrentHeight = 0,
previewParAnimateHeight = 0,
toggleContent = null;
$el.find('> label, > .toggle-title').click(function(e) {
var $this = $(this),
parentSection = $this.parent(),
parentWrapper = $this.parents('.toggle'),
previewPar = null,
closeElement = null;
if (self.options.isAccordion && typeof(e.originalEvent) != 'undefined') {
closeElement = parentWrapper.find('.toggle.active > label, .toggle.active > .toggle-title');
if (closeElement[0] == $this[0]) {
return;
}
}
parentSection.toggleClass('active');
// Preview Paragraph
if (parentSection.find('> p').get(0)) {
previewPar = parentSection.find('> p');
previewParCurrentHeight = previewPar.css('height');
previewPar.css('height', 'auto');
previewParAnimateHeight = previewPar.css('height');
previewPar.css('height', previewParCurrentHeight);
}
// Content
toggleContent = parentSection.find('> .toggle-content');
if (parentSection.hasClass('active')) {
$(previewPar).animate({
height: previewParAnimateHeight
}, self.options.duration, function() {
$(this).addClass('preview-active');
});
toggleContent.slideDown(self.options.duration, function() {
if (closeElement) {
closeElement.trigger('click');
}
});
} else {
$(previewPar).animate({
height: 0
}, self.options.duration, function() {
$(this).removeClass('preview-active');
});
toggleContent.slideUp(self.options.duration);
}
});
}
};
// expose to scope
$.extend(theme, {
PluginToggle: PluginToggle
});
// jquery plugin
$.fn.themePluginToggle = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginToggle($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Tweets
(function(theme, $) {
theme = theme || {};
var instanceName = '__tweets';
var PluginTweets = function($el, opts) {
return this.initialize($el, opts);
};
PluginTweets.defaults = {
username: null,
count: 2,
URL: 'php/twitter-feed.php',
iconColor: false
};
PluginTweets.prototype = {
initialize: function($el, opts) {
if ($el.data(instanceName)) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginTweets.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
if (this.options.username == null || this.options.username == '') {
return this;
}
var self = this,
$wrapper = this.options.wrapper;
$.ajax({
type: 'GET',
data: {
twitter_screen_name: self.options.username,
tweets_to_display: self.options.count,
icon_color: self.options.iconColor
},
url: self.options.URL,
}).done(function(html) {
$wrapper.html(html).find('a').attr('target','_blank');
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginTweets: PluginTweets
});
// jquery plugin
$.fn.themePluginTweets = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginTweets($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Validation
(function(theme, $) {
theme = theme || {};
$.extend(theme, {
PluginValidation: {
defaults: {
formClass: 'needs-validation',
validator: {
highlight: function(element) {
$(element)
.addClass('is-invalid')
.removeClass('is-valid')
.parent()
.removeClass('has-success')
.addClass('has-danger');
},
success: function(label, element) {
$(element)
.removeClass('is-invalid')
.addClass('is-valid')
.parent()
.removeClass('has-danger')
.addClass('has-success')
.find('label.error')
.remove();
},
errorPlacement: function(error, element) {
if (element.attr('type') == 'radio' || element.attr('type') == 'checkbox') {
error.appendTo(element.parent().parent());
} else {
error.insertAfter(element);
}
}
},
validateCaptchaURL: 'php/contact-form-verify-captcha.php',
refreshCaptchaURL: 'php/contact-form-refresh-captcha.php'
},
initialize: function(opts) {
initialized = true;
this
.setOptions(opts)
.build();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts);
return this;
},
build: function() {
var self = this;
if (!($.isFunction($.validator))) {
return this;
}
self.addMethods();
self.setMessageGroups();
$.validator.setDefaults(self.options.validator);
$('.' + self.options.formClass).validate();
return this;
},
addMethods: function() {
var self = this;
$.validator.addMethod('captcha', function(value, element, params) {
var captchaValid = false;
$.ajax({
url: self.options.validateCaptchaURL,
type: 'POST',
async: false,
dataType: 'json',
data: {
captcha: $.trim(value)
},
success: function(data) {
if (data.response == 'success') {
captchaValid = true;
}
}
});
if (captchaValid) {
return true;
}
}, '');
// Refresh Captcha
$('#refreshCaptcha').on('click', function(e) {
e.preventDefault();
$.get(self.options.refreshCaptchaURL, function(url) {
$('#captcha-image').attr('src', url);
});
});
},
setMessageGroups: function() {
$('.checkbox-group[data-msg-required], .radio-group[data-msg-required]').each(function() {
var message = $(this).data('msg-required');
$(this).find('input').attr('data-msg-required', message);
});
}
}
});
}).apply(this, [window.theme, jQuery]);
// Video Background
(function(theme, $) {
theme = theme || {};
var instanceName = '__videobackground';
var PluginVideoBackground = function($el, opts) {
return this.initialize($el, opts);
};
PluginVideoBackground.defaults = {
overlay: false,
volume: 1,
playbackRate: 1,
muted: true,
loop: true,
autoplay: true,
position: '50% 50%',
posterType: 'detect'
};
PluginVideoBackground.prototype = {
initialize: function($el, opts) {
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginVideoBackground.defaults, opts, {
path: this.$el.data('video-path'),
wrapper: this.$el
});
return this;
},
build: function() {
if (!($.isFunction($.fn.vide)) || (!this.options.path)) {
return this;
}
if (this.options.overlay) {
var overlayClass = this.options.overlayClass;
this.options.wrapper.prepend(
$('').addClass(overlayClass)
);
}
this.options.wrapper
.vide(this.options.path, this.options)
.first().css('z-index', 0);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginVideoBackground: PluginVideoBackground
});
// jquery plugin
$.fn.themePluginVideoBackground = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginVideoBackground($this, opts);
}
});
}
}).apply(this, [window.theme, jQuery]);
// Account
(function(theme, $) {
theme = theme || {};
var initialized = false;
$.extend(theme, {
Account: {
defaults: {
wrapper: $('#headerAccount')
},
initialize: function($wrapper, opts) {
if (initialized) {
return this;
}
initialized = true;
this.$wrapper = ($wrapper || this.defaults.wrapper);
this
.setOptions(opts)
.events();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts, theme.fn.getOptions(this.$wrapper.data('plugin-options')));
return this;
},
events: function() {
var self = this;
$(window).on('load', function(){
$(document).ready(function(){
setTimeout(function(){
self.$wrapper.find('input').on('focus', function() {
self.$wrapper.addClass('open');
$(document).mouseup(function(e) {
if (!self.$wrapper.is(e.target) && self.$wrapper.has(e.target).length === 0) {
self.$wrapper.removeClass('open');
}
});
});
}, 1500);
});
});
$('#headerSignUp').on('click', function(e) {
e.preventDefault();
self.$wrapper.addClass('signup').removeClass('signin').removeClass('recover');
self.$wrapper.find('.signup-form input:first').focus();
});
$('#headerSignIn').on('click', function(e) {
e.preventDefault();
self.$wrapper.addClass('signin').removeClass('signup').removeClass('recover');
self.$wrapper.find('.signin-form input:first').focus();
});
$('#headerRecover').on('click', function(e) {
e.preventDefault();
self.$wrapper.addClass('recover').removeClass('signup').removeClass('signin');
self.$wrapper.find('.recover-form input:first').focus();
});
$('#headerRecoverCancel').on('click', function(e) {
e.preventDefault();
self.$wrapper.addClass('signin').removeClass('signup').removeClass('recover');
self.$wrapper.find('.signin-form input:first').focus();
});
}
}
});
}).apply(this, [window.theme, jQuery]);
// Nav
(function(theme, $) {
theme = theme || {};
var initialized = false;
$.extend(theme, {
Nav: {
defaults: {
wrapper: $('#mainNav'),
scrollDelay: 600,
scrollAnimation: 'easeOutQuad'
},
initialize: function($wrapper, opts) {
if (initialized) {
return this;
}
initialized = true;
this.$wrapper = ($wrapper || this.defaults.wrapper);
this
.setOptions(opts)
.build()
.events();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts, theme.fn.getOptions(this.$wrapper.data('plugin-options')));
return this;
},
build: function() {
var self = this,
$html = $('html'),
$header = $('#header'),
$headerNavMain = $('#header .header-nav-main'),
thumbInfoPreview;
// Preview Thumbs
self.$wrapper.find('a[data-thumb-preview]').each(function() {
thumbInfoPreview = $('').addClass('thumb-info thumb-info-preview')
.append($('').addClass('thumb-info-wrapper')
.append($('').addClass('thumb-info-image').css('background-image', 'url(' + $(this).data('thumb-preview') + ')')
)
);
$(this).append(thumbInfoPreview);
});
// Side Header / Side Header Hamburguer Sidebar (Reverse Dropdown)
if($html.hasClass('side-header') || $html.hasClass('side-header-hamburguer-sidebar')) {
// Side Header Right / Side Header Hamburguer Sidebar Right
if($html.hasClass('side-header-right') || $html.hasClass('side-header-hamburguer-sidebar-right')) {
if(!$html.hasClass('side-header-right-no-reverse')) {
$header.find('.dropdown-submenu').addClass('dropdown-reverse');
}
}
} else {
// Reverse
self.checkReverse = function() {
self.$wrapper.find('.dropdown, .dropdown-submenu').removeClass('dropdown-reverse');
self.$wrapper.find('.dropdown:not(.manual):not(.dropdown-mega), .dropdown-submenu:not(.manual)').each(function() {
if(!$(this).find('.dropdown-menu').visible( false, true, 'horizontal' ) ) {
$(this).addClass('dropdown-reverse');
}
});
}
self.checkReverse();
$(window).on('resize', function() {
self.checkReverse();
});
}
// Clone Items
if($headerNavMain.hasClass('header-nav-main-clone-items')) {
$headerNavMain.find('nav > ul > li > a').each(function(){
var parent = $(this).parent(),
clone = $(this).clone(),
clone2 = $(this).clone(),
wrapper = $('');
// Config Classes
$(this).addClass('item-original');
clone2.addClass('item-two');
// Insert on DOM
parent.prepend(wrapper);
wrapper.append(clone).append(clone2);
});
}
// Floating
if($('#header.header-floating-icons').get(0) && $(window).width() > 991) {
var menuFloatingAnim = {
$menuFloating: $('#header.header-floating-icons .header-container > .header-row'),
build: function() {
var self = this;
self.init();
},
init: function(){
var self = this,
divisor = 0;
$(window).scroll(function() {
var scrollPercent = 100 * $(window).scrollTop() / ($(document).height() - $(window).height()),
st = $(this).scrollTop();
divisor = $(document).height() / $(window).height();
self.$menuFloating.find('.header-column > .header-row').css({
transform : 'translateY( calc('+ scrollPercent +'vh - '+ st / divisor +'px) )'
});
});
}
}
menuFloatingAnim.build();
}
// Slide
if($('.header-nav-links-vertical-slide').get(0)) {
var slideNavigation = {
$mainNav: $('#mainNav'),
$mainNavItem: $('#mainNav li'),
build: function(){
var self = this;
self.menuNav();
},
menuNav: function(){
var self = this;
self.$mainNavItem.on('click', function(e){
var currentMenuItem = $(this),
currentMenu = $(this).parent(),
nextMenu = $(this).find('ul').first(),
prevMenu = $(this).closest('.next-menu'),
isSubMenu = currentMenuItem.hasClass('dropdown') || currentMenuItem.hasClass('dropdown-submenu'),
isBack = currentMenuItem.hasClass('back-button'),
nextMenuHeightDiff = ( ( nextMenu.find('> li').length * nextMenu.find('> li').outerHeight() ) - nextMenu.outerHeight() ),
prevMenuHeightDiff = ( ( prevMenu.find('> li').length * prevMenu.find('> li').outerHeight() ) - prevMenu.outerHeight() );
if( isSubMenu ) {
currentMenu.addClass('next-menu');
nextMenu.addClass('visible');
currentMenu.css({
overflow: 'visible',
'overflow-y': 'visible'
});
if( nextMenuHeightDiff > 0 ) {
nextMenu.css({
overflow: 'hidden',
'overflow-y': 'scroll'
});
}
for( i = 0; i < nextMenu.find('> li').length; i++ ) {
if( nextMenu.outerHeight() < ($('.header-row-side-header').outerHeight() - 100) ) {
nextMenu.css({
height: nextMenu.outerHeight() + nextMenu.find('> li').outerHeight()
});
}
}
nextMenu.css({
'padding-top': nextMenuHeightDiff + 'px'
});
}
if( isBack ) {
currentMenu.parent().parent().removeClass('next-menu');
currentMenu.removeClass('visible');
if( prevMenuHeightDiff > 0 ) {
prevMenu.css({
overflow: 'hidden',
'overflow-y': 'scroll'
});
}
}
e.stopPropagation();
});
}
}
$(window).trigger('resize');
if( $(window).width() > 991 ) {
slideNavigation.build();
}
$(document).ready(function(){
$(window).afterResize(function(){
if( $(window).width() > 991 ) {
slideNavigation.build();
}
});
});
}
// Header Nav Main Mobile Dark
if($('.header-nav-main-mobile-dark').get(0)) {
$('#header:not(.header-transparent-dark-bottom-border):not(.header-transparent-light-bottom-border)').addClass('header-no-border-bottom');
}
// Keyboard Navigation / Accessibility
if( $(window).width() > 991 ) {
this.focusMenuWithChildren();
}
return this;
},
focusMenuWithChildren: function() {
// Get all the link elements within the primary menu.
var links, i, len,
menu = document.querySelector( 'html:not(.side-header):not(.side-header-hamburguer-sidebar):not(.side-header-overlay-full-screen) .header-nav-main > nav' );
if ( ! menu ) {
return false;
}
links = menu.getElementsByTagName( 'a' );
// Each time a menu link is focused or blurred, toggle focus.
for ( i = 0, len = links.length; i < len; i++ ) {
links[i].addEventListener( 'focus', toggleFocus, true );
links[i].addEventListener( 'blur', toggleFocus, true );
}
//Sets or removes the .focus class on an element.
function toggleFocus() {
var self = this;
// Move up through the ancestors of the current link until we hit .primary-menu.
while ( -1 === self.className.indexOf( 'header-nav-main' ) ) {
// On li elements toggle the class .focus.
if ( 'li' === self.tagName.toLowerCase() ) {
if ( -1 !== self.className.indexOf( 'open' ) ) {
self.className = self.className.replace( ' open', '' );
} else {
self.className += ' open';
}
}
self = self.parentElement;
}
}
},
events: function() {
var self = this,
$html = $('html'),
$header = $('#header'),
$window = $(window),
headerBodyHeight = $('.header-body').outerHeight();
$header.find('a[href="#"]').on('click', function(e) {
e.preventDefault();
});
// Mobile Arrows
$header.find('.dropdown-toggle, .dropdown-submenu > a')
.append('');
$header.find('.dropdown-toggle[href="#"], .dropdown-submenu a[href="#"], .dropdown-toggle[href!="#"] .fa-chevron-down, .dropdown-submenu a[href!="#"] .fa-chevron-down').on('click', function(e) {
e.preventDefault();
if ($window.width() < 992) {
$(this).closest('li').toggleClass('open');
// Adjust Header Body Height
var height = ( $header.hasClass('header-effect-shrink') && $html.hasClass('sticky-header-active') ) ? theme.StickyHeader.options.stickyHeaderContainerHeight : headerBodyHeight;
$('.header-body').animate({
height: ($('.header-nav-main nav').outerHeight(true) + height) + 10
}, 0);
}
});
$header.find('li a.active').addClass('current-page-active');
// Add Open Class
$header.find('.header-nav-click-to-open .dropdown-toggle[href="#"], .header-nav-click-to-open .dropdown-submenu a[href="#"], .header-nav-click-to-open .dropdown-toggle > i').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
if ($window.width() > 991) {
$header.find('li a.active').removeClass('active');
if( $(this).prop('tagName') == 'I' ) {
$(this).parent().addClass('active');
} else {
$(this).addClass('active');
}
if (!$(this).closest('li').hasClass('open')) {
var $li = $(this).closest('li'),
isSub = false;
if ( $(this).parent().hasClass('dropdown-submenu') ) {
isSub = true;
}
$(this).closest('.dropdown-menu').find('.dropdown-submenu.open').removeClass('open');
$(this).parent('.dropdown').parent().find('.dropdown.open').removeClass('open');
if (!isSub) {
$(this).parent().find('.dropdown-submenu.open').removeClass('open');
}
$li.addClass('open');
$(document).off('click.nav-click-to-open').on('click.nav-click-to-open', function (e) {
if (!$li.is(e.target) && $li.has(e.target).length === 0) {
$li.removeClass('open');
$li.parents('.open').removeClass('open');
$header.find('li a.active').removeClass('active');
$header.find('li a.current-page-active').addClass('active');
}
});
} else {
$(this).closest('li').removeClass('open');
$header.find('li a.active').removeClass('active');
$header.find('li a.current-page-active').addClass('active');
}
$window.trigger({
type: 'resize',
from: 'header-nav-click-to-open'
});
}
});
// Collapse Nav
$header.find('[data-collapse-nav]').on('click', function(e) {
$(this).parents('.collapse').removeClass('show');
});
// Top Features
$header.find('.header-nav-features-toggle').on('click', function(e) {
e.preventDefault();
var $toggleParent = $(this).parent();
if (!$(this).siblings('.header-nav-features-dropdown').hasClass('show')) {
var $dropdown = $(this).siblings('.header-nav-features-dropdown');
$('.header-nav-features-dropdown.show').removeClass('show');
$dropdown.addClass('show');
$(document).off('click.header-nav-features-toggle').on('click.header-nav-features-toggle', function (e) {
if (!$toggleParent.is(e.target) && $toggleParent.has(e.target).length === 0) {
$('.header-nav-features-dropdown.show').removeClass('show');
}
});
if ($(this).attr('data-focus')) {
$('#' + $(this).attr('data-focus')).focus();
}
} else {
$(this).siblings('.header-nav-features-dropdown').removeClass('show');
}
});
// Hamburguer Menu
var $hamburguerMenuBtn = $('.hamburguer-btn:not(.side-panel-toggle)'),
$hamburguerSideHeader = $('#header.side-header, #header.side-header-overlay-full-screen');
$hamburguerMenuBtn.on('click', function(){
if($(this).attr('data-set-active') != 'false') {
$(this).toggleClass('active');
}
$hamburguerSideHeader.toggleClass('side-header-hide');
$html.toggleClass('side-header-hide');
$window.trigger('resize');
});
$('.hamburguer-close:not(.side-panel-toggle)').on('click', function(){
$('.hamburguer-btn:not(.hamburguer-btn-side-header-mobile-show)').trigger('click');
});
// Set Header Body Height when open mobile menu
$('.header-nav-main nav').on('show.bs.collapse', function () {
$(this).removeClass('closed');
// Add Mobile Menu Opened Class
$('html').addClass('mobile-menu-opened');
$('.header-body').animate({
height: ($('.header-body').outerHeight() + $('.header-nav-main nav').outerHeight(true)) + 10
});
// Header Below Slider / Header Bottom Slider - Scroll to menu position
if( $('#header').is('.header-bottom-slider, .header-below-slider') && !$('html').hasClass('sticky-header-active') ) {
self.scrollToTarget( $('#header'), 0 );
}
});
// Set Header Body Height when collapse mobile menu
$('.header-nav-main nav').on('hide.bs.collapse', function () {
$(this).addClass('closed');
// Remove Mobile Menu Opened Class
$('html').removeClass('mobile-menu-opened');
$('.header-body').animate({
height: ($('.header-body').outerHeight() - $('.header-nav-main nav').outerHeight(true))
}, function(){
$(this).height('auto');
});
});
// Header Effect Shrink - Adjust header body height on mobile
$window.on('stickyHeader.activate', function(){
if( $window.width() < 992 && $header.hasClass('header-effect-shrink') ) {
if( $('.header-btn-collapse-nav').attr('aria-expanded') == 'true' ) {
$('.header-body').animate({
height: ( $('.header-nav-main nav').outerHeight(true) + theme.StickyHeader.options.stickyHeaderContainerHeight ) + ( ($('.header-nav-bar').get(0)) ? $('.header-nav-bar').outerHeight() : 0 )
});
}
}
});
$window.on('stickyHeader.deactivate', function(){
if( $window.width() < 992 && $header.hasClass('header-effect-shrink') ) {
if( $('.header-btn-collapse-nav').attr('aria-expanded') == 'true' ) {
$('.header-body').animate({
height: headerBodyHeight + $('.header-nav-main nav').outerHeight(true) + 10
});
}
}
});
// Remove Open Class on Resize
$window.on('resize.removeOpen', function(e) {
if( e.from == 'header-nav-click-to-open' ) {
return;
}
setTimeout(function() {
if( $window.width() > 991 ) {
$header.find('.dropdown.open').removeClass('open');
}
}, 100);
});
// Side Header - Change value of initial header body height
$(document).ready(function(){
if( $window.width() > 991 ) {
var flag = false;
$window.on('resize', function(e) {
if( e.from == 'header-nav-click-to-open' ) {
return;
}
$header.find('.dropdown.open').removeClass('open');
if( $window.width() < 992 && flag == false ) {
headerBodyHeight = $('.header-body').outerHeight();
flag = true;
setTimeout(function(){
flag = false;
}, 500);
}
});
}
});
// Side Header - Set header height on mobile
if( $html.hasClass('side-header') ) {
if( $window.width() < 992 ) {
$header.css({
height: $('.header-body .header-container').outerHeight() + (parseInt( $('.header-body').css('border-top-width') ) + parseInt( $('.header-body').css('border-bottom-width') ))
});
}
$(document).ready(function(){
$window.afterResize(function(){
if( $window.width() < 992 ) {
$header.css({
height: $('.header-body .header-container').outerHeight() + (parseInt( $('.header-body').css('border-top-width') ) + parseInt( $('.header-body').css('border-bottom-width') ))
});
} else {
$header.css({
height: ''
});
}
});
});
}
// Anchors Position
$('[data-hash]').each(function() {
var target = $(this).attr('href'),
offset = ($(this).is("[data-hash-offset]") ? $(this).data('hash-offset') : 0);
if( target.indexOf('#') != -1 && $(target).get(0)) {
$(this).on('click', function(e) {
e.preventDefault();
if( !$(e.target).is('i') ) {
// Close Collapse if open
$(this).parents('.collapse.show').collapse('hide');
// Close Side Header
$hamburguerSideHeader.addClass('side-header-hide');
$html.addClass('side-header-hide');
$window.trigger('resize');
self.scrollToTarget(target, offset);
// Data Hash Trigger Click
if( $(this).data('hash-trigger-click') ) {
var $clickTarget = $( $(this).data('hash-trigger-click') ),
clickDelay = $(this).data('hash-trigger-click-delay') ? $(this).data('hash-trigger-click-delay') : 0;
if( $clickTarget.get(0) ) {
setTimeout(function(){
$clickTarget.trigger('click');
}, clickDelay);
}
}
}
return;
});
}
});
// Floating
if($('#header.header-floating-icons').get(0)) {
$('#header.header-floating-icons [data-hash]').off().each(function() {
var target = $(this).attr('href'),
offset = ($(this).is("[data-hash-offset]") ? $(this).data('hash-offset') : 0);
if($(target).get(0)) {
$(this).on('click', function(e) {
e.preventDefault();
$('html, body').animate({
scrollTop: $(target).offset().top - offset
}, 600, 'easeOutQuad', function() {
});
return;
});
}
});
}
// Side Panel Toggle
if( $('.side-panel-toggle').get(0) ) {
var init_html_class = $('html').attr('class');
$('.side-panel-toggle').on('click', function(e){
var extra_class = $(this).data('extra-class'),
delay = ( extra_class ) ? 100 : 0;
e.preventDefault();
if( $(this).hasClass('active') ) {
$('html').removeClass('side-panel-open');
$('.hamburguer-btn.side-panel-toggle:not(.side-panel-close)').removeClass('active');
return false;
}
if( extra_class ) {
$('.side-panel-wrapper').css('transition','none');
$('html')
.removeClass()
.addClass( init_html_class )
.addClass( extra_class );
}
setTimeout(function(){
$('.side-panel-wrapper').css('transition','');
$('html').toggleClass('side-panel-open');
}, delay);
});
$(document).on('click', function(e){
if( !$(e.target).closest('.side-panel-wrapper').get(0) && !$(e.target).hasClass('side-panel-toggle') ) {
$('.hamburguer-btn.side-panel-toggle:not(.side-panel-close)').removeClass('active');
$('html').removeClass('side-panel-open');
}
});
}
return this;
},
scrollToTarget: function(target, offset) {
var self = this;
$('body').addClass('scrolling');
$('html, body').animate({
scrollTop: $(target).offset().top - offset
}, self.options.scrollDelay, self.options.scrollAnimation, function() {
$('body').removeClass('scrolling');
});
return this;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Newsletter
(function(theme, $) {
theme = theme || {};
var initialized = false;
$.extend(theme, {
Newsletter: {
defaults: {
wrapper: $('#newsletterForm')
},
initialize: function($wrapper, opts) {
if (initialized) {
return this;
}
initialized = true;
this.$wrapper = ($wrapper || this.defaults.wrapper);
this
.setOptions(opts)
.build();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts, theme.fn.getOptions(this.$wrapper.data('plugin-options')));
return this;
},
build: function() {
if (!($.isFunction($.fn.validate))) {
return this;
}
var self = this,
$email = self.$wrapper.find('#newsletterEmail'),
$success = $('#newsletterSuccess'),
$error = $('#newsletterError');
self.$wrapper.validate({
submitHandler: function(form) {
$.ajax({
type: 'POST',
url: self.$wrapper.attr('action'),
data: {
'email': $email.val()
},
dataType: 'json',
success: function(data) {
if (data.response == 'success') {
$success.removeClass('d-none');
$error.addClass('d-none');
$email
.val('')
.blur()
.closest('.control-group')
.removeClass('success')
.removeClass('error');
} else {
$error.html(data.message);
$error.removeClass('d-none');
$success.addClass('d-none');
$email
.blur()
.closest('.control-group')
.removeClass('success')
.addClass('error');
}
}
});
},
rules: {
newsletterEmail: {
required: true,
email: true
}
},
errorPlacement: function(error, element) {
}
});
return this;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Search
(function(theme, $) {
theme = theme || {};
var initialized = false;
$.extend(theme, {
Search: {
defaults: {
wrapper: $('#searchForm')
},
initialize: function($wrapper, opts) {
if (initialized) {
return this;
}
initialized = true;
this.$wrapper = ($wrapper || this.defaults.wrapper);
this
.setOptions(opts)
.build();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts, theme.fn.getOptions(this.$wrapper.data('plugin-options')));
return this;
},
build: function() {
if (!($.isFunction($.fn.validate))) {
return this;
}
this.$wrapper.validate({
errorPlacement: function(error, element) {}
});
// Search Reveal
$('.header-nav-features-search-reveal').each(function() {
var $el = $(this)
$header = $('#header'),
$html = $('htmnl');
$el.find('.header-nav-features-search-show-icon').on('click', function() {
$el.addClass('show');
$header.addClass('search-show');
$html.addClass('search-show');
$('#headerSearch').focus();
});
$el.find('.header-nav-features-search-hide-icon').on('click', function() {
$el.removeClass('show');
$header.removeClass('search-show');
$html.removeClass('search-show');
});
});
return this;
}
}
});
}).apply(this, [window.theme, jQuery]);
// Sticky Header
(function(theme, $) {
theme = theme || {};
var initialized = false;
$.extend(theme, {
StickyHeader: {
defaults: {
wrapper: $('#header'),
headerBody: $('#header .header-body'),
stickyEnabled: true,
stickyEnableOnBoxed: true,
stickyEnableOnMobile: true,
stickyStartAt: 0,
stickyStartAtElement: false,
stickySetTop: 0,
stickyEffect: '',
stickyHeaderContainerHeight: false,
stickyChangeLogo: false,
stickyChangeLogoWrapper: true
},
initialize: function($wrapper, opts) {
if (initialized) {
return this;
}
initialized = true;
this.$wrapper = ($wrapper || this.defaults.wrapper);
this
.setOptions(opts)
.build()
.events();
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, this.defaults, opts, theme.fn.getOptions(this.$wrapper.data('plugin-options')));
return this;
},
build: function() {
if (!this.options.stickyEnableOnBoxed && $('html').hasClass('boxed') || $('html').hasClass('side-header-hamburguer-sidebar') || !this.options.stickyEnabled) {
return this;
}
var self = this,
$html = $('html'),
$window = $(window),
sideHeader = $html.hasClass('side-header'),
initialHeaderTopHeight = self.options.wrapper.find('.header-top').outerHeight(),
initialHeaderContainerHeight = self.options.wrapper.find('.header-container').outerHeight(),
minHeight;
// HTML Classes
$html.addClass('sticky-header-enabled');
if (parseInt(self.options.stickySetTop) < 0) {
$html.addClass('sticky-header-negative');
}
// Set Start At
if(self.options.stickyStartAtElement) {
var $stickyStartAtElement = $(self.options.stickyStartAtElement);
$(window).on('scroll resize', function() {
self.options.stickyStartAt = $stickyStartAtElement.offset().top;
});
$(window).trigger('resize');
}
// Define Min Height value
if( self.options.wrapper.find('.header-top').get(0) ) {
minHeight = ( initialHeaderTopHeight + initialHeaderContainerHeight );
} else {
minHeight = initialHeaderContainerHeight;
}
// Set Wrapper Min-Height
if( !sideHeader ) {
if( !$('.header-logo-sticky-change').get(0) ) {
self.options.wrapper.css('height', self.options.headerBody.outerHeight());
} else {
$window.on('stickyChangeLogo.loaded', function(){
self.options.wrapper.css('height', self.options.headerBody.outerHeight());
});
}
if( self.options.stickyEffect == 'shrink' ) {
// Prevent wrong visualization of header when reload on middle of page
$(document).ready(function(){
if( $window.scrollTop() >= self.options.stickyStartAt ) {
self.options.wrapper.find('.header-container').on('transitionend webkitTransitionEnd oTransitionEnd', function(){
self.options.headerBody.css('position', 'fixed');
});
} else {
self.options.headerBody.css('position', 'fixed');
}
});
self.options.wrapper.find('.header-container').css('height', initialHeaderContainerHeight);
self.options.wrapper.find('.header-top').css('height', initialHeaderTopHeight);
}
}
// Sticky Header Container Height
if( self.options.stickyHeaderContainerHeight ) {
self.options.wrapper.find('.header-container').css('height', self.options.wrapper.find('.header-container').outerHeight());
}
// Boxed
if($html.hasClass('boxed') && self.options.stickyEffect == 'shrink') {
if( (parseInt(self.options.stickyStartAt) == 0) && $window.width() > 991) {
self.options.stickyStartAt = 30;
}
// Set Header Body Position Absolute
self.options.headerBody.css('position','absolute');
// Set position absolute because top margin from boxed layout
$window.on('scroll', function(){
if( $window.scrollTop() > $('.body').offset().top ) {
self.options.headerBody.css({
'position' : 'fixed',
'top' : 0
});
} else {
self.options.headerBody.css({
'position' : 'absolute',
'top' : 0
});
}
});
}
// Check Sticky Header / Flags prevent multiple runs at same time
var activate_flag = true,
deactivate_flag = false,
initialStickyStartAt = self.options.stickyStartAt;
self.checkStickyHeader = function() {
// Notice Top Bar
var $noticeTopBar = $('.notice-top-bar');
if ( $noticeTopBar.get(0) ) {
self.options.stickyStartAt = ( $noticeTopBar.data('sticky-start-at') ) ? $noticeTopBar.data('sticky-start-at') : $('.notice-top-bar').outerHeight();
} else {
self.options.stickyStartAt = initialStickyStartAt;
}
if( $window.width() > 991 && $html.hasClass('side-header') ) {
$html.removeClass('sticky-header-active');
activate_flag = true;
return;
}
if ($window.scrollTop() >= parseInt(self.options.stickyStartAt)) {
if( activate_flag ) {
self.activateStickyHeader();
activate_flag = false;
deactivate_flag = true;
}
} else {
if( deactivate_flag ) {
self.deactivateStickyHeader();
deactivate_flag = false;
activate_flag = true;
}
}
};
// Activate Sticky Header
self.activateStickyHeader = function() {
if ($window.width() < 992) {
if (!self.options.stickyEnableOnMobile) {
self.deactivateStickyHeader();
return;
}
} else {
if (sideHeader) {
self.deactivateStickyHeader();
return;
}
}
$html.addClass('sticky-header-active');
// Sticky Effect - Reveal
if( self.options.stickyEffect == 'reveal' ) {
self.options.headerBody.css('top','-' + self.options.stickyStartAt + 'px');
self.options.headerBody.animate({
top: self.options.stickySetTop
}, 400, function() {});
}
// Sticky Effect - Shrink
if( self.options.stickyEffect == 'shrink' ) {
// If Header Top
if( self.options.wrapper.find('.header-top').get(0) ) {
self.options.wrapper.find('.header-top').css({
height: 0,
'min-height': 0,
overflow: 'hidden'
});
}
// Header Container
if( self.options.stickyHeaderContainerHeight ) {
self.options.wrapper.find('.header-container').css({
height: self.options.stickyHeaderContainerHeight,
'min-height': 0
});
} else {
self.options.wrapper.find('.header-container').css({
height: (initialHeaderContainerHeight / 3) * 2, // two third of container height
'min-height': 0
});
var y = initialHeaderContainerHeight - ((initialHeaderContainerHeight / 3) * 2);
$('.main').css({
transform: 'translate3d(0, -'+ y +'px, 0)',
transition: 'ease transform 300ms'
});
if($html.hasClass('boxed')) {
self.options.headerBody.css('position','fixed');
}
}
}
self.options.headerBody.css('top', self.options.stickySetTop);
if (self.options.stickyChangeLogo) {
self.changeLogo(true);
}
// Set Elements Style
$('[data-sticky-header-style]').each(function() {
var $el = $(this),
css = theme.fn.getOptions($el.data('sticky-header-style-active')),
opts = theme.fn.getOptions($el.data('sticky-header-style'));
if( $window.width() > opts.minResolution ) {
$el.css(css);
}
});
$.event.trigger({
type: 'stickyHeader.activate'
});
};
// Deactivate Sticky Header
self.deactivateStickyHeader = function() {
$html.removeClass('sticky-header-active');
// Sticky Effect - Shrink
if( self.options.stickyEffect == 'shrink' ) {
// Boxed Layout
if( $html.hasClass('boxed') ) {
// Set Header Body Position Absolute
self.options.headerBody.css('position','absolute');
if( $window.scrollTop() > $('.body').offset().top ) {
// Set Header Body Position Fixed
self.options.headerBody.css('position','fixed');
}
} else {
// Set Header Body Position Fixed
self.options.headerBody.css('position','fixed');
}
// If Header Top
if( self.options.wrapper.find('.header-top').get(0) ) {
self.options.wrapper.find('.header-top').css({
height: initialHeaderTopHeight,
overflow: 'visible'
});
}
// Header Container
self.options.wrapper.find('.header-container').css({
height: initialHeaderContainerHeight
});
}
self.options.headerBody.css('top', 0);
if (self.options.stickyChangeLogo) {
self.changeLogo(false);
}
// Set Elements Style
$('[data-sticky-header-style]').each(function() {
var $el = $(this),
css = theme.fn.getOptions($el.data('sticky-header-style-deactive')),
opts = theme.fn.getOptions($el.data('sticky-header-style'));
if( $window.width() > opts.minResolution ) {
$el.css(css);
}
});
$.event.trigger({
type: 'stickyHeader.deactivate'
});
};
// Always Sticky
if (parseInt(self.options.stickyStartAt) <= 0) {
self.activateStickyHeader();
}
// Set Logo
if (self.options.stickyChangeLogo) {
var $logoWrapper = self.options.wrapper.find('.header-logo'),
$logo = $logoWrapper.find('img'),
logoWidth = $logo.attr('width'),
logoHeight = $logo.attr('height'),
logoSmallTop = parseInt($logo.attr('data-sticky-top') ? $logo.attr('data-sticky-top') : 0),
logoSmallWidth = parseInt($logo.attr('data-sticky-width') ? $logo.attr('data-sticky-width') : 'auto'),
logoSmallHeight = parseInt($logo.attr('data-sticky-height') ? $logo.attr('data-sticky-height') : 'auto');
if (self.options.stickyChangeLogoWrapper) {
$logoWrapper.css({
'width': $logo.outerWidth(true),
'height': $logo.outerHeight(true)
});
}
self.changeLogo = function(activate) {
if(activate) {
$logo.css({
'top': logoSmallTop,
'width': logoSmallWidth,
'height': logoSmallHeight
});
} else {
$logo.css({
'top': 0,
'width': logoWidth,
'height': logoHeight
});
}
}
$.event.trigger({
type: 'stickyChangeLogo.loaded'
});
}
// Side Header
var headerBodyHeight,
flag = false;
self.checkSideHeader = function() {
if($window.width() < 992 && flag == false) {
headerBodyHeight = self.options.headerBody.height();
flag = true;
}
if(self.options.stickyStartAt == 0 && sideHeader) {
self.options.wrapper.css('min-height', 0);
}
if(self.options.stickyStartAt > 0 && sideHeader && $window.width() < 992) {
self.options.wrapper.css('min-height', headerBodyHeight);
}
}
return this;
},
events: function() {
var self = this;
if (!this.options.stickyEnableOnBoxed && $('body').hasClass('boxed') || $('html').hasClass('side-header-hamburguer-sidebar') || !this.options.stickyEnabled) {
return this;
}
if (!self.options.alwaysStickyEnabled) {
$(window).on('scroll resize', function() {
self.checkStickyHeader();
});
} else {
self.activateStickyHeader();
}
$(window).on('load resize', function(){
self.checkSideHeader();
});
return this;
}
}
});
}).apply(this, [window.theme, jQuery]);