Skip to content

Commit

Permalink
v2.2.5
Browse files Browse the repository at this point in the history
- `DOMHtmlBrowser`:
  - Optimize `parse`.
  • Loading branch information
gmpassos committed May 30, 2024
1 parent d7e9990 commit f71b4f0
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 1 deletion.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 2.2.5

- `DOMHtmlBrowser`:
- Optimize `parse`.

## 2.2.4

- `$p`: added parameter `content`.
Expand Down
6 changes: 6 additions & 0 deletions lib/src/dom_builder_helpers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ List<DOMNode>? parseHTML(String? html) {

var parsed = _domHTML.parse(html);

if (parsed is DOMNode) {
return <DOMNode>[parsed];
} else if (parsed is List<DOMNode>) {
return parsed;
}

var parsedNodes = _domHTML.getChildrenNodes(parsed);

if (parsedNodes.isEmpty) {
Expand Down
1 change: 1 addition & 0 deletions lib/src/dom_builder_html.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ abstract class DOMHtml {
DOMElement? toDOMElement(Object? node);

/// Parses [html].
/// This can return a [DOMNode] or a native `Node`.
Object? parse(String html);

/// Performs a [node] selection for [selector].
Expand Down
77 changes: 77 additions & 0 deletions lib/src/dom_builder_html_browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'dart:html' as dart_html;
import 'package:swiss_knife/swiss_knife.dart';

import 'dom_builder_base.dart';
import 'dom_builder_helpers.dart';
import 'dom_builder_html.dart';
import 'dom_builder_treemap.dart';

Expand Down Expand Up @@ -148,7 +149,83 @@ class DOMHtmlBrowser extends DOMHtml {

@override
Object? parse(String html) {
switch (html) {
case '&nbsp;':
{
return TextNode('\u00A0', false);
}
case '&nbsp;&nbsp;':
{
return TextNode('\u00A0\u00A0', false);
}
case '&nbsp;&nbsp;&nbsp;':
{
return TextNode('\u00A0\u00A0\u00A0', false);
}
case '&nbsp;&nbsp;&nbsp;&nbsp;':
{
return TextNode('\u00A0\u00A0\u00A0\u00A0', false);
}

case '&emsp;':
{
return TextNode('\u2003', false);
}
case '&emsp;&emsp;':
{
return TextNode('\u2003\u2003', false);
}
case '&emsp;&emsp;&emsp;':
{
return TextNode('\u2003\u2003\u2003', false);
}
case '&emsp;&emsp;&emsp;&emsp;':
{
return TextNode('\u2003\u2003\u2003\u2003', false);
}

case '<br>':
{
return DOMElement('br');
}
case '<br><br>':
{
return <DOMNode>[
DOMElement('br'),
DOMElement('br'),
];
}
case '<br><br><br>':
{
return <DOMNode>[
DOMElement('br'),
DOMElement('br'),
DOMElement('br'),
];
}
case '<br><br><br><br>':
{
return <DOMNode>[
DOMElement('br'),
DOMElement('br'),
DOMElement('br'),
DOMElement('br'),
];
}

default:
{
return _parseImpl(html);
}
}
}

Object? _parseImpl(String html) {
try {
if (!hasHTMLEntity(html) && !hasHTMLTag(html)) {
return TextNode.toTextNode(html);
}

dart_html.Node parsed = _domParser.parseFromString(html, 'text/html');

if (parsed is dart_html.Document) {
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: dom_builder
description: Generate and manipulate DOM elements (virtual or real), DSX (like JSX) and HTML declarations (Web and Native support).
version: 2.2.4
version: 2.2.5
homepage: https://github.com/gmpassos/dom_builder

environment:
Expand Down

0 comments on commit f71b4f0

Please sign in to comment.