Explorar el Código

Merge branch 'master' of https://github.com/MartijnWelker/fullcalendar into next-release

Adam Shaw hace 9 años
padre
commit
fef674daca
Se han modificado 1 ficheros con 76 adiciones y 50 borrados
  1. 76 50
      src/EventManager.js

+ 76 - 50
src/EventManager.js

@@ -12,8 +12,8 @@ var eventGUID = 1;
 
 
 function EventManager() { // assumed to be a calendar
 function EventManager() { // assumed to be a calendar
 	var t = this;
 	var t = this;
-	
-	
+
+
 	// exports
 	// exports
 	t.isFetchNeeded = isFetchNeeded;
 	t.isFetchNeeded = isFetchNeeded;
 	t.fetchEvents = fetchEvents;
 	t.fetchEvents = fetchEvents;
@@ -26,18 +26,20 @@ function EventManager() { // assumed to be a calendar
 	t.removeEventSource = removeEventSource;
 	t.removeEventSource = removeEventSource;
 	t.removeEventSources = removeEventSources;
 	t.removeEventSources = removeEventSources;
 	t.updateEvent = updateEvent;
 	t.updateEvent = updateEvent;
+	t.updateEvents = updateEvents;
 	t.renderEvent = renderEvent;
 	t.renderEvent = renderEvent;
+	t.renderEvents = renderEvents;
 	t.removeEvents = removeEvents;
 	t.removeEvents = removeEvents;
 	t.clientEvents = clientEvents;
 	t.clientEvents = clientEvents;
 	t.mutateEvent = mutateEvent;
 	t.mutateEvent = mutateEvent;
 	t.normalizeEventDates = normalizeEventDates;
 	t.normalizeEventDates = normalizeEventDates;
 	t.normalizeEventTimes = normalizeEventTimes;
 	t.normalizeEventTimes = normalizeEventTimes;
-	
-	
+
+
 	// imports
 	// imports
 	var reportEvents = t.reportEvents;
 	var reportEvents = t.reportEvents;
-	
-	
+
+
 	// locals
 	// locals
 	var stickySource = { events: [] };
 	var stickySource = { events: [] };
 	var sources = [ stickySource ];
 	var sources = [ stickySource ];
@@ -55,9 +57,9 @@ function EventManager() { // assumed to be a calendar
 			}
 			}
 		}
 		}
 	);
 	);
-	
-	
-	
+
+
+
 	/* Fetching
 	/* Fetching
 	-----------------------------------------------------------------------------*/
 	-----------------------------------------------------------------------------*/
 
 
@@ -67,8 +69,8 @@ function EventManager() { // assumed to be a calendar
 		return !rangeStart || // nothing has been fetched yet?
 		return !rangeStart || // nothing has been fetched yet?
 			start < rangeStart || end > rangeEnd; // is part of the new range outside of the old range?
 			start < rangeStart || end > rangeEnd; // is part of the new range outside of the old range?
 	}
 	}
-	
-	
+
+
 	function fetchEvents(start, end) {
 	function fetchEvents(start, end) {
 		rangeStart = start;
 		rangeStart = start;
 		rangeEnd = end;
 		rangeEnd = end;
@@ -168,8 +170,8 @@ function EventManager() { // assumed to be a calendar
 			reportEvents(cache);
 			reportEvents(cache);
 		}
 		}
 	}
 	}
-	
-	
+
+
 	function _fetchEventSource(source, callback) {
 	function _fetchEventSource(source, callback) {
 		var i;
 		var i;
 		var fetchers = FC.sourceFetchers;
 		var fetchers = FC.sourceFetchers;
@@ -278,9 +280,9 @@ function EventManager() { // assumed to be a calendar
 			}
 			}
 		}
 		}
 	}
 	}
-	
-	
-	
+
+
+
 	/* Sources
 	/* Sources
 	-----------------------------------------------------------------------------*/
 	-----------------------------------------------------------------------------*/
 
 
@@ -479,26 +481,39 @@ function EventManager() { // assumed to be a calendar
 			return true; // keep
 			return true; // keep
 		});
 		});
 	}
 	}
-	
-	
-	
+
+
+
 	/* Manipulation
 	/* Manipulation
 	-----------------------------------------------------------------------------*/
 	-----------------------------------------------------------------------------*/
 
 
 
 
 	// Only ever called from the externally-facing API
 	// Only ever called from the externally-facing API
 	function updateEvent(event) {
 	function updateEvent(event) {
+		updateEvents([event]);
+	}
 
 
-		// massage start/end values, even if date string values
-		event.start = t.moment(event.start);
-		if (event.end) {
-			event.end = t.moment(event.end);
-		}
-		else {
-			event.end = null;
+
+	// Only ever called from the externally-facing API
+	function updateEvents(events) {
+		var event;
+		var i;
+
+		for(i = 0; i < events.length; i++) {
+			event = events[i];
+
+			// massage start/end values, even if date string values
+			event.start = t.moment(event.start);
+			if (event.end) {
+				event.end = t.moment(event.end);
+			}
+			else {
+				event.end = null;
+			}
+
+			mutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization
 		}
 		}
 
 
-		mutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization
 		reportEvents(cache); // reports event modifications (so we can redraw)
 		reportEvents(cache); // reports event modifications (so we can redraw)
 	}
 	}
 
 
@@ -523,37 +538,48 @@ function EventManager() { // assumed to be a calendar
 		return !/^_|^(id|allDay|start|end)$/.test(name);
 		return !/^_|^(id|allDay|start|end)$/.test(name);
 	}
 	}
 
 
-	
+
 	// returns the expanded events that were created
 	// returns the expanded events that were created
 	function renderEvent(eventInput, stick) {
 	function renderEvent(eventInput, stick) {
-		var abstractEvent = buildEventFromInput(eventInput);
-		var events;
-		var i, event;
+		return renderEvents([eventInput], stick);
+	}
+
+
+	// returns the expanded events that were created
+	function renderEvents (eventInput, stick) {
+		var renderedEvents = [];
+		var renderableEvents;
+		var abstractEvent;
+		var i, j, event;
+
+		for(i = 0; i < eventInput.length; i++) {
+			abstractEvent = buildEventFromInput(eventInput[i]);
 
 
-		if (abstractEvent) { // not false (a valid input)
-			events = expandEvent(abstractEvent);
+			if (abstractEvent) { // not false (a valid input)
+				renderableEvents = expandEvent(abstractEvent);
 
 
-			for (i = 0; i < events.length; i++) {
-				event = events[i];
+				for (j = 0; j < renderableEvents.length; j++) {
+					event = renderableEvents[j];
 
 
-				if (!event.source) {
-					if (stick) {
-						stickySource.events.push(event);
-						event.source = stickySource;
+					if (!event.source) {
+						if (stick) {
+							stickySource.events.push(event);
+							event.source = stickySource;
+						}
+						cache.push(event);
 					}
 					}
-					cache.push(event);
 				}
 				}
-			}
-
-			reportEvents(cache);
 
 
-			return events;
+				renderedEvents = renderedEvents.concat(renderableEvents);
+			}
 		}
 		}
 
 
-		return [];
+		reportEvents(cache);
+
+		return renderedEvents;
 	}
 	}
-	
-	
+
+
 	function removeEvents(filter) {
 	function removeEvents(filter) {
 		var eventID;
 		var eventID;
 		var i;
 		var i;
@@ -583,7 +609,7 @@ function EventManager() { // assumed to be a calendar
 		reportEvents(cache);
 		reportEvents(cache);
 	}
 	}
 
 
-	
+
 	function clientEvents(filter) {
 	function clientEvents(filter) {
 		if ($.isFunction(filter)) {
 		if ($.isFunction(filter)) {
 			return $.grep(cache, filter);
 			return $.grep(cache, filter);
@@ -623,8 +649,8 @@ function EventManager() { // assumed to be a calendar
 		}
 		}
 		backupEventDates(event);
 		backupEventDates(event);
 	}
 	}
-	
-	
+
+
 	/* Event Normalization
 	/* Event Normalization
 	-----------------------------------------------------------------------------*/
 	-----------------------------------------------------------------------------*/