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();
          node.attributes.forEach((attribute) => 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;
}