UNPKG

upfront-editable

Version:
76 lines (62 loc) 2.35 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _nodeType = require('./node-type'); var nodeType = _interopRequireWildcard(_nodeType); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // A DOM node iterator. // // Has the ability to replace nodes on the fly and continue // the iteration. var NodeIterator = function () { function NodeIterator(root) { (0, _classCallCheck3.default)(this, NodeIterator); this.current = this.next = this.root = root; } (0, _createClass3.default)(NodeIterator, [{ key: 'getNextTextNode', value: function getNextTextNode() { var next = void 0; while (next = this.getNext()) { if (next.nodeType === nodeType.textNode && next.data !== '') return next; } } }, { key: 'getNext', value: function getNext() { var n = this.current = this.next; var child = this.next = undefined; if (this.current) { child = n.firstChild; // Skip the children of elements with the attribute data-editable="remove" // This prevents text nodes that are not part of the content to be included. if (child && n.getAttribute('data-editable') !== 'remove') { this.next = child; } else { while (n !== this.root && !(this.next = n.nextSibling)) { n = n.parentNode; } } } return this.current; } }, { key: 'replaceCurrent', value: function replaceCurrent(replacement) { this.current = replacement; this.next = undefined; var n = this.current; while (n !== this.root && !(this.next = n.nextSibling)) { n = n.parentNode; } } }]); return NodeIterator; }(); exports.default = NodeIterator;