import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.user.client.ui.TextBox;
+import com.vaadin.client.BrowserInfo;
import com.vaadin.client.Focusable;
import com.vaadin.client.LocaleNotLoadedException;
import com.vaadin.client.LocaleService;
public class VTextualDate extends VDateField implements Field, ChangeHandler,
Focusable, SubPartAware, HandlesAriaCaption, HandlesAriaInvalid,
- HandlesAriaRequired {
+ HandlesAriaRequired, KeyDownHandler {
private static final String PARSE_ERROR_CLASSNAME = "-parseerror";
VTextualDate.this.fireEvent(event);
}
});
-
+ if (BrowserInfo.get().isIE()) {
+ addDomHandler(this, KeyDownEvent.getType());
+ }
add(text);
}
return null;
}
+
+ @Override
+ public void onKeyDown(KeyDownEvent event) {
+ if (BrowserInfo.get().isIE()
+ && event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
+ // IE does not send change events when pressing enter in a text
+ // input so we handle it using a key listener instead
+ onChange(null);
+ }
+ }
}
--- /dev/null
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.datefield;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupDateField;
+
+public class DateFieldKeyboardInput extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Calendar c = new GregorianCalendar(Locale.ENGLISH);
+ c.set(2014, 0, 15);
+ final PopupDateField dateField = new PopupDateField("Select date",
+ c.getTime());
+ dateField.setDateFormat("dd.MM.yyyy");
+ addComponent(dateField);
+ dateField.addValueChangeListener(new ValueChangeListener() {
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ addComponent(new Label("Date has been changed."));
+ }
+ });
+ }
+
+ @Override
+ public Integer getTicketNumber() {
+ return 16677;
+ }
+
+ @Override
+ public String getTestDescription() {
+ return "When a new date is entered in the text field using the keyboard, pressing the return key after typing the date, "
+ + "a label with the text 'Date has been changed' should appear.";
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.datefield;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.DateFieldElement;
+import com.vaadin.testbench.elements.LabelElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class DateFieldKeyboardInputTest extends MultiBrowserTest {
+
+ @Test
+ public void testValueChangeEvent() {
+ openTestURL();
+ WebElement dateFieldText = $(DateFieldElement.class).first()
+ .findElement(By.tagName("input"));
+ dateFieldText.clear();
+ int numLabelsBeforeUpdate = $(LabelElement.class).all().size();
+ dateFieldText.sendKeys("20.10.2013", Keys.RETURN);
+ int numLabelsAfterUpdate = $(LabelElement.class).all().size();
+ assertTrue("Changing the date failed.",
+ numLabelsAfterUpdate == numLabelsBeforeUpdate + 1);
+ }
+}
\ No newline at end of file