Переиспользование кода для Element и Elements, сокращение размера файла```
switch ((typeof(arg0.prototype || arg0))[0]) {
case "o": // объект
switch ((typeof arg0)[0]) {
case "o": // объект
if (arg0 instanceof Binding) {
// Если это объект Binding, уведомляем о изменении модели
var element = new Text(arg0.value || "");
target.appendChild(element);
arg0.add((val) => { element.textContent = val; });
} else if (Array.isArray(arg0)) {
if (args.length >= 2) {
for (var i = 0; i < arg0.length; i++) {
if (i > 0) {
var argi = args[i];
if (argi instanceof Binding) {
// Если это объект Binding, уведомляем о изменении модели
var element = new Text(argi.value || "");
target.appendChild(element);
argi.add((val) => { element.textContent = val; });
} else {
if (argi instanceof Elements) {
target.appendChild(argi);
} else {
target.appendChild(new Text(argi));
}
}
}
target.appendChild(new Text(arg0[i]));
}
} else {
arg0.forEach(item => {
switch ((typeof item)[0]) {
case "s":
case "n":
item = new Text(item);
break;
default:
if (item.parent) item = item.clone();
break;
}
target.appendChild(item);
});
}
} else {
if (args.length >= 2) {
target.attributes = {};
}
}
}
}
}
}
extend(target.attributes, args[i]);
}
} else {
target.attributes = arg0;
}
}
return proxy;
case "f": // функция (скрипт)
target.appendChild(new Script(arg0));
return proxy;
}
break;
case "s": // строка
case "n": // число
target.appendChild(new Text(arg0));
return proxy;
case "f": // функция (Element, Elements)
if (arg0 instanceof Element) {
if (arg0.parent) arg0 = arg0.clone();
target.appendChild(arg0);
}```javascript
return proxy;
} else if (arg0 instanceof Elements) {
arg0.children.forEach(item => {
if (item.parent) {
item = item.clone();
}
target.appendChild(item);
if (args.length >= 2) {
for (var i = 1; i < args.length; i++) {
extend(item.attributes, args[i]);
}
}
});
return proxy;
} else {
throw `Unsupported: ${typeof arg0}`;
}
Вход Перед тем как оставить комментарий