UNPKG

d2-ui

Version:
74 lines (59 loc) 2.27 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getAttribute = require('./getAttribute'); var _getAttribute2 = _interopRequireDefault(_getAttribute); var _getAttributeValue = require('./getAttributeValue'); var _getAttributeValue2 = _interopRequireDefault(_getAttributeValue); var _getTabIndex = require('./getTabIndex'); var _getTabIndex2 = _interopRequireDefault(_getTabIndex); var _DOM = require('./attributes/DOM'); var _DOM2 = _interopRequireDefault(_DOM); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Map of tagNames to functions that return whether that element is interactive or not. var interactiveMap = { a: function a(attributes) { var href = (0, _getAttributeValue2.default)((0, _getAttribute2.default)(attributes, 'href')); var tabIndex = (0, _getTabIndex2.default)((0, _getAttribute2.default)(attributes, 'tabIndex')); return href !== undefined || tabIndex !== undefined; }, // This is same as `a` interactivity function area: function area(attributes) { return interactiveMap.a(attributes); }, button: function button() { return true; }, input: function input(attributes) { var typeAttr = (0, _getAttributeValue.getLiteralAttributeValue)((0, _getAttribute2.default)(attributes, 'type')); return typeAttr ? typeAttr.toUpperCase() !== 'HIDDEN' : true; }, option: function option() { return true; }, select: function select() { return true; }, textarea: function textarea() { return true; } }; /** * Returns boolean indicating whether the given element is * interactive on the DOM or not. Usually used when an element * has a dynamic handler on it and we need to discern whether or not * it's intention is to be interacted with on the DOM. */ var isInteractiveElement = function isInteractiveElement(tagName, attributes) { // Do not test higher level JSX components, as we do not know what // low-level DOM element this maps to. if (Object.keys(_DOM2.default).indexOf(tagName) === -1) { return true; } if (interactiveMap.hasOwnProperty(tagName) === false) { return false; } return interactiveMap[tagName](attributes); }; exports.default = isInteractiveElement;