dd-scroll-debug.js revision 76ca635d61eb3f9fb7c9d788a44fa8b1690aa138
c40265eba0c99708887d68e67901924065ba2514Brian WellingtonYUI.add('dd-scroll', function(Y) {
557a0ad5156aefc96dce27978a920eadf85c9d55Mark Andrews
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
c40265eba0c99708887d68e67901924065ba2514Brian Wellington * Base scroller class used to create the Plugin.DDNodeScroll and Plugin.DDWinScroll.
c40265eba0c99708887d68e67901924065ba2514Brian Wellington * This class should not be called on it's own, it's designed to be a plugin.
c40265eba0c99708887d68e67901924065ba2514Brian Wellington * @module dd
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @submodule dd-scroll
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews */
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Base scroller class used to create the Plugin.DDNodeScroll and Plugin.DDWinScroll.
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews * This class should not be called on it's own, it's designed to be a plugin.
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews * @class Scroll
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews * @extends Base
af5073d03288a53b646ec3b807ac25ced64d7879Mark Andrews * @namespace DD
c40265eba0c99708887d68e67901924065ba2514Brian Wellington * @constructor
285254345ce5ab270848f8c11f7be146793f1e00Mark Andrews */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var S = function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein S.superclass.constructor.apply(this, arguments);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein WS, NS,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein HOST = 'host',
5a4557e8de2951a2796676b5ec4b6a90caa5be14Mark Andrews BUFFER = 'buffer',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein PARENT_SCROLL = 'parentScroll',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein WINDOW_SCROLL = 'windowScroll',
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews SCROLL_TOP = 'scrollTop',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein SCROLL_LEFT = 'scrollLeft',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein OFFSET_WIDTH = 'offsetWidth',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein OFFSET_HEIGHT = 'offsetHeight';
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein S.ATTRS = {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews * @attribute parentScroll
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @description Internal config option to hold the node that we are scrolling. Should not be set by the developer.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @type Node
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein parentScroll: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein value: false,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein setter: function(node) {
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews if (node) {
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews return node;
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews }
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews return false;
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews }
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews },
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews /**
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @attribute buffer
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @description The number of pixels from the edge of the screen to turn on scrolling. Default: 30
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @type Number
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein buffer: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein value: 30,
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews validator: Y.Lang.isNumber
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @attribute scrollDelay
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @description The number of milliseconds delay to pass to the auto scroller. Default: 235
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @type Number
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein scrollDelay: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein value: 235,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein validator: Y.Lang.isNumber
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @attribute host
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @description The host we are plugged into.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @type Object
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein */
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein host: {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein value: null
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @attribute windowScroll
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @description Turn on window scroll support, default: false
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @type Boolean
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews */
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews windowScroll: {
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews value: false,
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews validator: Y.Lang.isBoolean
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews },
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews /**
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews * @attribute vertical
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews * @description Allow vertical scrolling, default: true.
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @type Boolean
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews */
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews vertical: {
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews value: true,
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews validator: Y.Lang.isBoolean
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews },
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews /**
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @attribute horizontal
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @description Allow horizontal scrolling, default: true.
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @type Boolean
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews */
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews horizontal: {
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews value: true,
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews validator: Y.Lang.isBoolean
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews }
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews };
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews Y.extend(S, Y.Base, {
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews /**
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @private
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @property _scrolling
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @description Tells if we are actively scrolling or not.
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @type Boolean
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews */
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews _scrolling: null,
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews /**
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews * @private
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews * @property _vpRegionCache
a057e8e33baa5fa369be28a9680585200ce3ff73Mark Andrews * @description Cache of the Viewport dims.
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews * @type Object
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews */
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews _vpRegionCache: null,
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews /**
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @private
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @property _dimCache
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @description Cache of the dragNode dims.
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @type Object
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews */
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews _dimCache: null,
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews /**
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @private
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @property _scrollTimer
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @description Holder for the Timer object returned from Y.later.
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @type {Y.later}
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews */
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews _scrollTimer: null,
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews /**
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @private
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @method _getVPRegion
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @description Sets the _vpRegionCache property with an Object containing the dims from the viewport.
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews */
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews _getVPRegion: function() {
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews var r = {},
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews n = this.get(PARENT_SCROLL),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews b = this.get(BUFFER),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews ws = this.get(WINDOW_SCROLL),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein xy = ((ws) ? [] : n.getXY()),
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein w = ((ws) ? 'winWidth' : OFFSET_WIDTH),
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews h = ((ws) ? 'winHeight' : OFFSET_HEIGHT),
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews t = ((ws) ? n.get(SCROLL_TOP) : xy[1]),
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews l = ((ws) ? n.get(SCROLL_LEFT) : xy[0]);
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews r = {
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews top: t + b,
3a3705ef7747327df182bf8d009333d2472253d5Mark Andrews right: (n.get(w) + l) - b,
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews bottom: (n.get(h) + t) - b,
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews left: l + b
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews };
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews this._vpRegionCache = r;
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews return r;
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews },
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews initializer: function() {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein var h = this.get(HOST);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein h.after('drag:start', Y.bind(this.start, this));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein h.after('drag:end', Y.bind(this.end, this));
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews h.on('drag:align', Y.bind(this.align, this));
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews //TODO - This doesn't work yet??
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews Y.one('win').on('scroll', Y.bind(function() {
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews this._vpRegionCache = null;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }, this));
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @private
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @method _checkWinScroll
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews * @description Check to see if we need to fire the scroll timer. If scroll timer is running this will scroll the window.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @param {Boolean} move Should we move the window. From Y.later
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews */
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews _checkWinScroll: function(move) {
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews var r = this._getVPRegion(),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews ho = this.get(HOST),
285254345ce5ab270848f8c11f7be146793f1e00Mark Andrews ws = this.get(WINDOW_SCROLL),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews xy = ho.lastXY,
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews scroll = false,
285254345ce5ab270848f8c11f7be146793f1e00Mark Andrews b = this.get(BUFFER),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews win = this.get(PARENT_SCROLL),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews sTop = win.get(SCROLL_TOP),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews sLeft = win.get(SCROLL_LEFT),
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews w = this._dimCache.w,
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews h = this._dimCache.h,
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews bottom = xy[1] + h,
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews top = xy[1],
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews right = xy[0] + w,
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews left = xy[0],
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews nt = top,
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews nl = left,
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews st = sTop,
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews sl = sLeft;
3b4098640dd85040270f39b9a5ee5e22de99d3d6Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (this.get('horizontal')) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (left <= r.left) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein scroll = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nl = xy[0] - ((ws) ? b : 0);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sl = sLeft - b;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (right >= r.right) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein scroll = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nl = xy[0] + ((ws) ? b : 0);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sl = sLeft + b;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (this.get('vertical')) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (bottom >= r.bottom) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein scroll = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nt = xy[1] + ((ws) ? b : 0);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein st = sTop + b;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
7208386cd37a2092c70eddf80cf29519b16c4c80Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (top <= r.top) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein scroll = true;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nt = xy[1] - ((ws) ? b : 0);
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein st = sTop - b;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (st < 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein st = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nt = xy[1];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (sl < 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein sl = 0;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nl = xy[0];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (nt < 0) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein nt = xy[1];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (nl < 0) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews nl = xy[0];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (move) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ho.actXY = [nl, nt];
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ho._moveNode({ node: win, top: st, left: sl});
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (!st && !sl) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._cancelScroll();
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (scroll) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._initScroll();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein } else {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein this._cancelScroll();
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein }
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews }
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein },
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein /**
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @private
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @method _initScroll
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @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();
},
/**
* @method toString
* @description General toString method for logging
* @return String name for the object
*/
toString: function() {
return S.NAME + ' #' + this.get('node').get('id');
}
});
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@' ,{skinnable:false, optional:['dd-proxy'], requires:['dd-drag']});