/* dhtmlxScheduler v.4.2.0 Stardard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. (c) Dinamenta, UAB. */ (function(){ var cfg = { use_id : false }; //remove private properties function sanitize(ev){ var obj = {}; for (var key in ev) if (key.indexOf("_") !== 0) obj[key] = ev[key]; if (!cfg.use_id) delete obj.id; return obj; } var update_timer; function update_view(){ clearTimeout(update_timer); update_timer = setTimeout(function(){ scheduler.updateView(); },1); } function _start_ext_load(cal){ cal._loading = true; cal._not_render = true; cal.callEvent("onXLS", []); } function _finish_ext_load(cal){ cal._not_render = false; if (cal._render_wait) cal.render_view_data(); cal._loading = false; cal.callEvent("onXLE", []); } function _get_id(model){ return cfg.use_id ? model.id : model.cid; } scheduler.backbone = function(events, config){ if (config) cfg = config; events.bind("change", function(model, info){ var cid = _get_id(model); var ev = scheduler._events[cid] = model.toJSON(); ev.id = cid; scheduler._init_event(ev); update_view(); }); events.bind("remove", function(model, changes){ var cid = _get_id(model); if (scheduler._events[cid]) scheduler.deleteEvent(cid); }); var queue = []; function add_from_queue(){ if (queue.length){ scheduler.parse(queue, "json"); queue = []; } } events.bind("add", function(model, changes){ var cid = _get_id(model); if (!scheduler._events[cid]){ var ev = model.toJSON(); ev.id = cid; scheduler._init_event(ev); queue.push(ev); if (queue.length == 1) setTimeout(add_from_queue,1); } }); events.bind("request", function(obj){ if (obj instanceof Backbone.Collection) _start_ext_load(scheduler); }); events.bind("sync", function(obj){ if (obj instanceof Backbone.Collection) _finish_ext_load(scheduler); }); events.bind("error", function(obj){ if (obj instanceof Backbone.Collection) _finish_ext_load(scheduler); }); scheduler.attachEvent("onEventCreated", function(id){ var ev = new events.model(scheduler.getEvent(id)); scheduler._events[id] = ev.toJSON(); scheduler._events[id].id = id; return true; }); scheduler.attachEvent("onEventAdded", function(id){ if (!events.get(id)){ var data = sanitize(scheduler.getEvent(id)); var model = new events.model(data); var cid = _get_id(model); if (cid != id) this.changeEventId(id, cid); events.add(model); events.trigger("scheduler:add", model); } return true; }); scheduler.attachEvent("onEventChanged", function(id){ var ev = events.get(id); var upd = sanitize(scheduler.getEvent(id)); ev.set(upd); events.trigger("scheduler:change", ev); return true; }); scheduler.attachEvent("onEventDeleted", function(id){ var model = events.get(id); if (model){ events.trigger("scheduler:remove", model); events.remove(id); } return true; }); }; })();