@@ -13,6 +13,7 @@ import {
13
13
animate ,
14
14
AnimationTransitionEvent ,
15
15
NgZone ,
16
+ Optional ,
16
17
} from '@angular/core' ;
17
18
import {
18
19
Overlay ,
@@ -27,9 +28,9 @@ import {
27
28
} from '../core' ;
28
29
import { Observable } from 'rxjs/Observable' ;
29
30
import { Subject } from 'rxjs/Subject' ;
31
+ import { Dir } from '../core/rtl/dir' ;
30
32
31
-
32
- export type TooltipPosition = 'before' | 'after' | 'above' | 'below' ;
33
+ export type TooltipPosition = 'left' | 'right' | 'above' | 'below' | 'before' | 'after' ;
33
34
34
35
/** Time in ms to delay before changing the tooltip visibility to hidden */
35
36
export const TOUCHEND_HIDE_DELAY = 1500 ;
@@ -85,7 +86,8 @@ export class MdTooltip {
85
86
}
86
87
87
88
constructor ( private _overlay : Overlay , private _elementRef : ElementRef ,
88
- private _viewContainerRef : ViewContainerRef , private _ngZone : NgZone ) { }
89
+ private _viewContainerRef : ViewContainerRef , private _ngZone : NgZone ,
90
+ @Optional ( ) private _dir : Dir ) { }
89
91
90
92
/** Dispose the tooltip when destroyed */
91
93
ngOnDestroy ( ) {
@@ -155,22 +157,46 @@ export class MdTooltip {
155
157
}
156
158
157
159
/** Returns the origin position based on the user's position preference */
158
- private _getOrigin ( ) : OriginConnectionPosition {
159
- switch ( this . position ) {
160
- case 'before' : return { originX : 'start' , originY : 'center' } ;
161
- case 'after' : return { originX : 'end' , originY : 'center' } ;
162
- case 'above' : return { originX : 'center' , originY : 'top' } ;
163
- case 'below' : return { originX : 'center' , originY : 'bottom' } ;
160
+ _getOrigin ( ) : OriginConnectionPosition {
161
+ if ( this . position == 'above' || this . position == 'below' ) {
162
+ return { originX : 'center' , originY : this . position == 'above' ? 'top' : 'bottom' } ;
163
+ }
164
+
165
+ const isDirectionLtr = ! this . _dir || this . _dir . value == 'ltr' ;
166
+ if ( this . position == 'left' ||
167
+ this . position == 'before' && isDirectionLtr ||
168
+ this . position == 'after' && ! isDirectionLtr ) {
169
+ return { originX : 'start' , originY : 'center' } ;
170
+ }
171
+
172
+ if ( this . position == 'right' ||
173
+ this . position == 'after' && isDirectionLtr ||
174
+ this . position == 'before' && ! isDirectionLtr ) {
175
+ return { originX : 'end' , originY : 'center' } ;
164
176
}
165
177
}
166
178
167
179
/** Returns the overlay position based on the user's preference */
168
- private _getOverlayPosition ( ) : OverlayConnectionPosition {
169
- switch ( this . position ) {
170
- case 'before' : return { overlayX : 'end' , overlayY : 'center' } ;
171
- case 'after' : return { overlayX : 'start' , overlayY : 'center' } ;
172
- case 'above' : return { overlayX : 'center' , overlayY : 'bottom' } ;
173
- case 'below' : return { overlayX : 'center' , overlayY : 'top' } ;
180
+ _getOverlayPosition ( ) : OverlayConnectionPosition {
181
+ if ( this . position == 'above' ) {
182
+ return { overlayX : 'center' , overlayY : 'bottom' } ;
183
+ }
184
+
185
+ if ( this . position == 'below' ) {
186
+ return { overlayX : 'center' , overlayY : 'top' } ;
187
+ }
188
+
189
+ const isLtr = ! this . _dir || this . _dir . value == 'ltr' ;
190
+ if ( this . position == 'left' ||
191
+ this . position == 'before' && isLtr ||
192
+ this . position == 'after' && ! isLtr ) {
193
+ return { overlayX : 'end' , overlayY : 'center' } ;
194
+ }
195
+
196
+ if ( this . position == 'right' ||
197
+ this . position == 'after' && isLtr ||
198
+ this . position == 'before' && ! isLtr ) {
199
+ return { overlayX : 'start' , overlayY : 'center' } ;
174
200
}
175
201
}
176
202
@@ -226,6 +252,8 @@ export class TooltipComponent {
226
252
/** Subject for notifying that the tooltip has been hidden from the view */
227
253
private _onHide : Subject < any > = new Subject ( ) ;
228
254
255
+ constructor ( @Optional ( ) private _dir : Dir ) { }
256
+
229
257
/** Shows the tooltip with an animation originating from the provided origin */
230
258
show ( position : TooltipPosition ) : void {
231
259
this . _closeOnInteraction = false ;
@@ -262,11 +290,14 @@ export class TooltipComponent {
262
290
263
291
/** Sets the tooltip transform origin according to the tooltip position */
264
292
_setTransformOrigin ( value : TooltipPosition ) {
293
+ const isLtr = ! this . _dir || this . _dir . value == 'ltr' ;
265
294
switch ( value ) {
266
- case 'before' : this . _transformOrigin = 'right' ; break ;
267
- case 'after' : this . _transformOrigin = 'left' ; break ;
268
- case 'above' : this . _transformOrigin = 'bottom' ; break ;
269
- case 'below' : this . _transformOrigin = 'top' ; break ;
295
+ case 'before' : this . _transformOrigin = isLtr ? 'right' : 'left' ; break ;
296
+ case 'after' : this . _transformOrigin = isLtr ? 'left' : 'right' ; break ;
297
+ case 'left' : this . _transformOrigin = 'right' ; break ;
298
+ case 'right' : this . _transformOrigin = 'left' ; break ;
299
+ case 'above' : this . _transformOrigin = 'bottom' ; break ;
300
+ case 'below' : this . _transformOrigin = 'top' ; break ;
270
301
}
271
302
}
272
303
0 commit comments