render method

  1. @override
ValueProvider render(
  1. JSONRender render,
  2. DivElement output,
  3. dynamic node,
  4. dynamic nodeOriginal,
  5. NodeKey nodeKey,
)
override

Implementation

@override
ValueProvider render(JSONRender render, DivElement output, dynamic node,
    dynamic nodeOriginal, NodeKey nodeKey) {
  var urlLabel = '$node';
  var url = urlLabel.trim();
  String? target;

  if (filterURL != null) {
    var ret = filterURL!(url);
    url = ret.url;
    urlLabel = ret.label;
    target = ret.target;
  }

  if (target != null && target.trim().isEmpty) target = null;

  target ??= 'self';

  Element elem;
  ValueProvider valueProvider;

  if (render.renderMode == JSONRenderMode.input) {
    var input = InputElement()
      ..value = urlLabel
      ..type = 'url';

    elem = input;

    _adjustInputWidthByValueOnKeyPress(elem as InputElement);

    elem.onDoubleClick.listen((e) {
      var inputURL = input.value;

      if (inputURL == urlLabel) {
        // ignore: unsafe_html
        window.open(url, target!);
      } else {
        // ignore: unsafe_html
        window.open(inputURL!, target!);
      }
    });

    valueProvider = (parent) => (elem as InputElement).value;
  } else {
    var a = AnchorElement(href: url)
      ..text = urlLabel
      ..target = target;

    elem = a;

    valueProvider = (parent) => nodeOriginal;
  }

  output.children.add(elem);

  applyCSS(render, output, extraElements: [elem]);

  return valueProvider;
}