cloneNode static method

XmlElement cloneNode(
  1. XmlElement node,
  2. Scope? scope
)

Implementation

static XmlElement cloneNode(XmlElement node, Scope? scope) {
  if (Xml.hasAttribute(node: node, tag: "clone")) {
    var id = Xml.attribute(node: node, tag: "clone");
    var model = Scope.findWidgetModel(id, scope);
    if (model != null) {
      if (model.element != null) {
        var n1 = model.element!.localName.trim();
        var n2 = node.localName.trim();

        if (n1.toLowerCase() == n2.toLowerCase()) {
          // copy element
          var element = model.element!.copy();
          for (var attribute in node.attributes) {
            Xml.setAttribute(element, attribute.localName, attribute.value);
          }
          node.replace(element);
          node = element;
        } else {
          Log().exception(
              "A model of type <$n2/> cannot be cloned from a model of type <$n1/>");
        }
      } else {
        Log().exception("Model $id has no element to copy from");
      }
    } else {
      Log()
          .exception("Error attempting to clone model $id. Model not found.");
    }
  }
  return node;
}