UNPKG

upfront-editable

Version:
56 lines (42 loc) 1.54 kB
'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.textNodesUnder = textNodesUnder; exports.getTextNodeAndRelativeOffset = getTextNodeAndRelativeOffset; exports.getTotalCharCount = getTotalCharCount; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _nodeIterator = _interopRequireDefault(require("../node-iterator")); function textNodesUnder(node) { var iterator = new _nodeIterator["default"](node, 'getNextTextNode'); return (0, _toConsumableArray2["default"])(iterator); } // NOTE: if there is only one text node, then just that node and // the abs offset are returned function getTextNodeAndRelativeOffset(_ref) { var textNodes = _ref.textNodes, absOffset = _ref.absOffset; var cumulativeOffset = 0; var relativeOffset = 0; var targetNode; for (var i = 0; i < textNodes.length; i++) { var node = textNodes[i]; if (absOffset <= cumulativeOffset + node.textContent.length) { targetNode = node; relativeOffset = absOffset - cumulativeOffset; break; } cumulativeOffset += node.textContent.length; } return { node: targetNode, relativeOffset: relativeOffset }; } function getTotalCharCount(element) { var textNodes = textNodesUnder(element); var reducer = function reducer(acc, node) { return acc + node.textContent.length; }; return textNodes.reduce(reducer, 0); }