diff --git a/package.json b/package.json index e6d6c17e..bf5ec612 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "ember-cli-babel": "^7.26.3", "ember-cli-htmlbars": "^5.7.1", "ember-concurrency": "^2.1.0", - "ember-gesture-modifiers": "^0.2.0", + "ember-gesture-modifiers": "^1.1.1", "ember-maybe-import-regenerator": "^0.1.6", "ember-on-resize-modifier": "^0.3.0", "ember-set-body-class": "^1.0.1", diff --git a/tests/helpers/create-touch-event.js b/tests/helpers/create-touch-event.js deleted file mode 100644 index 29edaad9..00000000 --- a/tests/helpers/create-touch-event.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Generates a TouchEvent for testing purposes - * - * @param {Element} target - * @param {string} eventType touchstart, touchmove or touchend - * @param {number} x - * @param {number} y - * @param {number} identifier - * @returns {TouchEvent} - */ -export default function createTouchEvent( - target, - eventType, - x, - y, - identifier = 0 -) { - let touch = new Touch({ - identifier: identifier || 0, - target, - clientX: x, - clientY: y, - }); - - // we mock it using an object because we can't otherwise set the timeStamp - return new TouchEvent(eventType, { - bubbles: true, - type: eventType, - touches: [touch], - changedTouches: [touch], - }); -} diff --git a/tests/helpers/pan.js b/tests/helpers/pan.js deleted file mode 100644 index 431081a2..00000000 --- a/tests/helpers/pan.js +++ /dev/null @@ -1,101 +0,0 @@ -import { settled, getRootElement } from '@ember/test-helpers'; -import createTouchEvent from './create-touch-event'; -import { timeout } from 'ember-concurrency'; - -let panPoint; - -function nextTickPromise() { - return new Promise((resolve) => { - setTimeout(resolve); - }); -} - -function getElement(target) { - if ( - target.nodeType === Node.ELEMENT_NODE || - target.nodeType === Node.DOCUMENT_NODE || - target instanceof Window - ) { - return target; - } else if (typeof target === 'string') { - let rootElement = getRootElement(); - - return rootElement.querySelector(target); - } else { - throw new Error('Must use an element or a selector string'); - } -} - -function sendEvent(element, type, x, y) { - if (!panPoint) { - const elem = document.createElement('div'); - elem.id = 'pan-point'; - document.body.appendChild(elem); - - panPoint = elem; - } - - panPoint.style = ` - background: blue; - width: 20px; - height: 20px; - border-radius: 10px; - position: fixed; - top: ${y - 15}px; - left: ${x - 15}px; - z-index:9999; - `; - - const event = createTouchEvent(element, type, x, y); - element.dispatchEvent(event); -} - -// currently only horizontal -async function _pan(element, options = {}) { - const { top, left, width, height } = element.getBoundingClientRect(); - - const right = left + width; - const isLeft = options.direction === 'left'; - - const { - startX = isLeft ? right - 1 : left + 1, - endX = isLeft ? left + 1 : right - 1, - duration = 300, - resolution = 17, // ms per step - } = options; - - const steps = Math.ceil(duration / resolution); - const middleY = top + height / 2; - - sendEvent(element, 'touchstart', startX, middleY); - for (let i = 1; i < steps; i++) { - await timeout(resolution); - const x = isLeft - ? startX - ((startX - endX) / steps) * i - : startX + ((endX - startX) / steps) * i; - sendEvent(element, 'touchmove', x, middleY); - } - sendEvent(element, 'touchend', endX, middleY); - - if (panPoint) { - panPoint.remove(); - panPoint = null; - } -} - -export default async function pan(target, direction) { - await nextTickPromise(); - - if (!target) { - throw new Error('Must pass an element or selector to `pan`.'); - } - - let element = getElement(target); - if (!element) { - throw new Error(`Element not found when calling \`pan('${target}')\`.`); - } - - await _pan(element, { direction }); - - return settled(); -} diff --git a/tests/integration/components/mobile-menu-wrapper-test.js b/tests/integration/components/mobile-menu-wrapper-test.js index 04371e1b..72e80528 100644 --- a/tests/integration/components/mobile-menu-wrapper-test.js +++ b/tests/integration/components/mobile-menu-wrapper-test.js @@ -2,7 +2,7 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render, click, waitFor, settled } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -import pan from '../../helpers/pan'; +import { pan } from 'ember-gesture-modifiers/test-support'; module('Integration | Component | mobile-menu-wrapper', function (hooks) { setupRenderingTest(hooks); @@ -303,7 +303,10 @@ module('Integration | Component | mobile-menu-wrapper', function (hooks) { assert.dom('.mobile-menu').hasClass('mobile-menu--left'); assert.dom('.mobile-menu').doesNotHaveClass('mobile-menu--open'); - await pan('.mobile-menu-wrapper__content', 'right'); + await pan( + '.mobile-menu-wrapper--embedded .mobile-menu-wrapper__content', + 'right' + ); await settled(); assert.dom('.mobile-menu').hasClass('mobile-menu--left'); diff --git a/yarn.lock b/yarn.lock index dafe7577..bb2a4289 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6245,13 +6245,13 @@ ember-fetch@^8.0.2: node-fetch "^2.6.1" whatwg-fetch "^3.6.2" -ember-gesture-modifiers@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ember-gesture-modifiers/-/ember-gesture-modifiers-0.2.0.tgz#81ad846a1dba870c60b831a0ab6c6ac5913bbd5c" - integrity sha512-8K54Xs4Mpege//0zXS2NDiAvtdXPFZVibFyUdgzQYZ/3ELDur5Sf93TFVd3pYHUcU2iYTFzmMK/xkQb4ZMU/QA== +ember-gesture-modifiers@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ember-gesture-modifiers/-/ember-gesture-modifiers-1.1.1.tgz#7714688f7ceaaf1a7e4992b3cc01e38428b82528" + integrity sha512-Kd7SFNaWGBNNbAZSeBQGVjMuHdP8RtLDAdGzcmTpOtIaK1EyYL3PrsDJAjaKVOycCwjQEYCYnty+ptdz+nv4bQ== dependencies: - ember-cli-babel "^7.21.0" - ember-cli-htmlbars "^5.2.0" + ember-cli-babel "^7.26.3" + ember-cli-htmlbars "^5.7.1" ember-modifier "^2.1.0" ember-get-config@^0.2.4: