apollo_developers/assets/js/directives/sidebars.js
venbatechnologies@gmail.com 1809bcf9c9 fixed table for student details
2018-04-23 18:34:11 +05:30

239 lines
8.4 KiB
JavaScript
Executable File

'use strict';
/**
* A set of directives for left and right sidebar.
*/
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);
});
}
};
}]).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;
}
}).directive('appAside', ['$window', '$rootScope', '$timeout', 'APP_MEDIAQUERY',
function ($window, $rootScope, $timeout, mq) {
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;
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();
});
$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 wrapLeave() {
wrap.trigger('mouseleave');
}
function isTouch() {
return $html.hasClass('touch');
}
function isMobile() {
return $win.width() < mq.desktop;
}
function isSidebarClosed() {
return $('.app-sidebar-closed').length;
}
function isSidebarFixed() {
return $('.app-sidebar-fixed').length;
}
}]);