phrase-engine
Version:
Language files on steroids for conversational UIs that aren't boring.
58 lines • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Node_1 = require("../Node");
const mapFilter_1 = require("../mapFilter");
const factories_1 = require("../factories");
const PhraseError_1 = require("../PhraseError");
class RefNode extends Node_1.PhraseNode {
validateNodeName(name) {
return name === 'ref';
}
init(root, packet) {
const support = mapFilter_1.default(factories_1.default, [
'if',
'text',
'maybe',
'either',
'select',
'spaceless',
'unless',
'data'
]);
if (!root.hasAttribute('id')) {
let err = new PhraseError_1.PhraseError(`<ref>...</ref> must have an ID attribute.`);
err.node(root);
throw err;
}
if (!root.getAttribute('id').trim()) {
let err = new PhraseError_1.PhraseError(`<ref>...</ref> must have an non empty ID attribute.`);
err.node(root);
throw err;
}
const id = root.getAttribute('id');
if (!(id in packet.id_map)) {
let err = new PhraseError_1.PhraseError(`Element with ID "${id}" not found.`);
err.node(root);
throw err;
}
const node = packet.id_map[id];
if (!(node.nodeName in support)) {
let err = new PhraseError_1.PhraseError(`<${node.nodeName}>...</${node.nodeName}> cannot be reffered to.`);
err.node(root);
throw err;
}
this.setNextNode(support[node.nodeName](node, packet));
}
eval(packet, branch) {
return this.next().eval(packet);
}
*gen(packet) {
yield* this.next().gen(packet);
}
count(e_packet) {
const ret = this.next().count(e_packet);
return ret;
}
}
exports.RefNode = RefNode;
//# sourceMappingURL=RefNode.js.map