Răsfoiți Sursa

only call eventDataTransform for event data received from real event sources. fixes #3859

Adam Shaw 8 ani în urmă
părinte
comite
3b1d5a23d7

+ 16 - 4
src/models/event-source/EventSource.js

@@ -58,10 +58,7 @@ var EventSource = Class.extend(ParsableModelMixin, {
 		var eventDefs = [];
 
 		for (i = 0; i < rawEventDefs.length; i++) {
-			eventDef = EventDefParser.parse(
-				rawEventDefs[i],
-				this // source
-			);
+			eventDef = this.parseEventDef(rawEventDefs[i]);
 
 			if (eventDef) {
 				eventDefs.push(eventDef);
@@ -72,6 +69,21 @@ var EventSource = Class.extend(ParsableModelMixin, {
 	},
 
 
+	parseEventDef: function(rawInput) {
+		var calendarTransform = this.calendar.opt('eventDataTransform');
+		var sourceTransform = this.eventDataTransform;
+
+		if (calendarTransform) {
+			rawInput = calendarTransform(rawInput);
+		}
+		if (sourceTransform) {
+			rawInput = sourceTransform(rawInput);
+		}
+
+		return EventDefParser.parse(rawInput, this);
+	},
+
+
 	applyManualStandardProps: function(rawProps) {
 
 		if (rawProps.id != null) {

+ 0 - 9
src/models/event/EventDef.js

@@ -236,15 +236,6 @@ EventDef.defineStandardProps({
 
 EventDef.parse = function(rawInput, source) {
 	var def = new this(source);
-	var calendarTransform = source.calendar.opt('eventDataTransform');
-	var sourceTransform = source.eventDataTransform;
-
-	if (calendarTransform) {
-		rawInput = calendarTransform(rawInput);
-	}
-	if (sourceTransform) {
-		rawInput = sourceTransform(rawInput);
-	}
 
 	if (def.applyProps(rawInput)) {
 		return def;

+ 14 - 2
tests/legacy/constraint.js

@@ -196,16 +196,28 @@ describe('event constraint', function() {
 					});
 				});
 				describe('using eventConstraint', function() {
-					it('does not allow a drag', function(done) {
+					it('does not allow a drag and doesnt call eventDataTransform', function(done) {
+
 						options.events = [ {
 							start: '2014-11-10T01:00:00',
 							end: '2014-11-10T02:00:00'
 						} ];
+
 						options.eventConstraint = {
 							start: '2014-11-10T03:00:00',
 							end: '2014-11-10T06:00:00'
 						};
-						testEventDrag(options, '2014-11-10T06:00:00', false, done);
+
+						options.eventDataTransform = function(inData) {
+							return inData;
+						};
+
+						spyOn(options, 'eventDataTransform').and.callThrough();
+
+						testEventDrag(options, '2014-11-10T06:00:00', false, function() {
+							expect(options.eventDataTransform.calls.count()).toBe(1); // only initial parse
+							done();
+						});
 					});
 				});
 			});