2013-07-24 03:15:58 +02:00
|
|
|
|
'use strict';
|
2013-02-23 18:42:15 +01:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
define(
|
|
|
|
|
[
|
2013-06-28 17:43:37 +02:00
|
|
|
|
'app',
|
2013-06-25 01:41:59 +02:00
|
|
|
|
'marionette',
|
2013-07-17 08:23:44 +02:00
|
|
|
|
'moment',
|
2013-06-25 01:41:59 +02:00
|
|
|
|
'Calendar/Collection',
|
|
|
|
|
'fullcalendar'
|
2013-07-24 06:16:52 +02:00
|
|
|
|
], function (App, Marionette, Moment, CalendarCollection) {
|
2013-03-01 05:59:06 +01:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
var _instance;
|
2013-02-25 01:00:17 +01:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
return Marionette.ItemView.extend({
|
|
|
|
|
initialize: function () {
|
|
|
|
|
this.collection = new CalendarCollection();
|
|
|
|
|
},
|
|
|
|
|
render : function () {
|
|
|
|
|
$(this.$el).empty().fullCalendar({
|
|
|
|
|
defaultView : 'basicWeek',
|
|
|
|
|
allDayDefault : false,
|
|
|
|
|
ignoreTimezone: false,
|
|
|
|
|
weekMode : 'variable',
|
|
|
|
|
timeFormat : 'h(:mm)tt',
|
|
|
|
|
header : {
|
|
|
|
|
left : 'prev,next today',
|
|
|
|
|
center: 'title',
|
2013-07-29 03:38:00 +02:00
|
|
|
|
right : 'month,basicWeek,basicDay'
|
2013-06-25 01:41:59 +02:00
|
|
|
|
},
|
|
|
|
|
buttonText : {
|
|
|
|
|
prev: '<i class="icon-arrow-left"></i>',
|
|
|
|
|
next: '<i class="icon-arrow-right"></i>'
|
|
|
|
|
},
|
|
|
|
|
events : this.getEvents,
|
|
|
|
|
eventRender : function (event, element) {
|
|
|
|
|
$(element).addClass(event.statusLevel);
|
|
|
|
|
$(element).children('.fc-event-inner').addClass(event.statusLevel);
|
|
|
|
|
},
|
2013-07-24 03:15:58 +02:00
|
|
|
|
eventClick : function (event) {
|
2013-07-24 06:16:52 +02:00
|
|
|
|
App.vent.trigger(App.Commands.ShowEpisodeDetails, {episode: event.model});
|
2013-06-25 01:41:59 +02:00
|
|
|
|
}
|
|
|
|
|
});
|
2013-06-05 07:07:42 +02:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
_instance = this;
|
|
|
|
|
},
|
2013-02-26 04:30:24 +01:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
onShow: function () {
|
|
|
|
|
this.$('.fc-button-today').click();
|
|
|
|
|
},
|
2013-02-26 04:30:24 +01:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
getEvents: function (start, end, callback) {
|
2013-07-17 08:23:44 +02:00
|
|
|
|
var startDate = Moment(start).toISOString();
|
|
|
|
|
var endDate = Moment(end).toISOString();
|
2013-05-01 03:54:15 +02:00
|
|
|
|
|
2013-06-25 01:41:59 +02:00
|
|
|
|
_instance.collection.fetch({
|
|
|
|
|
data : { start: startDate, end: endDate },
|
|
|
|
|
success: function (calendarCollection) {
|
2013-08-22 06:30:26 +02:00
|
|
|
|
calendarCollection.each(function (element) {
|
2013-06-25 01:41:59 +02:00
|
|
|
|
var episodeTitle = element.get('title');
|
2013-08-21 23:47:39 +02:00
|
|
|
|
var seriesTitle = element.get('series').title;
|
2013-07-24 07:28:06 +02:00
|
|
|
|
var start = element.get('airDateUtc');
|
2013-08-21 23:47:39 +02:00
|
|
|
|
var runtime = element.get('series').runtime;
|
2013-08-22 06:30:26 +02:00
|
|
|
|
var end = Moment(start).add('minutes', runtime).toISOString();
|
|
|
|
|
|
2013-05-01 03:54:15 +02:00
|
|
|
|
|
2013-06-28 17:43:37 +02:00
|
|
|
|
element.set({
|
2013-07-17 02:41:04 +02:00
|
|
|
|
title : seriesTitle,
|
2013-06-28 17:43:37 +02:00
|
|
|
|
episodeTitle: episodeTitle,
|
2013-07-17 02:41:04 +02:00
|
|
|
|
start : start,
|
2013-08-21 23:47:39 +02:00
|
|
|
|
end : end,
|
2013-08-22 06:30:26 +02:00
|
|
|
|
allDay : false
|
2013-06-28 17:43:37 +02:00
|
|
|
|
});
|
|
|
|
|
|
2013-08-22 06:30:26 +02:00
|
|
|
|
element.set('statusLevel', _instance.getStatusLevel(element));
|
2013-06-28 17:43:37 +02:00
|
|
|
|
element.set('model', element);
|
2013-06-25 01:41:59 +02:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
callback(calendarCollection.toJSON());
|
|
|
|
|
}
|
|
|
|
|
});
|
2013-07-17 02:41:04 +02:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getStatusLevel: function (element) {
|
|
|
|
|
var hasFile = element.get('hasFile');
|
2013-07-17 08:23:44 +02:00
|
|
|
|
var currentTime = Moment();
|
2013-07-24 07:28:06 +02:00
|
|
|
|
var start = Moment(element.get('airDateUtc'));
|
2013-07-17 08:23:44 +02:00
|
|
|
|
var end = Moment(element.get('end'));
|
2013-07-17 02:41:04 +02:00
|
|
|
|
|
2013-07-18 07:52:13 +02:00
|
|
|
|
var statusLevel = 'primary';
|
|
|
|
|
|
2013-07-29 04:30:01 +02:00
|
|
|
|
if (hasFile) {
|
|
|
|
|
statusLevel = 'success';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (currentTime.isAfter(start) && currentTime.isBefore(end)) {
|
2013-08-22 06:30:26 +02:00
|
|
|
|
var s = start.toISOString();
|
|
|
|
|
var e = end.toISOString();
|
|
|
|
|
var c = currentTime.toISOString();
|
|
|
|
|
|
2013-07-18 07:52:13 +02:00
|
|
|
|
statusLevel = 'warning';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (start.isBefore(currentTime) && !hasFile) {
|
|
|
|
|
statusLevel = 'danger';
|
2013-07-17 02:41:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
2013-07-18 07:52:13 +02:00
|
|
|
|
var test = currentTime.startOf('day').format('LLLL');
|
|
|
|
|
|
|
|
|
|
if (end.isBefore(currentTime.startOf('day'))) {
|
|
|
|
|
statusLevel += ' past'
|
2013-07-17 02:41:04 +02:00
|
|
|
|
}
|
|
|
|
|
|
2013-07-18 07:52:13 +02:00
|
|
|
|
return statusLevel;
|
2013-06-25 01:41:59 +02:00
|
|
|
|
}
|
|
|
|
|
});
|
2013-02-23 18:42:15 +01:00
|
|
|
|
});
|