From b67370f1ee11b26f53698ce6ae4845706e29f464 Mon Sep 17 00:00:00 2001 From: Sam Ottenhoff Date: Sun, 6 Apr 2025 20:32:51 -0400 Subject: [PATCH] Fix: Correct syntax error in DateHelper.normalize Resolve 'Declaration or statement expected' error in lang-datepicker.js caused by incorrect nesting of date string format parsing logic within the DateHelper.normalize method. The conditional blocks for handling YYYY-MM-DD format and the native Date parsing fallback were incorrectly nested inside the block checking for the ISO 'T' format. This commit adjusts the block structure to ensure all string parsing attempts occur sequentially within the main string type check, resolving the syntax error. --- .../calendar/tool/CalendarAction.java | 13 ----------- .../calendar/tool/CalendarActionState.java | 22 ------------------- .../webapp/vm/calendar/chef_calendar_new.vm | 5 ++--- .../js/lang-datepicker/lang-datepicker.js | 12 ++++++---- 4 files changed, 10 insertions(+), 42 deletions(-) diff --git a/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarAction.java b/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarAction.java index 6b544a93b3da..de3508fd7eca 100644 --- a/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarAction.java +++ b/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarAction.java @@ -4649,7 +4649,6 @@ public void doNew(RunData data, Context context) state.setState(STATE_NEW); state.setCalendarEventId("", ""); state.setIsNewCalendar(true); - state.setIsPastAlertOff(true); sstate.setAttribute(FREQUENCY_SELECT, null); sstate.setAttribute(CalendarAction.SSTATE__RECURRING_RULE, null); @@ -4827,18 +4826,6 @@ else if(hour.equals("100") || minute.equals("100")) { state.setNewData(calId, title,description,Integer.parseInt(month),Integer.parseInt(day),year,houri,Integer.parseInt(minute),Integer.parseInt(dhour),Integer.parseInt(dminute),type,timeType,location, addfieldsMap, intentionStr); state.setState(STATE_NEW); - } - else if( event_startTime.before(now_time) && state.getIsPastAlertOff() ) { - // IsPastAlertOff - // true: no alert shown -> then show the alert, set false; - // false: Alert shown, if user click ADD - doAdd again -> accept it, set true, set alert empty; - - String errorCode = rb.getString("java.alert.past"); - addAlert(sstate, errorCode); - - state.setNewData(state.getPrimaryCalendarReference(), title,description,Integer.parseInt(month),Integer.parseInt(day),year,houri,Integer.parseInt(minute),Integer.parseInt(dhour),Integer.parseInt(dminute),type,timeType,location, addfieldsMap, intentionStr); - state.setState(STATE_NEW); - state.setIsPastAlertOff(false); } else if (!DateFormatterUtil.checkDate(Integer.parseInt(day), Integer.parseInt(month), Integer.parseInt(year))) { addAlert(sstate, rb.getString("date.invalid")); state.setNewData(state.getPrimaryCalendarReference(), title,description,Integer.parseInt(month),Integer.parseInt(day),year,houri,Integer.parseInt(minute),Integer.parseInt(dhour),Integer.parseInt(dminute),type,timeType,location, addfieldsMap, intentionStr); diff --git a/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarActionState.java b/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarActionState.java index 2c1152b6cd21..a324d60dc80c 100644 --- a/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarActionState.java +++ b/calendar/calendar-tool/tool/src/java/org/sakaiproject/calendar/tool/CalendarActionState.java @@ -76,8 +76,6 @@ public class CalendarActionState private String m_AttachmentFlag = "false"; private LocalEvent savedData = new LocalEvent(); - private boolean m_IsPastAlertOff = true; - private String m_state = ""; private String currentpage = "second"; @@ -213,16 +211,6 @@ public void setIsNewCalendar(boolean isNewcal) } // setIsNewCalendar - /** - * Get the status of past alert off: true - no alert shown; false - alert shown - * @return IsPastAlertOff - */ - public boolean getIsPastAlertOff() - { - return m_IsPastAlertOff; - - } // getIsPastAlertOff - /** * Gets the main calendar ID associated with the event list. Many calendars may be merged into this list, but there is only one one calendar that is used for adding/modifying events. */ @@ -231,16 +219,6 @@ public String getPrimaryCalendarReference() return m_primaryCalendarReference; } - /** - * Set the status of past alert off: true - no alert shown; false - alert shown - * @param IsPastAlertOff The status of past alert off: true - no alert shown; false - alert shown - */ - public void setIsPastAlertOff(boolean IsPastAlertOff) - { - m_IsPastAlertOff = IsPastAlertOff; - - } // setIsPastAlertOff - /** * Sets the main calendar ID associated with the event list. Many calendars may be merged into this * list, but there is only one one calendar that is used for adding/modifying events/ diff --git a/calendar/calendar-tool/tool/src/webapp/vm/calendar/chef_calendar_new.vm b/calendar/calendar-tool/tool/src/webapp/vm/calendar/chef_calendar_new.vm index 8c188f29a815..cafd3a8656ec 100644 --- a/calendar/calendar-tool/tool/src/webapp/vm/calendar/chef_calendar_new.vm +++ b/calendar/calendar-tool/tool/src/webapp/vm/calendar/chef_calendar_new.vm @@ -370,18 +370,17 @@ $(function() { #set($day=$date.getDay()) #set($year=$todayYear) #end - + diff --git a/library/src/webapp/js/lang-datepicker/lang-datepicker.js b/library/src/webapp/js/lang-datepicker/lang-datepicker.js index 5fa0d378dd02..074e30f02544 100644 --- a/library/src/webapp/js/lang-datepicker/lang-datepicker.js +++ b/library/src/webapp/js/lang-datepicker/lang-datepicker.js @@ -74,14 +74,18 @@ const defaults = { const [datePart, timePart] = value.split('T'); const [year, month, day] = datePart.split('-').map(Number); const timeComponents = timePart.split(':').map(Number); - + } + + // Handle simple YYYY-MM-DD format + if (/^\d{4}-\d{2}-\d{2}$/.test(value)) { + const [year, month, day] = value.split('-').map(Number); if (!isNaN(year) && !isNaN(month) && !isNaN(day)) { const d = new Date(); d.setFullYear(year); - d.setMonth(month - 1); + d.setMonth(month - 1); // JS months are 0-indexed d.setDate(day); - d.setHours(timeComponents[0] || 0); - d.setMinutes(timeComponents[1] || 0); + d.setHours(0); // Explicitly set time to midnight local + d.setMinutes(0); d.setSeconds(0); d.setMilliseconds(0); return d;