| 12345678910111213141516171819202122232425262728293031323334 |
- 'use strict';
- require('../utils/dataTransfer/Clipboard.js');
- var getActiveElement = require('../utils/focus/getActiveElement.js');
- var isFocusable = require('../utils/focus/isFocusable.js');
- var findClosest = require('../utils/misc/findClosest.js');
- var updateSelectionOnFocus = require('./selection/updateSelectionOnFocus.js');
- var wrapEvent = require('./wrapEvent.js');
- // Browsers do not dispatch FocusEvent if the document does not have focus.
- // TODO: simulate FocusEvent in browsers
- /**
- * Focus closest focusable element.
- */ function focusElement(element) {
- const target = findClosest.findClosest(element, isFocusable.isFocusable);
- const activeElement = getActiveElement.getActiveElement(element.ownerDocument);
- if ((target !== null && target !== undefined ? target : element.ownerDocument.body) === activeElement) {
- return;
- } else if (target) {
- wrapEvent.wrapEvent(()=>target.focus());
- } else {
- wrapEvent.wrapEvent(()=>activeElement === null || activeElement === undefined ? undefined : activeElement.blur());
- }
- updateSelectionOnFocus.updateSelectionOnFocus(target !== null && target !== undefined ? target : element.ownerDocument.body);
- }
- function blurElement(element) {
- if (!isFocusable.isFocusable(element)) return;
- const wasActive = getActiveElement.getActiveElement(element.ownerDocument) === element;
- if (!wasActive) return;
- wrapEvent.wrapEvent(()=>element.blur());
- }
- exports.blurElement = blurElement;
- exports.focusElement = focusElement;
|