File: /home/bookcc/public_html/wp-content/themes/fatmoon/js/script.js
jQuery.noConflict();
(function($, window, document){
/*global ApolloParams a2a_config,
a2a, alert, jQuery */
"use strict";
//for debugger
$ = jQuery;
//no hiding animation when loading filtered bricks in isotope
Isotope.Item.prototype.hide = function() {
// set flag
this.isHidden = true;
// just hide
this.css({ display: 'none' });
};
var A13F = window.A13FRAMEWORK,
html = document.documentElement,
$html = $(html),
body = document.body,
$body = $(body),
$window = $(window),
G = ApolloParams,
is_rtl = $html.attr('dir') === 'rtl',
is_adminbar = false,
click_event = 'click',
transitionend_event = 'transitionend',
can_use_transitions = false,
header, header_tools, footer, mid, admin_bar,//DOM elements
break_point = [600,768,1024,1300]; //media queries break points
window.A13FRAMEWORK = {
//run after DOM is loaded
onReady : function(){
//some exception when we don't push scroll
var exceptions_pages = ['single-album-slider', 'single-album-scroller'],
no_scroll = false;
for(var i = 0; i < exceptions_pages.length; i++ ){
if($body.hasClass(exceptions_pages[i])){
no_scroll = true;
break;
}
}
if(typeof $.fn.isotope !== 'undefined' && !no_scroll){
//add scroll bar to fix some delayed resize issues with bricks
$html.addClass('show-scroll');
}
can_use_transitions = A13F.transitionsAvailable();
header = $('#header');
header_tools = $('#header-tools');
footer = $('#footer');
mid = $('#mid');
admin_bar = $('#wpadminbar');
if(admin_bar.length){
is_adminbar = true;
}
//bind resize
$window.resize(A13F.debounce(A13F.layout.resize, 250));
$body.on('webfontsloaded', function(){
$window.resize();
});
//enables hover states on various elements on iOS when finger is on element while scrolling for example
document.addEventListener("touchstart", function(){}, true);
//set current size
A13F.layout.set();
A13F.runPlugins();
A13F.temporarySafes();
A13F.elementsActions.init();
},
//for resizing with media queries
layout : {
pointers : [],
size : 0,
add : function(f){
A13F.layout.pointers.push(f);
},
remove : function(f){
var pointers = A13F.layout.pointers;
//call each registered for resize function
for(var i = 0; i < pointers.length; i++){
if(pointers[i] === f){
delete pointers[i];
}
}
},
set : function(){
var size = window.getComputedStyle ? getComputedStyle(body, ':after').getPropertyValue('content') : null,
width = $window.width(),
index = (size === null)? -1 : size.indexOf("narrow"),
to_return;
//if we can get value of current media query(normal desktop browsers)
if (index === -1) {
to_return = width;
} else {
to_return = parseInt(size.substr(index + 6), 10);
}
A13F.layout.size = to_return;
return to_return;
},
resize : function(e){
var A = A13F.layout,
size = A.set(),
pointers = A.pointers;
//call each registered for resize function
for(var i = 0; i < pointers.length; i++){
if(pointers[i] !== undefined){
pointers[i].call(this, e, size);
}
}
}
},
runPlugins : function(){
//Resize iframe videos (YT, VIMEO)
$("div.post-media").fitVids();
$("div.real-content").find('p').fitVids();
},
temporarySafes : function(){
//this hack is to remove '!' hash from url after closing the prettyPhoto
// which causes JavaScript error after refresh cause of VisualComposer bug
$window.bind( 'hashchange', function(){
if( window.location.hash == '#!' ){
history.pushState('', document.title, window.location.pathname);
}
});
},
cookieExpire : function(name_value, hours){
var d = new Date(),
expires;
d.setTime(d.getTime()+(hours*60*60*1000));
expires = d.toUTCString();
document.cookie=name_value+"; expires="+expires+"; path=/";
},
transitionsAvailable : function() {
var el = document.createElement('div');
return (el.style['transition'] !== undefined);
},
/**
* Retrieves available window height for content elements in regard to current layout
* @param {number} option 1 for header, 2 for header & title-bar
* @returns {number}
*/
windowVisibleAvailableHeight : function(option){
//default value
if(typeof option === 'undefined'){
option = 0;
}
var window_height = $window.height(),
admin_bar_height = is_adminbar ? parseInt(admin_bar.height(), 10) : 0,
is_vertical = header.hasClass('vertical'),
header_space = 0,
total;
//on mobile widths, take header height into account when using vertical header
if(is_vertical){
if(A13F.layout.size <= break_point[2]){
header_space = header.height();
}
}
else{
header_space = option > 0 ? parseInt($body.css('padding-top'), 10) : 0;
}
total = window_height - admin_bar_height - header_space;
//check for theme borders
if($body.hasClass('site-layout-bordered')){
var borders = $('.theme-borders'),
top_border = borders.find('.top-border'),
bottom_border = borders.find('.bottom-border'),
top_border_height = top_border.length ? top_border.height() : 0,
bottom_border_height = bottom_border.length ? bottom_border.height() : 0;
total = total - top_border_height - bottom_border_height;
}
//check for title-bar
if(option > 1){
var title_bar = $('header.title-bar.outside'),
title_bar_height = title_bar.length ? title_bar.height() : 0;
total = total - title_bar_height;
}
return total;
},
isInteger : function(value){
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
},
throttle: function (t, n) {
n || (n = 100);
var e = null,
u = +new Date,
i = !1,
r = 0;
return function () {
var o = +new Date,
a = this,
c = arguments,
l = function () {
clearTimeout(e);
t.apply(a, c);
u = r = o;
i = !0;
e = setTimeout(function () {
r !== u && l()
}, n)
};
!i || o - u > n ? l() : r = o
}
},
debounce: function (t, n, e) {
var u;
return function () {
var i = this,
r = arguments;
u ? clearTimeout(u) : e && t.apply(i, r);
u = setTimeout(function () {
e || t.apply(i, r);
u = null
}, n || 100)
}
},
elementsActions : {
init : function(){
var $e = A13F.elementsActions;
$e.preloader();
$e.headerVertical();
$e.headerHorizontal();
$e.headerSearch();
$e.topMessage();
$e.logo();
$e.menuOverlay();
$e.sideMenu();
$e.basketMenu();
$e.toolsLanguages();
$e.footer();
$e.topMenu();
$e.toTop();
if(G.scroll_to_anchor){
$e.scrollToAnchor();
}
$e.parallax();
$e.pageSlider();
$e.titleBar();
$e.stickyOnePage();
$e.carousel();
$e.countDown();
$e.countTo();
$e.fitText();
$e.typedJS();
$e.A13PostLightbox();
//before singleAlbumMasonry()
$e.lightbox();
//big(main) chunks of layout
$e.blogMasonry();
$e.shopMasonry();
$e.albumsListMasonry();
$e.singleAlbumMasonry();
$e.singleWork();
$e.makeBricks();
$e.makeSlider();
$e.makeScroller();
$e.worksListMasonry();
$e.peopleListMasonry();
/******* For widgets that have lots of content *********/
$e.widgetSlider();
$e.demoFlyOut();
//react to customizer partials refresh
if(typeof wp !== 'undefined' && typeof wp.customize !== 'undefined' && typeof wp.customize.selectiveRefresh !== 'undefined'){
wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
//footer
if(G.options_name+'[footer_switch]' === placement.partial.id){
mid.css('margin-bottom', '');
footer = $('#footer');
$e.footer();
}
} );
}
if(typeof elementorFrontend !== 'undefined' && typeof elementorFrontend.hooks !== 'undefined'){
//react to Elementor Preview changes on shortcodes
elementorFrontend.hooks.addAction( 'frontend/element_ready/shortcode.default', function( $scope ) {
$e.typedJS($scope);
$e.makeSlider($scope);
$e.makeScroller($scope);
$e.blogMasonry($scope);
$e.albumsListMasonry($scope);
$e.worksListMasonry($scope);
$e.peopleListMasonry($scope);
$e.makeBricks($scope);
} );
//react to Elementor Preview changes on widgets
elementorFrontend.hooks.addAction( 'frontend/element_ready/a13fe-slider.default', function( $scope ) {
$e.makeSlider($scope);
} );
elementorFrontend.hooks.addAction( 'frontend/element_ready/a13fe-scroller.default', function( $scope ) {
$e.makeScroller($scope);
} );
elementorFrontend.hooks.addAction( 'frontend/element_ready/a13fe-gallery.default', function( $scope ) {
$e.makeBricks($scope);
} );
elementorFrontend.hooks.addAction( 'frontend/element_ready/a13fe-post-list.default', function( $scope ) {
$e.blogMasonry($scope);
$e.albumsListMasonry($scope);
$e.worksListMasonry($scope);
$e.peopleListMasonry($scope);
} );
}
},
stickyOnePage : function(){
var content_box = mid.find('div.content-box');
if( !content_box.hasClass('a13-sticky-one-page') ){
return;
}
//resize all vc rows
var wrapper_selector = 'div.real-content',
section_selector = 'div.vc_row',
all_sections_selector = wrapper_selector + ' > ' + section_selector,
fp_sections = mid.find(wrapper_selector).children(section_selector),
tooltips = [],
global_bullet_color = ( content_box.attr('data-a13-sticky-one-page-icon-global-color') === undefined ? '' : content_box.attr('data-a13-sticky-one-page-icon-global-color') ),
global_bullet_icon = ( content_box.attr('data-a13-sticky-one-page-icon-global-icon') === undefined ? '' : content_box.attr('data-a13-sticky-one-page-icon-global-icon') );
//prepare tooltips before running script
fp_sections.each( function(){
var icon_title = $(this).attr('data-a13-sticky-one-page-icon-title');
tooltips.push( icon_title === undefined ? '' : icon_title )
});
//resize event
$(window).resize(A13F.debounce( function () {
$.fn.fullpage.reBuild();
}, 250));
//initiate
$(wrapper_selector).fullpage({
lockAnchors : false,
autoScrolling : true,
scrollingSpeed : 700,
fitToSection : true,
css3 : true,
easingcss3 : "ease",
easing : "easeInOutCubic",
continuousVertical: false,
loopBottom : false,
loopTop : false,
loopHorizontal : true,
scrollOverflow : true,
controlArrows : false,
verticalCentered : true,
responsiveWidth : 0,
responsiveHeight : 0,
fixedElements : "",
keyboardScrolling : true,
animateAnchor : true,
recordHistory : false,
resize: false,
sectionSelector: all_sections_selector,
navigation: true,
paddingTop: admin_bar.length ? parseInt(admin_bar.height(), 10)+'px' : '',
navigationTooltips: tooltips,
showActiveTooltip: true,
scrollBar: false,
afterRender: function(){
//customize navigation for one page
var nav_container = $('#fp-nav').find('ul');
fp_sections.each(function (i) {
var icon_attr = $(this).attr('data-a13-sticky-one-page-icon-class'),
color_attr = $(this).attr('data-a13-sticky-one-page-icon-color'),
icon_class = ( icon_attr ? icon_attr : global_bullet_icon ),
icon_color = ( color_attr ? color_attr : global_bullet_color );
if ( icon_class ) {
//set color of custom icon
nav_container.children().eq(i).css({'color': icon_color})// li element
.find('a').addClass('custom').find('span').addClass(icon_class);
} else {
//set color of default bullet
nav_container.children().eq(i).css({'color': icon_color})// li element
.find('a').find('span').css({'background-color': icon_color});
}
});
//show navigation
nav_container.fadeIn();
},
afterLoad: function(){
},
onLeave: function( index, nextIndex, direction ) {
// when lightbox is active, prevent scrolling the page
}
});
},
carousel: function(){
$('.a13_images_carousel').each(function () {
var $carousel_container = $(this),
$carousel = $carousel_container.find('.owl-carousel'),
loop = $carousel_container.data('wrap') == 1,
autoplay = $carousel_container.data('autoplay'),
interval = $carousel_container.data('interval'),
perView = $carousel_container.data('per_view'),
nav = $carousel_container.data('hide_nav') == '1',
pag = $carousel_container.data('hide_pag') == '1',
giveResponsiveSet = function (perView) {
var responsiveSet = {};
for (var i = 0; i < perView; i++) {
var tmp_obj = {};
if (i % 2) {
tmp_obj = {'items': (i + 1)};
} else {
tmp_obj = {'items': (i + 1), 'center': true};
}
responsiveSet[Math.floor(1 + i * (1920 / perView))] = tmp_obj;
}
return responsiveSet;
};
$window.on('load', function() {
$carousel.owlCarousel({
loop : loop,
items : perView,
autoplay : autoplay,
autoplayTimeout: interval,
responsive : giveResponsiveSet(perView),
nav : !nav,
navText : ['<span class="a13icon-chevron-thin-left">', '<span class="a13icon-chevron-thin-right">'],
dots : !pag
});
});
});
},
countDown: function(){
$('div.a13_count_down').each( function(){
var $countDowner = $(this),
labels = [ $countDowner.data('weeks'), $countDowner.data('days'), $countDowner.data('hours'), $countDowner.data('minutes'), $countDowner.data('seconds')],
style = $countDowner.data('style'),
targetDate = $countDowner.data('date'),
template = (style == 'simple' ? '' : _.template($('#main-example-template').html()) ),
currDate = '00:00:00:00:00',
nextDate = '00:00:00:00:00',
parser = /([0-9]{2})/gi;
// Parse countdown string to an object
function strfobj(str) {
var parsed = str.match(parser),
obj = {};
labels.forEach(function(label, i) {
obj[label] = parsed[i]
});
return obj;
}
// Return the time components that diffs
function diff(obj1, obj2) {
var diff = [];
labels.forEach(function(key) {
if (obj1[key] !== obj2[key]) {
diff.push(key);
}
});
return diff;
}
// Starts the countdown
if(style == 'simple'){
$countDowner.countdown(targetDate).on('update.countdown', function(event) {
$(this).html(event.strftime(''
+ '<div class="block"><div class="value">%w</div> <div class="label">' + $countDowner.data('weeks') +'</div></div>'
+ '<div class="block"><div class="value">%d</div> <div class="label">' + $countDowner.data('days')+'</div></div>'
+ '<div class="block"><div class="value">%H</div> <div class="label">' + $countDowner.data('hours')+'</div></div>'
+ '<div class="block"><div class="value">%M</div> <div class="label">' + $countDowner.data('minutes')+'</div></div>'
+ '<div class="block"><div class="value">%S</div> <div class="label">' + $countDowner.data('seconds')+'</div></div>' ) );
});
}else{
// Build the layout
var initData = strfobj(currDate);
labels.forEach(function(label/*, i*/ ) {
$countDowner.append(template({
curr: initData[label],
next: initData[label],
label: label
}));
});
$countDowner.countdown(targetDate, function(event) {
var newDate = event.strftime('%w:%d:%H:%M:%S'),
data;
if (newDate !== nextDate) {
currDate = nextDate;
nextDate = newDate;
// Setup the data
data = {
'curr': strfobj(currDate),
'next': strfobj(nextDate)
};
// Apply the new values to each node that changed
diff(data.curr, data.next).forEach(function(label) {
var selector = '.%s'.replace(/%s/, label),
$node = $countDowner.find(selector);
// Update the node
$node.removeClass('flip');
$node.find('.curr').text(data.curr[label]);
$node.find('.next').text(data.next[label]);
// Wait for a repaint to then flip
_.delay(function($node) {
$node.addClass('flip');
}, 50, $node);
});
}
});
}
});
},
countTo: function(){
var counters = $('div.a13_counter');
//bind event for each counter
counters.each(function(){
var counter = $(this),
number = counter.find('span.number'),
params = {onComplete: function(){
counter
.find('span.finish-text')
.css({
visibility: 'visible',
opacity: '0',
top: '-20px'
})
.animate({top: '0',opacity:'1'},600);
}};
//disable counter counting for mobile view to save processor
if(A13F.layout.size <= break_point[0]){
params.speed = 1; //1ms, 0 causes error
}
/** @namespace $.fn.waypoint */
if (typeof $.fn.waypoint !== 'undefined') {
counter.waypoint(function(){
number.countTo(params);
}, {triggerOnce:true, offset: '85%'});
} else {
number.countTo(params)
}
});
},
fitText : function(){
var fitText_headings = mid.find('.vc_custom_heading.a13-fit_text'),
doFitText = function( heading ){
var compress_ratio = $(heading).data('compress'),
min_fs = $(heading).data('min-font-size'),
max_fs = $(heading).data('max-font-size'),
extra = {};
if(typeof min_fs !== 'undefined'){
extra['minFontSize'] = min_fs;
}
if(typeof max_fs !== 'undefined'){
extra['maxFontSize'] = max_fs;
}
$(heading).fitText( compress_ratio, extra );
};
fitText_headings.each( function(){
$(this).waypoint( $.proxy(doFitText, this, this, 0),{ offset: '85%', triggerOnce:true } );
} );
},
typedJS : function($scope){
$scope = typeof $scope === 'undefined'? $body : $scope;
var typed_texts = $scope.find('.a13-to-type'),
start_typing = function(text){
var block = $(text),
block_strings = [],
is_loop = block.data('loop') == 1;
//don't animate for mobiles
if(!G.writing_effect_mobile && A13F.layout.size <= break_point[0]){
block.addClass('disabled-writing');
}
//animate for desktop
else{
var typing_area = block.find('.typing-area');
//skip if it was initialized already
if(typing_area.data('typed')){
return;
}
//collect sentences
block.find('.sentences-to-type').children() //<span(s)>
.each( function(){
block_strings.push( $(this).html() );
});
typing_area.typed({
strings: block_strings,
startDelay: 500,
typeSpeed: parseInt(G.writing_effect_speed, 10),
loop: is_loop
});
}
};
typed_texts.each( function(){
var _this = this;
//native version
if(typeof Waypoint === 'function'){
//noinspection JSUnusedGlobalSymbols
new Waypoint({
element: _this,
handler: function(){
start_typing(this.element);
//fire only once
this.destroy();
},
offset: '85%'
});
}
//jQuery version
else if(typeof jQuery.waypoints === 'function'){
$(this).waypoint( $.proxy(start_typing, this, this, 0),{ offset: '85%', triggerOnce:true } );
}
} );
},
parallax : function(){
var p_bgs = $('div.a13-parallax, div.a13-parallax-video, header.a13-parallax'),
set_bg_position = function(element,x,y,speed){
if(typeof speed === 'undefined'){
speed = 1;
}
element.style.backgroundPosition = (speed*x)+'% '+(speed*y)+'%';
},
set_video_position = function(video, position, parent_height){
var val = (parent_height - video.innerHeight()) * position;
video[0].style.top = val+'px';
},
update = function(){
// reset the tick so we can
// capture the next onScroll
ticking = false;
//check all parallax elements
p_bgs.each(function(){
//noinspection JSCheckFunctionSignatures
var element = this,
$elem = $(element),
using_speed = getComputedStyle(element).getPropertyValue('background-repeat') !== 'no-repeat',
for_video = $elem.hasClass('a13-parallax-video'),
video = for_video ? $elem.children('video.a13-bg-video') : $([]),
type = for_video ? $elem.data('a13-parallax-video-type') : $elem.data('a13-parallax-type'),
speed = using_speed? $elem.data('a13-parallax-speed') : 1;
//we make sure that video exists
if(!for_video || (for_video && video.length)){
var window_height = window.innerHeight || html.clientHeight, //modern || IE 8
window_top = last_window_top,
window_bottom = window_top + window_height,
elem_height = $elem.innerHeight(),
elem_top = $elem.offset().top,
elem_bottom = elem_top + elem_height,
end_range = elem_bottom + window_height,
top_part_in_range = window_bottom >= elem_top,
bottom_part_in_range = window_bottom <= end_range,
current_position_in_range = (window_bottom - elem_top) / (end_range - elem_top);
//we can see element
if( top_part_in_range && bottom_part_in_range ){
//choose type of move
//from top to bottom
if(type === 'tb'){
if(for_video){
set_video_position(video, current_position_in_range, elem_height);
}
else{
set_bg_position(element, 50, current_position_in_range * 100, speed);
}
}
//from bottom to top
else if(type === 'bt'){
if(for_video){
set_video_position(video, 1-current_position_in_range, elem_height);
}
else{
set_bg_position(element, 50, (1-current_position_in_range) * 100, speed);
}
}
//from left to right
else if(type === 'lr'){
set_bg_position(element, current_position_in_range * 100, 50, speed);
}
//from right to left
else if(type === 'rl'){
set_bg_position(element, (1-current_position_in_range) * 100, 50, speed);
}
//from top-left to bottom-right
else if(type === 'tlbr'){
set_bg_position(element, current_position_in_range * 100, current_position_in_range * 100, speed);
}
//from top-right to bottom-left
else if(type === 'trbl'){
set_bg_position(element, (1-current_position_in_range) * 100, current_position_in_range * 100, speed);
}
//from bottom-left to top-right
else if(type === 'bltr'){
set_bg_position(element, current_position_in_range * 100, (1-current_position_in_range) * 100, speed);
}
//from bottom-right to top-left
else if(type === 'brtl'){
set_bg_position(element, (1-current_position_in_range) * 100, (1-current_position_in_range) * 100, speed);
}
}
}
});
},
requestTick = function() {
if (!ticking) {
requestAnimationFrame(update);
}
ticking = true;
},
last_window_top = 0,
ticking = false;
if(p_bgs.length){
$window
.off('scroll.parallax resize.parallax a13_parallax_trigger.parallax')//if we have multiple calls
.on('scroll.parallax resize.parallax a13_parallax_trigger.parallax', function() {
last_window_top = html.scrollTop || window.pageYOffset || 0; //IE8 || modern || 0 for undefined value in IE 8 if scrolled to top
requestTick();
});
//start call
$window.trigger('a13_parallax_trigger');
}
},
preloader : function(show_it_now){
var p = $('#preloader');
if(p.length){
var c = p.find('div.preload-content'),
skip = p.find('a.skip-preloader'),
hide_onready = p.hasClass('onReady'),
hide_it = function(){ // makes sure the whole site is loaded
c.fadeOut().promise().done(function(){
p.fadeOut(400);
})
},
show_it = function(){
skip.hide();
c.show();
p.fadeIn();
};
if(typeof show_it_now === 'undefined'){
if(hide_onready){
$(document).ready(hide_it);
}
else{
//when this script is loaded then show link to skip preloader
skip.fadeIn().on( click_event, function(ev){
ev.stopPropagation();
ev.preventDefault();
hide_it();
});
$window.load(hide_it);
}
}
//for showing/hiding on AJAX
else{
if(show_it_now){
show_it();
}
else{
hide_it();
}
}
}
},
logo: function(){
var image_logo = header.find('.image-logo'),
logo = '',
load = function(){
logo.load(function(){
//inform about possible resize
$body.trigger('a13LogoLoaded');
});
};
if(image_logo.length){
//try variant logo
logo = header.find('a.'+G.default_header_variant+'-logo').children();
if(logo.is('img')){
load();
return;
}
//try normal logo
logo = header.find('a.normal-logo').children();
if(logo.is('img')){
load();
return;
}
}
//text logo or no logo
$body.trigger('a13LogoLoaded');
},
topMenu : function(){
var sub_menus = header.find('ul.sub-menu'),
menu = header.find('div.menu-container'),
menu_list = menu.children(),
sub_parents = sub_menus.parent().not(function() { return $(this).parents('.mega-menu').length; }),
scrollable_class= 'scrollable-menu',
menu_init = $('#mobile-menu-opener'),
overlay = $('#content-overlay'),
size = A13F.layout.size,
is_vertical = header.hasClass('vertical');
var desktopEvents = function(on){
if(typeof on !== 'undefined' && on === false){
header.removeClass('desktop_menu');
resetMenu(undefined, true);
sub_parents
.off(click_event)
.children('i.sub-mark, span.title').off(click_event);
}
else{
header.addClass('desktop_menu');
sub_parents
.children('i.sub-mark, span.title')
.on(click_event+' keydown', function(ev){
var reserved_keys = [13,32];
if(ev.type === 'keydown'){
if( reserved_keys.indexOf(ev.keyCode) === -1 ){
//we don't react to this key
return;
}
}
ev.stopPropagation();
ev.preventDefault();
var this_li = $(this).parent(), //li
sub = this_li.children('ul.sub-menu'),
was_open = this_li.hasClass('open');
resetMenu(this_li);
//close this menu if it was open
if(was_open){
return;
}
if(this_li.parents('li').length > 0){
this_li.children('i.sub-mark').removeClass(G.submenu_third_lvl_opener).addClass(G.submenu_third_lvl_closer);
}
else{
this_li.children('i.sub-mark').removeClass(G.submenu_opener).addClass(G.submenu_closer);
}
measureSubmenu(sub);
//show sub-menu
if(is_vertical){
this_li.addClass('open');
sub.slideDown(600, function(){$window.trigger('mess_in_header');});
}
else{
sub.show();
//requestAnimationFrame often adds class at same repaint, and this blocks animation from running as element is shown at the same time when it suppose to be animated
//that is why setTimeout is more reliable here
setTimeout(function(){ this_li.addClass('open'); }, 15);
}
$body.off( click_event, bodyClickFn ); //turn off if there were any binds
$body.on( click_event, bodyClickFn );
});
if( is_vertical ){
var current_ancestors = sub_parents.filter('.to-open');
if( current_ancestors.length ){
current_ancestors.addClass('open');
}
}
}
},
bodyClickFn = function(ev){
//we don't want to block clicks in other single menu options
if(! $(ev.target).parents().addBack().hasClass( 'menu-container' ) ) {
ev.stopPropagation();
ev.preventDefault();
resetMenu();
}
},
resetMenu = function(menu, hard){
var parents_of_open_menus,
onHideTransitionEndFn = function(ev){
//do it only after visibility transition
if( !_sub_menus.is(ev.target) || ev.originalEvent.propertyName !== 'visibility' ){ return; }
_sub_menus.off( transitionend_event, onHideTransitionEndFn );
cleanUpAfterHide();
},
cleanUpAfterHide = function(){
_sub_menus.removeClass('otherway')
//clean so it won't interfere with mobile menu
.attr('style','');
parents_of_open_menus.each(function(){
var parent = $(this);
if(parent.parents('li').length > 0){
parent.children('i.sub-mark').removeClass(G.submenu_third_lvl_closer).addClass(G.submenu_third_lvl_opener);
}
else{
parent.children('i.sub-mark').removeClass(G.submenu_closer).addClass(G.submenu_opener);
}
});
};
if (typeof menu === 'undefined') {
//all menus
parents_of_open_menus = sub_parents.filter('.open');
} else {
//for 3rd level menu
parents_of_open_menus = menu.siblings('li').addBack().filter('.open');
//if there are more then one menu (like in one line header with center logo)
if(menu_list.length > 1){
parents_of_open_menus = parents_of_open_menus.add(menu.parents('.top-menu').siblings().find('li.open'));
}
}
if(is_vertical){
parents_of_open_menus.children('ul.sub-menu').slideUp(350).promise().done(function(){
parents_of_open_menus.removeClass('open');
if(parents_of_open_menus.parents('li').length > 0){
parents_of_open_menus.children('i.sub-mark').removeClass(G.submenu_third_lvl_closer).addClass(G.submenu_third_lvl_opener);
}
else{
parents_of_open_menus.children('i.sub-mark').removeClass(G.submenu_closer).addClass(G.submenu_opener);
}
$window.trigger('mess_in_header');
});
}
else{
var _sub_menus = parents_of_open_menus.children('ul.sub-menu');
if(can_use_transitions && typeof hard === 'undefined'){
_sub_menus.on( transitionend_event, onHideTransitionEndFn );
parents_of_open_menus.removeClass('open');
}
else{
parents_of_open_menus.removeClass('open');
cleanUpAfterHide();
}
}
$body.off( click_event, bodyClickFn );
},
measureSubmenu = function(sub){
//fixes resize of window issue when sub menu is opened near window edge
header.css('overflow','hidden');
//values
var window_width = $window.width(),
submenu_width = sub.addClass('measure').width(),
sub_parent = sub.parent(),
sub_parent_offset = sub_parent.offset(),
is_mega_menu = sub_parent.hasClass('mega-menu'),
temp = 0,
side_to_measure = is_rtl ? 'right' : 'left',
out = false,
parents,
measured_offset,
left_offset;
if(!is_vertical){
//for horizontal menu reset also inline css
sub.css(side_to_measure, '');
}
//set back
sub.removeClass('measure');
if (is_vertical) {
if(is_mega_menu){
//if menu is wider then window
if(submenu_width > (window_width - header.width())){
sub.width(window_width);
}
}
}
else{
left_offset = sub_parent_offset.left;
measured_offset = is_rtl? (window_width - (left_offset + sub_parent.outerWidth())) : left_offset;
if(is_mega_menu){
//if menu is wider then window
if(submenu_width > window_width){
sub.width(window_width);
submenu_width = window_width;
}
temp = measured_offset + submenu_width;
if(temp > window_width){
sub.css(side_to_measure, - ( temp - window_width ) );
}
}
//out of the edge of the screen, then show on other side
else{
//check on which level is this submenu
parents = sub.parents('ul');
temp = parents.length;
//first level
if(temp === 1){
if(measured_offset + submenu_width > window_width){
out = true;
}
}
//next levels
else if(temp > 1){
var parent_ul = parents.eq(0),
parent_left = parent_ul.offset().left,
parent_width = parents.eq(0).width(),
parent_measured_offset = is_rtl? (window_width - (parent_left + parent_width)) : parent_left;
if(parent_measured_offset + parent_width + submenu_width > window_width){
out = true;
}
}
if(out){
sub.addClass('otherway');
}
}
}
//back to normal
header.css('overflow','');
},
mobileOverlayClickFn = function(e){
e.preventDefault();
menu_init.trigger('click');
},
mobile_menu_toggle = function(ev){
ev.stopPropagation();
ev.preventDefault();
var opener = $(this);
//hide menu
if(menu.hasClass('open')){
menu.slideUp(200, function(){
menu.children().hide();//helps with menu 'flicker' on IOS
sub_menus.attr('style','');
sub_parents.removeClass('open').attr('style','');
if_needed_make_scrolling_mobile_menu();
opener.removeClass('active');
});
menu.removeClass('open');
$body.removeClass('mobile-menu-open');
overlay.off( click_event, mobileOverlayClickFn );
}
//show menu
else{
menu_list.show(); //helps with menu 'flicker' on IOS
menu.slideDown(200,if_needed_make_scrolling_mobile_menu);
menu.addClass('open');
opener.addClass('active');
$body.addClass('mobile-menu-open');
overlay.on( click_event, mobileOverlayClickFn );
}
},
mobile_submenu_toggle = function(ev){
ev.stopPropagation();
ev.preventDefault();
var li = $(this).parent(),
menu = li.children('ul');
//hide
if(li.hasClass('open')){
menu.slideUp(200, if_needed_make_scrolling_mobile_menu);
li.removeClass('open');
}
//show
else{
menu.slideDown(200, if_needed_make_scrolling_mobile_menu);
li.addClass('open');
}
},
if_needed_make_scrolling_mobile_menu = function(){
var parent_height = header.height() + menu.height(),
parent_top = is_vertical ? parseInt(header.css('top'),10) : parseInt(header.css('margin-top'),10),
available_space = $window.height(),
has_class = header.hasClass(scrollable_class);
//smallest screen width don't need this
if(is_vertical && A13F.layout.size <= break_point[0]){
return;
}
//we have to make menu scrollable
if(!has_class && parent_height > (available_space-parent_top)){
header.addClass(scrollable_class).css(is_vertical?'margin-top' : 'top',$window.scrollTop());
}
//normal fixed menu
else if(has_class && parent_height <= (available_space-parent_top)){
header.removeClass(scrollable_class).css(is_vertical?'margin-top' : 'top','');
}
},
mobileEvents = function(on){
if(typeof on !== 'undefined' && on === false){
header.removeClass('mobile-menu');
//clean after mobile menu cause we did animations on it
menu_init.off(click_event);
menu.removeClass('open').attr('style','');
menu_init.removeClass('active');
menu_list.css('display','');
header_tools.removeClass('menu-open');
header.removeClass(scrollable_class).css('margin-top','');
if(sub_menus.length){
sub_parents.removeClass('open').children('i.sub-mark, span.title').off('click');
sub_menus.removeClass('open').attr('style','');
}
//clean after mobile menu overlay
$body.removeClass('mobile-menu-open');
overlay.off( click_event, mobileOverlayClickFn );
if(!!parseInt(G.close_mobile_menu_on_click, 10)){
//all menu items that are not parent
menu_list.children().not(sub_parents).off('click.mobile');
}
}
else{
header.addClass('mobile-menu');
//bind open menu
//no double binds!
menu_init.off(click_event);
menu_init.on(click_event, mobile_menu_toggle);
if(sub_menus.length){
//bind open submenu
//no double binds!
sub_parents.children('i.sub-mark, span.title').off('click');
sub_parents.children('i.sub-mark, span.title').on('click', mobile_submenu_toggle);
}
if(!!parseInt(G.close_mobile_menu_on_click, 10)){
//all menu items that are not parent
menu_list.children().not(sub_parents).off('click.mobile').on('click.mobile', function(){
menu_init.trigger('click');
});
}
}
},
//resize for menu
layout = function(event, size){
var menu_type = menu.data('menu-type'),
allow_mobile_menu = !!parseInt(G.allow_mobile_menu, 10);
//if wide screen
if(!allow_mobile_menu || (size > break_point[2] && menu_type !== 'desktop')){
mobileEvents(false);
desktopEvents(true);
menu.data('menu-type', 'desktop');
}
//small screen
else if(allow_mobile_menu && (size <= break_point[2] && menu_type !== 'mobile') ){
//clean after desktop version
desktopEvents(false);
mobileEvents(true);
menu.data('menu-type', 'mobile');
}
},
detect_anchors = function(){
var anchors = menu.find('a[href*="#"]').not('a[href="#"]'),
anchors_on_this_page = $([]),
ids_to_watch = [],
active_class = 'current-menu-item',
onlyUnique = function(value, index, self) {
return self.indexOf(value) === index;
},
element_on_screen = function(id){
var $elem = $('#'+id),
windowHeight = $window.height(),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + windowHeight,
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.outerHeight(),
activePoint = docViewBottom - 0.75*windowHeight;//25% height of current screen
return {
'inView' : !(((elemBottom >= docViewBottom) && (elemTop >= docViewBottom)) || ((elemBottom <= docViewTop) && (elemTop <= docViewTop))),
'inActivePoint' : (elemBottom >= activePoint) && (elemTop <= activePoint)
};
},
scrolling = function(){
var elements_on_screen = [],
how_many, id, links, positions;
for(var i = 0; i < ids_to_watch.length; i++){
id = ids_to_watch[i];
links = anchors_on_this_page.filter('a[href*="#'+id+'"]');
positions = element_on_screen(id);
if(positions.inView){
elements_on_screen.push({
links: links,
positions: positions
});
}
else{
links.parent().removeClass(active_class);
}
}
how_many = elements_on_screen.length;
//if only one element is on screen
if( how_many === 1 ){
elements_on_screen[0].links.parent().addClass(active_class);
}
//more elements
else if(how_many > 1){
for(i = 0; i < elements_on_screen.length; i++){
if(elements_on_screen[i].positions.inActivePoint){
elements_on_screen[i].links.parent().addClass(active_class);
}
else{
elements_on_screen[i].links.parent().removeClass(active_class);
}
}
}
},
noProtocolnoQuery = function(url){
return url.split('?', 1)[0].replace(/^https?\:\/\//i, "");
};
if(anchors.length){
//check if anchor is on this site
anchors.each(function(){
var $t = $(this),
href = $t.attr('href').split('/#', 2),
site, id;
//http://site.com/#anchor
if(href.length === 2){
id = href[1];
site = href[0];
}
//#anchor or http://site.com/page#anchor
else{
href = $t.attr('href').split('#', 2);
site = href[0];
id = href[1];
}
if(id.length){
site = noProtocolnoQuery(site);
//is this anchor to this page?
if((site.length && window.location.href.indexOf(site) > -1) || !site.length){
//make sure that these ids really exist on page!
if($('#'+id).length){
anchors_on_this_page = anchors_on_this_page.add($t);
ids_to_watch.push(id);
}
}
}
});
//remove duplicates
ids_to_watch = ids_to_watch.filter( onlyUnique );
//should we watch for something?
if(anchors_on_this_page.length){
$window.scroll(A13F.throttle(scrolling, 500));
scrolling();//initial call
$body.on('revolution.slide.onloaded', scrolling);
}
}
};
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, size);
detect_anchors();
//show menu
menu.addClass('loaded');
},
headerHorizontal: function() {
//process only for horizontal header
if (!header.hasClass('a13-horizontal')) {
return;
}
var last_scroll_top = 0,
last_state = '',
header_height = header.outerHeight(),
top_bar = header.find('div.top-bar-container'),
access = header.find('nav.navigation-bar'),
is_one_line_header = header.hasClass('header-type-one_line'),
shield_logo = is_one_line_header && header.find('div.logo-container').hasClass('shield'),
one_line_header_h = undefined,
first_level_links = header.find('ul.top-menu').children().children('a, span.title'),
sticky_enabled = !header.hasClass('no-sticky'),
sticky_hiding = !header.hasClass('sticky-no-hiding'),
hide_header_until = header.hasClass('hide-until-scrolled-to'),
revolution_sliders = $('div.rev_slider').filter( function(){ return $( 'li[data-variant]', this ).length; } ),
vc_rows = $('div.vc_row').filter('[data-a13-header-color-variant]'),
header_color_variants = G.header_color_variants,
default_page_header_variant = G.default_header_variant,
sticky_header_variant = 'sticky',
current_header_variant = default_page_header_variant,
last_header_variant = default_page_header_variant,
variants = ['dark', 'light', 'normal', sticky_header_variant],
hidden_logo_class = 'hidden-logo',
scrolling_tracking = sticky_enabled || hide_header_until || vc_rows.length || revolution_sliders.length,
sticky_hiding_timeout = 0,
logos = {
normal: header.find('a.normal-logo'),
sticky: header.find('a.sticky-logo'),
light : header.find('a.light-logo'),
dark : header.find('a.dark-logo')
},
social_colors = {
normal: G.header_normal_social_colors.split('|'),
light : G.header_light_social_colors.split('|'),
dark : G.header_dark_social_colors.split('|'),
sticky: G.header_sticky_social_colors.split('|')
},
default_logo,
all_logos = $([]),
all_variants_classes = '',
layout = function(){
if(!shield_logo && is_one_line_header){
one_line_header_h = undefined;
setItemsHeight();
}
//measure
header_height = parseInt(header.outerHeight(), 10);
//padding top of body
if(G.hide_content_under_header === 'content'){
//do nothing
}
else if(G.hide_content_under_header === 'title'){
var title_bar = mid.find('header.outside'),
color_layer = title_bar.children(),
temp;
if(title_bar.length){
//reset
color_layer.css('padding-top', '');
//get neutral values
temp = parseInt(color_layer.css('padding-top'), 10);
color_layer.css('padding-top', header_height + temp);
}
}
else{
//push content below header
$body.css('padding-top', header_height);
}
//refresh
if( scrolling_tracking ) {
scrolling();
}
//inform VC about mess
$window.trigger('resize.vcRowBehaviour');
},
isElementUnderHeader = function($e){
var scroll_top = $window.scrollTop(),
compare_point = scroll_top + parseInt(header_height / 2, 10),
element_height = $e.outerHeight(),
element_top = $e.offset().top;
return compare_point > element_top && compare_point < (element_top + element_height);
},
switchStickyElements = function(on){
if(on){
//show sticky values of header
header.addClass('sticky-values');
if(top_bar.length && !G.header_sticky_top_bar){
if(can_use_transitions) {
//measure
top_bar.css( 'height', top_bar.height()+'px' );
top_bar.on(transitionend_event, onTopBarHideTransitionEndFn);
//requestAnimationFrame often adds class at same repaint, and this blocks animation from running as element is shown at the same time when it suppose to be animated
//that is why setTimeout is more reliable here
setTimeout(function(){ top_bar.addClass('hide').css('height', ''); }, 15);
}
else{
top_bar.addClass('hide').hide();
}
}
if(sticky_hiding) {
clearTimeout(sticky_hiding_timeout);
sticky_hiding_timeout = setTimeout(function(){ header.css('position', 'fixed') },800);
}
$body.trigger('header-sticked');
}
else{
//remove sticky values of header
header.removeClass('sticky-values');
if(top_bar.length && !G.header_sticky_top_bar){
if(can_use_transitions) {
//measure what height should be
top_bar.show().addClass('measure');
var height = top_bar.height();
top_bar.removeClass('measure');
top_bar.on(transitionend_event, onTopBarShowTransitionEndFn);
//requestAnimationFrame often adds class at same repaint, and this blocks animation from running as element is shown at the same time when it suppose to be animated
//that is why setTimeout is more reliable here
setTimeout(function(){ top_bar.removeClass('hide').css('height', height+'px'); }, 15);
}
else{
top_bar.show().removeClass('hide');
}
}
if(sticky_hiding) {
clearTimeout(sticky_hiding_timeout);
sticky_hiding_timeout = setTimeout(function(){ header.css('position', '') },800);
}
$body.trigger('header-unsticked');
}
},
changeSocials = function(remove, add){
header.children('div.head').find('div.socials')
.removeClass(social_colors[remove][0]+' '+social_colors[remove][1])
.addClass(social_colors[add][0]+' '+social_colors[add][1]);
if(top_bar.length){
top_bar.find('div.socials')
.removeClass(social_colors[remove][2]+' '+social_colors[remove][3])
.addClass(social_colors[add][2]+' '+social_colors[add][3]);
}
},
scrolling = function(e, data){
if(sticky_enabled){
var st = $window.scrollTop(),
top_of_site = st === 0 || st < 0,
normal_header_area = st < header_height,
scrolling_down = st > last_scroll_top,
scrolling_up = st < last_scroll_top,
index = 0;
if(!normal_header_area && scrolling_down && last_state !== 'noTop_scrollingDown' ){
last_state = 'noTop_scrollingDown';
//header fixed hidden
if(sticky_hiding){
header.addClass('sticky-hide');
}
switchStickyElements(1);
}
else if(normal_header_area && scrolling_down && last_state !== 'top_scrollingDown' ){
last_state = 'top_scrollingDown';
//do nothing, normal header still visible
}
else if(sticky_hiding && top_of_site && scrolling_up && header.hasClass('sticky-values')){
header.css('position', '');//instant set
header.removeClass('sticky-hide');
switchStickyElements(0);
}
else if(sticky_hiding && normal_header_area && scrolling_up && last_state !== 'top_scrollingUp' && last_state !== 'top_scrollingDown' ){
header.css('position', 'fixed');//instant set
last_state = 'top_scrollingUp';
header.removeClass('sticky-hide');
}
else if(!sticky_hiding && normal_header_area && scrolling_up && last_state !== 'top_scrollingUp' && last_state !== 'top_scrollingDown' ){
last_state = 'top_scrollingUp';
switchStickyElements(0);
}
else if(!normal_header_area && scrolling_up && last_state !== 'noTop_scrollingUp' ){
last_state = 'noTop_scrollingUp';
//header fixed show
if(sticky_hiding) {
header.css('position', 'fixed');//instant set
header.removeClass('sticky-hide');
}
switchStickyElements(1)
}
else{
//first call or resize event after load - we do nothing
}
last_scroll_top = st;
}
var element_under_header = false;
//check if there is any slider with variants added
if(revolution_sliders.length){
for( index = 0; index < revolution_sliders.length; index++){
var slider = revolution_sliders.eq(index);
if(isElementUnderHeader(slider)){
var slide,
temp_variant = undefined;
//from swap event
if(typeof e !== 'undefined' && typeof e.type !== 'undefined' && e.type === 'revolution' && e.namespace === 'onbeforeswap.slide'){
//check if we received event from slider that is under header
if(data.nextslide.parents('div.rev_slider').eq(0).is(slider)){
temp_variant = data.nextslide.attr('data-variant');
}
//if not then we are not interested and we finish function
else{
return;
}
}
//from scroll event
else{
slide = slider.attr('data-slideactive');
if(typeof slide !== 'undefined'){
temp_variant = slider.find('li[data-index="'+slide+'"]').attr('data-variant');
}
}
//if there is none variant defined for slide, then we will look in rows
if( typeof temp_variant !== 'undefined'){
element_under_header = true;
setCurrentHeaderVariant( temp_variant );
}
//we don't need to check other sliders
break;
}
}
}
//no slider were matched, lets try row
if(!element_under_header && vc_rows.length){
for( index = 0; index < vc_rows.length; index++){
if(isElementUnderHeader(vc_rows.eq(index))){
element_under_header = true;
setCurrentHeaderVariant( vc_rows.eq(index).attr('data-a13-header-color-variant') );
//we don't need to check other rows
break;
}
}
}
//if none row or slider was matched get default variant for page
if(!element_under_header){
setCurrentHeaderVariant();//empty on purpose
}
if(hide_header_until){
var show_after = parseInt(G.show_header_at, 10),
row = {};
show_after = show_after > 0 ? show_after : 1;
//Elementor page builder
if(typeof elementorFrontend === 'object' ){
row = $('.elementor-section-wrap').children().eq(show_after-1);
}
//WPBakery Page builder
else if(typeof vc_js === 'function' ){
row = mid.find('div.real-content').children('div.vc_row').eq(show_after-1);
}
if( row.length && ($window.scrollTop() < row.offset().top ) ){
header.addClass('hide-until-scrolled-to')
}
else{
header.removeClass('hide-until-scrolled-to')
}
}
},
setItemsHeight = function(e){
//noinspection JSValidateTypes
var h = parseInt(header.find('div.logo-container').find('a.logo').not('.hidden-logo').innerHeight(), 10),
allow_mobile_menu = !!parseInt(G.allow_mobile_menu, 10),
size = A13F.layout.size;
//if this is undefined then we are probably measuring layout when header is in its default state
if (typeof one_line_header_h === 'undefined' || (typeof e !== 'undefined' && e.type === 'a13LogoLoaded')) {
one_line_header_h = h;
}
//when header is unsticked we can use stored height of logo
//to make animations of logo and line height go in same time to proper values
if(typeof e !== 'undefined' && e.type === 'header-unsticked'){
h = one_line_header_h;
}
//menu enabled
if(first_level_links.length){
if(size > break_point[2] || !allow_mobile_menu){
first_level_links.css({ 'line-height' : h+'px', height : h+'px'});
}
else{
first_level_links.css({ 'line-height' : '', height : ''});
}
}
//we don't have any menu links to work on
else{
if(size > break_point[2]){
access.css('min-height', h);
}
else{
access.css('min-height', '');
}
}
},
setCurrentHeaderVariant = function(new_current_variant){
//if header color variants are disabled
if(header_color_variants === 'off'){
return;
}
//only sticky changes are possible so overwrite send value
if(header_color_variants === 'sticky'){
new_current_variant = 'normal';
}
last_header_variant = current_header_variant;
current_header_variant = new_current_variant;
//if not defined variant then use default one for current header
if( typeof current_header_variant === 'undefined' ){
if(header.hasClass('sticky-values')){
current_header_variant = sticky_header_variant;
}
else{
current_header_variant = default_page_header_variant;
}
}
//if "normal" variant for sticky header then use sticky color variant for it
else if( current_header_variant === 'normal' && header.hasClass('sticky-values') ){
current_header_variant = sticky_header_variant;
}
//skip if variant didn't change
if(last_header_variant === current_header_variant){
return;
}
cleanHeaderVariants();
showHeaderVariant();
},
cleanHeaderVariants = function(){
//clean all variants
header.removeClass(all_variants_classes);
//hide other logos
if( all_logos.length ){
all_logos.addClass(hidden_logo_class);
}
//change socials
changeSocials(last_header_variant, default_page_header_variant);
},
showHeaderVariant = function(){
//set header variant
header.addClass('a13-' + current_header_variant + '-variant' );
//set logo
if(logos[current_header_variant].length){
logos[current_header_variant].removeClass(hidden_logo_class);
}
//make sure that default logo will be visible if there is no logo for selected variant
else{
default_logo.removeClass(hidden_logo_class);
}
//change socials
changeSocials(default_page_header_variant, current_header_variant);
},
onTopBarHideTransitionEndFn = function(ev){
//do it only after visibility transition
if( !top_bar.is(ev.target) || ev.originalEvent.propertyName !== 'visibility' ){ return; }
top_bar.off( transitionend_event, onTopBarHideTransitionEndFn );
top_bar.hide();
},
onTopBarShowTransitionEndFn = function(ev){
//do it only after opacity transition
if( !top_bar.is(ev.target) || ev.originalEvent.propertyName !== 'opacity' ){ return; }
top_bar.off( transitionend_event, onTopBarShowTransitionEndFn );
top_bar.css({
'display' : '',
'height' : ''
});
};
//setup variables depending on default variant for current page
for(var i = 0; i < variants.length; i++){
all_variants_classes += ' a13-'+variants[i]+'-variant';
all_logos = all_logos.add(logos[variants[i]]);
//remember default page logo
if(default_page_header_variant === variants[i]){
if(logos[variants[i]].length){
default_logo = logos[variants[i]];
}
//if no logo for current variant then set "normal" as default
else{
default_logo = logos['normal'];
}
}
}
//fix header height for single line header
if(!shield_logo && is_one_line_header){
$body.on('a13LogoLoaded header-unsticked header-sticked', setItemsHeight );
//safe mechanism for logo
header.find('a.logo').on(transitionend_event, function(e){
if( e.originalEvent.propertyName === 'padding-top' ){
if(header.hasClass('sticky-values')){
setItemsHeight();
}
//make sure layout is in proper place if it is not sticky header now
else{
setTimeout(function(){ layout({}, A13F.layout.size); }, 500);
}
}
});
//because of line height animation we have to act on its change
if(first_level_links.length){
first_level_links.eq(0).on(transitionend_event, function(e){
if( first_level_links.eq(0).is(e.target) && e.originalEvent.propertyName === 'height' ){
if(!header.hasClass('sticky-values')) {
layout({}, A13F.layout.size);
}
}
});
}
}
$body.on('a13LogoLoaded', layout);
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, A13F.layout.size);
//only if sticky version is enabled
if(scrolling_tracking){
$window.scroll(A13F.throttle(scrolling, 250));
}
if ( revolution_sliders.length ) {
revolution_sliders.on('revolution.slide.onbeforeswap', scrolling);
}
},
headerVertical: function(){
//process only for vertical header
if(!header.hasClass('vertical')){
return;
}
var windowWidth,
top,
bottom,
top_offset,
new_offset,
whole_offset,
admin_bar_height,
top_border_offset,
bottom_border_offset,
borders_offset,
header_height,
window_height,
body_height,
resize_timer,
header_content = header.find('div.head'),
stick_to_bottom_class = 'stick_to_bottom',
stick_to_top_class = 'stick_to_top',
footer_marker = 'footer-was-here',
previous_window_top = 0,
current_window_top = 0,
ticking = false,
is_border_layout = $body.hasClass('site-layout-bordered'),
is_border_layout_top = is_border_layout && !$body.hasClass('no-border-top'),
is_border_layout_bottom = is_border_layout && !$body.hasClass('no-border-bottom'),
borders = $('div.theme-borders'),
top_border = borders.find('div.top-border'),
bottom_border = borders.find('div.bottom-border'),
mobile_resolution = false,
calcOffsets = function(){
window_height = $window.height();
body_height = $body.height();
admin_bar_height = is_adminbar ? parseInt(admin_bar.height(), 10) : 0;
top_border_offset = is_border_layout_top ? parseInt(top_border.height(), 10) : 0;
bottom_border_offset = is_border_layout_bottom ? parseInt(bottom_border.height(), 10) : 0;
borders_offset = top_border_offset + bottom_border_offset;
top_offset = admin_bar_height + top_border_offset;
whole_offset = admin_bar_height + borders_offset;
},
scroll = function(){
current_window_top = html.scrollTop || window.pageYOffset || 0; //IE8 || modern || 0 for undefined value in IE 8 if scrolled to top
requestTick();
},
requestTick = function() {
if (!ticking) {
requestAnimationFrame( function(){ update(); } );
}
ticking = true;
},
reset = function(){
//unpin and clean
top = bottom = false;
header.css('top', '').removeClass(stick_to_top_class).removeClass(stick_to_bottom_class);
//set position so it wont be equal to current position
previous_window_top = -1;
},
update = function(resize) {
if(typeof resize === 'undefined'){
resize = false;
}
// reset the tick so we can
// capture the next onScroll
ticking = false;
if ( break_point[2] > windowWidth ) {
return;
}
header_height = header_content.innerHeight();
//resize occurred
if(resize){
reset();
}
if ( header_height > window_height - whole_offset ) {
//scroll down
if ( current_window_top >= previous_window_top ) {
//top edge was pinned
if ( top ) {
//unpin top edge
top = false;
header.removeClass(stick_to_top_class);
new_offset = current_window_top + admin_bar_height;
header.css('top', new_offset);
}
//bottom edge not pinned
else if ( ! bottom && //not pinned yet
current_window_top + window_height > header_height + header.offset().top + bottom_border_offset && //position of window is bigger then unpinned header position
header_height + whole_offset < body_height //header is smaller then body height
) {
bottom = true;
header.css('top', '').addClass(stick_to_bottom_class).removeClass(stick_to_top_class);
}
}
//scroll up
else if ( current_window_top < previous_window_top ) {
//bottom is pinned
if ( bottom ) {
//unpin bottom edge
bottom = false;
header.removeClass(stick_to_bottom_class);
new_offset = current_window_top - borders_offset + window_height - header_height;
header.css('top', new_offset);
}
else if ( ! top && current_window_top + top_offset < header.offset().top ) {
top = true;
header.css('top', '').addClass(stick_to_top_class).removeClass(stick_to_bottom_class);
}
}
}
else if ( ! top ) {
top = true;
bottom = false;
header.css('top', '').addClass(stick_to_top_class).removeClass(stick_to_bottom_class);
}
previous_window_top = current_window_top;
},
resizeAndScroll = function () {
windowWidth = $window.width();
current_window_top = html.scrollTop || window.pageYOffset || 0; //IE8 || modern || 0 for undefined value in IE 8 if scrolled to top
update(true);
},
//resize function
layout = function(event, size){
calcOffsets();
var access = header.find('nav.navigation-bar');
//reset padding in header
header_content.css('padding-bottom', '');
//reset vertical header menu space
access.css('height', '');
var header_padding = parseInt( header_content.css('padding-bottom'), 10);
if(size > break_point[2]){
if(mobile_resolution){
//give time for transitions if we are switching from smaller to bigger resolution
mobile_resolution = false;
clearTimeout( resize_timer );
resize_timer = setTimeout( function(){ layout(event, size); }, 500 );
//we will get back here in 500ms
return;
}
//remove inline padding for mid, that could be set on smaller resolutions
mid.css('padding-top', '' );
//position footer inside of header
if(footer.length){
//if header is not placed in header yet
if( !$('#' + footer_marker).length){
//put marker
footer.before('<div id="'+footer_marker+'" />');
//move footer
header_content.append(footer);
}
//padding positioning away from footer
header_content.css('padding-bottom', footer.outerHeight(true) + header_padding );
}
//prepare space for vertically centered header
var window_height = parseInt($window.height(), 10),
access_height;
if( parseInt(header.height(), 10) <= window_height ){
access_height = parseInt(access.height(), 10) + (window_height - whole_offset - parseInt(header_content.innerHeight(), 10 ) );
access.css('height', access_height);
}
//attach events for header scrolling
if(typeof header.data('scrolling-events') === 'undefined'){
header.data('scrolling-events', true);
$window
.on( 'scroll.header', scroll)
.on( 'mess_in_header', function(){ /* so no event object is passed */ update(); } )
.on( 'resize.header', function() {
clearTimeout( resize_timer );
resize_timer = setTimeout( resizeAndScroll, 500 );
} );
//initial call
update();
}
}
//resolution smaller or equal then 1024
else{
reset();
mobile_resolution = true;
//make sure footer is not in header anymore
if(footer.length && header_content.find(footer).length) {
$('#' + footer_marker).after(footer).remove();
header_content.css('padding-bottom', '');
}
//de-attach any events for header scrolling
if(typeof header.data('scrolling-events') !== 'undefined'){
header.removeData('scrolling-events');
$window.off( 'scroll.header mess_in_header resize.header');
clearTimeout( resize_timer );
header.css('top', '').removeClass(stick_to_top_class).removeClass(stick_to_bottom_class);
}
//resolution smaller or equal then 600
if(size <= break_point[0]){
//remove inline padding for mid, that could be set on smaller resolutions
mid.css('padding-top', '' );
}
//smaller resolutions (601 - 1024)
else{
mid.css('padding-top', header.height() );
}
}
};
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, A13F.layout.size);
//layout again if there are some images in footer
if(footer.length){
footer.imagesLoaded( function() {
layout({}, A13F.layout.size);
});
}
},
headerSearch: function(){
//showing search field
var search_button = header_tools.find('#search-button');
if(search_button.length){
var parent = header.find('div.search-container'),
results_parent = $('#search-results-header'),
sf = parent.find('form.search-form'),
input = sf.find('input[name="s"]'),
close = sf.next(),//span
onShowTransitionEndFn = function(ev){
//do it only after opacity transition
if( ev.originalEvent.propertyName !== 'opacity' ){ return; }
parent.off( transitionend_event, onShowTransitionEndFn );
input.focus();
},
onHideTransitionEndFn = function(ev){
//do it only after visibility transition
if( ev.originalEvent.propertyName !== 'visibility' ){ return; }
parent.off( transitionend_event, onHideTransitionEndFn );
parent.removeClass('open')
};
search_button.on('click', function(){ //do not use click_event here, cause it closes item
if(parent.hasClass('open')){
close.click();
return;
}
parent.addClass('open');
if(can_use_transitions){
parent.on( transitionend_event, onShowTransitionEndFn );
//requestAnimationFrame often adds class at same repaint, and this blocks animation from running as element is shown at the same time when it suppose to be animated
//that is why setTimeout is more reliable here
setTimeout(function(){ parent.addClass('show'); }, 15);
}
else{
parent.addClass('show');
input.focus();
}
search_button.addClass('active');
});
close.on( click_event, function(e){
e.preventDefault();
if(can_use_transitions){
parent.on( transitionend_event, onHideTransitionEndFn );
}
else{
parent.removeClass('open')
}
parent.removeClass('show');
search_button.removeClass('active');
});
if(results_parent.length){
input.on('keydown', function (event) {
var key = event.keyCode,
//enter, esc, arrows
reserved_keys = [13,27,38,40];
//pressed reserved key
if(reserved_keys.indexOf(key) > -1){
var results = results_parent.find('div.searchwp-live-search-result');
//we have some results to operate on
if(results.length){
var current = results.filter('.active'),
operation,
mark = function(element){
element = typeof element === 'undefined' ? [] : element;
results.removeClass('active');
if(element.length){
element.addClass('active');
}
};
// Down Arrow
if( key === 40){
//find next result
if(current.length){
operation = current.next();
if(operation.length){
mark(operation);
}
//unmark results
else{
mark();
}
}
//mark first result
else{
mark(results.first());
}
}
// Up Arrow
else if( key === 38 ){
//find previous result
if(current.length){
operation = current.prev();
if(operation.length){
mark(operation);
}
//unmark results
else{
mark();
}
}
//mark last result
else{
mark(results.last());
}
}
// Esc
else if( key === 27 ){
//unmark results
mark();
}
// Enter
else if( key === 13 ){
//go to current result if any is selected
if(current.length){
window.location.href = current.find('a').attr('href');
}
}
event.stopPropagation();
event.preventDefault();
}
}
});
}
}
},
topMessage : function(){
var tm = $('#top-closable-message');
if(tm.length){
var button = tm.find('div.button').children(),
x = tm.find('span.close-sidebar'),
onHideTransitionEndFn = function(ev){
//do it only after opacity transition
if( ev.originalEvent.propertyName !== 'opacity' ){ return; }
tm.off( transitionend_event, onHideTransitionEndFn );
tm.remove();
};
button.add(x).one( click_event, function(ev){
ev.stopPropagation();
ev.preventDefault();
//hide message
if(can_use_transitions){
tm.on( transitionend_event, onHideTransitionEndFn );
tm.addClass('hide');
}
else{
tm.addClass('hide');
tm.remove();
}
//set cookie that message was read
A13F.cookieExpire('apollo13framework_top_msg=closed', 7*24);//7 days
});
}
},
toolsLanguages : function(){
var switcher = $('#tools-lang-switcher');
if(switcher.length){
var langs = switcher.parent();
switcher.on( click_event, function(){
langs.toggleClass('open');
});
}
},
toTop : function(){
var tt = $('#to-top'),
cb = function(){
if ($window.scrollTop() > 100) {
tt.addClass('show');
} else {
tt.removeClass('show');
}
};
if(tt.length){
cb(); //fire after refresh
$window.scroll(A13F.debounce(cb, 250));
}
},
scrollToAnchor : function(){
var move = function(target, href){
$('html,body').animate({
scrollTop: Math.round(target.offset().top)
}, 1000,
function () {
if(typeof href !== 'undefined'){
window.location.hash = href;
}
}
);
},
contentAnchorsFilter = function(){
//we don't do script on VC pagination elements
var item = $(this);
return !(item.parent().hasClass('vc_pagination-item') || item.parents('li.vc_tta-tab').length || item.parents('h4.vc_tta-panel-title').length || item.hasClass('lae-tab-label'));
},
disableOtherPlugins = function(){
var $events = $('a').filter('[href*="#"]').length ? $._data(document,"events") : null;
if($events && typeof $events.click !== 'undefined'){
for(var i = $events.click.length-1; i >= 0; i--){
var handler = $events.click[i];
if( handler && handler.selector === 'a[href*="#"]' ){
handler.selector='a[href*="#"]:not(a)';
}
}
}
};
//check if current page has hash and there is such element
if(window.location.hash.length){
var href = decodeURIComponent(window.location.hash);
//if href is not one of those values
if(['#','#!'].indexOf(href) === -1 && href.indexOf('=') === -1 && href.indexOf('&') === -1){
var target = $(href),
one_page_target = $('div.vc_row[data-a13-one-page-pointer=' + href.slice(1) +']');
target = target.length ? target : $('[name=' + href.slice(1) +']');
target = target.add(one_page_target);
if (target.length) {
//delay scroll cause page is still loading
setTimeout(function(){ move(target, href); }, 1500);
}
}
}
//menus
var top_menu = $('ul.top-menu'),
menu_overlay = $('#menu-overlay');
//scan for anchors
var content_anchors = mid.find('a').filter('[href*="#"]').not('[href="#"]').not('[href*="#!"]').not('[data-vc-container]').filter(contentAnchorsFilter),
menu_anchors = top_menu.length ? top_menu.find('a').filter('[href*="#"]').not('[href="#"]').not('[href*="#!"]') : [],
menu_overlay_anchors = menu_overlay.length ? menu_overlay.find('a').filter('[href*="#"]').not('[href="#"]').not('[href*="#!"]') : [],
//connect all anchors
anchors = content_anchors.add(menu_anchors).add(menu_overlay_anchors).add('#to-top');
anchors.click(function(e) {
if (location.pathname.replace(/^\//,'') === this.pathname.replace(/^\//,'') && location.hostname === this.hostname) {
var href = decodeURIComponent(this.hash),
target = $(href),
one_page_target = $('div.vc_row[data-a13-one-page-pointer=' + href.slice(1) +']');
target = target.length ? target : $('[name=' + href.slice(1) +']');
target = target.add(one_page_target);
if (target.length && target.is(':visible')) {
//not adding anchor in address bar
if(!G.anchors_in_bar){
move(target);
if(typeof history !== 'undefined' && history.pushState) {
history.pushState(null, null, window.location.pathname);
}
}
//adding anchor in bar(after scroll animation)
else{
move(target, href);
}
e.preventDefault(); //<- not adding anchor but allows propagation
//return false; //<- this prevents propagation so click events don't fire on other elements,
// but we need them in hiding mobile navigation on one pagers
}
}
});
$window.on('load',function(){
setTimeout( disableOtherPlugins, 300 );
});
},
menuOverlay : function(){
var switches = $( '#menu-overlay-switch' );
if( switches.length ){
var menu = $('#menu-overlay'),
closing_x = $('span.close-menu'),
resetMenu = function() {
switches.removeClass('active');
menu.removeClass('open');
},
openFn = function(ev) {
ev.stopPropagation();
ev.preventDefault();
if( menu.hasClass('open') ){
closeFn(ev);
return;
}
switches.addClass('active');
menu.addClass('open');
menu.on( transitionend_event, onHideTransitionEndFn );
//check if content isn't too high
if(menu.children().height() > menu.height()){
menu.addClass('big-content');
}
},
onHideTransitionEndFn = function( ev ) {
//do it only after visibility transition
if( ev.originalEvent.propertyName !== 'visibility' ){ return; }
//and only if it is menu element
if(menu.is(ev.target)){
menu.off( transitionend_event, onHideTransitionEndFn );
menu.removeClass( 'big-content' );
}
},
closeFn = function(e) {
e.preventDefault();
resetMenu();
};
switches.on( click_event, openFn );
closing_x.on( click_event, closeFn );
if(!!parseInt(G.menu_overlay_on_click, 10)){
menu.find('.menu-item').find('a').on('click', function(){
closing_x.trigger('click');
});
}
}
},
sideMenu : function(){
var switches = $( '#side-menu-switch' );
if( switches.length ){
var postfix_size = '-switch'.length,
closing_x = $('span.close-sidebar'),
overlay = $('#content-overlay'),
id,
resetMenu = function() {
switches.removeClass('active');
$body.removeClass( id+'-open');
},
bodyClickFn = function(evt) {
evt.preventDefault();
var target = $(evt.target);
if(target.is(closing_x) || !target.parents().addBack().hasClass( 'side-widget-menu' ) ) {
resetMenu();
overlay.off( click_event, bodyClickFn );
closing_x.off( click_event, bodyClickFn );
}
};
switches.on( click_event, function(ev) {
ev.stopPropagation();
ev.preventDefault();
var sw = $(this),
sw_id = sw.attr('id');
//close if it is open
if(sw.hasClass('active')){
overlay.trigger('click');
}
else{
//hide if any other element with overlay is open
overlay.trigger('click');
sw.addClass('active');
id = sw_id.slice(0, sw_id.length - postfix_size);
$body.addClass(id+'-open');
overlay.on( click_event, bodyClickFn );
closing_x.on( click_event, bodyClickFn );
}
});
}
},
basketMenu : function(){
var switcher = $( '#basket-menu-switch' );
if( switcher.length ){
var closing_x = $('span.close-sidebar'),
id = 'basket-menu',
sidebar = $('#' + id),
is_vertical = header.hasClass('vertical'),
is_vertical_right = is_vertical && $body.hasClass('header-side-right'),
basketPosition = function(){
var size = A13F.layout.size,
top, side;
//in case previous animation did not finish
cleanUpAfterEffect();
if(is_vertical_right && (size > break_point[2])){
top = parseInt(switcher.offset().top, 10);
side = parseInt(header.offset().left, 10) - sidebar.innerWidth();
}
else if(is_vertical && (size > break_point[2])){
top = parseInt(switcher.offset().top, 10);
side = parseInt(header.outerWidth(), 10) + parseInt(header.offset().left, 10);
}
else{
top = parseInt(header.offset().top, 10) + parseInt(header.outerHeight(), 10);
side = parseInt(switcher.offset().left, 10) - 160 + parseInt(switcher.width()/2);
if(side + 320 > $window.width()){
side = ($window.width() - 320);
}
}
return {display: 'block', top: top, left: side };
},
resetMenu = function() {
switcher.removeClass('active');
$body.removeClass( id+'-open');
},
bodyClickFn = function(evt) {
var target = $(evt.target),
size = A13F.layout.size;
if(target.is(closing_x) || !target.parents().addBack().hasClass( 'basket-sidebar' ) ) {
resetMenu();
if(can_use_transitions){
if(is_vertical && (size > break_point[2])){
sidebar.css('transform', 'translateY(100%)');
sidebar.on( transitionend_event, onHideTransitionEndFn );
sidebar.removeClass('show');
}
else{
sidebar.on( transitionend_event, onHideTransitionEndFn );
sidebar.removeClass('show');
}
}
else{
sidebar.removeClass('show');
cleanUpAfterEffect();
}
$body.off( click_event, bodyClickFn );
closing_x.off( click_event, bodyClickFn );
}
},
onHideTransitionEndFn = function(ev){
//do it only after visibility transition
if( !sidebar.is(ev.target) || ev.originalEvent.propertyName !== 'visibility' ){ return; }
cleanUpAfterEffect();
},
cleanUpAfterEffect = function(){
sidebar.off( transitionend_event, onHideTransitionEndFn );
sidebar.hide().css('transform', '');
};
switcher.on( click_event, function(ev) {
ev.stopPropagation();
ev.preventDefault();
//if we are clicking switcher again to close basket
if($body.hasClass(id+'-open')){
//propagation is stopped so we need to trigger it
bodyClickFn({target:closing_x});
return;
}
switcher.addClass('active');
$body.addClass(id+'-open');
//count position
sidebar.css(basketPosition());
//requestAnimationFrame often adds class at same repaint, and this blocks animation from running as element is shown at the same time when it suppose to be animated
//that is why setTimeout is more reliable here
setTimeout(function(){ sidebar.addClass('show'); }, 15);
$body.on( click_event, bodyClickFn );
closing_x.on( click_event, bodyClickFn );
});
}
},
titleBar : function(){
var tb = mid.find('header.title-bar.has-effect');
if(tb.length){
$window.on('scroll resize a13_title_bar_trigger', function() {
var move_edge = 50, // we can move detection of edge of range by x px
window_top = html.scrollTop || window.pageYOffset || 0, //IE8 || modern || 0 for undefined value in IE 8 if scrolled to top
window_height = parseInt($window.height(), 10),
elem_height = parseInt(tb.outerHeight(), 10),
top_range = parseInt(tb.offset().top, 10) + move_edge,
end_range = (top_range + elem_height),
range = elem_height,
percent_in_range = (window_top - top_range) / range;
if(percent_in_range < 0 ){
percent_in_range = 0;
}
if(percent_in_range > 1 ){
percent_in_range = 1;
}
//we can see element
if(window_top > end_range && window_top+window_height < top_range){
//not visible on screen, we do nothing
}
else{
tb.children().children().css({ //div.in
position: 'relative',
top : (elem_height * percent_in_range),
opacity: 1 - (2.5*percent_in_range)
});
}
});
//start call
$window.trigger('a13_title_bar_trigger');
}
},
pageSlider : function(){
var sliders = $(".item-slider");
if(sliders.length){
//noinspection JSUnresolvedFunction
sliders.filter(function () {
var images = $(this).find('img');
return images.length > 1;
})
.slidesjs({
width: 940,
height: 528.75,
pagination: {
active: true
},
navigation: {
active: false,
// [boolean] Generates next and previous buttons.
// You can set to false and use your own buttons.
// User defined buttons must have the following:
// previous button: class="slidesjs-previous slidesjs-navigation"
// next button: class="slidesjs-next slidesjs-navigation"
effect: "slide"
// [string] Can be either "slide" or "fade".
},
play: {
active: false,
// [boolean] Generate the play and stop buttons.
// You cannot use your own buttons. Sorry.
effect: "slide",
// [string] Can be either "slide" or "fade".
interval: 5000,
// [number] Time spent on each slide in milliseconds.
auto: true,
// [boolean] Start playing the slideshow on load.
swap: false,
// [boolean] show/hide stop and play buttons
pauseOnHover: false,
// [boolean] pause a playing slideshow on hover
restartDelay: 2500
// [number] restart delay on inactive slideshow
}
});
}
},
footer : function(){
if(footer.length && header.hasClass('a13-horizontal')){
var unravel_effect = footer.hasClass('unravel'),
footer_height,
//for unravel effect
scrolling = function(){
var st = $window.scrollTop(),
document_height = $(document).height(),
window_height = $window.height();
if(document_height - window_height - st <= footer_height){
footer.removeClass('hide-it');
}
else{
footer.addClass('hide-it');
}
},
layout = function(event, size){
footer_height = footer.outerHeight();
$window.off('scroll.footer');
if (size <= break_point[2]) {
//make sure footer will be on bottom of page
var offset = parseInt(mid.offset().top, 10),
padding = parseInt(mid.css('padding-top'), 10),
space = $window.height();
mid.css('min-height', space - (offset + padding + footer_height));
//remove unravel effect for small screens
if(unravel_effect){
mid.css('margin-bottom', '');
footer.removeClass('hide-it');
}
}
else{
//don't push footer on big screens
mid.css('min-height', '');
//unravel effect
if(unravel_effect){
$window.on('scroll.footer', A13F.throttle(scrolling, 50));
mid.css('margin-bottom', footer_height);
scrolling();
}
}
};
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, A13F.layout.size)
}
},
blogMasonry : function($scope){
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('div.posts-grid-container'),
is_vertical = header.hasClass('vertical');
for(var i = 0; i < $container.length; i++){
var _container = $container.eq(i),
filter = _container.parent().prev('ul.posts-filter');
//skip if it was initialized already
if(_container.data('isotope')){
continue;
}
if(is_vertical) {
filter = filter.add(header.find('ul.blog-filter')); //blog not posts
}
A13F.elementsActions.lazyLoadBricks({
container : _container,
items : '.archive-item',
filter : filter,
gutter : _container.data('margin'),
layoutMode : G.posts_layout_mode
});
}
},
shopMasonry : function(){
A13F.elementsActions.lazyLoadBricks({
container : mid.find('.content-box').children('.formatter').children('ul.products'),//make sure only main list is affected
items : 'li.product',
filter : '',
gutter : G.products_brick_margin,
layoutMode : G.products_layout_mode
});
},
albumsListMasonry : function($scope){
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('div.albums-grid-container'),
is_vertical = header.hasClass('vertical');
for(var i = 0; i < $container.length; i++){
var _container = $container.eq(i),
filter = _container.parent().prev('ul.albums-filter');
//skip if it was initialized already
if(_container.data('isotope')){
continue;
}
if(is_vertical) {
filter = filter.add(header.find('ul.albums-filter'));
}
A13F.elementsActions.lazyLoadBricks({
container : _container,
items : '.archive-item',
filter : filter,
gutter : _container.data('margin'),
layoutMode : G.albums_list_layout_mode
});
}
},
worksListMasonry : function($scope){
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('div.works-grid-container'),
is_vertical = header.hasClass('vertical');
for(var i = 0; i < $container.length; i++){
var _container = $container.eq(i),
filter = _container.parent().prev('ul.works-filter');
//skip if it was initialized already
if(_container.data('isotope')){
continue;
}
if(is_vertical) {
filter = filter.add(header.find('ul.works-filter'));
}
A13F.elementsActions.lazyLoadBricks({
container : _container,
items : '.archive-item',
filter : filter,
gutter : _container.data('margin'),
layoutMode : G.works_list_layout_mode
});
}
//bind to VC grid elements loaded event
$window.on('grid:items:added', function(){
//post is loaded
$body.trigger( 'post-load' );
});
},
peopleListMasonry : function($scope){
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('div.people-grid-container');
for(var i = 0; i < $container.length; i++){
var _container = $container.eq(i);
//skip if it was initialized already
if(_container.data('isotope')){
continue;
}
A13F.elementsActions.lazyLoadBricks({
container : _container,
items : '.archive-item',
filter : _container.parent().prev('ul.people-filter'),
gutter : _container.data('margin'),
layoutMode : G.people_list_layout_mode
});
}
},
A13PostLightbox : function(){
var next_item, prev_item,
lightbox_id = '#a13-post-lightbox',
lightbox_url_prefix = '#a13lightbox-',
history_api = typeof history !== 'undefined' && history.pushState,
openItemInLightbox = function(target, add_history){
if(typeof add_history === 'undefined'){
add_history = true;
}
//create lightbox
createLightbox();
var lightbox = $(lightbox_id);
//push URL state
if(add_history) {
var base_url = window.location.href.split("#")[0],
new_state = base_url+lightbox_url_prefix+target.parents().filter('.object-item').eq(0).attr('data-id');
pushNewState(new_state);
}
$html.addClass('post-lightbox-active');
//make ajax call for content
lightbox.children('div.a13-post-lightbox-content')
.load(target.attr('href'), 'a13-ajax-get', function () {
lightbox.removeClass('loading');
//get links for next and previous post, but next and previous are items from post grid
getNavLinks(target);
//post is loaded
$body.trigger( 'post-load' );
//prepare HTML5 videos for slider
var $gallery = lightbox.find(".gallery-media-collection");
if( $gallery.length ) {
var $gallery_items = $gallery.children();
$gallery_items.each(function () {
var $el = $(this),
$video = $el.find('div.album-video');
if ($video.length) {
$el.attr('data-html', '#' + $video.attr('id'));
}
});
}
//run some scripts for content
A13F.elementsActions.useSlider(lightbox.find('.a13-slider-stuff'));
//Visual Composer
if(typeof vc_js === 'function' ){
vc_js();
}
//block scroll to not move too far
//load images
lightbox
.find('div.real-content')
.add(lightbox.find('div.similar-works-frame'));
});
},
openFromHash = function(href){
//if found lightbox prefix
if(href.indexOf(lightbox_url_prefix) === 0 ){
var lb_id = href.slice(lightbox_url_prefix.length),
lb_item;
lb_item = $('div[data-id="'+lb_id+'"]').children('a');
if(lb_item.length){
openItemInLightbox(lb_item, false);
}
}
//if lightbox is open then close it
else{
var lightbox = $(lightbox_id);
if(lightbox.length && lightbox.is(':visible')){
lightbox.children('div.controls').find('span.close').trigger('click');
}
}
},
pushNewState = function(new_state){
if(history_api) {
//don't push same state two times in a row
if(new_state !== window.location.href){
history.pushState(null, null, new_state);
}
}
},
getNavLinks = function(current_element){
var parents = current_element.parents(),
controls = $(lightbox_id).children('div.controls'),
item;
//if item was from similar-works then search in post lists
if(parents.is('div.similar-works-frame')){
//switch item to posts list item if possible
item = $('#'+parents.filter('.object-item').attr('id'));
if(item.length){
parents = item.parents();
}
}
//look in works list
if(parents.is('div.bricks-frame')){
item = parents.filter('.object-item');
//get prev link
prev_item = item.prevAll('.object-item').filter(':visible').eq(0);
prev_item = prev_item.length ? prev_item.children('a') : '';
//get next link
next_item = item.nextAll('.object-item').filter(':visible').eq(0);
next_item = next_item.length ? next_item.children('a') : '';
}
//look in posts grid
else if(parents.is('div.post-grid-bricks-frame')){
item = parents.filter('div.vc_grid-item');
//get prev link
prev_item = item.prevAll('div.vc_grid-item').filter(':visible').eq(0);
prev_item = prev_item.length ? prev_item.find('.object-item').children('a') : '';
//get next link
next_item = item.nextAll('div.vc_grid-item').filter(':visible').eq(0);
next_item = next_item.length ? next_item.find('.object-item').children('a') : '';
}
else{
prev_item = '';
next_item = '';
}
//activate links
next_item.length? controls.find('span.next').removeClass('inactive') : controls.find('span.next').addClass('inactive');
prev_item.length? controls.find('span.prev').removeClass('inactive') : controls.find('span.prev').addClass('inactive');
},
createLightbox = function () {
var lightbox_id = '#a13-post-lightbox',
$el = $(lightbox_id),
first_call = false,
controls,
showLightbox = function(){
$el.show();
//requestAnimationFrame often adds class at same repaint, and this blocks animation from running as element is shown at the same time when it suppose to be animated
//that is why setTimeout is more reliable here
setTimeout(function(){ $el.addClass('show'); }, 15);
},
deactivateNavigation = function(){
controls.find('span').not('.close').addClass('inactive');
},
onHideTransitionEndFn = function(ev){
//do it only after visibility transition
if( !$el.is(ev.target) || ev.originalEvent.propertyName !== 'visibility' ){ return; }
$el.off( transitionend_event, onHideTransitionEndFn );
cleanUpAfterHide();
},
cleanUpAfterHide = function(){
$el.hide();
//destroy any sliders in lightbox
$el.find('.a13-slider').trigger('a13-slider-destroy');
//remove content
$el.children('div.a13-post-lightbox-content').empty();
};
//prepare lightbox if it does not exist yet
if (!$el.length) {
//create lightbox HTML
$('<div id="a13-post-lightbox" class="a13-post-lightbox">' +
'<div class="a13-post-lightbox-content"></div>' +
'<div class="controls">' +
' <span class="close fa fa-times"></span>' +
' <span class="prev fa fa-chevron-'+(is_rtl? 'right' : 'left')+' inactive"></span>' +
' <span class="next fa fa-chevron-'+(is_rtl? 'left' : 'right')+' inactive"></span>' +
'</div>' +
'<div class="a13-post-lightbox-preloader"></div>' +
'</div>')
.appendTo($body);
first_call = true;
}
//get elements
$el = $(lightbox_id);
controls = $el.children('div.controls');
//clean sliders
$el.find('.a13-slider').trigger('a13-slider-destroy');
//lightbox just created
if (first_call) {
//bind events
controls
//close
.find('span.close').on(click_event, function () {
if(can_use_transitions){
$el.on( transitionend_event, onHideTransitionEndFn );
$el.removeClass('show');
}
else{
$el.removeClass('show');
cleanUpAfterHide();
}
deactivateNavigation();
$window.off('scroll.a13-lightbox');
$html.removeClass('post-lightbox-active');
//push closed state
pushNewState(window.location.href.split("#")[0]);
}).end()
//go to previous
.find('span.prev').on(click_event, function () {
if (!prev_item.length || $(this).hasClass('inactive') || $el.is('.loading')) {
return;
}
openItemInLightbox(prev_item);
}).end()
//go to next
.find('span.next').on(click_event, function () {
if (!next_item.length || $(this).hasClass('inactive') || $el.is('.loading')) {
return;
}
openItemInLightbox(next_item);
});
showLightbox();
}
//we already have lightbox element present
else {
//check if it is currently open
if($el.is(':visible')){
deactivateNavigation();
}
//just open
else{
deactivateNavigation();
showLightbox();
}
}
$el.addClass('loading');
};
//bind open of lightbox
$body.on('click', '.open-item-in-lightbox > a', function(event){
event.preventDefault();
var target = $(event.target);
//lets open our lightbox
if(target.is('a')){
openItemInLightbox(target);
}
});
//history moving
$window.on('popstate', function () {
openFromHash(window.location.hash);
});
//check if it is link to our lightbox on page load
if(window.location.hash.length){
openFromHash(window.location.hash);
}
},
lazyLoadBricks : function(args){
var $container = (args.container instanceof jQuery) ? args.container : $(args.container);
if($container.length){
var items_selector = args.items,
pagination = mid.find('nav.navigation'),
loading_space = $('#loadingSpace'),
filter = (args.filter instanceof jQuery) ? args.filter : $(args.filter),
layoutMode = args.layoutMode,
gutter = parseInt(args.gutter,10),
lli_id = 'lazyload-indicator',
lazy_load = $container.data('lazy-load'),
lazy_load_mode = $container.data('lazy-load-mode'),
lazy_load_auto = lazy_load && lazy_load_mode === 'auto',
addLoader = function(elem){
var loader = $('#'+lli_id);
if( !loader.length ){
loader = $('<div id="'+lli_id+'" class="idle" title="'+ G.loading_items+'"><div class="ll-animation"></div></div>')
.appendTo( (typeof elem === 'undefined') ? $body : elem );
}
loader.removeClass('idle');
},
removeLoader = function(){
$('#'+lli_id).addClass('idle');
},
addLoadMoreButton = function(){
var prev = pagination.prev('.load-more-button');
if(prev.length){
return;
}
//insert pagination
pagination.before('<div class="load-more-button"><span class="text">'+G.load_more+'<i class="a13icon-plus"></i></span><span class="ll-animation"></span></div>');
var result_count = $('span.result-count');
if(result_count){
$('div.load-more-button').append(result_count);
}
},
removeLoadMoreButton = function(){
var prev = pagination.prev('.load-more-button');
if(prev.length){
prev.fadeOut();
}
},
loadMoreClick = function () {
var button = $(this);
//we have more then one page of items
if(pagination.length){
var next_link = pagination.find('a.next');
if( !next_link.length ){
//unbind loading more
removeLoadMoreButton();
return;
}
//activate loading on button
button.addClass('loading');
//get new items
loading_space.load(next_link.attr('href'), 'a13-ajax-get', function(){
//pagination replace
var new_pagination = loading_space.find('.navigation');
pagination.replaceWith(new_pagination);
pagination = new_pagination;
//update result count
if(lazy_load && lazy_load_mode === 'button'){
var new_result_count = loading_space.find('span.result-count'),
old_result_count = $('div.load-more-button').find('span.result-count');
if(old_result_count){
old_result_count.replaceWith(new_result_count);
}
}
//check if button is still needed
if(!new_pagination.find('a.next').length){
removeLoadMoreButton();
}
loading_space.imagesLoaded( function() {
var elems = loading_space.find(items_selector);
if(typeof $.fn.mediaelementplayer !== 'undefined'){
loading_space.find('.wp-video video').mediaelementplayer((typeof mejs === 'undefined' ? {} : mejs.MediaElementDefaults));
}
//make video look proper
elems.fitVids();
//add elements to main container
elems.appendTo($container);
//fix sliders
A13F.elementsActions.pageSlider();
//check for parallaxes
A13F.elementsActions.parallax();
// add and lay out newly appended elements
$container.isotope( 'appended', elems );
//finished loading
//clear loading class
button.removeClass('loading');
});
});
}
},
bindLoadMore = function () {
var action = function () {
$window.off('.lazyload');
loadTillViewIsFull();
},
cb = function () {
var scroll_pos = $window.scrollTop() + $window.height();
if ($container.height() - scroll_pos < 250) {
action();
}
};
$window.on('scroll.lazyload resize.lazyload', A13F.throttle(cb, 150));
},
loadTillViewIsFull = function () {
//we have more then one page of items
if(pagination.length){
var next_link = pagination.find('a.next');
if( !next_link.length ){
//unbind loading more
removeLoader();
return;
}
else if ( !(($container.height() < (2 * $window.height() + $window.scrollTop())) && next_link.length) ){
bindLoadMore();
removeLoader();
return; //nothing to do here
}
//lets load more items
addLoader();
//get new items
loading_space.load(next_link.attr('href'), 'a13-ajax-get', function(){
//pagination replace
var new_pagination = loading_space.find('.navigation');
pagination.replaceWith(new_pagination);
pagination = new_pagination;
loading_space.imagesLoaded( function() {
//get elements from loading space
var elems = loading_space.find(items_selector);
if(typeof $.fn.mediaelementplayer !== 'undefined'){
loading_space.find('.wp-video video').mediaelementplayer((typeof mejs === 'undefined' ? {} : mejs.MediaElementDefaults));
}
//make video look proper
elems.fitVids();
//add elements to main container
elems.appendTo($container);
//fix sliders
A13F.elementsActions.pageSlider();
// add and lay out newly appended elements
$container.isotope( 'appended', elems );
//finished loading
//but try to load more items
loadTillViewIsFull();
});
});
}
};
/****** STARTUP CONFIGURATION *****/
if(!loading_space.length){
loading_space = $('<div id="loadingSpace"></div>').appendTo($body);
}
//get layoutMode from param
layoutMode = (typeof layoutMode !== 'undefined' && layoutMode.length) ? args.layoutMode : 'packery';
//check if this layou mode is registered
layoutMode = (typeof Isotope.LayoutMode.modes[layoutMode] === 'undefined')? 'masonry' : layoutMode;
//start isotope
$container.isotope({
// main isotope options
itemSelector: items_selector,
transitionDuration: '0.6s',
isOriginLeft: !is_rtl,
layoutMode: layoutMode,
// layout mode options
packery: {
columnWidth: '.grid-master',
gutter: gutter
},
masonry: {
columnWidth: '.grid-master',
gutter: gutter
},
fitRows: {
gutter: gutter
}
}).addClass('layout-'+layoutMode);
// layout Isotope again after all images have loaded
$container.imagesLoaded( function() {
$container.isotope('layout');
//and add more items
if (lazy_load_auto) {
loadTillViewIsFull();
}
});
// and again when web fonts are loaded
$body.on('webfontsloaded', function(){
if($container.data('isotope')){
$container.isotope('layout');
}
});
//filter bind
if(filter.length){
var filters = filter.find('li');
filters.on( click_event, function(ev){
ev.stopPropagation();
ev.preventDefault();
filters.removeClass('selected');
var f = $(this).addClass('selected'),
category = f.data('filter');
if(category === '__all'){ //__all so users will not overwrite this
category = '*'
}
else{
category = '[data-category-'+category+']';
}
$container.isotope({ filter: category });
if(lazy_load_auto){
//trigger scroll to load more elements if there is place
$window.trigger('scroll.lazyload');
}
});
}
//load more button
if(lazy_load && lazy_load_mode === 'button'){
addLoadMoreButton();
$('div.load-more-button').on(click_event, loadMoreClick);
}
}
},
singleCptMasonry : function(args){
var $container = (args.container instanceof jQuery) ? args.container : $(args.container);
if($container.length){
var $items_list = $container.prevAll('.gallery-media-collection'),
$items = $items_list.children(),
unique_id = args.id ? args.id : 1,
loading_space = $('<div id="loadingSpace-'+unique_id+'" class="loadingSpace"></div>').appendTo($body),
category_filter = args.filter ? ((args.filter instanceof jQuery) ? args.filter : $(args.filter)) : $([]),
proofing_filter = args.proofing_filter ? $(args.proofing_filter) : $([]),
proofing_accept = $('#done-with-proofing'),
lli_id = 'lazyload-indicator',
cover_color = $container.data('cover-color'),
show_desc = parseInt($container.data('desc'), 10),
proofing = parseInt($container.data('proofing'), 10),
socials = parseInt($container.data('socials'), 10),
p_manual_ids = !!G.proofing_manual_ids,
limit_per_load = 2,
pointer = 0,//how many elements are loaded
number_of_items = $items.length,
thumbs_video = args.thumbs_video ? args.thumbs_video : '',
sticky_sidebar = args.sticky_sidebar ? args.sticky_sidebar_el : '',
addLoader = function(elem){
var loader = $('#'+lli_id);
if( !loader.length ){
loader = $('<div id="'+lli_id+'" class="idle" title="'+ G.loading_items+'"><div class="ll-animation"></div></div>')
.appendTo( (typeof elem === 'undefined') ? $body : elem );
}
loader.removeClass('idle');
},
removeLoader = function(){
$('#'+lli_id).addClass('idle');
},
bindLoadMore = function() {
var action = function () {
$window.off('.lazyload'+unique_id);
loadTillViewIsFull();
},
cb = function () {
var scroll_pos = $window.scrollTop() + $window.height();
if ($container.height() + $container.offset().top - scroll_pos < 250) {
action();
}
};
$window.on('scroll.lazyload'+unique_id+' resize.lazyload'+unique_id, A13F.throttle(cb, 150));
$window.on('filter.lazyload'+unique_id, action);
},
makeBrick = function(itemNumber){
var $el = $items.eq(itemNumber),
html = '',
description = $el.find('.item-desc').find('.description'),
add_to_cart = $el.find('.add_to_cart_inline'),
link = $el.children('.item__link'),
title = link.text(),
filter_tags = $el.data('filter'),
data_attributes = '',
type = $el.hasClass('type-video')? 'type-video' : 'type-image',
proofing_comment = proofing ? $el.find('div.proofing_comment').html() : '',//no matter if html() or text(). html() is fastest
proofing_html = function(){
var html = '';
if(proofing){
var proofing_id = $el.data('proofing_id')+'',//toString
proofing_checked = $el.data('proofing_checked') == 1;
//if auto ids for proofing
if(!p_manual_ids && !$el.hasClass('subtype-videolink')){
proofing_id = $el.data('id')+'';//toString
}
html += '<div class="proofing">';
//no id for external videos
if( proofing_id.length ) {
html += '<span class="p-id">' + proofing_id + '</span>';
}
html += '<i class="p-comment fa fa-commenting'+(proofing_comment.length ? ' filled' : '')+'" title="'+G.proofing_add_comment+'"></i>';
html += '<i class="p-check fa fa-check'+(proofing_checked ? ' filled' : '')+'" title="'+(proofing_checked ? G.proofing_uncheck_item : G.proofing_mark_item)+'"></i>';
html += '</div>';
}
return html;
};
//collect filters
if(typeof filter_tags !== 'undefined' && filter_tags.length){
var tags = filter_tags.split(',');
for(var i = 0; i < tags.length; i++){
if(tags[i].length){
data_attributes += ' data-category-'+tags[i]+'="1"';
}
}
}
if(proofing){
data_attributes += ' data-proofing_checked="'+$el.data('proofing_checked')+'"';
data_attributes += ' data-proofing_comment="'+$el.data('proofing_comment')+'"';
}
add_to_cart = add_to_cart.length ? $('<div />').append(add_to_cart.clone()).html() : '';
//video
if( !thumbs_video && type === 'type-video' ){
//external video
if( $el.hasClass('subtype-videolink') ){
html += '<div class="archive-item object-item w'+$el.data('ratio_x')+' '+type+'"'+data_attributes+'>';
html += '<iframe src="'+$el.data('video_player')+'" allowfullscreen />';
html += proofing_html();
html += '</div>';
}
//internal video
else{
html += '<div class="archive-item object-item w'+$el.data('ratio_x')+' '+type+'"'+data_attributes+'>';
html += $($el.data('html')).html();
html += proofing_html();
html += '</div>';
}
}
//images
else{
html += '<div class="archive-item object-item w'+$el.data('ratio_x')+' '+type+'"'+data_attributes+'>';
html += '<img src="'+$el.data('brick_image')+'" alt="'+$el.data('alt_attr')+'" title="'+title+'" />';
html += '<div class="cover" style="'+(cover_color? 'background-color:'+cover_color+';' : '')+'"></div>';
html += '<div class="covering-image"></div>';
html += '<div class="icon a13icon-plus"></div>';
html += '<div class="caption">';
if(show_desc){
html += '<div class="texts_group">';
html += '<h2 class="post-title">';
if(title.length){
html += title;
}
html += '</h2>';
html += description.length ? ('<div class="excerpt">'+description.html()+add_to_cart+'</div>') : '';
html += '</div>';
}
if($el.hasClass('link')){
html += '<a href="'+link.attr('href')+'"'+( parseInt( $el.data('link_target'), 10 ) === 1 ? ' target="_blank"' : '' )+'></a>';
}
html += '</div>'; //.caption
if(socials){
html += '<div class="social"></div>';
}
html += proofing_html();
html += '</div>';
}
return html;
},
openBrick = function(ev){
//lightbox is off?
if(parseInt($container.data('lightbox_off'), 10) === 1){
return;
}
var index = $container.find('.object-item').index($(this)),
$item = $items.eq(index),
target = $(ev.target);
//check if we didn't click some link in description
if(!target.is('a') && target.parents('a').length === 0){
//no click stealing if video or link
if(thumbs_video || !$item.hasClass('type-video')){
$item.click();
return;
}
//no click on link
else if($item.hasClass('link')){
return;
}
ev.stopPropagation();
ev.preventDefault();
}
},
commentItem = function(ev){
var $icon = $(this),
item = $icon.parents('.object-item').eq(0),
icons_parent = $icon.parent(),
index = $container.find('.object-item').index(item),
original_item = $items.eq(index),
album_id = G.album_id,
item_id = original_item.data('id'),
//read comment value as text so all entities will be converted
original_comment = original_item.find('div.proofing_comment').text(),
comment_class = 'fa-commenting',
save_class = 'fa-floppy-o',
hide_textarea = function(){
textarea.css('opacity', 0);
setTimeout(function(){
textarea.remove();
//hide save button
$icon.removeClass(save_class).addClass(comment_class);
}, 315 );
};
ev.stopPropagation();
ev.preventDefault();
//don't send double events
if($icon.hasClass('loading')){
return;
}
//blur textarea if clicked again - important on mobiles
if(icons_parent.find('textarea').length){
icons_parent.find('textarea').blur();
return;
}
//display save button
$icon.removeClass(comment_class).addClass(save_class);
//add textarea and focus on it
var textarea = $('<textarea placeholder="'+G.proofing_comment_placeholder+'"></textarea>').appendTo(icons_parent).focus();
//add value by JavaScript instead while creating element, to be safe against closing </textarea> tag
textarea.val(original_comment);
//check is it video link
if(original_item.hasClass('subtype-videolink')){
item_id = 'external';
}
textarea
//save comment on blur
.one('blur', function(){
var comment = $.trim(textarea.val());
//no changes - no ajax
if(comment === original_comment){
hide_textarea();
return;
}
//disable textarea and start animation
textarea.prop('readonly', true);
$icon.addClass('loading');
//make ajax request
$.ajax({
type: 'post',
url: G.ajaxurl,
data: {
action : 'apollo13framework_comment_album_item',
security: G.proofing_nonce,
album_id: album_id,
item_id : item_id,
link : item_id === 'external' ? original_item.data('src') : '',
comment : comment
},
dataType : 'json'
})
.done(function (data) {
//replace original comment with processed one
if(typeof data.comment !== 'undefined'){
comment = data.comment;
}
if(comment.length){
$icon.addClass('filled');
}
else{
$icon.removeClass('filled');
}
hide_textarea();
//save comment in HTML
original_item.find('div.proofing_comment').html(comment); //html() instead of text() to convert entities that came from server
//add attribute for filtering
item.add(original_item).attr('data-proofing_comment', comment.length? 1 : 0);
//rearrange
$container.isotope();
//activate button
proofing_accept.removeClass('done idle');
})
.fail(function (jqXHR) {
if(typeof jqXHR.status !=='undefined' && jqXHR.status == 403){
alert('Site version is outdated. Please refresh page to make this function work.')
}
//open textarea to allow copy
textarea.prop('readonly', false);
})
.always(function () {
$icon.removeClass('loading');
});
})
//hide without saving on Esc key
.on('keydown', function (event) {
if(event.keyCode === 27){
hide_textarea();
}
})
//prevent opening lightbox on click on textarea
.on(click_event, function(ev){
ev.stopPropagation();
});
},
approveItem = function(ev){
var $icon = $(this),
item = $icon.parents('.object-item').eq(0),
index = $container.find('.object-item').index(item),
original_item = $items.eq(index),
album_id = G.album_id,
item_id = original_item.data('id');
ev.stopPropagation();
ev.preventDefault();
//don't send double events
if($icon.hasClass('loading')){
return;
}
//check is it video link
if(original_item.hasClass('subtype-videolink')){
item_id = 'external';
}
$icon.addClass('loading');
$.ajax({
type: 'get',
url: G.ajaxurl,
data: {
action : 'apollo13framework_mark_album_item',
security: G.proofing_nonce,
album_id: album_id,
item_id : item_id,
link : item_id === 'external' ? original_item.data('src') : '',
approve : $icon.hasClass('filled') ? 0 : 1
},
dataType : 'json'
})
.done(function (data) {
if(data.approve){
$icon.addClass('filled').attr('title', G.proofing_uncheck_item);
}
else{
$icon.removeClass('filled').attr('title', G.proofing_mark_item);
}
//change original item
item.add(original_item).attr('data-proofing_checked', data.approve);
//rearrange
$container.isotope();
//activate button
proofing_accept.removeClass('done idle');
})
.fail(function (jqXHR) {
if(typeof jqXHR.status !=='undefined' && jqXHR.status == 403){
alert('Site version is outdated. Please refresh page to make this function work.')
}
})
.always(function () {
$icon.removeClass('loading');
});
},
finishProofing = function(ev){
ev.stopPropagation();
ev.preventDefault();
//don't send double events
if(proofing_accept.hasClass('loading') || proofing_accept.hasClass('done') ){
return;
}
proofing_accept.addClass('loading');
//update counter
proofing_accept.find('span.counter').text($items.filter('[data-proofing_checked=1]').length+'/'+$items.length);
$.ajax({
type: 'get',
url: G.ajaxurl,
data: {
action : 'apollo13framework_album_finished_proofing',
security: G.proofing_nonce,
album_id: G.album_id
},
dataType : 'json'
})
.done(function (data) {
if(data.done){
proofing_accept.addClass('done');
setTimeout(function(){
proofing_accept.addClass('idle');
}, 4000);
}
})
.fail(function (jqXHR) {
if(typeof jqXHR.status !=='undefined' && jqXHR.status == 403){
alert('Site version is outdated. Please refresh page to make this function work.')
}
})
.always(function () {
proofing_accept.removeClass('loading');
});
},
startupConfiguration = function(){
var gutter = parseInt($container.data('margin'),10),
layoutMode = (typeof Isotope.LayoutMode.modes.packery !== 'undefined')? 'packery' : 'masonry';
//start isotope
$container.isotope({
// main isotope options
itemSelector: '.archive-item',
transitionDuration: '0.6s',
isOriginLeft: !is_rtl,
layoutMode: layoutMode,
// options for masonry layout mode
packery: {
columnWidth: '.grid-master',
gutter: gutter
},
masonry: {
columnWidth: '.grid-master',
gutter: gutter
}
}).addClass('layout-'+layoutMode);
// layout Isotope again when web fonts are loaded
$body.on('webfontsloaded', function(){
if($container.data('isotope')){
$container.isotope('layout');
}
});
//click on bricks make click on list element to open lightbox
$container
.on( 'click', '.object-item', openBrick)
.on( click_event, 'i.p-comment', commentItem)
.on( click_event, 'i.p-check', approveItem)
.on( click_event, 'span.p-id', function(ev){ ev.stopPropagation(); ev.preventDefault(); }); //don't open lightbox on text selection
$('#done-with-proofing').on( click_event, finishProofing);
},
loadTillViewIsFull = function () {
//we have any items
if(number_of_items){
//we have loaded all items
if( pointer >= number_of_items ){
//unbind loading more
removeLoader();
return;
}
var container_height = parseInt($container.css('height'), 10),
container_min_height = parseInt($container.css('min-height'), 10),
top_offset = $container.offset().top;
//if min-height is same as height then sticky sidebar is affecting our height
if(container_height === container_min_height){
container_height = 0;
}
//our formula to decide if we have enough items loaded
if ( !( container_height + top_offset < ( 2 * $window.height() + $window.scrollTop() ) ) ){
bindLoadMore();
removeLoader();
return; //nothing to do here
}
addLoader();
//get new items
var new_items_html = '',
saved_pointer = pointer,
load_till = pointer + limit_per_load;
//check if we are not beyond number of items
load_till = load_till > number_of_items ? number_of_items : load_till;
for(; pointer < load_till; pointer++){
new_items_html += makeBrick(pointer);
}
//start loading items
loading_space.append(new_items_html)
//make video look proper
.fitVids();
pointer = saved_pointer;
//will work only when item has thumb
loading_space.find('.archive-item').each(function(){
//add social components
if(socials){
var s = $(this).find('.social'),
irt = $items.eq(pointer).find('.dot-irecommendthis');
//add social icons for sharing
if(typeof a2a_config !== 'undefined'){
s.append($items.eq(pointer).find('.a2a_kit'));
}
//I recommend this link
if(irt.length){
s.append(irt);
}
}
pointer++;
});
if(typeof $.fn.mediaelementplayer !== 'undefined'){
loading_space.find('.wp-video video').mediaelementplayer((typeof mejs === 'undefined' ? {} : mejs.MediaElementDefaults));
}
//after items are ready to display send them to their container
loading_space.imagesLoaded( function() {
//get elements from loading space
var elems = loading_space.find('.archive-item')/*.css('opacity',0).addClass('not-revealed')*/.appendTo($container);
//first run
if( saved_pointer === 0 ){
startupConfiguration();
}
// add and lay out newly appended elements
else{
$container.isotope( 'appended', elems );
}
//try to load more items
loadTillViewIsFull();
});
//});
}
},
filterItems = function(ev){
ev.stopPropagation();
ev.preventDefault();
var $this = $(this),
filter_string = '',
category,
group = $this.closest('ul.category-filter');
//check category filter
if(category_filter.length){
if(group.is(category_filter)){
category_filter.find('li').removeClass('selected');
category = $this.addClass('selected').data('filter');
}
else{
category = category_filter.find('li.selected').data('filter');
}
if(category !== '__all'){ //__all so users will not overwrite this
filter_string = '[data-category-'+category+']';
}
}
//check proofing filter
if(proofing_filter.length){
if(group.is(proofing_filter)) {
proofing_filter.find('li').removeClass('selected');
category = $this.addClass('selected').data('filter');
}
else{
category = proofing_filter.find('li.selected').data('filter');
}
if(category !== '__all'){
//commented
if(category === 2){
filter_string += '[data-proofing_comment=1]';
}
//selected/not selected
else{
filter_string += '[data-proofing_checked='+category+']';
}
}
}
//check for empty selections
if(filter_string === ''){
filter_string = '*';
}
//filter
$container.isotope({ filter: filter_string });
//trigger scroll to load more elements if there is place
$window.trigger('filter.lazyload'+unique_id);
$window.trigger('a13_gallery_filtered',[filter_string, $items_list]);
},
//resize function
layout = function(event, size){
/***** scrolled text content *******/
//enough space
if (sticky_sidebar.length && (size > break_point[2])) {
if(typeof sticky_sidebar.data('sticky_kit') === 'undefined'){
var offset_top = 0;
//we have admin bar
if(is_adminbar){
offset_top = admin_bar.height();
}
//we have top border
if( $body.hasClass('site-layout-bordered') && !$body.hasClass('no-border-top') ){
offset_top += parseInt($( 'div.theme-borders').find( 'div.top-border').height(), 10);
}
//to be sure that sticky kit didn't left parent on relative
sticky_sidebar.parent().css('position','');
sticky_sidebar.stick_in_parent({
offset_top : offset_top
});
}
//safety mechanism when content is longer then images
$container.css('min-height', sticky_sidebar.innerHeight());
}
//not enough space
else{
if (sticky_sidebar.length){
sticky_sidebar.trigger("sticky_kit:detach");
//clean after safety
$container.css('min-height', '');
}
}
};
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, A13F.layout.size);
loadTillViewIsFull();
$container.data('initialized', 1);
//check if it isn't "share image" link
var share_it = getParameterByName('gallery_item'),
links, i;
if(share_it.length){
links = $items.children('a');
for(i = 0; i < links.length; i++){
if(links.eq(i).attr('href').indexOf(share_it) > -1){
links.eq(i).click();
break;
}
}
}
//filters bind
if(category_filter.length){
category_filter.find('li').on( click_event, filterItems);
}
if(proofing_filter.length){
proofing_filter.find('li').on( click_event, filterItems);
}
}
},
singleWork : function(){
if($body.hasClass('single-work')){
var sticky_sidebar = mid.find('div.meta-data'),
parent = sticky_sidebar.length ? sticky_sidebar.parent() : '',
layout = function(event, size){
/***** scrolled text content *******/
//enough space
if (sticky_sidebar.length && (size > break_point[2])) {
var sticky_height = sticky_sidebar.innerHeight();
//safety mechanism when content is longer then images
//why +1 ?
//script for sticky sidebar dies when it discovers that sidebar has same height as parent
//that is why we make it bigger cause otherwise we won't be able to refire it if we are loading
//something with ajax to content.
//This way we don't have to refire it, as it will reposition itself on scroll
parent.css('min-height', sticky_height+1);
if(typeof sticky_sidebar.data('sticky_kit') === 'undefined'){
var offset_top = 30; //some space
//we have admin bar
if(is_adminbar){
offset_top += admin_bar.height();
}
//we have top border
if(size > break_point[3] && $body.hasClass('site-layout-bordered') && !$body.hasClass('no-border-top') ){
offset_top += parseInt($( 'div.theme-borders').find( 'div.top-border').height(), 10);
}
sticky_sidebar.stick_in_parent({
offset_top : offset_top
});
}
}
//not enough space
else{
if (sticky_sidebar.length){
sticky_sidebar.trigger("sticky_kit:detach");
//clean after safety
parent.css('min-height', '');
}
}
};
A13F.elementsActions.singleWorkMasonry();
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, A13F.layout.size);
}
},
singleAlbumMasonry : function(){
A13F.elementsActions.singleCptMasonry({
container : $('.single-album-gallery').find('.a13-bricks-items'),
thumbs_video : parseInt(G.album_bricks_thumb_video, 10),
filter : 'ul.single-album-filter',
proofing_filter : 'ul.single-album-proofing-filter',
sticky_sidebar : true,
sticky_sidebar_el: mid.find('div.album-content').children() //div.inside
});
},
singleWorkMasonry : function(){
A13F.elementsActions.singleCptMasonry({
container : '#only-work-items-here',
thumbs_video : parseInt(G.work_bricks_thumb_video, 10),
sticky_sidebar : false,
sticky_sidebar_el: ''
});
},
makeBricks : function($scope){
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('.a13-bricks-items');
for(var i = 0; i < $container.length; i++){
var _container = $container.eq(i);
//skip if it was initialized already
if(_container.data('initialized')){
continue;
}
A13F.elementsActions.singleCptMasonry({
container : _container,
thumbs_video : parseInt(G.album_bricks_thumb_video, 10),
filter : _container.parent().prevAll('ul.single-album-filter'),
id : i+1
});
}
},
makeSlider : function($scope) {
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('.a13-slider-stuff');
for(var i = 0; i < $container.length; i++){
A13F.elementsActions.useSlider($container.eq(i));
}
},
makeScroller : function($scope) {
$scope = typeof $scope === 'undefined'? $body : $scope;
var $container = $scope.find('.a13-scroller-stuff');
for(var i = 0; i < $container.length; i++){
A13F.elementsActions.useScroller($container.eq(i));
}
},
useSlider : function(container) {
var $container = (container instanceof jQuery) ? container : $(container),
$gallery = $container.find('.gallery-media-collection');
if ($container.length && $gallery.length) {
//skip if it was initialized already
if($container.find('.a13-slider').length){
return;
}
var $gallery_items = $gallery.children(),
items = [],
share_it = getParameterByName('gallery_item'),
links,
start_slide = 0,
i,item, type, description, link,
add_to_cart,
html5_video, video_type;
//collect data from items
for(i = 0; i < $gallery_items.length; i++){
item = $gallery_items.eq(i);
type = item.hasClass('type-video')? 'video' : 'image';
description = item.find('div.item-desc').find('.description');
//if lightbox is disabled
description = description.length ? description.html() : item.find('div.item-desc').html();
add_to_cart = item.find('p.add_to_cart_inline');
link = item.children('.item__link');
video_type = item.data('video_type');
html5_video = type==='video' && video_type === 'html5';
add_to_cart = add_to_cart.length ? $('<div />').append(add_to_cart.clone()).html() : '';
items.push({
type: type,
image: item.data('main-image'),
thumb: item.data('thumb'),
title: link.text(),
alt_attr: item.data('alt_attr'),
desc: description+add_to_cart,
autoplay: item.data('autoplay'),
video_type: video_type,
video_url: html5_video? item.data('html') : item.data('video_player'),//id reference for internal video
bg_color: item.data('bg_color'),
url: type==='image' && item.hasClass('link')? link.attr('href') : false
});
}
//check if it isn't "share image" link
if(share_it.length){
links = $gallery_items.children('.item__link');
for(i = 0; i < links.length; i++){
if(links.eq(i).attr('href').indexOf(share_it) > -1){
start_slide = i;
break;
}
}
}
//call script
$container.a13slider({
parent : $container, // where will be embeded slider
extra_class : $container.data('extra_class'),
main_slider : $container.data('main_slider') === 'on' ? 1 : 0,
window_high : $container.data('window_high') === 'on',
ratio : $container.data('ratio'),
autoplay : $container.data('autoplay') === 'on' ? 1 : 0,
slide_interval : parseInt($container.data('slide_interval'), 10),
transition : parseInt($container.data('transition'), 10),
transition_speed : parseInt($container.data('transition_time'), 10),
ken_burns_scale : parseInt($container.data('ken_burns_scale'), 10),
fit_variant : parseInt($container.data('fit_variant'), 10),
pattern : parseInt($container.data('pattern'), 10),
gradient : $container.data('gradient') === 'on' ? 1 : 0,
texts : $container.data('texts') === 'on' ? 1 : 0,
socials : $container.data('socials') === 'on' ? 1 : 0,
title_color : $container.data('title_color'),
thumb_links : $container.data('thumbs') === 'on' ? 1 : 0,
show_thumbs_on_start : $container.data('thumbs_on_load') === 'on' ? 1 : 0,
start_slide : start_slide,
original_items : $gallery_items,
slides : items // Slideshow Items
});
}
},
useScroller : function(container) {
var $container = (container instanceof jQuery) ? container : $(container),
$scroller = $container.children('.a13-scroller'),
$gallery = $container.children('.gallery-media-collection');
if ($scroller.length && $gallery.length) {
//skip if it was initialized already
if($scroller.data('flickity')){
return;
}
var $gallery_items = $gallery.children(),
items = [],
scroller_options = $.parseJSON($scroller.attr('data-scroller')),
show_desc = scroller_options.a13ShowDesc,
show_socials = scroller_options.a13Socials,
share_it = getParameterByName('gallery_item'),
loaded_elements = 0,
start_slide = 0,
wheel_ticking = false,
last_wheel_down = 0,
last_wheel_tick = 0,
is_main_slider = scroller_options.a13MainSlider,
scroll_below = $container.find('.scroll-below'),
after_scroller = [],
i, item, type, description, link,
add_to_cart,
scrollerHeight = function () {
if (scroller_options.a13WindowHigh) {
var total = A13F.windowVisibleAvailableHeight(is_main_slider ? 2 : 0);
//resize slider to fit
if (total > 150) {
$container.css({
margin : 0,
paddingTop: 0,
height : total
});
}
//use normal size
else {
$container.css({
margin : '',
paddingTop: _scrollerProportion(),
height : ''
});
}
}
else{
$container.css({
paddingTop: _scrollerProportion()
});
}
},
_scrollerProportion = function(){
var ratio = scroller_options.a13Ratio.split('/');
if(ratio.length === 2){
ratio[0] = parseInt(ratio[0],10);
ratio[1] = parseInt(ratio[1],10);
if(A13F.isInteger(ratio[0]) && A13F.isInteger(ratio[1]) && ratio[0] > 0 && ratio[1] > 0){
return ratio[1]/ratio[0]*100+'%';
}
}
return '';
},
loadCallback = function( event, element ) {
var cells = $scroller.find('div.img'),
next = start_slide+1;
//if we out of range
next = next > $gallery.length ? 0 : next;
//first two cells must be loaded to start autoplay
if(cells.eq(start_slide).is(element) || cells.eq(next).is(element)){
loaded_elements++;
}
if(loaded_elements === 2){
$scroller.off( 'bgLazyLoad.flickity', loadCallback).flickity('playPlayer');
}
},
setNextElement = function(){
//check for immediate next element
after_scroller = $container.next();
if(after_scroller.length === 0){
//look in parents for next element
var parents = $container.parents(), parent;
for(var i = 0; i < parents.length; i++){
parent = parents.eq(i);
if(parent.is(mid)){
//if footer is one of next elements
if(mid.nextAll().is(footer)){
after_scroller = footer;
}
break;
}
else{
after_scroller = parent.next();
if(after_scroller.length){
break;
}
}
}
}
},
requestWheelTick = function(event, delta){
var el_h = $scroller.height(),
el_t = $scroller.offset().top,
w_h = $window.height(),
w_t = $window.scrollTop();
//if whole element is in visible area
if( (el_t + el_h <= w_h + w_t) && el_t >= w_t ){
var now = new Date;
event.preventDefault();
if((now - last_wheel_tick > 200)){
if ( !wheel_ticking ) {
requestAnimationFrame(function(){
wheel_ticking = false;
last_wheel_tick = now;
if(delta < 0){
$scroller.flickity( 'next' );
}
else{
$scroller.flickity( 'previous' );
}
}
);
}
wheel_ticking = true;
}
//scrolling down && there is next element to scroll
if(delta<0 && after_scroller.length){
//last scroll down was longer then 5 seconds on this scroller
if(now - last_wheel_down > 5000){
scroll_below.addClass('active');
setTimeout(function(){
scroll_below.removeClass('active');
}, 500);
}
last_wheel_down = now;
}
}
},
layout = function(event, size){
//effect depending on resolution
if(typeof scroller_options.a13Effect !== "undefined"){
var effect = scroller_options.a13Effect;
if(effect !== 'off'){
if (size > break_point[2]) {
$scroller.addClass('effect-'+effect);
}
else{
$scroller.removeClass('effect-'+effect);
}
}
}
if(size <= break_point[0]){
$scroller
.removeClass('cells_'+scroller_options.a13CellWidth)
.addClass('cells_'+scroller_options.a13CellWidthMobile);
}
else{
$scroller
.removeClass('cells_'+scroller_options.a13CellWidthMobile)
.addClass('cells_'+scroller_options.a13CellWidth);
}
scrollerHeight();
//resize cause we switched off default resize for flickity
$scroller.flickity('resize');
setNextElement();
};
//collect data from items
for(i = 0; i < $gallery_items.length; i++){
item = $gallery_items.eq(i);
type = item.hasClass('type-video')? 'video' : 'image';
//skip if video
if(type === 'video'){
continue;
}
description = item.find('.item-desc').find('.description');
//if lightbox is disabled
description = description.length ? description.html() : item.find('.item-desc').html();
add_to_cart = item.find('.add_to_cart_inline');
link = item.children('.item__link');
//check if it isn't "share image" link
if(share_it.length && link.attr('href').indexOf(share_it) > -1){
start_slide = i;
scroller_options['initialIndex'] = i;
share_it = '';//no more looking for it
}
add_to_cart = add_to_cart.length ? $('<div />').append(add_to_cart.clone()).html() : '';
items.push({
image: item.data('main-image'),
title: link.text(),
//alt_attr: item.data('alt_attr'),
desc: description+add_to_cart,
bg_color: item.data('bg_color'),
url: type==='image' && item.hasClass('link')? link.attr('href') : false
});
}
//prepare html for scroller
var slides_num = items.length,
slides_iterator = 0,
items_html = '';
while(slides_iterator <= slides_num-1){
items_html += '<div class="carousel-cell">';
items_html += '<div class="img" data-flickity-bg-lazyload="'+items[slides_iterator]['image']+'" />';
if(show_desc){
items_html += '<div class="texts_group">';
if(items[slides_iterator]['title'].length){
items_html += '<strong class="name">';
items_html += items[slides_iterator]['title'];
items_html += '</strong>';
}
items_html += items[slides_iterator]['desc'].length ? ('<div class="excerpt">'+items[slides_iterator]['desc']+'</div>') : '';
items_html += '</div>';
}
if(items[slides_iterator]['url'].length){
items_html += '<a href="'+items[slides_iterator]['url']+'"></a>';
}
items_html += show_socials? '<div class="social"></div>' : '';
items_html += '</div>';
slides_iterator++;
}
//RTL site?
if(is_rtl){
scroller_options['rightToLeft'] = true;
}
//fire flickity
$scroller
.append(items_html)
.flickity( scroller_options )
.on( 'staticClick.flickity', function( event, pointer, cellElement, cellIndex ) {
var data = $scroller.data('flickity'),
is_current_cell = cellIndex === data.selectedIndex;
if(is_current_cell){
if( items[cellIndex].url === false ){
$(data.selectedElement).toggleClass('enlarge');
$scroller.flickity( 'reposition' );
}
}
else{
if ( typeof cellIndex == 'number' ) {
$scroller.flickity( 'selectCell', cellIndex );
}
}
})
.on('mousewheel', requestWheelTick);
scroll_below.on('click', function () {
if (after_scroller.length) {
$('html,body').animate({
scrollTop: Math.round(after_scroller.offset().top)
}, 500);
}
});
//social elements
if(show_socials){
$scroller.find('.carousel-cell').each(function(index){
var s = $(this).find('.social'),
irt = $gallery_items.eq(index).find('.dot-irecommendthis');
//add social icons for sharing
if(typeof a2a_config !== 'undefined'){
s.append($gallery_items.eq(index).find('.a2a_kit'));
}
//I recommend this link
if(irt.length){
s.append(irt);
}
});
}
//wait for images to be loaded if autoplay is enabled
if(typeof scroller_options.autoPlay !== 'undefined' && scroller_options.autoPlay > 0 ){
$scroller.flickity('stopPlayer');
//count loaded images and play later
$scroller.on( 'bgLazyLoad.flickity', loadCallback);
}
//using parallax scroller
if(typeof scroller_options.a13Parallax !== "undefined" && scroller_options.a13Parallax){
var $imgs = $scroller.find('div.img'),
flickity_data = $scroller.data('flickity'),
docStyle = html.style,
transformProp = typeof docStyle.transform == 'string' ? 'transform' : 'WebkitTransform',
wrap_around = typeof scroller_options.wrapAround !== "undefined" && scroller_options.wrapAround;
$scroller
.on( 'scroll.flickity', function() {
//lot of exceptions if we wrap parallax
if(wrap_around){
var sw = flickity_data.slideableWidth,
_x = fizzyUIUtils.modulo( flickity_data.x, sw);
_x = _x - sw;
flickity_data.slides.forEach( function( slide, i ) {
var img = $imgs[i],
shift = slide.cells[0].shift,
x;
//depending on shift, calculate x in different way
if(shift===0){
x = slide.target + _x;
}
else if(shift===1){
x = sw + _x + slide.target ;
}
else{//shift === -1
x = -(sw - slide.target) + _x;
}
img.style[ transformProp ] = 'translateX( ' + x * -1/3 + 'px)';
});
}
//simple, if parallax is not wrapped
else{
flickity_data.slides.forEach( function( slide, i ) {
var img = $imgs[i],
x = ( slide.target + flickity_data.x ) * -1/3;
img.style[ transformProp ] = 'translateX( ' + x + 'px)';
});
}
});
//make sure images are on proper places when parallax
flickity_data.resize();
}
//register resize
A13F.layout.add(layout);
//initial layout
layout({}, A13F.layout.size);
//also when logo is loaded
$body.on('a13LogoLoaded', function(){ layout({}, A13F.layout.size);} );
}
},
widgetSlider: function(){
var sidebars = footer.add('#side-menu, #basket-menu, #secondary'),
selectors = sidebars.find('div.widget_rss');
if(selectors.length){
selectors.each(function(){
var selector = $(this),
html = '<div class="widget-slider-ctrls"><span class="prev-slide a13icon-chevron-thin-left"></span><span class="next-slide a13icon-chevron-thin-right"></span>',
slides = selector.find('li').eq(0).show().end(),
left,right,
move = function(ev){
ev.stopPropagation();
ev.preventDefault();
var direction = ev.data.dir,
current = slides.filter(':visible'),
toShow;
if(direction === 'next'){
toShow = current.next();
if(!toShow.length){
toShow = slides.eq(0);
}
}
else{
toShow = current.prev();
if(!toShow.length){
toShow = slides.eq(slides.length-1);
}
}
//animate
current.fadeOut(200, function(){ toShow.fadeIn(200); })
};
if(selector.hasClass('slider-ctrls')){
//there are controls already
return;
}
if(slides.length > 1){ //more then one slide
selector.addClass('slider-ctrls').append(html);
left = selector.find('span.prev-slide');
right = selector.find('span.next-slide');
//bind clicks
left.on(click_event,null,{dir: 'prev'}, move);
right.on(click_event,null,{dir: 'next'}, move);
}
});
}
},
lightbox : function(){
//if no lightbox script do nothing
//Using lightGallery ?
if(typeof $.fn.lightGallery !== 'undefined'){
var lightbox_args = {
hash : !!parseInt(G.lg_lightbox_share, 10),
share : !!parseInt(G.lg_lightbox_share, 10),
controls : !!parseInt(G.lg_lightbox_controls, 10),
download : !!parseInt(G.lg_lightbox_download, 10),
counter : !!parseInt(G.lg_lightbox_counter, 10),
thumbnail : !!parseInt(G.lg_lightbox_thumbnail, 10),
showThumbByDefault: !!parseInt(G.lg_lightbox_show_thumbs, 10),
autoplay : !!parseInt(G.lg_lightbox_autoplay_open, 10),
autoplayControls : !!parseInt(G.lg_lightbox_autoplay, 10),
progressBar : !!parseInt(G.lg_lightbox_progressbar, 10),
fullScreen : !!parseInt(G.lg_lightbox_full_screen, 10),
zoom : !!parseInt(G.lg_lightbox_zoom, 10),
mode : G.lg_lightbox_mode,
pause : parseInt(G.lg_lightbox_autoplay_pause, 10),
speed : parseInt(G.lg_lightbox_speed, 10),
preload : parseInt(G.lg_lightbox_preload, 10),
hideBarsDelay : parseInt(G.lg_lightbox_hide_delay, 10)
},
$gallery = $(".gallery-media-collection"),
vc_media_grid = $('div.vc_media_grid, div.vc_masonry_media_grid'),
wp_gallery = $('div.gallery');
//bricks albums/works
if( $gallery.length ){
var $gallery_items = $gallery.children(),
//standard params
params = $.extend(
{
selector : $gallery_items.not('.link'),
exThumbImage: 'data-thumb'
},
lightbox_args),
filter = function(event, filter_string, $gallery){
var new_params;
//if all elements are visible
if(filter_string === '*'){
new_params = params;
}
else{
new_params = $.extend({}, params, {selector: $gallery_items.not('.link').filter(filter_string)})
}
//clean current binding of elements to lightbox
$gallery.data('lightGallery').destroy(true);
//rebind only filtered elements
$gallery.lightGallery(new_params);
};
//if gallery is bricks gallery & have vimeo video, load Vimeo Api for lightbox
if( $gallery.parent().is('div.bricks-frame') && $gallery_items.filter('[data-video_type="vimeo"]').length ){
//load VIMEO API
(function(){
var tag = document.createElement('script');
tag.src = "https://f.vimeocdn.com/js/froogaloop2.min.js";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
})();
}
//rewrite HTML to match lightbox syntax
$gallery_items.each(function(){
var $el = $(this),
$link = $el.children('a.item__link'),
$desc = $el.find('div.item-desc'),
$video = $el.find('div.album-video'),
title;
if($desc.length){
title = $link.text();
//mark where lightbox should search for description
$el.attr('data-sub-html', '#'+$desc.attr('id'));
//wrap real description so we can distinguish it
$desc.wrapInner('<div class="description"></div>');
//add title
$desc.prepend('<h4>'+title+'</h4>');
//wrap everything in special class, so it will look nice in lightbox
$desc.wrapInner('<div class="customHtml"></div>');
//share texts
$el.attr('data-pinterest-text', title);
$el.attr('data-tweet-text', title);
}
//can't have data-html and data-src in one item
if($video.length){
$el.attr('data-html', '#'+$video.attr('id'));
}
else{
$el.attr('data-src', $link.attr('href'));
}
});
$gallery.lightGallery(params);
$window.on('a13_gallery_filtered', filter);
}
//lets try media grid from VC
if( vc_media_grid.length ){
//when elements are loaded we bind our lightbox
$window.on('grid:items:added', function(event, element){
var this_media_grid = $(element),
grid_items = this_media_grid.find('a.a13-lightbox-added');
//we check if this was fired for one of our media grids
if(vc_media_grid.is(this_media_grid) && grid_items.length){
this_media_grid.lightGallery($.extend({}, lightbox_args,
{
selector : grid_items,
exThumbImage : 'href',
subHtmlSelectorRelative : true,
hash : false
})
);
//block VC actions that force to open image native
grid_items.on('click', function(){
return false;
});
}
});
}
//lets try normal WordPress gallery
if( wp_gallery.length ){
var gallery_items = wp_gallery.find('.gallery-icon').children('a');
wp_gallery.lightGallery($.extend(
{
selector : gallery_items,
exThumbImage : 'href',
getCaptionFromTitleOrAlt : false
},
lightbox_args)
);
}
if(G.lightbox_single_post && $body.hasClass('single-post')){
var content = $body.find('.real-content'),
single_images = content.find('a').children('img').parent();
content.lightGallery($.extend(
{
selector : single_images,
exThumbImage : 'href',
getCaptionFromTitleOrAlt : false
},
lightbox_args)
);
}
}
//if no lightbox script do nothing
},
demoFlyOut : function(){
var flyout = $('#a13-flyout-box');
if(flyout.length){
flyout.find('span.drag-out').on(click_event, function(){
flyout.toggleClass('open');
});
}
}
}
};
//start Theme
A13F = window.A13FRAMEWORK;
$(document).ready(A13F.onReady);
})(jQuery, window, document);