Просмотр исходного кода

fix business hours with a lot of changes

Adam Shaw 8 лет назад
Родитель
Сommit
0c382a4955

+ 2 - 1
src/Calendar.business.js

@@ -26,7 +26,8 @@ Calendar.prototype.buildBusinessRangeGroup = function(wholeDay, rawComplexDef, r
 	var eventRanges = eventInstancesToEventRanges(eventInstances);
 	var eventRangeGroup = new EventRangeGroup(eventRanges);
 
-	eventRangeGroup.forcedDef = eventDefs[0];
+	// so that inverse-background rendering can happen even when no eventRanges in view
+	eventRangeGroup.explicitEventDef = eventDefs[0];
 
 	return eventRangeGroup;
 };

+ 4 - 3
src/Calendar.constraints.js

@@ -248,11 +248,12 @@ Calendar.prototype.eventRangesToEventFootprints = function(eventRanges) {
 Calendar.prototype.eventRangeToEventFootprints = function(eventRange) {
 	return [
 		new EventFootprint(
-			eventRange.eventInstance,
 			new ComponentFootprint(
 				eventRange.dateRange,
-				eventRange.eventInstance.dateProfile.isAllDay()
-			)
+				eventRange.eventDef.isAllDay()
+			),
+			eventRange.eventDef,
+			eventRange.eventInstance
 		)
 	];
 };

+ 1 - 1
src/agenda/AgendaView.js

@@ -308,7 +308,7 @@ var AgendaView = FC.AgendaView = View.extend({
 		for (id in eventsPayload) {
 			eventRangeGroup = eventsPayload[id];
 
-			if (eventRangeGroup.getEventInstance().dateProfile.isAllDay()) {
+			if (eventRangeGroup.getEventDef().isAllDay()) {
 				dayEventsPayload[id] = eventRangeGroup;
 			}
 			else {

+ 5 - 4
src/common/Grid.events.js

@@ -1070,11 +1070,12 @@ Grid.mixin({
 	eventRangeToEventFootprints: function(eventRange) {
 		return [
 			new EventFootprint(
-				eventRange.eventInstance,
 				new ComponentFootprint(
 					eventRange.dateRange,
-					eventRange.eventInstance.dateProfile.isAllDay()
-				)
+					eventRange.eventDef.isAllDay()
+				),
+				eventRange.eventDef,
+				eventRange.eventInstance
 			)
 		];
 	},
@@ -1119,7 +1120,7 @@ Grid.mixin({
 				seg.isEnd = false;
 			}
 
-			seg.event = eventFootprint.eventInstance.toLegacy();
+			seg.event = eventFootprint.toLegacy();
 			seg.footprint = eventFootprint;
 			seg.footprintStartMs = dateRange.startMs;
 			seg.footprintDurationMs = dateRange.endMs - dateRange.startMs;

+ 28 - 1
src/models/event/EventDef.js

@@ -21,6 +21,11 @@ var EventDef = Class.extend({
 	},
 
 
+	isAllDay: function() {
+		// subclasses must implement
+	},
+
+
 	buildInstances: function(start, end) {
 		// subclasses must implement
 	},
@@ -87,8 +92,30 @@ var EventDef = Class.extend({
 		}
 
 		return this.source.calendar.opt('eventOverlap');
-	}
+	},
+
+
+	toLegacy: function() {
+		var obj = {
+			_id: this.internalId,
+			source: this.source,
+			className: this.className // should clone?
+		};
 
+		if (this.rawId != null) {
+			obj.id = this.rawId;
+		}
+
+		if (this.title != null) {
+			obj.title = this.title;
+		}
+
+		if (this.rendering != null) {
+			obj.rendering = this.rendering;
+		}
+
+		return obj;
+	}
 
 });
 

+ 13 - 3
src/models/event/EventFootprint.js

@@ -1,13 +1,23 @@
 
 var EventFootprint = Class.extend({
 
-	eventInstance: null,
 	componentFootprint: null,
+	eventDef: null,
+	eventInstance: null, // optional
 
 
-	constructor: function(eventInstance, componentFootprint) {
-		this.eventInstance = eventInstance;
+	constructor: function(componentFootprint, eventDef, eventInstance) {
 		this.componentFootprint = componentFootprint;
+		this.eventDef = eventDef;
+
+		if (eventInstance) {
+			this.eventInstance = eventInstance;
+		}
+	},
+
+
+	toLegacy: function() {
+		return (this.eventInstance || this.eventDef).toLegacy();
 	}
 
 });

+ 8 - 23
src/models/event/EventInstance.js

@@ -13,8 +13,9 @@ var EventInstance = Class.extend({
 
 	buildEventRange: function() { // EventRange
 		return new EventRange(
-			this,
-			this.buildDateRange()
+			this.buildDateRange(),
+			this.def,
+			this
 		);
 	},
 
@@ -27,28 +28,12 @@ var EventInstance = Class.extend({
 
 
 	toLegacy: function() {
-		var def = this.def;
 		var dateProfile = this.dateProfile;
-		var obj = {
-			_id: def.internalId,
-			start: dateProfile.start.clone(),
-			end: dateProfile.end ? dateProfile.end.clone() : null,
-			allDay: dateProfile.isAllDay(),
-			source: def.source,
-			className: def.className // should clone?
-		};
-
-		if (def.rawId != null) {
-			obj.id = def.rawId;
-		}
-
-		if (def.title != null) {
-			obj.title = def.title;
-		}
-
-		if (def.rendering != null) {
-			obj.rendering = def.rendering;
-		}
+		var obj = this.def.toLegacy();
+
+		obj.start = dateProfile.start.clone();
+		obj.end = dateProfile.end ? dateProfile.end.clone() : null;
+		obj.allDay = dateProfile.isAllDay();
 
 		return obj;
 	}

+ 8 - 3
src/models/event/EventRange.js

@@ -1,13 +1,18 @@
 
 var EventRange = Class.extend({
 
-	eventInstance: null,
 	dateRange: null,
+	eventDef: null,
+	eventInstance: null, // optional
 
 
-	constructor: function(eventInstance, dateRange) {
-		this.eventInstance = eventInstance;
+	constructor: function(dateRange, eventDef, eventInstance) {
 		this.dateRange = dateRange;
+		this.eventDef = eventDef;
+
+		if (eventInstance) {
+			this.eventInstance = eventInstance;
+		}
 	}
 
 });

+ 7 - 10
src/models/event/EventRangeGroup.js

@@ -2,6 +2,7 @@
 var EventRangeGroup = Class.extend({
 
 	eventRanges: null,
+	explicitEventDef: null, // optional
 
 
 	constructor: function(eventRanges) {
@@ -33,8 +34,9 @@ var EventRangeGroup = Class.extend({
 			if (slicedDateRange) {
 				slicedEventRanges.push(
 					new EventRange(
-						eventRange.eventInstance,
-						slicedDateRange
+						slicedDateRange,
+						eventRange.eventDef,
+						eventRange.eventInstance
 					)
 				);
 			}
@@ -46,12 +48,12 @@ var EventRangeGroup = Class.extend({
 
 	sliceInverseRenderRanges: function(constraintRange) {
 		var dateRanges = collectDateRangesFromEventRanges(this.eventRanges);
-		var ownerInstance = this.eventRanges[0].eventInstance;
+		var ownerDef = this.getEventDef();
 
 		dateRanges = invertDateRanges(dateRanges, constraintRange);
 
 		return dateRanges.map(function(dateRange) {
-			return new EventRange(ownerInstance, dateRange);
+			return new EventRange(dateRange, ownerDef);
 		});
 	},
 
@@ -62,12 +64,7 @@ var EventRangeGroup = Class.extend({
 
 
 	getEventDef: function() {
-		return this.getEventInstance().def;
-	},
-
-
-	getEventInstance: function() {
-		return this.eventRanges[0].eventInstance;
+		return this.explicitEventDef || this.eventRanges[0].eventDef;
 	}
 
 });

+ 5 - 0
src/models/event/RecurringEventDef.js

@@ -6,6 +6,11 @@ var RecurringEventDef = EventDef.extend({
 	dowHash: null, // object hash, or null
 
 
+	isAllDay: function() {
+		return !this.startTime && !this.endTime;
+	},
+
+
 	buildInstances: function(start, end) {
 		var date = start.clone();
 		var instanceStart, instanceEnd;