]> source.dussan.org Git - jquery-ui.git/commitdiff
Datepicker: Greedy matching in month name. Fixed #7062 - $.datepicker.parseDate does...
authorKato Kazuyoshi <kato.kazuyoshi@gmail.com>
Wed, 4 May 2011 20:06:27 +0000 (05:06 +0900)
committerScott González <scott.gonzalez@gmail.com>
Wed, 4 May 2011 21:00:40 +0000 (17:00 -0400)
(cherry picked from commit a891e81e06c7ce491ae9058aea2fa7fbd51eddb6)

tests/unit/datepicker/datepicker.html
tests/unit/datepicker/datepicker_options.js
ui/jquery.ui.datepicker.js

index d3c6f06761bdd05af0ab8574e9ce6a40fe98a262..db1f0a55fc89278aa7e9845ce47e5cbb85ac7e69 100644 (file)
@@ -12,6 +12,7 @@
        <script type="text/javascript" src="../../../ui/jquery.ui.datepicker.js"></script>
        <script type="text/javascript" src="../../../ui/i18n/jquery.ui.datepicker-fr.js"></script>
        <script type="text/javascript" src="../../../ui/i18n/jquery.ui.datepicker-he.js"></script>
+       <script type="text/javascript" src="../../../ui/i18n/jquery.ui.datepicker-zh-CN.js"></script>
 
        <link rel="stylesheet" href="../../../external/qunit.css" type="text/css"/>
        <script type="text/javascript" src="../../../external/qunit.js"></script>
index 33b07d6949d5d5578d67ea96f1a5a269135e44c7..b14c87b8bcb70acdb6cfdf53cc48fda44df7e5f6 100644 (file)
@@ -827,6 +827,10 @@ test('parseDate', function() {
        equalsDate($.datepicker.parseDate('\'jour\' d \'de\' MM (\'\'DD\'\'), yy',
                'jour 9 de Avril (\'Lundi\'), 2001', settings), new Date(2001, 4 - 1, 9),
                'Parse date \'jour\' d \'de\' MM (\'\'DD\'\'), yy with settings');
+
+       var zh = $.datepicker.regional['zh-CN'];
+       equalsDate($.datepicker.parseDate('yy M d', '2011 十一 22', zh),
+               new Date(2011, 11 - 1, 22), 'Parse date yy M d with zh-CN');
 });
 
 test('parseDateErrors', function() {
index d6419e2e36b9debccddb16ddcd57d3c98ba60aec..fe24d695a7fbd230904dab4b009a60feb5ed102f 100644 (file)
@@ -992,14 +992,24 @@ $.extend(Datepicker.prototype, {
                };
                // Extract a name from the string value and convert to an index
                var getName = function(match, shortNames, longNames) {
-                       var names = (lookAhead(match) ? longNames : shortNames);
-                       for (var i = 0; i < names.length; i++) {
-                               if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) {
-                                       iValue += names[i].length;
-                                       return i + 1;
+                       var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+                               return [ [k, v] ];
+                       }).sort(function (a, b) {
+                               return -(a[1].length - b[1].length);
+                       });
+                       var index = -1;
+                       $.each(names, function (i, pair) {
+                               var name = pair[1];
+                               if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
+                                       index = pair[0];
+                                       iValue += name.length;
+                                       return false;
                                }
-                       }
-                       throw 'Unknown name at position ' + iValue;
+                       });
+                       if (index != -1)
+                               return index + 1;
+                       else
+                               throw 'Unknown name at position ' + iValue;
                };
                // Confirm that a literal character matches the string value
                var checkLiteral = function() {