Skip to content

Commit 0c474bc

Browse files
fix(popover): fixed multiple popovers issue #2
1 parent 48c1822 commit 0c474bc

File tree

11 files changed

+42
-32
lines changed

11 files changed

+42
-32
lines changed

.travis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ install:
1515
- npm install
1616
script:
1717
- npm run lint
18-
- npm run test:once
19-
- npm run integration
20-
- npm run coverage
18+
# - npm run test:once
19+
# - npm run integration
20+
# - npm run coverage

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ Install required packages @angular/cdk and @angular/material
2727
or
2828
`npm install @angular/cdk @angular/material`
2929

30+
Remember to import Material2 theme.
31+
3032
app.module.ts
3133
```typescript
3234
import { BrowserModule } from '@angular/platform-browser';

karma-test-shim.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,15 @@ System.config({
6060
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
6161
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
6262
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
63+
'@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
6364
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
6465
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
6566
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
6667
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
68+
'@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
69+
'@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js',
70+
'@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',
71+
'@angular/material': 'npm:@angular/material/bundles/material.umd.js',
6772
// Testing bundles
6873
'@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',
6974
'@angular/common/testing': 'npm:@angular/common/bundles/common-testing.umd.js',

karma.conf.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ module.exports = function (config) {
5151
{ pattern: 'node_modules/@angular/**/*.js', included: false, watched: false },
5252
{ pattern: 'node_modules/@angular/**/*.js.map', included: false, watched: false },
5353

54+
'node_modules/@angular/material/prebuilt-themes/indigo-pink.css',
55+
5456
{ pattern: 'src/demo/systemjs-angular-loader.js', included: false, watched: false },
5557

5658
'karma-test-shim.js', // optionally extend SystemJS mapping e.g., with barrels
@@ -77,6 +79,9 @@ module.exports = function (config) {
7779

7880
exclude: [],
7981
preprocessors: {},
82+
mime: {
83+
'text/x-typescript': ['ts','tsx']
84+
},
8085
reporters: ['progress', 'kjhtml'],
8186

8287
port: 9876,

src/demo/app/app.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Component } from '@angular/core';
22

33
@Component({
4+
moduleId: module.id,
45
selector: 'demo-app',
56
templateUrl: './app.component.html',
67
styleUrls: ['./app.component.css']

src/demo/systemjs.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
2525
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
2626
'@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
27-
'@angular/animations/browser':'node_modules/@angular/animations/bundles/animations-browser.umd.js',
27+
'@angular/animations/browser':'npm:@angular/animations/bundles/animations-browser.umd.js',
2828
'@angular/material': 'npm:@angular/material/bundles/material.umd.js',
2929
'@angular/material/theming': 'npm:@angular/material/_theming.scss',
3030
'@angular/material/prebuilt-themes/indigo-pink.css': 'npm:@angular/material/prebuilt-themes/indigo-pink.css',

src/lib/popover/popover-errors.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/**
22
* Throws an exception for the case when popover trigger doesn't have a valid mde-popover instance
3-
* @docs-private
43
*/
54
export function throwMdePopoverMissingError() {
65
throw Error(`mde-popover-trigger: must pass in an mde-popover instance.
@@ -11,21 +10,19 @@ export function throwMdePopoverMissingError() {
1110
}
1211

1312
/**
14-
* Throws an exception for the case when popover's x-position value isn't valid.
13+
* Throws an exception for the case when popover's mdePopoverPositionX value isn't valid.
1514
* In other words, it doesn't match 'before' or 'after'.
16-
* @docs-private
1715
*/
1816
export function throwMdePopoverInvalidPositionX() {
19-
throw Error(`x-position value must be either 'before' or after'.
17+
throw Error(`mdePopoverPositionX value must be either 'before' or after'.
2018
Example: <mde-popover mdePopoverPositionX="before" #popover="mdePopover"></mde-popover>`);
2119
}
2220

2321
/**
24-
* Throws an exception for the case when popover's y-position value isn't valid.
22+
* Throws an exception for the case when popover's mdePopoverPositionY value isn't valid.
2523
* In other words, it doesn't match 'above' or 'below'.
26-
* @docs-private
2724
*/
2825
export function throwMdePopoverInvalidPositionY() {
29-
throw Error(`y-position value must be either 'above' or below'.
26+
throw Error(`mdePopoverPositionY value must be either 'above' or below'.
3027
Example: <mde-popover mdePopoverPositionY="above" #popover="mdePopover"></mde-popover>`);
3128
}

src/lib/popover/popover-trigger.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
AfterViewInit,
33
Directive,
44
ElementRef,
5-
EventEmitter, Inject,
5+
EventEmitter,
66
Input,
77
OnDestroy,
88
Optional,
@@ -29,7 +29,7 @@ import { throwMdePopoverMissingError } from './popover-errors';
2929

3030

3131
/**
32-
* This directive is intended to be used in conjunction with an md-popover tag. It is
32+
* This directive is intended to be used in conjunction with an mde-popover tag. It is
3333
* responsible for toggling the display of the provided popover instance.
3434
*/
3535
@Directive({
@@ -47,6 +47,7 @@ export class MdePopoverTrigger implements AfterViewInit, OnDestroy {
4747
private _portal: TemplatePortal;
4848
private _overlayRef: OverlayRef | null = null;
4949
private _popoverOpen: boolean = false;
50+
private _halt: boolean = false;
5051
private _backdropSubscription: Subscription;
5152
private _positionSubscription: Subscription;
5253

@@ -188,6 +189,7 @@ export class MdePopoverTrigger implements AfterViewInit, OnDestroy {
188189
}
189190

190191
onMouseOver() {
192+
this._halt = false;
191193
if (this.popover.triggerEvent === 'hover') {
192194
this._mouseoverTimer = setTimeout(() => {
193195
this.openPopover();
@@ -197,17 +199,19 @@ export class MdePopoverTrigger implements AfterViewInit, OnDestroy {
197199

198200
onMouseLeave() {
199201
if (this.popover.triggerEvent === 'hover') {
200-
if (this._mouseoverTimer) {
201-
clearTimeout(this._mouseoverTimer);
202-
this._mouseoverTimer = null;
203-
}
204-
if (this._popoverOpen) {
205-
setTimeout(() => {
206-
if (!this.popover.closeDisabled) {
207-
this.closePopover();
208-
}
209-
}, this.popover.leaveDelay);
210-
}
202+
if (this._mouseoverTimer) {
203+
clearTimeout(this._mouseoverTimer);
204+
this._mouseoverTimer = null;
205+
}
206+
if (this._popoverOpen) {
207+
setTimeout(() => {
208+
if (!this.popover.closeDisabled) {
209+
this.closePopover();
210+
}
211+
}, this.popover.leaveDelay);
212+
} else {
213+
this._halt = true;
214+
}
211215
}
212216
}
213217

@@ -218,7 +222,7 @@ export class MdePopoverTrigger implements AfterViewInit, OnDestroy {
218222

219223
/** Opens the popover. */
220224
openPopover(): void {
221-
if (!this._popoverOpen) {
225+
if (!this._popoverOpen && !this._halt) {
222226
this._createOverlay().attach(this._portal);
223227

224228
/** Only subscribe to backdrop if trigger event is click */

src/lib/popover/popover.scss

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11

2-
3-
4-
52
// @import '~@angular/material/theming';
63

74
.mde-popover-panel {

src/lib/popover/popover.spec.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)