/**
* Theme Name: BlogCentral
* Theme URI: http://4bzthemes.com/themes/blogcentral/
* Author: 4bzthemes
* Author URI: http://4bzthemes.com
* File Description: javascript front end file.
*
* @since BlogCentral 1.0.0
*
* @package BlogCentral
* @subpackage front-end.js
------------------------------------------------------------------------
Table of Contents
1. Utility Functions
2. Initialization
3. Toggle Functions
4. Fixed Header Functions
5. Event Handlers
-------------------------------------------------------------------------*/
/**
* 1. Utility Functions
*-----------------------------------------------------------------------*/
/**
* Split an id by '-'
*
* @since 1.0.0
* @param string id. Required. Id to be parsed.
* @return Array. The id parsed into parts.
*/
function blogcentral_parse_id( id ) {
return id.split( "-" );
}
/**
* Get the index of an element by parsing its id.
*
* @since 1.0.0
*
* @param string id. Required. Id to be parsed.
* @param int offset. Required. Array offset.
* @return Int. The index.
*/
function blogcentral_get_index( id, offset ) {
var split = blogcentral_parse_id( id );
return parseInt( split[split.length-offset] );
}
/**
* Calculate number of columns to display based on the value of width
*
* @since 1.0.0
*
* @param int width. Required. Width used to determine number of columns.
* @param int cols. Required. Original number of cols.
* @return int. The number of columns.
*/
function get_grid_size( width, cols ) {
return ( width <= 640 ) ? 1 : cols;
}
( function( $ ) {
"use strict";
$( document ).on( 'ready', function() {
/**
* 2. Initialization
*-----------------------------------------------------------------------*/
/**
* Initialization code does the following
* 1. Hide all elements with class hide.
* 2. Add an icon to toggle the main menu if the width of the window is less than 641px.
*
* @since 1.0.0
*/
function initialize() {
$( '.hide' ).css( 'display', 'none' );
if ( 640 >= window.innerWidth ) {
$( '#access li.menu-item-has-children > a' ).after( '' );
$( '#access li.menu-item-has-children .show-sub' ).click( toggle_submenu );
}
}
initialize();
/**
* 3. Toggle Functions
*-----------------------------------------------------------------------*/
/**
* Handles the display of submenus
*
* @since 1.0.0
* @param object event. Object passed to handler by jquery.
*/
function toggle_submenu( event ) {
var element = $( event.target )
.parent()
.children( 'ul' ),
display = element.css( 'display' );
if ( 'none' === display ) {
element.css( 'display', 'block' );
} else {
element.css( 'display', 'none' );
}
}
/**
* Handle the display of the style chooser.
*
* @since 1.0.0
* @param object event. Object passed to handler by jquery.
*/
function toggle_style_chooser( event ) {
var chooser = $( '.style-chooser' ),
display = chooser.css( 'display' );
if ( 'none' === display ) {
chooser.css( 'height', 'auto' ).css( 'display', 'inline-block' );
} else {
chooser.css( 'display', 'none' );
}
}
/**
* Handle the display of the contact form when the hire me button is clicked in the call to action container.
*
* @since 1.0.0
* @param object event. Object passed to handler by jquery.
*/
function toggle_contact_show( event ) {
var parent = $( event.target )
.parent()
.parent(),
display = $( '.hide-show', parent ).css( 'display' );
if ( 'none' === display ) {
$( '.hide-show', parent ).css( 'height', 'auto' ).show( 'slide-down' );
} else {
$( '.hide-show', parent ).hide( 'slide-up' ).css( 'height', '0' );
}
}
/**
* 4. Fixed Header Functions
*-----------------------------------------------------------------------*/
/**
* Remove the style for the fixed header.
*
* @since 1.0.0
*/
function remove_fixed_header() {
// Get some of the original style.
var menu_back = $( '#access' ).css( 'background-color' );
$( '#header' ).removeClass( 'fixed-header' );
$( '#header-mid' ).show( 'puff' );
$( '#header-top' ).show();
$( '#header-btm #logo' ).show( 'puff' );
$( '.block-display.box-display #main-div' ).css( 'margin-top', '24px' );
}
/**
* Handle the change of the color scheme
*
* @since 1.0.0
* @param object event. Object passed to handler by jquery.
*/
function change_color_scheme( event ) {
var target = $( event.target ),
val = target.attr( 'class' ),
body = $( 'body' );
body.removeClass( 'color-scheme1 color-scheme2 color-scheme3 color-scheme4 color-scheme5' );
body.addClass( val );
}
/**
* Handle the animation of the progressbars when in viewport
*
* @since 1.0.0
*/
function animate_progressbars() {
$( '.progressbar' ).each( function( i ) {
var id = $( this ).attr( 'id' ),
value = $( this ).data( 'percentage' );
$( this ).animate( { width: value + '%' }, 150 );
});
}
/**
* 5. Event Handlers
*-----------------------------------------------------------------------*/
$( '.call-to-action.connect > span' ).click( toggle_contact_show );
$( '.toggle-style-chooser' ).click( toggle_style_chooser );
$( '.style-chooser span' ).click( change_color_scheme );
$( '.skill-lbl-cont' ).waypoint( animate_progressbars,
{ offset: 700, triggerOnce: true } );
// Masonry
var blogcentral_msnry = $( '.blogcentral-masonry');
blogcentral_msnry.masonry({ gutter: '.gutter-sizer'});
// Fix to apply masonry when all images are loaded.
blogcentral_msnry.imagesLoaded( function() {
blogcentral_msnry.masonry();
});
// Flexsliders
// Slider for post type gallery if the option to display as a slideshow is enabled.
$( '.flex-gallery' ).each( function( i ) {
$( this ).flexslider( {
controlNav: false,
animationLoop: true,
slideshow: true,
selector: ".gallery-slides > li",
start: function() {
// Since the flexslider was originally displayed none, have to reapply masonry layout.
blogcentral_msnry.masonry();
}
});
});
// Flexslider for the actual slideshow component.
$( '.slideshow-comp' ).each( function( i ) {
var show = $( this ),
id = show.attr( 'data-blogcentral-cols' ),
animation = show.attr( 'data-animation' ),
sync = show.attr( 'data-sync' ),
asNavFor = show.attr( 'data-asNavFor' ),
useCSS = show.attr( 'data-useCSS' ),
easing = show.attr( 'data-easing' );
$( this ).flexslider( {
animation: animation,
animationLoop: true,
controlNav: false,
easing: easing,
useCSS: useCSS,
slideshow: true,
sync: sync,
smoothHeight: true,
asNavFor: asNavFor,
itemWidth: 3000,
minItems: id,
maxItems: id
} );
});
// Sticky Header
if ( blogcentral_object.header_sticky ) {
// Display the top fixed menu on scroll.
var header_height = $( '#header' ).outerHeight(),
header = $( '#header' ),
headTop = header.offset().top;
$( document ).scroll( function () {
if ( 640 < window.innerWidth ) {
var y = $( this ).scrollTop(),
header_width = $( '#main-div' ).innerWidth();
if ( y > header_height ) {
$( '#header' ).addClass( 'fixed-header' );
$( '#header' ).css( 'min-height', '0' );
$( '#header-top' ).css( 'display', 'none' );
$( '#header-mid' ).css( 'display', 'none' );
$( '#header-btm #logo' ).css( 'display', 'none' );
$( '#main-div' ).css( 'margin-top', '0' );
} else if( 0 === y ) {
remove_fixed_header();
}
}
} );
}
// Responsive main menu. Toggle the menu when the icon is clicked.
$( '#logo .fa' ).click( function() {
var menu = $( '#access' ).css( 'display' );
if ( 'none' === menu ) {
$( '#access' ).show( 'slide-up' );
} else {
$( '#access' ).hide( 'slide-down' );
}
});
/**
* This functionality is needed to reset any style that might be changed when the window
* is resized. Otherwise the user would have to reload the page to see it correctly. If this is
* of no concern, then you could safely delete the following lines of code.
*/
/**
* On window resize need to do the following:
* 1. Reconfigure sliders with the correct number of columns to display.
* 2. Reset settings that might be changed when the window is resized.
*/
$( window ).resize( function() {
$( '.flex-comp' ).each( function( i ) {
var size = $( this ).attr( 'data-blogcentral-cols' ),
width = $( this ).innerWidth(),
gridSize = get_grid_size( width, size ),
slider = $( this ).data( 'flexslider' );
slider.vars.minItems = gridSize;
slider.vars.maxItems = gridSize;
});
if ( 640 < window.innerWidth ) {
$( '.show-sub' ).remove();
$( '#access ul ul' ).hide();
$( '#access' ).css( 'display', 'block' );
} else {
remove_fixed_header();
$( '.show-sub' ).remove();
$( '#access' ).css( 'display', 'none' );
$( '#access li.menu-item-has-children > a' ).after( '' );
$( '#access li.menu-item-has-children .show-sub' ).click( toggle_submenu );
}
} );
// End of code that could safely be deleted.
});
})( jQuery );