import { Component, Input, AfterViewInit, ContentChild, TemplateRef } from '@angular/core';
import { RdComponent } from '../../base/rdComponent';
import { StyleLoaderService } from '../../library/style-loader.service';
export type DockModes = "circle" | "plus";
@Component({
selector: 'rd-dock',
template: `
`
})
export class Dock extends RdComponent implements AfterViewInit {
constructor(style: StyleLoaderService) {
super();
style.load(["./assets/css/dock.css"]);
}
@Input("rd-mode") mode: DockModes = "circle";
@Input("rd-overlay-active") overlayActive = true;
@ContentChild(TemplateRef) template;
button;
wrapper;
overlay;
isOpen: boolean = false;
ngAfterViewInit() {
this.button = document.getElementById('cn-button');
this.wrapper = document.getElementById('cn-wrapper');
this.overlay = document.getElementById('cn-overlay');
this.button.addEventListener('click', this.mode == "circle" ? this.cHandler : this.pHandler, false);
this.wrapper.addEventListener('click', (e) => { e.stopPropagation() }, false);
}
cHandler = function (e) {
e.stopPropagation();
if (!this.isOpen) {
this.button.innerHTML = "Close";
this.open();
}
else {
this.button.innerHTML = "Menu";
this.close();
}
document.addEventListener('click', function () {
this.button.innerHTML = "Menu";
this.close();
}.bind(this));
}.bind(this);
pHandler = function (e) {
let that = this;
function openNav() {
that.button.innerHTML = "-";
that.open();
}
function closeNav() {
that.button.innerHTML = "+";
that.close();
}
if (!e) var e: any = window.event;
e.stopPropagation(); //so that it doesn't trigger click event on document
if (!this.isOpen) openNav();
else closeNav();
document.addEventListener('click', closeNav);
}.bind(this);
open() {
this.isOpen = true;
if (this.overlayActive) this.jQuery(this.overlay).addClass('on-overlay');
this.jQuery(this.wrapper).addClass('opened-nav');
}
close() {
this.isOpen = false;
if (this.overlayActive) this.jQuery(this.overlay).removeClass('on-overlay');
this.jQuery(this.wrapper).removeClass('opened-nav');
}
}