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