@ctrl/ngx-rightclick
Version:
GitHub Buttons for Angular. Star, Like, Follow and more
16 lines (14 loc) • 10.2 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/cdk/overlay"),require("@angular/cdk/portal"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@ctrl/ngx-rightclick",["exports","@angular/core","@angular/cdk/overlay","@angular/cdk/portal","rxjs","rxjs/operators"],t):t(((e=e||self).ctrl=e.ctrl||{},e.ctrl["ngx-rightclick"]={}),e.ng.core,e.ng.cdk.overlay,e.ng.cdk.portal,e.rxjs,e.rxjs.operators)}(this,(function(e,t,n,o,i,r){"use strict";
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */Object.create;function s(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],o=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}Object.create;var u=function(e,t){this.menu=e,this.context=t},a=function(){function e(e,t,n){this.activeContextMenu=e,this.parentInjector=t,this.context=n,this.menuContext=new u(e,n)}return e.prototype.get=function(e,t,n){return e===u?this.menuContext:this.parentInjector.get(e,t,n)},e}(),c=function(){function e(e,t,n){this.overlay=e,this.scrollStrategy=t,this.injector=n,this.menus=[],this.id=0}return e.prototype.show=function(e,n,r,s,u,c,l){var p;void 0===c&&(c=!1),c?(this.closeAll(void 0,l),p=e.target):(this.closeAll(),p={getBoundingClientRect:function(){return{bottom:e.clientY,height:0,left:e.clientX,right:e.clientX,top:e.clientY,width:0}}});var h=new t.ElementRef(p),m=this.overlay.position().flexibleConnectedTo(h).withFlexibleDimensions(!1);c?m.withPositions([{originX:"end",originY:"top",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"end",overlayY:"top"},{originX:"end",originY:"bottom",overlayX:"start",overlayY:"bottom"},{originX:"start",originY:"bottom",overlayX:"end",overlayY:"bottom"}]):m.withPositions([{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"end",overlayY:"top"},{originX:"end",originY:"center",overlayX:"start",overlayY:"center"},{originX:"start",originY:"center",overlayX:"end",overlayY:"center"}]);var v={submenu:c,id:this.id++,isMenuHovered:new i.BehaviorSubject(!1),isTriggerHovered:new i.BehaviorSubject(!1)},y=new a(v,this.injector,r),g=new o.ComponentPortal(n,void 0,y),d=this.overlay.create({positionStrategy:m,panelClass:"ngx-contextmenu",scrollStrategy:this.scrollStrategy.close()}),f=d.attach(g),x=Object.assign(Object.assign({overlayRef:d,component:f},v),{menuClose:s,menuAction:u});return this.menus.push(x),x},e.prototype.getCurrentLevel=function(){return this.menus.length},e.prototype.closeAll=function(e,t){void 0===t&&(t=0);for(var n=t;n<this.menus.length;n++){var o=this.menus[n];this.destroyMenu(o,e)}this.menus.splice(t,this.menus.length)},e.prototype.destroyMenu=function(e,t){e.component.instance._state="exit",e.component.instance.lazy?e.component.instance._animationDone.pipe(r.filter((function(e){return"exit"===e.toState})),r.take(1)).subscribe((function(){e.overlayRef.detach(),e.overlayRef.dispose()})):(e.overlayRef.detach(),e.overlayRef.dispose()),t&&e.menuAction.next(t),e.menuClose.next()},e.prototype.close=function(e,t,n){this.destroyMenu(e,n),this.menus.splice(t,1)},e.prototype.checkOutsideClick=function(e){var t,n;try{for(var o=s(this.menus),i=o.next();!i.done;i=o.next()){if(i.value.component.location.nativeElement.contains(e.target))return e.preventDefault(),void e.stopPropagation()}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}this.closeAll()},e.prototype.closeSubMenu=function(e){var t=this.menus.findIndex((function(t){return t.id===e}));if(-1!==t&&t===this.menus.length-1){var n=this.menus[t];if(!n.isMenuHovered.getValue()&&!n.isTriggerHovered.getValue())for(var o=this.menus.length-1;o>=1;o--){var i=this.menus[o];if(i.isMenuHovered.getValue()||i.isTriggerHovered.getValue())return;this.close(i,o)}}},e}();c.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new c(t.ɵɵinject(n.Overlay),t.ɵɵinject(n.ScrollStrategyOptions),t.ɵɵinject(t.INJECTOR))},token:c,providedIn:"root"}),c.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],c.ctorParameters=function(){return[{type:n.Overlay},{type:n.ScrollStrategyOptions},{type:t.Injector}]};var l=function(){function e(e){this.contextMenuService=e,this.holdToDisplay=1e3,this.menuAction=new t.EventEmitter,this.menuClose=new t.EventEmitter,this.beforeOpen=new t.EventEmitter,this.visible=!1}return e.prototype.handleMenu=function(e){var t=!1;this.beforeOpen.emit({menuContext:this.menuContext,event:e,preventOpen:function(){t=!0}}),t||(e.preventDefault(),this.menu=this.contextMenuService.show(e,this.contextMenuTrigger,this.menuContext,this.menuClose,this.menuAction),this.visible=!0)},e.prototype.handleMouseDown=function(e){var t=this;this.holdToDisplay>=0&&(e.stopPropagation(),e.clientY=e.touches[0].clientY,e.clientX=e.touches[0].clientX,this.mouseDownTimeoutId=setTimeout((function(){return t.handleMenu(e)}),this.holdToDisplay))},e.prototype.handleMouseUp=function(){clearTimeout(this.mouseDownTimeoutId)},e.prototype.ngOnInit=function(){var e=this;this.sub=this.menuClose.subscribe((function(){return e.visible=!1}))},e.prototype.ngOnDestroy=function(){this.sub.unsubscribe()},e}();l.decorators=[{type:t.Directive,args:[{selector:"[contextMenuTrigger]",exportAs:"contextMenuTrigger"}]}],l.ctorParameters=function(){return[{type:c}]},l.propDecorators={contextMenuTrigger:[{type:t.Input}],menuContext:[{type:t.Input}],holdToDisplay:[{type:t.Input}],menuAction:[{type:t.Output}],menuClose:[{type:t.Output}],beforeOpen:[{type:t.Output}],handleMenu:[{type:t.HostListener,args:["contextmenu",["$event"]]}],handleMouseDown:[{type:t.HostListener,args:["touchstart",["$event"]]}],handleMouseUp:[{type:t.HostListener,args:["touchend"]}]};var p=function(){function e(e){var n=this;this.contextMenuService=e,this.hoverDelay=500,this.openDelay=200,this.menuAction=new t.EventEmitter,this.menuClose=new t.EventEmitter,this.visible=!1,this.level=1,setTimeout((function(){return n.level=n.contextMenuService.getCurrentLevel()}))}return e.prototype.handleSubMenuClick=function(e){e.preventDefault(),e.stopPropagation(),clearTimeout(this.opentimer),clearTimeout(this.closetimer),this.menu=this.contextMenuService.show(e,this.contextSubmenuTrigger,this.menuContext,this.menuClose,this.menuAction,!0,this.level),this.visible=!0},e.prototype.handleSubMenuEnter=function(e){var t=this;this.menu&&this.menu.isTriggerHovered.next(!0),clearTimeout(this.closetimer),this.opentimer=setTimeout((function(){t.menu=t.contextMenuService.show(e,t.contextSubmenuTrigger,t.menuContext,t.menuClose,t.menuAction,!0,t.level),t.visible=!0,t.opentimer=null}),this.openDelay)},e.prototype.handleSubMenuExit=function(){var e=this;clearTimeout(this.opentimer),this.menu&&this.menu.isTriggerHovered.next(!1),this.closetimer=setTimeout((function(){e.menu&&(e.menu.isTriggerHovered.next(!1),e.contextMenuService.closeSubMenu(e.menu.id),e.menu=void 0),e.visible=!1}),this.hoverDelay)},e.prototype.ngOnDestroy=function(){clearTimeout(this.opentimer),clearTimeout(this.closetimer)},e}();p.decorators=[{type:t.Directive,args:[{selector:"[contextSubmenuTrigger]"}]}],p.ctorParameters=function(){return[{type:c}]},p.propDecorators={hoverDelay:[{type:t.Input}],openDelay:[{type:t.Input}],contextSubmenuTrigger:[{type:t.Input}],menuContext:[{type:t.Input}],menuAction:[{type:t.Output}],menuClose:[{type:t.Output}],handleSubMenuClick:[{type:t.HostListener,args:["click",["$event"]]}],handleSubMenuEnter:[{type:t.HostListener,args:["mouseover",["$event"]]}],handleSubMenuExit:[{type:t.HostListener,args:["mouseout"]}]};var h=function(){function e(e,t){this.menuPackage=e,this.contextMenuService=t,this._state="enter",this._animationDone=new i.Subject,this.lazy=!0}return e.prototype.handleMouseover=function(){this.menuPackage.menu.submenu&&(this.menuPackage.menu.isMenuHovered.next(!0),clearTimeout(this.closetimer))},e.prototype.handleMouseleave=function(){var e=this;this.menuPackage.menu.submenu&&(this.menuPackage.menu.isMenuHovered.next(!1),this.closetimer=setTimeout((function(){e.contextMenuService.closeSubMenu(e.menuPackage.menu.id)}),500))},e.prototype.handleWindowClick=function(e){this.contextMenuService.checkOutsideClick(e)},e.prototype._onAnimationDone=function(e){this._animationDone.next(e)},e}();h.decorators=[{type:t.Component,args:[{selector:"app-menu",template:""}]}],h.ctorParameters=function(){return[{type:u},{type:c}]},h.propDecorators={handleMouseover:[{type:t.HostListener,args:["mouseover"]}],handleMouseleave:[{type:t.HostListener,args:["mouseleave"]}],handleWindowClick:[{type:t.HostListener,args:["document:click",["$event"]]}],_onAnimationDone:[{type:t.HostListener,args:["@menu.done",["$event"]]}]};var m=function(){};m.decorators=[{type:t.NgModule,args:[{declarations:[l,p,h],exports:[l,p],imports:[o.PortalModule,n.OverlayModule]}]}],e.ContextMenuModule=m,e.ContextMenuService=c,e.ContextMenuTriggerDirective=l,e.ContextSubmenuTriggerDirective=p,e.MenuComponent=h,e.MenuInjector=a,e.MenuPackage=u,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=ctrl-ngx-rightclick.umd.min.js.map