0
@@ -32,20 +32,23 @@ DCalendar.core = Class.create({
0
initialize: function(options) {
0
this.options = Object.extend(this.options, options || {});
0
- this.today = Date.now();
0
- this.year = this.today.year();
0
- this.month = this.today.month();
0
- this.day = this.today.day();
0
+ this.curr_day = Date.now();
0
+ this.year = this.curr_day.year();
0
+ this.month = this.curr_day.month();
0
+ this.day = this.curr_day.day();
0
var _wrapper = this.options.wrapper ? this.options.wrapper : document;
0
var divs = _wrapper.getElementsByTagName('div');
0
$A(divs).each(function(div) {
0
if (div.getAttribute('jpc') == 'dcalendar') {
0
- div.set
('DCID', div.get('DCID') || DCalendar.DCID++);
0
+ div.set
Attribute('DCID', div.get('DCID') || DCalendar.DCID++);
0
div.id = 'dcid_' + div.get('DCID');
0
+ this.selected_cache[div.id] = {};
0
this.containers.push(div);
0
@@ -59,6 +62,20 @@ DCalendar.core = Class.create({
0
+ change_to_date: function(date) {
0
+ this.fireEvent('onMonthChange');
0
+ this.year = this.curr_day.year();
0
+ this.month = this.curr_day.month();
0
+ this.day = this.curr_day.day();
0
+ this.refresh_selected();
0
+ set_default: function(d) {
0
before_create: function() {
0
this.fireEvent('beforeCreate');
0
@@ -66,43 +83,133 @@ DCalendar.core = Class.create({
0
var _days = this.get_month_days(this.month-1);
0
- var _html = '<table class="dcalendar" border="0" cellspacing="1" cellpadding="4"><tbody><tr class="dcal-title"><td colspan="
' + _days + '">' + this.today.strftime('%Y年%m月') + '</td></tr><tr class="dcal-days" id="' + this.defaultc.id + '_days">';
0
+ var _html = '<table class="dcalendar" border="0" cellspacing="1" cellpadding="4"><tbody><tr class="dcal-title"><td colspan="
3"><a href="#" id="' + this.defaultc.id + '_prev">上一月</a></td><td colspan="' + (_days-6) + '">' + this.curr_day.strftime('%Y年%m月') + '</td><td colspan="3"><a href="#" id="' + this.defaultc.id + '_next">下一月</a></td></tr><tr class="dcal-days" id="' + this.defaultc.id + '_days">';
0
_days.times(function(i) {
0
- _html += '<td>' + (i + 1) + '</td>';
0
- _html += '</tr></tbody></table>';
0
+ _html += '<td id="' + this.defaultc.id + '_days_' + (i + 1) + '">' + (i + 1) + '</td>';
0
+ _html += '</tr></tbody></table><div id="' + this.defaultc.id + '_selected" class="dcal-selected"></div>';
0
this.defaultc.innerHTML = _html;
0
- var
days_line = $(this.defaultc.id + '_days');
0
+ var
_dcal = this, days_line = $(this.defaultc.id + '_days'), prev = $(this.defaultc.id + '_prev'), next = $(this.defaultc.id + '_next');
0
this.on_days_line = false;
0
this.onmouse_start = 0;
0
- var _dcal = this, _tds = days_line.getElementsByTagName('td');
0
+ prev.observe('click', function(e) {
0
+ _dcal.set_default($(this.id.split('_').slice(0, 2).join('_')));
0
+ _dcal.change_to_date(_dcal.curr_day.after('Month', -1));
0
+ next.observe('click', function(e) {
0
+ _dcal.set_default($(this.id.split('_').slice(0, 2).join('_')));
0
+ _dcal.change_to_date(_dcal.curr_day.after('Month', 1));
0
+ var _tds = days_line.getElementsByTagName('td');
0
$A(_tds).each(function(td) {
0
- td.observe('click', function(e) {
0
+ $(td).observe('click', function(e) {
0
+ var defaultc = $(this.id.split('_').slice(0, 2).join('_'));
0
+ _dcal.defaultc = defaultc;
0
this.className = this.className == 'selected' ? '' : 'selected';
0
- _dcal.refresh_selected(this.parentNode.parentNode.parentNode.parentNode);
0
+ _dcal.refresh_selected();
0
+ days_line.observe('mousedown', function(e) {
0
+ var target = e.target;
0
+ _dcal.on_days_line = true;
0
+ if (target.get('tag') == 'td') {
0
+ _dcal.defaultc = $(target.id.split('_').slice(0, 2).join('_'));
0
+ target.className = target.className == 'selected' ? '' : 'selected';
0
+ _dcal.onmouse_start = parseInt(target.innerHTML);
0
+ days_line.observe('mouseup', function(e) {
0
+ var target = e.target;
0
+ _dcal.on_days_line = false;
0
+ if (target.get('tag') == 'td') {
0
+ target.className = target.className == 'selected' ? '' : 'selected';
0
+ var _end = parseInt(target.innerHTML);
0
+ if (_end < _dcal.onmouse_start) {
0
+ _dcal.onmouse_end = _dcal.onmouse_start;
0
+ _dcal.onmouse_start = _end;
0
+ _dcal.onmouse_end = _end;
0
+ for (var i = _dcal.onmouse_start+1; i <= _dcal.onmouse_end-1; i++) {
0
+ var _td = $(_dcal.defaultc.id + '_days_' + i);
0
+ _td.className = _td.className == 'selected' ? '' : 'selected';
0
+ _dcal.refresh_selected();
0
refresh_selected: function(container) {
0
+ container = container || this.defaultc;
0
+ this.format_cache(this.selected_cache[container.id][this.year + '-' + this.month]);
0
+ set_cache: function(container) {
0
+ container = container || this.defaultc;
0
+ var days_line = $(this.defaultc.id + '_days'), _tds = days_line.getElementsByTagName('td'), _selected = '';
0
+ $A(_tds).each(function(td) {
0
+ _selected += td.className == 'selected' ? '1' : '0';
0
+ this.selected_cache[container.id][this.year + '-' + this.month] = _selected;
0
+ format_cache: function(cache) {
0
+ if (!$defined(cache)) return;
0
+ var _start = '', _end = '', _days = cache.length, _sel_wrapper = $i(this.defaultc.id + '_selected');
0
+ _sel_wrapper.innerHTML = '';
0
+ (_days).times(function(i) {
0
+ if (cache.charAt(i) == '1') {
0
+ $i(this.defaultc.id + '_days_' + (i + 1)).className = 'selected';
0
+ _start = this.year + '-' + this.month.toPaddedString(2) + '-' + (i + 1).toPaddedString(2);
0
+ _end = this.year + '-' + this.month.toPaddedString(2) + '-' + (i + 1).toPaddedString(2);
0
+ if (i == (_days - 1)) {
0
+ if (_start != '') _sel_wrapper.appendChild(this.selected_item(_start, _end));
0
+ _end = this.year + '-' + this.month.toPaddedString(2) + '-' + (i).toPaddedString(2)
0
+ if (_start != '') _sel_wrapper.appendChild(this.selected_item(_start, _end));
0
+ selected_item: function(start, end) {
0
+ var _child = document.createElement('li');
0
+ _child.innerHTML = start + (end == '' || end == start ? '' : ' ~ ' + end);
0
get_month_days: function(month) {
0
var _days = this.days_of_month[month];
0
- if (month==1 && (
year%4==0 && year%100!=0 || year%400==0)) _days++;
0
+ if (month==1 && (
this.year%4==0 && this.year%100!=0 || this.year%400==0)) _days++;
0
+document.onselectstart= function(event) {return false};
0
document.observe('dom:ready', function() {
0
var dcal = new DCalendar.core({wrapper: $('main')});
Comments
No one has commented yet.