You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connected.Components/TScripts/mudElementReference.js

147 lines
4.0 KiB

2 years ago
// Copyright (c) MudBlazor 2021
// MudBlazor licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
class MudElementReference {
constructor() {
this.listenerId = 0;
this.eventListeners = {};
}
focus (element) {
if (element)
{
element.focus();
}
}
blur(element) {
if (element) {
element.blur();
}
}
focusFirst (element, skip = 0, min = 0) {
if (element)
{
let tabbables = getTabbableElements(element);
if (tabbables.length <= min)
element.focus();
else
tabbables[skip].focus();
}
}
focusLast (element, skip = 0, min = 0) {
if (element)
{
let tabbables = getTabbableElements(element);
if (tabbables.length <= min)
element.focus();
else
tabbables[tabbables.length - skip - 1].focus();
}
}
saveFocus (element) {
if (element)
{
element['mudblazor_savedFocus'] = document.activeElement;
}
}
restoreFocus (element) {
if (element)
{
let previous = element['mudblazor_savedFocus'];
delete element['mudblazor_savedFocus']
if (previous)
previous.focus();
}
}
selectRange(element, pos1, pos2) {
if (element)
{
if (element.createTextRange) {
let selRange = element.createTextRange();
selRange.collapse(true);
selRange.moveStart('character', pos1);
selRange.moveEnd('character', pos2);
selRange.select();
} else if (element.setSelectionRange) {
element.setSelectionRange(pos1, pos2);
} else if (element.selectionStart) {
element.selectionStart = pos1;
element.selectionEnd = pos2;
}
element.focus();
}
}
select(element) {
if (element)
{
element.select();
}
}
getBoundingClientRect(element) {
if (!element) return;
var rect = JSON.parse(JSON.stringify(element.getBoundingClientRect()));
rect.scrollY = window.scrollY || document.documentElement.scrollTop;
rect.scrollX = window.scrollX || document.documentElement.scrollLeft;
rect.windowHeight = window.innerHeight;
rect.windowWidth = window.innerWidth;
return rect;
}
changeCss (element, css) {
if (element)
{
element.className = css;
}
}
removeEventListener (element, event, eventId) {
element.removeEventListener(event, this.eventListeners[eventId]);
delete this.eventListeners[eventId];
}
addDefaultPreventingHandler(element, eventName) {
let listener = function(e) {
e.preventDefault();
}
element.addEventListener(eventName, listener, { passive: false });
this.eventListeners[++this.listenerId] = listener;
return this.listenerId;
}
removeDefaultPreventingHandler(element, eventName, listenerId) {
this.removeEventListener(element, eventName, listenerId);
}
addDefaultPreventingHandlers(element, eventNames) {
let listeners = [];
for (const eventName of eventNames) {
let listenerId = this.addDefaultPreventingHandler(element, eventName);
listeners.push(listenerId);
}
return listeners;
}
removeDefaultPreventingHandlers(element, eventNames, listenerIds) {
for (let index = 0; index < eventNames.length; ++index) {
const eventName = eventNames[index];
const listenerId = listenerIds[index];
this.removeDefaultPreventingHandler(element, eventName, listenerId);
}
}
};
window.mudElementRef = new MudElementReference();