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
{\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
};\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