Skip to content

Commit ce67406

Browse files
authored
fix(material-experimental/mdc-slider): remove pointerdown passive eve… (#24766)
* fix(material-experimental/mdc-slider): remove pointerdown passive event listener options * setting {passive: true} causes the slider foundation to error when it calls event.preventDefault * fixup! fix(material-experimental/mdc-slider): remove pointerdown passive event listener options * fixup! fix(material-experimental/mdc-slider): remove pointerdown passive event listener options * fixup! fix(material-experimental/mdc-slider): remove pointerdown passive event listener options
1 parent d3428ba commit ce67406

File tree

3 files changed

+37
-14
lines changed

3 files changed

+37
-14
lines changed

src/e2e-app/mdc-slider/mdc-slider-e2e.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {Component} from '@angular/core';
1111
@Component({
1212
selector: 'mdc-slider-e2e',
1313
template: `
14-
<mat-slider id="standard-slider">
14+
<mat-slider id="standard-slider" discrete>
1515
<input aria-label="Standard slider" matSliderThumb>
1616
</mat-slider>
1717

src/material-experimental/mdc-slider/slider.e2e.spec.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
import {clickElementAtPoint, getElement, Point} from '../../cdk/testing/private/e2e';
1010
import {Thumb} from '@material/slider';
11-
import {browser, by, element, ElementFinder} from 'protractor';
11+
import {$, browser, by, element, ElementFinder} from 'protractor';
12+
import {logging} from 'selenium-webdriver';
1213

1314
describe('MDC-based MatSlider', () => {
1415
const getStandardSlider = () => element(by.id('standard-slider'));
@@ -32,6 +33,29 @@ describe('MDC-based MatSlider', () => {
3233
await slideToValue(slider, 35, Thumb.END);
3334
expect(await getSliderValue(slider, Thumb.END)).toBe(35);
3435
});
36+
37+
it('should display the value indicator when focused', async () => {
38+
await focusSliderThumb(slider, Thumb.END);
39+
const rect: DOMRect = await browser.executeScript(
40+
'return arguments[0].getBoundingClientRect();',
41+
$('.mdc-slider__value-indicator'),
42+
);
43+
44+
expect(rect.width).not.toBe(0);
45+
expect(rect.height).not.toBe(0);
46+
47+
await browser.actions().mouseUp().perform();
48+
});
49+
50+
it('should not cause passive event listener errors when changing the value', async () => {
51+
// retrieving the logs clears the collection
52+
await browser.manage().logs().get('browser');
53+
await setValueByClick(slider, 15);
54+
55+
expect(await browser.manage().logs().get('browser')).not.toContain(
56+
jasmine.objectContaining({level: logging.Level.SEVERE}),
57+
);
58+
});
3559
});
3660

3761
describe('disabled slider', async () => {
@@ -96,6 +120,13 @@ async function getSliderValue(slider: ElementFinder, thumbPosition: Thumb): Prom
96120
: Number(await inputs[0].getAttribute('value'));
97121
}
98122

123+
/** Focuses on the MatSlider at the coordinates corresponding to the given thumb. */
124+
async function focusSliderThumb(slider: ElementFinder, thumbPosition: Thumb): Promise<void> {
125+
const webElement = await getElement(slider).getWebElement();
126+
const coords = await getCoordsForValue(slider, await getSliderValue(slider, thumbPosition));
127+
return await browser.actions().mouseMove(webElement, coords).mouseDown().perform();
128+
}
129+
99130
/** Clicks on the MatSlider at the coordinates corresponding to the given value. */
100131
async function setValueByClick(slider: ElementFinder, value: number): Promise<void> {
101132
return clickElementAtPoint(slider, await getCoordsForValue(slider, value));

src/material-experimental/mdc-slider/slider.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -781,11 +781,7 @@ export class MatSlider
781781
// would prefer to use "mousedown" as the default, for some reason it does not work (the
782782
// callback is never triggered).
783783
if (this._SUPPORTS_POINTER_EVENTS) {
784-
this._elementRef.nativeElement.addEventListener(
785-
'pointerdown',
786-
this._layout,
787-
passiveEventListenerOptions,
788-
);
784+
this._elementRef.nativeElement.addEventListener('pointerdown', this._layout);
789785
} else {
790786
this._elementRef.nativeElement.addEventListener('mouseenter', this._layout);
791787
this._elementRef.nativeElement.addEventListener(
@@ -799,11 +795,7 @@ export class MatSlider
799795
/** Removes the event listener that keeps sync the slider UI and the foundation in sync. */
800796
_removeUISyncEventListener(): void {
801797
if (this._SUPPORTS_POINTER_EVENTS) {
802-
this._elementRef.nativeElement.removeEventListener(
803-
'pointerdown',
804-
this._layout,
805-
passiveEventListenerOptions,
806-
);
798+
this._elementRef.nativeElement.removeEventListener('pointerdown', this._layout);
807799
} else {
808800
this._elementRef.nativeElement.removeEventListener('mouseenter', this._layout);
809801
this._elementRef.nativeElement.removeEventListener(
@@ -1134,10 +1126,10 @@ class SliderAdapter implements MDCSliderAdapter {
11341126
getThumbKnobWidth = (thumbPosition: Thumb): number => {
11351127
return this._delegate._getKnobElement(thumbPosition).getBoundingClientRect().width;
11361128
};
1137-
getThumbBoundingClientRect = (thumbPosition: Thumb): ClientRect => {
1129+
getThumbBoundingClientRect = (thumbPosition: Thumb): DOMRect => {
11381130
return this._delegate._getThumbElement(thumbPosition).getBoundingClientRect();
11391131
};
1140-
getBoundingClientRect = (): ClientRect => {
1132+
getBoundingClientRect = (): DOMRect => {
11411133
return this._delegate._elementRef.nativeElement.getBoundingClientRect();
11421134
};
11431135
getValueIndicatorContainerWidth = (thumbPosition: Thumb): number => {

0 commit comments

Comments
 (0)