bs-dropdown-toggle.directive.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import { ChangeDetectorRef, Directive, ElementRef, HostBinding, HostListener, Renderer2 } from '@angular/core';
  6. import { BsDropdownState } from './bs-dropdown.state';
  7. import { BsDropdownDirective } from './bs-dropdown.directive';
  8. export class BsDropdownToggleDirective {
  9. /**
  10. * @param {?} _changeDetectorRef
  11. * @param {?} _dropdown
  12. * @param {?} _element
  13. * @param {?} _renderer
  14. * @param {?} _state
  15. */
  16. constructor(_changeDetectorRef, _dropdown, _element, _renderer, _state) {
  17. this._changeDetectorRef = _changeDetectorRef;
  18. this._dropdown = _dropdown;
  19. this._element = _element;
  20. this._renderer = _renderer;
  21. this._state = _state;
  22. this.isDisabled = null;
  23. this._subscriptions = [];
  24. // sync is open value with state
  25. this._subscriptions.push(this._state.isOpenChange.subscribe((/**
  26. * @param {?} value
  27. * @return {?}
  28. */
  29. (value) => {
  30. this.isOpen = value;
  31. if (value) {
  32. this._documentClickListener = this._renderer.listen('document', 'click', (/**
  33. * @param {?} event
  34. * @return {?}
  35. */
  36. (event) => {
  37. if (this._state.autoClose && event.button !== 2 &&
  38. !this._element.nativeElement.contains(event.target) &&
  39. !(this._state.insideClick && this._dropdown._contains(event))) {
  40. this._state.toggleClick.emit(false);
  41. this._changeDetectorRef.detectChanges();
  42. }
  43. }));
  44. this._escKeyUpListener = this._renderer.listen(this._element.nativeElement, 'keyup.esc', (/**
  45. * @return {?}
  46. */
  47. () => {
  48. if (this._state.autoClose) {
  49. this._state.toggleClick.emit(false);
  50. this._changeDetectorRef.detectChanges();
  51. }
  52. }));
  53. }
  54. else {
  55. this._documentClickListener();
  56. this._escKeyUpListener();
  57. }
  58. })));
  59. // populate disabled state
  60. this._subscriptions.push(this._state.isDisabledChange.subscribe((/**
  61. * @param {?} value
  62. * @return {?}
  63. */
  64. (value) => (this.isDisabled = value || null))));
  65. }
  66. /**
  67. * @return {?}
  68. */
  69. onClick() {
  70. if (this.isDisabled) {
  71. return;
  72. }
  73. this._state.toggleClick.emit(true);
  74. }
  75. /**
  76. * @return {?}
  77. */
  78. ngOnDestroy() {
  79. if (this._documentClickListener) {
  80. this._documentClickListener();
  81. }
  82. if (this._escKeyUpListener) {
  83. this._escKeyUpListener();
  84. }
  85. for (const sub of this._subscriptions) {
  86. sub.unsubscribe();
  87. }
  88. }
  89. }
  90. BsDropdownToggleDirective.decorators = [
  91. { type: Directive, args: [{
  92. selector: '[bsDropdownToggle],[dropdownToggle]',
  93. exportAs: 'bs-dropdown-toggle',
  94. host: {
  95. '[attr.aria-haspopup]': 'true'
  96. }
  97. },] }
  98. ];
  99. /** @nocollapse */
  100. BsDropdownToggleDirective.ctorParameters = () => [
  101. { type: ChangeDetectorRef },
  102. { type: BsDropdownDirective },
  103. { type: ElementRef },
  104. { type: Renderer2 },
  105. { type: BsDropdownState }
  106. ];
  107. BsDropdownToggleDirective.propDecorators = {
  108. isDisabled: [{ type: HostBinding, args: ['attr.disabled',] }],
  109. isOpen: [{ type: HostBinding, args: ['attr.aria-expanded',] }],
  110. onClick: [{ type: HostListener, args: ['click', [],] }]
  111. };
  112. if (false) {
  113. /** @type {?} */
  114. BsDropdownToggleDirective.prototype.isDisabled;
  115. /** @type {?} */
  116. BsDropdownToggleDirective.prototype.isOpen;
  117. /**
  118. * @type {?}
  119. * @private
  120. */
  121. BsDropdownToggleDirective.prototype._subscriptions;
  122. /**
  123. * @type {?}
  124. * @private
  125. */
  126. BsDropdownToggleDirective.prototype._documentClickListener;
  127. /**
  128. * @type {?}
  129. * @private
  130. */
  131. BsDropdownToggleDirective.prototype._escKeyUpListener;
  132. /**
  133. * @type {?}
  134. * @private
  135. */
  136. BsDropdownToggleDirective.prototype._changeDetectorRef;
  137. /**
  138. * @type {?}
  139. * @private
  140. */
  141. BsDropdownToggleDirective.prototype._dropdown;
  142. /**
  143. * @type {?}
  144. * @private
  145. */
  146. BsDropdownToggleDirective.prototype._element;
  147. /**
  148. * @type {?}
  149. * @private
  150. */
  151. BsDropdownToggleDirective.prototype._renderer;
  152. /**
  153. * @type {?}
  154. * @private
  155. */
  156. BsDropdownToggleDirective.prototype._state;
  157. }
  158. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtZHJvcGRvd24tdG9nZ2xlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1ib290c3RyYXAvZHJvcGRvd24vIiwic291cmNlcyI6WyJicy1kcm9wZG93bi10b2dnbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFFWixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUzlELE1BQU0sT0FBTyx5QkFBeUI7Ozs7Ozs7O0lBUXBDLFlBQ1Usa0JBQXFDLEVBQ3JDLFNBQThCLEVBQzlCLFFBQW9CLEVBQ3BCLFNBQW9CLEVBQ3BCLE1BQXVCO1FBSnZCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBWkgsZUFBVSxHQUFZLElBQUksQ0FBQztRQUdqRCxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFXMUMsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTOzs7O1FBQ2hDLENBQUMsS0FBYyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFFcEIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPOzs7O2dCQUFFLENBQUMsS0FB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ICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duU3RhdGUgfSBmcm9tICcuL2JzLWRyb3Bkb3duLnN0YXRlJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICcuL2JzLWRyb3Bkb3duLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tic0Ryb3Bkb3duVG9nZ2xlXSxbZHJvcGRvd25Ub2dnbGVdJyxcbiAgZXhwb3J0QXM6ICdicy1kcm9wZG93bi10b2dnbGUnLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmFyaWEtaGFzcG9wdXBdJzogJ3RydWUnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQnNEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpIGlzT3BlbjogYm9vbGVhbjtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9kb2N1bWVudENsaWNrTGlzdGVuZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIF9lc2NLZXlVcExpc3RlbmVyOiBGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgX3N0YXRlOiBCc0Ryb3Bkb3duU3RhdGVcbiAgKSB7XG4gICAgLy8gc3luYyBpcyBvcGVuIHZhbHVlIHdpdGggc3RhdGVcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLl9zdGF0ZS5pc09wZW5DaGFuZ2Uuc3Vic2NyaWJlKFxuICAgICAgICAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICB0aGlzLmlzT3BlbiA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudENsaWNrTGlzdGVuZXIgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlLmF1dG9DbG9zZSAmJiBldmVudC5idXR0b24gIT09IDIgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAhKHRoaXMuX3N0YXRlLmluc2lkZUNsaWNrICYmIHRoaXMuX2Ryb3Bkb3duLl9jb250YWlucyhldmVudCkpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlLnRvZ2dsZUNsaWNrLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2VzY0tleVVwTGlzdGVuZXIgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5dXAuZXNjJywgKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUuYXV0b0Nsb3NlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUudG9nZ2xlQ2xpY2suZW1pdChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLl9lc2NLZXlVcExpc3RlbmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIHBvcHVsYXRlIGRpc2FibGVkIHN0YXRlXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5fc3RhdGUuaXNEaXNhYmxlZENoYW5nZS5zdWJzY3JpYmUoXG4gICAgICAgICh2YWx1ZTogYm9vbGVhbikgPT4gKHRoaXMuaXNEaXNhYmxlZCA9IHZhbHVlIHx8IG51bGwpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgW10pXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZS50b2dnbGVDbGljay5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xuICAgICAgdGhpcy5fZG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VzY0tleVVwTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuX2VzY0tleVVwTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN1YiBvZiB0aGlzLl9zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==