summaryrefslogtreecommitdiffstats
path: root/sources/ext/dhtmlxscheduler_mvc.js
blob: 91eb269b034c30be075f535494ea61b0d884080d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
This software is allowed to use under GPL or you need to obtain Commercial or Enterise License
to use it in non-GPL project. Please contact sales@dhtmlx.com for details
*/
(function(){

	//remove private properties
	function sanitize(ev){
		var obj = {};
		for (var key in ev)
			if (key.indexOf("_") !== 0)
				obj[key] = ev[key];

		return obj;
	}

	var update_timer;
	function update_view(){
		clearTimeout(update_timer);
		update_timer = setTimeout(function(){
			scheduler.updateView();
		},1);
	};


scheduler.backbone = function(collection){
	events.bind("reset", function(){
		scheduler.clearAll();
		scheduler.parse(events.toJSON(), "json");
	});
	events.bind("change", function(model, info){
		//special handling for id change
		if (info.changes && info.changes.id){
			var old_id = model.previous("id");
			scheduler.changeEventId(old_id, model.id);
		}

		var id = model.id;
		scheduler._init_event( scheduler._events[id] = model.toJSON() );
		update_view();
	});
	events.bind("remove", function(model, changes){
		if (scheduler._events[model.id])
			scheduler.deleteEvent(model.id);
	});
	events.bind("add", function(model, changes){
		if (!scheduler._events[model.id]){
			var ev =  model.toJSON();
			scheduler._init_event(ev); 
			scheduler.addEvent(ev);
		}
	});


	scheduler.attachEvent("onEventCreated", function(id){
		var ev = new events.model(scheduler.getEvent(id));
		scheduler._events[id] = ev.toJSON();

		return true;
	});

	scheduler.attachEvent("onEventAdded", function(id){
		if (!events.get(id))
			events.add( new events.model(sanitize(scheduler.getEvent(id))) );
		
		return true;
	});
	scheduler.attachEvent("onEventChanged", function(id){
		var ev = events.get(id);
		var upd = sanitize(scheduler.getEvent(id));
		ev.set(upd);

		return true;
	});
	scheduler.attachEvent("onEventDeleted", function(id){
		if (events.get(id))
			events.remove(id);
		return true;
	});
}

})();