sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
114 lines (92 loc) • 4.42 kB
JavaScript
app.controller('CalendarViewController', function($scope, $compile, ContentService) {
$scope.viewData = {
useCalendarCache: true
};
$scope.$on('refreshItems', function(e) {
$scope.viewData.useCalendarCache = false;
$("#itemCalendar").fullCalendar('refetchEvents');
});
/* event source that calls a function on every view switch */
$scope.eventsF = function (start, end, timezone, callback) {
//get the content for this date range
ContentService.getItemsByDate($scope.data.group._id, start, end, $scope.viewData.useCalendarCache).then(function(data) {
$scope.viewData.useCalendarCache = true;
if (data.message && data.message.length > 0)
$scope.setMessage(data.message, data.success ? "alert-danger" : "alert-success");
callback(data.events);
});
};
$scope.eventSources = [$scope.eventsF];
$scope.calendarDayClick = function(date, jsEvent, view) {
if(!$(jsEvent.target).is('a')) {
var startDate = moment.utc(date);
var endDate = moment.utc(date);
if ($scope.calendarConfig.view === 'month')
endDate = endDate.add('d', 1);
else
endDate = endDate.add('m', 30);
//convert the dates to fix time zone issue
var start = ContentService.getDateNoZone(startDate);
var end = ContentService.getDateNoZone(endDate);
$scope.showNewItem(start, end);
}
};
$scope.calendarEventClick = function( event, allDay, jsEvent, view ){
};
$scope.calendarEventDrop = function(event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view){
ContentService.changeItemDates(event.id, event.start, event.end, $scope.data.group._id).then(function(data) {
$scope.setMessage("Content item dates updated successfully!", "alert-success", true);
});
};
$scope.calendarEventResize = function(event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view ){
ContentService.changeItemDates(event.id, event.start, event.end, $scope.data.group._id).then(function(data) {
$scope.setMessage("Content item dates updated successfully!", "alert-success", true);
});
};
/* Change View */
$scope.changeCalendarView = function(view,calendar) {
$scope.calendarConfig.view = view;
calendar.fullCalendar('changeView',view);
};
/* Change View */
$scope.renderCalender = function(calendar) {
calendar.fullCalendar('render');
};
$scope.calendarEventAfterRender = function(event, element, view) {
//build the tooltip content
var html = '<div class="event-tip tip-box">' +
' <div class="tip-title"><span>' + event.title + '</div>' +
' <div><label>Start:</label><span>' + event.start.format("M/D/YYYY h:mm A") + '</span></div>' +
' <div><label>End:</label><span>' + event.end.format("M/D/YYYY h:mm A") + '</span></div>' +
' <div><label>Status:</label><span>' + event.statusText + '</span></div>' +
' <div class="tip-buttons">' +
' <a href="javascript:void(0);" ng-click="editItem(\'' + event.id + '\')" class="fa fa-pencil" title="Edit Properties"></a>';
if (event.status != 'D') {
html += '<a href="javascript:void(0);" ng-click="publishItem(\'' + event.id + '\')" class="fa fa-cloud-upload" title="Publish"></a>' +
'<a href="javascript:void(0);" ng-click="deleteItem(\'' + event.id + '\')" class="fa fa-trash-o" title="Delete"></a>';
}
html += '</div></div>';
//assign the tooltip to the element
$(element).tooltipster({
content: $($compile(html)($scope)),
trigger: 'click'
});
};
$scope.calendarConfig = {
calendar: {
height: 700,
editable: true,
header: {
left: 'title',
center: '',
right: 'today prev,next'
},
eventClick: $scope.calendarEventClick,
eventDrop: $scope.calendarEventDrop,
eventResize: $scope.calendarEventResize,
dayClick: $scope.calendarDayClick,
eventAfterRender: $scope.calendarEventAfterRender
},
view: 'month'
};
});