(function () { 'use strict'; angular .module('app') .directive('sidebar', [ '$document', '$rootScope', function($document, $rootScope) { return { replace: false, restrict: "C", link: function(scope, elem, attrs) { var shouldCloseOnOuterClicks = true; if (attrs.closeOnOuterClicks == 'false' || attrs.closeOnOuterClicks == '0') { shouldCloseOnOuterClicks = false; } var isAncestorOrSelf = function(element, target) { var parent = element; while (parent.length > 0) { if (parent[0] === target[0]) { parent = null; return true; } parent = parent.parent(); } parent = null; return false; }; var closeOnOuterClicks = function(e) { if (!isAncestorOrSelf(angular.element(e.target), elem)) { $rootScope.toggle(attrs.id, 'off'); e.preventDefault(); return false; } }; var clearCb1 = angular.noop(); if (shouldCloseOnOuterClicks) { clearCb1 = $rootScope.$on('clip-two.toggled', function(e, id, active) { if (id == attrs.id) { if (active) { setTimeout(function() { $document.on('click tap', closeOnOuterClicks); }, 300); } else { $document.off('click tap', closeOnOuterClicks); } } }); } scope.$on('$destroy', function() { clearCb1(); $document.off('click tap', closeOnOuterClicks); }); } }; } ]); angular .module('app') .directive('searchForm', function () { return { restrict: 'AC', link: function(scope, elem, attrs) { var wrap = $('.app-aside'); var searchForm = elem.children('form'); var formWrap = elem.parent(); $(".s-open").on('click', function(e) { searchForm.prependTo(wrap); e.preventDefault(); $(document).on("mousedown touchstart", closeForm); }); $(".s-remove").on('click', function(e) { searchForm.appendTo(elem); e.preventDefault(); }); var closeForm = function(e) { if (!searchForm.is(e.target) && searchForm.has(e.target).length === 0) { $(".s-remove").trigger('click'); $(document).off("mousedown touchstart", closeForm); } }; } }; function isSidebarClosed() { return $('.app-sidebar-closed').length; } function isSidebarFixed() { return $('.app-sidebar-fixed').length; } }); angular .module('app') .directive('appAside', [ '$window', '$rootScope', function($window, $rootScope) { var $html = $('html'), $win = $($window), _this, wrap = $('.app-aside'); return { restrict: 'AC', link: function(scope, elem, attrs, controllers) { var eventObject = isTouch() ? 'click' : 'mouseenter'; var ul = ""; var menuTitle; var wrap = $('.app-aside'); elem.on('click', 'a', function(e) { _this = $(this); if (isSidebarClosed() && !isMobile() && !_this.closest("ul").hasClass("sub-menu")) return; _this.closest("ul").find(".open").not(".active").children("ul").not(_this.next()).slideUp(200).parent('.open').removeClass("open"); if (_this.next().is('ul') && _this.parent().toggleClass('open')) { _this.next().slideToggle(200, function() { $win.trigger("resize"); }); e.stopPropagation(); e.preventDefault(); } else { $rootScope.toggle('sidebar', 'off'); } }); elem.on(eventObject, 'a', function(e) { if (!isSidebarClosed() || isMobile()) return; _this = $(this); if (!_this.parent().hasClass('hover') && !_this.closest("ul").hasClass("sub-menu")) { wrapLeave(); _this.parent().addClass('hover'); menuTitle = _this.find(".item-inner").clone(); if (_this.parent().hasClass('active')) { menuTitle.addClass("active"); } var offset = $("#sidebar").position().top; var itemTop = isSidebarFixed() ? _this.parent().position().top + offset : (_this.parent().position().top); menuTitle.css({ position: isSidebarFixed() ? 'fixed' : 'absolute', height: _this.outerHeight(), top: itemTop }).appendTo(wrap); if (_this.next().is('ul')) { ul = _this.next().clone(true); ul.appendTo(wrap).css({ top: menuTitle.position().top + _this.outerHeight(), position: isSidebarFixed() ? 'fixed' : 'absolute', }); if (_this.parent().position().top + _this.outerHeight() + offset + ul.height() > $win.height() && isSidebarFixed()) { ul.css('bottom', 0); } else { ul.css('bottom', 'auto'); } wrap.children().first().scroll(function() { if (isSidebarFixed()) wrapLeave(); }); setTimeout(function() { if (!wrap.is(':empty')) { $(document).on('click tap', wrapLeave); } }, 300); } else { ul = ""; return; } } }); wrap.on('mouseleave', function(e) { $(document).off('click tap', wrapLeave); $('.hover', wrap).removeClass('hover'); $('> .item-inner', wrap).remove(); $('> ul', wrap).remove(); }); function wrapLeave() { wrap.trigger('mouseleave'); } $rootScope.$on('$locationChangeSuccess', function() { var newPath; newPath = window.location.hash; angular.forEach(elem.find('.main-navigation-menu a'), function(domLink) { var link = angular.element(domLink); var menu; if (domLink.hash === newPath && (!isSidebarClosed() || isMobile())) { if (link.closest("ul").hasClass("sub-menu")) { menu = link.closest("ul"); var activeMenu = menu; menu.slideDown(200).parent().siblings().children('.sub-menu').slideUp(200, function() { $(this).parent().removeClass("open"); }); } else { $('.sub-menu').slideUp(200, function() { $(this).parent().removeClass("open"); }); } } activeMenu = null; menu = null; }); }); } }; function isTouch() { return $html.hasClass('touch'); } function isMobile() { return $win.width() < 480; } function isSidebarClosed() { return $('.app-sidebar-closed').length; } function isSidebarFixed() { return $('.app-sidebar-fixed').length; } } ]); })();