|  |  | @ -112,7 +112,7 @@ Core.prototype._create = function (container) { | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | }.bind(this)); | 
			
		
	
		
			
				
					|  |  |  | this.on('touch',       this._onTouch.bind(this)); | 
			
		
	
		
			
				
					|  |  |  | this.on('pan',         this._onDrag.bind(this)); | 
			
		
	
		
			
				
					|  |  |  | this.on('panmove',         this._onDrag.bind(this)); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | var me = this; | 
			
		
	
		
			
				
					|  |  |  | this.on('_change', function (properties) { | 
			
		
	
	
		
			
				
					|  |  | @ -191,8 +191,13 @@ Core.prototype._create = function (container) { | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | var current = this.props.scrollTop; | 
			
		
	
		
			
				
					|  |  |  | var adjusted = current + delta * 120; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (this.isActive()) { | 
			
		
	
		
			
				
					|  |  |  | this._setScrollTop(adjusted); | 
			
		
	
		
			
				
					|  |  |  | if (this.options.verticalScroll) { | 
			
		
	
		
			
				
					|  |  |  | this.dom.left.parentNode.scrollTop = -adjusted; | 
			
		
	
		
			
				
					|  |  |  | this.dom.right.parentNode.scrollTop = -adjusted; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | this._redraw(); | 
			
		
	
		
			
				
					|  |  |  | this.emit('scroll', event); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | @ -202,29 +207,29 @@ Core.prototype._create = function (container) { | 
			
		
	
		
			
				
					|  |  |  | event.preventDefault(); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (this.dom.root.addEventListener) { | 
			
		
	
		
			
				
					|  |  |  | if (this.dom.center.addEventListener) { | 
			
		
	
		
			
				
					|  |  |  | // IE9, Chrome, Safari, Opera | 
			
		
	
		
			
				
					|  |  |  | this.dom.root.addEventListener("mousewheel", onMouseWheel.bind(this), false); | 
			
		
	
		
			
				
					|  |  |  | this.dom.center.addEventListener("mousewheel", onMouseWheel.bind(this), false); | 
			
		
	
		
			
				
					|  |  |  | // Firefox | 
			
		
	
		
			
				
					|  |  |  | this.dom.root.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false); | 
			
		
	
		
			
				
					|  |  |  | this.dom.center.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false); | 
			
		
	
		
			
				
					|  |  |  | } else { | 
			
		
	
		
			
				
					|  |  |  | // IE 6/7/8 | 
			
		
	
		
			
				
					|  |  |  | this.dom.root.attachEvent("onmousewheel", onMouseWheel.bind(this)); | 
			
		
	
		
			
				
					|  |  |  | this.dom.center.attachEvent("onmousewheel", onMouseWheel.bind(this)); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | function onMouseScrollSide(event) { | 
			
		
	
		
			
				
					|  |  |  | var current = this.scrollTop; | 
			
		
	
		
			
				
					|  |  |  | var adjusted = -current; | 
			
		
	
		
			
				
					|  |  |  | if (!me.options.verticalScroll) return; | 
			
		
	
		
			
				
					|  |  |  | event.preventDefault(); | 
			
		
	
		
			
				
					|  |  |  | if (me.isActive()) { | 
			
		
	
		
			
				
					|  |  |  | var adjusted = -event.target.scrollTop; | 
			
		
	
		
			
				
					|  |  |  | me._setScrollTop(adjusted); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | me._redraw(); | 
			
		
	
		
			
				
					|  |  |  | me.emit('scroll', event); | 
			
		
	
		
			
				
					|  |  |  | me.emit('scrollSide', event); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide); | 
			
		
	
		
			
				
					|  |  |  | this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide); | 
			
		
	
		
			
				
					|  |  |  | this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this)); | 
			
		
	
		
			
				
					|  |  |  | this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this)); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | this.customTimes = []; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | @ -820,10 +825,9 @@ Core.prototype._redraw = function() { | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | // update the scrollTop, feasible range for the offset can be changed | 
			
		
	
		
			
				
					|  |  |  | // when the height of the Core or of the contents of the center changed | 
			
		
	
		
			
				
					|  |  |  | this._updateScrollTop(); | 
			
		
	
		
			
				
					|  |  |  | var offset = this._updateScrollTop(); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | // reposition the scrollable contents | 
			
		
	
		
			
				
					|  |  |  | var offset = this.props.scrollTop; | 
			
		
	
		
			
				
					|  |  |  | if (options.orientation.item != 'top') { | 
			
		
	
		
			
				
					|  |  |  | offset += Math.max(this.props.centerContainer.height - this.props.center.height - | 
			
		
	
		
			
				
					|  |  |  | this.props.border.top - this.props.border.bottom, 0); | 
			
		
	
	
		
			
				
					|  |  | @ -844,12 +848,10 @@ Core.prototype._redraw = function() { | 
			
		
	
		
			
				
					|  |  |  | dom.shadowBottomRight.style.visibility  = visibilityBottom; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (this.options.verticalScroll) { | 
			
		
	
		
			
				
					|  |  |  | this.dom.shadowTopRight.style.visibility     = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | this.dom.shadowBottomRight.style.visibility  = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | this.dom.shadowTopLeft.style.visibility      = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | this.dom.shadowBottomLeft.style.visibility   = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | document.getElementsByClassName('vis-left')[0].scrollTop = -offset; | 
			
		
	
		
			
				
					|  |  |  | document.getElementsByClassName('vis-right')[0].scrollTop = -offset; | 
			
		
	
		
			
				
					|  |  |  | dom.shadowTopRight.style.visibility     = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | dom.shadowBottomRight.style.visibility  = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | dom.shadowTopLeft.style.visibility      = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | dom.shadowBottomLeft.style.visibility   = "hidden"; | 
			
		
	
		
			
				
					|  |  |  | } else { | 
			
		
	
		
			
				
					|  |  |  | dom.left.style.top    = offset + 'px'; | 
			
		
	
		
			
				
					|  |  |  | dom.right.style.top   = offset + 'px'; | 
			
		
	
	
		
			
				
					|  |  | @ -1070,6 +1072,7 @@ Core.prototype._onPinch = function (event) { | 
			
		
	
		
			
				
					|  |  |  | * @private | 
			
		
	
		
			
				
					|  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  | Core.prototype._onDrag = function (event) { | 
			
		
	
		
			
				
					|  |  |  | if (!event) return | 
			
		
	
		
			
				
					|  |  |  | // refuse to drag when we where pinching to prevent the timeline make a jump | 
			
		
	
		
			
				
					|  |  |  | // when releasing the fingers in opposite order from the touch screen | 
			
		
	
		
			
				
					|  |  |  | if (!this.touch.allowDragging) return; | 
			
		
	
	
		
			
				
					|  |  | @ -1079,6 +1082,10 @@ Core.prototype._onDrag = function (event) { | 
			
		
	
		
			
				
					|  |  |  | var oldScrollTop = this._getScrollTop(); | 
			
		
	
		
			
				
					|  |  |  | var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (this.options.verticalScroll) { | 
			
		
	
		
			
				
					|  |  |  | this.dom.left.parentNode.scrollTop = -this.props.scrollTop; | 
			
		
	
		
			
				
					|  |  |  | this.dom.right.parentNode.scrollTop = -this.props.scrollTop; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (newScrollTop != oldScrollTop) { | 
			
		
	
		
			
				
					|  |  |  | this.emit("verticalDrag"); | 
			
		
	
	
		
			
				
					|  |  |  |