Skip to content
Snippets Groups Projects
Select Git revision
  • 52188d72335cec26c1668cd81addefc7965f19fe
  • master default
  • remove-matefun-graf-from-angular
  • pg-moodle-integration-main
  • feature/discontinuidades
  • feature/i18n-with-routes
  • develop
  • feature/functions-information
  • feature/editor-improvements
  • feature/add-in18-frontend
  • feature/integration-graph-2d-3d
  • feature/3DComponentInitialization
  • graficas-componente
  • feature/codeMatchBrackets
  • v2.0
  • v1.0
16 results

closePopoverDirective.ts

  • Forked from matefun / Frontend
    Source project has a limited visibility.
    closePopoverDirective.ts 1.05 KiB
    import { Directive, HostListener, ElementRef, ComponentRef } from '@angular/core';
    import { NgbPopover } from '@ng-bootstrap/ng-bootstrap';
    import { NgbPopoverWindow } from '@ng-bootstrap/ng-bootstrap/popover/popover';
    
    @Directive({
      selector: '[closePopoverOnOutsideClick][ngbPopover]'
    })
    export class ClosePopoverOnOutsideClickDirective {
    
      constructor(private elementRef: ElementRef,
                  private ngbPopover: NgbPopover) {
    
      }
    
      @HostListener('document:click', ['$event'])
      private documentClicked(event: MouseEvent): void {
    
        // Popover is open
        if (this.ngbPopover && this.ngbPopover.isOpen()) {
    
          // Not clicked on self element
          if (!this.elementRef.nativeElement.contains(event.target)) {
    
            // Hacking typescript to access private member
            const popoverWindowRef: ComponentRef<NgbPopoverWindow> = (this.ngbPopover as any)._windowRef;
    
            // If clicked outside popover window
            if (!popoverWindowRef.location.nativeElement.contains(event.target)) {
              this.ngbPopover.close();
            }
          }
        }
      }
    }