/**
* Helper for splitted-navigation element. * * @author Htmlstream * @version 1.0 * */
;(function($){
'use strict'; $.HSCore.helpers.HSNavigationSplitted = { /** * Base configuration of the helper. * * @private */ _baseConfig: { breakpoint: 992, mobileTarget: null, logoSelector: '.navbar-brand', logoItemSelector: '.nav-logo-item' }, /** * Contains all initialized items on the page. * * @private */ _pageCollection: $(), /** * Initialization. * * @param {jQuery} collection * @param {Object} config * * @return {jQuery} */ init: function(collection, config) { var self; if(!collection || !collection.length) return $(); self = this; $(window).on('resize.HSSplitteNavigation', function(){ if( self.resizeTimeOutId ) clearTimeout( self.resizeTimeOutId ); self.resizeTimeOutId = setTimeout(function(){ self._pageCollection.each(function(i, el){ $(el).data('HSSplittedNavigation').check(); }); },10); }); collection.each(function(i, el){ var $item = $(el); config = config && $.isPlainObject(config) ? $.extend(true, {}, self._baseConfig, config, $item.data()) : $.extend(true, {}, self._baseConfig, $item.data()); if( $item.data('HSSplittedNavigation') ) return; $item.data('HSSplittedNavigation', new HSSplittedNavigation( $item, config )); self._pageCollection = self._pageCollection.add($item); }); self._pageCollection.each(function(i, el){ $(el).data('HSSplittedNavigation').run(); }); return collection; } }; /** * Creates a splitted-navigation object. * * @param {jQuery} element * @param {Object} config * * @constructor */ function HSSplittedNavigation(element, config) { this.element = element; this.config = config; this.logo = this.element.find( this.config.logoSelector ); this.logoItem = this.element.find( this.config.logoItemSelector ); this.target = this.element.find( this.config.mobileTarget ).length ? this.element.find( this.config.mobileTarget ) : this.element; } /** * * * @public * @return {HSSplittedNavigation} */ HSSplittedNavigation.prototype.run = function() { this[$(window).width() < this.config.breakpoint ? 'toMobileState' : 'toDefaultState'](); return this; } /** * * * @public * @return {HSSplittedNavigation} */ HSSplittedNavigation.prototype.check = function() { var $w = $(window); if( $w.width() < this.config.breakpoint && this.defaultState) { this.toMobileState(); } else if( $w.width() >= this.config.breakpoint && !this.defaultState ) { this.toDefaultState(); } return this; } /** * * * @public * @return {HSSplittedNavigation} */ HSSplittedNavigation.prototype.toDefaultState = function() { if( !this.logoItem.length || !this.logo.length ) return this; this.logoItem.show().append( this.logo ); this.defaultState = true; return this; } /** * * * @public * @return {HSSplittedNavigation} */ HSSplittedNavigation.prototype.toMobileState = function() { if( !this.logoItem.length || !this.logo.length ) return this; this.target.before( this.logo ); this.logoItem.hide(); this.defaultState = false; return this; }
})(jQuery);