dd-scroll.js revision 5b05d3439409acca6a1bd01f011571161e705d8e
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark AndrewsYUI.add('dd-scroll', function(Y) {
11e9368a226272085c337e9e74b79808c16fbdbaTinderbox User
6a42ab64276ff832a47e009be1208f7c7d4da22dAutomatic Updater
6a42ab64276ff832a47e009be1208f7c7d4da22dAutomatic Updater /**
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater * Base scroller class used to create the Plugin.DDNodeScroll and Plugin.DDWinScroll.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * This class should not be called on it's own, it's designed to be a plugin.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @module dd
6a42ab64276ff832a47e009be1208f7c7d4da22dAutomatic Updater * @submodule dd-scroll
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews /**
6a42ab64276ff832a47e009be1208f7c7d4da22dAutomatic Updater * Base scroller class used to create the Plugin.DDNodeScroll and Plugin.DDWinScroll.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * This class should not be called on it's own, it's designed to be a plugin.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @class Scroll
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @extends Base
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @namespace DD
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @constructor
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews var S = function() {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews S.superclass.constructor.apply(this, arguments);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt },
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User WS, NS,
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User HOST = 'host',
50066670817cdf9e86c832066d73715232b29680Tinderbox User BUFFER = 'buffer',
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews PARENT_SCROLL = 'parentScroll',
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews WINDOW_SCROLL = 'windowScroll',
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews SCROLL_TOP = 'scrollTop',
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews SCROLL_LEFT = 'scrollLeft',
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews OFFSET_WIDTH = 'offsetWidth',
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews OFFSET_HEIGHT = 'offsetHeight';
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews S.ATTRS = {
50066670817cdf9e86c832066d73715232b29680Tinderbox User /**
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @attribute parentScroll
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @description Internal config option to hold the node that we are scrolling. Should not be set by the developer.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @type Node
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews parentScroll: {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User value: false,
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews setter: function(node) {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User if (node) {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews return node;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews return false;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews },
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User /**
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @attribute buffer
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @description The number of pixels from the edge of the screen to turn on scrolling. Default: 30
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @type Number
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User buffer: {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User value: 30,
b27ce68bae92006e2ad7a9b75602c6385e529c3bAutomatic Updater validator: Y.Lang.isNumber
922312472e2e05ebc64993d465999c5351b83036Automatic Updater },
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews /**
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @attribute scrollDelay
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @description The number of milliseconds delay to pass to the auto scroller. Default: 235
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @type Number
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews scrollDelay: {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User value: 235,
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews validator: Y.Lang.isNumber
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews },
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User /**
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @attribute host
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @description The host we are plugged into.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @type Object
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews host: {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User value: null
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews },
0e9e255d1643375056aa9ed7fe2a279713ffae78Automatic Updater /**
cd791043c8a6edbcacc2392575a9816d19b8157cTinderbox User * @attribute windowScroll
cd791043c8a6edbcacc2392575a9816d19b8157cTinderbox User * @description Turn on window scroll support, default: false
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @type Boolean
481870b95fee976541f4fe455c0ef2dbeab3ec7aTinderbox User */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User windowScroll: {
481870b95fee976541f4fe455c0ef2dbeab3ec7aTinderbox User value: false,
481870b95fee976541f4fe455c0ef2dbeab3ec7aTinderbox User validator: Y.Lang.isBoolean
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User },
e839bf134fb138920d4833cf05cb8b8906787a8dAutomatic Updater /**
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @attribute vertical
e839bf134fb138920d4833cf05cb8b8906787a8dAutomatic Updater * @description Allow vertical scrolling, default: true.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @type Boolean
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User vertical: {
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater value: true,
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater validator: Y.Lang.isBoolean
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater },
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User /**
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater * @attribute horizontal
795a316ec568b2470aab18b9481443966047652eAutomatic Updater * @description Allow horizontal scrolling, default: true.
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @type Boolean
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater */
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater horizontal: {
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater value: true,
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater validator: Y.Lang.isBoolean
795a316ec568b2470aab18b9481443966047652eAutomatic Updater }
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User };
795a316ec568b2470aab18b9481443966047652eAutomatic Updater
795a316ec568b2470aab18b9481443966047652eAutomatic Updater Y.extend(S, Y.Base, {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt /**
795a316ec568b2470aab18b9481443966047652eAutomatic Updater * @private
795a316ec568b2470aab18b9481443966047652eAutomatic Updater * @property _scrolling
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @description Tells if we are actively scrolling or not.
795a316ec568b2470aab18b9481443966047652eAutomatic Updater * @type Boolean
795a316ec568b2470aab18b9481443966047652eAutomatic Updater */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User _scrolling: null,
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater /**
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @private
6478b87fd23bcd3ab74c25b261021fe19a239c4fTinderbox User * @property _vpRegionCache
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater * @description Cache of the Viewport dims.
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater * @type Object
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User */
ca67ebfe9eef0b8f04179f7e511a19e0337a5422Automatic Updater _vpRegionCache: null,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User /**
ca67ebfe9eef0b8f04179f7e511a19e0337a5422Automatic Updater * @private
ca67ebfe9eef0b8f04179f7e511a19e0337a5422Automatic Updater * @property _dimCache
ca67ebfe9eef0b8f04179f7e511a19e0337a5422Automatic Updater * @description Cache of the dragNode dims.
163af735c2082a024167be111d27bd5b5ff4f462Automatic Updater * @type Object
481870b95fee976541f4fe455c0ef2dbeab3ec7aTinderbox User */
481870b95fee976541f4fe455c0ef2dbeab3ec7aTinderbox User _dimCache: null,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User /**
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @private
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @property _scrollTimer
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @description Holder for the Timer object returned from Y.later.
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater * @type {Y.later}
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews _scrollTimer: null,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User /**
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater * @private
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater * @method _getVPRegion
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User * @description Sets the _vpRegionCache property with an Object containing the dims from the viewport.
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater */
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User _getVPRegion: function() {
0a7ed88633a680bb881868b75ded4d09a7bbbc50Automatic Updater var r = {},
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User n = this.get(PARENT_SCROLL),
6f1205897504b8f50b1785975482c995888dd630Tinderbox User b = this.get(BUFFER),
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User ws = this.get(WINDOW_SCROLL),
6f1205897504b8f50b1785975482c995888dd630Tinderbox User xy = ((ws) ? [] : n.getXY()),
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User w = ((ws) ? 'winWidth' : OFFSET_WIDTH),
6f1205897504b8f50b1785975482c995888dd630Tinderbox User h = ((ws) ? 'winHeight' : OFFSET_HEIGHT),
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User t = ((ws) ? n.get(SCROLL_TOP) : xy[1]),
6f1205897504b8f50b1785975482c995888dd630Tinderbox User l = ((ws) ? n.get(SCROLL_LEFT) : xy[0]);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews r = {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User top: t + b,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User right: (n.get(w) + l) - b,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User bottom: (n.get(h) + t) - b,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User left: l + b
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews };
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews this._vpRegionCache = r;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews return r;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews },
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User initializer: function() {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews var h = this.get(HOST);
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User h.after('drag:start', Y.bind(this.start, this));
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews h.after('drag:end', Y.bind(this.end, this));
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews h.on('drag:align', Y.bind(this.align, this));
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews //TODO - This doesn't work yet??
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User Y.one('win').on('scroll', Y.bind(function() {
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User this._vpRegionCache = null;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User }, this));
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User },
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews /**
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @private
b27ce68bae92006e2ad7a9b75602c6385e529c3bAutomatic Updater * @method _checkWinScroll
922312472e2e05ebc64993d465999c5351b83036Automatic Updater * @description Check to see if we need to fire the scroll timer. If scroll timer is running this will scroll the window.
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews * @param {Boolean} move Should we move the window. From Y.later
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User */
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews _checkWinScroll: function(move) {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews var r = this._getVPRegion(),
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews ho = this.get(HOST),
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews ws = this.get(WINDOW_SCROLL),
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User xy = ho.lastXY,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User scroll = false,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User b = this.get(BUFFER),
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User win = this.get(PARENT_SCROLL),
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews sTop = win.get(SCROLL_TOP),
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews sLeft = win.get(SCROLL_LEFT),
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User w = this._dimCache.w,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User h = this._dimCache.h,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User bottom = xy[1] + h,
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User top = xy[1],
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User right = xy[0] + w,
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews left = xy[0],
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews nt = top,
163af735c2082a024167be111d27bd5b5ff4f462Automatic Updater nl = left,
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews st = sTop,
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews sl = sLeft;
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews if (this.get('horizontal')) {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews if (left <= r.left) {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews scroll = true;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews nl = xy[0] - ((ws) ? b : 0);
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews sl = sLeft - b;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews }
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User if (right >= r.right) {
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User scroll = true;
50066670817cdf9e86c832066d73715232b29680Tinderbox User nl = xy[0] + ((ws) ? b : 0);
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews sl = sLeft + b;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews }
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews }
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User if (this.get('vertical')) {
f9aef05653eeb454c489d5bd2bde6daab774ad4aTinderbox User if (bottom >= r.bottom) {
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews scroll = true;
50066670817cdf9e86c832066d73715232b29680Tinderbox User nt = xy[1] + ((ws) ? b : 0);
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews st = sTop + b;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews }
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews if (top <= r.top) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt scroll = true;
582f8b9a8d170a80ef67475bddb8ad5cf7cd7cadMark Andrews nt = xy[1] - ((ws) ? b : 0);
922312472e2e05ebc64993d465999c5351b83036Automatic Updater st = sTop - b;
}
}
if (st < 0) {
st = 0;
nt = xy[1];
}
if (sl < 0) {
sl = 0;
nl = xy[0];
}
if (nt < 0) {
nt = xy[1];
}
if (nl < 0) {
nl = xy[0];
}
if (move) {
ho.actXY = [nl, nt];
ho._moveNode({ node: win, top: st, left: sl});
if (!st && !sl) {
this._cancelScroll();
}
} else {
if (scroll) {
this._initScroll();
} else {
this._cancelScroll();
}
}
},
/**
* @private
* @method _initScroll
* @description Cancel a previous scroll timer and init a new one.
*/
_initScroll: function() {
this._cancelScroll();
this._scrollTimer = Y.Lang.later(this.get('scrollDelay'), this, this._checkWinScroll, [true], true);
},
/**
* @private
* @method _cancelScroll
* @description Cancel a currently running scroll timer.
*/
_cancelScroll: function() {
this._scrolling = false;
if (this._scrollTimer) {
this._scrollTimer.cancel();
delete this._scrollTimer;
}
},
/**
* @method align
* @description Called from the drag:align event to determine if we need to scroll.
*/
align: function(e) {
if (this._scrolling) {
this._cancelScroll();
e.preventDefault();
}
if (!this._scrolling) {
this._checkWinScroll();
}
},
/**
* @private
* @method _setDimCache
* @description Set the cache of the dragNode dims.
*/
_setDimCache: function() {
var node = this.get(HOST).get('dragNode');
this._dimCache = {
h: node.get(OFFSET_HEIGHT),
w: node.get(OFFSET_WIDTH)
};
},
/**
* @method start
* @description Called from the drag:start event
*/
start: function() {
this._setDimCache();
},
/**
* @method end
* @description Called from the drag:end event
*/
end: function(xy) {
this._dimCache = null;
this._cancelScroll();
}
});
Y.namespace('Plugin');
/**
* Extends the Scroll class to make the window scroll while dragging.
* @class DDWindowScroll
* @extends Scroll
* @namespace Plugin
* @constructor
*/
WS = function() {
WS.superclass.constructor.apply(this, arguments);
};
WS.ATTRS = Y.merge(S.ATTRS, {
/**
* @attribute windowScroll
* @description Turn on window scroll support, default: true
* @type Boolean
*/
windowScroll: {
value: true,
setter: function(scroll) {
if (scroll) {
this.set(PARENT_SCROLL, Y.one('win'));
}
return scroll;
}
}
});
Y.extend(WS, S, {
//Shouldn't have to do this..
initializer: function() {
this.set('windowScroll', this.get('windowScroll'));
}
});
/**
* @property NS
* @default winscroll
* @readonly
* @protected
* @static
* @description The Scroll instance will be placed on the Drag instance under the winscroll namespace.
* @type {String}
*/
WS.NAME = WS.NS = 'winscroll';
Y.Plugin.DDWinScroll = WS;
/**
* Extends the Scroll class to make a parent node scroll while dragging.
* @class DDNodeScroll
* @extends Scroll
* @namespace Plugin
* @constructor
*/
NS = function() {
NS.superclass.constructor.apply(this, arguments);
};
NS.ATTRS = Y.merge(S.ATTRS, {
/**
* @attribute node
* @description The node we want to scroll. Used to set the internal parentScroll attribute.
* @type Node
*/
node: {
value: false,
setter: function(node) {
var n = Y.one(node);
if (!n) {
if (node !== false) {
Y.error('DDNodeScroll: Invalid Node Given: ' + node);
}
} else {
this.set(PARENT_SCROLL, n);
}
return n;
}
}
});
Y.extend(NS, S, {
//Shouldn't have to do this..
initializer: function() {
this.set('node', this.get('node'));
}
});
/**
* @property NS
* @default nodescroll
* @readonly
* @protected
* @static
* @description The NodeScroll instance will be placed on the Drag instance under the nodescroll namespace.
* @type {String}
*/
NS.NAME = NS.NS = 'nodescroll';
Y.Plugin.DDNodeScroll = NS;
Y.DD.Scroll = S;
}, '@VERSION@' ,{optional:['dd-proxy'], skinnable:false, requires:['dd-drag']});