Source code of the tutorial is available for download.

<div ng-app="main" ng-controller="DemoCtrl" >
<div style="float:left; width:160px">
<daypilot-navigator id="navigator" daypilot-config="navigatorConfig" daypilot-events="events"></daypilot-navigator>
</div>
<div style="margin-left: 160px">
<div class="space">Available time slots:</div>
<daypilot-calendar id="calendar" daypilot-config="calendarConfig" daypilot-events="events" ></daypilot-calendar>
</div>
</div>
<script>
var app = angular.module('main', ['daypilot']).controller('DemoCtrl', function($scope, $timeout, $http) {
$scope.navigatorConfig = {
selectMode: "week",
showMonths: 3,
skipMonths: 3,
onTimeRangeSelected: function(args) {
loadEvents(args.start.firstDayOfWeek(), args.start.addDays(7));
}
};
$scope.calendarConfig = {
viewType: "Week",
timeRangeSelectedHandling: "Disabled",
eventMoveHandling: "Disabled",
eventResizeHandling: "Disabled",
onBeforeEventRender: function(args) {
switch (args.data.tags.status) {
case "free":
args.data.barColor = "green";
args.data.html = "Available";
args.data.toolTip = "Click to request this time slot";
break;
case "waiting":
args.data.barColor = "orange";
args.data.html = "Your appointment, waiting for confirmation";
break;
case "confirmed":
args.data.barColor = "#f41616"; // red
args.data.html = "Your appointment, confirmed";
break;
}
},
onEventClick: function(args) {
if (args.e.tag("status") !== "free") {
$scope.calendar.message("You can only request a new appointment in a free slot.");
return;
}
var modal = new DayPilot.Modal({
onClosed: function(args) {
if (args.result) { // args.result is empty when modal is closed without submitting
loadEvents();
}
}
});
modal.showUrl("appointment_request.php?id=" + args.e.id());
}
};
$timeout(function() {
loadEvents();
});
function loadEvents(day) {
var start = $scope.navigator.visibleStart() > new DayPilot.Date() ? $scope.navigator.visibleStart() : new DayPilot.Date();
var params = {
start: start.toString(),
end: $scope.navigator.visibleEnd().toString()
};
$http.post("backend_events_free.php", params).success(function(data) {
if (day) {
$scope.calendarConfig.startDate = day;
}
$scope.events = data;
});
}
});
</script>