app-side-bar.js 5.21 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
// appNavBar
// navigation bar for application
frameworkModule.directive('appSideBar', ['$log',
    function ($log) {
        'use strict';

        $log.debug('sidebar.ctor()...');

        return {
            restrict: 'E',
            templateUrl: '/app/framework/app-side-bar/app-side-bar.html' + '?_=' + Math.random(),
            replace: true,
            scope: {},
            controller: 'appSideBarController',
            link: function (scope, element, attr) {

                scope.isMenuClosed = false;
                var superiorMenuActiveClass = 'superior-menu-active';
                //Top Toggler
                var handleSidebarToggler = function () {
                    var body = $('body');

                    // handle sidebar show/hide
                    body.on('click', '.sidebar-toggler', function () {

                        var sidebarMenuSubs = $('#sidebar .nav-second-level, #sidebar .nav-third-level');
                        var sidebarPageClass = 'page-sidebar-minified';
                        //collapse("toggle")
                        $("#sidebar-area .dropdown-collapse").parent("li").children("ul").css('height', '');

                        $(".sidebar-search", $('.page-sidebar')).removeClass("open");
                        if (body.hasClass("sidebar-closed")) {
                            body.removeClass("sidebar-closed");
                            scope.isMenuClosed = false;

                            //代码意图:控制右侧 page-wrapper 宽度以适应菜单栏的变化
                            $("div.admin-wrapper > div.page-wrapper").removeClass(sidebarPageClass);

                            sidebarMenuSubs.addClass('collapse');

                            if ($.cookie) {
                                $.cookie('sidebar-closed', '0');
                            }

                        } else {
                            body.addClass("sidebar-closed");
                            scope.isMenuClosed = true;
                            $("div.admin-wrapper > div.page-wrapper").addClass(sidebarPageClass);

                            if ($.cookie) {
                                $.cookie('sidebar-closed', '1');
                            }
                        }
                        $(window).trigger('resize');
                    });
                };

                //IE Checker
                var isIE = function () {
                    var undef,
                        v = 3,
                        div = document.createElement("div"),
                        all = div.getElementsByTagName("i");
                    while (
                        div.innerHTML = "<!--[if gt IE " + (++v) + "]><i></i><![endif]-->",
                        all[0]
                    ) {
                        return v > 4 ? v : undef;
                    }
                };

                //side menu toggle (init)
                if (isIE() <= 9) {
                    $('#sidebar').find("li.active").has("ul").children("ul").collapse("show");
                    $('#sidebar').find("li").not(".active").has("ul").children("ul").collapse("hide");
                } else {
                    $('#sidebar').find("li.active").has("ul").children("ul").addClass("collapse in");
                    $('#sidebar').find("li").not(".active").has("ul").children("ul").addClass("collapse");
                }

                //side menu toggle (setting)
                $("body").on("click", "#sidebar-area .dropdown-collapse,#sidebar-area a", function () {
                    var currentClass = $(this).attr('class');
                    var len = $(this).siblings('ul').children('li').length;
                    $("#sidebar-area a").removeClass("active");

                    if (currentClass.indexOf('active') >= 0) {
                        $(this).removeClass('active');
                    } else {
                        $(this).addClass('active');
                    }
                    if (len > 0) {
                        $(this).removeClass('active');
                    }

                    $(this).parent("li").children("ul").collapse("toggle");
                    $(this).children(".fa.arrow").toggleClass('active-arrow');
                });

                $("body").on({
                    click: function () {
                        $(this).children(".logout").children("div").toggle();
                    }
                }, ".profile-name");

                handleSidebarToggler();

                var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;

                if ($.cookie && $.cookie('sidebar-closed') === '1' && !$('body').hasClass("sidebar-closed") && width >= 768) {
                    $('body').addClass("sidebar-closed");
                }

                var url = window.location;
                var element = $('ul.nav a').filter(function () {
                    return this.href === url;
                }).addClass('active').parent().parent().addClass('in').parent();
                if (element.is('li')) {
                    element.addClass('active');
                }

                scope.showChangePassword = function () {
                    $("#changePasswordModal").modal('show');
                }
            }
        };
    }
]);