src/cm/media/js/lib/yui/yui3-3.15.0/build/scrollview-base/scrollview-base.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('scrollview-base', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * The scrollview-base module provides a basic ScrollView Widget, without scrollbar indicators
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @module scrollview
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @submodule scrollview-base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
 // Local vars
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
var getClassName = Y.ClassNameManager.getClassName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
    DOCUMENT = Y.config.doc,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    IE = Y.UA.ie,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
    NATIVE_TRANSITIONS = Y.Transition.useNative,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    vendorPrefix = Y.Transition._VENDOR_PREFIX, // Todo: This is a private property, and alternative approaches should be investigated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
    SCROLLVIEW = 'scrollview',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    CLASS_NAMES = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
        vertical: getClassName(SCROLLVIEW, 'vert'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
        horizontal: getClassName(SCROLLVIEW, 'horiz')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    EV_SCROLL_END = 'scrollEnd',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    FLICK = 'flick',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    DRAG = 'drag',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    MOUSEWHEEL = 'mousewheel',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    UI = 'ui',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    TOP = 'top',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
    LEFT = 'left',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
    PX = 'px',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
    AXIS = 'axis',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
    SCROLL_Y = 'scrollY',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
    SCROLL_X = 'scrollX',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
    BOUNCE = 'bounce',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    DISABLED = 'disabled',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    DECELERATION = 'deceleration',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    DIM_X = 'x',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    DIM_Y = 'y',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    BOUNDING_BOX = 'boundingBox',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    CONTENT_BOX = 'contentBox',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
    GESTURE_MOVE = 'gesturemove',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
    START = 'start',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
    END = 'end',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    EMPTY = '',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    ZERO = '0s',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    SNAP_DURATION = 'snapDuration',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
    SNAP_EASING = 'snapEasing',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    EASING = 'easing',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    FRAME_DURATION = 'frameDuration',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
    BOUNCE_RANGE = 'bounceRange',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
    _constrain = function (val, min, max) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        return Math.min(Math.max(val, min), max);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
 * ScrollView provides a scrollable widget, supporting flick gestures,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
 * across both touch and mouse based devices.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
 * @class ScrollView
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
 * @param config {Object} Object literal with initial attribute values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
 * @extends Widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
function ScrollView() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
    ScrollView.superclass.constructor.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
Y.ScrollView = Y.extend(ScrollView, Y.Widget, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    // *** Y.ScrollView prototype
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
     * Flag driving whether or not we should try and force H/W acceleration when transforming. Currently enabled by default for Webkit.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
     * Used by the _transform method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
     * @property _forceHWTransforms
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
     * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
    _forceHWTransforms: Y.UA.webkit ? true : false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
     * <p>Used to control whether or not ScrollView's internal
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
     * gesturemovestart, gesturemove and gesturemoveend
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
     * event listeners should preventDefault. The value is an
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
     * object, with "start", "move" and "end" properties used to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
     * specify which events should preventDefault and which shouldn't:</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
     * <pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
     * {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
     *    start: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
     *    move: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
     *    end: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
     * }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
     * </pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
     * <p>The default values are set up in order to prevent panning,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
     * on touch devices, while allowing click listeners on elements inside
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
     * the ScrollView to be notified as expected.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
     * @property _prevent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    _prevent: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
        start: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
        move: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        end: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
     * Contains the distance (postive or negative) in pixels by which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
     *  the scrollview was last scrolled. This is useful when setting up
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
     *  click listeners on the scrollview content, which on mouse based
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
     *  devices are always fired, even after a drag/flick.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
     * <p>Touch based devices don't currently fire a click event,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
     *  if the finger has been moved (beyond a threshold) so this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
     *  check isn't required, if working in a purely touch based environment</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
     * @property lastScrolledAmt
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
     * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
     * @public
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
     * @default 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
    lastScrolledAmt: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
     * Internal state, defines the minimum amount that the scrollview can be scrolled along the X axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
     * @property _minScrollX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
     * @type number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
    _minScrollX: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
     * Internal state, defines the maximum amount that the scrollview can be scrolled along the X axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
     * @property _maxScrollX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
     * @type number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
    _maxScrollX: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
     * Internal state, defines the minimum amount that the scrollview can be scrolled along the Y axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
     * @property _minScrollY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
     * @type number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
    _minScrollY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
     * Internal state, defines the maximum amount that the scrollview can be scrolled along the Y axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
     * @property _maxScrollY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
     * @type number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
    _maxScrollY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
     * Designated initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
     * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
     * @param {Object} Configuration object for the plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
    initializer: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
        // Cache these values, since they aren't going to change.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
        sv._bb = sv.get(BOUNDING_BOX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
        sv._cb = sv.get(CONTENT_BOX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
        // Cache some attributes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
        sv._cAxis = sv.get(AXIS);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
        sv._cBounce = sv.get(BOUNCE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
        sv._cBounceRange = sv.get(BOUNCE_RANGE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
        sv._cDeceleration = sv.get(DECELERATION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
        sv._cFrameDuration = sv.get(FRAME_DURATION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
     * bindUI implementation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
     * Hooks up events for the widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
     * @method bindUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    bindUI: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
        // Bind interaction listers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
        sv._bindFlick(sv.get(FLICK));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
        sv._bindDrag(sv.get(DRAG));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
        sv._bindMousewheel(true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
        // Bind change events
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
        sv._bindAttrs();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
        // IE SELECT HACK. See if we can do this non-natively and in the gesture for a future release.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
        if (IE) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
            sv._fixIESelect(sv._bb, sv._cb);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
        // Set any deprecated static properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
        if (ScrollView.SNAP_DURATION) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
            sv.set(SNAP_DURATION, ScrollView.SNAP_DURATION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
        if (ScrollView.SNAP_EASING) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
            sv.set(SNAP_EASING, ScrollView.SNAP_EASING);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
        if (ScrollView.EASING) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
            sv.set(EASING, ScrollView.EASING);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
        if (ScrollView.FRAME_STEP) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
            sv.set(FRAME_DURATION, ScrollView.FRAME_STEP);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
        if (ScrollView.BOUNCE_RANGE) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
            sv.set(BOUNCE_RANGE, ScrollView.BOUNCE_RANGE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
        // Recalculate dimension properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
        // TODO: This should be throttled.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
        // Y.one(WINDOW).after('resize', sv._afterDimChange, sv);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
     * Bind event listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
     * @method _bindAttrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
    _bindAttrs: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
            scrollChangeHandler = sv._afterScrollChange,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
            dimChangeHandler = sv._afterDimChange;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
        // Bind any change event listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
        sv.after({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
            'scrollEnd': sv._afterScrollEnd,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
            'disabledChange': sv._afterDisabledChange,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
            'flickChange': sv._afterFlickChange,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
            'dragChange': sv._afterDragChange,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
            'axisChange': sv._afterAxisChange,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
            'scrollYChange': scrollChangeHandler,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
            'scrollXChange': scrollChangeHandler,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
            'heightChange': dimChangeHandler,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
            'widthChange': dimChangeHandler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
     * Bind (or unbind) gesture move listeners required for drag support
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
     * @method _bindDrag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
     * @param drag {boolean} If true, the method binds listener to enable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
     *  drag (gesturemovestart). If false, the method unbinds gesturemove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
     *  listeners for drag support.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
    _bindDrag: function (drag) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
            bb = sv._bb;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
        // Unbind any previous 'drag' listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
        bb.detach(DRAG + '|*');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
        if (drag) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
            bb.on(DRAG + '|' + GESTURE_MOVE + START, Y.bind(sv._onGestureMoveStart, sv));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
     * Bind (or unbind) flick listeners.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
     * @method _bindFlick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
     * @param flick {Object|boolean} If truthy, the method binds listeners for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
     *  flick support. If false, the method unbinds flick listeners.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
    _bindFlick: function (flick) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
            bb = sv._bb;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
        // Unbind any previous 'flick' listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
        bb.detach(FLICK + '|*');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
        if (flick) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
            bb.on(FLICK + '|' + FLICK, Y.bind(sv._flick, sv), flick);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
            // Rebind Drag, becuase _onGestureMoveEnd always has to fire -after- _flick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
            sv._bindDrag(sv.get(DRAG));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
     * Bind (or unbind) mousewheel listeners.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
     * @method _bindMousewheel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
     * @param mousewheel {Object|boolean} If truthy, the method binds listeners for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
     *  mousewheel support. If false, the method unbinds mousewheel listeners.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
    _bindMousewheel: function (mousewheel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
            bb = sv._bb;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
        // Unbind any previous 'mousewheel' listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
        // TODO: This doesn't actually appear to work properly. Fix. #2532743
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
        bb.detach(MOUSEWHEEL + '|*');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
        // Only enable for vertical scrollviews
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
        if (mousewheel) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
            // Bound to document, because that's where mousewheel events fire off of.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
            Y.one(DOCUMENT).on(MOUSEWHEEL, Y.bind(sv._mousewheel, sv));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
     * syncUI implementation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
     * Update the scroll position, based on the current value of scrollX/scrollY.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
     * @method syncUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
    syncUI: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
            scrollDims = sv._getScrollDims(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
            width = scrollDims.offsetWidth,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
            height = scrollDims.offsetHeight,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
            scrollWidth = scrollDims.scrollWidth,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
            scrollHeight = scrollDims.scrollHeight;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
        // If the axis is undefined, auto-calculate it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
        if (sv._cAxis === undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
            // This should only ever be run once (for now).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
            // In the future SV might post-load axis changes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
            sv._cAxis = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
                x: (scrollWidth > width),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
                y: (scrollHeight > height)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
            sv._set(AXIS, sv._cAxis);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
        // get text direction on or inherited by scrollview node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
        sv.rtl = (sv._cb.getComputedStyle('direction') === 'rtl');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
        // Cache the disabled value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
        sv._cDisabled = sv.get(DISABLED);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
        // Run this to set initial values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
        sv._uiDimensionsChange();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
        // If we're out-of-bounds, snap back.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
        if (sv._isOutOfBounds()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
            sv._snapBack();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
     * Utility method to obtain widget dimensions
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
     * @method _getScrollDims
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
     * @return {Object} The offsetWidth, offsetHeight, scrollWidth and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
     *  scrollHeight as an array: [offsetWidth, offsetHeight, scrollWidth,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
     *  scrollHeight]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
    _getScrollDims: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
            cb = sv._cb,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
            bb = sv._bb,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
            TRANS = ScrollView._TRANSITION,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
            // Ideally using CSSMatrix - don't think we have it normalized yet though.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
            // origX = (new WebKitCSSMatrix(cb.getComputedStyle("transform"))).e,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
            // origY = (new WebKitCSSMatrix(cb.getComputedStyle("transform"))).f,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
            origX = sv.get(SCROLL_X),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
            origY = sv.get(SCROLL_Y),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
            origHWTransform,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
            dims;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
        // TODO: Is this OK? Just in case it's called 'during' a transition.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
        if (NATIVE_TRANSITIONS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
            cb.setStyle(TRANS.DURATION, ZERO);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
            cb.setStyle(TRANS.PROPERTY, EMPTY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
        origHWTransform = sv._forceHWTransforms;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
        sv._forceHWTransforms = false; // the z translation was causing issues with picking up accurate scrollWidths in Chrome/Mac.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
        sv._moveTo(cb, 0, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
        dims = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
            'offsetWidth': bb.get('offsetWidth'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
            'offsetHeight': bb.get('offsetHeight'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
            'scrollWidth': bb.get('scrollWidth'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
            'scrollHeight': bb.get('scrollHeight')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
        sv._moveTo(cb, -(origX), -(origY));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
        sv._forceHWTransforms = origHWTransform;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
        return dims;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
     * This method gets invoked whenever the height or width attributes change,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
     * allowing us to determine which scrolling axes need to be enabled.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
     * @method _uiDimensionsChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
    _uiDimensionsChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
            bb = sv._bb,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
            scrollDims = sv._getScrollDims(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
            width = scrollDims.offsetWidth,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
            height = scrollDims.offsetHeight,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
            scrollWidth = scrollDims.scrollWidth,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
            scrollHeight = scrollDims.scrollHeight,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
            rtl = sv.rtl,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
            svAxis = sv._cAxis,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
            minScrollX = (rtl ? Math.min(0, -(scrollWidth - width)) : 0),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
            maxScrollX = (rtl ? 0 : Math.max(0, scrollWidth - width)),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
            minScrollY = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
            maxScrollY = Math.max(0, scrollHeight - height);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
        if (svAxis && svAxis.x) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
            bb.addClass(CLASS_NAMES.horizontal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
        if (svAxis && svAxis.y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
            bb.addClass(CLASS_NAMES.vertical);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
        sv._setBounds({
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
            minScrollX: minScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
            maxScrollX: maxScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
            minScrollY: minScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
            maxScrollY: maxScrollY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
     * Set the bounding dimensions of the ScrollView
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
     * @method _setBounds
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
     * @param bounds {Object} [duration] ms of the scroll animation. (default is 0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
     *   @param {Number} [bounds.minScrollX] The minimum scroll X value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
     *   @param {Number} [bounds.maxScrollX] The maximum scroll X value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
     *   @param {Number} [bounds.minScrollY] The minimum scroll Y value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
     *   @param {Number} [bounds.maxScrollY] The maximum scroll Y value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
    _setBounds: function (bounds) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
        // TODO: Do a check to log if the bounds are invalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
        sv._minScrollX = bounds.minScrollX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
        sv._maxScrollX = bounds.maxScrollX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
        sv._minScrollY = bounds.minScrollY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
        sv._maxScrollY = bounds.maxScrollY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
     * Get the bounding dimensions of the ScrollView
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
     * @method _getBounds
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
    _getBounds: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
        return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
            minScrollX: sv._minScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
            maxScrollX: sv._maxScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
            minScrollY: sv._minScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
            maxScrollY: sv._maxScrollY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
     * Scroll the element to a given xy coordinate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
     * @method scrollTo
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
     * @param x {Number} The x-position to scroll to. (null for no movement)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
     * @param y {Number} The y-position to scroll to. (null for no movement)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
     * @param {Number} [duration] ms of the scroll animation. (default is 0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
     * @param {String} [easing] An easing equation if duration is set. (default is `easing` attribute)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
     * @param {String} [node] The node to transform.  Setting this can be useful in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
     *  dual-axis paginated instances. (default is the instance's contentBox)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
    scrollTo: function (x, y, duration, easing, node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
        // Check to see if widget is disabled
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
        if (this._cDisabled) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
            return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
            cb = sv._cb,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
            TRANS = ScrollView._TRANSITION,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
            callback = Y.bind(sv._onTransEnd, sv), // @Todo : cache this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
            newX = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
            newY = 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
            transition = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
            transform;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
        // default the optional arguments
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
        duration = duration || 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
        easing = easing || sv.get(EASING); // @TODO: Cache this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
        node = node || cb;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
        if (x !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
            sv.set(SCROLL_X, x, {src:UI});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
            newX = -(x);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
        if (y !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
            sv.set(SCROLL_Y, y, {src:UI});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
            newY = -(y);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
        transform = sv._transform(newX, newY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
        if (NATIVE_TRANSITIONS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
            // ANDROID WORKAROUND - try and stop existing transition, before kicking off new one.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
            node.setStyle(TRANS.DURATION, ZERO).setStyle(TRANS.PROPERTY, EMPTY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
        // Move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
        if (duration === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
            if (NATIVE_TRANSITIONS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
                node.setStyle('transform', transform);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
                // TODO: If both set, batch them in the same update
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
                // Update: Nope, setStyles() just loops through each property and applies it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
                if (x !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
                    node.setStyle(LEFT, newX + PX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
                if (y !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
                    node.setStyle(TOP, newY + PX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
        // Animate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
            transition.easing = easing;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
            transition.duration = duration / 1000;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
            if (NATIVE_TRANSITIONS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
                transition.transform = transform;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
                transition.left = newX + PX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
                transition.top = newY + PX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
            node.transition(transition, callback);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
     * Utility method, to create the translate transform string with the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
     * x, y translation amounts provided.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
     * @method _transform
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
     * @param {Number} x Number of pixels to translate along the x axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
     * @param {Number} y Number of pixels to translate along the y axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
    _transform: function (x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
        // TODO: Would we be better off using a Matrix for this?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
        var prop = 'translate(' + x + 'px, ' + y + 'px)';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
        if (this._forceHWTransforms) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
            prop += ' translateZ(0)';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
        return prop;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
    * Utility method, to move the given element to the given xy position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
    * @method _moveTo
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
    * @param node {Node} The node to move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
    * @param x {Number} The x-position to move to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
    * @param y {Number} The y-position to move to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
    _moveTo : function(node, x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
        if (NATIVE_TRANSITIONS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
            node.setStyle('transform', this._transform(x, y));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
            node.setStyle(LEFT, x + PX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
            node.setStyle(TOP, y + PX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
     * Content box transition callback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
     * @method _onTransEnd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
     * @param {EventFacade} e The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
    _onTransEnd: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
        // If for some reason we're OOB, snapback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
        if (sv._isOutOfBounds()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
            sv._snapBack();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
             * Notification event fired at the end of a scroll transition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
             *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
             * @event scrollEnd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
             * @param e {EventFacade} The default event facade.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
            sv.fire(EV_SCROLL_END);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
     * gesturemovestart event handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
     * @method _onGestureMoveStart
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
     * @param e {EventFacade} The gesturemovestart event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
    _onGestureMoveStart: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
        if (this._cDisabled) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
            bb = sv._bb,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
            currentX = sv.get(SCROLL_X),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
            currentY = sv.get(SCROLL_Y),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
            clientX = e.clientX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
            clientY = e.clientY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
        if (sv._prevent.start) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
            e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
        // if a flick animation is in progress, cancel it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
        if (sv._flickAnim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
            sv._cancelFlick();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
            sv._onTransEnd();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
        // Reset lastScrolledAmt
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
        sv.lastScrolledAmt = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
        // Stores data for this gesture cycle.  Cleaned up later
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
        sv._gesture = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
            // Will hold the axis value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
            axis: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
            // The current attribute values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
            startX: currentX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
            startY: currentY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
            // The X/Y coordinates where the event began
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
            startClientX: clientX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
            startClientY: clientY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
            // The X/Y coordinates where the event will end
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
            endClientX: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
            endClientY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
            // The current delta of the event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
            deltaX: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
            deltaY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
            // Will be populated for flicks
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
            flick: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
            // Create some listeners for the rest of the gesture cycle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
            onGestureMove: bb.on(DRAG + '|' + GESTURE_MOVE, Y.bind(sv._onGestureMove, sv)),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
            // @TODO: Don't bind gestureMoveEnd if it's a Flick?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
            onGestureMoveEnd: bb.on(DRAG + '|' + GESTURE_MOVE + END, Y.bind(sv._onGestureMoveEnd, sv))
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
     * gesturemove event handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
     * @method _onGestureMove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
     * @param e {EventFacade} The gesturemove event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
    _onGestureMove: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
            gesture = sv._gesture,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
            svAxis = sv._cAxis,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
            svAxisX = svAxis.x,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
            svAxisY = svAxis.y,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
            startX = gesture.startX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
            startY = gesture.startY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
            startClientX = gesture.startClientX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
            startClientY = gesture.startClientY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
            clientX = e.clientX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
            clientY = e.clientY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
        if (sv._prevent.move) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
            e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
        gesture.deltaX = startClientX - clientX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
        gesture.deltaY = startClientY - clientY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
        // Determine if this is a vertical or horizontal movement
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
        // @TODO: This is crude, but it works.  Investigate more intelligent ways to detect intent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
        if (gesture.axis === null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
            gesture.axis = (Math.abs(gesture.deltaX) > Math.abs(gesture.deltaY)) ? DIM_X : DIM_Y;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
        // Move X or Y.  @TODO: Move both if dualaxis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
        if (gesture.axis === DIM_X && svAxisX) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
            sv.set(SCROLL_X, startX + gesture.deltaX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
        else if (gesture.axis === DIM_Y && svAxisY) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
            sv.set(SCROLL_Y, startY + gesture.deltaY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
     * gesturemoveend event handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
     * @method _onGestureMoveEnd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
     * @param e {EventFacade} The gesturemoveend event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
    _onGestureMoveEnd: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
            gesture = sv._gesture,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
            flick = gesture.flick,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
            clientX = e.clientX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
            clientY = e.clientY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
            isOOB;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
        if (sv._prevent.end) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
            e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
        // Store the end X/Y coordinates
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
        gesture.endClientX = clientX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
        gesture.endClientY = clientY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
        // Cleanup the event handlers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
        gesture.onGestureMove.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
        gesture.onGestureMoveEnd.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
        // If this wasn't a flick, wrap up the gesture cycle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
        if (!flick) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
            // @TODO: Be more intelligent about this. Look at the Flick attribute to see
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
            // if it is safe to assume _flick did or didn't fire.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
            // Then, the order _flick and _onGestureMoveEnd fire doesn't matter?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
            // If there was movement (_onGestureMove fired)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
            if (gesture.deltaX !== null && gesture.deltaY !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
                isOOB = sv._isOutOfBounds();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
                // If we're out-out-bounds, then snapback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
                if (isOOB) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
                    sv._snapBack();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
                // Inbounds
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
                else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
                    // Fire scrollEnd unless this is a paginated instance and the gesture axis is the same as paginator's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
                    // Not totally confident this is ideal to access a plugin's properties from a host, @TODO revisit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
                    if (!sv.pages || (sv.pages && !sv.pages.get(AXIS)[gesture.axis])) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
                        sv._onTransEnd();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
     * Execute a flick at the end of a scroll action
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
     * @method _flick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
     * @param e {EventFacade} The Flick event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
    _flick: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
        if (this._cDisabled) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
            svAxis = sv._cAxis,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
            flick = e.flick,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
            flickAxis = flick.axis,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
            flickVelocity = flick.velocity,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
            axisAttr = flickAxis === DIM_X ? SCROLL_X : SCROLL_Y,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
            startPosition = sv.get(axisAttr);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
        // Sometimes flick is enabled, but drag is disabled
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
        if (sv._gesture) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
            sv._gesture.flick = flick;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
        // Prevent unneccesary firing of _flickFrame if we can't scroll on the flick axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
        if (svAxis[flickAxis]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
            sv._flickFrame(flickVelocity, flickAxis, startPosition);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
     * Execute a single frame in the flick animation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
     * @method _flickFrame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
     * @param velocity {Number} The velocity of this animated frame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
     * @param flickAxis {String} The axis on which to animate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
     * @param startPosition {Number} The starting X/Y point to flick from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
    _flickFrame: function (velocity, flickAxis, startPosition) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
            axisAttr = flickAxis === DIM_X ? SCROLL_X : SCROLL_Y,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
            bounds = sv._getBounds(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
            // Localize cached values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
            bounce = sv._cBounce,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
            bounceRange = sv._cBounceRange,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
            deceleration = sv._cDeceleration,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
            frameDuration = sv._cFrameDuration,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
            // Calculate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
            newVelocity = velocity * deceleration,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
            newPosition = startPosition - (frameDuration * newVelocity),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
            // Some convinience conditions
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
            min = flickAxis === DIM_X ? bounds.minScrollX : bounds.minScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
            max = flickAxis === DIM_X ? bounds.maxScrollX : bounds.maxScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
            belowMin       = (newPosition < min),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
            belowMax       = (newPosition < max),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
            aboveMin       = (newPosition > min),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
            aboveMax       = (newPosition > max),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
            belowMinRange  = (newPosition < (min - bounceRange)),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
            withinMinRange = (belowMin && (newPosition > (min - bounceRange))),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
            withinMaxRange = (aboveMax && (newPosition < (max + bounceRange))),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
            aboveMaxRange  = (newPosition > (max + bounceRange)),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
            tooSlow;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
        // If we're within the range but outside min/max, dampen the velocity
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
        if (withinMinRange || withinMaxRange) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
            newVelocity *= bounce;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
        // Is the velocity too slow to bother?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
        tooSlow = (Math.abs(newVelocity).toFixed(4) < 0.015);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
        // If the velocity is too slow or we're outside the range
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
        if (tooSlow || belowMinRange || aboveMaxRange) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
            // Cancel and delete sv._flickAnim
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
            if (sv._flickAnim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
                sv._cancelFlick();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
            // If we're inside the scroll area, just end
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
            if (aboveMin && belowMax) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
                sv._onTransEnd();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
            // We're outside the scroll area, so we need to snap back
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
            else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
                sv._snapBack();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
        // Otherwise, animate to the next frame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
            // @TODO: maybe use requestAnimationFrame instead
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
            sv._flickAnim = Y.later(frameDuration, sv, '_flickFrame', [newVelocity, flickAxis, newPosition]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
            sv.set(axisAttr, newPosition);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
    _cancelFlick: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
        if (sv._flickAnim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
            // Cancel the flick (if it exists)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
            sv._flickAnim.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
            // Also delete it, otherwise _onGestureMoveStart will think we're still flicking
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
            delete sv._flickAnim;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
     * Handle mousewheel events on the widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
     * @method _mousewheel
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
     * @param e {EventFacade} The mousewheel event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
    _mousewheel: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
            scrollY = sv.get(SCROLL_Y),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
            bounds = sv._getBounds(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
            bb = sv._bb,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
            scrollOffset = 10, // 10px
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
            isForward = (e.wheelDelta > 0),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
            scrollToY = scrollY - ((isForward ? 1 : -1) * scrollOffset);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
        scrollToY = _constrain(scrollToY, bounds.minScrollY, bounds.maxScrollY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
        // Because Mousewheel events fire off 'document', every ScrollView widget will react
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
        // to any mousewheel anywhere on the page. This check will ensure that the mouse is currently
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
        // over this specific ScrollView.  Also, only allow mousewheel scrolling on Y-axis,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
        // becuase otherwise the 'prevent' will block page scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
        if (bb.contains(e.target) && sv._cAxis[DIM_Y]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
            // Reset lastScrolledAmt
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
            sv.lastScrolledAmt = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
            // Jump to the new offset
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
            sv.set(SCROLL_Y, scrollToY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
            // if we have scrollbars plugin, update & set the flash timer on the scrollbar
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
            // @TODO: This probably shouldn't be in this module
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
            if (sv.scrollbars) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
                // @TODO: The scrollbars should handle this themselves
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
                sv.scrollbars._update();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
                sv.scrollbars.flash();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
                // or just this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
                // sv.scrollbars._hostDimensionsChange();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
            // Fire the 'scrollEnd' event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
            sv._onTransEnd();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
            // prevent browser default behavior on mouse scroll
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
            e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
     * Checks to see the current scrollX/scrollY position beyond the min/max boundary
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
     * @method _isOutOfBounds
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
     * @param x {Number} [optional] The X position to check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
     * @param y {Number} [optional] The Y position to check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
     * @return {Boolean} Whether the current X/Y position is out of bounds (true) or not (false)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
    _isOutOfBounds: function (x, y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
            svAxis = sv._cAxis,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
            svAxisX = svAxis.x,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
            svAxisY = svAxis.y,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
            currentX = x || sv.get(SCROLL_X),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
            currentY = y || sv.get(SCROLL_Y),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
            bounds = sv._getBounds(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
            minX = bounds.minScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
            minY = bounds.minScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
            maxX = bounds.maxScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
            maxY = bounds.maxScrollY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
        return (svAxisX && (currentX < minX || currentX > maxX)) || (svAxisY && (currentY < minY || currentY > maxY));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
     * Bounces back
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
     * @TODO: Should be more generalized and support both X and Y detection
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
     * @method _snapBack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
    _snapBack: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
            currentX = sv.get(SCROLL_X),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
            currentY = sv.get(SCROLL_Y),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
            bounds = sv._getBounds(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
            minX = bounds.minScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
            minY = bounds.minScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
            maxX = bounds.maxScrollX,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
            maxY = bounds.maxScrollY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
            newY = _constrain(currentY, minY, maxY),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
            newX = _constrain(currentX, minX, maxX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
            duration = sv.get(SNAP_DURATION),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
            easing = sv.get(SNAP_EASING);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
        if (newX !== currentX) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
            sv.set(SCROLL_X, newX, {duration:duration, easing:easing});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
        else if (newY !== currentY) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
            sv.set(SCROLL_Y, newY, {duration:duration, easing:easing});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
            sv._onTransEnd();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
     * After listener for changes to the scrollX or scrollY attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
     * @method _afterScrollChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
    _afterScrollChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
        if (e.src === ScrollView.UI_SRC) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
        var sv = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
            duration = e.duration,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
            easing = e.easing,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
            val = e.newVal,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
            scrollToArgs = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
        // Set the scrolled value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
        sv.lastScrolledAmt = sv.lastScrolledAmt + (e.newVal - e.prevVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
        // Generate the array of args to pass to scrollTo()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
        if (e.attrName === SCROLL_X) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
            scrollToArgs.push(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
            scrollToArgs.push(sv.get(SCROLL_Y));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
            scrollToArgs.push(sv.get(SCROLL_X));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
            scrollToArgs.push(val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
        scrollToArgs.push(duration);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
        scrollToArgs.push(easing);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
        sv.scrollTo.apply(sv, scrollToArgs);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
     * After listener for changes to the flick attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
     * @method _afterFlickChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
    _afterFlickChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
        this._bindFlick(e.newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
     * After listener for changes to the disabled attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
     * @method _afterDisabledChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
    _afterDisabledChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
        // Cache for performance - we check during move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
        this._cDisabled = e.newVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
     * After listener for the axis attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
     * @method _afterAxisChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
    _afterAxisChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
        this._cAxis = e.newVal;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
     * After listener for changes to the drag attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
     * @method _afterDragChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
    _afterDragChange: function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
        this._bindDrag(e.newVal);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
     * After listener for the height or width attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
     * @method _afterDimChange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
    _afterDimChange: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
        this._uiDimensionsChange();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
     * After listener for scrollEnd, for cleanup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
     * @method _afterScrollEnd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
     * @param e {EventFacade} The event facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
    _afterScrollEnd: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
        var sv = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
        if (sv._flickAnim) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
            sv._cancelFlick();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
        // Ideally this should be removed, but doing so causing some JS errors with fast swiping
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
        // because _gesture is being deleted after the previous one has been overwritten
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
        // delete sv._gesture; // TODO: Move to sv.prevGesture?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
     * Setter for 'axis' attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
     * @method _axisSetter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
     * @param val {Mixed} A string ('x', 'y', 'xy') to specify which axis/axes to allow scrolling on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
     * @param name {String} The attribute name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
     * @return {Object} An object to specify scrollability on the x & y axes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
    _axisSetter: function (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
        // Turn a string into an axis object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
        if (Y.Lang.isString(val)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
            return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
                x: val.match(/x/i) ? true : false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
                y: val.match(/y/i) ? true : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
    * The scrollX, scrollY setter implementation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
    * @method _setScroll
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
    * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
    * @param {Number} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
    * @param {String} dim
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
    * @return {Number} The value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
    _setScroll : function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
        // Just ensure the widget is not disabled
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
        if (this._cDisabled) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
            val = Y.Attribute.INVALID_VALUE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
        return val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
    * Setter for the scrollX attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
    * @method _setScrollX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
    * @param val {Number} The new scrollX value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
    * @return {Number} The normalized value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
    * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
    _setScrollX: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
        return this._setScroll(val, DIM_X);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
    * Setter for the scrollY ATTR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
    * @method _setScrollY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
    * @param val {Number} The new scrollY value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
    * @return {Number} The normalized value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
    * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
    _setScrollY: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
        return this._setScroll(val, DIM_Y);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
    // End prototype properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
}, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
    // Static properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
     * The identity of the widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
     * @property NAME
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
     * @default 'scrollview'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
     * @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
    NAME: 'scrollview',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
     * Static property used to define the default attribute configuration of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
     * the Widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
     * @property ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
     * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
    ATTRS: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
         * Specifies ability to scroll on x, y, or x and y axis/axes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
         * @attribute axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
         * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
        axis: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
            setter: '_axisSetter',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
            writeOnce: 'initOnly'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
         * The current scroll position in the x-axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
         * @attribute scrollX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
         * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
         * @default 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
        scrollX: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
            value: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
            setter: '_setScrollX'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
         * The current scroll position in the y-axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
         * @attribute scrollY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
         * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
         * @default 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
        scrollY: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
            value: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
            setter: '_setScrollY'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
         * Drag coefficent for inertial scrolling. The closer to 1 this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
         * value is, the less friction during scrolling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
         * @attribute deceleration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
         * @default 0.93
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
        deceleration: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
            value: 0.93
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
         * Drag coefficient for intertial scrolling at the upper
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
         * and lower boundaries of the scrollview. Set to 0 to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
         * disable "rubber-banding".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
         * @attribute bounce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
         * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
         * @default 0.1
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
        bounce: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
            value: 0.1
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
         * The minimum distance and/or velocity which define a flick. Can be set to false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
         * to disable flick support (note: drag support is enabled/disabled separately)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
         * @attribute flick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
         * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
         * @default Object with properties minDistance = 10, minVelocity = 0.3.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
        flick: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
            value: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
                minDistance: 10,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
                minVelocity: 0.3
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
         * Enable/Disable dragging the ScrollView content (note: flick support is enabled/disabled separately)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
         * @attribute drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
         * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
         * @default true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
        drag: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
            value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
         * The default duration to use when animating the bounce snap back.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
         * @attribute snapDuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
         * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
         * @default 400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
        snapDuration: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
            value: 400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1318
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1319
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1320
         * The default easing to use when animating the bounce snap back.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1321
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
         * @attribute snapEasing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
         * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
         * @default 'ease-out'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
        snapEasing: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
            value: 'ease-out'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1330
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1331
         * The default easing used when animating the flick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1332
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1333
         * @attribute easing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1334
         * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1335
         * @default 'cubic-bezier(0, 0.1, 0, 1.0)'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1336
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1337
        easing: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1338
            value: 'cubic-bezier(0, 0.1, 0, 1.0)'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1339
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1340
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1341
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
         * The interval (ms) used when animating the flick for JS-timer animations
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
         * @attribute frameDuration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
         * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
         * @default 15
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
        frameDuration: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
            value: 15
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
         * The default bounce distance in pixels
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
         * @attribute bounceRange
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
         * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
         * @default 150
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
        bounceRange: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
            value: 150
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
     * List of class names used in the scrollview's DOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
     * @property CLASS_NAMES
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1371
    CLASS_NAMES: CLASS_NAMES,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1372
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1373
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1374
     * Flag used to source property changes initiated from the DOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1375
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1376
     * @property UI_SRC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1377
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
     * @default 'ui'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
    UI_SRC: UI,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
     * Object map of style property names used to set transition properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
     * Defaults to the vendor prefix established by the Transition module.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
     * The configured property names are `_TRANSITION.DURATION` (e.g. "WebkitTransitionDuration") and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1387
     * `_TRANSITION.PROPERTY (e.g. "WebkitTransitionProperty").
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1388
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1389
     * @property _TRANSITION
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1390
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1391
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1392
    _TRANSITION: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1393
        DURATION: (vendorPrefix ? vendorPrefix + 'TransitionDuration' : 'transitionDuration'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1394
        PROPERTY: (vendorPrefix ? vendorPrefix + 'TransitionProperty' : 'transitionProperty')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1395
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1396
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1397
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1398
     * The default bounce distance in pixels
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1399
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1400
     * @property BOUNCE_RANGE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1401
     * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1402
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1403
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1404
     * @deprecated (in 3.7.0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1405
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1406
    BOUNCE_RANGE: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1407
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1408
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1409
     * The interval (ms) used when animating the flick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1410
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1411
     * @property FRAME_STEP
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1412
     * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1413
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1414
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1415
     * @deprecated (in 3.7.0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1416
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1417
    FRAME_STEP: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1418
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1419
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1420
     * The default easing used when animating the flick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1421
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1422
     * @property EASING
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1423
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1424
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1425
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1426
     * @deprecated (in 3.7.0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1427
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1428
    EASING: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1429
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1430
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1431
     * The default easing to use when animating the bounce snap back.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1432
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1433
     * @property SNAP_EASING
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1434
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1435
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1436
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1437
     * @deprecated (in 3.7.0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1438
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1439
    SNAP_EASING: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1440
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1441
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1442
     * The default duration to use when animating the bounce snap back.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1443
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1444
     * @property SNAP_DURATION
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1445
     * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1446
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1447
     * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1448
     * @deprecated (in 3.7.0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1449
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1450
    SNAP_DURATION: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1451
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1452
    // End static properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1454
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1455
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1456
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1457
}, '@VERSION@', {"requires": ["widget", "event-gestures", "event-mousewheel", "transition"], "skinnable": true});