/*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
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.$.detachEvent )\r
+ this.$.detachEvent( 'on' + eventName, listener );\r
+ else if ( this.$.removeEventListener )\r
+ this.$.removeEventListener( eventName, listener, false );\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
* Sets a data slot value for this object. These values are shared by all\r
* instances pointing to that same DOM object.\r
+ * <strong>Note:</strong> The created data slot is only guarantied to be available on this unique dom node,\r
+ * thus any wish to continue access it from other element clones (either created by clone node or from innerHtml)\r
+ * will fail, for such usage, please use {@link CKEDITOR.dom.element::setAttribute} instead.\r
* @name CKEDITOR.dom.domObject.prototype.setCustomData\r
* @function\r
* @param {String} key A key used to identify the data slot.\r
*/\r
domObjectProto.getCustomData = function( key )\r
{\r
- var expandoNumber = this.$._cke_expando,\r
+ var expandoNumber = this.$[ 'data-cke-expando' ],\r
dataSlot = expandoNumber && customData[ expandoNumber ];\r
\r
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
+ var expandoNumber = this.$[ 'data-cke-expando' ],\r
dataSlot = expandoNumber && customData[ expandoNumber ],\r
retval = dataSlot && dataSlot[ key ];\r
\r
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.$[ 'data-cke-expando' ];\r
+ expandoNumber && delete customData[ expandoNumber ];\r
+ };\r
+\r
+ /**\r
+ * Gets an ID that can be used to identiquely identify this DOM object in\r
+ * the running session.\r
+ * @name CKEDITOR.dom.domObject.prototype.getUniqueId\r
+ * @function\r
+ * @returns {Number} A unique ID.\r
+ */\r
domObjectProto.getUniqueId = function()\r
{\r
- return this.$._cke_expando || ( this.$._cke_expando = CKEDITOR.tools.getNextNumber() );\r
+ return this.$[ 'data-cke-expando' ] || ( this.$[ 'data-cke-expando' ] = CKEDITOR.tools.getNextNumber() );\r
};\r
\r
// Implement CKEDITOR.event.\r