Skip to content

Commit 03c0e89

Browse files
committed
Fix blur event and directionality bug
1 parent 81af644 commit 03c0e89

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

src/lib/slider/slider.spec.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
UP_ARROW,
1717
BACKSPACE
1818
} from '../core/keyboard/keycodes';
19-
import {dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
19+
import {dispatchFakeEvent, dispatchKeyboardEvent, dispatchMouseEvent} from '@angular/cdk/testing';
2020

2121
describe('MdSlider without forms', () => {
2222
let gestureConfig: TestGestureConfig;
@@ -141,15 +141,13 @@ describe('MdSlider without forms', () => {
141141
expect(sliderNativeElement.classList).not.toContain('mat-slider-sliding');
142142
});
143143

144-
it('should remove focus after the slider is updated', () => {
145-
spyOn(sliderNativeElement, 'blur');
144+
it('should reset active state upon blur', () => {
145+
sliderInstance._isActive = true;
146146

147-
expect(sliderNativeElement.blur).not.toHaveBeenCalled();
148-
149-
dispatchClickEventSequence(sliderNativeElement, 0.39);
147+
dispatchFakeEvent(sliderNativeElement, 'blur');
150148
fixture.detectChanges();
151149

152-
expect(sliderNativeElement.blur).toHaveBeenCalled();
150+
expect(sliderInstance._isActive).toBe(false);
153151
});
154152

155153
it('should have thumb gap when at min value', () => {
@@ -969,6 +967,24 @@ describe('MdSlider without forms', () => {
969967
expect(sliderInstance.value).toBe(30);
970968
});
971969

970+
it('should re-render slider with updated style upon directionality change', () => {
971+
testComponent.dir = 'rtl';
972+
fixture.detectChanges();
973+
974+
let initialTrackFillStyles = sliderInstance._trackFillStyles;
975+
let initialTicksContainerStyles = sliderInstance._ticksContainerStyles;
976+
let initialTicksStyles = sliderInstance._ticksStyles;
977+
let initialThumbContainerStyles = sliderInstance._thumbContainerStyles;
978+
979+
testComponent.dir = 'ltr';
980+
fixture.detectChanges();
981+
982+
expect(initialTrackFillStyles).not.toEqual(sliderInstance._trackFillStyles);
983+
expect(initialTicksContainerStyles).not.toEqual(sliderInstance._ticksContainerStyles);
984+
expect(initialTicksStyles).not.toEqual(sliderInstance._ticksStyles);
985+
expect(initialThumbContainerStyles).not.toEqual(sliderInstance._thumbContainerStyles);
986+
});
987+
972988
it('should increment inverted slider by 1 on right arrow pressed', () => {
973989
testComponent.invert = true;
974990
fixture.detectChanges();

src/lib/slider/slider.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,10 +413,20 @@ export class MdSlider extends _MdSliderMixinBase
413413
this._focusOriginMonitor
414414
.monitor(this._elementRef.nativeElement, renderer, true)
415415
.subscribe((origin: FocusOrigin) => this._isActive = !!origin && origin !== 'keyboard');
416+
if (_dir) {
417+
_dir.change.subscribe(() => this._changeDetectorRef.markForCheck());
418+
}
416419
}
417420

421+
// ngAfterContentInit() {
422+
// this.change.asObservable().subscribe(() => this._changeDetectorRef.markForCheck());
423+
// }
424+
418425
ngOnDestroy() {
419426
this._focusOriginMonitor.stopMonitoring(this._elementRef.nativeElement);
427+
if (this._dir) {
428+
this._dir.change.unsubscribe();
429+
}
420430
}
421431

422432
_onMouseenter() {
@@ -445,7 +455,6 @@ export class MdSlider extends _MdSliderMixinBase
445455
this._emitInputEvent();
446456
this._emitChangeEvent();
447457
}
448-
this._elementRef.nativeElement.blur();
449458
}
450459

451460
_onSlide(event: HammerInput) {
@@ -507,6 +516,8 @@ export class MdSlider extends _MdSliderMixinBase
507516

508517
_onBlur() {
509518
this.onTouched();
519+
this._isActive = false;
520+
this._changeDetectorRef.markForCheck();
510521
}
511522

512523
_onKeydown(event: KeyboardEvent) {

0 commit comments

Comments
 (0)