Latest updates from IceHrmPro
This commit is contained in:
79
web/node_modules/rc-util/es/Dom/focus.js
generated
vendored
Normal file
79
web/node_modules/rc-util/es/Dom/focus.js
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
function hidden(node) {
|
||||
return node.style.display === 'none';
|
||||
}
|
||||
|
||||
function visible(node) {
|
||||
while (node) {
|
||||
if (node === document.body) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (hidden(node)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
node = node.parentNode;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function focusable(node) {
|
||||
var nodeName = node.nodeName.toLowerCase();
|
||||
var tabIndex = parseInt(node.getAttribute('tabindex'), 10);
|
||||
var hasTabIndex = !isNaN(tabIndex) && tabIndex > -1;
|
||||
|
||||
if (visible(node)) {
|
||||
if (['input', 'select', 'textarea', 'button'].indexOf(nodeName) > -1) {
|
||||
return !node.disabled;
|
||||
} else if (nodeName === 'a') {
|
||||
return node.getAttribute('href') || hasTabIndex;
|
||||
}
|
||||
|
||||
return node.isContentEditable || hasTabIndex;
|
||||
}
|
||||
}
|
||||
|
||||
export function getFocusNodeList(node) {
|
||||
var res = [].slice.call(node.querySelectorAll('*'), 0).filter(function (child) {
|
||||
return focusable(child);
|
||||
});
|
||||
|
||||
if (focusable(node)) {
|
||||
res.unshift(node);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
var lastFocusElement = null;
|
||||
export function saveLastFocusNode() {
|
||||
lastFocusElement = document.activeElement;
|
||||
}
|
||||
export function clearLastFocusNode() {
|
||||
lastFocusElement = null;
|
||||
}
|
||||
export function backLastFocusNode() {
|
||||
if (lastFocusElement) {
|
||||
try {
|
||||
// 元素可能已经被移动了
|
||||
lastFocusElement.focus();
|
||||
/* eslint-disable no-empty */
|
||||
} catch (e) {} // empty
|
||||
|
||||
/* eslint-enable no-empty */
|
||||
|
||||
}
|
||||
}
|
||||
export function limitTabRange(node, e) {
|
||||
if (e.keyCode === 9) {
|
||||
var tabNodeList = getFocusNodeList(node);
|
||||
var lastTabNode = tabNodeList[e.shiftKey ? 0 : tabNodeList.length - 1];
|
||||
var leavingTab = lastTabNode === document.activeElement || node === document.activeElement;
|
||||
|
||||
if (leavingTab) {
|
||||
var target = tabNodeList[e.shiftKey ? tabNodeList.length - 1 : 0];
|
||||
target.focus();
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user