ember-test-recorder
Version:
An Ember addon for recording and generating acceptance test cases through UI interactions
60 lines (49 loc) • 1.55 kB
JavaScript
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
export default class TestRecorderButtonComponent extends Component {
position = { x: 0, y: 0 };
isDragging = false;
scale = 1;
dragStartPosition = { x: 0, y: 0 };
handleClick() {
if (!this.isDragging) {
this.args.onToggleSidebar();
}
}
startDragging(event) {
this.isDragging = true;
this.dragStartPosition = {
x: event.clientX - this.position.x,
y: event.clientY - this.position.y
};
window.addEventListener('mousemove', this.drag);
window.addEventListener('mouseup', this.stopDragging);
window.addEventListener('wheel', this.handleScale);
}
drag = (event) => {
if (this.isDragging) {
this.position = {
x: event.clientX - this.dragStartPosition.x,
y: event.clientY - this.dragStartPosition.y
};
}
};
stopDragging = () => {
this.isDragging = false;
window.removeEventListener('mousemove', this.drag);
window.removeEventListener('mouseup', this.stopDragging);
window.removeEventListener('wheel', this.handleScale);
};
handleScale = (event) => {
event.preventDefault();
const delta = event.deltaY * -0.01;
const newScale = Math.max(0.5, Math.min(2, this.scale + delta));
this.scale = newScale;
};
get transformStyle() {
return `translate3d(${this.position.x}px, ${this.position.y}px, 0) scale(${this.scale})`;
}
}