map method

void map(
  1. DOMNode domNode,
  2. T element, {
  3. DOMGenerator<T>? generator,
  4. DOMContext<T>? context,
  5. bool allowOverwrite = false,
})

Maps in this instance the pair domNode and element.

Implementation

void map(DOMNode domNode, T element,
    {DOMGenerator<T>? generator,
    DOMContext<T>? context,
    bool allowOverwrite = false}) {
  if (generator != null) {
    var mappable = generator.isMappable(domNode, context: context);
    // Skip mapping:
    if (!mappable) {
      return;
    }
  }

  final elementToDOMNodeMap = _elementToDOMNodeMap ??= DualMap();

  var put = elementToDOMNodeMap.putValueIfAbsent(element, domNode);
  if (!put) {
    var prevDomNode = elementToDOMNodeMap.get(element);

    var samePrevDomNode = identical(prevDomNode, domNode);
    if (samePrevDomNode) {
      if (!identical(domNode.treeMap, this)) {
        domNode.treeMap = this;
        _elementsDOMTreeMap[element] = _selfWeakReference;
      }
      return;
    } else {
      if (!allowOverwrite) {
        print(
            'WARNING> Mapping to different instances: $element ; $prevDomNode');
      }
    }
  }

  domNode.treeMap = this;
  _elementsDOMTreeMap[element] = _selfWeakReference;

  if (domNode is DOMElement) {
    domGenerator.resolveActionAttribute(this, domNode, element, context);
    domGenerator.registerEventListeners(this, domNode, element, context);
    manageDOMElementDSXs(domNode);
  }
}