Dashboard sipadu mbip
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

SafeAnchor.js 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. exports.__esModule = true;
  4. exports.default = void 0;
  5. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  6. var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
  7. var _react = _interopRequireDefault(require("react"));
  8. var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction"));
  9. function isTrivialHref(href) {
  10. return !href || href.trim() === '#';
  11. }
  12. /**
  13. * There are situations due to browser quirks or Bootstrap CSS where
  14. * an anchor tag is needed, when semantically a button tag is the
  15. * better choice. SafeAnchor ensures that when an anchor is used like a
  16. * button its accessible. It also emulates input `disabled` behavior for
  17. * links, which is usually desirable for Buttons, NavItems, DropdownItems, etc.
  18. */
  19. var SafeAnchor = _react.default.forwardRef(function (_ref, ref) {
  20. var _ref$as = _ref.as,
  21. Component = _ref$as === void 0 ? 'a' : _ref$as,
  22. disabled = _ref.disabled,
  23. onKeyDown = _ref.onKeyDown,
  24. props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["as", "disabled", "onKeyDown"]);
  25. var handleClick = function handleClick(event) {
  26. var href = props.href,
  27. onClick = props.onClick;
  28. if (disabled || isTrivialHref(href)) {
  29. event.preventDefault();
  30. }
  31. if (disabled) {
  32. event.stopPropagation();
  33. return;
  34. }
  35. if (onClick) {
  36. onClick(event);
  37. }
  38. };
  39. var handleKeyDown = function handleKeyDown(event) {
  40. if (event.key === ' ') {
  41. event.preventDefault();
  42. handleClick(event);
  43. }
  44. };
  45. if (isTrivialHref(props.href)) {
  46. props.role = props.role || 'button'; // we want to make sure there is a href attribute on the node
  47. // otherwise, the cursor incorrectly styled (except with role='button')
  48. props.href = props.href || '#';
  49. }
  50. if (disabled) {
  51. props.tabIndex = -1;
  52. props['aria-disabled'] = true;
  53. }
  54. return _react.default.createElement(Component, (0, _extends2.default)({
  55. ref: ref
  56. }, props, {
  57. onClick: handleClick,
  58. onKeyDown: (0, _createChainedFunction.default)(handleKeyDown, onKeyDown)
  59. }));
  60. });
  61. SafeAnchor.displayName = 'SafeAnchor';
  62. var _default = SafeAnchor;
  63. exports.default = _default;
  64. module.exports = exports["default"];