diff --git a/src/agenda.js b/src/agenda.js index c2ed106..718b0fd 100644 --- a/src/agenda.js +++ b/src/agenda.js @@ -1161,11 +1161,7 @@ function Agenda(element, options, methods) { /* External dragging -----------------------------------------------------*/ - view.isExternalDraggable = function(_element) { - return _element.parentNode != daySegmentContainer[0] && _element.parentNode != slotSegmentContainer[0]; - }; - - view.dragStart = function(ev) { + view.dragStart = function(_dragElement, ev, ui) { hoverListener.start(function(cell) { clearOverlay(); if (cell) { @@ -1180,11 +1176,11 @@ function Agenda(element, options, methods) { }, ev); }; - view.dragStop = function(ev, ui) { + view.dragStop = function(_dragElement, ev, ui) { var cell = hoverListener.stop(); clearOverlay(); if (cell) { - view.trigger('drop', ev.target, cellDate(cell), cellIsAllDay(cell), ev, ui); + view.trigger('drop', _dragElement, cellDate(cell), cellIsAllDay(cell), ev, ui); } }; diff --git a/src/grid.js b/src/grid.js index a561db6..3a1c04a 100644 --- a/src/grid.js +++ b/src/grid.js @@ -562,11 +562,7 @@ function Grid(element, options, methods) { /* External dragging ------------------------------------------------------*/ - view.isExternalDraggable = function(_element) { - return _element.parentNode != segmentContainer[0]; - }; - - view.dragStart = function(ev, ui) { + view.dragStart = function(_dragElement, ev, ui) { hoverListener.start(function(cell) { clearOverlay(); if (cell) { @@ -575,12 +571,12 @@ function Grid(element, options, methods) { }, ev); }; - view.dragStop = function(ev, ui) { + view.dragStop = function(_dragElement, ev, ui) { var cell = hoverListener.stop(); clearOverlay(); if (cell) { var d = cellDate(cell); - view.trigger('drop', ev.target, d, true, ev, ui); + view.trigger('drop', _dragElement, d, true, ev, ui); } }; diff --git a/src/main.js b/src/main.js index a2c2fa6..aea67eb 100644 --- a/src/main.js +++ b/src/main.js @@ -821,21 +821,34 @@ $.fn.fullCalendar = function(options) { $(window).resize(windowResize); + + /* External event dropping + --------------------------------------------------------*/ + if (options.droppable) { + var _dragElement; $(document) .bind('dragstart', function(ev, ui) { - if (view.isExternalDraggable(ev.target)) { - view.dragStart(ev, ui); + var _e = ev.target; + var e = $(_e); + if (!e.parents('.fc').length) { // not already inside a calendar + var accept = options.dropAccept; + if (!accept || ($.isFunction(accept) ? accept.call(_e, e) : e.is(accept))) { + _dragElement = _e; + view.dragStart(_dragElement, ev, ui); + } } }) .bind('dragstop', function(ev, ui) { - if (view.isExternalDraggable(ev.target)) { - view.dragStop(ev, ui); + if (_dragElement) { + view.dragStop(_dragElement, ev, ui); + _dragElement = null; } }); } + // let's begin... changeView(options.defaultView); diff --git a/tests/droppable.html b/tests/droppable.html index 38a72b0..3457c16 100644 --- a/tests/droppable.html +++ b/tests/droppable.html @@ -13,21 +13,18 @@ var y = date.getFullYear(); $('#calendar').fullCalendar({ - + editable: true, droppable: true, drop: function(date, allDay) { console.log('drop', date, allDay); }, - //defaultView: 'agendaWeek', //isRTL: true, - header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,basicWeek,agendaDay,basicDay' }, - editable: true, events: [ { title: 'All Day Event', @@ -78,7 +75,28 @@ $('.external-event').draggable({ revert: true, - revertDuration: 0 + revertDuration: 0, + zIndex: 999 + }); + + $('#calendar2').fullCalendar({ + droppable: true, + dropAccept: '.for-calendar2', + /* + dropAccept: function(e) { + console.log(e); + console.log(this); + return e.text() == 'Draggable 1'; + }, + */ + drop: function(date, allDay) { + console.log('drop 2nd calendar', date, allDay); + }, + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,basicWeek,agendaDay,basicDay' + } }); }); @@ -118,6 +136,11 @@ padding-left: 5px; cursor: pointer; } + + #calendar2 { + width: 900px; + margin-top: 50px; + } @@ -126,7 +149,9 @@
Draggable 1
Draggable 2
-
Draggable 3
+
Draggable 3
+
+