Diff
Modified: trunk/ChangeLog (114355 => 114356)
--- trunk/ChangeLog 2012-04-17 07:21:42 UTC (rev 114355)
+++ trunk/ChangeLog 2012-04-17 07:30:46 UTC (rev 114356)
@@ -1,3 +1,14 @@
+2012-04-17 Kent Tamura <[email protected]>
+
+ Calendar Picker: Support RTL layout
+ https://bugs.webkit.org/show_bug.cgi?id=83668
+
+ Reviewed by Hajime Morita.
+
+ * ManualTests/forms/calendar-picker.html:
+ Add Arabic parameters.
+ Add <select> to select a locale.
+
2012-04-16 Dave Tu <[email protected]>
Re-add GPU DEPS builders to flakiness dashboard.
Modified: trunk/ManualTests/forms/calendar-picker.html (114355 => 114356)
--- trunk/ManualTests/forms/calendar-picker.html 2012-04-17 07:21:42 UTC (rev 114355)
+++ trunk/ManualTests/forms/calendar-picker.html 2012-04-17 07:30:46 UTC (rev 114356)
@@ -19,6 +19,11 @@
<body>
<p>This is a testbed for a calendar picker.</p>
+<select _onchange_="selected(this)">
+ <option>English</option>
+ <option>Japanese</option>
+ <option>Arabic</option>
+</select>
<div><input type="text" id="date"></div>
<iframe></iframe>
@@ -27,17 +32,6 @@
</ol>
<script>
-var frame = document.getElementsByTagName('iframe')[0];
-var doc = frame.contentDocument;
-doc.documentElement.innerHTML = '<head></head><body><div id=main>Loading...</div></body>';
-var link = doc.createElement('link');
-link.rel = 'stylesheet';
-link.href = '' + (new Date()).getTime();
-doc.head.appendChild(link);
-var script = doc.createElement('script');
-script.src = '' + (new Date()).getTime();
-doc.body.appendChild(script);
-
var englishArguments = {
locale: 'en-US',
monthLabels : ['January', 'February', 'March', 'April', 'May', 'June',
@@ -62,21 +56,61 @@
step : 1,
max : '2099-03-15',
};
-setTimeout(function() {
- frame.contentWindow.postMessage(JSON.stringify(englishArguments), "*");
- frame.contentWindow.setValueAndClosePopup = function(numValue, stringValue) {
- window.log('number=' + numValue + ', string="' + stringValue + '"');
- if (numValue == 0)
- window.document.getElementById('date').value = stringValue;
- };
-}, 100);
+var arabicArguments = {
+ locale: 'ar',
+ monthLabels : ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',
+ 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],
+ dayLabels : ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ todayLabel : 'اليوم',
+ clearLabel : 'مسح',
+ weekStartDay : 5,
+ step : 1,
+ max : '2020-05-15',
+};
+function openCalendar(args) {
+ var frame = document.getElementsByTagName('iframe')[0];
+ var doc = frame.contentDocument;
+ doc.documentElement.innerHTML = '<head></head><body><div id=main>Loading...</div></body>';
+ var link = doc.createElement('link');
+ link.rel = 'stylesheet';
+ link.href = '' + (new Date()).getTime();
+ doc.head.appendChild(link);
+ var script = doc.createElement('script');
+ script.src = '' + (new Date()).getTime();
+ doc.body.appendChild(script);
+ setTimeout(function() {
+ frame.contentWindow.postMessage(JSON.stringify(args), "*");
+ frame.contentWindow.setValueAndClosePopup = function(numValue, stringValue) {
+ window.log('number=' + numValue + ', string="' + stringValue + '"');
+ if (numValue == 0)
+ window.document.getElementById('date').value = stringValue;
+ };
+ }, 100);
+}
+
+function selected(select) {
+ switch (select.selectedIndex) {
+ case 0:
+ openCalendar(englishArguments);
+ break;
+ case 1:
+ openCalendar(japaneseArguments);
+ break;
+ case 2:
+ openCalendar(arabicArguments);
+ break;
+ }
+}
+
function log(str) {
var entry = document.createElement('li');
entry.innerText = str;
document.getElementById('console').appendChild(entry);
}
+
+openCalendar(englishArguments);
</script>
</body>
</html>
Modified: trunk/Source/WebCore/ChangeLog (114355 => 114356)
--- trunk/Source/WebCore/ChangeLog 2012-04-17 07:21:42 UTC (rev 114355)
+++ trunk/Source/WebCore/ChangeLog 2012-04-17 07:30:46 UTC (rev 114356)
@@ -1,3 +1,21 @@
+2012-04-17 Kent Tamura <[email protected]>
+
+ Calendar Picker: Support RTL layout
+ https://bugs.webkit.org/show_bug.cgi?id=83668
+
+ Reviewed by Hajime Morita.
+
+ Manual test: ManualTests/forms/calendar-picker.html
+
+ * Resources/calendarPicker.js:
+ (layout): If params.isRTL, add dir=rtl to the body.
+ (DaysTable.prototype._handleKey): Reverse Left and Right cursor keys if RTL.
+ * html/shadow/CalendarPickerElement.cpp:
+ (WebCore::addProperty): Add addProperty() with a bool value.
+ (WebCore::CalendarPickerElement::writeDocument):
+ Check the direction of the first character of localized January label,
+ and pass it as isRTL property.
+
2012-04-16 Carlos Garcia Campos <[email protected]>
Unreviewed. Fix make distcheck issues.
Modified: trunk/Source/WebCore/Resources/calendarPicker.js (114355 => 114356)
--- trunk/Source/WebCore/Resources/calendarPicker.js 2012-04-17 07:21:42 UTC (rev 114355)
+++ trunk/Source/WebCore/Resources/calendarPicker.js 2012-04-17 07:30:46 UTC (rev 114356)
@@ -30,7 +30,6 @@
*/
// FIXME:
-// - RTL
// - Touch event
/**
@@ -316,6 +315,8 @@
}
function layout() {
+ if (global.params.isRTL)
+ document.body.dir = "rtl";
var main = $("main");
var params = global.params;
main.removeChild(main.firstChild);
@@ -925,7 +926,7 @@
return;
}
- if (key == "Left") {
+ if (key == (global.params.isRTL ? "Right" : "Left")) {
if (x == 0) {
if (y == 0) {
if (!this._maybeSetPreviousMonth())
@@ -947,7 +948,7 @@
y--;
this.updateSelection(event, x, y);
- } else if (key == "Right") {
+ } else if (key == (global.params.isRTL ? "Left" : "Right")) {
if (x == 6) {
if (y == DaysTable._Weeks - 1) {
if (!this._maybeSetNextMonth())
Modified: trunk/Source/WebCore/html/shadow/CalendarPickerElement.cpp (114355 => 114356)
--- trunk/Source/WebCore/html/shadow/CalendarPickerElement.cpp 2012-04-17 07:21:42 UTC (rev 114355)
+++ trunk/Source/WebCore/html/shadow/CalendarPickerElement.cpp 2012-04-17 07:30:46 UTC (rev 114356)
@@ -49,6 +49,8 @@
#include "RenderDetailsMarker.h"
#include <wtf/text/StringBuilder.h>
+using namespace WTF::Unicode;
+
namespace WebCore {
using namespace HTMLNames;
@@ -168,6 +170,17 @@
addLiteral(",\n", writer);
}
+static void addProperty(const char* name, bool value, DocumentWriter& writer)
+{
+ writer.addData(name, strlen(name));
+ addLiteral(": ", writer);
+ if (value)
+ addLiteral("true", writer);
+ else
+ addLiteral("false", writer);
+ addLiteral(",\n", writer);
+}
+
static void addProperty(const char* name, const Vector<String>& values, DocumentWriter& writer)
{
writer.addData(name, strlen(name));
@@ -200,7 +213,7 @@
addProperty("min", minString, writer);
addProperty("max", maxString, writer);
addProperty("step", stepString, writer);
- addProperty("required", input->required() ? "true" : "false", writer);
+ addProperty("required", input->required(), writer);
addProperty("currentValue", input->value(), writer);
addProperty("locale", defaultLanguage(), writer);
addProperty("todayLabel", calendarTodayText(), writer);
@@ -208,6 +221,8 @@
addProperty("weekStartDay", firstDayOfWeek(), writer);
addProperty("monthLabels", monthLabels(), writer);
addProperty("dayLabels", weekDayShortLabels(), writer);
+ Direction dir = direction(monthLabels()[0][0]);
+ addProperty("isRTL", dir == RightToLeft || dir == RightToLeftArabic, writer);
addLiteral("}\n", writer);
writer.addData(calendarPickerJs, sizeof(calendarPickerJs));