|  |  | @ -1110,6 +1110,20 @@ ItemSet.prototype._onTouch = function (event) { | 
			
		
	
		
			
				
					|  |  |  | this.touchParams.itemProps = null; | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  | * Given an group id, returns the index it has. | 
			
		
	
		
			
				
					|  |  |  | * | 
			
		
	
		
			
				
					|  |  |  | * @param {Number} groupID | 
			
		
	
		
			
				
					|  |  |  | * @private | 
			
		
	
		
			
				
					|  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  | ItemSet.prototype._getGroupIndex = function(groupId) { | 
			
		
	
		
			
				
					|  |  |  | for (var i = 0; i < this.groupIds.length; i++) { | 
			
		
	
		
			
				
					|  |  |  | if (groupId == this.groupIds[i]) | 
			
		
	
		
			
				
					|  |  |  | return i; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | /** | 
			
		
	
		
			
				
					|  |  |  | * Start dragging the selected events | 
			
		
	
		
			
				
					|  |  |  | * @param {Event} event | 
			
		
	
	
		
			
				
					|  |  | @ -1157,11 +1171,17 @@ ItemSet.prototype._onDragStart = function (event) { | 
			
		
	
		
			
				
					|  |  |  | this.touchParams.itemProps = [props]; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | else { | 
			
		
	
		
			
				
					|  |  |  | this.touchParams.selectedItem = item; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | var baseGroupIndex = this._getGroupIndex(item.data.group); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | this.touchParams.itemProps = this.getSelection().map(function (id) { | 
			
		
	
		
			
				
					|  |  |  | var item = me.items[id]; | 
			
		
	
		
			
				
					|  |  |  | var groupIndex = me._getGroupIndex(item.data.group); | 
			
		
	
		
			
				
					|  |  |  | var props = { | 
			
		
	
		
			
				
					|  |  |  | item: item, | 
			
		
	
		
			
				
					|  |  |  | initialX: event.center.x, | 
			
		
	
		
			
				
					|  |  |  | groupOffset: baseGroupIndex-groupIndex, | 
			
		
	
		
			
				
					|  |  |  | data: util.extend({}, item.data) // clone the items data | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  | @ -1238,6 +1258,22 @@ ItemSet.prototype._onDrag = function (event) { | 
			
		
	
		
			
				
					|  |  |  | var scale = this.body.util.getScale(); | 
			
		
	
		
			
				
					|  |  |  | var step = this.body.util.getStep(); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | //only calculate the new group for the item that's actually dragged | 
			
		
	
		
			
				
					|  |  |  | var selectedItem = this.touchParams.selectedItem; | 
			
		
	
		
			
				
					|  |  |  | var updateGroupAllowed = me.options.editable.updateGroup; | 
			
		
	
		
			
				
					|  |  |  | var newGroupBase = null; | 
			
		
	
		
			
				
					|  |  |  | if (updateGroupAllowed && selectedItem) { | 
			
		
	
		
			
				
					|  |  |  | if (selectedItem.data.group != undefined) { | 
			
		
	
		
			
				
					|  |  |  | // drag from one group to another | 
			
		
	
		
			
				
					|  |  |  | var group = me.groupFromTarget(event); | 
			
		
	
		
			
				
					|  |  |  | if (group) { | 
			
		
	
		
			
				
					|  |  |  | //we know the offset for all items, so the new group for all items | 
			
		
	
		
			
				
					|  |  |  | //will be relative to this one. | 
			
		
	
		
			
				
					|  |  |  | newGroupBase = this._getGroupIndex(group.groupId); | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | // move | 
			
		
	
		
			
				
					|  |  |  | this.touchParams.itemProps.forEach(function (props) { | 
			
		
	
		
			
				
					|  |  |  | var newProps = {}; | 
			
		
	
	
		
			
				
					|  |  | @ -1294,13 +1330,15 @@ ItemSet.prototype._onDrag = function (event) { | 
			
		
	
		
			
				
					|  |  |  | var updateGroupAllowed = me.options.editable.updateGroup || | 
			
		
	
		
			
				
					|  |  |  | props.item.editable === true; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | if (updateGroupAllowed && (!props.dragLeft && !props.dragRight)) { | 
			
		
	
		
			
				
					|  |  |  | if (updateGroupAllowed && (!props.dragLeft && !props.dragRight) && newGroupBase!=null) { | 
			
		
	
		
			
				
					|  |  |  | if (itemData.group != undefined) { | 
			
		
	
		
			
				
					|  |  |  | // drag from one group to another | 
			
		
	
		
			
				
					|  |  |  | var group = me.groupFromTarget(event); | 
			
		
	
		
			
				
					|  |  |  | if (group) { | 
			
		
	
		
			
				
					|  |  |  | itemData.group = group.groupId; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | var newOffset = newGroupBase - props.groupOffset; | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | //make sure we stay in bounds | 
			
		
	
		
			
				
					|  |  |  | newOffset = Math.max(0, newOffset); | 
			
		
	
		
			
				
					|  |  |  | newOffset = Math.min(me.groupIds.length-1, newOffset); | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
		
			
				
					|  |  |  | itemData.group = me.groupIds[newOffset]; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
			
		
	
	
		
			
				
					|  |  |  |