define(function(require, exports, module) { /* wrapped scroll controller */ "use strict"; var Util = require('../util'), Base = require('../base'); var Controller = function(cfg) { Controller.superclass.constructor.call(this, cfg); this.userConfig = Util.mix({}, cfg); this.init(); } Util.extend(Controller, Base, { init: function() { var self = this; self.xscroll = self.userConfig.xscroll; }, add: function(scroll, cfg) { var self = this; cfg = Util.extend({ captureBounce: false, stopPropagation: true }, cfg) if (!self.__scrolls) { self.__scrolls = {}; } if (scroll.guid && !self.__scrolls[scroll.guid]) { scroll.parentscroll = self.xscroll; self._bind(scroll); return self.__scrolls[scroll.guid] = scroll; } return; }, remove: function(scroll) { var self = this; if (!scroll || !scroll.guid) return; var subscroll = self.__scrolls[scroll.guid]; if (subscroll) { subscroll.parentscroll = null; self._unbind(scroll); subscroll = null; } }, get: function(guid) { if (guid) { return this.__scrolls[guid]; } return this.__scrolls; }, _unbind: function(sub) { }, _bind: function(sub) { var self = this, xscroll = self.xscroll; xscroll.renderTo.addEventListener("touchstart", function() { xscroll._resetLockConfig(); }); sub.renderTo.addEventListener("touchstart", function() { sub._resetLockConfig(); }); xscroll.on("panend", xscroll._resetLockConfig); sub.on("panend", sub._resetLockConfig); sub.on("panstart", function(e) { //vertical scroll enabled if (!sub.userConfig.lockY && !xscroll.userConfig.lockY) { //outside of boundry if (sub.isBoundryOut()) { xscroll.userConfig.lockY = true; return; } if (e.direction == 16 && sub.getBoundryOutTop() >= 0) { sub.userConfig.lockY = true; } else if (e.direction == 8 && sub.getBoundryOutTop() >= 0 && sub.getBoundryOutBottom() < 0) { xscroll.userConfig.lockY = true; } if (e.direction == 8 && sub.getBoundryOutBottom() >= 0) { sub.userConfig.lockY = true; } else if (e.direction == 16 && sub.getBoundryOutBottom() >= 0 && sub.getBoundryOutTop() < 0) { xscroll.userConfig.lockY = true; } if (sub.getBoundryOutTop() < 0 && sub.getBoundryOutBottom() < 0) { xscroll.userConfig.lockY = true; } } //horizontal scroll enabled if (!sub.userConfig.lockX && !xscroll.userConfig.lockX) { if (sub.isBoundryOut()) { xscroll.userConfig.lockX = true; return; } if (e.direction == 4 && sub.getBoundryOutLeft() >= 0) { sub.userConfig.lockX = true; } else if (e.direction == 2 && sub.getBoundryOutLeft() >= 0 && sub.getBoundryOutRight() < 0) { xscroll.userConfig.lockX = true; } if (e.direction == 2 && sub.getBoundryOutRight() >= 0) { sub.userConfig.lockX = true; } else if (e.direction == 4 && sub.getBoundryOutRight() >= 0 && sub.getBoundryOutLeft() < 0) { xscroll.userConfig.lockX = true; } if (sub.getBoundryOutLeft() < 0 && sub.getBoundryOutRight() < 0) { xscroll.userConfig.lockX = true; } } if (!sub.userConfig.lockX && xscroll.userConfig.lockX) { //pan x if (e.direction == 2 || e.direction == 4) { xscroll.userConfig.lockY = true; } else { sub.userConfig.lockX = true; } } if (!sub.userConfig.lockY && xscroll.userConfig.lockY) { //pan y if (e.direction == 8 || e.direction == 16) { xscroll.userConfig.lockX = true; } else { sub.userConfig.lockY = true; } } }); } }); if (typeof module == 'object' && module.exports) { module.exports = Controller; } /** ignored by jsdoc **/ else { return Controller; } });