@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
81 lines (66 loc) • 6.18 kB
JavaScript
export class CursorImpl {
constructor(element, nextSibling) {
this.element = element;
this.nextSibling = nextSibling;
}
}
export class ConcreteBounds {
constructor(parentNode, first, last) {
this.parentNode = parentNode;
this.first = first;
this.last = last;
}
parentElement() {
return this.parentNode;
}
firstNode() {
return this.first;
}
lastNode() {
return this.last;
}
}
export class SingleNodeBounds {
constructor(parentNode, node) {
this.parentNode = parentNode;
this.node = node;
}
parentElement() {
return this.parentNode;
}
firstNode() {
return this.node;
}
lastNode() {
return this.node;
}
}
export function move(bounds, reference) {
let parent = bounds.parentElement();
let first = bounds.firstNode();
let last = bounds.lastNode();
let current = first;
while (true) {
let next = current.nextSibling;
parent.insertBefore(current, reference);
if (current === last) {
return next;
}
current = next;
}
}
export function clear(bounds) {
let parent = bounds.parentElement();
let first = bounds.firstNode();
let last = bounds.lastNode();
let current = first;
while (true) {
let next = current.nextSibling;
parent.removeChild(current);
if (current === last) {
return next;
}
current = next;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3J1bnRpbWUvbGliL2JvdW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFNLE1BQU8sVUFBUCxDQUFpQjtBQUNyQixFQUFBLFdBQUEsQ0FBbUIsT0FBbkIsRUFBa0QsV0FBbEQsRUFBaUY7QUFBOUQsU0FBQSxPQUFBLEdBQUEsT0FBQTtBQUErQixTQUFBLFdBQUEsR0FBQSxXQUFBO0FBQW1DOztBQURoRTtBQU12QixPQUFNLE1BQU8sY0FBUCxDQUFxQjtBQUN6QixFQUFBLFdBQUEsQ0FDUyxVQURULEVBRVUsS0FGVixFQUdVLElBSFYsRUFHMEI7QUFGakIsU0FBQSxVQUFBLEdBQUEsVUFBQTtBQUNDLFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFDQSxTQUFBLElBQUEsR0FBQSxJQUFBO0FBQ047O0FBRUosRUFBQSxhQUFhLEdBQUE7QUFDWCxXQUFPLEtBQUssVUFBWjtBQUNEOztBQUVELEVBQUEsU0FBUyxHQUFBO0FBQ1AsV0FBTyxLQUFLLEtBQVo7QUFDRDs7QUFFRCxFQUFBLFFBQVEsR0FBQTtBQUNOLFdBQU8sS0FBSyxJQUFaO0FBQ0Q7O0FBakJ3QjtBQW9CM0IsT0FBTSxNQUFPLGdCQUFQLENBQXVCO0FBQzNCLEVBQUEsV0FBQSxDQUFvQixVQUFwQixFQUF1RCxJQUF2RCxFQUF1RTtBQUFuRCxTQUFBLFVBQUEsR0FBQSxVQUFBO0FBQW1DLFNBQUEsSUFBQSxHQUFBLElBQUE7QUFBb0I7O0FBRTNFLEVBQUEsYUFBYSxHQUFBO0FBQ1gsV0FBTyxLQUFLLFVBQVo7QUFDRDs7QUFFRCxFQUFBLFNBQVMsR0FBQTtBQUNQLFdBQU8sS0FBSyxJQUFaO0FBQ0Q7O0FBRUQsRUFBQSxRQUFRLEdBQUE7QUFDTixXQUFPLEtBQUssSUFBWjtBQUNEOztBQWIwQjtBQWdCN0IsT0FBTSxTQUFVLElBQVYsQ0FBZSxNQUFmLEVBQStCLFNBQS9CLEVBQTREO0FBQ2hFLE1BQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFQLEVBQWI7QUFDQSxNQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUCxFQUFaO0FBQ0EsTUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVAsRUFBWDtBQUVBLE1BQUksT0FBTyxHQUFlLEtBQTFCOztBQUVBLFNBQU8sSUFBUCxFQUFhO0FBQ1gsUUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQW5CO0FBRUEsSUFBQSxNQUFNLENBQUMsWUFBUCxDQUFvQixPQUFwQixFQUE2QixTQUE3Qjs7QUFFQSxRQUFJLE9BQU8sS0FBSyxJQUFoQixFQUFzQjtBQUNwQixhQUFPLElBQVA7QUFDRDs7QUFFRCxJQUFBLE9BQU8sR0FBVSxJQUFqQjtBQUNEO0FBQ0Y7QUFFRCxPQUFNLFNBQVUsS0FBVixDQUFnQixNQUFoQixFQUE4QjtBQUNsQyxNQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBUCxFQUFiO0FBQ0EsTUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVAsRUFBWjtBQUNBLE1BQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFQLEVBQVg7QUFFQSxNQUFJLE9BQU8sR0FBZSxLQUExQjs7QUFFQSxTQUFPLElBQVAsRUFBYTtBQUNYLFFBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFuQjtBQUVBLElBQUEsTUFBTSxDQUFDLFdBQVAsQ0FBbUIsT0FBbkI7O0FBRUEsUUFBSSxPQUFPLEtBQUssSUFBaEIsRUFBc0I7QUFDcEIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsSUFBQSxPQUFPLEdBQVUsSUFBakI7QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm91bmRzLCBDdXJzb3IsIE9wdGlvbiB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2ltcGxlRWxlbWVudCwgU2ltcGxlTm9kZSB9IGZyb20gJ0BzaW1wbGUtZG9tL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IGNsYXNzIEN1cnNvckltcGwgaW1wbGVtZW50cyBDdXJzb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogU2ltcGxlRWxlbWVudCwgcHVibGljIG5leHRTaWJsaW5nOiBPcHRpb248U2ltcGxlTm9kZT4pIHt9XG59XG5cbmV4cG9ydCB0eXBlIERlc3Ryb3lhYmxlQm91bmRzID0gQm91bmRzO1xuXG5leHBvcnQgY2xhc3MgQ29uY3JldGVCb3VuZHMgaW1wbGVtZW50cyBCb3VuZHMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGFyZW50Tm9kZTogU2ltcGxlRWxlbWVudCxcbiAgICBwcml2YXRlIGZpcnN0OiBTaW1wbGVOb2RlLFxuICAgIHByaXZhdGUgbGFzdDogU2ltcGxlTm9kZVxuICApIHt9XG5cbiAgcGFyZW50RWxlbWVudCgpOiBTaW1wbGVFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZmlyc3ROb2RlKCk6IFNpbXBsZU5vZGUge1xuICAgIHJldHVybiB0aGlzLmZpcnN0O1xuICB9XG5cbiAgbGFzdE5vZGUoKTogU2ltcGxlTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubGFzdDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xlTm9kZUJvdW5kcyBpbXBsZW1lbnRzIEJvdW5kcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50Tm9kZTogU2ltcGxlRWxlbWVudCwgcHJpdmF0ZSBub2RlOiBTaW1wbGVOb2RlKSB7fVxuXG4gIHBhcmVudEVsZW1lbnQoKTogU2ltcGxlRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGZpcnN0Tm9kZSgpOiBTaW1wbGVOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlO1xuICB9XG5cbiAgbGFzdE5vZGUoKTogU2ltcGxlTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW92ZShib3VuZHM6IEJvdW5kcywgcmVmZXJlbmNlOiBPcHRpb248U2ltcGxlTm9kZT4pOiBPcHRpb248U2ltcGxlTm9kZT4ge1xuICBsZXQgcGFyZW50ID0gYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgbGV0IGZpcnN0ID0gYm91bmRzLmZpcnN0Tm9kZSgpO1xuICBsZXQgbGFzdCA9IGJvdW5kcy5sYXN0Tm9kZSgpO1xuXG4gIGxldCBjdXJyZW50OiBTaW1wbGVOb2RlID0gZmlyc3Q7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnQubmV4dFNpYmxpbmc7XG5cbiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGN1cnJlbnQsIHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoY3VycmVudCA9PT0gbGFzdCkge1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGV4cGVjdChuZXh0LCAnaW52YWxpZCBib3VuZHMnKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYm91bmRzOiBCb3VuZHMpOiBPcHRpb248U2ltcGxlTm9kZT4ge1xuICBsZXQgcGFyZW50ID0gYm91bmRzLnBhcmVudEVsZW1lbnQoKTtcbiAgbGV0IGZpcnN0ID0gYm91bmRzLmZpcnN0Tm9kZSgpO1xuICBsZXQgbGFzdCA9IGJvdW5kcy5sYXN0Tm9kZSgpO1xuXG4gIGxldCBjdXJyZW50OiBTaW1wbGVOb2RlID0gZmlyc3Q7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnQubmV4dFNpYmxpbmc7XG5cbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY3VycmVudCk7XG5cbiAgICBpZiAoY3VycmVudCA9PT0gbGFzdCkge1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IGV4cGVjdChuZXh0LCAnaW52YWxpZCBib3VuZHMnKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==