ENHANCEMENT: In dev mode, include some basic leak detection functions in the admin panel

This commit is contained in:
Hamish Friedlander 2012-06-14 14:38:23 +12:00 committed by Ingo Schommer
parent 1085fd29be
commit 21e7ec61f4
2 changed files with 52 additions and 1 deletions

View File

@ -268,7 +268,9 @@ class LeftAndMain extends Controller implements PermissionProvider {
FRAMEWORK_DIR . '/javascript/GridField.js',
)
);
if (Director::isDev()) Requirements::javascript(FRAMEWORK_ADMIN_DIR . '/javascript/leaktools.js');
HTMLEditorField::include_js();
Requirements::combine_files(

View File

@ -0,0 +1,49 @@
(function($){
var getHTML = function(el) {
var clone = el.cloneNode(true);
var div = $('<div></div>');
div.append(clone);
return div.html();
}
$.leaktools = {
logDuplicateElements: function(){
var els = $('*');
var dirty = false;
els.each(function(i, a){
els.not(a).each(function(j, b){
if (getHTML(a) == getHTML(b)) {
dirty = true;
console.log(a, b);
}
})
})
if (!dirty) console.log('No duplicates found');
},
logUncleanedElements: function(clean){
$.each($.cache, function(){
var source = this.handle && this.handle.elem;
if (!source) return;
var parent = source;
while (parent && parent.nodeType == 1) parent = parent.parentNode;
if (!parent) {
console.log('Unattached', source);
console.log(this.events);
if (clean) $(source).unbind().remove();
}
else if (parent !== document) console.log('Attached, but to', parent, 'not our document', source);
})
}
};
})(jQuery);