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