Support stand-alone month names in calendar picker
authortkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Nov 2012 09:47:46 +0000 (09:47 +0000)
committertkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Nov 2012 09:47:46 +0000 (09:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=102196

Reviewed by Kentaro Hara.

.:

* ManualTests/forms/calendar-picker.html:
- Remove monthLabels arguments.
- Add a mock implementation of pagePopupController.formatMonth.

Source/WebCore:

We have showed non stand-alone month names in any locales. However
we should show stand-alone month names in some locales such as
Russian.

This patch introduce PagePopupController::formatMonth. It is
exposed to page-popups, and format year-month pairs in the same
way as input[type=month].

No new tests. Affects platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru.html.

* Resources/pagepopups/calendarPicker.js:
(Month.prototype.toLocaleString):
Calls pagePopupController.formatMonth except Japanese locale.
(handleArgumentsTimeout):
Remove unnecessary default monthLabels.
* page/PagePopupController.cpp:
(WebCore::PagePopupController::formatMonth): Added.
* page/PagePopupController.h:
(PagePopupController): Declare formatMonth.
* page/PagePopupController.idl: Add formatMonth.

Source/WebKit/chromium:

* src/DateTimeChooserImpl.cpp:
(WebKit::DateTimeChooserImpl::writeDocument):
We don't need to pass monthLabels any more.

LayoutTests:

Update a pixel result for Russian calendar picker. Now it contains
a stand-alone month name.

* platform/chromium-mac/platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@134753 268f45cc-cd09-0410-ab3c-d52691b4dbfc

ChangeLog
LayoutTests/ChangeLog
LayoutTests/platform/chromium-mac/platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png
ManualTests/forms/calendar-picker.html
Source/WebCore/ChangeLog
Source/WebCore/Resources/pagepopups/calendarPicker.js
Source/WebCore/page/PagePopupController.cpp
Source/WebCore/page/PagePopupController.h
Source/WebCore/page/PagePopupController.idl
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/DateTimeChooserImpl.cpp

index 74f97bd..4e3f826 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-11-15  Kent Tamura  <tkent@chromium.org>
+
+        Support stand-alone month names in calendar picker
+        https://bugs.webkit.org/show_bug.cgi?id=102196
+
+        Reviewed by Kentaro Hara.
+
+        * ManualTests/forms/calendar-picker.html:
+        - Remove monthLabels arguments.
+        - Add a mock implementation of pagePopupController.formatMonth.
+
 2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r134741.
index 8589df6..cd8bc0b 100644 (file)
@@ -1,3 +1,15 @@
+2012-11-15  Kent Tamura  <tkent@chromium.org>
+
+        Support stand-alone month names in calendar picker
+        https://bugs.webkit.org/show_bug.cgi?id=102196
+
+        Reviewed by Kentaro Hara.
+
+        Update a pixel result for Russian calendar picker. Now it contains
+        a stand-alone month name.
+
+        * platform/chromium-mac/platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png:
+
 2012-11-15  Kentaro Hara  <haraken@chromium.org>
 
         Unreviewed. Rebaselined images.
index d7fd673..d6b99a7 100644 (file)
Binary files a/LayoutTests/platform/chromium-mac/platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png and b/LayoutTests/platform/chromium-mac/platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru-expected.png differ
index 790c3d5..a1d5dde 100644 (file)
@@ -40,8 +40,6 @@ iframe {
 <script>
 var englishArguments = {
     locale: 'en-US',
-    monthLabels : ['January', 'February', 'March', 'April', 'May', 'June',
-    'July', 'August', 'September', 'October', 'November', 'December'],
     dayLabels : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
     todayLabel : 'Today',
     clearLabel : 'Clear',
@@ -53,8 +51,6 @@ var englishArguments = {
 };
 var japaneseArguments = {
     locale: 'ja-JP',
-    monthLabels : ['1月', '2月', '3月', '4月', '5月', '6月',
-    '7月', '8月', '9月', '10月', '11月', '12月'],
     dayLabels : ['日', '月', '火', '水', '木', '金', '土'],
     todayLabel : '今日',
     clearLabel : 'クリア',
@@ -68,8 +64,6 @@ var arabicArguments = {
     locale: 'ar',
     isRTL: false,
     isCalendarRTL: true,
-    monthLabels : ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
-                   'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
     dayLabels : ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
     todayLabel : 'اليوم',
     clearLabel : 'مسح',
@@ -80,8 +74,6 @@ var arabicArguments = {
 };
 var datalistArguments = {
     locale: 'en-US',
-    monthLabels : ['January', 'February', 'March', 'April', 'May', 'June',
-    'July', 'August', 'September', 'October', 'November', 'December'],
     dayLabels : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
     todayLabel : 'Today',
     clearLabel : 'Clear',
@@ -101,8 +93,6 @@ var datalistArguments = {
 };
 var longDatalistArguments = {
     locale: 'en-US',
-    monthLabels : ['January', 'February', 'March', 'April', 'May', 'June',
-    'July', 'August', 'September', 'October', 'November', 'December'],
     dayLabels : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
     todayLabel : 'Today',
     clearLabel : 'Clear',
@@ -162,8 +152,6 @@ var arabicDatalistArguments = {
     locale: 'ar',
     isRTL: true,
     isCalendarRTL: true,
-    monthLabels : ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
-                   'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
     dayLabels : ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
     todayLabel : 'اليوم',
     clearLabel : 'مسح',
@@ -185,8 +173,6 @@ var arabicLongDatalistArguments = {
     locale: 'ar',
     isRTL: true,
     isCalendarRTL: true,
-    monthLabels : ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
-                   'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
     dayLabels : ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
     todayLabel : 'اليوم',
     clearLabel : 'مسح',
@@ -242,8 +228,6 @@ var arabicLongDatalistArguments = {
 };
 var weekArguments = {
     locale: 'en-US',
-    monthLabels : ['January', 'February', 'March', 'April', 'May', 'June',
-    'July', 'August', 'September', 'October', 'November', 'December'],
     dayLabels : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
     todayLabel : 'This Week',
     clearLabel : 'Clear',
@@ -258,8 +242,6 @@ var weekArguments = {
 };
 var monthArguments = {
     locale: 'en-US',
-    monthLabels : ['January', 'February', 'March', 'April', 'May', 'June',
-    'July', 'August', 'September', 'October', 'November', 'December'],
     dayLabels : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
     todayLabel : 'This Month',
     clearLabel : 'Clear',
@@ -308,6 +290,11 @@ function openCalendar(args) {
             if (typeof numString == "number")
                 return numString.toLocaleString();
             return numString.toString();
+        },
+        formatMonth: function(year, zeroBaseMonth) {
+            var monthLabels = ['<January>', '<February>', '<March>', '<April>', '<May>', '<June>',
+                               '<July>', '<August>', '<September>', '<October>', '<November>', '<December>'];
+            return monthLabels[zeroBaseMonth] + " " + year;
         }
     }
 
index 4fec9a8..9322ec0 100644 (file)
@@ -1,3 +1,31 @@
+2012-11-15  Kent Tamura  <tkent@chromium.org>
+
+        Support stand-alone month names in calendar picker
+        https://bugs.webkit.org/show_bug.cgi?id=102196
+
+        Reviewed by Kentaro Hara.
+
+        We have showed non stand-alone month names in any locales. However
+        we should show stand-alone month names in some locales such as
+        Russian.
+
+        This patch introduce PagePopupController::formatMonth. It is
+        exposed to page-popups, and format year-month pairs in the same
+        way as input[type=month].
+
+        No new tests. Affects platform/chromium/fast/forms/calendar-picker/calendar-picker-appearance-ru.html.
+
+        * Resources/pagepopups/calendarPicker.js:
+        (Month.prototype.toLocaleString):
+        Calls pagePopupController.formatMonth except Japanese locale.
+        (handleArgumentsTimeout):
+        Remove unnecessary default monthLabels.
+        * page/PagePopupController.cpp:
+        (WebCore::PagePopupController::formatMonth): Added.
+        * page/PagePopupController.h:
+        (PagePopupController): Declare formatMonth.
+        * page/PagePopupController.idl: Add formatMonth.
+
 2012-11-15  Eugene Klyuchnikov  <eustas.bug@gmail.com>
 
         Web Inspector: Fix new JS compiler warnings.
index 7cc07cc..22022f3 100644 (file)
@@ -149,34 +149,9 @@ function formatJapaneseImperialEra(year, month) {
 Month.prototype.toLocaleString = function() {
     if (isNaN(this.year) || isNaN(this.year))
         return "Invalid Month";
-    var yearString = localizeNumber(this.year);
-    var monthString = global.params.monthLabels[this.month];
-    switch (getLanguage()) {
-    case "eu":
-    case "fil":
-    case "lt":
-    case "ml":
-    case "mt":
-    case "tl":
-    case "ur":
-        return yearString + " " + monthString;
-    case "hu":
-        return yearString + ". " + monthString;
-    case "ja":
-        return yearString + "年" + formatJapaneseImperialEra(this.year, this.month) + " " + monthString;
-    case "zh":
-        return yearString + "年" + monthString;
-    case "ko":
-        return yearString + "년 " + monthString;
-    case "lv":
-        return yearString + ". g. " + monthString;
-    case "pt":
-        return monthString + " de " + yearString;
-    case "sr":
-        return monthString + ". " + yearString;
-    default:
-        return monthString + " " + yearString;
-    }
+    if (getLanguage() == "ja")
+        return "" + this.year + "年" + formatJapaneseImperialEra(this.year, this.month) + " " + (this.month + 1) + "月";
+    return window.pagePopupController.formatMonth(this.year, this.month);
 };
 
 function createUTCDate(year, month, date) {
@@ -605,8 +580,6 @@ function handleArgumentsTimeout() {
     if (global.argumentsReceived)
         return;
     var args = {
-        monthLabels : ["m1", "m2", "m3", "m4", "m5", "m6",
-                       "m7", "m8", "m9", "m10", "m11", "m12"],
         dayLabels : ["d1", "d2", "d3", "d4", "d5", "d6", "d7"],
         todayLabel : "Today",
         clearLabel : "Clear",
@@ -624,10 +597,6 @@ function handleArgumentsTimeout() {
  * @return {?string} An error message, or null if the argument has no errors.
  */
 CalendarPicker.validateConfig = function(config) {
-    if (!config.monthLabels)
-        return "No monthLabels.";
-    if (config.monthLabels.length != 12)
-        return "monthLabels is not an array with 12 elements.";
     if (!config.dayLabels)
         return "No dayLabels.";
     if (config.dayLabels.length != 7)
index dace742..6e7cdb3 100644 (file)
@@ -61,6 +61,17 @@ String PagePopupController::localizeNumberString(const String& numberString)
     return numberString;
 }
 
+#if ENABLE(CALENDAR_PICKER)
+String PagePopupController::formatMonth(int year, int zeroBaseMonth)
+{
+    if (!m_popupClient)
+        return emptyString();
+    DateComponents date;
+    date.setMonthsSinceEpoch((year - 1970) * 12.0 + zeroBaseMonth);
+    return m_popupClient->locale().formatDateTime(date);
+}
+#endif
+
 void PagePopupController::clearPagePopupClient()
 {
     m_popupClient = 0;
index 6ef5cd1..2edacbc 100644 (file)
@@ -45,6 +45,9 @@ public:
     static PassRefPtr<PagePopupController> create(PagePopupClient*);
     void setValueAndClosePopup(int numValue, const String& stringValue);
     String localizeNumberString(const String&);
+#if ENABLE(CALENDAR_PICKER)
+    String formatMonth(int year, int zeroBaseMonth);
+#endif
     void clearPagePopupClient();
 
 private:
index b2350bf..f1d6e47 100644 (file)
@@ -33,4 +33,5 @@
 ] interface PagePopupController {
     void setValueAndClosePopup(in long numberValue, in DOMString stringValue);
     DOMString localizeNumberString(in DOMString numberString);
+    [Conditional=CALENDAR_PICKER] DOMString formatMonth(in long year, in long zeroBaseMonth);
 };
index 8dfc596..ed710e0 100644 (file)
@@ -1,3 +1,14 @@
+2012-11-15  Kent Tamura  <tkent@chromium.org>
+
+        Support stand-alone month names in calendar picker
+        https://bugs.webkit.org/show_bug.cgi?id=102196
+
+        Reviewed by Kentaro Hara.
+
+        * src/DateTimeChooserImpl.cpp:
+        (WebKit::DateTimeChooserImpl::writeDocument):
+        We don't need to pass monthLabels any more.
+
 2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed.  Rolled DEPS.
index f636f65..d966ba9 100644 (file)
@@ -149,7 +149,6 @@ void DateTimeChooserImpl::writeDocument(WebCore::DocumentWriter& writer)
     addProperty("clearLabel", Platform::current()->queryLocalizedString(WebLocalizedString::CalendarClear), writer);
     addProperty("weekLabel", Platform::current()->queryLocalizedString(WebLocalizedString::WeekNumberLabel), writer);
     addProperty("weekStartDay", m_locale->firstDayOfWeek(), writer);
-    addProperty("monthLabels", m_locale->monthLabels(), writer);
     addProperty("dayLabels", m_locale->weekDayShortLabels(), writer);
     addProperty("isCalendarRTL", m_locale->isRTL(), writer);
     addProperty("isRTL", m_parameters.isAnchorElementRTL, writer);