/** * The default implementation for am event model. All fields are * accessed via the getter/setter API to allow for custom model * implementations. * * ## Fields ## * * The following fields are provided: * * - title : {String} - Maps to {@link #getTitle} and {@link #setTitle}. * - calendarId : {Object} - Maps to {@link #getCalendarId} and {@link #setCalendarId}. * - description : {String} - Maps to {@link #getDescription} and {@link #setDescription}. * - startDate : {Date} - Maps to {@link #getStartDate} and {@link #getStartDate}. * - endDate : {Date} - Maps to {@link #getEndDate} and {@link #getEndDate}. * - allDay : {Boolean} - Maps to {@link #getAllDay} and {@link #setAllDay}. */Ext.define('Ext.calendar.model.Event', { extend: 'Ext.data.Model', mixins: ['Ext.calendar.model.EventBase'], requires: [ 'Ext.data.field.String', 'Ext.data.field.Integer', 'Ext.data.field.Date', 'Ext.data.field.Boolean' ], fields: [{ name: 'title', type: 'string' }, { name: 'calendarId' }, { name: 'color', type: 'string' }, { name: 'description', type: 'string' }, { name: 'startDate', type: 'date', dateFormat: 'c' }, { name: 'endDate', type: 'date', dateFormat: 'c' }, { name: 'allDay', type: 'boolean' }, { name: 'duration', type: 'int', depends: ['startDate', 'endDate'], calculate: function(data) { var start = data.startDate, end = data.endDate, ms = 0; if (end && start) { ms = end.getTime() - start.getTime(); } return ms / 60000; } }], getAllDay: function() { return this.data.allDay; }, getCalendarId: function() { return this.data.calendarId; }, getColor: function() { return this.data.color; }, getDescription: function() { return this.data.description; }, getDuration: function() { return this.data.duration; }, getEndDate: function() { return this.data.endDate; }, getRange: function() { var me = this, range = me.range; if (!range) { me.range = range = new Ext.calendar.date.Range(me.getStartDate(), me.getEndDate()); } return range; }, getStartDate: function() { return this.data.startDate; }, getTitle: function() { return this.data.title; }, isEditable: function() { var calendar = this.getCalendar(); return calendar ? calendar.isEditable() : true; }, setAllDay: function(allDay) { this.set('allDay', allDay); }, setCalendarId: function(calendarId, dirty) { dirty = dirty !== false; this.set('calendarId', calendarId, { dirty: dirty }); }, setColor: function(color) { this.set('color', color); }, setData: function(data) { var duration = data.duration; if (duration) { data = Ext.apply({}, data); delete data.duration; this.setDuration(duration) } else if (data.startDate && data.endDate) { this.range = null; } this.set(data); }, setDescription: function(description) { this.set('description', description); }, setDuration: function(duration) { var D = Ext.Date; this.range = null; this.set('endDate', D.add(this.data.startDate, D.MINUTE, duration)); }, setRange: function(start, end) { var D = Ext.Date; if (start.isRange) { end = start.end; start = start.start; } this.range = null; this.set({ startDate: D.clone(start), endDate: D.clone(end) }); }, setTitle: function(title) { this.set('title', title); }});