164 lines
5.4 KiB
JavaScript
164 lines
5.4 KiB
JavaScript
/**
|
|
* Copyright (C) 2011 Instructure, Inc.
|
|
*
|
|
* This file is part of Canvas.
|
|
*
|
|
* Canvas is free software: you can redistribute it and/or modify it under
|
|
* the terms of the GNU Affero General Public License as published by the Free
|
|
* Software Foundation, version 3 of the License.
|
|
*
|
|
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
define([
|
|
'i18n!calendars',
|
|
'jquery' /* $ */,
|
|
'jquery.instructure_date_and_time' /* datepicker */,
|
|
'jquery.templateData' /* fillTemplateData */,
|
|
'jqueryui/datepicker' /* /\.datepicker/ */
|
|
], function(I18n, $) {
|
|
|
|
var monthNames = I18n.t('#date.month_names');
|
|
|
|
function makeDate(date) {
|
|
return {
|
|
day: date.getDate(),
|
|
month: date.getMonth(),
|
|
year: date.getFullYear()
|
|
}
|
|
}
|
|
|
|
return {
|
|
changeMonth: function($month, change) {
|
|
var monthData = $month.data('calendar_objects');
|
|
var data = {};
|
|
var current = null;
|
|
if(typeof(change) == "string") {
|
|
var current = $.datepicker.parseDate('mm/dd/yy', change);
|
|
if(current) {
|
|
current.setDate(1);
|
|
}
|
|
}
|
|
if(!current) {
|
|
var month = parseInt($month.find(".month_number").text(), 10);
|
|
var year = parseInt($month.find(".year_number").text(), 10);
|
|
var current = new Date(year, month + change - 1, 1);
|
|
}
|
|
var data = {
|
|
month_name: monthNames[current.getMonth() + 1],
|
|
month_number: current.getMonth() + 1,
|
|
year_number: current.getFullYear()
|
|
};
|
|
$month.fillTemplateData({data: data});
|
|
var date = new Date();
|
|
var today = makeDate(date);
|
|
var firstDayOfMonth = makeDate(current);
|
|
date = current;
|
|
date.setDate(0);
|
|
date.setDate(date.getDate() - date.getDay());
|
|
var firstDayOfSquare = makeDate(date);
|
|
var lastDayOfPreviousMonth = null;
|
|
if(firstDayOfMonth.day != firstDayOfSquare.day) {
|
|
date.setDate(1);
|
|
date.setMonth(date.getMonth() + 1);
|
|
date.setDate(0);
|
|
lastDayOfPreviousMonth = {
|
|
day: date.getDate(),
|
|
month: firstDayOfSquare.month,
|
|
year: firstDayOfSquare.year
|
|
}
|
|
date.setDate(1);
|
|
date.setMonth(date.getMonth() + 1);
|
|
}
|
|
date.setMonth(current.getMonth() + 1);
|
|
date.setDate(0);
|
|
var lastDayOfMonth = {
|
|
day: date.getDate(),
|
|
month: firstDayOfMonth.month,
|
|
year: firstDayOfMonth.yearh
|
|
}
|
|
date.setDate(date.getDate() + 1);
|
|
date.setDate(date.getDate() + (6 - date.getDay()));
|
|
date.setDate(date.getDate() + 7);
|
|
var lastDayOfSquare = makeDate(date);
|
|
var $days = $month.data("days");
|
|
if(!$days) {
|
|
$days = $month.find(".calendar_day_holder");
|
|
$month.data("days", $days);
|
|
}
|
|
if($month.hasClass('mini_month')) {
|
|
$days = $month.find(".day");
|
|
}
|
|
$month.find(".calendar_event").remove();
|
|
var idx = 0;
|
|
var day = firstDayOfSquare.day;
|
|
var month = firstDayOfSquare.month;
|
|
var year = firstDayOfSquare.year;
|
|
while(day <= lastDayOfSquare.day || month != lastDayOfSquare.month) {
|
|
var $day = $days.eq(idx);
|
|
if($day.length > 0) {
|
|
var classes = $day.attr('class').split(" ");
|
|
var class_names = [];
|
|
for(var i = 0; i < classes.length; i++) {
|
|
if(classes[i].indexOf('date_') == 0) {
|
|
} else {
|
|
class_names.push(classes[i]);
|
|
}
|
|
}
|
|
$day.attr('class', class_names.join(" "));
|
|
}
|
|
$day.show().addClass('visible').parents("tr").show().addClass('visible');
|
|
var data = {
|
|
day_number: day
|
|
}
|
|
var month_number = month < 9 ? "0" + (month + 1) : (month + 1);
|
|
var day_number = day < 10 ? "0" + day : day;
|
|
id = "day_" + year + "_" + month_number + "_" + day_number
|
|
if($month.hasClass('mini_month')) {
|
|
id = "mini_" + id;
|
|
}
|
|
$day.attr('id', id)
|
|
.find(".day_number").text(day).attr('title', month_number + "/" + day_number + "/" + year)
|
|
.addClass("date_" + month_number + "_" + day_number + "_" + year);
|
|
var $div = $day.children('div');
|
|
if($month.hasClass('mini_month')) {
|
|
$div = $day;
|
|
}
|
|
$div.removeClass('current_month other_month today');
|
|
if(month == firstDayOfMonth.month) {
|
|
$div.addClass('current_month');
|
|
} else {
|
|
$div.addClass('other_month');
|
|
}
|
|
if(month == today.month && day == today.day && year == today.year) {
|
|
$div.addClass('today');
|
|
}
|
|
day++;
|
|
idx++;
|
|
if((lastDayOfPreviousMonth && day > lastDayOfPreviousMonth.day && month == lastDayOfPreviousMonth.month)
|
|
|| (day > lastDayOfMonth.day && month == lastDayOfMonth.month)) {
|
|
month = month + 1;
|
|
if(month >= 12) {
|
|
month -= 12;
|
|
year++;
|
|
}
|
|
day = 1;
|
|
}
|
|
}
|
|
while(idx < $days.length) {
|
|
var $day = $days.eq(idx);
|
|
$day.parents("tr").hide().removeClass('visible');
|
|
$day.hide().removeClass('visible');
|
|
idx++;
|
|
}
|
|
if(!$month.hasClass('mini_month')) {
|
|
}
|
|
}
|
|
};
|
|
});
|