Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
private bindMultiAttribute(symbol: IResourceAttributeSymbol, attrInfo: AttrInfo, value: string): void {
const attributes = parseMultiAttributeBinding(value);
let attr: IAttrLike;
for (let i = 0, ii = attributes.length; i < ii; ++i) {
attr = attributes[i];
const attrSyntax = this.attrParser.parse(attr.name, attr.value);
const command = this.resources.getBindingCommand(attrSyntax, false);
const bindingType = command == null ? BindingType.Interpolation : command.bindingType;
const expr = this.exprParser.parse(attrSyntax.rawValue, bindingType);
let bindable = attrInfo.bindables[attrSyntax.target];
if (bindable === undefined) {
// everything in a dynamicOptions expression must be used, so if it's not a bindable then we create one on the spot
bindable = attrInfo.bindables[attrSyntax.target] = new BindableInfo(attrSyntax.target, BindingMode.toView);
}
symbol.bindings.push(new BindingSymbol(command, bindable, expr, attrSyntax.rawValue, attrSyntax.target));
}
}
}
}
if (attrValue === void 0) {
// No semicolon found, so just grab the rest of the value
attrValue = value.slice(start);
}
const attrSyntax = this.attrParser.parse(attrName, attrValue);
const attrTarget = camelCase(attrSyntax.target);
const command = this.resources.getBindingCommand(attrSyntax, false);
const bindingType = command === null ? 2048 /* Interpolation */ : command.bindingType;
const expr = this.exprParser.parse(attrValue, bindingType);
let bindable = bindables[attrTarget];
if (bindable === undefined) {
// everything in a multi-bindings expression must be used,
// so if it's not a bindable then we create one on the spot
bindable = bindables[attrTarget] = new BindableInfo(attrTarget, BindingMode.toView);
}
symbol.bindings.push(new BindingSymbol(command, bindable, expr, attrValue, attrTarget));
// Skip whitespace after semicolon
while (i < valueLength && value.charCodeAt(++i) <= 32 /* Space */)
;
start = i;
attrName = void 0;
attrValue = void 0;
}
}
}
bindPlainAttribute(attrSyntax, attr, surrogate, manifest) {
parentManifest.childNodes.push(symbol);
const attributes = node.attributes;
let i = 0;
while (i < attributes.length) {
const attr = attributes[i];
if (attr.name === 'to-binding-context') {
node.removeAttribute('to-binding-context');
symbol.toBindingContext = true;
continue;
}
const attrSyntax = this.attrParser.parse(attr.name, attr.value);
const command = this.resources.getBindingCommand(attrSyntax, false);
const bindingType = command === null ? 2048 /* Interpolation */ : command.bindingType;
const expr = this.exprParser.parse(attrSyntax.rawValue, bindingType);
const to = camelCase(attrSyntax.target);
const info = new BindableInfo(to, BindingMode.toView);
symbol.bindings.push(new BindingSymbol(command, info, expr, attrSyntax.rawValue, to));
++i;
}
node.parentNode.replaceChild(symbol.marker, node);
}
bindAttributes(node, parentManifest, surrogate, manifest, manifestRoot, parentManifestRoot, partName) {
const attributes = node.attributes;
let i = 0;
while (i < attributes.length) {
const attr = attributes[i];
if (attr.name === 'to-view-model') {
node.removeAttribute('to-view-model');
symbol.toViewModel = true;
continue;
}
const attrSyntax = this.attrParser.parse(attr.name, attr.value);
const command = this.resources.getBindingCommand(attrSyntax, false);
const bindingType = command == null ? BindingType.Interpolation : command.bindingType;
const expr = this.exprParser.parse(attrSyntax.rawValue, bindingType);
const to = camelCase(attrSyntax.target);
const info = new BindableInfo(to, BindingMode.toView);
symbol.bindings.push(new BindingSymbol(command, info, expr, attrSyntax.rawValue, to));
++i;
}
node.parentNode!.replaceChild(symbol.marker as Node, node);
}