JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4b
[ckeditor.git] / _source / core / dom / domobject.js
index c0c6e63..f10db99 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
@@ -123,6 +143,11 @@ CKEDITOR.dom.domObject.prototype = (function()
 {\r
        var customData = {};\r
 \r
+       CKEDITOR.on( 'reset', function()\r
+               {\r
+                       customData = {};\r
+               });\r
+\r
        /**\r
         * Determines whether the specified object is equal to the current object.\r
         * @name CKEDITOR.dom.domObject.prototype.equals\r
@@ -181,6 +206,9 @@ CKEDITOR.dom.domObject.prototype = (function()
                return dataSlot && dataSlot[ key ];\r
        };\r
 \r
+       /**\r
+        * @name CKEDITOR.dom.domObject.prototype.removeCustomData\r
+        */\r
        domObjectProto.removeCustomData = function( key )\r
        {\r
                var expandoNumber = this.$._cke_expando,\r
@@ -193,6 +221,25 @@ CKEDITOR.dom.domObject.prototype = (function()
                return retval || null;\r
        };\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
        {\r
                return this.$._cke_expando || ( this.$._cke_expando = CKEDITOR.tools.getNextNumber() );\r