23 |
23 |
24 // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions |
24 // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions |
25 var CalendarNamespace = { |
25 var CalendarNamespace = { |
26 monthsOfYear: gettext('January February March April May June July August September October November December').split(' '), |
26 monthsOfYear: gettext('January February March April May June July August September October November December').split(' '), |
27 daysOfWeek: gettext('S M T W T F S').split(' '), |
27 daysOfWeek: gettext('S M T W T F S').split(' '), |
|
28 firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), |
28 isLeapYear: function(year) { |
29 isLeapYear: function(year) { |
29 return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)); |
30 return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)); |
30 }, |
31 }, |
31 getDaysInMonth: function(month,year) { |
32 getDaysInMonth: function(month,year) { |
32 var days; |
33 var days; |
43 days = 28; |
44 days = 28; |
44 } |
45 } |
45 return days; |
46 return days; |
46 }, |
47 }, |
47 draw: function(month, year, div_id, callback) { // month = 1-12, year = 1-9999 |
48 draw: function(month, year, div_id, callback) { // month = 1-12, year = 1-9999 |
|
49 var today = new Date(); |
|
50 var todayDay = today.getDate(); |
|
51 var todayMonth = today.getMonth()+1; |
|
52 var todayYear = today.getFullYear(); |
|
53 var todayClass = ''; |
|
54 |
48 month = parseInt(month); |
55 month = parseInt(month); |
49 year = parseInt(year); |
56 year = parseInt(year); |
50 var calDiv = document.getElementById(div_id); |
57 var calDiv = document.getElementById(div_id); |
51 removeChildren(calDiv); |
58 removeChildren(calDiv); |
52 var calTable = document.createElement('table'); |
59 var calTable = document.createElement('table'); |
54 var tableBody = quickElement('tbody', calTable); |
61 var tableBody = quickElement('tbody', calTable); |
55 |
62 |
56 // Draw days-of-week header |
63 // Draw days-of-week header |
57 var tableRow = quickElement('tr', tableBody); |
64 var tableRow = quickElement('tr', tableBody); |
58 for (var i = 0; i < 7; i++) { |
65 for (var i = 0; i < 7; i++) { |
59 quickElement('th', tableRow, CalendarNamespace.daysOfWeek[i]); |
66 quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); |
60 } |
67 } |
61 |
68 |
62 var startingPos = new Date(year, month-1, 1).getDay(); |
69 var startingPos = new Date(year, month-1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); |
63 var days = CalendarNamespace.getDaysInMonth(month, year); |
70 var days = CalendarNamespace.getDaysInMonth(month, year); |
64 |
71 |
65 // Draw blanks before first of month |
72 // Draw blanks before first of month |
66 tableRow = quickElement('tr', tableBody); |
73 tableRow = quickElement('tr', tableBody); |
67 for (var i = 0; i < startingPos; i++) { |
74 for (var i = 0; i < startingPos; i++) { |
73 var currentDay = 1; |
80 var currentDay = 1; |
74 for (var i = startingPos; currentDay <= days; i++) { |
81 for (var i = startingPos; currentDay <= days; i++) { |
75 if (i%7 == 0 && currentDay != 1) { |
82 if (i%7 == 0 && currentDay != 1) { |
76 tableRow = quickElement('tr', tableBody); |
83 tableRow = quickElement('tr', tableBody); |
77 } |
84 } |
78 var cell = quickElement('td', tableRow, ''); |
85 if ((currentDay==todayDay) && (month==todayMonth) && (year==todayYear)) { |
|
86 todayClass='today'; |
|
87 } else { |
|
88 todayClass=''; |
|
89 } |
|
90 var cell = quickElement('td', tableRow, '', 'class', todayClass); |
|
91 |
79 quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '('+year+','+month+','+currentDay+'));'); |
92 quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '('+year+','+month+','+currentDay+'));'); |
80 currentDay++; |
93 currentDay++; |
81 } |
94 } |
82 |
95 |
83 // Draw blanks after end of month (optional, but makes for valid code) |
96 // Draw blanks after end of month (optional, but makes for valid code) |