src/cm/media/js/lib/yui/yui_3.10.3/build/node-scroll-info/node-scroll-info.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('node-scroll-info', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Provides the ScrollInfo Node plugin, which exposes convenient events and methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
related to scrolling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@module node-scroll-info
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@since 3.7.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
Provides convenient events and methods related to scrolling. This could be used,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
for example, to implement infinite scrolling, or to lazy-load content based on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
the current scroll position.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
### Example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    var body = Y.one('body');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    body.plug(Y.Plugin.ScrollInfo);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    body.scrollInfo.on('scrollToBottom', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
        // Load more content when the user scrolls to the bottom of the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
@class Plugin.ScrollInfo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
@extends Plugin.Base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
@since 3.7.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
Fired when the user scrolls within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
This event (like all scroll events exposed by ScrollInfo) is throttled and fired
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
only after the number of milliseconds specified by the `scrollDelay` attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
have passed in order to prevent thrashing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
This event passes along the event facade for the standard DOM `scroll` event and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
mixes in the following additional properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
@event scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
@param {Boolean} atBottom Whether the current scroll position is at the bottom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    of the scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
@param {Boolean} atLeft Whether the current scroll position is at the extreme
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    left of the scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
@param {Boolean} atRight Whether the current scroll position is at the extreme
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    right of the scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
@param {Boolean} atTop Whether the current scroll position is at the top of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
@param {Boolean} isScrollDown `true` if the user scrolled down.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
@param {Boolean} isScrollLeft `true` if the user scrolled left.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
@param {Boolean} isScrollRight `true` if the user scrolled right.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
@param {Boolean} isScrollUp `true` if the user scrolled up.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
@param {Number} scrollBottom Y value of the bottom-most onscreen pixel of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
@param {Number} scrollHeight Total height in pixels of the scrollable region,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    including offscreen pixels.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
@param {Number} scrollLeft X value of the left-most onscreen pixel of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
@param {Number} scrollRight X value of the right-most onscreen pixel of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
@param {Number} scrollTop Y value of the top-most onscreen pixel of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    scrollable region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
@param {Number} scrollWidth Total width in pixels of the scrollable region,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    including offscreen pixels.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
@see scrollDelay
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
@see scrollMargin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
var EVT_SCROLL = 'scroll',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    Fired when the user scrolls down within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    @event scrollDown
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
    EVT_SCROLL_DOWN = 'scrollDown',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    Fired when the user scrolls left within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    @event scrollLeft
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    EVT_SCROLL_LEFT = 'scrollLeft',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    Fired when the user scrolls right within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    @event scrollRight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    EVT_SCROLL_RIGHT = 'scrollRight',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
    Fired when the user scrolls up within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
    @event scrollUp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    EVT_SCROLL_UP = 'scrollUp',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    Fired when the user scrolls to the bottom of the scrollable region within
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    @event scrollToBottom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    EVT_SCROLL_TO_BOTTOM = 'scrollToBottom',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    Fired when the user scrolls to the extreme left of the scrollable region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    @event scrollToLeft
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    EVT_SCROLL_TO_LEFT = 'scrollToLeft',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    Fired when the user scrolls to the extreme right of the scrollable region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    within the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
    @event scrollToRight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    EVT_SCROLL_TO_RIGHT = 'scrollToRight',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    Fired when the user scrolls to the top of the scrollable region within the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    This event provides the same event facade as the `scroll` event. See that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    event for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
    @event scrollToTop
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
    EVT_SCROLL_TO_TOP = 'scrollToTop';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
Y.Plugin.ScrollInfo = Y.Base.create('scrollInfoPlugin', Y.Plugin.Base, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
    // -- Lifecycle Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    initializer: function (config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
        // Cache for quicker lookups in the critical path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        this._host         = config.host;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
        this._hostIsBody   = this._host.get('nodeName').toLowerCase() === 'body';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
        this._scrollDelay  = this.get('scrollDelay');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        this._scrollMargin = this.get('scrollMargin');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
        this._scrollNode   = this._getScrollNode();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
        this.refreshDimensions();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
        this._lastScroll = this.getScrollInfo();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        this._bind();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    destructor: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
        (new Y.EventHandle(this._events)).detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
        delete this._events;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    Returns a NodeList containing all offscreen nodes inside the host node that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
    match the given CSS selector. An offscreen node is any node that is entirely
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    outside the visible (onscreen) region of the host node based on the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    scroll location.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
    @method getOffscreenNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
    @param {String} [selector] CSS selector. If omitted, all offscreen nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        will be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    @param {Number} [margin] Additional margin in pixels beyond the actual
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
        onscreen region that should be considered "onscreen" for the purposes of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        this query. Defaults to the value of the `scrollMargin` attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    @return {NodeList} Offscreen nodes matching _selector_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    @see scrollMargin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    getOffscreenNodes: function (selector, margin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
        if (typeof margin === 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
            margin = this._scrollMargin;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
        var lastScroll = this._lastScroll,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
            nodes      = this._host.all(selector || '*'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
            scrollBottom = lastScroll.scrollBottom + margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            scrollLeft   = lastScroll.scrollLeft - margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
            scrollRight  = lastScroll.scrollRight + margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            scrollTop    = lastScroll.scrollTop - margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
            self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        return nodes.filter(function (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
            var xy     = Y.DOM.getXY(el),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                elLeft = xy[0] - self._left,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
                elTop  = xy[1] - self._top,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
                elBottom, elRight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
            // Check whether the element's top left point is within the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            // viewport. This is the least expensive check.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
            if (elLeft >= scrollLeft && elLeft < scrollRight &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
                    elTop >= scrollTop && elTop < scrollBottom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            // Check whether the element's bottom right point is within the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
            // viewport. This check is more expensive since we have to get the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
            // element's height and width.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
            elBottom = elTop + el.offsetHeight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
            elRight  = elLeft + el.offsetWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
            if (elRight < scrollRight && elRight >= scrollLeft &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
                    elBottom < scrollBottom && elBottom >= scrollTop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
            // If we get here, the element isn't within the viewport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    Returns a NodeList containing all onscreen nodes inside the host node that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
    match the given CSS selector. An onscreen node is any node that is fully or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    partially within the visible (onscreen) region of the host node based on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    current scroll location.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    @method getOnscreenNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    @param {String} [selector] CSS selector. If omitted, all onscreen nodes will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    @param {Number} [margin] Additional margin in pixels beyond the actual
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        onscreen region that should be considered "onscreen" for the purposes of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        this query. Defaults to the value of the `scrollMargin` attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    @return {NodeList} Onscreen nodes matching _selector_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    @see scrollMargin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    getOnscreenNodes: function (selector, margin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        if (typeof margin === 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            margin = this._scrollMargin;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        var lastScroll = this._lastScroll,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
            nodes      = this._host.all(selector || '*'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
            scrollBottom = lastScroll.scrollBottom + margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            scrollLeft   = lastScroll.scrollLeft - margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            scrollRight  = lastScroll.scrollRight + margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
            scrollTop    = lastScroll.scrollTop - margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
            self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        return nodes.filter(function (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
            var xy     = Y.DOM.getXY(el),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                elLeft = xy[0] - self._left,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
                elTop  = xy[1] - self._top,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
                elBottom, elRight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
            // Check whether the element's top left point is within the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
            // viewport. This is the least expensive check.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
            if (elLeft >= scrollLeft && elLeft < scrollRight &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
                    elTop >= scrollTop && elTop < scrollBottom) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
            // Check whether the element's bottom right point is within the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
            // viewport. This check is more expensive since we have to get the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
            // element's height and width.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
            elBottom = elTop + el.offsetHeight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
            elRight  = elLeft + el.offsetWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
            if (elRight < scrollRight && elRight >= scrollLeft &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
                    elBottom < scrollBottom && elBottom >= scrollTop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
            // If we get here, the element isn't within the viewport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    Returns an object hash containing information about the current scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    position of the host node. This is the same information that's mixed into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
    the event facade of the `scroll` event and other scroll-related events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
    @method getScrollInfo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
    @return {Object} Object hash containing information about the current scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
        position. See the `scroll` event for details on what properties this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
        object contains.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
    @see scroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    getScrollInfo: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
        var domNode    = this._scrollNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
            lastScroll = this._lastScroll,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
            margin     = this._scrollMargin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
            scrollLeft   = domNode.scrollLeft,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            scrollHeight = domNode.scrollHeight,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
            scrollTop    = domNode.scrollTop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
            scrollWidth  = domNode.scrollWidth,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
            scrollBottom = scrollTop + this._height,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
            scrollRight  = scrollLeft + this._width;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
            atBottom: scrollBottom > (scrollHeight - margin),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
            atLeft  : scrollLeft < margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
            atRight : scrollRight > (scrollWidth - margin),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
            atTop   : scrollTop < margin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
            isScrollDown : lastScroll && scrollTop > lastScroll.scrollTop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
            isScrollLeft : lastScroll && scrollLeft < lastScroll.scrollLeft,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
            isScrollRight: lastScroll && scrollLeft > lastScroll.scrollLeft,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
            isScrollUp   : lastScroll && scrollTop < lastScroll.scrollTop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
            scrollBottom: scrollBottom,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
            scrollHeight: scrollHeight,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
            scrollLeft  : scrollLeft,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
            scrollRight : scrollRight,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
            scrollTop   : scrollTop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
            scrollWidth : scrollWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
    Refreshes cached position, height, and width dimensions for the host node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
    If the host node is the body, then the viewport height and width will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
    used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    This info is cached to improve performance during scroll events, since it's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    expensive to touch the DOM for these values. Dimensions are automatically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
    refreshed whenever the browser is resized, but if you change the dimensions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
    or position of the host node in JS, you may need to call
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
    `refreshDimensions()` manually to cache the new dimensions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
    @method refreshDimensions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    refreshDimensions: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
        // WebKit only returns reliable scroll info on the body, and only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
        // returns reliable height/width info on the documentElement, so we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        // have to special-case it (see the other special case in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
        // _getScrollNode()).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
        //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        // On iOS devices, documentElement.clientHeight/Width aren't reliable,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
        // but window.innerHeight/Width are. And no, dom-screen's viewport size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
        // methods don't account for this, which is why we do it here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
        var hostIsBody = this._hostIsBody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
            iosHack    = hostIsBody && Y.UA.ios,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
            win        = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
            el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        if (hostIsBody && Y.UA.webkit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
            el = Y.config.doc.documentElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
            el = this._scrollNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
        this._height = iosHack ? win.innerHeight : el.clientHeight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
        this._left   = el.offsetLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        this._top    = el.offsetTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
        this._width  = iosHack ? win.innerWidth : el.clientWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    Binds event handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
    @method _bind
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
    _bind: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        var winNode = Y.one('win');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
        this._events = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
            this.after({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
                scrollDelayChange : this._afterScrollDelayChange,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
                scrollMarginChange: this._afterScrollMarginChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
            }),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
            winNode.on('windowresize', this._afterResize, this),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
            // If we're attached to the body, listen for the scroll event on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
            // window, since <body> doesn't have a scroll event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
            (this._hostIsBody ? winNode : this._host).after(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
                'scroll', this._afterScroll, this)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
        ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
    Returns the DOM node that should be used to lookup scroll coordinates. In
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    some browsers, the `<body>` element doesn't return scroll coordinates, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    the documentElement must be used instead; this method takes care of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
    determining which node should be used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    @method _getScrollNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
    @return {HTMLElement} DOM node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
    _getScrollNode: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
        // WebKit returns scroll coordinates on the body element, but other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
        // browsers don't, so we have to use the documentElement.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
        return this._hostIsBody && !Y.UA.webkit ? Y.config.doc.documentElement :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
                Y.Node.getDOMNode(this._host);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
    Mixes detailed scroll information into the given DOM `scroll` event facade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
    and fires appropriate local events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    @method _triggerScroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
    @param {EventFacade} e Event facade from the DOM `scroll` event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
    _triggerScroll: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
        var info       = this.getScrollInfo(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
            facade     = Y.merge(e, info),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
            lastScroll = this._lastScroll;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        this._lastScroll = info;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
        this.fire(EVT_SCROLL, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
        if (info.isScrollLeft) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
            this.fire(EVT_SCROLL_LEFT, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
        } else if (info.isScrollRight) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
            this.fire(EVT_SCROLL_RIGHT, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
        if (info.isScrollUp) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
            this.fire(EVT_SCROLL_UP, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        } else if (info.isScrollDown) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
            this.fire(EVT_SCROLL_DOWN, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
        if (info.atBottom && (!lastScroll.atBottom ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
                info.scrollHeight > lastScroll.scrollHeight)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
            this.fire(EVT_SCROLL_TO_BOTTOM, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
        if (info.atLeft && !lastScroll.atLeft) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
            this.fire(EVT_SCROLL_TO_LEFT, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
        if (info.atRight && (!lastScroll.atRight ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
                info.scrollWidth > lastScroll.scrollWidth)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
            this.fire(EVT_SCROLL_TO_RIGHT, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
        if (info.atTop && !lastScroll.atTop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
            this.fire(EVT_SCROLL_TO_TOP, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
    // -- Protected Event Handlers ---------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
    Handles browser resize events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
    @method _afterResize
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
    _afterResize: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
        this.refreshDimensions();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
    Handles DOM `scroll` events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    @method _afterScroll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
    _afterScroll: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
        var self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
        clearTimeout(this._scrollTimeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
        this._scrollTimeout = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
            self._triggerScroll(e);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
        }, this._scrollDelay);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
    Caches the `scrollDelay` value after that attribute changes to allow
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
    quicker lookups in critical path code.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
    @method _afterScrollDelayChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
    _afterScrollDelayChange: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
        this._scrollDelay = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    Caches the `scrollMargin` value after that attribute changes to allow
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
    quicker lookups in critical path code.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
    @method _afterScrollMarginChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    @param {EventFacade} e
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    _afterScrollMarginChange: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
        this._scrollMargin = e.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
}, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    NS: 'scrollInfo',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
        Number of milliseconds to wait after a native `scroll` event before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
        firing local scroll events. If another native scroll event occurs during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
        this time, previous events will be ignored. This ensures that we don't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
        fire thousands of events when the user is scrolling quickly.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
        @attribute scrollDelay
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
        @type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
        @default 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
        **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
        scrollDelay: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
            value: 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
        Additional margin in pixels beyond the onscreen region of the host node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
        that should be considered "onscreen".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
        For example, if set to 50, then a `scrollToBottom` event would be fired
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
        when the user scrolls to within 50 pixels of the bottom of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
        scrollable region, even if they don't actually scroll completely to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
        very bottom pixel.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
        This margin also applies to the `getOffscreenNodes()` and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
        `getOnscreenNodes()` methods by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
        @attribute scrollMargin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
        @type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
        @default 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
        **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
        scrollMargin: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
            value: 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
}, '3.10.3', {"requires": ["base-build", "dom-screen", "event-resize", "node-pluginhost", "plugin"]});