Author: solomax
Date: Thu Sep 20 16:02:17 2012
New Revision: 1388089

URL: http://svn.apache.org/viewvc?rev=1388089&view=rev
Log:
Wicket:
        calendar ability to drag/resize of the events is added (window resize 
works weird);
        autorefresh calendar every 10 seconds added
        code cleanup;

Modified:
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
    
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html?rev=1388089&r1=1388088&r2=1388089&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.html
 Thu Sep 20 16:02:17 2012
@@ -39,17 +39,35 @@
                                                center: 'title',
                                                right: 
'month,agendaWeek,agendaDay'
                                        }
-                                       //, editable: true
+                                       , editable: true
+                                       , allDaySlot: false
+                                       , axisFormat: 'HH(:mm)'
+                                       , defaultEventMinutes: 60
                                        , timeFormat: {
-                                               agenda: 'H:mm{ - H:mm}'
-                                               , '': 'H(:mm)'
+                                               agenda: 'HH:mm{ - HH:mm}'
+                                               , '': 'HH(:mm)'
                                        }
                                        , height: getCalendarHeight()
+                                       , windowResize: function() {
+                                               
//$('#calendar').data().fullCalendar.option('height', getCalendarHeight());
+                                               this.option('height', 
getCalendarHeight());
+                                       }
+                                       , eventDrop: dropEventFunc //TODO 
confirm ??
+                                       , eventResize: resizeEventFunc //TODO 
confirm ??
+                                       , eventSources: [
+                                               {
+                                                       events: fetchEventsFunc
+                                                       //, color: '#4793E6'
+                                                       //, textColor: 'black'
+                                               }
+                                       ]
                                });
+                               /*
                                $(window).resize(function() {
                                        
$('#calendar').data().fullCalendar.option('height', getCalendarHeight());
                                });
-                               setEventSource();
+                               */
+                               
window.setInterval(function(){$('#calendar').fullCalendar('refetchEvents');}, 
10 * 1000); //FIXME refresh calendar every XX seconds
                        });
                </script>
        </wicket:panel>

Modified: 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
URL: 
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java?rev=1388089&r1=1388088&r2=1388089&view=diff
==============================================================================
--- 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
 (original)
+++ 
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/calendar/CalendarPanel.java
 Thu Sep 20 16:02:17 2012
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.web.components.user.calendar;
 
 import static org.apache.wicket.ajax.attributes.CallbackParameter.context;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.resolved;
 
 import java.util.Calendar;
@@ -51,6 +52,7 @@ public class CalendarPanel extends UserP
                calendar.setOutputMarkupId(true);
                calendar.setMarkupId("calendar");
                add(calendar);
+               //fetchEvents
                add(new AbstractDefaultAjaxBehavior() {
                        private static final long serialVersionUID = 
6880514947331946407L;
 
@@ -66,15 +68,14 @@ public class CalendarPanel extends UserP
                        public void renderHead(Component component, 
IHeaderResponse response) {
                                super.renderHead(component, response);
                                response.render(JavaScriptHeaderItem.forScript(
-                                               "function setEventSource(){\n"
-                                               + "     
$('#calendar').fullCalendar('addEventSource', \n"
-                                               + "     {\n"
-                                               + "             events: " + 
this.getCallbackFunction(context("start"), context("end"), context("callback"), 
resolved("_start", "start.getTime()"), resolved("_end", "end.getTime()")) + "\n"
-                                               //+ "           , color: 
'#4793E6'\n"
-                                               //+ "           , textColor: 
'black'\n"
-                                               + "});\n"
-                                               + "}", "setEvtSource"));
-                                               
+                                       "var fetchEventsFunc = "
+                                               + this.getCallbackFunction(
+                                                       context("start")
+                                                       , context("end")
+                                                       , context("callback")
+                                                       , resolved("_start", 
"start.getTime()")
+                                                       , resolved("_end", 
"end.getTime()")) + ";"
+                                       , "fetchEventsFunc"));
                        }
 
                        @Override
@@ -101,5 +102,78 @@ public class CalendarPanel extends UserP
                        new TextRequestHandler("application/json", "UTF-8", 
events.toString()));
                        }
                });
+               //dropEvent
+               add(new DropResizeBehavior(true, "dropEventFunc"));
+               //resizeEvent
+               add(new DropResizeBehavior(false, "resizeEventFunc"));
+       }
+
+       private class DropResizeBehavior extends AbstractDefaultAjaxBehavior {
+               private static final long serialVersionUID = 
-3060872155563135236L;
+               private boolean drop = false;
+               private String funcName;
+               
+               DropResizeBehavior(boolean drop, String funcName) {
+                       this.drop = drop;
+                       this.funcName = funcName;
+               }
+               
+               @Override
+               protected void updateAjaxAttributes(AjaxRequestAttributes 
attributes) {
+                       super.updateAjaxAttributes(attributes);
+                       attributes.getAjaxCallListeners().add(new 
AjaxCallListener().onFailure("revertFunc();"));
+               }
+               
+               @Override
+               public void renderHead(Component component, IHeaderResponse 
response) {
+                       super.renderHead(component, response);
+                       response.render(JavaScriptHeaderItem.forScript(
+                               "var " + funcName + " = "
+                                       + (drop
+                                               ? this.getCallbackFunction(
+                                                       context("event")
+                                                       , explicit("dayDelta")
+                                                       , 
explicit("minuteDelta")
+                                                       , context("allDay")
+                                                       , context("revertFunc")
+                                                       , context("jsEvent")
+                                                       , context("ui")
+                                                       , context("view")
+                                                       , resolved("_id", 
"event.id"))
+                                               : this.getCallbackFunction(
+                                                       context("event")
+                                                       , explicit("dayDelta")
+                                                       , 
explicit("minuteDelta")
+                                                       , context("revertFunc")
+                                                       , context("jsEvent")
+                                                       , context("ui")
+                                                       , context("view")
+                                                       , resolved("_id", 
"event.id"))) + ";"
+                               , funcName));
+               }
+               
+               @Override
+               protected void respond(AjaxRequestTarget target) {
+                       AppointmentDaoImpl dao = 
Application.getBean(AppointmentDaoImpl.class);
+                       Appointment a = dao.getAppointmentById(
+                               
getRequestCycle().getRequest().getRequestParameters().getParameterValue("_id").toLong());
+
+                       int dayDelta = 
getRequestCycle().getRequest().getRequestParameters().getParameterValue("dayDelta").toInt();
+                       int minuteDelta = 
getRequestCycle().getRequest().getRequestParameters().getParameterValue("minuteDelta").toInt();
+
+                       Calendar cal = WebSession.getCalendar();
+                       if (drop) {
+                               cal.setTime(a.getAppointmentStarttime());
+                               cal.add(Calendar.DATE, dayDelta);
+                               cal.add(Calendar.MINUTE, minuteDelta);
+                               a.setAppointmentStarttime(cal.getTime());
+                       }
+                       cal.setTime(a.getAppointmentEndtime());
+                       cal.add(Calendar.DATE, dayDelta);
+                       cal.add(Calendar.MINUTE, minuteDelta);
+                       a.setAppointmentEndtime(cal.getTime());
+                       
+                       dao.updateAppointment(a);
+               }
        }
 }


Reply via email to