88 // view-specific settings
99 render : 'view_week' ,
1010 render_event : 'view_week_render_event' ,
11- get_time_offset : function ( event , ui ) { return ui . offset . top - event . target . offsetTop ; } ,
11+ get_time_offset : function ( evt , ui ) { return ui . offset . top - evt . target . offsetTop ; } ,
12+
13+ // persistent event storage accessor functions
14+ // (override with application functions in rc_calendar constructor call)
15+ persist : function ( evt ) { } ,
16+ retrieve : function ( ) { return [ ] } ,
17+ remove : function ( ) { } ,
1218
1319 min_time : '07:00' , // 7am
1420 max_time : '20:00' , // 8pm
5561 var calendar = new Calendar ( element , options ) ;
5662 element . data ( 'rc_Calendar' , calendar ) ;
5763 calendar . render ( 1375293414903 ) ;
64+ calendar . initialize_events ( ) ;
5865 } ) ;
5966
6067 return this ;
@@ -107,7 +114,13 @@ function Calendar( element, options )
107114 t . resources [ $ ( this ) . attr ( 'id' ) ] = new Resource ( $ ( this ) , 'localtest' ) ;
108115 } ) ;
109116
110- t . eventmanager = new rc_EventManager ( ) ;
117+ t . initialize_events = function ( ) {
118+ t . eventmanager = new rc_EventManager ( t . options . retrieve ,
119+ t . options . persist ,
120+ t . options . remove ,
121+ t . resources ,
122+ t [ t . options . render_event ] ) ;
123+ }
111124
112125
113126//--- Public Methods ---
@@ -151,8 +164,7 @@ function Calendar( element, options )
151164
152165 // [TODO - abstract user-added attributes]
153166 capacity : 10
154- } ,
155- t [ t . options . render_event ]
167+ }
156168 ) ;
157169 }
158170 else
@@ -168,8 +180,7 @@ function Calendar( element, options )
168180 {
169181 start : start_time ,
170182 date : date ,
171- } ,
172- t [ t . options . render_event ]
183+ }
173184 ) ) {
174185 // was able to render in the new position, delete the original
175186 dragged . remove ( ) ;
@@ -216,6 +227,12 @@ function Calendar( element, options )
216227
217228 $ ( '#' + evt . attr . parent ) . append ( newev ) ;
218229
230+ newev . find ( '.deleteevent' ) . click ( function ( event ) {
231+ event . stopPropagation ( ) ;
232+ confirm ( "You are about to delete this event; this action can not be undone! Confirm deletion?" ,
233+ t . eventmanager . deleteEvent , evt . attr . id ) ;
234+ } ) ;
235+
219236 newev . draggable ( {
220237 appendTo : 'body' ,
221238 helper : 'clone' ,
@@ -363,13 +380,29 @@ function rc_Event( options )
363380// Manages updates to/from the server
364381//
365382
366- function rc_EventManager ( )
383+ function rc_EventManager ( retrieve_events , save_event , delete_event , resources , display )
367384{
368- var to_write = [ ] ;
385+ var render = display ;
386+ var persistEvent = save_event ;
387+ var killEvent = delete_event ;
388+ var to_write = [ ] ; // [NOTE] - this may disappear, it is for async writes to a server
369389 var t = this ;
370- t . Events = [ ] ;
371390
372- t . createEvent = function ( parent , resource , options , render ) {
391+ t . Events = retrieve_events ( ) ;
392+
393+ for ( var i in t . Events ) {
394+ var evt = t . Events [ i ] ;
395+ if ( undefined != resources [ evt . attr . resource ] ) {
396+ resources [ evt . attr . resource ] . addEvent ( evt ) ;
397+ render ( evt ) ;
398+ }
399+ else {
400+ // [TODO] - remove from list??
401+ }
402+
403+ }
404+
405+ t . createEvent = function ( parent , resource , options ) {
373406 var new_event = new rc_Event ( options ) ;
374407 var id = new_event . attr . id ;
375408
@@ -380,12 +413,13 @@ function rc_EventManager( )
380413 new_event . attr . resource = resource . id ;
381414 new_event . attr . parent = parent . attr ( 'id' ) ; // div in which this event currently resides
382415 render ( new_event ) ;
416+ persistEvent ( new_event ) ;
383417 }
384418
385419 return new_event ;
386420 }
387421
388- t . moveEvent = function ( evt , parent , old_resource , new_resource , options , render ) {
422+ t . moveEvent = function ( evt , parent , old_resource , new_resource , options ) {
389423 to_write [ evt . attr . id ] = true ;
390424
391425 // have to update event attributes before attempting to move the event,
@@ -410,6 +444,7 @@ function rc_EventManager( )
410444 evt . attr . resource = new_resource . id ;
411445 evt . attr . parent = parent . attr ( 'id' ) ;
412446 render ( evt ) ;
447+ persistEvent ( evt ) ;
413448 return true ;
414449 }
415450 else {
@@ -418,6 +453,12 @@ function rc_EventManager( )
418453 }
419454 }
420455
456+ t . deleteEvent = function ( id ) {
457+ t . Events [ id ] = undefined ;
458+ $ ( '#' + id ) . remove ( ) ;
459+ killEvent ( id ) ;
460+ }
461+
421462 return t ;
422463}
423464
@@ -443,11 +484,7 @@ var init_resource = {
443484 Room2 :{ title :"Narwhal" , capacity :50 , location :"Rochester North" } ,
444485 Room3 :{ title :"Walrus" , capacity :500 , location :"Rochester East" } ,
445486} ;
446- var init_resource_events = {
447- Room1 :[ 0 , 1 , 2 , 3 ] ,
448- Room2 :[ 4 , 5 , 6 , 7 ] ,
449- Room3 :[ 8 , 9 , 10 , 11 ]
450- }
487+
451488//--- END TEST DATA ---------------------------------------------------
452489
453490
0 commit comments