/*! * remark (http://getbootstrapadmin.com/remark) * Copyright 2016 amazingsurge * Licensed under the Themeforest Standard Licenses */ (function(window, document, $) { 'use strict'; $.site.menu = { speed: 250, init: function() { this.$instance = $('.site-menu'); if (this.$instance.length === 0) { return; } this.bind(); }, bind: function() { var self = this; this.$instance.on('mouseenter.site.menu', '.site-menu-item', function(e) { var $item = $(this); if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) { var $sub = $item.children('.site-menu-sub'); self.position($item, $sub); } $item.addClass('hover'); }).on('mouseleave.site.menu', '.site-menu-item', function() { var $item = $(this); if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) { $item.children('.site-menu-sub').css("max-height", ""); } $item.removeClass('hover'); }).on('deactive.site.menu', '.site-menu-item.active', function(e) { var $item = $(this); $item.removeClass('active'); e.stopPropagation(); }).on('active.site.menu', '.site-menu-item', function(e) { var $item = $(this); $item.addClass('active'); e.stopPropagation(); }).on('open.site.menu', '.site-menu-item', function(e) { var $item = $(this); self.expand($item, function() { $item.addClass('open'); }); $item.siblings('.open').trigger('close.site.menu'); e.stopPropagation(); }).on('close.site.menu', '.site-menu-item.open', function(e) { var $item = $(this); self.collapse($item, function() { $item.removeClass('open'); }); e.stopPropagation(); }).on('click.site.menu ', '.site-menu-item', function(e) { var $item = $(this); if ($item.parent('.site-menu').length == 0 && $item.is('.has-sub') && $(e.target).closest('.site-menu-item').is(this)) { if ($item.is('.open')) { $item.trigger('close.site.menu'); } else { $item.trigger('open.site.menu'); } } else { if (!$item.is('.active')) { $item.siblings('.active').trigger('deactive.site.menu'); $item.trigger('active.site.menu'); } } e.stopPropagation(); }).on('tap.site.menu', '> .site-menu-item', function() { var $item = $(this); if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) { $item.siblings('.hover').each(function() { var $item = $(this); if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) { $item.children('.site-menu-sub').css("max-height", ""); } $item.removeClass('hover'); }); if ($item.is('.hover')) { if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) { $item.children('.site-menu-sub').css("max-height", ""); } $item.removeClass('hover'); } else { if ($item.is('.has-sub') && $item.parent('.site-menu').length > 0) { var $sub = $item.children('.site-menu-sub'); self.position($item, $sub); } $item.addClass('hover'); } } else { var $link = $(this).find('a'); if ($link.length > 0) { var link = $link.attr('href'); if (link) { window.location = link; } } } }).on('scroll.site.menu', '.site-menu-sub', function(e) { e.stopPropagation(); }); }, collapse: function($item, callback) { var self = this; var $sub = $item.children('.site-menu-sub'); $sub.show().slideUp(this.speed, function() { $(this).css('display', ''); $(this).find('> .site-menu-item').removeClass('is-shown'); if (callback) { callback(); } self.$instance.trigger('collapsed.site.menu'); }); }, expand: function($item, callback) { var self = this; var $sub = $item.children('.site-menu-sub'); var $children = $sub.children('.site-menu-item').addClass('is-hidden'); $sub.hide().slideDown(this.speed, function() { $(this).css('display', ''); if (callback) { callback(); } self.$instance.trigger('expanded.site.menu'); }); setTimeout(function() { $children.addClass('is-shown'); $children.removeClass('is-hidden'); }, 0); }, refresh: function() { this.$instance.find('.open').filter(':not(.active)').removeClass('open'); }, position: function($item, $dropdown) { var offsetTop = $item.position().top, dropdownHeight = $dropdown.outerHeight(), menubarHeight = $.site.menubar.$instance.outerHeight(), itemHeight = $item.find("> a").outerHeight(); $dropdown.removeClass('site-menu-sub-up').css('max-height', ""); //if (offsetTop + dropdownHeight > menubarHeight) { if (offsetTop > menubarHeight / 2) { $dropdown.addClass('site-menu-sub-up'); if ($.site.menubar.foldAlt) { offsetTop = offsetTop - itemHeight; } //if(dropdownHeight > offsetTop + itemHeight) { $dropdown.css('max-height', offsetTop + itemHeight); //} } else { if ($.site.menubar.foldAlt) { offsetTop = offsetTop + itemHeight; } $dropdown.removeClass('site-menu-sub-up'); $dropdown.css('max-height', menubarHeight - offsetTop); } //} } }; })(window, document, jQuery);