Procházet zdrojové kódy

better resolveRangesForDate and more refactor

Adam Shaw před 9 roky
rodič
revize
3993757bec
3 změnil soubory, kde provedl 54 přidání a 67 odebrání
  1. 6 8
      src/basic/BasicView.js
  2. 5 5
      src/basic/MonthView.js
  3. 43 54
      src/common/View.js

+ 6 - 8
src/basic/BasicView.js

@@ -42,22 +42,20 @@ var BasicView = FC.BasicView = View.extend({
 
 
 
 
 	// Computes the date range that will be rendered.
 	// Computes the date range that will be rendered.
-	computeRenderRange: function(currentRange) {
-		var renderRange = View.prototype.computeRenderRange.call(this, currentRange);
+	computeUnfilteredVisibleRange: function(currentRange) {
+		var visibleRange = View.prototype.computeUnfilteredVisibleRange.call(this, currentRange);
 
 
 		// year and month views should be aligned with weeks. this is already done for week
 		// year and month views should be aligned with weeks. this is already done for week
 		if (/^(year|month)$/.test(this.intervalUnit)) {
 		if (/^(year|month)$/.test(this.intervalUnit)) {
-			renderRange.start.startOf('week');
+			visibleRange.start.startOf('week');
 
 
 			// make end-of-week if not already
 			// make end-of-week if not already
-			if (renderRange.end.weekday()) {
-				renderRange.end.add(1, 'week').startOf('week'); // exclusively move backwards
+			if (visibleRange.end.weekday()) {
+				visibleRange.end.add(1, 'week').startOf('week'); // exclusively move backwards
 			}
 			}
-
-			renderRange = this.sanitizeRenderRange(renderRange); // resanitize
 		}
 		}
 
 
-		return renderRange;
+		return visibleRange;
 	},
 	},
 
 
 
 

+ 5 - 5
src/basic/MonthView.js

@@ -6,19 +6,19 @@ var MonthView = FC.MonthView = BasicView.extend({
 
 
 
 
 	// Computes the date range that will be rendered.
 	// Computes the date range that will be rendered.
-	computeRenderRange: function(currentRange) {
-		var renderRange = BasicView.prototype.computeRenderRange.call(this, currentRange);
+	computeUnfilteredVisibleRange: function(currentRange) {
+		var visibleRange = BasicView.prototype.computeUnfilteredVisibleRange.call(this, currentRange);
 		var rowCnt;
 		var rowCnt;
 
 
 		// ensure 6 weeks
 		// ensure 6 weeks
 		if (this.isFixedWeeks()) {
 		if (this.isFixedWeeks()) {
 			rowCnt = Math.ceil( // could be partial weeks due to hiddenDays
 			rowCnt = Math.ceil( // could be partial weeks due to hiddenDays
-				renderRange.end.diff(renderRange.start, 'weeks', true) // dontRound=true
+				visibleRange.end.diff(visibleRange.start, 'weeks', true) // dontRound=true
 			);
 			);
-			renderRange.end.add(6 - rowCnt, 'weeks');
+			visibleRange.end.add(6 - rowCnt, 'weeks');
 		}
 		}
 
 
-		return renderRange;
+		return visibleRange;
 	},
 	},
 
 
 
 

+ 43 - 54
src/common/View.js

@@ -153,6 +153,8 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 
 
 		var ranges = this.resolveRangesForDate(date);
 		var ranges = this.resolveRangesForDate(date);
 
 
+		this.validRange = ranges.validRange;
+
 		if (!this.visibleRange || !isRangesEqual(this.visibleRange, ranges.visibleRange)) {
 		if (!this.visibleRange || !isRangesEqual(this.visibleRange, ranges.visibleRange)) {
 			// some sort of change
 			// some sort of change
 
 
@@ -178,14 +180,47 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 
 
 
 
 	resolveRangesForDate: function(date) {
 	resolveRangesForDate: function(date) {
-		var ranges = {};
+		var validRange = this.buildValidRange();
+		var currentRange = this.computeCurrentRange(date);
+		var unfilteredVisibleRange = this.computeUnfilteredVisibleRange(currentRange);
+		var renderRange;
+		var visibleRange;
+
+		if (this.isOutOfRangeHidden) {
+			renderRange = constrainRange(unfilteredVisibleRange, validRange);
+			visibleRange = renderRange;
+		}
+		else {
+			renderRange = unfilteredVisibleRange;
+			visibleRange = constrainRange(visibleRange, validRange)
+		}
 
 
-		ranges.currentRange = this.computeCurrentRange(date);
-		ranges.renderRange = this.computeRenderRange(ranges.currentRange);
-		ranges.visibleRange = this.computeVisibleRange(ranges.renderRange, ranges.currentRange);
-		ranges.validRange = this.buildValidRange();
+		if (this.opt('disableNonCurrentDates')) {
+			visibleRange = constrainRange(visibleRange, currentRange);
+		}
 
 
-		return ranges;
+		return {
+			validRange: validRange,
+			currentRange: currentRange,
+			visibleRange: visibleRange,
+			renderRange: renderRange
+		};
+	},
+
+
+	buildValidRange: function() {
+		var minDateInput = this.opt('minDate');
+		var maxDateInput = this.opt('maxDate');
+		var validRange = {};
+
+		if (minDateInput) {
+			validRange.start = this.calendar.moment(minDateInput).stripZone();
+		}
+		if (maxDateInput) {
+			validRange.end = this.calendar.moment(maxDateInput).stripZone();
+		}
+
+		return validRange;
 	},
 	},
 
 
 
 
@@ -212,38 +247,8 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 
 
 
 
 	// Computes the date range that will be rendered.
 	// Computes the date range that will be rendered.
-	computeRenderRange: function(currentRange) {
-		return this.sanitizeRenderRange(
-			cloneRange(currentRange)
-		);
-	},
-
-
-	sanitizeRenderRange: function(renderRange) {
-		renderRange = this.trimHiddenDays(renderRange);
-
-		if (this.isOutOfRangeHidden) {
-			renderRange = constrainRange(renderRange, this.validRange);
-		}
-
-		return renderRange;
-	},
-
-
-	// Computes the date range that will be fully visible (not greyed out),
-	// and that will contain events and allow drag-n-drop.
-	computeVisibleRange: function(renderRange, currentRange) {
-		var visibleRange = cloneRange(renderRange);
-
-		if (this.opt('disableNonCurrentDates')) {
-			visibleRange = intersectRanges(visibleRange, currentRange);
-		}
-
-		// probably already done in sanitizeRenderRange,
-		// but do again in case subclass added special behavior to computeRenderRange
-		visibleRange = constrainRange(visibleRange, this.validRange);
-
-		return visibleRange;
+	computeUnfilteredVisibleRange: function(currentRange) {
+		return cloneRange(currentRange);
 	},
 	},
 
 
 
 
@@ -286,22 +291,6 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 	},
 	},
 
 
 
 
-	buildValidRange: function() {
-		var minDateInput = this.opt('minDate');
-		var maxDateInput = this.opt('maxDate');
-		var validRange = {};
-
-		if (minDateInput) {
-			validRange.start = this.calendar.moment(minDateInput).stripZone();
-		}
-		if (maxDateInput) {
-			validRange.end = this.calendar.moment(maxDateInput).stripZone();
-		}
-
-		return validRange;
-	},
-
-
 	/* Title and Date Formatting
 	/* Title and Date Formatting
 	------------------------------------------------------------------------------------------------------------------*/
 	------------------------------------------------------------------------------------------------------------------*/