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