From 486f0e8fb05e142f2e88f937772f4193664856ea Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Tue, 27 Jul 2010 14:51:17 -0600 Subject: [PATCH] Use Horde_Core_Ui_JsCalendar. Add some functionality from kronolith also, like displaying the weekday name and doing javascript actions when clicking on input labels. --- nag/js/calendar.js | 109 +++++++++++++++++++++++++++++++++++++++ nag/lib/Ui/VarRenderer/Nag.php | 112 ++++++++++++++++------------------------- nag/themes/screen.css | 5 ++ 3 files changed, 158 insertions(+), 68 deletions(-) create mode 100644 nag/js/calendar.js diff --git a/nag/js/calendar.js b/nag/js/calendar.js new file mode 100644 index 000000000..c68b69cb1 --- /dev/null +++ b/nag/js/calendar.js @@ -0,0 +1,109 @@ +/** + * calendar.js - Calendar related javascript. + * + * Copyright 2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (GPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/gpl.html. + * + * @author Michael Slusarz + * @category Horde + * @package Nag + */ + +var NagCalendar = +{ + calendarSelect: function(e) + { + var prefix; + + switch (e.element().identify()) { + case 'dueimg': + prefix = 'due'; + break; + + case 'startimg': + prefix = 'start'; + break; + + default: + return; + } + + $(prefix + '_year').setValue(e.memo.getFullYear()); + $(prefix + '_month').setValue(e.memo.getMonth() + 1); + $(prefix + '_day').setValue(e.memo.getDate()); + + this.doAction(prefix + '_year'); + }, + + updateWday: function(p) + { + $(p + '_wday').update('(' + Horde_Calendar.fullweekdays[this.getFormDate(p).getDay()] + ')'); + }, + + getFormDate: function(p) + { + return new Date($F(p + '_year'), $F(p + '_month') - 1, $F(p + '_day')); + }, + + clickHandler: function(e) + { + if (e.isRightClick()) { + return; + } + + var elt = e.element(), + id = elt.readAttribute('id'); + + switch (id) { + case 'dueimg': + case 'startimg': + Horde_Calendar.open(elt, this.getFormDate(id.slice(0, -3))); + e.stop(); + break; + + case 'due_am_pm_am': + case 'due_am_pm_am_label': + case 'due_am_pm_pm': + case 'due_am_pm_pm_label': + $('due_type_specified').setValue(1); + break; + } + }, + + changeHandler: function(e) + { + switch (e.element().readAttribute('id')) { + case 'due_day': + case 'due_month': + case 'due_year': + this.updateWday('due'); + // Fall-through + + case 'due_hour': + case 'due_minute': + $('due_type_specified').setValue(1); + break; + + case 'start_day': + case 'start_month': + case 'start_year': + this.updateWday('start'); + break; + } + }, + + onDomLoad: function() + { + this.updateWday('due'); + this.updateWday('start'); + + $('nag_taskform_active').observe('click', this.clickHandler.bindAsEventListener(this)); + $('nag_taskform_active').observe('change', this.changeHandler.bindAsEventListener(this)); + } + +}; + +document.observe('dom:loaded', NagCalendar.onDomLoad.bind(NagCalendar)); +document.observe('Horde_Calendar:select', NagCalendar.calendarSelect.bindAsEventListener(NagCalendar)); diff --git a/nag/lib/Ui/VarRenderer/Nag.php b/nag/lib/Ui/VarRenderer/Nag.php index 016e61645..7dd027e46 100644 --- a/nag/lib/Ui/VarRenderer/Nag.php +++ b/nag/lib/Ui/VarRenderer/Nag.php @@ -82,13 +82,10 @@ class Horde_Core_Ui_VarRenderer_Nag extends Horde_Core_Ui_VarRenderer_Html protected function _renderVarInput_nag_start($form, $var, $vars) { $var->type->getInfo($vars, $var, $task_start); - if ($task_start == 0) { - $start_date = getdate(time() + 604800); // About a week from now - } else { - $start_date = getdate($task_start); - } - - $javascript_start = 'onchange="document.' . $form->getName() . '.start_date[1].checked = true;"'; + $start_date = ($task_start == 0) + // About a week from now + ? getdate(time() + 604800) + : getdate($task_start); /* Set up the radio buttons. */ $no_start_checked = ($task_start == 0) ? 'checked="checked" ' : ''; @@ -103,13 +100,16 @@ class Horde_Core_Ui_VarRenderer_Nag extends Horde_Core_Ui_VarRenderer_Html -buildDayWidget('start[day]', $start_date['mday'], $javascript_start) . ' ' . $this->buildMonthWidget('start[month]', $start_date['mon'], $javascript_start) . ' ' . $this->buildYearWidget('start[year]', 3, $start_date['year'], $javascript_start) ?> -hasFeature('javascript')) { -Horde::addScriptFile('open_calendar.js', 'horde', array('direct' => false)); -echo ''; -echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'startimg\', \'start\', \'document.' . $form->getName() . '.start_date[1].checked = true;\'); return false;') . Horde::img('calendar.png', _("Calendar"), 'align="top" id="startimg"') . ''; -} ?> +buildDayWidget('start[day]', $start_date['mday']) . ' ' . $this->buildMonthWidget('start[month]', $start_date['mon']) . ' ' . $this->buildYearWidget('start[year]', 3, $start_date['year']) ?> hasFeature('javascript')) { + Horde_Core_Ui_JsCalendar::init(array( + 'full_weekdays' => true + )); + Horde::addScriptFile('calendar.js', 'nag'); + echo '' . + Horde::img('calendar.png', _("Calendar"), 'id="startimg"'); + } } protected function _renderVarInput_nag_due($form, $var, $vars) @@ -134,10 +134,9 @@ echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'startimg\', \' $due_date = getdate($task_due); } - $javascript_due = 'onchange="document.' . $form->getName() . '.due_type[1].checked = true;"'; - $hour_widget = $this->buildHourWidget('due_hour', $due_date['hours'], $javascript_due); - $minute_widget = $this->buildMinuteWidget('due_minute', 15, $due_date['minutes'], $javascript_due); - $am_pm_widget = $this->buildAmPmWidget('due_am_pm', $due_date['hours'], $javascript_due, $javascript_due); + $hour_widget = $this->buildHourWidget('due_hour', $due_date['hours']); + $minute_widget = $this->buildMinuteWidget('due_minute', 15, $due_date['minutes']); + $am_pm_widget = $this->buildAmPmWidget('due_am_pm', $due_date['hours']); /* Set up the radio buttons. */ $none_checked = ($task_due == 0) ? 'checked="checked" ' : ''; @@ -152,11 +151,17 @@ echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'startimg\', \' -buildDayWidget('due[day]', $due_date['mday'], $javascript_due) . ' ' . $this->buildMonthWidget('due[month]', $due_date['mon'], $javascript_due) . ' ' . $this->buildYearWidget('due[year]', 3, $due_date['year'], $javascript_due) ?> -hasFeature('javascript')) { -echo ''; -echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'dueimg\', \'due\', \'document.' . $form->getName() . '.due_type[1].checked = true;\'); return false;') . Horde::img('calendar.png', _("Calendar"), 'align="top" id="dueimg"') . ''; -} ?> +buildDayWidget('due[day]', $due_date['mday']) . ' ' . $this->buildMonthWidget('due[month]', $due_date['mon']) . ' ' . $this->buildYearWidget('due[year]', 3, $due_date['year']) ?> +hasFeature('javascript')) { + Horde_Core_Ui_JsCalendar::init(array( + 'full_weekdays' => true + )); + Horde::addScriptFile('calendar.js', 'nag'); + echo '' . + Horde::img('calendar.png', _("Calendar"), 'id="dueimg"'); + } +?>
@@ -219,20 +224,14 @@ echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'dueimg\', \'du * * @param string $name The name of the widget. * @param integer $default The value to select by default. Range: 1-31 - * @param string $params Any additional parameters to include in the - * widget. */ - public function buildDayWidget($name, $default = null, $params = null) + public function buildDayWidget($name, $default = null) { $id = str_replace(array('[', ']'), array('_', ''), $name); - $html = ' widget. */ - public function buildMonthWidget($name, $default = null, $params = null) + public function buildMonthWidget($name, $default = null) { $id = str_replace(array('[', ']'), array('_', ''), $name); - $html = ' widget. */ - public function buildYearWidget($name, $years, $default = null, $params = null) + public function buildYearWidget($name, $years, $default = null) { $curr_year = date('Y'); $yearlist = array(); @@ -301,11 +292,7 @@ echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'dueimg\', \'du $id = str_replace(array('[', ']'), array('_', ''), $name); - $html = ' widget. */ - public function buildHourWidget($name, $default = null, $params = null) + public function buildHourWidget($name, $default = null) { global $prefs; if (!$prefs->getValue('twentyFour')) { $default = ($default + 24) % 12; } - $html = ''; } - public function buildAmPmWidget($name, $default = 'am', $amParams = null, $pmParams = null) + /** + * TODO + */ + public function buildAmPmWidget($name, $default = 'am') { - global $prefs; - if ($prefs->getValue('twentyFour')) { + if ($GLOBALS['prefs']->getValue('twentyFour')) { return; } @@ -368,8 +351,8 @@ echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'dueimg\', \'du $pm = ' checked="checked"'; } - $html = '  '; - $html .= ''; + $html = '  '; + $html .= ''; return $html; } @@ -380,19 +363,12 @@ echo Horde::link('#', _("Select a date"), '', '', 'openCalendar(\'dueimg\', \'du * @param string $name The name of the widget. * @param integer $increment The increment between minutes. * @param integer $default The timestamp to select by default. - * @param string $params Any additional parameters to include in the - * widget. */ - public function buildMinuteWidget($name, $increment = 1, $default = null, - $params = null) + public function buildMinuteWidget($name, $increment = 1, $default = null) { - $html = '