import { Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Renderer2, ChangeDetectorRef, Input, ContentChildren, NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { PrimeTemplate } from 'primeng/api'; import { RouterModule } from '@angular/router'; import { RippleModule } from 'primeng/ripple'; class MegaMenu { constructor(el, renderer, cd) { this.el = el; this.renderer = renderer; this.cd = cd; this.orientation = 'horizontal'; this.autoZIndex = true; this.baseZIndex = 0; } ngAfterContentInit() { this.templates.forEach((item) => { switch (item.getType()) { case 'start': this.startTemplate = item.template; break; case 'end': this.endTemplate = item.template; break; } }); } onCategoryMouseEnter(event, menuitem) { if (menuitem.disabled) { event.preventDefault(); return; } if (this.activeItem) { this.activeItem = menuitem; } } onCategoryClick(event, item) { if (item.disabled) { event.preventDefault(); return; } if (!item.url) { event.preventDefault(); } if (item.command) { item.command({ originalEvent: event, item: item }); } if (item.items) { if (this.activeItem && this.activeItem === item) { this.activeItem = null; this.unbindDocumentClickListener(); } else { this.activeItem = item; this.bindDocumentClickListener(); } } } itemClick(event, item) { if (item.disabled) { event.preventDefault(); return; } if (!item.url) { event.preventDefault(); } if (item.command) { item.command({ originalEvent: event, item: item }); } this.activeItem = null; } getColumnClass(menuitem) { let length = menuitem.items ? menuitem.items.length : 0; let columnClass; switch (length) { case 2: columnClass = 'p-megamenu-col-6'; break; case 3: columnClass = 'p-megamenu-col-4'; break; case 4: columnClass = 'p-megamenu-col-3'; break; case 6: columnClass = 'p-megamenu-col-2'; break; default: columnClass = 'p-megamenu-col-12'; break; } return columnClass; } bindDocumentClickListener() { if (!this.documentClickListener) { this.documentClickListener = (event) => { if (this.el && !this.el.nativeElement.contains(event.target)) { this.activeItem = null; this.unbindDocumentClickListener(); this.cd.markForCheck(); } }; document.addEventListener('click', this.documentClickListener); } } unbindDocumentClickListener() { if (this.documentClickListener) { document.removeEventListener('click', this.documentClickListener); this.documentClickListener = null; } } } MegaMenu.decorators = [ { type: Component, args: [{ selector: 'p-megaMenu', template: `