/
memory-check.js
41 lines (32 loc) · 1.35 KB
/
memory-check.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
define(function(require) {
var Protoplast = require('protoplast'),
$ = require('jquery');
var MemoryCheck = Protoplast.extend({
check: function() {
return this.checkDomLeaks();
},
checkDomLeaks: function() {
var errors = [], orphans = [];
for (var i in $.cache) {
if ($.cache.hasOwnProperty(i)) {
if ($.cache[i].handle && $.cache[i].handle.elem && document !== $.cache[i].handle.elem && !$.contains(document, $.cache[i].handle.elem)) {
var orphan = $($.cache[i].handle.elem);
var outerHtml = orphan.get(0).outerHTML;
var closeTagIndex = outerHtml.indexOf('>');
var html = outerHtml.substr(0, closeTagIndex + 1);
orphans.push(html);
$('body').append(orphan);
orphan.off();
orphan.remove();
orphan = null;
}
}
}
if (orphans.length) {
errors.push(orphans.length + ' detached DOM elements found:\n\t* ' + orphans.join('\n\t* '));
}
return errors;
}
});
return MemoryCheck;
});