From 6f4ab743405a47d2d772011c326816749b748d3c Mon Sep 17 00:00:00 2001 From: Adam Shaw Date: Sat, 3 Jul 2010 18:00:38 -0700 Subject: [PATCH] allow ViewOptionHashes for selectable options, fixed new selectable bugs --- src/agenda.js | 21 +++++++++++++-------- src/grid.js | 17 +++++++++-------- src/main.js | 5 +++-- src/selection_util.js | 13 ++++++++++--- tests/selectable.html | 6 ++++++ 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/agenda.js b/src/agenda.js index 718b0fd..78b79d1 100644 --- a/src/agenda.js +++ b/src/agenda.js @@ -19,7 +19,7 @@ setDefaults({ maxTime: 24 }); -views.agendaWeek = function(element, options) { +views.agendaWeek = function(element, options, viewName) { return new Agenda(element, options, { render: function(date, delta) { if (delta) { @@ -46,10 +46,10 @@ views.agendaWeek = function(element, options) { this.option('columnFormat') ); } - }); + }, viewName); }; -views.agendaDay = function(element, options) { +views.agendaDay = function(element, options, viewName) { return new Agenda(element, options, { render: function(date, delta) { if (delta) { @@ -66,10 +66,10 @@ views.agendaDay = function(element, options) { this.option('columnFormat') ); } - }); + }, viewName); }; -function Agenda(element, options, methods) { +function Agenda(element, options, methods, viewName) { var head, body, bodyContent, bodyTable, bg, colCnt, @@ -111,6 +111,7 @@ function Agenda(element, options, methods) { return addMinutes(start, options.defaultEventMinutes); } }); + view.name = viewName; view.init(element, options); @@ -965,16 +966,17 @@ function Agenda(element, options, methods) { var selected = false; var daySelectionMousedown = selection_dayMousedown( - view, hoverListener, cellDate, renderDayOverlay, clearOverlay, reportSelection, unselect + view, hoverListener, cellDate, cellIsAllDay, renderDayOverlay, clearOverlay, reportSelection, unselect ); function slotSelectionMousedown(ev) { if (view.option('selectable')) { unselect(); + var _mousedownElement = this; var dates; hoverListener.start(function(cell, origCell) { clearSelection(); - if (cell && cell.col == origCell.col) { + if (cell && cell.col == origCell.col && !cellIsAllDay(cell)) { var d1 = cellDate(origCell); var d2 = cellDate(cell); dates = [ @@ -988,9 +990,12 @@ function Agenda(element, options, methods) { dates = null; } }, ev); - $(document).one('mouseup', function() { + $(document).one('mouseup', function(ev) { hoverListener.stop(); if (dates) { + if (+dates[0] == +dates[1]) { + view.trigger('dayClick', _mousedownElement, dates[0], false, ev); + } reportSelection(dates[0], dates[3], false); } }); diff --git a/src/grid.js b/src/grid.js index 3a1c04a..0078f6e 100644 --- a/src/grid.js +++ b/src/grid.js @@ -6,7 +6,7 @@ setDefaults({ weekMode: 'fixed' }); -views.month = function(element, options) { +views.month = function(element, options, viewName) { return new Grid(element, options, { render: function(date, delta) { if (delta) { @@ -46,10 +46,10 @@ views.month = function(element, options) { true ); } - }); + }, viewName); }; -views.basicWeek = function(element, options) { +views.basicWeek = function(element, options, viewName) { return new Grid(element, options, { render: function(date, delta) { if (delta) { @@ -77,10 +77,10 @@ views.basicWeek = function(element, options) { false ); } - }); + }, viewName); }; -views.basicDay = function(element, options) { +views.basicDay = function(element, options, viewName) { return new Grid(element, options, { render: function(date, delta) { if (delta) { @@ -98,7 +98,7 @@ views.basicDay = function(element, options) { false ); } - }); + }, viewName); }; @@ -107,7 +107,7 @@ views.basicDay = function(element, options) { var tdHeightBug; -function Grid(element, options, methods) { +function Grid(element, options, methods, viewName) { var tm, firstDay, nwe, // no weekends (int) @@ -135,6 +135,7 @@ function Grid(element, options, methods) { return cloneDate(event.start); } }); + view.name = viewName; view.init(element, options); @@ -528,7 +529,7 @@ function Grid(element, options, methods) { var selected = false; var selectionMousedown = selection_dayMousedown( - view, hoverListener, cellDate, renderDayOverlay, clearOverlay, reportSelection, unselect + view, hoverListener, cellDate, function(){return true}, renderDayOverlay, clearOverlay, reportSelection, unselect ); view.select = function(startDate, endDate, allDay) { diff --git a/src/main.js b/src/main.js index aea67eb..ce66d10 100644 --- a/src/main.js +++ b/src/main.js @@ -215,7 +215,8 @@ $.fn.fullCalendar = function(options) { newViewElement = absoluteViewElement = $("
") .appendTo(content), - options + options, + v // the view's name ); } @@ -225,7 +226,7 @@ $.fn.fullCalendar = function(options) { header.find('div.fc-button-' + v).addClass(tm + '-state-active'); } - view.name = viewName = v; + viewName = v; render(); // after height has been set, will make absoluteViewElement's position=relative, then set to null content.css('overflow', ''); if (oldView) { diff --git a/src/selection_util.js b/src/selection_util.js index 23d2bdf..6c42b8f 100644 --- a/src/selection_util.js +++ b/src/selection_util.js @@ -1,19 +1,26 @@ -function selection_dayMousedown(view, hoverListener, cellDate, renderSelection, clearSelection, reportSelection, unselect) { +function selection_dayMousedown(view, hoverListener, cellDate, cellIsAllDay, renderSelection, clearSelection, reportSelection, unselect) { return function(ev) { if (view.option('selectable')) { unselect(); + var _mousedownElement = this; var dates; hoverListener.start(function(cell, origCell) { clearSelection(); - if (cell) { + if (cell && cellIsAllDay(cell)) { dates = [ cellDate(origCell), cellDate(cell) ].sort(cmp); renderSelection(dates[0], addDays(cloneDate(dates[1]), 1), true); + }else{ + dates = null; } }, ev); $(document).one('mouseup', function(ev) { - if (hoverListener.stop()) { // over a cell? + hoverListener.stop(); + if (dates) { + if (+dates[0] == +dates[1]) { + view.trigger('dayClick', _mousedownElement, dates[0], true, ev); + } reportSelection(dates[0], dates[1], true); } }); diff --git a/tests/selectable.html b/tests/selectable.html index ad78149..e8fb8be 100644 --- a/tests/selectable.html +++ b/tests/selectable.html @@ -26,6 +26,12 @@ //weekends: false, //allDaySlot: false, selectable: true, + /* + selectable: { + month: false, + agenda: true + }, + */ //selectHelper: true, /* selectHelper: function(start, end) {