UNPKG

upfront-editable

Version:
85 lines (68 loc) 1.88 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); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var MatchCollection = function () { function MatchCollection() { (0, _classCallCheck3.default)(this, MatchCollection); this.matches = []; } (0, _createClass3.default)(MatchCollection, [{ key: "addMatches", value: function addMatches(name, matches) { if (!matches || !matches.length) return; this.matches = mergeMatches(this.matches, matches); } }]); return MatchCollection; }(); // Private Helpers // --------------- exports.default = MatchCollection; function mergeMatches(matches1, matches2) { var next = void 0; var length1 = matches1.length; var length2 = matches2.length; var lastEndIndex = -1; var output = []; var state = { a1: matches1, i1: 0, a2: matches2, i2: 0 }; while (state.i1 < length1 || state.i2 < length2) { next = pickNext(state); if (next.startIndex >= lastEndIndex) { output.push(next); } lastEndIndex = next.endIndex; } return output; } function pickNext(state) { var i1 = state.i1; var i2 = state.i2; var item1 = state.a1[i1]; var item2 = state.a2[i2]; if (item1 && item2 && item1.startIndex < item2.startIndex) { state.i1 = i1 + 1; return item1; } else if (item1 && item2) { state.i2 = i2 + 1; return item2; } else if (item1) { state.i1 = i1 + 1; return item1; } else if (item2) { state.i2 = i2 + 1; return item2; } else { return undefined; } }