mirror of https://github.com/adamdruppe/arsd.git
lots of DocumentFragment fixes... may be buggy, may have regresions!
This commit is contained in:
parent
c0868ad46a
commit
debd4fe356
63
dom.d
63
dom.d
|
@ -1512,7 +1512,7 @@ class Element {
|
||||||
}
|
}
|
||||||
out(ret) {
|
out(ret) {
|
||||||
assert(ret !is null);
|
assert(ret !is null);
|
||||||
assert(ret.parentNode is this);
|
assert((cast(DocumentFragment) this !is null) || (ret.parentNode is this), ret.toString);// e.parentNode ? e.parentNode.toString : "null");
|
||||||
assert(ret.parentDocument is this.parentDocument);
|
assert(ret.parentDocument is this.parentDocument);
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
|
@ -1735,7 +1735,21 @@ class Element {
|
||||||
Document parentDocument;
|
Document parentDocument;
|
||||||
|
|
||||||
///.
|
///.
|
||||||
Element parentNode;
|
inout(Element) parentNode() inout {
|
||||||
|
auto p = _parentNode;
|
||||||
|
|
||||||
|
if(cast(DocumentFragment) p)
|
||||||
|
return p._parentNode;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
//protected
|
||||||
|
Element parentNode(Element e) {
|
||||||
|
return _parentNode = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Element _parentNode;
|
||||||
|
|
||||||
// the next few methods are for implementing interactive kind of things
|
// the next few methods are for implementing interactive kind of things
|
||||||
private CssStyle _computedStyle;
|
private CssStyle _computedStyle;
|
||||||
|
@ -2385,10 +2399,10 @@ class Element {
|
||||||
Element appendChild(Element e)
|
Element appendChild(Element e)
|
||||||
in {
|
in {
|
||||||
assert(e !is null);
|
assert(e !is null);
|
||||||
assert(e.parentNode is null);
|
assert(e.parentNode is null, e.parentNode.toString);
|
||||||
}
|
}
|
||||||
out (ret) {
|
out (ret) {
|
||||||
assert(e.parentNode is this);
|
assert((cast(DocumentFragment) this !is null) || (e.parentNode is this), e.toString);// e.parentNode ? e.parentNode.toString : "null");
|
||||||
assert(e.parentDocument is this.parentDocument);
|
assert(e.parentDocument is this.parentDocument);
|
||||||
assert(e is ret);
|
assert(e is ret);
|
||||||
}
|
}
|
||||||
|
@ -2396,7 +2410,10 @@ class Element {
|
||||||
selfClosed = false;
|
selfClosed = false;
|
||||||
e.parentNode = this;
|
e.parentNode = this;
|
||||||
e.parentDocument = this.parentDocument;
|
e.parentDocument = this.parentDocument;
|
||||||
children ~= e;
|
if(auto frag = cast(DocumentFragment) e)
|
||||||
|
children ~= frag.children;
|
||||||
|
else
|
||||||
|
children ~= e;
|
||||||
|
|
||||||
sendObserverEvent(DomMutationOperations.appendChild, null, null, e);
|
sendObserverEvent(DomMutationOperations.appendChild, null, null, e);
|
||||||
|
|
||||||
|
@ -2421,7 +2438,10 @@ class Element {
|
||||||
body {
|
body {
|
||||||
foreach(i, e; children) {
|
foreach(i, e; children) {
|
||||||
if(e is where) {
|
if(e is where) {
|
||||||
children = children[0..i] ~ what ~ children[i..$];
|
if(auto frag = cast(DocumentFragment) what)
|
||||||
|
children = children[0..i] ~ frag.children ~ children[i..$];
|
||||||
|
else
|
||||||
|
children = children[0..i] ~ what ~ children[i..$];
|
||||||
what.parentDocument = this.parentDocument;
|
what.parentDocument = this.parentDocument;
|
||||||
what.parentNode = this;
|
what.parentNode = this;
|
||||||
return what;
|
return what;
|
||||||
|
@ -2452,7 +2472,10 @@ class Element {
|
||||||
body {
|
body {
|
||||||
foreach(i, e; children) {
|
foreach(i, e; children) {
|
||||||
if(e is where) {
|
if(e is where) {
|
||||||
children = children[0 .. i + 1] ~ what ~ children[i + 1 .. $];
|
if(auto frag = cast(DocumentFragment) what)
|
||||||
|
children = children[0 .. i + 1] ~ what.children ~ children[i + 1 .. $];
|
||||||
|
else
|
||||||
|
children = children[0 .. i + 1] ~ what ~ children[i + 1 .. $];
|
||||||
what.parentNode = this;
|
what.parentNode = this;
|
||||||
what.parentDocument = this.parentDocument;
|
what.parentDocument = this.parentDocument;
|
||||||
return what;
|
return what;
|
||||||
|
@ -2554,7 +2577,10 @@ class Element {
|
||||||
foreach(ref i, c; children) {
|
foreach(ref i, c; children) {
|
||||||
if(c is where) {
|
if(c is where) {
|
||||||
i++;
|
i++;
|
||||||
children = children[0..i] ~ child ~ children[i..$];
|
if(auto frag = cast(DocumentFragment) child)
|
||||||
|
children = children[0..i] ~ child.children ~ children[i..$];
|
||||||
|
else
|
||||||
|
children = children[0..i] ~ child ~ children[i..$];
|
||||||
child.parentNode = this;
|
child.parentNode = this;
|
||||||
child.parentDocument = this.parentDocument;
|
child.parentDocument = this.parentDocument;
|
||||||
break;
|
break;
|
||||||
|
@ -2621,7 +2647,10 @@ class Element {
|
||||||
body {
|
body {
|
||||||
e.parentNode = this;
|
e.parentNode = this;
|
||||||
e.parentDocument = this.parentDocument;
|
e.parentDocument = this.parentDocument;
|
||||||
children = e ~ children;
|
if(auto frag = cast(DocumentFragment) e)
|
||||||
|
children = e.children ~ children;
|
||||||
|
else
|
||||||
|
children = e ~ children;
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2748,6 +2777,9 @@ class Element {
|
||||||
assert(find.parentNode is null);
|
assert(find.parentNode is null);
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
|
// FIXME
|
||||||
|
//if(auto frag = cast(DocumentFragment) replace)
|
||||||
|
//return this.replaceChild(frag, replace.children);
|
||||||
for(int i = 0; i < children.length; i++) {
|
for(int i = 0; i < children.length; i++) {
|
||||||
if(children[i] is find) {
|
if(children[i] is find) {
|
||||||
replace.parentNode = this;
|
replace.parentNode = this;
|
||||||
|
@ -3479,6 +3511,19 @@ class DocumentFragment : Element {
|
||||||
override string writeToAppender(Appender!string where = appender!string()) const {
|
override string writeToAppender(Appender!string where = appender!string()) const {
|
||||||
return this.innerHTML(where);
|
return this.innerHTML(where);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// DocumentFragments don't really exist in a dom, so they ignore themselves in parent nodes
|
||||||
|
/*
|
||||||
|
override inout(Element) parentNode() inout {
|
||||||
|
return children.length ? children[0].parentNode : null;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
override Element parentNode(Element p) {
|
||||||
|
this._parentNode = p;
|
||||||
|
foreach(child; children)
|
||||||
|
child.parentNode = p;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Given text, encode all html entities on it - &, <, >, and ". This function also
|
/// Given text, encode all html entities on it - &, <, >, and ". This function also
|
||||||
|
|
Loading…
Reference in New Issue