src/cm/media/js/lib/yui/yui_3.0.0b1/build/event-simulate/event-simulate.js
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0b1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('event-simulate', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * Synthetic DOM events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * @module event-simulate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
//shortcuts
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
var L   = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
    array       = Y.Array,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
    isFunction  = L.isFunction,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    isString    = L.isString,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
    isBoolean   = L.isBoolean,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
    isObject    = L.isObject,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    isNumber    = L.isNumber,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    doc         = Y.config.doc,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    //mouse events supported
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    mouseEvents = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        click:      1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        dblclick:   1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        mouseover:  1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        mouseout:   1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        mousedown:  1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        mouseup:    1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        mousemove:  1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    //key events supported
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    keyEvents   = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        keydown:    1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        keyup:      1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        keypress:   1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
 * Note: Intentionally not for YUIDoc generation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
 * Simulates a key event using the given event information to populate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
 * the generated event object. This method does browser-equalizing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
 * calculations to account for differences in the DOM and IE event models
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
 * as well as different browser quirks. Note: keydown causes Safari 2.x to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
 * crash.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
 * @method simulateKeyEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
 * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
 * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
 * @param {HTMLElement} target The target of the given event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
 * @param {String} type The type of event to fire. This can be any one of
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
 *      the following: keyup, keydown, and keypress.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
 *      bubbled up. DOM Level 3 specifies that all key events bubble by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
 *      default. The default is true.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
 *      canceled using preventDefault(). DOM Level 3 specifies that all
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
 *      key events can be cancelled. The default 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
 *      is true.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
 * @param {Window} view (Optional) The view containing the target. This is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
 *      typically the window object. The default is window.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
 * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
 * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
 * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
 * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
 * @param {int} keyCode (Optional) The code for the key that is in use. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
 *      The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
 * @param {int} charCode (Optional) The Unicode code for the character
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
 *      associated with the key being used. The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
function simulateKeyEvent(target /*:HTMLElement*/, type /*:String*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
                             bubbles /*:Boolean*/,  cancelable /*:Boolean*/,    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                             view /*:Window*/,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
                             ctrlKey /*:Boolean*/,    altKey /*:Boolean*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
                             shiftKey /*:Boolean*/,   metaKey /*:Boolean*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
                             keyCode /*:int*/,        charCode /*:int*/) /*:Void*/                             
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
    //check target    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
    if (!target){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        Y.error("simulateKeyEvent(): Invalid target.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    //check event type
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
    if (isString(type)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
        type = type.toLowerCase();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        switch(type){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
            case "textevent": //DOM Level 3
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                type = "keypress";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
            case "keyup":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
            case "keydown":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
            case "keypress":
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
            default:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
                Y.error("simulateKeyEvent(): Event type '" + type + "' not supported.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
        Y.error("simulateKeyEvent(): Event type must be a string.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
    //setup default values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
    if (!isBoolean(bubbles)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
        bubbles = true; //all key events bubble
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
    if (!isBoolean(cancelable)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        cancelable = true; //all key events can be cancelled
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    if (!isObject(view)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
        view = window; //view is typically window
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
    if (!isBoolean(ctrlKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
        ctrlKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    if (!isBoolean(altKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        altKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
    if (!isBoolean(shiftKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
        shiftKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
    if (!isBoolean(metaKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
        metaKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
    if (!isNumber(keyCode)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
        keyCode = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
    if (!isNumber(charCode)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
        charCode = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
    //try to create a mouse event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
    var customEvent /*:MouseEvent*/ = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    //check for DOM-compliant browsers first
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
    if (isFunction(doc.createEvent)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
        try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
            //try to create key event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
            customEvent = doc.createEvent("KeyEvents");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
            /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
             * Interesting problem: Firefox implemented a non-standard
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
             * version of initKeyEvent() based on DOM Level 2 specs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
             * Key event was removed from DOM Level 2 and re-introduced
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
             * in DOM Level 3 with a different interface. Firefox is the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
             * only browser with any implementation of Key Events, so for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
             * now, assume it's Firefox if the above line doesn't error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
            // @TODO: Decipher between Firefox's implementation and a correct one.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
            customEvent.initKeyEvent(type, bubbles, cancelable, view, ctrlKey,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
                altKey, shiftKey, metaKey, keyCode, charCode);       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        } catch (ex /*:Error*/){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
            /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
             * If it got here, that means key events aren't officially supported. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
             * Safari/WebKit is a real problem now. WebKit 522 won't let you
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
             * set keyCode, charCode, or other properties if you use a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
             * UIEvent, so we first must try to create a generic event. The
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
             * fun part is that this will throw an error on Safari 2.x. The
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
             * end result is that we need another try...catch statement just to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
             * deal with this mess.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
            try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
                //try to create generic event - will fail in Safari 2.x
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
                customEvent = doc.createEvent("Events");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
            } catch (uierror /*:Error*/){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
                //the above failed, so create a UIEvent for Safari 2.x
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
                customEvent = doc.createEvent("UIEvents");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
            } finally {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                customEvent.initEvent(type, bubbles, cancelable);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
                //initialize
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
                customEvent.view = view;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
                customEvent.altKey = altKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
                customEvent.ctrlKey = ctrlKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
                customEvent.shiftKey = shiftKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
                customEvent.metaKey = metaKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
                customEvent.keyCode = keyCode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
                customEvent.charCode = charCode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
            }          
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
         
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        //fire the event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
        target.dispatchEvent(customEvent);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
    } else if (isObject(doc.createEventObject)){ //IE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
        //create an IE event object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
        customEvent = doc.createEventObject();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        //assign available properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
        customEvent.bubbles = bubbles;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
        customEvent.cancelable = cancelable;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
        customEvent.view = view;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
        customEvent.ctrlKey = ctrlKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
        customEvent.altKey = altKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
        customEvent.shiftKey = shiftKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
        customEvent.metaKey = metaKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
         * IE doesn't support charCode explicitly. CharCode should
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
         * take precedence over any keyCode value for accurate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
         * representation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
        customEvent.keyCode = (charCode > 0) ? charCode : keyCode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
        //fire the event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
        target.fireEvent("on" + type, customEvent);  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
        Y.error("simulateKeyEvent(): No event simulation framework present.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
 * Note: Intentionally not for YUIDoc generation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
 * Simulates a mouse event using the given event information to populate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
 * the generated event object. This method does browser-equalizing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
 * calculations to account for differences in the DOM and IE event models
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
 * as well as different browser quirks.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
 * @method simulateMouseEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
 * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
 * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
 * @param {HTMLElement} target The target of the given event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
 * @param {String} type The type of event to fire. This can be any one of
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
 *      the following: click, dblclick, mousedown, mouseup, mouseout,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
 *      mouseover, and mousemove.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
 *      bubbled up. DOM Level 2 specifies that all mouse events bubble by
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
 *      default. The default is true.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
 *      canceled using preventDefault(). DOM Level 2 specifies that all
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
 *      mouse events except mousemove can be cancelled. The default 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
 *      is true for all events except mousemove, for which the default 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
 *      is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
 * @param {Window} view (Optional) The view containing the target. This is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
 *      typically the window object. The default is window.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
 * @param {int} detail (Optional) The number of times the mouse button has
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
 *      been used. The default value is 1.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
 * @param {int} screenX (Optional) The x-coordinate on the screen at which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
 *      point the event occured. The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
 * @param {int} screenY (Optional) The y-coordinate on the screen at which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
 *      point the event occured. The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
 * @param {int} clientX (Optional) The x-coordinate on the client at which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
 *      point the event occured. The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
 * @param {int} clientY (Optional) The y-coordinate on the client at which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
 *      point the event occured. The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
 * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
 * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
 * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
 * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
 *      is pressed while the event is firing. The default is false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
 * @param {int} button (Optional) The button being pressed while the event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
 *      is executing. The value should be 0 for the primary mouse button
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
 *      (typically the left button), 1 for the terciary mouse button
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
 *      (typically the middle button), and 2 for the secondary mouse button
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
 *      (typically the right button). The default is 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
 * @param {HTMLElement} relatedTarget (Optional) For mouseout events,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
 *      this is the element that the mouse has moved to. For mouseover
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
 *      events, this is the element that the mouse has moved from. This
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
 *      argument is ignored for all other events. The default is null.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
function simulateMouseEvent(target /*:HTMLElement*/, type /*:String*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                               bubbles /*:Boolean*/,  cancelable /*:Boolean*/,    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
                               view /*:Window*/,        detail /*:int*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
                               screenX /*:int*/,        screenY /*:int*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
                               clientX /*:int*/,        clientY /*:int*/,       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
                               ctrlKey /*:Boolean*/,    altKey /*:Boolean*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
                               shiftKey /*:Boolean*/,   metaKey /*:Boolean*/, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
                               button /*:int*/,         relatedTarget /*:HTMLElement*/) /*:Void*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
{
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
    //check target   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
    if (!target){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
        Y.error("simulateMouseEvent(): Invalid target.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
    //check event type
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
    if (isString(type)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
        type = type.toLowerCase();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
        //make sure it's a supported mouse event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
        if (!mouseEvents[type]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
            Y.error("simulateMouseEvent(): Event type '" + type + "' not supported.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
        Y.error("simulateMouseEvent(): Event type must be a string.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
    //setup default values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
    if (!isBoolean(bubbles)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
        bubbles = true; //all mouse events bubble
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
    if (!isBoolean(cancelable)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
        cancelable = (type != "mousemove"); //mousemove is the only one that can't be cancelled
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
    if (!isObject(view)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
        view = window; //view is typically window
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
    if (!isNumber(detail)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
        detail = 1;  //number of mouse clicks must be at least one
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
    if (!isNumber(screenX)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
        screenX = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
    if (!isNumber(screenY)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
        screenY = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
    if (!isNumber(clientX)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
        clientX = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
    if (!isNumber(clientY)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
        clientY = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
    if (!isBoolean(ctrlKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
        ctrlKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
    if (!isBoolean(altKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
        altKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
    if (!isBoolean(shiftKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
        shiftKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
    if (!isBoolean(metaKey)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
        metaKey = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
    if (!isNumber(button)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
        button = 0; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
    //try to create a mouse event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
    var customEvent /*:MouseEvent*/ = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
    //check for DOM-compliant browsers first
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
    if (isFunction(doc.createEvent)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
        customEvent = doc.createEvent("MouseEvents");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
        //Safari 2.x (WebKit 418) still doesn't implement initMouseEvent()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
        if (customEvent.initMouseEvent){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
            customEvent.initMouseEvent(type, bubbles, cancelable, view, detail,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
                                 screenX, screenY, clientX, clientY, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
                                 ctrlKey, altKey, shiftKey, metaKey, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
                                 button, relatedTarget);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
        } else { //Safari
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
            //the closest thing available in Safari 2.x is UIEvents
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
            customEvent = doc.createEvent("UIEvents");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
            customEvent.initEvent(type, bubbles, cancelable);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
            customEvent.view = view;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
            customEvent.detail = detail;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
            customEvent.screenX = screenX;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
            customEvent.screenY = screenY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
            customEvent.clientX = clientX;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
            customEvent.clientY = clientY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
            customEvent.ctrlKey = ctrlKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
            customEvent.altKey = altKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
            customEvent.metaKey = metaKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
            customEvent.shiftKey = shiftKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
            customEvent.button = button;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
            customEvent.relatedTarget = relatedTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
         * Check to see if relatedTarget has been assigned. Firefox
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
         * versions less than 2.0 don't allow it to be assigned via
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
         * initMouseEvent() and the property is readonly after event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
         * creation, so in order to keep YAHOO.util.getRelatedTarget()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
         * working, assign to the IE proprietary toElement property
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
         * for mouseout event and fromElement property for mouseover
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
         * event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
        if (relatedTarget && !customEvent.relatedTarget){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
            if (type == "mouseout"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
                customEvent.toElement = relatedTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
            } else if (type == "mouseover"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
                customEvent.fromElement = relatedTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
        //fire the event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
        target.dispatchEvent(customEvent);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
    } else if (isObject(doc.createEventObject)){ //IE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
        //create an IE event object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
        customEvent = doc.createEventObject();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
        //assign available properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
        customEvent.bubbles = bubbles;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
        customEvent.cancelable = cancelable;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
        customEvent.view = view;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
        customEvent.detail = detail;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
        customEvent.screenX = screenX;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
        customEvent.screenY = screenY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
        customEvent.clientX = clientX;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
        customEvent.clientY = clientY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
        customEvent.ctrlKey = ctrlKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
        customEvent.altKey = altKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
        customEvent.metaKey = metaKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
        customEvent.shiftKey = shiftKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
        //fix button property for IE's wacky implementation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
        switch(button){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
            case 0:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
                customEvent.button = 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
            case 1:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
                customEvent.button = 4;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
            case 2:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
                //leave as is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
                break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
            default:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
                customEvent.button = 0;                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
        }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
         * Have to use relatedTarget because IE won't allow assignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
         * to toElement or fromElement on generic events. This keeps
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
         * YAHOO.util.customEvent.getRelatedTarget() functional.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
        customEvent.relatedTarget = relatedTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
        //fire the event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
        target.fireEvent("on" + type, customEvent);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
        Y.error("simulateMouseEvent(): No event simulation framework present.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
 * Simulates the event with the given name on a target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
 * @param {HTMLElement} target The DOM element that's the target of the event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
 * @param {String} type The type of event to simulate (i.e., "click").
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
 * @param {Object} options (Optional) Extra options to copy onto the event object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
 * @return {void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
 * @method simulate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
 * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
Y.Event.simulate = function(target, type, options){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
    options = options || {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
    if (mouseEvents[type]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
        simulateMouseEvent(target, type, options.bubbles,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
            options.cancelable, options.view, options.detail, options.screenX,        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
            options.screenY, options.clientX, options.clientY, options.ctrlKey,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
            options.altKey, options.shiftKey, options.metaKey, options.button,         
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
            options.relatedTarget);        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
    } else if (keyEvents[type]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
        simulateKeyEvent(target, type, options.bubbles,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
            options.cancelable, options.view, options.ctrlKey,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
            options.altKey, options.shiftKey, options.metaKey, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
            options.keyCode, options.charCode);     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
        Y.error("simulate(): Event '" + type + "' can't be simulated.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
 * @TODO: focus(), blur(), submit()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
}, '3.0.0b1' );