Skip to content

Commit 5419d13

Browse files
committed
Fix tslint and mobile safari and firefox
1 parent a2869df commit 5419d13

File tree

4 files changed

+61
-45
lines changed

4 files changed

+61
-45
lines changed

src/lib/core/overlay/position/viewport-ruler.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,8 @@ export class ViewportRuler {
5050
// `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of
5151
// `document.documentElement` works consistently, where the `top` and `left` values will
5252
// equal negative the scroll position.
53-
const top = documentRect.top < 0 && document.body.scrollTop == 0 ?
54-
-documentRect.top :
55-
document.body.scrollTop;
56-
const left = documentRect.left < 0 && document.body.scrollLeft == 0 ?
57-
-documentRect.left :
58-
document.body.scrollLeft;
53+
const top = -documentRect.top || document.body.scrollTop || window.scrollY || 0;
54+
const left = -documentRect.left || document.body.scrollLeft || window.scrollX || 0;
5955

6056
return {top, left};
6157
}

src/lib/core/ripple/ripple.spec.ts

Lines changed: 57 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -181,47 +181,67 @@ describe('MdRipple', () => {
181181
expect(pxStringToFloat(ripple.style.height)).toBeCloseTo(2 * expectedRadius, 1);
182182
});
183183

184-
it('create ripple with correct position when page is scrolled', () => {
185-
let elementTop = 600;
186-
let elementLeft = 750;
187-
let pageScrollTop = 500;
188-
let pageScrollLeft = 500;
189-
let left = 50;
190-
let top = 75;
191-
192-
// Add a very large element to make the page scroll
193-
let veryLargeElement = document.createElement('div');
194-
veryLargeElement.style.width = '4000px';
195-
veryLargeElement.style.height = '4000px';
196-
document.body.appendChild(veryLargeElement);
197-
document.body.scrollTop = pageScrollTop;
198-
document.body.scrollLeft = pageScrollLeft;
199-
200-
rippleElement.style.position = 'absolute';
201-
rippleElement.style.left = `${elementLeft}px`;
202-
rippleElement.style.top = `${elementTop}px`;
203-
204-
// Simulate a keyboard-triggered click by setting event coordinates to 0.
205-
const clickEvent = createMouseEvent('click', {
206-
clientX: left + elementLeft - pageScrollLeft,
207-
clientY: top + elementTop - pageScrollTop,
208-
screenX: left + elementLeft,
209-
screenY: top + elementTop
184+
describe('when page is scrolled', () => {
185+
var veryLargeElement: HTMLDivElement = document.createElement('div');
186+
var pageScrollTop = 500;
187+
var pageScrollLeft = 500;
188+
189+
beforeEach(() => {
190+
// Add a very large element to make the page scroll
191+
veryLargeElement.style.width = '4000px';
192+
veryLargeElement.style.height = '4000px';
193+
document.body.appendChild(veryLargeElement);
194+
document.body.scrollTop = pageScrollTop;
195+
document.body.scrollLeft = pageScrollLeft;
196+
// Firefox
197+
document.documentElement.scrollLeft = pageScrollLeft;
198+
document.documentElement.scrollTop = pageScrollTop;
199+
// Mobile safari
200+
window.scrollTo(pageScrollLeft, pageScrollTop);
210201
});
211-
rippleElement.dispatchEvent(clickEvent);
212202

213-
const expectedRadius = Math.sqrt(250 * 250 + 125 * 125);
214-
const expectedLeft = left - expectedRadius;
215-
const expectedTop = top - expectedRadius;
216-
217-
const ripple = <HTMLElement>rippleElement.querySelector('.md-ripple-foreground');
218-
expect(pxStringToFloat(ripple.style.left)).toBeCloseTo(expectedLeft, 1);
219-
expect(pxStringToFloat(ripple.style.top)).toBeCloseTo(expectedTop, 1);
220-
expect(pxStringToFloat(ripple.style.width)).toBeCloseTo(2 * expectedRadius, 1);
221-
expect(pxStringToFloat(ripple.style.height)).toBeCloseTo(2 * expectedRadius, 1);
203+
afterEach(() => {
204+
document.body.removeChild(veryLargeElement);
205+
document.body.scrollTop = 0;
206+
document.body.scrollLeft = 0;
207+
// Firefox
208+
document.documentElement.scrollLeft = 0;
209+
document.documentElement.scrollTop = 0;
210+
// Mobile safari
211+
window.scrollTo(0, 0);
212+
});
222213

223-
document.body.removeChild(veryLargeElement);
214+
it('create ripple with correct position', () => {
215+
let elementTop = 600;
216+
let elementLeft = 750;
217+
let left = 50;
218+
let top = 75;
219+
220+
rippleElement.style.position = 'absolute';
221+
rippleElement.style.left = `${elementLeft}px`;
222+
rippleElement.style.top = `${elementTop}px`;
223+
224+
// Simulate a keyboard-triggered click by setting event coordinates to 0.
225+
const clickEvent = createMouseEvent('click', {
226+
clientX: left + elementLeft - pageScrollLeft,
227+
clientY: top + elementTop - pageScrollTop,
228+
screenX: left + elementLeft,
229+
screenY: top + elementTop
230+
});
231+
rippleElement.dispatchEvent(clickEvent);
232+
233+
const expectedRadius = Math.sqrt(250 * 250 + 125 * 125);
234+
const expectedLeft = left - expectedRadius;
235+
const expectedTop = top - expectedRadius;
236+
237+
const ripple = <HTMLElement>rippleElement.querySelector('.md-ripple-foreground');
238+
expect(pxStringToFloat(ripple.style.left)).toBeCloseTo(expectedLeft, 1);
239+
expect(pxStringToFloat(ripple.style.top)).toBeCloseTo(expectedTop, 1);
240+
expect(pxStringToFloat(ripple.style.width)).toBeCloseTo(2 * expectedRadius, 1);
241+
expect(pxStringToFloat(ripple.style.height)).toBeCloseTo(2 * expectedRadius, 1);
242+
});
224243
});
244+
225245
});
226246

227247
describe('configuring behavior', () => {

src/lib/core/ripple/ripple.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
ForegroundRipple,
1616
ForegroundRippleState,
1717
} from './ripple-renderer';
18-
import {ViewportRuler} from "../overlay/position/viewport-ruler";
18+
import {ViewportRuler} from '../overlay/position/viewport-ruler';
1919

2020

2121
@Directive({

src/lib/tabs/tab-nav-bar/tab-nav-bar.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {Component, Input, ViewChild, ElementRef, ViewEncapsulation, Directive} from '@angular/core';
22
import {MdInkBar} from '../ink-bar';
33
import {MdRipple} from '../../core/ripple/ripple';
4-
import {ViewportRuler} from "../../core/overlay/position/viewport-ruler";
4+
import {ViewportRuler} from '../../core/overlay/position/viewport-ruler';
55

66
/**
77
* Navigation component matching the styles of the tab group header.

0 commit comments

Comments
 (0)