1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
       | 
      
      
        fix: function(event) {
    // store a copy of the original event object
    // and clone to set read-only properties
    var originalEvent = event;
    event = jQuery.extend({}, originalEvent);
 
    // add preventDefault and stopPropagation since
    // they will not work on the clone
    event.preventDefault = function() {
        // if preventDefault exists run it on the original event
        if (originalEvent.preventDefault)
            originalEvent.preventDefault();
        // otherwise set the returnValue property of the original event to false (IE)
        originalEvent.returnValue = false;
    };
    event.stopPropagation = function() {
        // if stopPropagation exists run it on the original event
        if (originalEvent.stopPropagation)
            originalEvent.stopPropagation();
        // otherwise set the cancelBubble property of the original event to true (IE)
        originalEvent.cancelBubble = true;
    };
 
    // Fix target property, if necessary
    if ( !event.target && event.srcElement )
        event.target = event.srcElement;
 
    // check if target is a textnode (safari)
    if (jQuery.browser.safari && event.target.nodeType == 3)
        event.target = originalEvent.target.parentNode;
 
    // Add relatedTarget, if necessary
    if ( !event.relatedTarget && event.fromElement )
        event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
 
    // Calculate pageX/Y if missing and clientX/Y available
    if ( event.pageX == null && event.clientX != null ) {
        var e = document.documentElement, b = document.body;
        event.pageX = event.clientX + (e && e.scrollLeft || b.scrollLeft || );
        event.pageY = event.clientY + (e && e.scrollTop || b.scrollTop || );
    }
 
    // Add which for key events
    if ( !event.which && (event.charCode || event.keyCode) )
        event.which = event.charCode || event.keyCode;
 
    // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
    if ( !event.metaKey && event.ctrlKey )
        event.metaKey = event.ctrlKey;
 
    // Add which for click: 1 == left; 2 == middle; 3 == right
    // Note: button is not normalized, so don't use it
    if ( !event.which && event.button )
        event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 :  ) ));
 
    return event;
}
       |