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