/**
* Side Nav wrapper.
*
* @author Htmlstream
* @version 1.0
* @requires
*
*/
var isSideMenuMini = $.cookie('isSideMenuMini') ? true : '';
;
(function($) {
'use strict';
$.HSCore.components.HSSideNav = {
/**
*
*
* @var Object _baseConfig
*/
_baseConfig: {},
/**
*
*
* @var jQuery pageCollection
*/
pageCollection: $(),
/**
* Initialization of Side Nav wrapper.
*
* @param String selector (optional)
* @param Object config (optional)
*
* @return jQuery pageCollection - collection of initialized items.
*/
init: function(selector, config) {
this.collection = selector && $(selector).length ? $(selector) : $();
if (!$(selector).length) return;
this.config = config && $.isPlainObject(config) ?
$.extend({}, this._baseConfig, config) : this._baseConfig;
this.config.itemSelector = selector;
this.initSideNav();
return this.pageCollection;
},
initSideNav: function() {
//Variables
var $self = this,
collection = $self.pageCollection;
//Actions
this.collection.each(function(i, el) {
//Variables
var $this = $(el),
target = $this.data('hssm-target'),
targetClass = $this.data('hssm-class'),
bodyClass = $this.data('hssm-body-class'),
isUnifyEffect = Boolean($this.data('hssm-fade-effect')),
isShowAllExceptThis = Boolean($this.data('hssm-is-close-all-except-this')),
$closedItems = [],
windW = $(window).width();
$(target).find('[data-hssm-target]').each(function(i) {
if ($(this).parent().hasClass('u-side-nav--top-level-menu-item u-side-nav-opened')) {
$closedItems.push($(this).data('hssm-target'));
}
});
// if (isUnifyEffect) {
// $this.on('click', function(e) {
// e.preventDefault();
//
// if (!$(target).hasClass('toggled')) {
// $self.unifyOpenEffect(target, targetClass, bodyClass);
// $.cookie('isSideMenuMini', true);
// } else {
// $self.unifyCloseEffect(target, targetClass, bodyClass);
// $.cookie('isSideMenuMini', '');
// }
// });
// } else {
$this.on('click', function(e) {
e.preventDefault();
if (!$(target).hasClass('toggled')) {
$self.defaultOpenEffect(target, $closedItems, targetClass, bodyClass);
$.cookie('isSideMenuMini', true);
} else {
$self.defaultCloseEffect(target, $closedItems, targetClass, bodyClass);
$.cookie('isSideMenuMini', '');
}
});
// }
$(target).find('[data-hssm-target]').on('click', function(e) {
e.preventDefault();
var itemTarget = $(this).data('hssm-target'),
$itemParent = $(this).parent();
if (isShowAllExceptThis) {
if (!$('body').hasClass('u-side-nav-mini')) {
$itemParent.parent().find('> li:not(".has-active") > ul:not("' + itemTarget + '")').slideUp(400, function() {
$(this).parent().removeClass('u-side-nav-opened');
$closedItems.push(itemTarget);
});
} else {
$itemParent.parent().find('> li > ul:not("' + itemTarget + '")').slideUp(400, function() {
$(this).parent().removeClass('u-side-nav-opened');
$closedItems.push(itemTarget);
});
}
} else {
if (!$(this).parent().hasClass('u-side-nav-opened')) {
$closedItems.push(itemTarget);
} else {
$closedItems = $.grep($closedItems, function(value) {
return value != itemTarget;
});
}
}
// $(itemTarget).slideToggle(400, function() {
// $(this).parent().toggleClass('u-side-nav-opened');
// });
$(itemTarget).slideToggle(400)
.parent().toggleClass('u-side-nav-opened');
});
if (windW <= 992 || isSideMenuMini == true) {
$(this).trigger('click');
}
$(window).on('resize', function() {
var windW = $(window).width();
if (windW <= 992) {
$this.removeClass('once-opened');
if (!$this.hasClass('is-active')) {
if (!$this.hasClass('once-closed')) {
$this.addClass('is-active was-opened once-closed');
if (isUnifyEffect) {
$self.unifyOpenEffect(target, targetClass, bodyClass);
} else {
$self.defaultOpenEffect(target, $closedItems, targetClass, bodyClass);
}
}
}
} else {
$this.removeClass('once-closed');
if ($this.hasClass('was-opened')) {
$this.removeClass('is-active was-opened');
if (!$this.hasClass('once-opened')) {
$this.addClass('once-opened');
if (isUnifyEffect) {
$self.unifyCloseEffect(target, targetClass, bodyClass);
} else {
$self.defaultCloseEffect(target, $closedItems, targetClass, bodyClass);
}
}
}
}
});
//Actions
collection = collection.add($this);
});
},
// unifyOpenEffect: function(target, targetclass, bodyclass) {
// $(target).addClass('toggled u-side-nav--mini-hover-on');
// $(target + '.toggled').addClass(targetclass);
// $('body').addClass(bodyclass);
// },
//
// unifyCloseEffect: function(target, targetclass, bodyclass) {
// $(target).children().hide();
// $(target).removeClass(targetclass + ' toggled');
// $('body').removeClass(bodyclass);
//
// setTimeout(function() {
// $(target).children().fadeIn(100);
// $(target).removeClass('u-side-nav--mini-hover-on');
// }, 300);
// },
defaultOpenEffect: function(target, closeditems, targetclass, bodyclass) {
$(target).addClass('toggled u-side-nav--mini-hover-on');
if (closeditems.length > 0) {
var items = closeditems.toString();
$(items).slideUp(400, function() {
$(target + '.toggled').addClass(targetclass);
$('body').addClass(bodyclass);
$(items).parent().removeClass('u-side-nav-opened');
});
} else {
$(target + '.toggled').addClass(targetclass);
$('body').addClass(bodyclass);
}
},
defaultCloseEffect: function(target, closeditems, targetclass, bodyclass) {
$(target).removeClass('toggled u-side-nav--mini-hover-on');
$(target).removeClass(targetclass + ' toggled');
$('body').removeClass(bodyclass);
if (closeditems.length > 0) {
setTimeout(function() {
$(closeditems.toString()).parent().addClass('u-side-nav-opened');
$(closeditems.toString()).slideDown(400);
}, 300);
}
}
}
})(jQuery);