big-moving.ru/api/soft/monako/esm/vs/base/browser/globalMouseMoveMonitor.js

104 lines
4.7 KiB
JavaScript
Raw Normal View History

2022-06-24 15:29:23 +05:00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import * as dom from './dom.js';
import { IframeUtils } from './iframe.js';
import { StandardMouseEvent } from './mouseEvent.js';
import { Disposable, dispose } from '../common/lifecycle.js';
export function standardMouseMoveMerger(lastEvent, currentEvent) {
var ev = new StandardMouseEvent(currentEvent);
ev.preventDefault();
return {
leftButton: ev.leftButton,
posx: ev.posx,
posy: ev.posy
};
}
var GlobalMouseMoveMonitor = /** @class */ (function (_super) {
__extends(GlobalMouseMoveMonitor, _super);
function GlobalMouseMoveMonitor() {
var _this = _super.call(this) || this;
_this.hooks = [];
_this.mouseMoveEventMerger = null;
_this.mouseMoveCallback = null;
_this.onStopCallback = null;
return _this;
}
GlobalMouseMoveMonitor.prototype.dispose = function () {
this.stopMonitoring(false);
_super.prototype.dispose.call(this);
};
GlobalMouseMoveMonitor.prototype.stopMonitoring = function (invokeStopCallback) {
if (!this.isMonitoring()) {
// Not monitoring
return;
}
// Unhook
this.hooks = dispose(this.hooks);
this.mouseMoveEventMerger = null;
this.mouseMoveCallback = null;
var onStopCallback = this.onStopCallback;
this.onStopCallback = null;
if (invokeStopCallback && onStopCallback) {
onStopCallback();
}
};
GlobalMouseMoveMonitor.prototype.isMonitoring = function () {
return this.hooks.length > 0;
};
GlobalMouseMoveMonitor.prototype.startMonitoring = function (mouseMoveEventMerger, mouseMoveCallback, onStopCallback) {
var _this = this;
if (this.isMonitoring()) {
// I am already hooked
return;
}
this.mouseMoveEventMerger = mouseMoveEventMerger;
this.mouseMoveCallback = mouseMoveCallback;
this.onStopCallback = onStopCallback;
var windowChain = IframeUtils.getSameOriginWindowChain();
for (var _i = 0, windowChain_1 = windowChain; _i < windowChain_1.length; _i++) {
var element = windowChain_1[_i];
this.hooks.push(dom.addDisposableThrottledListener(element.window.document, 'mousemove', function (data) { return _this.mouseMoveCallback(data); }, function (lastEvent, currentEvent) { return _this.mouseMoveEventMerger(lastEvent, currentEvent); }));
this.hooks.push(dom.addDisposableListener(element.window.document, 'mouseup', function (e) { return _this.stopMonitoring(true); }));
}
if (IframeUtils.hasDifferentOriginAncestor()) {
var lastSameOriginAncestor = windowChain[windowChain.length - 1];
// We might miss a mouse up if it happens outside the iframe
// This one is for Chrome
this.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', function (browserEvent) {
var e = new StandardMouseEvent(browserEvent);
if (e.target.tagName.toLowerCase() === 'html') {
_this.stopMonitoring(true);
}
}));
// This one is for FF
this.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', function (browserEvent) {
var e = new StandardMouseEvent(browserEvent);
if (e.target.tagName.toLowerCase() === 'html') {
_this.stopMonitoring(true);
}
}));
// This one is for IE
this.hooks.push(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', function (browserEvent) {
_this.stopMonitoring(true);
}));
}
};
return GlobalMouseMoveMonitor;
}(Disposable));
export { GlobalMouseMoveMonitor };