// 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();