213 lines
6.6 KiB
TypeScript
213 lines
6.6 KiB
TypeScript
import { Component, OnInit, OnDestroy } from '@angular/core';
|
|
import { Router } from '@angular/router';
|
|
import { ROUTES } from '../../components/sidebar/sidebar.component';
|
|
import { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';
|
|
|
|
@Component({
|
|
selector: 'app-auth-layout',
|
|
templateUrl: './auth-layout.component.html',
|
|
styleUrls: ['./auth-layout.component.scss']
|
|
})
|
|
export class AuthLayoutComponent implements OnInit, OnDestroy {
|
|
public menuItems: any[];
|
|
test: Date = new Date();
|
|
closeResult: string;
|
|
public sidebarColor: string = "red";
|
|
public isCollapsed = true;
|
|
mobile_menu_visible: any = 0;
|
|
private toggleButton: any;
|
|
private sidebarVisible: boolean;
|
|
|
|
constructor(private router: Router, private modalService: NgbModal) { }
|
|
|
|
changeSidebarColor(color){
|
|
var sidebar = document.getElementsByClassName('sidebar')[0];
|
|
var mainPanel = document.getElementsByClassName('main-panel')[0];
|
|
|
|
this.sidebarColor = color;
|
|
|
|
if(sidebar != undefined){
|
|
sidebar.setAttribute('data',color);
|
|
}
|
|
if(mainPanel != undefined){
|
|
mainPanel.setAttribute('data',color);
|
|
}
|
|
}
|
|
changeDashboardColor(color){
|
|
var body = document.getElementsByTagName('body')[0];
|
|
if (body && color === 'white-content') {
|
|
body.classList.add(color);
|
|
}
|
|
else if(body.classList.contains('white-content')) {
|
|
body.classList.remove('white-content');
|
|
}
|
|
}
|
|
// function that adds color white/transparent to the navbar on resize (this is for the collapse)
|
|
updateColor = () => {
|
|
var navbar = document.getElementsByClassName('navbar')[0];
|
|
if (window.innerWidth < 993 && !this.isCollapsed) {
|
|
navbar.classList.add('bg-white');
|
|
navbar.classList.remove('navbar-transparent');
|
|
} else {
|
|
navbar.classList.remove('bg-white');
|
|
navbar.classList.add('navbar-transparent');
|
|
}
|
|
};
|
|
ngOnInit() {
|
|
var navbar = document.getElementsByClassName('navbar')[0];
|
|
|
|
window.addEventListener("resize", this.updateColor);
|
|
this.toggleButton = navbar.getElementsByClassName("navbar-toggler")[0];
|
|
this.router.events.subscribe(event => {
|
|
this.sidebarClose();
|
|
var $layer: any = document.getElementsByClassName("close-layer")[0];
|
|
if ($layer) {
|
|
$layer.remove();
|
|
this.mobile_menu_visible = 0;
|
|
}
|
|
});
|
|
this.menuItems = ROUTES.filter(menuItem => menuItem);
|
|
// on this page, we need on the body tag the classes .rtl and .menu-on-right
|
|
document.body.classList.add("rtl", "menu-on-right");
|
|
// we also need the rtl bootstrap
|
|
// so we add it dynamically to the head
|
|
let head = document.head;
|
|
let link = document.createElement("link");
|
|
link.type = "text/css";
|
|
link.rel = "stylesheet";
|
|
link.id = "rtl-id";
|
|
link.href =
|
|
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap-rtl/3.4.0/css/bootstrap-rtl.css";
|
|
head.appendChild(link);
|
|
|
|
}
|
|
ngOnDestroy() {
|
|
// when we exit this page, we need to delete the classes .rtl and .menu-on-right
|
|
// from the body tag
|
|
document.body.classList.remove("rtl", "menu-on-right");
|
|
// we also need to delete the rtl bootstrap, so it does not break the other pages
|
|
// that do not make use of rtl
|
|
document.getElementById("rtl-id").remove();
|
|
}
|
|
collapse() {
|
|
this.isCollapsed = !this.isCollapsed;
|
|
const navbar = document.getElementsByTagName("nav")[0];
|
|
if (!this.isCollapsed) {
|
|
navbar.classList.remove("navbar-transparent");
|
|
navbar.classList.add("bg-white");
|
|
} else {
|
|
navbar.classList.add("navbar-transparent");
|
|
navbar.classList.remove("bg-white");
|
|
}
|
|
}
|
|
|
|
sidebarOpen() {
|
|
const toggleButton = this.toggleButton;
|
|
const mainPanel = <HTMLElement>(
|
|
document.getElementsByClassName("main-panel")[0]
|
|
);
|
|
const html = document.getElementsByTagName("html")[0];
|
|
if (window.innerWidth < 991) {
|
|
mainPanel.style.position = "fixed";
|
|
}
|
|
|
|
setTimeout(function() {
|
|
toggleButton.classList.add("toggled");
|
|
}, 500);
|
|
|
|
html.classList.add("nav-open");
|
|
|
|
this.sidebarVisible = true;
|
|
}
|
|
sidebarClose() {
|
|
const html = document.getElementsByTagName("html")[0];
|
|
this.toggleButton.classList.remove("toggled");
|
|
const mainPanel = <HTMLElement>(
|
|
document.getElementsByClassName("main-panel")[0]
|
|
);
|
|
|
|
if (window.innerWidth < 991) {
|
|
setTimeout(function() {
|
|
mainPanel.style.position = "";
|
|
}, 500);
|
|
}
|
|
this.sidebarVisible = false;
|
|
html.classList.remove("nav-open");
|
|
}
|
|
sidebarToggle() {
|
|
// const toggleButton = this.toggleButton;
|
|
// const html = document.getElementsByTagName('html')[0];
|
|
var $toggle = document.getElementsByClassName("navbar-toggler")[0];
|
|
|
|
if (this.sidebarVisible === false) {
|
|
this.sidebarOpen();
|
|
} else {
|
|
this.sidebarClose();
|
|
}
|
|
const html = document.getElementsByTagName("html")[0];
|
|
|
|
if (this.mobile_menu_visible == 1) {
|
|
// $('html').removeClass('nav-open');
|
|
html.classList.remove("nav-open");
|
|
if ($layer) {
|
|
$layer.remove();
|
|
}
|
|
setTimeout(function() {
|
|
$toggle.classList.remove("toggled");
|
|
}, 400);
|
|
|
|
this.mobile_menu_visible = 0;
|
|
} else {
|
|
setTimeout(function() {
|
|
$toggle.classList.add("toggled");
|
|
}, 430);
|
|
|
|
var $layer = document.createElement("div");
|
|
$layer.setAttribute("class", "close-layer");
|
|
|
|
if (html.querySelectorAll(".main-panel")) {
|
|
document.getElementsByClassName("main-panel")[0].appendChild($layer);
|
|
} else if (html.classList.contains("off-canvas-sidebar")) {
|
|
document
|
|
.getElementsByClassName("wrapper-full-page")[0]
|
|
.appendChild($layer);
|
|
}
|
|
|
|
setTimeout(function() {
|
|
$layer.classList.add("visible");
|
|
}, 100);
|
|
|
|
$layer.onclick = function() {
|
|
//asign a function
|
|
html.classList.remove("nav-open");
|
|
this.mobile_menu_visible = 0;
|
|
$layer.classList.remove("visible");
|
|
setTimeout(function() {
|
|
$layer.remove();
|
|
$toggle.classList.remove("toggled");
|
|
}, 400);
|
|
}.bind(this);
|
|
|
|
html.classList.add("nav-open");
|
|
this.mobile_menu_visible = 1;
|
|
}
|
|
}
|
|
open(content) {
|
|
this.modalService.open(content, {windowClass: 'modal-search'}).result.then((result) => {
|
|
this.closeResult = `Closed with: ${result}`;
|
|
}, (reason) => {
|
|
this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
|
|
});
|
|
}
|
|
|
|
private getDismissReason(reason: any): string {
|
|
if (reason === ModalDismissReasons.ESC) {
|
|
return 'by pressing ESC';
|
|
} else if (reason === ModalDismissReasons.BACKDROP_CLICK) {
|
|
return 'by clicking on a backdrop';
|
|
} else {
|
|
return `with: ${reason}`;
|
|
}
|
|
}
|
|
}
|