Преглед изворни кода

fix event mutation to better work with end resizes

Adam Shaw пре 8 година
родитељ
комит
b63e9a8525

+ 3 - 3
src/EventManager.js

@@ -599,7 +599,7 @@ function EventManager() { // assumed to be a calendar
 				null, // largeUnit -- who uses it?
 				t // calendar
 			);
-			eventMutation.mutateSingleEventDefinition(eventDef);
+			eventMutation.mutateSingleEventDefinition(eventDef, t); // calendar=t
 		}
 
 		reportEventChange(); // reports event modifications (so we can redraw)
@@ -1166,7 +1166,7 @@ Calendar.prototype.mutateEventsWithId = function(id, eventMutation) {
 			undoFuncs.push(
 				eventMutation.mutateSingleEventDefinition(
 					eventDefs[i],
-					this.getIsAmbigTimezone()
+					this // calendar
 				)
 			);
 		}
@@ -1474,7 +1474,7 @@ Calendar.prototype.buildMutatedEventInstanceGroup = function(eventId, eventMutat
 
 		if (defCopy instanceof SingleEventDefinition) {
 
-			eventMutation.mutateSingleEventDefinition(defCopy);
+			eventMutation.mutateSingleEventDefinition(defCopy, this); // calendar=this
 			eventInstances = defCopy.buildInstances(viewRange.start, viewRange.end);
 
 			allInstances.push.apply(allInstances,

+ 20 - 10
src/models/EventDateMutation.js

@@ -5,10 +5,11 @@ var EventDateMutation = Class.extend({ // TODO: EventDefDateMutation
 	forceTimed: false,
 	forceAllDay: false,
 	dateDelta: null,
-	durationDelta: null,
+	startDelta: null,
+	endDelta: null,
 
 
-	mutateSingleEventDefinition: function(eventDef, isAmbigTimezone) {
+	mutateSingleEventDefinition: function(eventDef, calendar) {
 		var origStart = eventDef.start;
 		var origEnd = eventDef.end;
 		var start = origStart.clone();
@@ -48,16 +49,25 @@ var EventDateMutation = Class.extend({ // TODO: EventDefDateMutation
 			}
 		}
 
-		if (this.durationDelta) {
+		// do this before adding startDelta to start,
+		// so we can work off of start
+		if (this.endDelta) {
 
-			if (end) {
-				end.add(this.durationDelta);
+			if (!end) {
+				// eventDef better be a SingleEventDefinition!
+				end = calendar.getDefaultEventEnd(eventDef.isAllDay(), start);
 			}
+
+			end.add(this.endDelta);
+		}
+
+		if (this.startDelta) {
+			start.add(this.startDelta);
 		}
 
-		if (isAmbigTimezone) {
+		if (calendar.getIsAmbigTimezone()) {
 
-			if (start.hasTime() && this.dateDelta) {
+			if (start.hasTime() && (this.dateDelta || this.startDelta)) {
 				start.stripZone();
 			}
 
@@ -97,8 +107,8 @@ EventDateMutation.createFromDiff = function(profile1, profile2, largeUnit) {
 	var forceTimed = profile1.isAllDay() && !profile2.isAllDay();
 	var forceAllDay = !profile1.isAllDay() && profile2.isAllDay();
 	var dateDelta;
+	var endDiff;
 	var endDelta;
-	var durationDelta;
 	var mutation;
 
 	// diffs the dates in the appropriate way, returning a duration
@@ -117,8 +127,8 @@ EventDateMutation.createFromDiff = function(profile1, profile2, largeUnit) {
 	dateDelta = diffDates(profile2.start, profile1.start);
 
 	if (profile2.end) {
-		endDelta = diffDates(profile2.end, profile1.getEnd());
-		durationDelta = endDelta.subtract(dateDelta);
+		endDiff = diffDates(profile2.end, profile1.getEnd());
+		endDelta = endDiff.subtract(dateDelta);
 	}
 
 	mutation = new EventDateMutation();

+ 2 - 2
src/models/EventMutation.js

@@ -8,7 +8,7 @@ var EventMutation = Class.extend({ // TODO: EventDefMutation
 
 
 	// will not provide an undo function
-	mutateSingleEventDefinition: function(eventDef, isAmbigTimezone) {
+	mutateSingleEventDefinition: function(eventDef, calendar) {
 		var origTitle = eventDef.title;
 		var origRendering = eventDef.rendering;
 		var origMiscProps = eventDef.miscProps;
@@ -26,7 +26,7 @@ var EventMutation = Class.extend({ // TODO: EventDefMutation
 
 		undoDateMutation = this.dateMutation.mutateSingleEventDefinition(
 			eventDef,
-			isAmbigTimezone
+			calendar
 		);
 
 		return function() {

+ 5 - 0
src/models/SingleEventDefinition.js

@@ -25,6 +25,11 @@ var SingleEventDefinition = EventDefinition.extend({
 		}
 
 		return def;
+	},
+
+
+	isAllDay: function() {
+		return !(this.start.hasTime() || this.end.hasTime());
 	}
 
 });