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

repair TimeGrid helper rendering

Adam Shaw пре 8 година
родитељ
комит
1c6cdaf5b5
6 измењених фајлова са 49 додато и 31 уклоњено
  1. 4 4
      src/agenda/AgendaView.js
  2. 3 2
      src/common/ChronoComponent.js
  3. 3 4
      src/common/DayGrid.js
  4. 30 11
      src/common/Grid.js
  5. 8 9
      src/common/TimeGrid.js
  6. 1 1
      src/common/View.js

+ 4 - 4
src/agenda/AgendaView.js

@@ -351,12 +351,12 @@ var AgendaView = FC.AgendaView = View.extend({
 
 
 	// Renders a visual indication of a selection
-	renderSelection: function(span) {
-		if (span.start.hasTime() || span.end.hasTime()) {
-			this.timeGrid.renderSelection(span);
+	renderSelectionFootprint: function(componentFootprint) {
+		if (!componentFootprint.isAllDay) {
+			this.timeGrid.renderSelectionFootprint(componentFootprint);
 		}
 		else if (this.dayGrid) {
-			this.dayGrid.renderSelection(span);
+			this.dayGrid.renderSelectionFootprint(componentFootprint);
 		}
 	}
 

+ 3 - 2
src/common/ChronoComponent.js

@@ -221,8 +221,9 @@ var ChronoComponent = Model.extend({
 
 
 	// Renders a visual indication of the selection
-	renderSelection: function(span) {
-		this.callChildren('renderSelection', span);
+	// TODO: rename to `renderSelection` after legacy is gone
+	renderSelectionFootprint: function(componentFootprint) {
+		this.callChildren('renderSelectionFootprint', componentFootprint);
 	},
 
 

+ 3 - 4
src/common/DayGrid.js

@@ -327,7 +327,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
 
 		// if a segment from the same calendar but another component is being dragged, render a helper event
 		if (seg && seg.component !== this) {
-			return this.renderEventLocationHelper(eventRanges, seg); // returns mock event elements
+			return this.renderHelperEventRanges(eventRanges, seg); // returns mock event elements
 		}
 	},
 
@@ -352,7 +352,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
 			this.renderHighlight(eventFootprints[i].componentFootprint);
 		}
 
-		return this.renderEventLocationHelper(eventRanges, seg); // returns mock event elements
+		return this.renderHelperEventRanges(eventRanges, seg); // returns mock event elements
 	},
 
 
@@ -368,9 +368,8 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
 
 
 	// Renders a mock "helper" event. `sourceSeg` is the associated internal segment object. It can be null.
-	renderHelper: function(eventRanges, sourceSeg) {
+	renderHelperEventFootprints: function(eventFootprints, sourceSeg) {
 		var helperNodes = [];
-		var eventFootprints = this.eventRangesToEventFootprints(eventRanges);
 		var segs = this.eventFootprintsToSegs(eventFootprints);
 		var rowStructs;
 

+ 30 - 11
src/common/Grid.js

@@ -396,7 +396,7 @@ var Grid = FC.Grid = ChronoComponent.extend({
 					}
 
 					if (selectionFootprint) {
-						_this.renderSelection(selectionFootprint);
+						_this.renderSelectionFootprint(selectionFootprint);
 					}
 					else if (selectionFootprint === false) {
 						disableCursor();
@@ -446,17 +446,17 @@ var Grid = FC.Grid = ChronoComponent.extend({
 	// TODO: should probably move this to Grid.events, like we did event dragging / resizing
 
 
-	// Renders a mock event at the given event location, which contains zoned start/end properties.
-	// Returns all mock event elements.
-	renderEventLocationHelper: function(eventRanges, sourceSeg) {
-		return this.renderHelper(eventRanges, sourceSeg); // do the actual rendering
-	},
-
-
 	// Renders a mock event. Given zoned event date properties.
 	// Must return all mock event elements.
 	// TODO: have this in ChronoComponent
-	renderHelper: function(eventRanges, sourceSeg) {
+	renderHelperEventRanges: function(eventRanges, sourceSeg) {
+		return this.renderHelperEventFootprints(
+			this.eventRangesToEventFootprints(eventRanges)
+		);
+	},
+
+
+	renderHelperEventFootprints: function(eventFootprints, sourceSeg) {
 		// subclasses must implement
 	},
 
@@ -468,13 +468,32 @@ var Grid = FC.Grid = ChronoComponent.extend({
 	},
 
 
+	fabricateEventFootprint: function(componentFootprint) {
+		var calendar = this.view.calendar;
+		var dummyEvent = new SingleEventDef(new EventSource(calendar));
+		var dummyInstance;
+
+		dummyEvent.start = calendar.moment(componentFootprint.dateRange.startMs);
+		dummyEvent.end = calendar.moment(componentFootprint.dateRange.endMs);
+
+		if (componentFootprint.isAllDay) {
+			dummyEvent.start.stripTime();
+			dummyEvent.end.stripTime();
+		}
+
+		dummyInstance = dummyEvent.buildInstances()[0];
+
+		return new EventFootprint(componentFootprint, dummyEvent, dummyInstance);
+	},
+
+
 	/* Selection
 	------------------------------------------------------------------------------------------------------------------*/
 
 
 	// Renders a visual indication of a selection. Will highlight by default but can be overridden by subclasses.
 	// Given a span (unzoned start/end and other misc data)
-	renderSelection: function(componentFootprint) {
+	renderSelectionFootprint: function(componentFootprint) {
 		this.renderHighlight(componentFootprint);
 	},
 
@@ -486,7 +505,7 @@ var Grid = FC.Grid = ChronoComponent.extend({
 
 
 	// Given the first and last date-spans of a selection, returns another date-span object.
-	// Subclasses can override and provide additional data in the span object. Will be passed to renderSelection().
+	// Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().
 	// Will return false if the selection is invalid and this should be indicated to the user.
 	// Will return null/undefined if a selection invalid but no error should be reported.
 	computeSelection: function(footprint0, footprint1) {

+ 8 - 9
src/common/TimeGrid.js

@@ -368,7 +368,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
 
 			// returns mock event elements
 			// signal that a helper has been rendered
-			return this.renderEventLocationHelper(eventRanges);
+			return this.renderHelperEventRanges(eventRanges);
 		}
 		else { // otherwise, just render a highlight
 
@@ -394,7 +394,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
 
 	// Renders a visual indication of an event being resized
 	renderEventResize: function(eventRanges, seg) {
-		return this.renderEventLocationHelper(eventRanges, seg); // returns mock event elements
+		return this.renderHelperEventRanges(eventRanges, seg); // returns mock event elements
 	},
 
 
@@ -409,8 +409,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
 
 
 	// Renders a mock "helper" event. `sourceSeg` is the original segment object and might be null (an external drag)
-	renderHelper: function(eventRanges, sourceSeg) {
-		var eventFootprints = this.eventRangesToEventFootprints(eventRanges);
+	renderHelperEventFootprints: function(eventFootprints, sourceSeg) {
 		var segs = this.eventFootprintsToSegs(eventFootprints);
 
 		return this.renderHelperSegs( // returns mock event elements
@@ -495,14 +494,14 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
 
 
 	// Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
-	renderSelection: function(span) {
+	renderSelectionFootprint: function(componentFootprint) {
 		if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered
-
-			// normally acceps an eventLocation, span has a start/end, which is good enough
-			this.renderEventLocationHelper(span);
+			this.renderHelperEventFootprints([
+				this.fabricateEventFootprint(componentFootprint)
+			]);
 		}
 		else {
-			this.renderHighlight(span);
+			this.renderHighlight(componentFootprint);
 		}
 	},
 

+ 1 - 1
src/common/View.js

@@ -798,7 +798,7 @@ var View = FC.View = ChronoComponent.extend({
 	// `ev` is the native mouse event that begin the interaction.
 	select: function(footprint, ev) {
 		this.unselect(ev);
-		this.renderSelection(footprint);
+		this.renderSelectionFootprint(footprint);
 		this.reportSelection(footprint, ev);
 	},