UNPKG

siesta-lite

Version:

Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers

124 lines (87 loc) 3.57 kB
/* Siesta 5.6.1 Copyright(c) 2009-2022 Bryntum AB https://bryntum.com/contact https://bryntum.com/products/siesta/license */ /** @class Siesta.Recorder.Role.CanRecordMouseMoveOnIdle A mixin, providing the feature of recording the "moveCursorTo" action, when mouse is idle at some point for {@link #idleTimeout} time. This feature can be enabled/disabled with the {@link recordMouseMoveOnIdle} config option. */ Role('Siesta.Recorder.Role.CanRecordMouseMoveOnIdle', { has : { /** * @cfg {Boolean} idleTimeout The amount of time for mouse cursor to be idle, after which the * `moveCursorTo` action will be recorded with the target of current cursor position. */ idleTimeout : 3000, /** * @cfg {Boolean} recordMouseMoveOnIdle Set this option to `true` to enable recording of `moveCursorTo` * action, when mouse is idle at some point for certain amount of time ({@link #idleTimeout}) */ recordMouseMoveOnIdle : true, idleMouseMoveThrottler : null }, override : { initialize : function () { if (this.recordMouseMoveOnIdle) this.recordMouseMove = true this.SUPERARG(arguments) if (this.recordMouseMoveOnIdle) { this.idleMouseMoveThrottler = new Siesta.Util.Throttler({ func : this.onBodyMouseMoveIdle, scope : this, buffer : this.idleTimeout }) this.resetMouseMoveListener = this.resetMouseMoveListener.bind(this); } }, onDomEvent : function (e) { this.SUPERARG(arguments) // this "reset" will ensure that "onBodyMouseMove" handler will be called after "idleTimeout" // after any other dom event this.resetMouseMoveListener(); }, clear : function () { if (this.recordMouseMoveOnIdle) { this.resetMouseMoveListener() } this.SUPERARG(arguments) }, onStart : function () { this.SUPERARG(arguments) var win = this.window var doc = win.document var body = doc.body if (this.recordMouseMoveOnIdle) { body.addEventListener('mouseleave', this.resetMouseMoveListener) } }, onStop : function () { this.SUPERARG(arguments) var win = this.window var doc = win.document var body = doc.body if (this.recordMouseMoveOnIdle) { body.removeEventListener('mouseleave', this.resetMouseMoveListener) this.resetMouseMoveListener() } }, processBodyMouseMove : function (e) { this.SUPERARG(arguments) if (this.recordMouseMoveOnIdle) { this.idleMouseMoveThrottler.tick(e) } } }, // eof `override` methods : { resetMouseMoveListener : function () { this.idleMouseMoveThrottler && this.idleMouseMoveThrottler.cancel() }, onBodyMouseMoveIdle : function (e) { this.addMoveCursorAction(e); } } });