153 lines
4.3 KiB
JavaScript
153 lines
4.3 KiB
JavaScript
Kanboard.Calendar = (function() {
|
|
|
|
var filter_storage_key = "";
|
|
|
|
// Save the new due date for a moved task
|
|
function move_calendar_event(calendar_event)
|
|
{
|
|
var url = $("#calendar").data("save-url") || $("#user-calendar").data("save-url");
|
|
|
|
$.ajax({
|
|
cache: false,
|
|
url: url,
|
|
contentType: "application/json",
|
|
type: "POST",
|
|
processData: false,
|
|
data: JSON.stringify({
|
|
"task_id": calendar_event.id,
|
|
"date_due": calendar_event.start.format()
|
|
})
|
|
});
|
|
}
|
|
|
|
// Show the user calendar
|
|
function show_user_calendar()
|
|
{
|
|
var calendar = $("#user-calendar");
|
|
|
|
calendar.fullCalendar({
|
|
lang: $("body").data("js-lang"),
|
|
editable: true,
|
|
eventLimit: true,
|
|
height: Kanboard.Exists("dashboard-calendar") ? 500 : "auto",
|
|
defaultView: "agendaWeek",
|
|
header: {
|
|
left: 'prev,next today',
|
|
center: 'title',
|
|
right: 'month,agendaWeek,agendaDay'
|
|
},
|
|
viewRender: refresh_user_calendar,
|
|
eventDrop: move_calendar_event
|
|
});
|
|
}
|
|
|
|
// Refresh the calendar events
|
|
function refresh_user_calendar()
|
|
{
|
|
var calendar = $("#user-calendar");
|
|
var url = calendar.data("check-url");
|
|
var params = {
|
|
"start": calendar.fullCalendar('getView').start.format(),
|
|
"end": calendar.fullCalendar('getView').end.format(),
|
|
"user_id": calendar.data("user-id")
|
|
};
|
|
|
|
for (var key in params) {
|
|
url += "&" + key + "=" + params[key];
|
|
}
|
|
|
|
$.getJSON(url, function(events) {
|
|
calendar.fullCalendar('removeEvents');
|
|
calendar.fullCalendar('addEventSource', events);
|
|
calendar.fullCalendar('rerenderEvents');
|
|
});
|
|
}
|
|
|
|
// Show the project calendar
|
|
function show_project_calendar()
|
|
{
|
|
var calendar = $("#calendar");
|
|
|
|
calendar.fullCalendar({
|
|
lang: $("body").data("js-lang"),
|
|
editable: true,
|
|
eventLimit: true,
|
|
defaultView: "month",
|
|
header: {
|
|
left: 'prev,next today',
|
|
center: 'title',
|
|
right: 'month,agendaWeek,agendaDay'
|
|
},
|
|
viewRender: load_project_filters,
|
|
eventDrop: move_calendar_event
|
|
});
|
|
}
|
|
|
|
// Refresh the calendar events
|
|
function refresh_project_calendar(filters)
|
|
{
|
|
var calendar = $("#calendar");
|
|
var url = calendar.data("check-url");
|
|
var params = {
|
|
"start": calendar.fullCalendar('getView').start.format(),
|
|
"end": calendar.fullCalendar('getView').end.format()
|
|
};
|
|
|
|
jQuery.extend(params, filters);
|
|
|
|
for (var key in params) {
|
|
url += "&" + key + "=" + params[key];
|
|
}
|
|
|
|
$.getJSON(url, function(events) {
|
|
calendar.fullCalendar('removeEvents');
|
|
calendar.fullCalendar('addEventSource', events);
|
|
calendar.fullCalendar('rerenderEvents');
|
|
});
|
|
}
|
|
|
|
// Restore saved filters
|
|
function load_project_filters()
|
|
{
|
|
var filters = Kanboard.GetStorageItem(filter_storage_key);
|
|
|
|
if (filters !== "") {
|
|
filters = JSON.parse(filters);
|
|
|
|
for (var filter in filters) {
|
|
$("select[name=" + filter + "]").val(filters[filter]);
|
|
}
|
|
}
|
|
|
|
refresh_project_calendar(filters || {});
|
|
|
|
$('.calendar-filter').change(apply_project_filters);
|
|
}
|
|
|
|
// Apply filters on change
|
|
function apply_project_filters()
|
|
{
|
|
var filters = {};
|
|
|
|
$('.calendar-filter').each(function() {
|
|
filters[$(this).attr("name")] = $(this).val();
|
|
});
|
|
|
|
Kanboard.SetStorageItem(filter_storage_key, JSON.stringify(filters));
|
|
refresh_project_calendar(filters);
|
|
}
|
|
|
|
jQuery(document).ready(function() {
|
|
|
|
if (Kanboard.Exists("calendar")) {
|
|
filter_storage_key = "calendar_filters_" + $("#calendar").data("project-id");
|
|
show_project_calendar();
|
|
load_project_filters();
|
|
}
|
|
else if (Kanboard.Exists("user-calendar")) {
|
|
show_user_calendar();
|
|
}
|
|
});
|
|
|
|
})();
|