Explorar el Código

pass native js event to select/unselect callbacks, final touches for 1.4.7

Adam Shaw hace 15 años
padre
commit
91e436dc0a
Se han modificado 8 ficheros con 58 adiciones y 21 borrados
  1. 14 0
      changelog.txt
  2. 7 6
      src/agenda.js
  3. 4 4
      src/grid.js
  4. 4 2
      src/main.js
  5. 4 3
      src/selection_util.js
  6. 7 2
      tests/droppable.html
  7. 3 1
      tests/loader.js
  8. 15 3
      tests/selectable.html

+ 14 - 0
changelog.txt

@@ -1,4 +1,18 @@
 
 
+version 1.4.7 (7/5/10)
+	- "dropping" external objects onto the calendar
+		- droppable (boolean, to turn on/off)
+		- dropAccept (to filter which events the calendar will accept)
+		- drop (trigger)
+	- selectable options can now be specified with a View Option Hash
+	- bugfixes
+		- dragged & reverted events having wrong time text (issue 406)
+		- bug rendering events that have an endtime with seconds, but no hours/minutes (issue 477)
+		- gotoDate date overflow bug (issue 429)
+		- wrong date reported when clicking on edge of last column in agenda views (412)
+	- support newlines in event titles
+	- select/unselect callbacks now passes native js event
+
 version 1.4.6 (5/31/10)
 version 1.4.6 (5/31/10)
 	- "selecting" days or timeslots
 	- "selecting" days or timeslots
 		- options: selectable, selectHelper, unselectAuto, unselectCancel
 		- options: selectable, selectHelper, unselectAuto, unselectCancel

+ 7 - 6
src/agenda.js

@@ -971,7 +971,7 @@ function Agenda(element, options, methods, viewName) {
 	
 	
 	function slotSelectionMousedown(ev) {
 	function slotSelectionMousedown(ev) {
 		if (view.option('selectable')) {
 		if (view.option('selectable')) {
-			unselect();
+			unselect(ev);
 			var _mousedownElement = this;
 			var _mousedownElement = this;
 			var dates;
 			var dates;
 			hoverListener.start(function(cell, origCell) {
 			hoverListener.start(function(cell, origCell) {
@@ -995,8 +995,9 @@ function Agenda(element, options, methods, viewName) {
 				if (dates) {
 				if (dates) {
 					if (+dates[0] == +dates[1]) {
 					if (+dates[0] == +dates[1]) {
 						view.trigger('dayClick', _mousedownElement, dates[0], false, ev);
 						view.trigger('dayClick', _mousedownElement, dates[0], false, ev);
+						// BUG: _mousedownElement will sometimes be the overlay
 					}
 					}
-					reportSelection(dates[0], dates[3], false);
+					reportSelection(dates[0], dates[3], false, ev);
 				}
 				}
 			});
 			});
 		}
 		}
@@ -1021,16 +1022,16 @@ function Agenda(element, options, methods, viewName) {
 		reportSelection(startDate, endDate, allDay);
 		reportSelection(startDate, endDate, allDay);
 	};
 	};
 	
 	
-	function reportSelection(startDate, endDate, allDay) {
+	function reportSelection(startDate, endDate, allDay, ev) {
 		selected = true;
 		selected = true;
-		view.trigger('select', view, startDate, endDate, allDay);
+		view.trigger('select', view, startDate, endDate, allDay, ev);
 	}
 	}
 	
 	
-	function unselect() {
+	function unselect(ev) {
 		if (selected) {
 		if (selected) {
 			clearSelection();
 			clearSelection();
 			selected = false;
 			selected = false;
-			view.trigger('unselect', view);
+			view.trigger('unselect', view, ev);
 		}
 		}
 	}
 	}
 	view.unselect = unselect;
 	view.unselect = unselect;

+ 4 - 4
src/grid.js

@@ -542,16 +542,16 @@ function Grid(element, options, methods, viewName) {
 		reportSelection(startDate, endDate, allDay);
 		reportSelection(startDate, endDate, allDay);
 	};
 	};
 	
 	
-	function reportSelection(startDate, endDate, allDay) {
+	function reportSelection(startDate, endDate, allDay, ev) {
 		selected = true;
 		selected = true;
-		view.trigger('select', view, startDate, endDate, allDay);
+		view.trigger('select', view, startDate, endDate, allDay, ev);
 	}
 	}
 	
 	
-	function unselect() {
+	function unselect(ev) {
 		if (selected) {
 		if (selected) {
 			clearOverlay();
 			clearOverlay();
 			selected = false;
 			selected = false;
-			view.trigger('unselect', view);
+			view.trigger('unselect', view, ev);
 		}
 		}
 	}
 	}
 	view.unselect = unselect;
 	view.unselect = unselect;

+ 4 - 2
src/main.js

@@ -71,7 +71,9 @@ var defaults = {
 	},
 	},
 	
 	
 	//selectable: false,
 	//selectable: false,
-	unselectAuto: true
+	unselectAuto: true,
+	
+	dropAccept: '*'
 	
 	
 };
 };
 
 
@@ -834,7 +836,7 @@ $.fn.fullCalendar = function(options) {
 					var e = $(_e);
 					var e = $(_e);
 					if (!e.parents('.fc').length) { // not already inside a calendar
 					if (!e.parents('.fc').length) { // not already inside a calendar
 						var accept = options.dropAccept;
 						var accept = options.dropAccept;
-						if (!accept || ($.isFunction(accept) ? accept.call(_e, e) : e.is(accept))) {
+						if ($.isFunction(accept) ? accept.call(_e, e) : e.is(accept)) {
 							_dragElement = _e;
 							_dragElement = _e;
 							view.dragStart(_dragElement, ev, ui);
 							view.dragStart(_dragElement, ev, ui);
 						}
 						}

+ 4 - 3
src/selection_util.js

@@ -3,7 +3,7 @@
 function selection_dayMousedown(view, hoverListener, cellDate, cellIsAllDay, renderSelection, clearSelection, reportSelection, unselect) {
 function selection_dayMousedown(view, hoverListener, cellDate, cellIsAllDay, renderSelection, clearSelection, reportSelection, unselect) {
 	return function(ev) {
 	return function(ev) {
 		if (view.option('selectable')) {
 		if (view.option('selectable')) {
-			unselect();
+			unselect(ev);
 			var _mousedownElement = this;
 			var _mousedownElement = this;
 			var dates;
 			var dates;
 			hoverListener.start(function(cell, origCell) {
 			hoverListener.start(function(cell, origCell) {
@@ -20,8 +20,9 @@ function selection_dayMousedown(view, hoverListener, cellDate, cellIsAllDay, ren
 				if (dates) {
 				if (dates) {
 					if (+dates[0] == +dates[1]) {
 					if (+dates[0] == +dates[1]) {
 						view.trigger('dayClick', _mousedownElement, dates[0], true, ev);
 						view.trigger('dayClick', _mousedownElement, dates[0], true, ev);
+						// BUG: _mousedownElement will sometimes be the overlay
 					}
 					}
-					reportSelection(dates[0], dates[1], true);
+					reportSelection(dates[0], dates[1], true, ev);
 				}
 				}
 			});
 			});
 		}
 		}
@@ -38,7 +39,7 @@ function selection_unselectAuto(view, unselect) {
 					return;
 					return;
 				}
 				}
 			}
 			}
-			unselect();
+			unselect(ev);
 		});
 		});
 	}
 	}
 }
 }

+ 7 - 2
tests/droppable.html

@@ -13,13 +13,18 @@
 		var y = date.getFullYear();
 		var y = date.getFullYear();
 		
 		
 		$('#calendar').fullCalendar({
 		$('#calendar').fullCalendar({
+			
 			editable: true,
 			editable: true,
 			droppable: true,
 			droppable: true,
-			drop: function(date, allDay) {
-				console.log('drop', date, allDay);
+			drop: function(date, allDay, ev) {
+				console.log('drop', date, allDay, ev);
 			},
 			},
 			//defaultView: 'agendaWeek',
 			//defaultView: 'agendaWeek',
+			
+			//firstDay: 1,
 			//isRTL: true,
 			//isRTL: true,
+			//minTime: '6:30am',
+			
 			header: {
 			header: {
 				left: 'prev,next today',
 				left: 'prev,next today',
 				center: 'title',
 				center: 'title',

+ 3 - 1
tests/loader.js

@@ -80,9 +80,11 @@ if (_build) {
 	includeJS('../src/gcal.js');
 	includeJS('../src/gcal.js');
 }
 }
 
 
-if (!window.DISABLE_FIREBUG_LITE) {
+//if (!window.DISABLE_FIREBUG_LITE) {
+if (!window.console || !console.log) {
 	includeJS('firebug-lite/firebug-lite-compressed.js');
 	includeJS('firebug-lite/firebug-lite-compressed.js');
 }
 }
+//}
 
 
 window.onload = function() {
 window.onload = function() {
 	$('body').append(
 	$('body').append(

+ 15 - 3
tests/selectable.html

@@ -21,10 +21,13 @@
 				right: 'month,agendaWeek,basicWeek,agendaDay,basicDay'
 				right: 'month,agendaWeek,basicWeek,agendaDay,basicDay'
 			},
 			},
 			//defaultView: 'agendaWeek',
 			//defaultView: 'agendaWeek',
+			
+			//firstDay: 1,
 			//isRTL: true,
 			//isRTL: true,
 			//minTime: 7,
 			//minTime: 7,
 			//weekends: false,
 			//weekends: false,
 			//allDaySlot: false,
 			//allDaySlot: false,
+			
 			selectable: true,
 			selectable: true,
 			/*
 			/*
 			selectable: {
 			selectable: {
@@ -32,24 +35,33 @@
 				agenda: true
 				agenda: true
 			},
 			},
 			*/
 			*/
-			//selectHelper: true,
+			
+			selectHelper: true,
 			/*
 			/*
 			selectHelper: function(start, end) {
 			selectHelper: function(start, end) {
 				return $("<div style='background:red' />").text(start+' '+end);
 				return $("<div style='background:red' />").text(start+' '+end);
 			},
 			},
 			*/
 			*/
+			
 			//unselectAuto: false,
 			//unselectAuto: false,
 			//unselectCancel: '.fc',
 			//unselectCancel: '.fc',
-			select: function(start, end, allDay) {
+			
+			select: function(start, end, allDay, ev) {
 				console.log(
 				console.log(
 					'---- selection ----\n' +
 					'---- selection ----\n' +
 					'start: ' + start + '\n' +
 					'start: ' + start + '\n' +
 					'end: ' + end + '\n' +
 					'end: ' + end + '\n' +
 					'allDay: ' + allDay
 					'allDay: ' + allDay
 				);
 				);
+				if (ev) {
+					//console.log('select mouse: ' + ev.pageX + ', ' + ev.pageY);
+				}
 			},
 			},
-			unselect: function() {
+			unselect: function(ev) {
 				console.log('unselect');
 				console.log('unselect');
+				if (ev) {
+					//console.log('unselect mouse: ' + ev.pageX + ', ' + ev.pageY);
+				}
 			},
 			},
 			dayClick: function(date, allDay) {
 			dayClick: function(date, allDay) {
 				console.log('DAYCLICK', date, allDay);
 				console.log('DAYCLICK', date, allDay);