| @@ -0,0 +1,194 @@ |
| @@ -0,0 +1,194 @@ |
| |
1
| +/** |
| |
2
| + * @license e-Calendar v0.9.3 |
| |
3
| + * (c) 2014-2016 - Jhonis de Souza |
| |
4
| + * License: GNU |
| |
5
| + */ |
| |
6
| + |
| |
7
| +(function ($) { |
| |
8
| + |
| |
9
| + var eCalendar = function (options, object) { |
| |
10
| + // Initializing global variables |
| |
11
| + var adDay = new Date().getDate(); |
| |
12
| + var adMonth = new Date().getMonth(); |
| |
13
| + var adYear = new Date().getFullYear(); |
| |
14
| + var dDay = adDay; |
| |
15
| + var dMonth = adMonth; |
| |
16
| + var dYear = adYear; |
| |
17
| + var instance = object; |
| |
18
| + |
| |
19
| + var settings = $.extend({}, $.fn.eCalendar.defaults, options); |
| |
20
| + |
| |
21
| + function lpad(value, length, pad) { |
| |
22
| + if (typeof pad == 'undefined') { |
| |
23
| + pad = '0'; |
| |
24
| + } |
| |
25
| + var p; |
| |
26
| + for (var i = 0; i < length; i++) { |
| |
27
| + p += pad; |
| |
28
| + } |
| |
29
| + return (p + value).slice(-length); |
| |
30
| + } |
| |
31
| + |
| |
32
| + var mouseOver = function () { |
| |
33
| + $(this).addClass('c-nav-btn-over'); |
| |
34
| + }; |
| |
35
| + var mouseLeave = function () { |
| |
36
| + $(this).removeClass('c-nav-btn-over'); |
| |
37
| + }; |
| |
38
| + var mouseOverEvent = function () { |
| |
39
| + $(this).addClass('c-event-over'); |
| |
40
| + var d = $(this).attr('data-event-day'); |
| |
41
| + $('div.c-event-item[data-event-day="' + d + '"]').addClass('c-event-over'); |
| |
42
| + }; |
| |
43
| + var mouseLeaveEvent = function () { |
| |
44
| + $(this).removeClass('c-event-over') |
| |
45
| + var d = $(this).attr('data-event-day'); |
| |
46
| + $('div.c-event-item[data-event-day="' + d + '"]').removeClass('c-event-over'); |
| |
47
| + }; |
| |
48
| + var mouseOverItem = function () { |
| |
49
| + $(this).addClass('c-event-over'); |
| |
50
| + var d = $(this).attr('data-event-day'); |
| |
51
| + $('div.c-event[data-event-day="' + d + '"]').addClass('c-event-over'); |
| |
52
| + }; |
| |
53
| + var mouseLeaveItem = function () { |
| |
54
| + $(this).removeClass('c-event-over') |
| |
55
| + var d = $(this).attr('data-event-day'); |
| |
56
| + $('div.c-event[data-event-day="' + d + '"]').removeClass('c-event-over'); |
| |
57
| + }; |
| |
58
| + var nextMonth = function () { |
| |
59
| + if (dMonth < 11) { |
| |
60
| + dMonth++; |
| |
61
| + } else { |
| |
62
| + dMonth = 0; |
| |
63
| + dYear++; |
| |
64
| + } |
| |
65
| + print(); |
| |
66
| + }; |
| |
67
| + var previousMonth = function () { |
| |
68
| + if (dMonth > 0) { |
| |
69
| + dMonth--; |
| |
70
| + } else { |
| |
71
| + dMonth = 11; |
| |
72
| + dYear--; |
| |
73
| + } |
| |
74
| + print(); |
| |
75
| + }; |
| |
76
| + |
| |
77
| + function loadEvents() { |
| |
78
| + if (typeof settings.url != 'undefined' && settings.url != '') { |
| |
79
| + $.ajax({url: settings.url, |
| |
80
| + async: false, |
| |
81
| + success: function (result) { |
| |
82
| + settings.events = result; |
| |
83
| + } |
| |
84
| + }); |
| |
85
| + } |
| |
86
| + } |
| |
87
| + |
| |
88
| + function print() { |
| |
89
| + loadEvents(); |
| |
90
| + var dWeekDayOfMonthStart = new Date(dYear, dMonth, 1).getDay() - settings.firstDayOfWeek; |
| |
91
| + if (dWeekDayOfMonthStart < 0) { |
| |
92
| + dWeekDayOfMonthStart = 6 - ((dWeekDayOfMonthStart + 1) * -1); |
| |
93
| + } |
| |
94
| + var dLastDayOfMonth = new Date(dYear, dMonth + 1, 0).getDate(); |
| |
95
| + var dLastDayOfPreviousMonth = new Date(dYear, dMonth + 1, 0).getDate() - dWeekDayOfMonthStart + 1; |
| |
96
| + |
| |
97
| + var cBody = $('<div/>').addClass('c-grid'); |
| |
98
| + var cEvents = $('<div/>').addClass('c-event-grid'); |
| |
99
| + var cEventsBody = $('<div/>').addClass('c-event-body'); |
| |
100
| + cEvents.append($('<div/>').addClass('c-event-title c-pad-top').html(settings.eventTitle)); |
| |
101
| + cEvents.append(cEventsBody); |
| |
102
| + var cNext = $('<div/>').addClass('c-next c-grid-title c-pad-top'); |
| |
103
| + var cMonth = $('<div/>').addClass('c-month c-grid-title c-pad-top'); |
| |
104
| + var cPrevious = $('<div/>').addClass('c-previous c-grid-title c-pad-top'); |
| |
105
| + cPrevious.html(settings.textArrows.previous); |
| |
106
| + cMonth.html(settings.months[dMonth] + ' ' + dYear); |
| |
107
| + cNext.html(settings.textArrows.next); |
| |
108
| + |
| |
109
| + cPrevious.on('mouseover', mouseOver).on('mouseleave', mouseLeave).on('click', previousMonth); |
| |
110
| + cNext.on('mouseover', mouseOver).on('mouseleave', mouseLeave).on('click', nextMonth); |
| |
111
| + |
| |
112
| + cBody.append(cPrevious); |
| |
113
| + cBody.append(cMonth); |
| |
114
| + cBody.append(cNext); |
| |
115
| + var dayOfWeek = settings.firstDayOfWeek; |
| |
116
| + for (var i = 0; i < 7; i++) { |
| |
117
| + if (dayOfWeek > 6) { |
| |
118
| + dayOfWeek = 0; |
| |
119
| + } |
| |
120
| + var cWeekDay = $('<div/>').addClass('c-week-day c-pad-top'); |
| |
121
| + cWeekDay.html(settings.weekDays[dayOfWeek]); |
| |
122
| + cBody.append(cWeekDay); |
| |
123
| + dayOfWeek++; |
| |
124
| + } |
| |
125
| + var day = 1; |
| |
126
| + var dayOfNextMonth = 1; |
| |
127
| + for (var i = 0; i < 42; i++) { |
| |
128
| + var cDay = $('<div/>'); |
| |
129
| + if (i < dWeekDayOfMonthStart) { |
| |
130
| + cDay.addClass('c-day-previous-month c-pad-top'); |
| |
131
| + cDay.html(dLastDayOfPreviousMonth++); |
| |
132
| + } else if (day <= dLastDayOfMonth) { |
| |
133
| + cDay.addClass('c-day c-pad-top'); |
| |
134
| + if (day == dDay && adMonth == dMonth && adYear == dYear) { |
| |
135
| + cDay.addClass('c-today'); |
| |
136
| + } |
| |
137
| + for (var j = 0; j < settings.events.length; j++) { |
| |
138
| + var d = settings.events[j].datetime; |
| |
139
| + if (d.getDate() == day && d.getMonth() == dMonth && d.getFullYear() == dYear) { |
| |
140
| + cDay.addClass('c-event').attr('data-event-day', d.getDate()); |
| |
141
| + cDay.on('mouseover', mouseOverEvent).on('mouseleave', mouseLeaveEvent); |
| |
142
| + } |
| |
143
| + } |
| |
144
| + cDay.html(day++); |
| |
145
| + } else { |
| |
146
| + cDay.addClass('c-day-next-month c-pad-top'); |
| |
147
| + cDay.html(dayOfNextMonth++); |
| |
148
| + } |
| |
149
| + cBody.append(cDay); |
| |
150
| + } |
| |
151
| + var eventList = $('<div/>').addClass('c-event-list'); |
| |
152
| + for (var i = 0; i < settings.events.length; i++) { |
| |
153
| + var d = settings.events[i].datetime; |
| |
154
| + if (d.getMonth() == dMonth && d.getFullYear() == dYear) { |
| |
155
| + var date = lpad(d.getDate(), 2) + '/' + lpad(d.getMonth() + 1, 2) + ' ' + lpad(d.getHours(), 2) + ':' + lpad(d.getMinutes(), 2); |
| |
156
| + var item = $('<div/>').addClass('c-event-item'); |
| |
157
| + var title = $('<div/>').addClass('title').html(date + ' ' + settings.events[i].title + '<br/>'); |
| |
158
| + var description = $('<div/>').addClass('description').html(settings.events[i].description + '<br/>'); |
| |
159
| + item.attr('data-event-day', d.getDate()); |
| |
160
| + item.on('mouseover', mouseOverItem).on('mouseleave', mouseLeaveItem); |
| |
161
| + item.append(title).append(description); |
| |
162
| + eventList.append(item); |
| |
163
| + } |
| |
164
| + } |
| |
165
| + $(instance).addClass('calendar'); |
| |
166
| + cEventsBody.append(eventList); |
| |
167
| + $(instance).html(cBody).append(cEvents); |
| |
168
| + } |
| |
169
| + |
| |
170
| + return print(); |
| |
171
| + } |
| |
172
| + |
| |
173
| + $.fn.eCalendar = function (oInit) { |
| |
174
| + return this.each(function () { |
| |
175
| + return eCalendar(oInit, $(this)); |
| |
176
| + }); |
| |
177
| + }; |
| |
178
| + |
| |
179
| + // plugin defaults |
| |
180
| + $.fn.eCalendar.defaults = { |
| |
181
| + weekDays: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'], |
| |
182
| + months: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'], |
| |
183
| + textArrows: {previous: '<', next: '>'}, |
| |
184
| + eventTitle: 'Eventos', |
| |
185
| + url: '', |
| |
186
| + events: [ |
| |
187
| + {title: 'Evento de Abertura', description: 'Abertura das Olimpíadas Rio 2016', datetime: new Date(2016, new Date().getMonth(), 12, 17)}, |
| |
188
| + {title: 'Tênis de Mesa', description: 'BRA x ARG - Semifinal', datetime: new Date(2016, new Date().getMonth(), 23, 16)}, |
| |
189
| + {title: 'Ginástica Olímpica', description: 'Classificatórias de equipes', datetime: new Date(2016, new Date().getMonth(), 31, 16)} |
| |
190
| + ], |
| |
191
| + firstDayOfWeek: 0 |
| |
192
| + }; |
| |
193
| + |
| |
194
| +}(jQuery)); |
0
| \ No newline at end of file |
195
| \ No newline at end of file |