Permalink
Browse files

ENHANCEMENT: In dev mode, include some basic leak detection functions…

… in the admin panel
  • Loading branch information...
1 parent 1085fd2 commit 21e7ec61f47249ed18526fd61da47a758448310d Hamish Friedlander committed with chillu Jun 14, 2012
Showing with 52 additions and 1 deletion.
  1. +3 −1 admin/code/LeftAndMain.php
  2. +49 −0 admin/javascript/leaktools.js
@@ -268,7 +268,9 @@ function init() {
FRAMEWORK_DIR . '/javascript/GridField.js',
)
);
-
+
+ if (Director::isDev()) Requirements::javascript(FRAMEWORK_ADMIN_DIR . '/javascript/leaktools.js');
+
HTMLEditorField::include_js();
Requirements::combine_files(
@@ -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);

0 comments on commit 21e7ec6

Please sign in to comment.