@yandex/ui
Version:
Yandex UI components
78 lines (77 loc) • 3.07 kB
JavaScript
import { canUseDOM } from '../../lib/canUseDOM';
var PointerFocus = /** @class */ (function () {
function PointerFocus() {
var _this = this;
this.onKeyDown = function () {
window.clearTimeout(_this.timeoutId);
_this.isPointer = false;
};
this.onMouseDown = function () {
_this.isPointer = true;
window.clearTimeout(_this.timeoutId);
_this.timeoutId = window.setTimeout(function () { return (_this.isPointer = false); }, 600);
};
this.onFocus = function () {
if (_this.isPointer) {
window.document.body.classList.add('pointerfocus');
window.document.body.classList.remove('utilityfocus');
}
else {
window.document.body.classList.add('utilityfocus');
window.document.body.classList.remove('pointerfocus');
}
};
this.onBlur = function () {
window.addEventListener('focus', _this.setIsPointerOnTabFocus, true);
};
this.setIsPointerOnTabFocus = function () {
window.removeEventListener('focus', _this.setIsPointerOnTabFocus, true);
if (window.document.body.classList.contains('pointerfocus')) {
_this.isPointer = true;
window.setTimeout(function () { return (_this.isPointer = false); });
}
};
this.timeoutId = 0;
this.isPointer = false;
window.addEventListener('blur', this.onBlur);
window.document.addEventListener('keydown', this.onKeyDown);
window.document.addEventListener('mousedown', this.onMouseDown);
window.document.addEventListener('mouseup', this.onMouseDown);
window.document.addEventListener('focusin', this.onFocus);
if (!window.document.body.classList.contains('pointerfocus') &&
!window.document.documentElement.classList.contains('pointerfocus')) {
window.document.body.classList.add('utilityfocus');
}
}
PointerFocus.create = function () {
return new PointerFocus();
};
/**
* Удаляет все обработчики и классы с документа.
*/
PointerFocus.prototype.dispose = function () {
window.removeEventListener('blur', this.onBlur);
window.document.removeEventListener('keydown', this.onKeyDown);
window.document.removeEventListener('mousedown', this.onMouseDown);
window.document.removeEventListener('mouseup', this.onMouseDown);
window.document.removeEventListener('focusin', this.onFocus);
window.document.body.classList.remove('pointerfocus', 'utilityfocus');
};
return PointerFocus;
}());
var pointerFocus = null;
if (canUseDOM()) {
if (pointerFocus === null) {
pointerFocus = PointerFocus.create();
}
}
/**
* Отключает PointerFocus на странице.
*
* @internal
*/
export function dispose() {
if (pointerFocus) {
pointerFocus.dispose();
}
}