mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Merge 1.5.4 changes back to master.
This commit is contained in:
@@ -44,6 +44,8 @@
|
|||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* global _ */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Directive which plays back session recordings. This directive emits the
|
* Directive which plays back session recordings. This directive emits the
|
||||||
* following events based on state changes within the current recording:
|
* following events based on state changes within the current recording:
|
||||||
@@ -81,6 +83,30 @@ angular.module('player').directive('guacPlayer', ['$injector', function guacPlay
|
|||||||
const keyEventDisplayService = $injector.get('keyEventDisplayService');
|
const keyEventDisplayService = $injector.get('keyEventDisplayService');
|
||||||
const playerTimeService = $injector.get('playerTimeService');
|
const playerTimeService = $injector.get('playerTimeService');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of milliseconds after the last detected mouse activity after
|
||||||
|
* which the associated CSS class should be removed.
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
const MOUSE_CLEANUP_DELAY = 4000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of milliseconds after the last detected mouse activity before
|
||||||
|
* the cleanup timer to remove the associated CSS class should be scheduled.
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
const MOUSE_DEBOUNCE_DELAY = 250;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of milliseconds, after the debounce delay, before the mouse
|
||||||
|
* activity cleanup timer should run.
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
const MOUSE_CLEANUP_TIMER_DELAY = MOUSE_CLEANUP_DELAY - MOUSE_DEBOUNCE_DELAY;
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
restrict : 'E',
|
restrict : 'E',
|
||||||
templateUrl : 'app/player/templates/player.html'
|
templateUrl : 'app/player/templates/player.html'
|
||||||
@@ -97,8 +123,8 @@ angular.module('player').directive('guacPlayer', ['$injector', function guacPlay
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config.controller = ['$scope', '$element', '$injector',
|
config.controller = ['$scope', '$element', '$window',
|
||||||
function guacPlayerController($scope) {
|
function guacPlayerController($scope, $element, $window) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Guacamole.SessionRecording instance to be used to playback the
|
* Guacamole.SessionRecording instance to be used to playback the
|
||||||
@@ -179,6 +205,14 @@ angular.module('player').directive('guacPlayer', ['$injector', function guacPlay
|
|||||||
*/
|
*/
|
||||||
var resumeAfterSeekRequest = false;
|
var resumeAfterSeekRequest = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A scheduled timer to clean up the mouse activity CSS class, or null
|
||||||
|
* if no timer is scheduled.
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
var mouseActivityTimer = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if any batches of key event logs are available for this
|
* Return true if any batches of key event logs are available for this
|
||||||
* recording, or false otherwise.
|
* recording, or false otherwise.
|
||||||
@@ -401,6 +435,43 @@ angular.module('player').directive('guacPlayer', ['$injector', function guacPlay
|
|||||||
$scope.$on('$destroy', function playerDestroyed() {
|
$scope.$on('$destroy', function playerDestroyed() {
|
||||||
$scope.recording.pause();
|
$scope.recording.pause();
|
||||||
$scope.recording.abort();
|
$scope.recording.abort();
|
||||||
|
mouseActivityTimer !== null && $window.clearTimeout(mouseActivityTimer);
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up the mouse movement class after no mouse activity has been
|
||||||
|
* detected for the appropriate time period.
|
||||||
|
*/
|
||||||
|
const scheduleCleanupTimeout = _.debounce(() =>
|
||||||
|
mouseActivityTimer = $window.setTimeout(() => {
|
||||||
|
mouseActivityTimer = null;
|
||||||
|
$element.removeClass('recent-mouse-movement');
|
||||||
|
}, MOUSE_CLEANUP_TIMER_DELAY),
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only schedule the cleanup task after the mouse hasn't moved
|
||||||
|
* for a reasonable amount of time to ensure that the number of
|
||||||
|
* created cleanup timers remains reasonable.
|
||||||
|
*/
|
||||||
|
MOUSE_DEBOUNCE_DELAY);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When the mouse moves inside the player, add a CSS class signifying
|
||||||
|
* recent mouse movement, to be automatically cleaned up after a period
|
||||||
|
* of time with no detected mouse movement.
|
||||||
|
*/
|
||||||
|
$element.on('mousemove', () => {
|
||||||
|
|
||||||
|
// Clean up any existing cleanup timer
|
||||||
|
if (mouseActivityTimer !== null) {
|
||||||
|
$window.clearTimeout(mouseActivityTimer);
|
||||||
|
mouseActivityTimer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the marker CSS class, and schedule its removal
|
||||||
|
$element.addClass('recent-mouse-movement');
|
||||||
|
scheduleCleanupTimeout();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}];
|
}];
|
||||||
|
@@ -112,3 +112,7 @@
|
|||||||
-o-transition-delay: 0s;
|
-o-transition-delay: 0s;
|
||||||
transition-delay: 0s;
|
transition-delay: 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.settings.connectionHistoryPlayer guac-player.recent-mouse-movement .guac-player-controls.playing {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user