Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

79 строки
1.8 KiB

  1. function hidden(node) {
  2. return node.style.display === 'none';
  3. }
  4. function visible(node) {
  5. while (node) {
  6. if (node === document.body) {
  7. break;
  8. }
  9. if (hidden(node)) {
  10. return false;
  11. }
  12. node = node.parentNode;
  13. }
  14. return true;
  15. }
  16. function focusable(node) {
  17. var nodeName = node.nodeName.toLowerCase();
  18. var tabIndex = parseInt(node.getAttribute('tabindex'), 10);
  19. var hasTabIndex = !isNaN(tabIndex) && tabIndex > -1;
  20. if (visible(node)) {
  21. if (['input', 'select', 'textarea', 'button'].indexOf(nodeName) > -1) {
  22. return !node.disabled;
  23. } else if (nodeName === 'a') {
  24. return node.getAttribute('href') || hasTabIndex;
  25. }
  26. return node.isContentEditable || hasTabIndex;
  27. }
  28. }
  29. export function getFocusNodeList(node) {
  30. var res = [].slice.call(node.querySelectorAll('*'), 0).filter(function (child) {
  31. return focusable(child);
  32. });
  33. if (focusable(node)) {
  34. res.unshift(node);
  35. }
  36. return res;
  37. }
  38. var lastFocusElement = null;
  39. export function saveLastFocusNode() {
  40. lastFocusElement = document.activeElement;
  41. }
  42. export function clearLastFocusNode() {
  43. lastFocusElement = null;
  44. }
  45. export function backLastFocusNode() {
  46. if (lastFocusElement) {
  47. try {
  48. // 元素可能已经被移动了
  49. lastFocusElement.focus();
  50. /* eslint-disable no-empty */
  51. } catch (e) {} // empty
  52. /* eslint-enable no-empty */
  53. }
  54. }
  55. export function limitTabRange(node, e) {
  56. if (e.keyCode === 9) {
  57. var tabNodeList = getFocusNodeList(node);
  58. var lastTabNode = tabNodeList[e.shiftKey ? 0 : tabNodeList.length - 1];
  59. var leavingTab = lastTabNode === document.activeElement || node === document.activeElement;
  60. if (leavingTab) {
  61. var target = tabNodeList[e.shiftKey ? tabNodeList.length - 1 : 0];
  62. target.focus();
  63. e.preventDefault();
  64. }
  65. }
  66. }