-
Notifications
You must be signed in to change notification settings - Fork 5.2k
/
wrappedfrag.js
44 lines (37 loc) · 1.16 KB
/
wrappedfrag.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// A WrappedFrag provides utility methods pertaining to a given
// DocumentFragment that are helpful in tests. For example,
// WrappedFrag(frag).html() constructs a sort of cross-browser
// innerHTML for the fragment.
// Constructor, with optional 'new':
// var f = [new] WrappedFrag([frag])
WrappedFrag = function(frag) {
if (! (this instanceof WrappedFrag))
return new WrappedFrag(frag);
this.frag = frag;
};
WrappedFrag.prototype.rawHtml = function() {
return DomUtils.fragmentToHtml(this.frag);
};
WrappedFrag.prototype.html = function() {
return canonicalizeHtml(this.rawHtml());
};
WrappedFrag.prototype.hold = function() {
// increments frag's GC protection reference count
this.frag["_protect"] = (this.frag["_protect"] || 0) + 1;
return this;
};
WrappedFrag.prototype.release = function() {
var frag = this.frag;
// decrement frag's GC protection reference count
// Clean up on flush, if hits 0. Wait to decrement
// so no one else cleans it up first.
Deps.afterFlush(function () {
if (! --frag["_protect"]) {
Spark.finalize(frag);
}
});
return this;
};
WrappedFrag.prototype.node = function() {
return this.frag;
};