JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.2.1
[ckeditor.git] / _source / core / dom / domobject.js
index 6962fdb..e510397 100644 (file)
@@ -115,6 +115,26 @@ CKEDITOR.dom.domObject.prototype = (function()
                                        delete nativeListeners[ eventName ];\r
                                }\r
                        }\r
+               },\r
+\r
+               /**\r
+                * Removes any listener set on this object.\r
+                * To avoid memory leaks we must assure that there are no\r
+                * references left after the object is no longer needed.\r
+                */\r
+               removeAllListeners : function()\r
+               {\r
+                       var nativeListeners = this.getCustomData( '_cke_nativeListeners' );\r
+                       for ( var eventName in nativeListeners )\r
+                       {\r
+                               var listener = nativeListeners[ eventName ];\r
+                               if ( this.$.removeEventListener )\r
+                                       this.$.removeEventListener( eventName, listener, false );\r
+                               else if ( this.$.detachEvent )\r
+                                       this.$.detachEvent( 'on' + eventName, listener );\r
+\r
+                               delete nativeListeners[ eventName ];\r
+                       }\r
                }\r
        };\r
 })();\r
@@ -197,6 +217,22 @@ CKEDITOR.dom.domObject.prototype = (function()
        };\r
 \r
        /**\r
+        * Removes any data stored on this object.\r
+        * To avoid memory leaks we must assure that there are no\r
+        * references left after the object is no longer needed.\r
+        * @name CKEDITOR.dom.domObject.prototype.clearCustomData\r
+        * @function\r
+        */\r
+       domObjectProto.clearCustomData = function()\r
+       {\r
+               // Clear all event listeners\r
+               this.removeAllListeners();\r
+\r
+               var expandoNumber = this.$._cke_expando;\r
+               expandoNumber && delete customData[ expandoNumber ];\r
+       };\r
+\r
+       /**\r
         * @name CKEDITOR.dom.domObject.prototype.getCustomData\r
         */\r
        domObjectProto.getUniqueId = function()\r