Sfoglia il codice sorgente

more, esp businesshours

Adam Shaw 8 anni fa
parent
commit
07b50dd91c
5 ha cambiato i file con 68 aggiunte e 64 eliminazioni
  1. 1 1
      src.json
  2. 47 53
      src/Calendar.business.js
  3. 1 1
      src/Calendar.constraints.js
  4. 5 9
      src/common/Grid.events.js
  5. 14 0
      src/models/event/util.js

+ 1 - 1
src.json

@@ -55,7 +55,6 @@
     "models/event/SingleEventDef.js",
     "models/event/SingleEventDef.js",
     "models/event/RecurringEventDef.js",
     "models/event/RecurringEventDef.js",
     "models/event/EventInstance.js",
     "models/event/EventInstance.js",
-    "models/event/EventInstanceGroup.js",
     "models/event/EventStartEndMixin.js",
     "models/event/EventStartEndMixin.js",
     "models/event/EventDateProfile.js",
     "models/event/EventDateProfile.js",
     "models/event/EventRangeGroup.js",
     "models/event/EventRangeGroup.js",
@@ -63,6 +62,7 @@
     "models/event/EventFootprint.js",
     "models/event/EventFootprint.js",
     "models/event/EventDefMutation.js",
     "models/event/EventDefMutation.js",
     "models/event/EventDefDateMutation.js",
     "models/event/EventDefDateMutation.js",
+    "models/event/util.js",
     "models/event-source/EventSource.js",
     "models/event-source/EventSource.js",
     "models/event-source/EventSourceParser.js",
     "models/event-source/EventSourceParser.js",
     "models/event-source/ArrayEventSource.js",
     "models/event-source/ArrayEventSource.js",

+ 47 - 53
src/Calendar.business.js

@@ -8,75 +8,69 @@ var BUSINESS_HOUR_EVENT_DEFAULTS = {
 };
 };
 
 
 
 
-// Return events objects for business hours within the current view.
-// Abuse of our event system :(
-Calendar.prototype.buildCurrentBusinessRanges = function(wholeDay) {
+Calendar.prototype.buildCurrentBusinessRangeGroup = function(wholeDay) {
 	var eventPeriod = this.eventManager.currentPeriod;
 	var eventPeriod = this.eventManager.currentPeriod;
 
 
-	if (eventPeriod) {
-		return eventInstancesToEventRanges(
-			this.buildBusinessInstances(
-				wholeDay,
-				this.opt('businessHours'),
-				eventPeriod.start,
-				eventPeriod.end
-			)
-		);
-	}
-	else {
-		return [];
-	}
+	return this.buildBusinessRangeGroup(
+		wholeDay,
+		this.opt('businessHours'),
+		eventPeriod.start,
+		eventPeriod.end
+	);
 };
 };
 
 
 
 
-// Given a raw input value from options, return events objects for business hours within the current view.
-Calendar.prototype.buildBusinessInstances = function(wholeDay, input, rangeStart, rangeEnd) {
-	if (input === true) {
-		return this._buildBusinessInstances(wholeDay, [ {} ], false, rangeStart, rangeEnd);
-	}
-	else if ($.isPlainObject(input)) {
-		return this._buildBusinessInstances(wholeDay, [ input ], false, rangeStart, rangeEnd);
-	}
-	else if ($.isArray(input)) {
-		return this._buildBusinessInstances(wholeDay, input, true, rangeStart, rangeEnd);
-	}
-	else {
-		return [];
-	}
+Calendar.prototype.buildBusinessRangeGroup = function(wholeDay, rawCompoundDef, rangeStart, rangeEnd) {
+	var eventDefs = this.buildBusinessDefs(wholeDay, rawCompoundDef);
+	var eventInstances = eventDefsToEventInstances(eventDefs, rangeStart, rangeEnd);
+	var eventRanges = eventInstancesToEventRanges(eventInstances);
+	var eventRangeGroup = new EventRangeGroup(eventRanges);
+
+	eventRangeGroup.forcedDef = eventDefs[0];
+
+	return eventRangeGroup;
 };
 };
 
 
 
 
-Calendar.prototype._buildBusinessInstances = function(wholeDay, rawDefs, ignoreNoDow, rangeStart, rangeEnd) {
+Calendar.prototype.buildBusinessDefs = function(wholeDay, rawCompoundDef) {
+	var rawDefs = [];
+	var requireDow = false;
 	var i;
 	var i;
-	var rawDef;
-	var fullRawDef;
-	var eventDef;
-	var eventInstances = [];
+	var defs = [];
 
 
-	for (i = 0; i < rawDefs.length; i++) {
-		rawDef = rawDefs[i];
+	if (rawCompoundDef === true) {
+		rawDefs = [ {} ]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim
+	}
+	else if ($.isPlainObject(rawCompoundDef)) {
+		rawDefs = [ rawCompoundDef ];
+	}
+	else if ($.isArray(rawCompoundDef)) {
+		rawDefs = rawCompoundDef;
+		requireDow = true; // every sub-definition NEEDS a day-of-week
+	}
 
 
-		if (ignoreNoDow && !rawDef.dow) {
-			continue;
+	for (i = 0; i < rawDefs.length; i++) {
+		if (!requireDow || rawDefs[i].dow) {
+			defs.push(
+				this.buildBusinessDef(wholeDay, rawDefs[i])
+			);
 		}
 		}
+	}
 
 
-		fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDefs[i]);
+	return defs;
+};
 
 
-		if (wholeDay) {
-			fullRawDef.start = null;
-			fullRawDef.end = null;
-		}
 
 
-		eventDef = RecurringEventDef.parse(
-			fullRawDef,
-			new EventSource(this), // dummy source
-			this // calendar
-		);
+Calendar.prototype.buildBusinessDef = function(wholeDay, rawDef) {
+	var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);
 
 
-		eventInstances.push.apply(eventInstances, // append
-			eventDef.buildInstances(rangeStart, rangeEnd)
-		);
+	if (wholeDay) {
+		fullRawDef.start = null;
+		fullRawDef.end = null;
 	}
 	}
 
 
-	return eventInstances;
+	return RecurringEventDef.parse(
+		fullRawDef,
+		new EventSource(this) // dummy source
+	);
 };
 };

+ 1 - 1
src/Calendar.constraints.js

@@ -118,7 +118,7 @@ Calendar.prototype.constraintValToFootprints = function(constraintVal, isAllDay)
 	var eventRanges = [];
 	var eventRanges = [];
 
 
 	if (constraintVal === 'businessHours') {
 	if (constraintVal === 'businessHours') {
-		eventRanges = this.buildCurrentBusinessRanges(isAllDay);
+		eventRanges = this.buildCurrentBusinessRangeGroup(isAllDay).eventRanges;
 	}
 	}
 	else if (typeof constraintVal === 'object') {
 	else if (typeof constraintVal === 'object') {
 		eventRanges = this.parseEventDefToEventRanges(constraintVal);
 		eventRanges = this.parseEventDefToEventRanges(constraintVal);

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

@@ -149,15 +149,11 @@ Grid.mixin({
 			businessHours = calendar.opt('businessHours');
 			businessHours = calendar.opt('businessHours');
 		}
 		}
 
 
-		return new EventRangeGroup(
-			eventInstancesToEventRanges(
-				calendar.buildBusinessInstances(
-					wholeDay,
-					businessHours,
-					this.start,
-					this.end
-				)
-			)
+		return calendar.buildBusinessRangeGroup(
+			wholeDay,
+			businessHours,
+			this.start,
+			this.end
 		).sliceRenderRanges(
 		).sliceRenderRanges(
 			new UnzonedRange(this.start, this.end),
 			new UnzonedRange(this.start, this.end),
 			calendar
 			calendar

+ 14 - 0
src/models/event/util.js

@@ -1,4 +1,18 @@
 
 
+function eventDefsToEventInstances(eventDefs, start, end) {
+	var eventInstances = [];
+	var i;
+
+	for (i = 0; i < eventDefs.length; i++) {
+		eventInstances.push.apply(eventInstances, // append
+			eventDefs[i].buildInstances(start, end)
+		);
+	}
+
+	return eventInstances;
+}
+
+
 function eventInstancesToEventRanges(eventInstances) {
 function eventInstancesToEventRanges(eventInstances) {
 	return eventInstances.map(function(instance) {
 	return eventInstances.map(function(instance) {
 		return instance.buildEventRange();
 		return instance.buildEventRange();