From ccece375c025958ce9bf733b49afcf16c32da80a Mon Sep 17 00:00:00 2001 From: rlx <0x0073@0x2620.org> Date: Mon, 10 Oct 2011 17:00:01 +0000 Subject: [PATCH] fix a corner case in Ox.formatDateRangeDuration() --- source/Ox.UI/js/Calendar/Ox.Calendar.js | 6 +++--- source/Ox.UI/js/Calendar/Ox.ListCalendar.js | 15 ++++++++------- source/Ox.UI/js/Form/Ox.Select.js | 3 +++ source/Ox/js/Format.js | 16 ++++++++++++++-- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/source/Ox.UI/js/Calendar/Ox.Calendar.js b/source/Ox.UI/js/Calendar/Ox.Calendar.js index 5afb8db4..3fee5e62 100644 --- a/source/Ox.UI/js/Calendar/Ox.Calendar.js +++ b/source/Ox.UI/js/Calendar/Ox.Calendar.js @@ -46,9 +46,6 @@ Ox.Calendar = function(options, self) { //height: self.options.height + 'px' }) .bindEvent({ - anyclick: function(e) { - !$(e.target).is('.OxInput') && that.gainFocus(); - }, key_0: function() { panToSelected(); }, @@ -81,6 +78,9 @@ Ox.Calendar = function(options, self) { }, key_up: function() { scrollBy(-1); + }, + mousedown: function(e) { + !$(e.target).is('.OxInput') && that.gainFocus(); } }); diff --git a/source/Ox.UI/js/Calendar/Ox.ListCalendar.js b/source/Ox.UI/js/Calendar/Ox.ListCalendar.js index 99c0a1e5..dcb3a3f1 100644 --- a/source/Ox.UI/js/Calendar/Ox.ListCalendar.js +++ b/source/Ox.UI/js/Calendar/Ox.ListCalendar.js @@ -490,10 +490,14 @@ Ox.ListCalendar = function(options, self) { index = Ox.getPositionById(self.options.events, id), data = {id: id}; self.options.events[index][key] = value; - //Ox.print('EQUAL?', Ox.isEqual(self.$list.options('items'), self.options.events)); - //alert(self.options.events[index][key] + '\n' + self.$list.options('items')[index][key]); data[key] = value; - if (['start', 'end'].indexOf(key) > -1) { + self.$list.options({items: Ox.clone(self.options.events, true)}); + if (['name', 'type', 'start', 'end'].indexOf(key) > -1) { + self.$calendar.editEvent(id, key, value); + } + if (key == 'name') { + self.$eventName.options({title: value}); + } else if (['start', 'end'].indexOf(key) > -1) { self.$durationInput.options({ value: Ox.formatDateRangeDuration( self.$startInput.options('value'), @@ -503,10 +507,7 @@ Ox.ListCalendar = function(options, self) { ) }); } - self.$list.options({items: Ox.clone(self.options.events, true)}); - if (['name', 'type', 'start', 'end'].indexOf(key) > -1) { - self.$calendar.editEvent(id, key, value); - } + self.options.editEvent(data, function(result) { // ... }); diff --git a/source/Ox.UI/js/Form/Ox.Select.js b/source/Ox.UI/js/Form/Ox.Select.js index cc2dd4b9..c115aad6 100644 --- a/source/Ox.UI/js/Form/Ox.Select.js +++ b/source/Ox.UI/js/Form/Ox.Select.js @@ -177,6 +177,7 @@ Ox.Select = function(options, self) { self.setOption = function(key, value) { if (key == 'value') { + Ox.print('SETTING VALUE OPTION', value) that.selectItem(value); } }; @@ -223,6 +224,8 @@ Ox.Select = function(options, self) { //Ox.print('selected::', that.selected()) return that.selected()[0].id; } else { + that.selectItem(arguments[0]); + return that; /* Ox.print('ELSE'); that.selectItem(arguments[0]); diff --git a/source/Ox/js/Format.js b/source/Ox/js/Format.js index 839e59d8..ca0fef5a 100644 --- a/source/Ox/js/Format.js +++ b/source/Ox/js/Format.js @@ -382,19 +382,31 @@ Ox.formatDateRangeDuration = function(start, end, utc) { Ox.forEach(keys, function(key, i) { while (true) { if (key == 'month') { + // set the day to the same day in the next month, + // or to its last day if the next month is shorter + var day = Ox.getDate(date, utc); Ox.setDate(date, Math.min( - Ox.getDate(date, utc), + day, Ox.getDaysInMonth( Ox.getFullYear(date, utc), - Ox.getMonth(date, utc) + 2 + Ox.getMonth(date, utc) + 2, + utc ) ), utc); } + // advance the date by one unit Ox['set' + parts[i]](date, Ox['get' + parts[i]](date, utc) + 1, utc); + Ox.print(key, '.....', date) if (date <= dates[1]) { + // still within the range, add one unit values[i] = (values[i] || 0) + 1; } else { + // outside the range, rewind the date by one unit Ox['set' + parts[i]](date, Ox['get' + parts[i]](date, utc) - 1, utc); + if (key == 'month') { + // and revert to original day + Ox.setDate(date, day, utc); + } break; } }