فهرست منبع

remove getRange/intersectRanges

Adam Shaw 8 سال پیش
والد
کامیت
9b5704af71
8فایلهای تغییر یافته به همراه60 افزوده شده و 91 حذف شده
  1. 8 8
      src/common/ChronoComponent.js
  2. 1 1
      src/common/DayGrid.js
  3. 8 8
      src/common/DayTableMixin.js
  4. 2 1
      src/common/TimeGrid.events.js
  5. 19 11
      src/common/TimeGrid.js
  6. 20 9
      src/list/ListView.js
  7. 2 6
      src/models/UnzonedRange.js
  8. 0 47
      src/util.js

+ 8 - 8
src/common/ChronoComponent.js

@@ -562,9 +562,9 @@ var ChronoComponent = Model.extend({
 
 	// Returns the date range of the full days the given range visually appears to occupy.
 	// Returns a new range object.
-	computeDayRange: function(range) {
-		var startDay = range.start.clone().stripTime(); // the beginning of the day the range starts
-		var end = range.end;
+	computeDayRange: function(unzonedRange) {
+		var startDay = unzonedRange.getStart().stripTime(); // the beginning of the day the range starts
+		var end = unzonedRange.getEnd();
 		var endDay = null;
 		var endTimeMS;
 
@@ -586,15 +586,15 @@ var ChronoComponent = Model.extend({
 			endDay = startDay.clone().add(1, 'days');
 		}
 
-		return { start: startDay, end: endDay };
+		return new UnzonedRange(startDay, endDay);
 	},
 
 
-	// Does the given event visually appear to occupy more than one day?
-	isMultiDayEvent: function(event) {
-		var range = this.computeDayRange(event); // event is range-ish
+	// Does the given range visually appear to occupy more than one day?
+	isMultiDayRange: function(unzonedRange) {
+		var dayRange = this.computeDayRange(unzonedRange);
 
-		return range.end.diff(range.start, 'days') > 1;
+		return dayRange.getEnd().diff(dayRange.getStart(), 'days') > 1;
 	},
 
 

+ 1 - 1
src/common/DayGrid.js

@@ -224,7 +224,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
 
 	// Slices up the given span (unzoned start/end with other misc data) into an array of segments
 	componentFootprintToSegs: function(componentFootprint) {
-		var segs = this.sliceRangeByRow(componentFootprint.unzonedRange.getRange());
+		var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);
 		var i, seg;
 
 		for (i = 0; i < segs.length; i++) {

+ 8 - 8
src/common/DayTableMixin.js

@@ -158,11 +158,11 @@ var DayTableMixin = FC.DayTableMixin = {
 
 
 	// Slices up a date range into a segment for every week-row it intersects with
-	sliceRangeByRow: function(range) {
+	sliceRangeByRow: function(unzonedRange) {
 		var daysPerRow = this.daysPerRow;
-		var normalRange = this.view.computeDayRange(range); // make whole-day range, considering nextDayThreshold
-		var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index
-		var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index
+		var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold
+		var rangeFirst = this.getDateDayIndex(normalRange.getStart()); // inclusive first index
+		var rangeLast = this.getDateDayIndex(normalRange.getEnd().subtract(1, 'days')); // inclusive last index
 		var segs = [];
 		var row;
 		var rowFirst, rowLast; // inclusive day-index range for current row
@@ -201,11 +201,11 @@ var DayTableMixin = FC.DayTableMixin = {
 
 	// Slices up a date range into a segment for every day-cell it intersects with.
 	// TODO: make more DRY with sliceRangeByRow somehow.
-	sliceRangeByDay: function(range) {
+	sliceRangeByDay: function(unzonedRange) {
 		var daysPerRow = this.daysPerRow;
-		var normalRange = this.view.computeDayRange(range); // make whole-day range, considering nextDayThreshold
-		var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index
-		var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index
+		var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold
+		var rangeFirst = this.getDateDayIndex(normalRange.getStart()); // inclusive first index
+		var rangeLast = this.getDateDayIndex(normalRange.getEnd().subtract(1, 'days')); // inclusive last index
 		var segs = [];
 		var row;
 		var rowFirst, rowLast; // inclusive day-index range for current row

+ 2 - 1
src/common/TimeGrid.events.js

@@ -258,7 +258,8 @@ TimeGrid.mixin({
 
 		classes.unshift('fc-time-grid-event', 'fc-v-event');
 
-		if (view.isMultiDayEvent(event)) { // if the event appears to span more than one day...
+		// if the event appears to span more than one day...
+		if (view.isMultiDayRange(seg.footprint.componentFootprint.unzonedRange)) {
 			// Don't display time text on segments that run entirely through a day.
 			// That would appear as midnight-midnight and would look dumb.
 			// Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)

+ 19 - 11
src/common/TimeGrid.js

@@ -256,7 +256,7 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
 
 	// Slices up the given span (unzoned start/end with other misc data) into an array of segments
 	componentFootprintToSegs: function(componentFootprint) {
-		var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange.getRange());
+		var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);
 		var i;
 
 		for (i = 0; i < segs.length; i++) {
@@ -272,23 +272,31 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, {
 	},
 
 
-	sliceRangeByTimes: function(range) {
+	sliceRangeByTimes: function(unzonedRange) {
 		var segs = [];
-		var seg;
+		var segRange;
 		var dayIndex;
 		var dayDate;
 		var dayRange;
 
 		for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {
 			dayDate = this.dayDates[dayIndex].clone().time(0); // TODO: better API for this?
-			dayRange = {
-				start: dayDate.clone().add(this.view.minTime), // don't use .time() because it sux with negatives
-				end: dayDate.clone().add(this.view.maxTime)
-			};
-			seg = intersectRanges(range, dayRange); // both will be ambig timezone
-			if (seg) {
-				seg.dayIndex = dayIndex;
-				segs.push(seg);
+
+			segRange = unzonedRange.constrainTo(
+				new UnzonedRange(
+					dayDate.clone().add(this.view.minTime), // don't use .time() because it sux with negatives
+					dayDate.clone().add(this.view.maxTime)
+				)
+			);
+
+			if (segRange) {
+				segs.push({
+					start: segRange.getStart(),
+					end: segRange.getEnd(),
+					isStart: segRange.isStart,
+					isEnd: segRange.isEnd,
+					dayIndex: dayIndex
+				});
 			}
 		}
 

+ 20 - 9
src/list/ListView.js

@@ -72,18 +72,28 @@ var ListViewGrid = Grid.extend({
 		var dayStart = calendar.msToUtcMoment(this.unzonedRange.startMs).time(0); // timed, so segs get times!
 		var viewEnd = calendar.msToUtcMoment(this.unzonedRange.endMs);
 		var dayIndex = 0;
+		var segRange;
 		var seg;
 		var segs = [];
 
 		while (dayStart < viewEnd) {
-
-			seg = intersectRanges(footprint.unzonedRange.getRange(), {
-				start: dayStart,
-				end: dayStart.clone().add(1, 'day')
-			});
-
-			if (seg) {
-				seg.dayIndex = dayIndex;
+			seg = null;
+
+			segRange = footprint.unzonedRange.constrainTo(
+				new UnzonedRange(
+					dayStart,
+					dayStart.clone().add(1, 'day')
+				)
+			);
+
+			if (segRange) {
+				seg = {
+					start: segRange.getStart(),
+					end: segRange.getEnd(),
+					isStart: segRange.isStart,
+					isEnd: segRange.isEnd,
+					dayIndex: dayIndex
+				};
 				segs.push(seg);
 			}
 
@@ -234,7 +244,8 @@ var ListViewGrid = Grid.extend({
 		if (event.allDay) {
 			timeHtml = view.getAllDayHtml();
 		}
-		else if (view.isMultiDayEvent(event)) { // if the event appears to span more than one day
+		// if the event appears to span more than one day
+		else if (view.isMultiDayRange(seg.footprint.componentFootprint.unzonedRange)) {
 			if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day
 				timeHtml = htmlEscape(this.getEventTimeText(seg));
 			}

+ 2 - 6
src/models/UnzonedRange.js

@@ -28,7 +28,7 @@ var UnzonedRange = FC.UnzonedRange = Class.extend({
 		}
 	},
 
-	constrainTo: function(constraintRange) {
+	constrainTo: function(constraintRange) { // TODO: rename to "intersect"
 		var startMs = this.startMs;
 		var endMs = this.endMs;
 		var newRange = null;
@@ -47,7 +47,7 @@ var UnzonedRange = FC.UnzonedRange = Class.extend({
 				endMs = constraintRange.endMs;
 			}
 			else {
-				endMs = Math.min(this.endMs, constraintRange.endMs);
+				endMs = Math.min(endMs, constraintRange.endMs);
 			}
 		}
 
@@ -120,10 +120,6 @@ var UnzonedRange = FC.UnzonedRange = Class.extend({
 		if (this.endMs !== null) {
 			return FC.moment.utc(this.endMs).stripZone();
 		}
-	},
-
-	getRange: function() {
-		return { start: this.getStart(), end: this.getEnd() };
 	}
 
 });

+ 0 - 47
src/util.js

@@ -1,6 +1,5 @@
 
 // exports
-FC.intersectRanges = intersectRanges;
 FC.applyAll = applyAll;
 FC.debounce = debounce;
 FC.isInt = isInt;
@@ -498,52 +497,6 @@ function flexibleCompare(a, b) {
 }
 
 
-/* FullCalendar-specific Misc Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-
-
-// Computes the intersection of the two ranges. Will return fresh date clones in a range.
-// Returns undefined if no intersection.
-// Expects all dates to be normalized to the same timezone beforehand.
-// TODO: move to date section?
-function intersectRanges(subjectRange, constraintRange) {
-	var subjectStart = subjectRange.start;
-	var subjectEnd = subjectRange.end;
-	var constraintStart = constraintRange.start;
-	var constraintEnd = constraintRange.end;
-	var segStart, segEnd;
-	var isStart, isEnd;
-
-	if (subjectEnd > constraintStart && subjectStart < constraintEnd) { // in bounds at all?
-
-		if (subjectStart >= constraintStart) {
-			segStart = subjectStart.clone();
-			isStart = true;
-		}
-		else {
-			segStart = constraintStart.clone();
-			isStart =  false;
-		}
-
-		if (subjectEnd <= constraintEnd) {
-			segEnd = subjectEnd.clone();
-			isEnd = true;
-		}
-		else {
-			segEnd = constraintEnd.clone();
-			isEnd = false;
-		}
-
-		return {
-			start: segStart,
-			end: segEnd,
-			isStart: isStart,
-			isEnd: isEnd
-		};
-	}
-}
-
-
 /* Date Utilities
 ----------------------------------------------------------------------------------------------------------------------*/