src/cm/media/js/lib/yui/yui_3.10.3/build/event-simulate/event-simulate-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('event-simulate', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
 * Simulate user interaction by generating native DOM events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
 * @module event-simulate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
 * @requires event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
//shortcuts
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
var L   = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    isFunction  = L.isFunction,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    isString    = L.isString,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    isBoolean   = L.isBoolean,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
    isObject    = L.isObject,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    isNumber    = L.isNumber,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
    //mouse events supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    mouseEvents = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        click:      1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
        dblclick:   1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
        mouseover:  1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
        mouseout:   1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        mousedown:  1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        mouseup:    1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        mousemove:  1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        contextmenu:1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    msPointerEvents = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
        MSPointerOver:  1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        MSPointerOut:   1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        MSPointerDown:  1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
        MSPointerUp:    1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
        MSPointerMove:  1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    //key events supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    keyEvents   = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
        keydown:    1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        keyup:      1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
        keypress:   1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    //HTML events supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    uiEvents  = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
        submit:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
        blur:       1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        change:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
        focus:      1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
        resize:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
        scroll:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
        select:     1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    //events that bubble by default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    bubbleEvents = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
        scroll:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        resize:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
        reset:      1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
        submit:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
        change:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
        select:     1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
        error:      1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
        abort:      1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    //touch events supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    touchEvents = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        touchstart: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        touchmove: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        touchend: 1, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
        touchcancel: 1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    gestureEvents = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
        gesturestart: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
        gesturechange: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        gestureend: 1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
//all key, mouse and touch events bubble
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
Y.mix(bubbleEvents, mouseEvents);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
Y.mix(bubbleEvents, keyEvents);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
Y.mix(bubbleEvents, touchEvents);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
 * Note: Intentionally not for YUIDoc generation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
 * Simulates a key event using the given event information to populate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
 * the generated event object. This method does browser-equalizing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
 * calculations to account for differences in the DOM and IE event models
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
 * as well as different browser quirks. Note: keydown causes Safari 2.x to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
 * crash.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
 * @method simulateKeyEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
 * @param {HTMLElement} target The target of the given event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
 * @param {String} type The type of event to fire. This can be any one of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
 *      the following: keyup, keydown, and keypress.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
 *      bubbled up. DOM Level 3 specifies that all key events bubble by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
 *      default. The default is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
 *      canceled using preventDefault(). DOM Level 3 specifies that all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
 *      key events can be cancelled. The default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
 *      is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
 * @param {Window} view (Optional) The view containing the target. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
 *      typically the window object. The default is window.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
 * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
 * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
 * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
 * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
 * @param {int} keyCode (Optional) The code for the key that is in use.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
 *      The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
 * @param {int} charCode (Optional) The Unicode code for the character
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
 *      associated with the key being used. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
function simulateKeyEvent(target /*:HTMLElement*/, type /*:String*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                             bubbles /*:Boolean*/,  cancelable /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
                             view /*:Window*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
                             ctrlKey /*:Boolean*/,    altKey /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
                             shiftKey /*:Boolean*/,   metaKey /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
                             keyCode /*:int*/,        charCode /*:int*/) /*:Void*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    //check target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    if (!target){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        Y.error("simulateKeyEvent(): Invalid target.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
    //check event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    if (isString(type)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        type = type.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        switch(type){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
            case "textevent": //DOM Level 3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
                type = "keypress";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
            case "keyup":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
            case "keydown":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            case "keypress":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                Y.error("simulateKeyEvent(): Event type '" + type + "' not supported.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        Y.error("simulateKeyEvent(): Event type must be a string.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    //setup default values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    if (!isBoolean(bubbles)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
        bubbles = true; //all key events bubble
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
    if (!isBoolean(cancelable)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
        cancelable = true; //all key events can be cancelled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    if (!isObject(view)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        view = Y.config.win; //view is typically window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    if (!isBoolean(ctrlKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        ctrlKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
    if (!isBoolean(altKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        altKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
    if (!isBoolean(shiftKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        shiftKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    if (!isBoolean(metaKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
        metaKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    if (!isNumber(keyCode)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
        keyCode = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    if (!isNumber(charCode)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
        charCode = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    //try to create a mouse event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    var customEvent /*:MouseEvent*/ = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
    //check for DOM-compliant browsers first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    if (isFunction(Y.config.doc.createEvent)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            //try to create key event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
            customEvent = Y.config.doc.createEvent("KeyEvents");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
            /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
             * Interesting problem: Firefox implemented a non-standard
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
             * version of initKeyEvent() based on DOM Level 2 specs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
             * Key event was removed from DOM Level 2 and re-introduced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
             * in DOM Level 3 with a different interface. Firefox is the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
             * only browser with any implementation of Key Events, so for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
             * now, assume it's Firefox if the above line doesn't error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
             */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            // @TODO: Decipher between Firefox's implementation and a correct one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            customEvent.initKeyEvent(type, bubbles, cancelable, view, ctrlKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                altKey, shiftKey, metaKey, keyCode, charCode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        } catch (ex /*:Error*/){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
            /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
             * If it got here, that means key events aren't officially supported.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
             * Safari/WebKit is a real problem now. WebKit 522 won't let you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
             * set keyCode, charCode, or other properties if you use a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
             * UIEvent, so we first must try to create a generic event. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
             * fun part is that this will throw an error on Safari 2.x. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
             * end result is that we need another try...catch statement just to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
             * deal with this mess.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
             */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
            try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
                //try to create generic event - will fail in Safari 2.x
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                customEvent = Y.config.doc.createEvent("Events");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
            } catch (uierror /*:Error*/){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                //the above failed, so create a UIEvent for Safari 2.x
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
                customEvent = Y.config.doc.createEvent("UIEvents");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
            } finally {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                customEvent.initEvent(type, bubbles, cancelable);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
                //initialize
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
                customEvent.view = view;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
                customEvent.altKey = altKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
                customEvent.ctrlKey = ctrlKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
                customEvent.shiftKey = shiftKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
                customEvent.metaKey = metaKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
                customEvent.keyCode = keyCode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
                customEvent.charCode = charCode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        target.dispatchEvent(customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    } else if (isObject(Y.config.doc.createEventObject)){ //IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
        //create an IE event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
        customEvent = Y.config.doc.createEventObject();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
        //assign available properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
        customEvent.bubbles = bubbles;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        customEvent.cancelable = cancelable;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
        customEvent.view = view;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
        customEvent.ctrlKey = ctrlKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        customEvent.altKey = altKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
        customEvent.shiftKey = shiftKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        customEvent.metaKey = metaKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
         * IE doesn't support charCode explicitly. CharCode should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
         * take precedence over any keyCode value for accurate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
         * representation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
        customEvent.keyCode = (charCode > 0) ? charCode : keyCode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        target.fireEvent("on" + type, customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
        Y.error("simulateKeyEvent(): No event simulation framework present.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
 * Note: Intentionally not for YUIDoc generation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
 * Simulates a mouse event using the given event information to populate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
 * the generated event object. This method does browser-equalizing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
 * calculations to account for differences in the DOM and IE event models
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
 * as well as different browser quirks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
 * @method simulateMouseEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
 * @param {HTMLElement} target The target of the given event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
 * @param {String} type The type of event to fire. This can be any one of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
 *      the following: click, dblclick, mousedown, mouseup, mouseout,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
 *      mouseover, and mousemove.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
 *      bubbled up. DOM Level 2 specifies that all mouse events bubble by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
 *      default. The default is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
 *      canceled using preventDefault(). DOM Level 2 specifies that all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
 *      mouse events except mousemove can be cancelled. The default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
 *      is true for all events except mousemove, for which the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
 *      is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
 * @param {Window} view (Optional) The view containing the target. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
 *      typically the window object. The default is window.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
 * @param {int} detail (Optional) The number of times the mouse button has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
 *      been used. The default value is 1.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
 * @param {int} screenX (Optional) The x-coordinate on the screen at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
 * @param {int} screenY (Optional) The y-coordinate on the screen at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
 * @param {int} clientX (Optional) The x-coordinate on the client at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
 * @param {int} clientY (Optional) The y-coordinate on the client at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
 * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
 * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
 * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
 * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
 * @param {int} button (Optional) The button being pressed while the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
 *      is executing. The value should be 0 for the primary mouse button
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
 *      (typically the left button), 1 for the terciary mouse button
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
 *      (typically the middle button), and 2 for the secondary mouse button
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
 *      (typically the right button). The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
 * @param {HTMLElement} relatedTarget (Optional) For mouseout events,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
 *      this is the element that the mouse has moved to. For mouseover
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
 *      events, this is the element that the mouse has moved from. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
 *      argument is ignored for all other events. The default is null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
function simulateMouseEvent(target /*:HTMLElement*/, type /*:String*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
                               bubbles /*:Boolean*/,  cancelable /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
                               view /*:Window*/,        detail /*:int*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
                               screenX /*:int*/,        screenY /*:int*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
                               clientX /*:int*/,        clientY /*:int*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
                               ctrlKey /*:Boolean*/,    altKey /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
                               shiftKey /*:Boolean*/,   metaKey /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
                               button /*:int*/,         relatedTarget /*:HTMLElement*/) /*:Void*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
    //check target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    if (!target){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
        Y.error("simulateMouseEvent(): Invalid target.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    if (isString(type)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        //make sure it's a supported mouse event or an msPointerEvent. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
        if (!mouseEvents[type.toLowerCase()] && !msPointerEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
            Y.error("simulateMouseEvent(): Event type '" + type + "' not supported.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
    } 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
    else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
        Y.error("simulateMouseEvent(): Event type must be a string.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
    //setup default values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    if (!isBoolean(bubbles)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        bubbles = true; //all mouse events bubble
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
    if (!isBoolean(cancelable)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
        cancelable = (type !== "mousemove"); //mousemove is the only one that can't be cancelled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    if (!isObject(view)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
        view = Y.config.win; //view is typically window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
    if (!isNumber(detail)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
        detail = 1;  //number of mouse clicks must be at least one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    if (!isNumber(screenX)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
        screenX = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
    if (!isNumber(screenY)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        screenY = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
    if (!isNumber(clientX)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        clientX = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
    if (!isNumber(clientY)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
        clientY = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    if (!isBoolean(ctrlKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
        ctrlKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    if (!isBoolean(altKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        altKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    if (!isBoolean(shiftKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
        shiftKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
    if (!isBoolean(metaKey)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
        metaKey = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
    if (!isNumber(button)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
        button = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
    relatedTarget = relatedTarget || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    //try to create a mouse event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    var customEvent /*:MouseEvent*/ = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
    //check for DOM-compliant browsers first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    if (isFunction(Y.config.doc.createEvent)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
        customEvent = Y.config.doc.createEvent("MouseEvents");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        //Safari 2.x (WebKit 418) still doesn't implement initMouseEvent()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
        if (customEvent.initMouseEvent){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
            customEvent.initMouseEvent(type, bubbles, cancelable, view, detail,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
                                 screenX, screenY, clientX, clientY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
                                 ctrlKey, altKey, shiftKey, metaKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
                                 button, relatedTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
        } else { //Safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
            //the closest thing available in Safari 2.x is UIEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
            customEvent = Y.config.doc.createEvent("UIEvents");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
            customEvent.initEvent(type, bubbles, cancelable);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
            customEvent.view = view;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
            customEvent.detail = detail;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
            customEvent.screenX = screenX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
            customEvent.screenY = screenY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
            customEvent.clientX = clientX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
            customEvent.clientY = clientY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
            customEvent.ctrlKey = ctrlKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
            customEvent.altKey = altKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
            customEvent.metaKey = metaKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
            customEvent.shiftKey = shiftKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
            customEvent.button = button;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
            customEvent.relatedTarget = relatedTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
        /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
         * Check to see if relatedTarget has been assigned. Firefox
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
         * versions less than 2.0 don't allow it to be assigned via
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
         * initMouseEvent() and the property is readonly after event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
         * creation, so in order to keep YAHOO.util.getRelatedTarget()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
         * working, assign to the IE proprietary toElement property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
         * for mouseout event and fromElement property for mouseover
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
         * event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
        if (relatedTarget && !customEvent.relatedTarget){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
            if (type === "mouseout"){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
                customEvent.toElement = relatedTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
            } else if (type === "mouseover"){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
                customEvent.fromElement = relatedTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
        target.dispatchEvent(customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
    } else if (isObject(Y.config.doc.createEventObject)){ //IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
        //create an IE event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
        customEvent = Y.config.doc.createEventObject();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
        //assign available properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
        customEvent.bubbles = bubbles;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
        customEvent.cancelable = cancelable;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
        customEvent.view = view;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
        customEvent.detail = detail;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
        customEvent.screenX = screenX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
        customEvent.screenY = screenY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        customEvent.clientX = clientX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        customEvent.clientY = clientY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        customEvent.ctrlKey = ctrlKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        customEvent.altKey = altKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
        customEvent.metaKey = metaKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
        customEvent.shiftKey = shiftKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
        //fix button property for IE's wacky implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
        switch(button){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
            case 0:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
                customEvent.button = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
            case 1:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
                customEvent.button = 4;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
            case 2:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
                //leave as is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
                customEvent.button = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
        /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
         * Have to use relatedTarget because IE won't allow assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
         * to toElement or fromElement on generic events. This keeps
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
         * YAHOO.util.customEvent.getRelatedTarget() functional.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
        customEvent.relatedTarget = relatedTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
        target.fireEvent("on" + type, customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
        Y.error("simulateMouseEvent(): No event simulation framework present.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
 * Note: Intentionally not for YUIDoc generation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
 * Simulates a UI event using the given event information to populate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
 * the generated event object. This method does browser-equalizing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
 * calculations to account for differences in the DOM and IE event models
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
 * as well as different browser quirks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
 * @method simulateHTMLEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
 * @param {HTMLElement} target The target of the given event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
 * @param {String} type The type of event to fire. This can be any one of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
 *      the following: click, dblclick, mousedown, mouseup, mouseout,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
 *      mouseover, and mousemove.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
 *      bubbled up. DOM Level 2 specifies that all mouse events bubble by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
 *      default. The default is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
 *      canceled using preventDefault(). DOM Level 2 specifies that all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
 *      mouse events except mousemove can be cancelled. The default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
 *      is true for all events except mousemove, for which the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
 *      is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
 * @param {Window} view (Optional) The view containing the target. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
 *      typically the window object. The default is window.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
 * @param {int} detail (Optional) The number of times the mouse button has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
 *      been used. The default value is 1.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
function simulateUIEvent(target /*:HTMLElement*/, type /*:String*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
                               bubbles /*:Boolean*/,  cancelable /*:Boolean*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
                               view /*:Window*/,        detail /*:int*/) /*:Void*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
{
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
    //check target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    if (!target){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
        Y.error("simulateUIEvent(): Invalid target.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    //check event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
    if (isString(type)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
        type = type.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
        //make sure it's a supported mouse event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
        if (!uiEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
            Y.error("simulateUIEvent(): Event type '" + type + "' not supported.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
        Y.error("simulateUIEvent(): Event type must be a string.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
    //try to create a mouse event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
    var customEvent = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
    //setup default values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    if (!isBoolean(bubbles)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
        bubbles = (type in bubbleEvents);  //not all events bubble
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
    if (!isBoolean(cancelable)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
        cancelable = (type === "submit"); //submit is the only one that can be cancelled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
    if (!isObject(view)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
        view = Y.config.win; //view is typically window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
    if (!isNumber(detail)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        detail = 1;  //usually not used but defaulted to this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    //check for DOM-compliant browsers first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
    if (isFunction(Y.config.doc.createEvent)){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
        //just a generic UI Event object is needed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
        customEvent = Y.config.doc.createEvent("UIEvents");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
        customEvent.initUIEvent(type, bubbles, cancelable, view, detail);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
        target.dispatchEvent(customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
    } else if (isObject(Y.config.doc.createEventObject)){ //IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
        //create an IE event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
        customEvent = Y.config.doc.createEventObject();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
        //assign available properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
        customEvent.bubbles = bubbles;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
        customEvent.cancelable = cancelable;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
        customEvent.view = view;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
        customEvent.detail = detail;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
        target.fireEvent("on" + type, customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
        Y.error("simulateUIEvent(): No event simulation framework present.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
 * (iOS only) This is for creating native DOM gesture events which only iOS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
 * v2.0+ is supporting.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
 * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
 * @method simulateGestureEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
 * @param {HTMLElement} target The target of the given event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
 * @param {String} type The type of event to fire. This can be any one of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
 *      the following: touchstart, touchmove, touchend, touchcancel.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
 *      bubbled up. DOM Level 2 specifies that all mouse events bubble by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
 *      default. The default is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
 *      canceled using preventDefault(). DOM Level 2 specifies that all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
 *      touch events except touchcancel can be cancelled. The default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
 *      is true for all events except touchcancel, for which the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
 *      is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
 * @param {Window} view (Optional) The view containing the target. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
 *      typically the window object. The default is window.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
 * @param {int} detail (Optional) Specifies some detail information about 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
 *      the event depending on the type of event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
 * @param {int} screenX (Optional) The x-coordinate on the screen at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
 * @param {int} screenY (Optional) The y-coordinate on the screen at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
 * @param {int} clientX (Optional) The x-coordinate on the client at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
 * @param {int} clientY (Optional) The y-coordinate on the client at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
 * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
 * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
 * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
 * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
 *      is pressed while the event is firing. The default is false. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
 * @param {float} scale (iOS v2+ only) The distance between two fingers 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
 *      since the start of an event as a multiplier of the initial distance. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
 *      The default value is 1.0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
 * @param {float} rotation (iOS v2+ only) The delta rotation since the start 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
 *      of an event, in degrees, where clockwise is positive and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
 *      counter-clockwise is negative. The default value is 0.0.   
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
function simulateGestureEvent(target, type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
    bubbles,            // boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
    cancelable,         // boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
    view,               // DOMWindow
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
    detail,             // long
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
    screenX, screenY,   // long
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
    clientX, clientY,   // long
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
    ctrlKey, altKey, shiftKey, metaKey, // boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
    scale,              // float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
    rotation            // float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
    var customEvent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
    if(!Y.UA.ios || Y.UA.ios<2.0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
        Y.error("simulateGestureEvent(): Native gesture DOM eventframe is not available in this platform.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    // check taget    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
    if (!target){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
        Y.error("simulateGestureEvent(): Invalid target.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
    //check event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    if (Y.Lang.isString(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
        type = type.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
        //make sure it's a supported touch event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
        if (!gestureEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
            Y.error("simulateTouchEvent(): Event type '" + type + "' not supported.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
        Y.error("simulateGestureEvent(): Event type must be a string.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
    // setup default values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
    if (!Y.Lang.isBoolean(bubbles)) { bubbles = true; } // bubble by default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
    if (!Y.Lang.isBoolean(cancelable)) { cancelable = true; } 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
    if (!Y.Lang.isObject(view))     { view = Y.config.win; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
    if (!Y.Lang.isNumber(detail))   { detail = 2; }     // usually not used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
    if (!Y.Lang.isNumber(screenX))  { screenX = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
    if (!Y.Lang.isNumber(screenY))  { screenY = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    if (!Y.Lang.isNumber(clientX))  { clientX = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
    if (!Y.Lang.isNumber(clientY))  { clientY = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
    if (!Y.Lang.isBoolean(ctrlKey)) { ctrlKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
    if (!Y.Lang.isBoolean(altKey))  { altKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
    if (!Y.Lang.isBoolean(shiftKey)){ shiftKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
    if (!Y.Lang.isBoolean(metaKey)) { metaKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
    if (!Y.Lang.isNumber(scale)){ scale = 1.0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
    if (!Y.Lang.isNumber(rotation)){ rotation = 0.0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
    customEvent = Y.config.doc.createEvent("GestureEvent");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
    customEvent.initGestureEvent(type, bubbles, cancelable, view, detail,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
        screenX, screenY, clientX, clientY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
        ctrlKey, altKey, shiftKey, metaKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
        target, scale, rotation);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
    target.dispatchEvent(customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
 * @method simulateTouchEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
 * @param {HTMLElement} target The target of the given event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
 * @param {String} type The type of event to fire. This can be any one of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
 *      the following: touchstart, touchmove, touchend, touchcancel.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
 * @param {Boolean} bubbles (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
 *      bubbled up. DOM Level 2 specifies that all mouse events bubble by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
 *      default. The default is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
 * @param {Boolean} cancelable (Optional) Indicates if the event can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
 *      canceled using preventDefault(). DOM Level 2 specifies that all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
 *      touch events except touchcancel can be cancelled. The default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
 *      is true for all events except touchcancel, for which the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
 *      is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
 * @param {Window} view (Optional) The view containing the target. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
 *      typically the window object. The default is window.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
 * @param {int} detail (Optional) Specifies some detail information about 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
 *      the event depending on the type of event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
 * @param {int} screenX (Optional) The x-coordinate on the screen at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
 * @param {int} screenY (Optional) The y-coordinate on the screen at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
 * @param {int} clientX (Optional) The x-coordinate on the client at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
 * @param {int} clientY (Optional) The y-coordinate on the client at which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
 *      point the event occured. The default is 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
 * @param {Boolean} ctrlKey (Optional) Indicates if one of the CTRL keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
 * @param {Boolean} altKey (Optional) Indicates if one of the ALT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
 * @param {Boolean} shiftKey (Optional) Indicates if one of the SHIFT keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
 *      is pressed while the event is firing. The default is false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
 * @param {Boolean} metaKey (Optional) Indicates if one of the META keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
 *      is pressed while the event is firing. The default is false. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
 * @param {TouchList} touches A collection of Touch objects representing 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
 *      all touches associated with this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
 * @param {TouchList} targetTouches A collection of Touch objects 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
 *      representing all touches associated with this target.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
 * @param {TouchList} changedTouches A collection of Touch objects 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
 *      representing all touches that changed in this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
 * @param {float} scale (iOS v2+ only) The distance between two fingers 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
 *      since the start of an event as a multiplier of the initial distance. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
 *      The default value is 1.0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
 * @param {float} rotation (iOS v2+ only) The delta rotation since the start 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
 *      of an event, in degrees, where clockwise is positive and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
 *      counter-clockwise is negative. The default value is 0.0.   
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
function simulateTouchEvent(target, type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
    bubbles,            // boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
    cancelable,         // boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
    view,               // DOMWindow
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
    detail,             // long
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
    screenX, screenY,   // long
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
    clientX, clientY,   // long
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
    ctrlKey, altKey, shiftKey, metaKey, // boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
    touches,            // TouchList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
    targetTouches,      // TouchList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
    changedTouches,     // TouchList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
    scale,              // float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
    rotation            // float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
    var customEvent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
    // check taget    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
    if (!target){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
        Y.error("simulateTouchEvent(): Invalid target.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
    //check event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
    if (Y.Lang.isString(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
        type = type.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
        //make sure it's a supported touch event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
        if (!touchEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
            Y.error("simulateTouchEvent(): Event type '" + type + "' not supported.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
        Y.error("simulateTouchEvent(): Event type must be a string.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
    // note that the caller is responsible to pass appropriate touch objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
    // check touch objects
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
    // Android(even 4.0) doesn't define TouchList yet
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
    /*if(type === 'touchstart' || type === 'touchmove') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
        if(!touches instanceof TouchList) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
            Y.error('simulateTouchEvent(): Invalid touches. It must be a TouchList');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
            if(touches.length === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
                Y.error('simulateTouchEvent(): No touch object found.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
    } else if(type === 'touchend') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
        if(!changedTouches instanceof TouchList) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
            Y.error('simulateTouchEvent(): Invalid touches. It must be a TouchList');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
            if(changedTouches.length === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
                Y.error('simulateTouchEvent(): No touch object found.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
    }*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
    if(type === 'touchstart' || type === 'touchmove') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
        if(touches.length === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
            Y.error('simulateTouchEvent(): No touch object in touches');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
    } else if(type === 'touchend') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
        if(changedTouches.length === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
            Y.error('simulateTouchEvent(): No touch object in changedTouches');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
    // setup default values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
    if (!Y.Lang.isBoolean(bubbles)) { bubbles = true; } // bubble by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
    if (!Y.Lang.isBoolean(cancelable)) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
        cancelable = (type !== "touchcancel"); // touchcancel is not cancelled 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    } 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
    if (!Y.Lang.isObject(view))     { view = Y.config.win; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
    if (!Y.Lang.isNumber(detail))   { detail = 1; } // usually not used. defaulted to # of touch objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
    if (!Y.Lang.isNumber(screenX))  { screenX = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
    if (!Y.Lang.isNumber(screenY))  { screenY = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
    if (!Y.Lang.isNumber(clientX))  { clientX = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
    if (!Y.Lang.isNumber(clientY))  { clientY = 0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
    if (!Y.Lang.isBoolean(ctrlKey)) { ctrlKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
    if (!Y.Lang.isBoolean(altKey))  { altKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
    if (!Y.Lang.isBoolean(shiftKey)){ shiftKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
    if (!Y.Lang.isBoolean(metaKey)) { metaKey = false; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
    if (!Y.Lang.isNumber(scale))    { scale = 1.0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
    if (!Y.Lang.isNumber(rotation)) { rotation = 0.0; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
    //check for DOM-compliant browsers first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
    if (Y.Lang.isFunction(Y.config.doc.createEvent)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
        if (Y.UA.android) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
            /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
                * Couldn't find android start version that supports touch event. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
                * Assumed supported(btw APIs broken till icecream sandwitch) 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
                * from the beginning.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
            if(Y.UA.android < 4.0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
                /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
                    * Touch APIs are broken in androids older than 4.0. We will use 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
                    * simulated touch apis for these versions. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
                    * App developer still can listen for touch events. This events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
                    * will be dispatched with touch event types.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
                    * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
                    * (Note) Used target for the relatedTarget. Need to verify if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
                    * it has a side effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
                */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
                customEvent = Y.config.doc.createEvent("MouseEvents");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
                customEvent.initMouseEvent(type, bubbles, cancelable, view, detail, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
                    screenX, screenY, clientX, clientY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
                    ctrlKey, altKey, shiftKey, metaKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
                    0, target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
                customEvent.touches = touches;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
                customEvent.targetTouches = targetTouches;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
                customEvent.changedTouches = changedTouches;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
                customEvent = Y.config.doc.createEvent("TouchEvent");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
                // Andoroid isn't compliant W3C initTouchEvent method signature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
                customEvent.initTouchEvent(touches, targetTouches, changedTouches,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
                    type, view,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
                    screenX, screenY, clientX, clientY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
                    ctrlKey, altKey, shiftKey, metaKey);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
        } else if (Y.UA.ios) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
            if(Y.UA.ios >= 2.0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
                customEvent = Y.config.doc.createEvent("TouchEvent");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
                // Available iOS 2.0 and later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
                customEvent.initTouchEvent(type, bubbles, cancelable, view, detail,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
                    screenX, screenY, clientX, clientY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
                    ctrlKey, altKey, shiftKey, metaKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
                    touches, targetTouches, changedTouches,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
                    scale, rotation);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
                Y.error('simulateTouchEvent(): No touch event simulation framework present for iOS, '+Y.UA.ios+'.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
            Y.error('simulateTouchEvent(): Not supported agent yet, '+Y.UA.userAgent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
        //fire the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
        target.dispatchEvent(customEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
    //} else if (Y.Lang.isObject(doc.createEventObject)){ // Windows Mobile/IE, support later 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
        Y.error('simulateTouchEvent(): No event simulation framework present.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
 * Simulates the event or gesture with the given name on a target.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
 * @param {HTMLElement} target The DOM element that's the target of the event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
 * @param {String} type The type of event or name of the supported gesture to simulate 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
 *      (i.e., "click", "doubletap", "flick").
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
 * @param {Object} options (Optional) Extra options to copy onto the event object. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
 *      For gestures, options are used to refine the gesture behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
 * @return {void}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
 * @for Event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
 * @method simulate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
Y.Event.simulate = function(target, type, options){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
    options = options || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
    if (mouseEvents[type] || msPointerEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
        simulateMouseEvent(target, type, options.bubbles,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
            options.cancelable, options.view, options.detail, options.screenX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
            options.screenY, options.clientX, options.clientY, options.ctrlKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
            options.altKey, options.shiftKey, options.metaKey, options.button,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
            options.relatedTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
    } else if (keyEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
        simulateKeyEvent(target, type, options.bubbles,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
            options.cancelable, options.view, options.ctrlKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
            options.altKey, options.shiftKey, options.metaKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
            options.keyCode, options.charCode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
    } else if (uiEvents[type]){
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
        simulateUIEvent(target, type, options.bubbles,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
            options.cancelable, options.view, options.detail);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
    // touch low-level event simulation        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
    } else if (touchEvents[type]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
        if((Y.config.win && ("ontouchstart" in Y.config.win)) && !(Y.UA.phantomjs) && !(Y.UA.chrome && Y.UA.chrome < 6)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
            simulateTouchEvent(target, type, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
                options.bubbles, options.cancelable, options.view, options.detail, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
                options.screenX, options.screenY, options.clientX, options.clientY, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
                options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
                options.touches, options.targetTouches, options.changedTouches,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
                options.scale, options.rotation);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
            Y.error("simulate(): Event '" + type + "' can't be simulated. Use gesture-simulate module instead.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
    // ios gesture low-level event simulation (iOS v2+ only)        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
    } else if(Y.UA.ios && Y.UA.ios >= 2.0 && gestureEvents[type]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
        simulateGestureEvent(target, type, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
            options.bubbles, options.cancelable, options.view, options.detail, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
            options.screenX, options.screenY, options.clientX, options.clientY, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
            options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
            options.scale, options.rotation);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
    // anything else
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
        Y.error("simulate(): Event '" + type + "' can't be simulated.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
})();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
}, '3.10.3', {"requires": ["event-base"]});