X-Git-Url: https://scm.cri.ensmp.fr/git/ckeditor.git/blobdiff_plain/e11f66eb655db8339a2d9b197b89f6c3b26099e1..579f65bc95a773bc6f8da75f6849ea49f365368b:/skins/ckeditor/_source/core/event.js diff --git a/skins/ckeditor/_source/core/event.js b/skins/ckeditor/_source/core/event.js deleted file mode 100644 index fa19060..0000000 --- a/skins/ckeditor/_source/core/event.js +++ /dev/null @@ -1,342 +0,0 @@ -/* -Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.html or http://ckeditor.com/license -*/ - -/** - * @fileOverview Defines the {@link CKEDITOR.event} class, which serves as the - * base for classes and objects that require event handling features. - */ - -if ( !CKEDITOR.event ) -{ - /** - * Creates an event class instance. This constructor is rearely used, being - * the {@link #.implementOn} function used in class prototypes directly - * instead. - * @class This is a base class for classes and objects that require event - * handling features.
- *
- * Do not confuse this class with {@link CKEDITOR.dom.event} which is - * instead used for DOM events. The CKEDITOR.event class implements the - * internal event system used by the CKEditor to fire API related events. - * @example - */ - CKEDITOR.event = function() - {}; - - /** - * Implements the {@link CKEDITOR.event} features in an object. - * @param {Object} targetObject The object into which implement the features. - * @example - * var myObject = { message : 'Example' }; - * CKEDITOR.event.implementOn( myObject }; - * myObject.on( 'testEvent', function() - * { - * alert( this.message ); // "Example" - * }); - * myObject.fire( 'testEvent' ); - */ - CKEDITOR.event.implementOn = function( targetObject ) - { - var eventProto = CKEDITOR.event.prototype; - - for ( var prop in eventProto ) - { - if ( targetObject[ prop ] == undefined ) - targetObject[ prop ] = eventProto[ prop ]; - } - }; - - CKEDITOR.event.prototype = (function() - { - // Returns the private events object for a given object. - var getPrivate = function( obj ) - { - var _ = ( obj.getPrivate && obj.getPrivate() ) || obj._ || ( obj._ = {} ); - return _.events || ( _.events = {} ); - }; - - var eventEntry = function( eventName ) - { - this.name = eventName; - this.listeners = []; - }; - - eventEntry.prototype = - { - // Get the listener index for a specified function. - // Returns -1 if not found. - getListenerIndex : function( listenerFunction ) - { - for ( var i = 0, listeners = this.listeners ; i < listeners.length ; i++ ) - { - if ( listeners[i].fn == listenerFunction ) - return i; - } - return -1; - } - }; - - return /** @lends CKEDITOR.event.prototype */ { - /** - * Registers a listener to a specific event in the current object. - * @param {String} eventName The event name to which listen. - * @param {Function} listenerFunction The function listening to the - * event. A single {@link CKEDITOR.eventInfo} object instanced - * is passed to this function containing all the event data. - * @param {Object} [scopeObj] The object used to scope the listener - * call (the this object. If omitted, the current object is used. - * @param {Object} [listenerData] Data to be sent as the - * {@link CKEDITOR.eventInfo#listenerData} when calling the - * listener. - * @param {Number} [priority] The listener priority. Lower priority - * listeners are called first. Listeners with the same priority - * value are called in registration order. Defaults to 10. - * @example - * someObject.on( 'someEvent', function() - * { - * alert( this == someObject ); // "true" - * }); - * @example - * someObject.on( 'someEvent', function() - * { - * alert( this == anotherObject ); // "true" - * } - * , anotherObject ); - * @example - * someObject.on( 'someEvent', function( event ) - * { - * alert( event.listenerData ); // "Example" - * } - * , null, 'Example' ); - * @example - * someObject.on( 'someEvent', function() { ... } ); // 2nd called - * someObject.on( 'someEvent', function() { ... }, null, null, 100 ); // 3rd called - * someObject.on( 'someEvent', function() { ... }, null, null, 1 ); // 1st called - */ - on : function( eventName, listenerFunction, scopeObj, listenerData, priority ) - { - // Get the event entry (create it if needed). - var events = getPrivate( this ), - event = events[ eventName ] || ( events[ eventName ] = new eventEntry( eventName ) ); - - if ( event.getListenerIndex( listenerFunction ) < 0 ) - { - // Get the listeners. - var listeners = event.listeners; - - // Fill the scope. - if ( !scopeObj ) - scopeObj = this; - - // Default the priority, if needed. - if ( isNaN( priority ) ) - priority = 10; - - var me = this; - - // Create the function to be fired for this listener. - var listenerFirer = function( editor, publisherData, stopFn, cancelFn ) - { - var ev = - { - name : eventName, - sender : this, - editor : editor, - data : publisherData, - listenerData : listenerData, - stop : stopFn, - cancel : cancelFn, - removeListener : function() - { - me.removeListener( eventName, listenerFunction ); - } - }; - - listenerFunction.call( scopeObj, ev ); - - return ev.data; - }; - listenerFirer.fn = listenerFunction; - listenerFirer.priority = priority; - - // Search for the right position for this new listener, based on its - // priority. - for ( var i = listeners.length - 1 ; i >= 0 ; i-- ) - { - // Find the item which should be before the new one. - if ( listeners[ i ].priority <= priority ) - { - // Insert the listener in the array. - listeners.splice( i + 1, 0, listenerFirer ); - return; - } - } - - // If no position has been found (or zero length), put it in - // the front of list. - listeners.unshift( listenerFirer ); - } - }, - - /** - * Fires an specific event in the object. All registered listeners are - * called at this point. - * @function - * @param {String} eventName The event name to fire. - * @param {Object} [data] Data to be sent as the - * {@link CKEDITOR.eventInfo#data} when calling the - * listeners. - * @param {CKEDITOR.editor} [editor] The editor instance to send as the - * {@link CKEDITOR.eventInfo#editor} when calling the - * listener. - * @returns {Boolean|Object} A booloan indicating that the event is to be - * canceled, or data returned by one of the listeners. - * @example - * someObject.on( 'someEvent', function() { ... } ); - * someObject.on( 'someEvent', function() { ... } ); - * someObject.fire( 'someEvent' ); // both listeners are called - * @example - * someObject.on( 'someEvent', function( event ) - * { - * alert( event.data ); // "Example" - * }); - * someObject.fire( 'someEvent', 'Example' ); - */ - fire : (function() - { - // Create the function that marks the event as stopped. - var stopped = false; - var stopEvent = function() - { - stopped = true; - }; - - // Create the function that marks the event as canceled. - var canceled = false; - var cancelEvent = function() - { - canceled = true; - }; - - return function( eventName, data, editor ) - { - // Get the event entry. - var event = getPrivate( this )[ eventName ]; - - // Save the previous stopped and cancelled states. We may - // be nesting fire() calls. - var previousStopped = stopped, - previousCancelled = canceled; - - // Reset the stopped and canceled flags. - stopped = canceled = false; - - if ( event ) - { - var listeners = event.listeners; - - if ( listeners.length ) - { - // As some listeners may remove themselves from the - // event, the original array length is dinamic. So, - // let's make a copy of all listeners, so we are - // sure we'll call all of them. - listeners = listeners.slice( 0 ); - - // Loop through all listeners. - for ( var i = 0 ; i < listeners.length ; i++ ) - { - // Call the listener, passing the event data. - var retData = listeners[i].call( this, editor, data, stopEvent, cancelEvent ); - - if ( typeof retData != 'undefined' ) - data = retData; - - // No further calls is stopped or canceled. - if ( stopped || canceled ) - break; - } - } - } - - var ret = canceled || ( typeof data == 'undefined' ? false : data ); - - // Restore the previous stopped and canceled states. - stopped = previousStopped; - canceled = previousCancelled; - - return ret; - }; - })(), - - /** - * Fires an specific event in the object, releasing all listeners - * registered to that event. The same listeners are not called again on - * successive calls of it or of {@link #fire}. - * @param {String} eventName The event name to fire. - * @param {Object} [data] Data to be sent as the - * {@link CKEDITOR.eventInfo#data} when calling the - * listeners. - * @param {CKEDITOR.editor} [editor] The editor instance to send as the - * {@link CKEDITOR.eventInfo#editor} when calling the - * listener. - * @returns {Boolean|Object} A booloan indicating that the event is to be - * canceled, or data returned by one of the listeners. - * @example - * someObject.on( 'someEvent', function() { ... } ); - * someObject.fire( 'someEvent' ); // above listener called - * someObject.fireOnce( 'someEvent' ); // above listener called - * someObject.fire( 'someEvent' ); // no listeners called - */ - fireOnce : function( eventName, data, editor ) - { - var ret = this.fire( eventName, data, editor ); - delete getPrivate( this )[ eventName ]; - return ret; - }, - - /** - * Unregisters a listener function from being called at the specified - * event. No errors are thrown if the listener has not been - * registered previously. - * @param {String} eventName The event name. - * @param {Function} listenerFunction The listener function to unregister. - * @example - * var myListener = function() { ... }; - * someObject.on( 'someEvent', myListener ); - * someObject.fire( 'someEvent' ); // myListener called - * someObject.removeListener( 'someEvent', myListener ); - * someObject.fire( 'someEvent' ); // myListener not called - */ - removeListener : function( eventName, listenerFunction ) - { - // Get the event entry. - var event = getPrivate( this )[ eventName ]; - - if ( event ) - { - var index = event.getListenerIndex( listenerFunction ); - if ( index >= 0 ) - event.listeners.splice( index, 1 ); - } - }, - - /** - * Checks if there is any listener registered to a given event. - * @param {String} eventName The event name. - * @example - * var myListener = function() { ... }; - * someObject.on( 'someEvent', myListener ); - * alert( someObject.hasListeners( 'someEvent' ) ); // "true" - * alert( someObject.hasListeners( 'noEvent' ) ); // "false" - */ - hasListeners : function( eventName ) - { - var event = getPrivate( this )[ eventName ]; - return ( event && event.listeners.length > 0 ) ; - } - }; - })(); -}