Diff
Modified: trunk/LayoutTests/ChangeLog (139171 => 139172)
--- trunk/LayoutTests/ChangeLog 2013-01-09 08:32:27 UTC (rev 139171)
+++ trunk/LayoutTests/ChangeLog 2013-01-09 08:53:01 UTC (rev 139172)
@@ -1,3 +1,15 @@
+2013-01-09 Kunihiko Sakamoto <[email protected]>
+
+ INPUT_MULTIPLE_FIELDS_UI: Step-up/-down of week field should respect min/max attributes
+ https://bugs.webkit.org/show_bug.cgi?id=106416
+
+ Reviewed by Kent Tamura.
+
+ * fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield-expected.txt: Added.
+ * fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield.html: Added.
+ * fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer-expected.txt: Added.
+ * fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer.html: Added.
+
2013-01-09 Noel Gordon <[email protected]>
[chromium] Tighten svg/custom/feComponentTransfer-Table.svg on windows
Added: trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield-expected.txt (0 => 139172)
--- trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield-expected.txt 2013-01-09 08:53:01 UTC (rev 139172)
@@ -0,0 +1,31 @@
+Sub-fields in input[type=week] should be read-only in some cases. This requires window.internals.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+createWeekInput argument order: min, max, value
+
+Year field:
+PASS isReadOnlyField(createWeekInput("", "", ""), pseudoYear) is false
+PASS isReadOnlyField(createWeekInput("2012-W50", "", ""), pseudoYear) is false
+PASS isReadOnlyField(createWeekInput("", "2012-W50", ""), pseudoYear) is false
+PASS isReadOnlyField(createWeekInput("", "", "2012-W50"), pseudoYear) is false
+PASS isReadOnlyField(createWeekInput("2012-W01", "2012-W50", ""), pseudoYear) is true
+PASS isReadOnlyField(createWeekInput("2012-W01", "2013-W50", ""), pseudoYear) is false
+PASS isReadOnlyField(createWeekInput("2012-W01", "2012-W50", "2012-W05"), pseudoYear) is true
+PASS isReadOnlyField(createWeekInput("2012-W01", "2012-W50", "2013-W01"), pseudoYear) is false
+Week field:
+We should not make all the fields readonly by min/max, so week field is always editable.
+PASS isReadOnlyField(createWeekInput("", "", ""), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("2012-W50", "", ""), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("", "2012-W50", ""), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("", "", "2012-W50"), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("2012-W50", "2012-W50", ""), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("2012-W49", "2013-W50", ""), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("2012-W50", "2013-W50", ""), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("2012-W50", "2012-W50", "2012-W50"), pseudoWeek) is false
+PASS isReadOnlyField(createWeekInput("2012-W50", "2012-W50", "2012-W49"), pseudoWeek) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield.html (0 => 139172)
--- trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield.html (rev 0)
+++ trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield.html 2013-01-09 08:53:01 UTC (rev 139172)
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<body>
+<script src=""
+<script>
+function createWeekInput(min, max, value) {
+ var input = document.createElement('input');
+ input.type = 'week';
+ if (min)
+ input.min = min;
+ if (max)
+ input.max = max;
+ if (value)
+ input.value = value;
+ return input;
+}
+
+function isReadOnlyField(input, pseudo) {
+ var node = internals.youngestShadowRoot(input).querySelector('*[pseudo="' + pseudo + '"]');
+ if (!node)
+ testFailed('Requested node is missing.');
+ return node && node.hasAttribute('readonly');
+}
+
+var pseudoWeek = '-webkit-datetime-edit-week-field';
+var pseudoYear = '-webkit-datetime-edit-year-field';
+
+description('Sub-fields in input[type=week] should be read-only in some cases. This requires window.internals.');
+debug('createWeekInput argument order: min, max, value');
+debug('');
+
+debug('Year field:');
+shouldBeFalse('isReadOnlyField(createWeekInput("", "", ""), pseudoYear)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W50", "", ""), pseudoYear)');
+shouldBeFalse('isReadOnlyField(createWeekInput("", "2012-W50", ""), pseudoYear)');
+shouldBeFalse('isReadOnlyField(createWeekInput("", "", "2012-W50"), pseudoYear)');
+shouldBeTrue('isReadOnlyField(createWeekInput("2012-W01", "2012-W50", ""), pseudoYear)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W01", "2013-W50", ""), pseudoYear)');
+shouldBeTrue('isReadOnlyField(createWeekInput("2012-W01", "2012-W50", "2012-W05"), pseudoYear)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W01", "2012-W50", "2013-W01"), pseudoYear)');
+
+debug('Week field:');
+debug('We should not make all the fields readonly by min/max, so week field is always editable.');
+shouldBeFalse('isReadOnlyField(createWeekInput("", "", ""), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W50", "", ""), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("", "2012-W50", ""), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("", "", "2012-W50"), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W50", "2012-W50", ""), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W49", "2013-W50", ""), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W50", "2013-W50", ""), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W50", "2012-W50", "2012-W50"), pseudoWeek)');
+shouldBeFalse('isReadOnlyField(createWeekInput("2012-W50", "2012-W50", "2012-W49"), pseudoWeek)');
+
+</script>
+<script src=""
+</body>
+
Added: trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer-expected.txt (0 => 139172)
--- trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer-expected.txt 2013-01-09 08:53:01 UTC (rev 139172)
@@ -0,0 +1,35 @@
+Check stepping-up and -down for week input fields from renderer.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Function arguments are (value, min, max).
+Week
+PASS stepUp("2000-W05", "2000-W05", "2000-W40") is "2000-W06"
+PASS stepDown("2000-W05", "2000-W05", "2000-W40") is "2000-W40"
+PASS stepUp("2000-W05", "2000-W02", "2000-W05") is "2000-W02"
+PASS stepDown("2000-W05", "2000-W02", "2000-W05") is "2000-W04"
+PASS stepUp("2000-W05", "2000-W08", "2000-W10") is "2000-W08"
+PASS stepDown("2000-W05", "2000-W08", "2000-W10") is "2000-W10"
+PASS stepUp("2000-W05", "2000-W03", "2000-W03") is "2000-W03"
+PASS stepDown("2000-W05", "2000-W03", "2000-W03") is "2000-W03"
+PASS stepUp("2000-W05", "2000-W03", "2001-W05") is "2000-W06"
+PASS stepDown("2000-W05", "2000-W05", "2001-W08") is "2000-W04"
+Year
+PASS stepUp("2000-W01", "2000-W01", "2009-W52") is "2001-W01"
+PASS stepDown("2000-W01", "2000-W01", "2009-W52") is "2009-W01"
+PASS stepUp("2000-W01", "1990-W01", "2000-W52") is "1990-W01"
+PASS stepDown("2000-W01", "1990-W01", "2000-W52") is "1999-W01"
+PASS stepUp("275760-W01", "1990-W01", null) is "1990-W01"
+PASS stepDown("1990-W01", "1990-W01", null) is "275760-W01"
+PASS stepUp("2000-W01", null, "2000-W52") is "0001-W01"
+PASS stepDown("0001-W01", null, "2000-W52") is "2000-W01"
+PASS stepUp("1990-W01", "2000-W01", "2009-W52") is "2000-W01"
+PASS stepDown("1990-W01", "2000-W01", "2009-W52") is "2009-W01"
+PASS stepUp("2020-W01", "2000-W01", "2000-W52") is "2000-W01"
+PASS stepDown("2020-W01", "2000-W01", "2000-W52") is "2000-W01"
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer.html (0 => 139172)
--- trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer.html (rev 0)
+++ trunk/LayoutTests/fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer.html 2013-01-09 08:53:01 UTC (rev 139172)
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<script>
+description('Check stepping-up and -down for week input fields from renderer.');
+if (!window.eventSender)
+ debug('This test requires eventSender.');
+
+var input = document.createElement('input');
+input.type = 'week';
+document.body.appendChild(input);
+
+function setInputAttributes(value, min, max) {
+ input.value = value;
+ input.min = min;
+ input.max = max;
+}
+
+function stepUp(value, min, max) {
+ setInputAttributes(value, min, max);
+ eventSender.keyDown('upArrow');
+ return input.value;
+}
+
+function stepDown(value, min, max) {
+ setInputAttributes(value, min, max);
+ eventSender.keyDown('downArrow');
+ return input.value;
+}
+
+input.focus();
+debug('Function arguments are (value, min, max).');
+debug('Week');
+shouldBeEqualToString('stepUp("2000-W05", "2000-W05", "2000-W40")', '2000-W06');
+shouldBeEqualToString('stepDown("2000-W05", "2000-W05", "2000-W40")', '2000-W40');
+shouldBeEqualToString('stepUp("2000-W05", "2000-W02", "2000-W05")', '2000-W02');
+shouldBeEqualToString('stepDown("2000-W05", "2000-W02", "2000-W05")', '2000-W04');
+shouldBeEqualToString('stepUp("2000-W05", "2000-W08", "2000-W10")', '2000-W08');
+shouldBeEqualToString('stepDown("2000-W05", "2000-W08", "2000-W10")', '2000-W10');
+shouldBeEqualToString('stepUp("2000-W05", "2000-W03", "2000-W03")', '2000-W03');
+shouldBeEqualToString('stepDown("2000-W05", "2000-W03", "2000-W03")', '2000-W03');
+shouldBeEqualToString('stepUp("2000-W05", "2000-W03", "2001-W05")', '2000-W06');
+shouldBeEqualToString('stepDown("2000-W05", "2000-W05", "2001-W08")', '2000-W04');
+
+debug('Year');
+eventSender.keyDown('rightArrow');
+shouldBeEqualToString('stepUp("2000-W01", "2000-W01", "2009-W52")', '2001-W01');
+shouldBeEqualToString('stepDown("2000-W01", "2000-W01", "2009-W52")', '2009-W01');
+shouldBeEqualToString('stepUp("2000-W01", "1990-W01", "2000-W52")', '1990-W01');
+shouldBeEqualToString('stepDown("2000-W01", "1990-W01", "2000-W52")', '1999-W01');
+shouldBeEqualToString('stepUp("275760-W01", "1990-W01", null)', '1990-W01');
+shouldBeEqualToString('stepDown("1990-W01", "1990-W01", null)', '275760-W01');
+shouldBeEqualToString('stepUp("2000-W01", null, "2000-W52")', '0001-W01');
+shouldBeEqualToString('stepDown("0001-W01", null, "2000-W52")', '2000-W01');
+shouldBeEqualToString('stepUp("1990-W01", "2000-W01", "2009-W52")', '2000-W01');
+shouldBeEqualToString('stepDown("1990-W01", "2000-W01", "2009-W52")', '2009-W01');
+shouldBeEqualToString('stepUp("2020-W01", "2000-W01", "2000-W52")', '2000-W01');
+shouldBeEqualToString('stepDown("2020-W01", "2000-W01", "2000-W52")', '2000-W01');
+
+debug('');
+input.remove();
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (139171 => 139172)
--- trunk/Source/WebCore/ChangeLog 2013-01-09 08:32:27 UTC (rev 139171)
+++ trunk/Source/WebCore/ChangeLog 2013-01-09 08:53:01 UTC (rev 139172)
@@ -1,3 +1,28 @@
+2013-01-09 Kunihiko Sakamoto <[email protected]>
+
+ INPUT_MULTIPLE_FIELDS_UI: Step-up/-down of week field should respect min/max attributes
+ https://bugs.webkit.org/show_bug.cgi?id=106416
+
+ Reviewed by Kent Tamura.
+
+ Make step-up/-down of the week field respect the min/max attributes of the element.
+ Note that it still accepts any keyboard inputs (the element
+ becomes 'invalid' state when out-of-range values entered).
+
+ Tests: fast/forms/week-multiple-fields/week-multiple-fields-readonly-subfield.html
+ fast/forms/week-multiple-fields/week-multiple-fields-stepup-stepdown-from-renderer.html
+
+ * css/html.css: Add a CSS rule for week field.
+ * html/shadow/DateTimeEditElement.cpp:
+ (WebCore::DateTimeEditBuilder::visitField):
+ Compute minimum/maximum values of week field from the min/max parameters of the element.
+ * html/shadow/DateTimeFieldElements.cpp:
+ (WebCore::DateTimeWeekFieldElement::DateTimeWeekFieldElement): Add mininum/maximum arguments.
+ (WebCore::DateTimeWeekFieldElement::create): Ditto.
+ (WebCore::DateTimeWeekFieldElement::clampValueForHardLimits): Added.
+ * html/shadow/DateTimeFieldElements.h:
+ (DateTimeWeekFieldElement): Add mininum/maximum arguments and declare clampValueForHardLimits.
+
2013-01-08 Arpita Bahuguna <[email protected]>
Caret is incorrectly painted for a contenteditable <div> containing a <br> in vertical writing mode
Modified: trunk/Source/WebCore/css/html.css (139171 => 139172)
--- trunk/Source/WebCore/css/html.css 2013-01-09 08:32:27 UTC (rev 139171)
+++ trunk/Source/WebCore/css/html.css 2013-01-09 08:53:01 UTC (rev 139172)
@@ -581,6 +581,7 @@
input::-webkit-datetime-edit-year-field[readonly],
input::-webkit-datetime-edit-month-field[readonly],
+input::-webkit-datetime-edit-week-field[readonly],
input::-webkit-datetime-edit-day-field[readonly],
input::-webkit-datetime-edit-ampm-field[readonly],
input::-webkit-datetime-edit-hour-field[readonly],
Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (139171 => 139172)
--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp 2013-01-09 08:32:27 UTC (rev 139171)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp 2013-01-09 08:53:01 UTC (rev 139172)
@@ -247,9 +247,19 @@
return;
}
- case DateTimeFormat::FieldTypeWeekOfYear:
- m_editElement.addField(DateTimeWeekFieldElement::create(document, m_editElement));
+ case DateTimeFormat::FieldTypeWeekOfYear: {
+ int minWeek = DateComponents::minimumWeekNumber;
+ int maxWeek = DateComponents::maximumWeekNumber;
+ if (m_parameters.minimum.type() != DateComponents::Invalid
+ && m_parameters.maximum.type() != DateComponents::Invalid
+ && m_parameters.minimum.fullYear() == m_parameters.maximum.fullYear()
+ && m_parameters.minimum.week() <= m_parameters.maximum.week()) {
+ minWeek = m_parameters.minimum.week();
+ maxWeek = m_parameters.maximum.week();
+ }
+ m_editElement.addField(DateTimeWeekFieldElement::create(document, m_editElement, minWeek, maxWeek));
return;
+ }
case DateTimeFormat::FieldTypeYear: {
DateTimeYearFieldElement::Parameters yearParams;
Modified: trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp (139171 => 139172)
--- trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp 2013-01-09 08:32:27 UTC (rev 139171)
+++ trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp 2013-01-09 08:53:01 UTC (rev 139172)
@@ -435,15 +435,15 @@
// ----------------------------
-DateTimeWeekFieldElement::DateTimeWeekFieldElement(Document* document, FieldOwner& fieldOwner)
- : DateTimeNumericFieldElement(document, fieldOwner, DateComponents::minimumWeekNumber, DateComponents::maximumWeekNumber, "--")
+DateTimeWeekFieldElement::DateTimeWeekFieldElement(Document* document, FieldOwner& fieldOwner, int minimum, int maximum)
+ : DateTimeNumericFieldElement(document, fieldOwner, minimum, maximum, "--")
{
}
-PassRefPtr<DateTimeWeekFieldElement> DateTimeWeekFieldElement::create(Document* document, FieldOwner& fieldOwner)
+PassRefPtr<DateTimeWeekFieldElement> DateTimeWeekFieldElement::create(Document* document, FieldOwner& fieldOwner, int minimum, int maximum)
{
DEFINE_STATIC_LOCAL(AtomicString, weekPsuedoId, ("-webkit-datetime-edit-week-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeWeekFieldElement> field = adoptRef(new DateTimeWeekFieldElement(document, fieldOwner));
+ RefPtr<DateTimeWeekFieldElement> field = adoptRef(new DateTimeWeekFieldElement(document, fieldOwner, minimum, maximum));
field->initialize(weekPsuedoId, AXWeekOfYearFieldText());
return field.release();
}
@@ -474,6 +474,11 @@
setEmptyValue();
}
+int DateTimeWeekFieldElement::clampValueForHardLimits(int value) const
+{
+ return Range(DateComponents::minimumWeekNumber, DateComponents::maximumWeekNumber).clampValue(value);
+}
+
// ----------------------------
DateTimeYearFieldElement::DateTimeYearFieldElement(Document* document, FieldOwner& fieldOwner, const DateTimeYearFieldElement::Parameters& parameters)
Modified: trunk/Source/WebCore/html/shadow/DateTimeFieldElements.h (139171 => 139172)
--- trunk/Source/WebCore/html/shadow/DateTimeFieldElements.h 2013-01-09 08:32:27 UTC (rev 139171)
+++ trunk/Source/WebCore/html/shadow/DateTimeFieldElements.h 2013-01-09 08:53:01 UTC (rev 139172)
@@ -172,15 +172,18 @@
WTF_MAKE_NONCOPYABLE(DateTimeWeekFieldElement);
public:
- static PassRefPtr<DateTimeWeekFieldElement> create(Document*, FieldOwner&);
+ static PassRefPtr<DateTimeWeekFieldElement> create(Document*, FieldOwner&, int minimum, int maximum);
private:
- DateTimeWeekFieldElement(Document*, FieldOwner&);
+ DateTimeWeekFieldElement(Document*, FieldOwner&, int minimum, int maximum);
// DateTimeFieldElement functions.
virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+
+ // DateTimeNumericFieldElement function.
+ virtual int clampValueForHardLimits(int) const OVERRIDE FINAL;
};
class DateTimeYearFieldElement : public DateTimeNumericFieldElement {