buildHTML method
String
buildHTML({
- bool withIndent = false,
- String parentIndent = '',
- String indent = ' ',
- bool disableIndent = false,
- bool xhtml = false,
- bool resolveDSX = false,
- bool buildTemplates = false,
- DOMNode? parentNode,
- DOMNode? previousNode,
- DOMContext<
Object> ? domContext,
override
Generates a HTML from this node tree.
withIndent If true will generate a indented HTML.
Implementation
@override
String buildHTML(
{bool withIndent = false,
String parentIndent = '',
String indent = ' ',
bool disableIndent = false,
bool xhtml = false,
bool resolveDSX = false,
bool buildTemplates = false,
DOMNode? parentNode,
DOMNode? previousNode,
DOMContext? domContext}) {
if (buildTemplates && hasUnresolvedTemplate) {
var htmlUnresolvedTemplate =
buildHTML(withIndent: true, buildTemplates: false, resolveDSX: false);
var template = DOMTemplate.tryParse(htmlUnresolvedTemplate);
if (template != null) {
var templateNode = TemplateNode(template);
var html = templateNode.buildHTML(
withIndent: withIndent,
parentIndent: parentIndent,
indent: indent,
disableIndent: disableIndent,
xhtml: xhtml,
resolveDSX: resolveDSX,
buildTemplates: true,
parentNode: parentNode,
previousNode: previousNode,
domContext: domContext);
return html;
}
}
if (!disableIndent && !_tagAllowsInnerIndent(tag)) {
disableIndent = true;
}
var allowIndent = withIndent &&
isNotEmptyContent &&
hasOnlyElementNodes &&
!disableIndent;
var innerIndent = allowIndent ? parentIndent + indent : '';
var innerBreakLine = allowIndent ? '\n' : '';
if (parentIndent.isNotEmpty &&
previousNode != null &&
previousNode.isStringElement) {
parentIndent = '';
}
final content = _content;
var emptyContent = content == null || content.isEmpty;
if (_selfClosingTags.contains(tag) ||
(emptyContent && (xhtml || _selfClosingTagsOptional.contains(tag)))) {
var html = parentIndent +
buildOpenTagHTML(
openCloseTag: xhtml,
resolveDSX: resolveDSX,
domContext: domContext);
return html;
}
var html = StringBuffer();
html.write(parentIndent);
html.write(
buildOpenTagHTML(resolveDSX: resolveDSX, domContext: domContext));
html.write(innerBreakLine);
if (!emptyContent) {
buildHTMLContent(
output: html,
withIndent: withIndent,
innerIndent: innerIndent,
innerBreakLine: innerBreakLine,
indent: indent,
disableIndent: disableIndent,
xhtml: xhtml,
resolveDSX: resolveDSX,
buildTemplates: buildTemplates,
domContext: domContext,
);
}
if (allowIndent) {
html.write(parentIndent);
}
html.write(buildCloseTagHTML());
return html.toString();
}