Ticket #3266: 3266.patch

File 3266.patch, 5.1 KB (added by Frederico Caldeira Knabben, 11 years ago)
  • _source/core/dom/domobject.js

     
    2929                 * alert( element.$.nodeType );  // "1"
    3030                 */
    3131                this.$ = nativeDomObject;
    32 
    33                 // Get the main private function from the custom data. Create it if not
    34                 // defined.
    35                 if ( !( this._ = this.getCustomData( '_' ) ) )
    36                         this.setCustomData( '_', ( this._ = {} ) );
    37 
    38                 // Call the base event constructor.
    39                 if ( !this._.events )
    40                         CKEDITOR.event.call( this );
    4132        }
    4233};
    4334
     
    6051
    6152        return /** @lends CKEDITOR.dom.domObject.prototype */ {
    6253
     54                getPrivate : function()
     55                {
     56                        var priv;
     57
     58                        // Get the main private function from the custom data. Create it if not
     59                        // defined.
     60                        if ( !( priv = this.getCustomData( '_' ) ) )
     61                                this.setCustomData( '_', ( priv = {} ) );
     62                       
     63                        return priv;
     64                },
     65
    6366                /** @ignore */
    6467                on  : function( eventName )
    6568                {
     
    196199        };
    197200
    198201        // Implement CKEDITOR.event.
    199         CKEDITOR.event.implementOn( domObjectProto, true );
     202        CKEDITOR.event.implementOn( domObjectProto );
    200203
    201204})( CKEDITOR.dom.domObject.prototype );
  • _source/core/event.js

     
    1717         * @example
    1818         */
    1919        CKEDITOR.event = function()
    20         {
    21                 //In case of preserving existed events
    22                 var preExistedEvents = this._   && this._.events;
    23                 if( !preExistedEvents )
    24                         ( this._ || ( this._ = {} ) ).events = {};
    25         };
     20        {};
    2621
    2722        /**
    2823         * Implements the {@link CKEDITOR.event} features in an object.
    2924         * @param {Object} targetObject The object in which implement the features.
    30          * @param {Boolean} isTargetPrototype If the target is a prototype of
    31          *            constructor, the internal 'events' object will not be copied,
    32          *            which should be composed by the constructor itself.
    3325         * @example
    3426         * var myObject = { message : 'Example' };
    3527         * <b>CKEDITOR.event.implementOn( myObject }</b>;
     
    3931         *     });
    4032         * myObject.fire( 'testEvent' );
    4133         */
    42         CKEDITOR.event.implementOn = function( targetObject , isTargetPrototype)
     34        CKEDITOR.event.implementOn = function( targetObject, isTargetPrototype )
    4335        {
    44                 if( !isTargetPrototype )
    45                         CKEDITOR.event.call( targetObject );
     36                var eventProto = CKEDITOR.event.prototype;
    4637
    47                 for ( var prop in CKEDITOR.event.prototype )
     38                for ( var prop in eventProto )
    4839                {
    49                         (function(){
    50 
    51                                 var property = prop;
    52 
    53                                 if ( targetObject[ property ] == undefined )
    54                                         targetObject[ property ] = isTargetPrototype?
    55                                         function()
    56                                         {
    57                                                 //pre-setup events model
    58                                                 if( ! ( this._ && this._.events ) )
    59                                                         CKEDITOR.event.call( this );
    60 
    61                                                 ( this[ property ] = CKEDITOR.event.prototype[ property ] )
    62                                                         .apply( this, arguments );
    63                                         } :
    64                                         CKEDITOR.event.prototype[ property ];
    65                         })();
     40                        if ( targetObject[ prop ] == undefined )
     41                                targetObject[ prop ] = eventProto[ prop ];
    6642                }
    6743        };
    6844
    6945        CKEDITOR.event.prototype = (function()
    7046        {
     47                // Returns the private events object for a given object.
     48                var getPrivate = function( obj )
     49                {
     50                        var _ = ( obj.getPrivate && obj.getPrivate() ) || obj._ || ( obj._ = {} );
     51                        return _.events || ( _.events = {} );
     52                };
     53
    7154                var eventEntry = function( eventName )
    7255                {
    7356                        this.name = eventName;
    7457                        this.listeners = [];
    7558                };
    76 
     59               
    7760                eventEntry.prototype =
    7861                {
    7962                        // Get the listener index for a specified function.
     
    128111                        on : function( eventName, listenerFunction, scopeObj, listenerData, priority )
    129112                        {
    130113                                // Get the event entry (create it if needed).
    131                                 var event = this._.events[ eventName ] || ( this._.events[ eventName ] = new eventEntry( eventName ) );
     114                                var events = getPrivate( this ),
     115                                        event = events[ eventName ] || ( events[ eventName ] = new eventEntry( eventName ) );
    132116
    133117                                if ( event.getListenerIndex( listenerFunction ) < 0 )
    134118                                {
     
    232216                                return function( eventName, data, editor )
    233217                                {
    234218                                        // Get the event entry.
    235                                         var event = this._.events[ eventName ];
     219                                        var event = getPrivate( this )[ eventName ];
    236220
    237221                                        // Save the previous stopped and cancelled states. We may
    238222                                        // be nesting fire() calls.
     
    302286                        fireOnce : function( eventName, data, editor )
    303287                        {
    304288                                var ret = this.fire( eventName, data, editor );
    305                                 delete this._.events[ eventName ];
     289                                delete getPrivate( this )[ eventName ];
    306290                                return ret;
    307291                        },
    308292
     
    322306                        removeListener : function( eventName, listenerFunction )
    323307                        {
    324308                                // Get the event entry.
    325                                 var event = this._.events[ eventName ];
     309                                var event = getPrivate( this )[ eventName ];
    326310
    327311                                if ( event )
    328312                                {
     
    343327                         */
    344328                        hasListeners : function( eventName )
    345329                        {
    346                                 var event = this._.events[ eventName ];
     330                                var event = getPrivate( this )[ eventName ];
    347331                                return ( event && event.listeners.length > 0 ) ;
    348332                        }
    349333                };
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy