mirror of https://github.com/adamdruppe/arsd.git
issue #262
This commit is contained in:
parent
9264dea9a6
commit
ce4c8a3875
42
dom.d
42
dom.d
|
@ -352,6 +352,17 @@ class Document : FileResource {
|
||||||
return new Utf8Stream(data);
|
return new Utf8Stream(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/++
|
||||||
|
List of elements that can be assumed to be self-closed
|
||||||
|
in this document. The default for a Document are a hard-coded
|
||||||
|
list of ones appropriate for HTML. For [XmlDocument], it defaults
|
||||||
|
to empty. You can modify this after construction but before parsing.
|
||||||
|
|
||||||
|
History:
|
||||||
|
Added February 8, 2021 (included in dub release 9.2)
|
||||||
|
+/
|
||||||
|
string[] selfClosedElements = htmlSelfClosedElements;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Take XMLish data and try to make the DOM tree out of it.
|
Take XMLish data and try to make the DOM tree out of it.
|
||||||
|
|
||||||
|
@ -1329,7 +1340,7 @@ class Document : FileResource {
|
||||||
if(loose)
|
if(loose)
|
||||||
name = name.toLower();
|
name = name.toLower();
|
||||||
|
|
||||||
auto e = Element.make(name);
|
auto e = Element.make(name, null, null, selfClosedElements);
|
||||||
e.parentDocument = this;
|
e.parentDocument = this;
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
|
@ -1946,9 +1957,15 @@ class Element {
|
||||||
|
|
||||||
// and now methods
|
// and now methods
|
||||||
|
|
||||||
/// Convenience function to try to do the right thing for HTML. This is the main
|
/++
|
||||||
/// way I create elements.
|
Convenience function to try to do the right thing for HTML. This is the main way I create elements.
|
||||||
static Element make(string tagName, string childInfo = null, string childInfo2 = null) {
|
|
||||||
|
History:
|
||||||
|
On February 8, 2021, the `selfClosedElements` parameter was added. Previously, it used a private
|
||||||
|
immutable global list for HTML. It still defaults to the same list, but you can change it now via
|
||||||
|
the parameter.
|
||||||
|
+/
|
||||||
|
static Element make(string tagName, string childInfo = null, string childInfo2 = null, const string[] selfClosedElements = htmlSelfClosedElements) {
|
||||||
bool selfClosed = tagName.isInArray(selfClosedElements);
|
bool selfClosed = tagName.isInArray(selfClosedElements);
|
||||||
|
|
||||||
Element e;
|
Element e;
|
||||||
|
@ -2074,9 +2091,17 @@ class Element {
|
||||||
assert(_tagName.indexOf(" ") == -1);//, "<" ~ _tagName ~ "> is invalid");
|
assert(_tagName.indexOf(" ") == -1);//, "<" ~ _tagName ~ "> is invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convenience constructor when you don't care about the parentDocument. Note this might break things on the document.
|
/++
|
||||||
/// Note also that without a parent document, elements are always in strict, case-sensitive mode.
|
Convenience constructor when you don't care about the parentDocument. Note this might break things on the document.
|
||||||
this(string _tagName, string[string] _attributes = null) {
|
Note also that without a parent document, elements are always in strict, case-sensitive mode.
|
||||||
|
|
||||||
|
History:
|
||||||
|
On February 8, 2021, the `selfClosedElements` parameter was added. It defaults to the same behavior as
|
||||||
|
before: using the hard-coded list of HTML elements, but it can now be overridden. If you use
|
||||||
|
[Document.createElement], it will use the list set for the current document. Otherwise, you can pass
|
||||||
|
something here if you like.
|
||||||
|
+/
|
||||||
|
this(string _tagName, string[string] _attributes = null, const string[] selfClosedElements = htmlSelfClosedElements) {
|
||||||
tagName = _tagName;
|
tagName = _tagName;
|
||||||
if(_attributes !is null)
|
if(_attributes !is null)
|
||||||
attributes = _attributes;
|
attributes = _attributes;
|
||||||
|
@ -3532,6 +3557,7 @@ class Element {
|
||||||
/// Group: core_functionality
|
/// Group: core_functionality
|
||||||
class XmlDocument : Document {
|
class XmlDocument : Document {
|
||||||
this(string data) {
|
this(string data) {
|
||||||
|
selfClosedElements = null;
|
||||||
contentType = "text/xml; charset=utf-8";
|
contentType = "text/xml; charset=utf-8";
|
||||||
_prolog = `<?xml version="1.0" encoding="UTF-8"?>` ~ "\n";
|
_prolog = `<?xml version="1.0" encoding="UTF-8"?>` ~ "\n";
|
||||||
|
|
||||||
|
@ -6750,7 +6776,7 @@ struct DomMutationEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private immutable static string[] selfClosedElements = [
|
private immutable static string[] htmlSelfClosedElements = [
|
||||||
// html 4
|
// html 4
|
||||||
"img", "hr", "input", "br", "col", "link", "meta",
|
"img", "hr", "input", "br", "col", "link", "meta",
|
||||||
// html 5
|
// html 5
|
||||||
|
|
Loading…
Reference in New Issue