From 59f9b422ac90792f7e9ca23b76b32fab4ab68adf Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Sun, 31 Jul 2011 19:09:00 +0200 Subject: [PATCH] Optimization: set event handler on minicalendar container and use target check to handle week number clicks --- plugins/calendar/calendar_ui.js | 36 ++++++++++----------- plugins/calendar/skins/default/calendar.css | 4 +++ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index d1dc0418..b6cbb254 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -1859,7 +1859,6 @@ function rcube_calendar_ui(settings) window.setTimeout(function(){ $('div.fc-content').css('overflow', view.name == 'month' ? 'auto' : 'hidden') }, 10); if (minical) { minical.datepicker('refresh'); - window.setTimeout(init_week_events, 10); } }, windowResize: function(view) { @@ -1868,21 +1867,23 @@ function rcube_calendar_ui(settings) }); - // event handler for clicks on calendar week cell of the datepicker widget + // set event handler for clicks on calendar week cell of the datepicker widget var init_week_events = function(){ - $('#datepicker table.ui-datepicker-calendar td.ui-datepicker-week-col').click(function(e){ - var base_date = minical.datepicker('getDate'); - var day_off = base_date.getDay() - 1; - if (day_off < 0) day_off = 6; - var base_kw = $.datepicker.iso8601Week(base_date); - var kw = parseInt($(this).html()); - var diff = (kw - base_kw) * 7 * DAY_MS; - // select monday of the chosen calendar week - var date = new Date(base_date.getTime() - day_off * DAY_MS + diff); - fc.fullCalendar('gotoDate', date).fullCalendar('setDate', date).fullCalendar('changeView', 'agendaWeek'); - minical.datepicker('setDate', date); - window.setTimeout(init_week_events, 10); - }).css('cursor', 'pointer'); + $('#datepicker').click(function(e){ + var cell = $(e.target); + if (e.target.tagName == 'TD' && cell.hasClass('ui-datepicker-week-col')) { + var base_date = minical.datepicker('getDate'); + var day_off = base_date.getDay() - 1; + if (day_off < 0) day_off = 6; + var base_kw = $.datepicker.iso8601Week(base_date); + var kw = parseInt(cell.html()); + var diff = (kw - base_kw) * 7 * DAY_MS; + // select monday of the chosen calendar week + var date = new Date(base_date.getTime() - day_off * DAY_MS + diff); + fc.fullCalendar('gotoDate', date).fullCalendar('setDate', date).fullCalendar('changeView', 'agendaWeek'); + minical.datepicker('setDate', date); + } + }); }; // initialize small calendar widget using jQuery UI datepicker @@ -1895,10 +1896,8 @@ function rcube_calendar_ui(settings) ignore_click = true; var d = minical.datepicker('getDate'); //parse_datetime('0:0', dateText); fc.fullCalendar('gotoDate', d).fullCalendar('select', d, d, true); - window.setTimeout(init_week_events, 10); }, onChangeMonthYear: function(year, month, inst) { - window.setTimeout(init_week_events, 10); var d = minical.datepicker('getDate'); d.setYear(year); d.setMonth(month - 1); @@ -1917,7 +1916,6 @@ function rcube_calendar_ui(settings) var fullcalendar_update = function() { var d = fc.fullCalendar('getDate'); minical.datepicker('setDate', d); - window.setTimeout(init_week_events, 10); }; $("#calendar .fc-button-prev").click(fullcalendar_update); $("#calendar .fc-button-next").click(fullcalendar_update); @@ -2071,7 +2069,7 @@ function rcube_calendar_ui(settings) if (rcmail.env.autocomplete_threads > 0) { ac_props = { threads: rcmail.env.autocomplete_threads, - sources: rcmail.env.autocomplete_sources, + sources: rcmail.env.autocomplete_sources }; } rcmail.init_address_input_events($('#edit-attendee-name'), ac_props); diff --git a/plugins/calendar/skins/default/calendar.css b/plugins/calendar/skins/default/calendar.css index f2242aca..4c612fb6 100644 --- a/plugins/calendar/skins/default/calendar.css +++ b/plugins/calendar/skins/default/calendar.css @@ -56,6 +56,10 @@ body.calendarmain { opacity: 0.4; } +#datepicker td.ui-datepicker-week-col { + cursor: pointer; +} + #sidebartoggle { position: absolute; left: 244px;