src/cm/media/js/lib/yui/yui_3.10.3/build/event-valuechange/event-valuechange.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-valuechange', 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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Adds a synthetic `valuechange` event that fires when the `value` property of an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
`<input>` or `<textarea>` node changes as a result of a keystroke, mouse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
operation, or input method editor (IME) input event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
Usage:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
    YUI().use('event-valuechange', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
        Y.one('#my-input').on('valuechange', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
@module event-valuechange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
Provides the implementation for the synthetic `valuechange` event. This class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
isn't meant to be used directly, but is public to make monkeypatching possible.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
Usage:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    YUI().use('event-valuechange', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        Y.one('#my-input').on('valuechange', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
@class ValueChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
var DATA_KEY = '_valuechange',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
    VALUE    = 'value',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    config, // defined at the end of this file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
// Just a simple namespace to make methods overridable.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
VC = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    // -- Static Constants -----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    Interval (in milliseconds) at which to poll for changes to the value of an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    element with one or more `valuechange` subscribers when the user is likely
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    to be interacting with it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    @property POLL_INTERVAL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    @type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    @default 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    POLL_INTERVAL: 50,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    Timeout (in milliseconds) after which to stop polling when there hasn't been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    any new activity (keypresses, mouse clicks, etc.) on an element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    @property TIMEOUT
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    @type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    @default 10000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    TIMEOUT: 10000,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    // -- Protected Static Methods ---------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    Called at an interval to poll for changes to the value of the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    @method _poll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    @param {Node} node Node to poll.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    @param {Object} options Options object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
        @param {EventFacade} [options.e] Event facade of the event that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
            initiated the polling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    _poll: function (node, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        var domNode = node._node, // performance cheat; getValue() is a big hit when polling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
            event   = options.e,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
            newVal  = domNode && domNode.value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
            vcData  = node._data && node._data[DATA_KEY], // another perf cheat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
            facade, prevVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
        if (!domNode || !vcData) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
            VC._stopPolling(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        prevVal = vcData.prevVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
        if (newVal !== prevVal) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            vcData.prevVal = newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
            facade = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
                _event       : event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
                currentTarget: (event && event.currentTarget) || node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
                newVal       : newVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
                prevVal      : prevVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
                target       : (event && event.target) || node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
            Y.Object.each(vcData.notifiers, function (notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
                notifier.fire(facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
            VC._refreshTimeout(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    Restarts the inactivity timeout for the specified node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    @method _refreshTimeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    @param {Node} node Node to refresh.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    _refreshTimeout: function (node, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        // The node may have been destroyed, so check that it still exists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        // before trying to get its data. Otherwise an error will occur.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
        if (!node._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
        var vcData = node.getData(DATA_KEY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        VC._stopTimeout(node); // avoid dupes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
        // If we don't see any changes within the timeout period (10 seconds by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
        // default), stop polling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
        vcData.timeout = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
            VC._stopPolling(node, notifier);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        }, VC.TIMEOUT);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    Begins polling for changes to the `value` property of the specified node. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    polling is already underway for the specified node, it will not be restarted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
    unless the `force` option is `true`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    @method _startPolling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
    @param {Node} node Node to watch.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    @param {Object} options Options object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
        @param {EventFacade} [options.e] Event facade of the event that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
            initiated the polling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
        @param {Boolean} [options.force=false] If `true`, polling will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
            restarted even if we're already polling this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    _startPolling: function (node, notifier, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        if (!node.test('input,textarea')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
        var vcData = node.getData(DATA_KEY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        if (!vcData) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            vcData = {prevVal: node.get(VALUE)};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
            node.setData(DATA_KEY, vcData);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
        vcData.notifiers || (vcData.notifiers = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
        // Don't bother continuing if we're already polling this node, unless
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
        // `options.force` is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
        if (vcData.interval) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
            if (options.force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
                VC._stopPolling(node, notifier); // restart polling, but avoid dupe polls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
                vcData.notifiers[Y.stamp(notifier)] = notifier;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        // Poll for changes to the node's value. We can't rely on keyboard
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
        // events for this, since the value may change due to a mouse-initiated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
        // paste event, an IME input event, or for some other reason that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
        // doesn't trigger a key event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        vcData.notifiers[Y.stamp(notifier)] = notifier;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        vcData.interval = setInterval(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
            VC._poll(node, vcData, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
        }, VC.POLL_INTERVAL);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        VC._refreshTimeout(node, notifier);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    Stops polling for changes to the specified node's `value` attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    @method _stopPolling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    @param {Node} node Node to stop polling on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    @param {SyntheticEvent.Notifier} [notifier] Notifier to remove from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        node. If not specified, all notifiers will be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
    _stopPolling: function (node, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
        // The node may have been destroyed, so check that it still exists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
        // before trying to get its data. Otherwise an error will occur.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
        if (!node._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
        var vcData = node.getData(DATA_KEY) || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
        clearInterval(vcData.interval);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
        delete vcData.interval;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        VC._stopTimeout(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
        if (notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            vcData.notifiers && delete vcData.notifiers[Y.stamp(notifier)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
            vcData.notifiers = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    Clears the inactivity timeout for the specified node, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    @method _stopTimeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    @param {Node} node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    _stopTimeout: function (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
        var vcData = node.getData(DATA_KEY) || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
        clearTimeout(vcData.timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        delete vcData.timeout;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    // -- Protected Static Event Handlers --------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    Stops polling when a node's blur event fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    @method _onBlur
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    _onBlur: function (e, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        VC._stopPolling(e.currentTarget, notifier);
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    Resets a node's history and starts polling when a focus event occurs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
    @method _onFocus
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    _onFocus: function (e, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
        var node   = e.currentTarget,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            vcData = node.getData(DATA_KEY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
        if (!vcData) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
            vcData = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
            node.setData(DATA_KEY, vcData);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
        vcData.prevVal = node.get(VALUE);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        VC._startPolling(node, notifier, {e: e});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
    Starts polling when a node receives a keyDown event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
    @method _onKeyDown
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    _onKeyDown: function (e, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
        VC._startPolling(e.currentTarget, notifier, {e: e});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
    Starts polling when an IME-related keyUp event occurs on a node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    @method _onKeyUp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    _onKeyUp: function (e, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
        // These charCodes indicate that an IME has started. We'll restart
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
        // polling and give the IME up to 10 seconds (by default) to finish.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        if (e.charCode === 229 || e.charCode === 197) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
            VC._startPolling(e.currentTarget, notifier, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
                e    : e,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
                force: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
    Starts polling when a node receives a mouseDown event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    @method _onMouseDown
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    _onMouseDown: function (e, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
        VC._startPolling(e.currentTarget, notifier, {e: e});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
    Called when the `valuechange` event receives a new subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
    @method _onSubscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    @param {Node} node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
    @param {Subscription} sub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
    @param {Function|String} [filter] Filter function or selector string. Only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
        provided for delegate subscriptions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
    _onSubscribe: function (node, sub, notifier, filter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        var _valuechange, callbacks, nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
        callbacks = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
            blur     : VC._onBlur,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
            focus    : VC._onFocus,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
            keydown  : VC._onKeyDown,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
            keyup    : VC._onKeyUp,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
            mousedown: VC._onMouseDown
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
        // Store a utility object on the notifier to hold stuff that needs to be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        // passed around to trigger event handlers, polling handlers, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
        _valuechange = notifier._valuechange = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
        if (filter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
            // If a filter is provided, then this is a delegated subscription.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
            _valuechange.delegated = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
            // Add a function to the notifier that we can use to find all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
            // nodes that pass the delegate filter.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
            _valuechange.getNodes = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
                return node.all('input,textarea').filter(filter);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
            // Store the initial values for each descendant of the container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
            // node that passes the delegate filter.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
            _valuechange.getNodes().each(function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
                if (!child.getData(DATA_KEY)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
                    child.setData(DATA_KEY, {prevVal: child.get(VALUE)});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
            notifier._handles = Y.delegate(callbacks, node, filter, null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
                notifier);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
            // This is a normal (non-delegated) event subscription.
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 (!node.test('input,textarea')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
            if (!node.getData(DATA_KEY)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
                node.setData(DATA_KEY, {prevVal: node.get(VALUE)});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
            notifier._handles = node.on(callbacks, null, null, notifier);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    },
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
    Called when the `valuechange` event loses a subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    @method _onUnsubscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    @param {Node} node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
    @param {Subscription} subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
    @param {SyntheticEvent.Notifier} notifier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
    _onUnsubscribe: function (node, subscription, notifier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        var _valuechange = notifier._valuechange;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        notifier._handles && notifier._handles.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        if (_valuechange.delegated) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
            _valuechange.getNodes().each(function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
                VC._stopPolling(child, notifier);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
            VC._stopPolling(node, notifier);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
Synthetic event that fires when the `value` property of an `<input>` or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
`<textarea>` node changes as a result of a user-initiated keystroke, mouse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
operation, or input method editor (IME) input event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
Unlike the `onchange` event, this event fires when the value actually changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
and not when the element loses focus. This event also reports IME and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
multi-stroke input more reliably than `oninput` or the various key events across
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
For performance reasons, only focused nodes are monitored for changes, so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
programmatic value changes on nodes that don't have focus won't be detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
    YUI().use('event-valuechange', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
        Y.one('#my-input').on('valuechange', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
@event valuechange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
@param {String} prevVal Previous value prior to the latest change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
@param {String} newVal New value after the latest change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
config = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
    detach: VC._onUnsubscribe,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
    on    : VC._onSubscribe,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
    delegate      : VC._onSubscribe,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
    detachDelegate: VC._onUnsubscribe,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
    publishConfig: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
        emitFacade: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
Y.Event.define('valuechange', config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
Y.Event.define('valueChange', config); // deprecated, but supported for backcompat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
Y.ValueChange = VC;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
}, '3.10.3', {"requires": ["event-focus", "event-synthetic"]});