From 4d5f8d4ae07826aa6e118e2c6b2ef81ae00d57ff Mon Sep 17 00:00:00 2001 From: Keith Wood Date: Wed, 1 Apr 2009 10:11:35 +0000 Subject: [PATCH] Datepicker: fixed #4301 - option dateFormat getter does not return same value as setter --- tests/unit/datepicker/datepicker_options.js | 11 ++++++++ ui/ui.datepicker.js | 29 ++++++++++++--------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index b03040913..412519a4b 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -18,6 +18,7 @@ test('setDefaults', function() { test('option', function() { var inp = init('#inp'); var inst = $.data(inp[0], PROP_NAME); + // Set option equals(inst.settings.showOn, null, 'Initial setting showOn'); equals($.datepicker._get(inst, 'showOn'), 'focus', 'Initial instance showOn'); equals($.datepicker._defaults.showOn, 'focus', 'Initial default showOn'); @@ -33,6 +34,16 @@ test('option', function() { equals(inst.settings.showOn, null, 'Clear setting showOn'); equals($.datepicker._get(inst, 'showOn'), 'focus', 'Restore instance showOn'); equals($.datepicker._defaults.showOn, 'focus', 'Retain default showOn'); + // Get option + inp = init('#inp'); + equals(inp.datepicker('option', 'showOn'), 'focus', 'Initial setting showOn'); + inp.datepicker('option', 'showOn', 'button'); + equals(inp.datepicker('option', 'showOn'), 'button', 'Change instance showOn'); + inp.datepicker('option', 'showOn', undefined); + equals(inp.datepicker('option', 'showOn'), 'focus', 'Reset instance showOn'); + same(inp.datepicker('option', 'all'), {duration: ''}, 'Get instance settings'); + same(inp.datepicker('option', 'defaults'), $.datepicker._defaults, + 'Get default settings'); }); test('change', function() { diff --git a/ui/ui.datepicker.js b/ui/ui.datepicker.js index 947efc869..18b1aabf5 100644 --- a/ui/ui.datepicker.js +++ b/ui/ui.datepicker.js @@ -364,31 +364,33 @@ $.extend(Datepicker.prototype, { } }, - /* Update the settings for a date picker attached to an input field or division. + /* Update or retrieve the settings for a date picker attached to an input field or division. @param target element - the target input field or division or span @param name object - the new settings to update or - string - the name of the setting to change or - @param value any - the new value for the setting (omit if above is an object) */ + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } var settings = name || {}; if (typeof name == 'string') { settings = {}; settings[name] = value; } - var inst = this._getInst(target); if (inst) { if (this._curInst == inst) { this._hideDatepicker(null); } + var date = this._getDateDatepicker(target); extendRemove(inst.settings, settings); - var date = new Date(); - extendRemove(inst, {rangeStart: null, // start of range - endDay: null, endMonth: null, endYear: null, // end of range - selectedDay: date.getDate(), selectedMonth: date.getMonth(), - selectedYear: date.getFullYear(), // starting point - currentDay: date.getDate(), currentMonth: date.getMonth(), - currentYear: date.getFullYear(), // current selection - drawMonth: date.getMonth(), drawYear: date.getFullYear()}); // month being drawn + this._setDateDatepicker(target, date); this._updateDatepicker(inst); } }, @@ -1611,6 +1613,9 @@ $.fn.datepicker = function(options){ if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate')) return $.datepicker['_' + options + 'Datepicker']. apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); return this.each(function() { typeof options == 'string' ? $.datepicker['_' + options + 'Datepicker']. -- 2.39.5