mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
248 lines
8.9 KiB
JavaScript
248 lines
8.9 KiB
JavaScript
|
$(document).ready(function() {
|
||
|
|
||
|
|
||
|
var $calendar = $('#calendar');
|
||
|
var id = 10;
|
||
|
if($calendar.weekCalendar !== undefined)
|
||
|
{
|
||
|
$calendar.weekCalendar({
|
||
|
displayOddEven:false,
|
||
|
timeslotsPerHour : 4,
|
||
|
allowCalEventOverlap : true,
|
||
|
overlapEventsSeparate: true,
|
||
|
firstDayOfWeek : 1,
|
||
|
businessHours :{start: 8, end: 18, limitDisplay: false },
|
||
|
daysToShow : 8,
|
||
|
title: function(daysToShow) {
|
||
|
return daysToShow == 1 ? '%date%' : '%start% - %end%';
|
||
|
},
|
||
|
height : function($calendar) {
|
||
|
return $(window).height() - $("h1").outerHeight() - 1;
|
||
|
},
|
||
|
eventRender : function(calEvent, $event) {
|
||
|
if (calEvent.end.getTime() < new Date().getTime()) {
|
||
|
$event.css("backgroundColor", "#aaa");
|
||
|
$event.find(".wc-time").css({
|
||
|
"backgroundColor" : "#999",
|
||
|
"border" : "1px solid #888"
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
draggable : function(calEvent, $event) {
|
||
|
return calEvent.readOnly != true;
|
||
|
},
|
||
|
resizable : function(calEvent, $event) {
|
||
|
return calEvent.readOnly != false;
|
||
|
},
|
||
|
eventNew : function(calEvent, $event) {
|
||
|
var $dialogContent = $("#event_edit_container");
|
||
|
resetForm($dialogContent);
|
||
|
var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
|
||
|
var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
|
||
|
var titleField = $dialogContent.find("input[name='title']");
|
||
|
var bodyField = $dialogContent.find("textarea[name='body']");
|
||
|
var publicField = $dialogContent.find("input[name='public']");
|
||
|
|
||
|
$dialogContent.dialog({
|
||
|
modal: true,
|
||
|
title: "Neuer Termin",
|
||
|
close: function() {
|
||
|
$dialogContent.dialog("destroy");
|
||
|
$dialogContent.hide();
|
||
|
$('#calendar').weekCalendar("removeUnsavedEvents");
|
||
|
},
|
||
|
buttons: {
|
||
|
speichern : function() {
|
||
|
id++;
|
||
|
calEvent.id = id;
|
||
|
calEvent.start = new Date(startField.val());
|
||
|
calEvent.end = new Date(endField.val());
|
||
|
calEvent.title = titleField.val();
|
||
|
calEvent.body = bodyField.val();
|
||
|
|
||
|
if(publicField.prop("checked"))
|
||
|
calEvent.publicEvent='1';
|
||
|
else
|
||
|
calEvent.publicEvent='0';
|
||
|
|
||
|
publicField.prop("checked", false);
|
||
|
$calendar.weekCalendar("removeUnsavedEvents");
|
||
|
$calendar.weekCalendar("updateEvent", calEvent);
|
||
|
$dialogContent.dialog("close");
|
||
|
$calendar.weekCalendar("refresh");
|
||
|
},
|
||
|
abbrechen : function() {
|
||
|
$dialogContent.dialog("close");
|
||
|
}
|
||
|
}
|
||
|
}).show();
|
||
|
|
||
|
$dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start));
|
||
|
setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start));
|
||
|
|
||
|
},
|
||
|
eventDrop : function(calEvent, $event) {
|
||
|
$calendar.weekCalendar("updateEvent", calEvent);
|
||
|
$calendar.weekCalendar("refresh");
|
||
|
},
|
||
|
|
||
|
eventResize : function(calEvent, $event) {
|
||
|
$calendar.weekCalendar("updateEvent", calEvent);
|
||
|
$calendar.weekCalendar("refresh");
|
||
|
},
|
||
|
eventClick : function(calEvent, $event) {
|
||
|
|
||
|
if (calEvent.readOnly) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var $dialogContent = $("#event_edit_container");
|
||
|
resetForm($dialogContent);
|
||
|
var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
|
||
|
var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
|
||
|
var titleField = $dialogContent.find("input[name='title']").val(calEvent.title);
|
||
|
var bodyField = $dialogContent.find("textarea[name='body']").val(calEvent.body);
|
||
|
if(calEvent.publicEvent=='1') publicChecked = true; else publicChecked = false;
|
||
|
var publicField = $dialogContent.find("input[name='public']").prop('checked', publicChecked);
|
||
|
$dialogContent.dialog({
|
||
|
modal: true,
|
||
|
title: "Edit - " + calEvent.title,
|
||
|
close: function() {
|
||
|
$dialogContent.dialog("destroy");
|
||
|
$dialogContent.hide();
|
||
|
$('#calendar').weekCalendar("removeUnsavedEvents");
|
||
|
},
|
||
|
buttons: {
|
||
|
save : function() {
|
||
|
|
||
|
calEvent.start = new Date(startField.val());
|
||
|
calEvent.end = new Date(endField.val());
|
||
|
calEvent.title = titleField.val();
|
||
|
calEvent.body = bodyField.val();
|
||
|
if(publicField.attr("checked"))
|
||
|
calEvent.publicEvent='1';
|
||
|
else
|
||
|
calEvent.publicEvent='0';
|
||
|
|
||
|
$calendar.weekCalendar("updateEvent", calEvent);
|
||
|
$dialogContent.dialog("close");
|
||
|
$calendar.weekCalendar("refresh");
|
||
|
},
|
||
|
"delete" : function() {
|
||
|
$calendar.weekCalendar("removeEvent", calEvent.id);
|
||
|
$dialogContent.dialog("close");
|
||
|
$calendar.weekCalendar("refresh");
|
||
|
},
|
||
|
cancel : function() {
|
||
|
$dialogContent.dialog("close");
|
||
|
}
|
||
|
}
|
||
|
}).show();
|
||
|
|
||
|
var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
|
||
|
var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
|
||
|
$dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start));
|
||
|
setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start));
|
||
|
$(window).resize().resize(); //fixes a bug in modal overlay size ??
|
||
|
|
||
|
},
|
||
|
eventMouseover : function(calEvent, $event) {
|
||
|
},
|
||
|
eventMouseout : function(calEvent, $event) {
|
||
|
},
|
||
|
noEvents : function() {
|
||
|
|
||
|
},
|
||
|
data : "./index.php?module=kalender&action=data"
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function resetForm($dialogContent) {
|
||
|
$dialogContent.find("input").val("");
|
||
|
$dialogContent.find("textarea").val("");
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Sets up the start and end time fields in the calendar event
|
||
|
* form for editing based on the calendar event being edited
|
||
|
*/
|
||
|
function setupStartAndEndTimeFields($startTimeField, $endTimeField, calEvent, timeslotTimes) {
|
||
|
|
||
|
$startTimeField.empty();
|
||
|
$endTimeField.empty();
|
||
|
|
||
|
for (var i = 0; i < timeslotTimes.length; i++) {
|
||
|
var startTime = timeslotTimes[i].start;
|
||
|
var endTime = timeslotTimes[i].end;
|
||
|
var startSelected = "";
|
||
|
if (startTime.getTime() === calEvent.start.getTime()) {
|
||
|
startSelected = "selected=\"selected\"";
|
||
|
}
|
||
|
var endSelected = "";
|
||
|
if (endTime.getTime() === calEvent.end.getTime()) {
|
||
|
endSelected = "selected=\"selected\"";
|
||
|
}
|
||
|
$startTimeField.append("<option value=\"" + startTime + "\" " + startSelected + ">" + timeslotTimes[i].startFormatted + "</option>");
|
||
|
$endTimeField.append("<option value=\"" + endTime + "\" " + endSelected + ">" + timeslotTimes[i].endFormatted + "</option>");
|
||
|
|
||
|
$timestampsOfOptions.start[timeslotTimes[i].startFormatted] = startTime.getTime();
|
||
|
$timestampsOfOptions.end[timeslotTimes[i].endFormatted] = endTime.getTime();
|
||
|
|
||
|
}
|
||
|
$endTimeOptions = $endTimeField.find("option");
|
||
|
$startTimeField.trigger("change");
|
||
|
}
|
||
|
|
||
|
var $endTimeField = $("select[name='end']");
|
||
|
var $endTimeOptions = $endTimeField.find("option");
|
||
|
var $timestampsOfOptions = {start:[],end:[]};
|
||
|
|
||
|
//reduces the end time options to be only after the start time options.
|
||
|
$("select[name='start']").change(function() {
|
||
|
var startTime = $timestampsOfOptions.start[$(this).find(":selected").text()];
|
||
|
var currentEndTime = $endTimeField.find("option:selected").val();
|
||
|
$endTimeField.html(
|
||
|
$endTimeOptions.filter(function() {
|
||
|
return startTime < $timestampsOfOptions.end[$(this).text()];
|
||
|
})
|
||
|
);
|
||
|
|
||
|
var endTimeSelected = false;
|
||
|
$endTimeField.find("option").each(function() {
|
||
|
if ($(this).val() === currentEndTime) {
|
||
|
$(this).prop("selected", "selected");
|
||
|
endTimeSelected = true;
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (!endTimeSelected) {
|
||
|
//automatically select an end date 2 slots away.
|
||
|
$endTimeField.find("option:eq(1)").prop("selected", "selected");
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
|
||
|
var $about = $("#about");
|
||
|
|
||
|
$("#about_button").click(function() {
|
||
|
$about.dialog({
|
||
|
title: "About this calendar demo",
|
||
|
width: 600,
|
||
|
close: function() {
|
||
|
$about.dialog("destroy");
|
||
|
$about.hide();
|
||
|
},
|
||
|
buttons: {
|
||
|
close : function() {
|
||
|
$about.dialog("close");
|
||
|
}
|
||
|
}
|
||
|
}).show();
|
||
|
});
|
||
|
|
||
|
|
||
|
});
|