createDocumentStructure method

(MarkupRenderElement, MarkupRenderElement, MarkupRenderElement) createDocumentStructure(
  1. MarkupRenderObject root
)
inherited

Implementation

(MarkupRenderElement, MarkupRenderElement, MarkupRenderElement) createDocumentStructure(MarkupRenderObject root) {
  var html = root.children.findWhere<MarkupRenderElement>((c) => c.tag == 'html')?.node as MarkupRenderElement?;
  if (html == null) {
    var range = root.children.range();
    root.children.insertAfter(html = root.createChildRenderElement('html')..children.insertNodeAfter(range));
  }

  var headNode = html.children.findWhere<MarkupRenderElement>((c) => c.tag == 'head');
  var head = headNode?.node as MarkupRenderElement?;
  var bodyNode = html.children.findWhere<MarkupRenderElement>((c) => c.tag == 'body');
  var body = bodyNode?.node as MarkupRenderElement?;

  if (head == null) {
    head = html.createChildRenderElement('head');

    if (body == null) {
      var range = html.children.range();
      html.children.insertAfter(head);
      html.children.insertBefore(body = html.createChildRenderElement('body')..children.insertNodeAfter(range));
    } else {
      html.children.insertAfter(head);
    }
  } else {
    if (body == null) {
      var rangeBefore = html.children.range(endBefore: headNode);
      var rangeAfter = html.children.range(startAfter: headNode);

      body = html.createChildRenderElement('body');
      body.children
        ..insertNodeAfter(rangeAfter)
        ..insertNodeAfter(rangeBefore);
      html.children.insertAfter(body, after: head);
    }
  }

  return (html, head, body);
}