Browse Source

prev/next buttons get disabled

Adam Shaw 9 years ago
parent
commit
32787cc711
2 changed files with 47 additions and 18 deletions
  1. 27 5
      src/Calendar.js
  2. 20 13
      src/common/View.js

+ 27 - 5
src/Calendar.js

@@ -300,14 +300,22 @@ var Calendar = FC.Calendar = Class.extend({
 
 
 	prev: function() {
-		this.currentDate = this.view.computePrevDate(this.currentDate);
-		this.renderView();
+		var date = this.view.computePrevDate(this.currentDate);
+
+		if (date) {
+			this.currentDate = date;
+			this.renderView();
+		}
 	},
 
 
 	next: function() {
-		this.currentDate = this.view.computeNextDate(this.currentDate);
-		this.renderView();
+		var date = this.view.computeNextDate(this.currentDate);
+
+		if (date) {
+			this.currentDate = date;
+			this.renderView();
+		}
 	},
 
 
@@ -324,7 +332,7 @@ var Calendar = FC.Calendar = Class.extend({
 
 
 	today: function() {
-		this.currentDate = this.getNow();
+		this.currentDate = this.getNow(); // should deny like prev/next?
 		this.renderView();
 	},
 
@@ -960,6 +968,20 @@ function Calendar_constructor(element, overrides) {
 		else {
 			toolbarsManager.proxyCall('enableButton', 'today');
 		}
+
+		if (currentView.computePrevDate(t.currentDate)) {
+			toolbarsManager.proxyCall('enableButton', 'prev');
+		}
+		else {
+			toolbarsManager.proxyCall('disableButton', 'prev');
+		}
+
+		if (currentView.computeNextDate(t.currentDate)) {
+			toolbarsManager.proxyCall('enableButton', 'next');
+		}
+		else {
+			toolbarsManager.proxyCall('disableButton', 'next');
+		}
 	};
 
 

+ 20 - 13
src/common/View.js

@@ -183,6 +183,8 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 	resolveRangesForDate: function(date, direction) {
 		var validRange = this.buildValidRange() || {};
 
+		var isDateValid = isDateWithinRange(date, validRange);
+
 		date = constrainDate(date, validRange);
 
 		var customVisibleRange = this.buildCustomVisibleRange(date);
@@ -191,7 +193,6 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 		var currentRange;
 		var renderRange;
 		var visibleRange;
-		var isValid;
 		var dateIncrementInput;
 		var dateIncrement;
 
@@ -234,7 +235,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 
 		visibleRange = constrainRange(renderRange, validRange);
 
-		isValid = Boolean(intersectRanges(visibleRange, currentRange));
+		var isVisibleRangeValid = Boolean(intersectRanges(visibleRange, currentRange));
 
 		if (this.opt('disableNonCurrentDates')) {
 			visibleRange = constrainRange(visibleRange, currentRange);
@@ -251,7 +252,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 			currentRange: currentRange,
 			currentRangeUnit: currentRangeUnit,
 			visibleRange: visibleRange,
-			isValid: isValid,
+			isValid: isDateValid && isVisibleRangeValid,
 			renderRange: renderRange,
 			dateIncrement: dateIncrement,
 			date: date // the revised date
@@ -306,29 +307,35 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
 
 	// Computes the new date when the user hits the prev button, given the current date
 	computePrevDate: function(date) {
-		var prevDate = date.clone().startOf(this.currentRangeUnit).subtract(this.dateIncrement);
-		var ranges = this.resolveRangesForDate(prevDate, -1);
+		var ranges = this.computePrevRanges(date);
 
 		if (ranges.isValid) {
 			return ranges.date;
 		}
-		else {
-			console.log('cant move prev');
-		}
+	},
+
+
+	computePrevRanges: function(date) {
+		var prevDate = date.clone().startOf(this.currentRangeUnit).subtract(this.dateIncrement);
+
+		return this.resolveRangesForDate(prevDate, -1);
 	},
 
 
 	// Computes the new date when the user hits the next button, given the current date
 	computeNextDate: function(date) {
-		var nextDate = date.clone().startOf(this.currentRangeUnit).add(this.dateIncrement);
-		var ranges = this.resolveRangesForDate(nextDate, 1);
+		var ranges = this.computeNextRanges(date);
 
 		if (ranges.isValid) {
 			return ranges.date;
 		}
-		else {
-			console.log('cant move next');
-		}
+	},
+
+
+	computeNextRanges: function(date) {
+		var nextDate = date.clone().startOf(this.currentRangeUnit).add(this.dateIncrement);
+
+		return this.resolveRangesForDate(nextDate, 1);
 	},