package org.vaadin.viritin.it;
import com.vaadin.annotations.Theme;
import com.vaadin.v7.data.Property;
import com.vaadin.v7.data.Property.ValueChangeListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.Notification;
import com.vaadin.v7.ui.TextField;
import org.vaadin.addonhelpers.AbstractTest;
import org.vaadin.viritin.layouts.MVerticalLayout;
import org.vaadin.viritin.util.HtmlElementPropertySetter;
/**
* Tests for raw usage of HtmlElementPropertySetter. Note, using
* HtmlElementPropertySetter directly is not suggested. Most often you should
* hide these browser quirks behind custom components. On TODO to Viritin at
* least IntegerField, DoubleField, NumberRange
*
* @author Matti Tahvonen
*/
@Theme("valo")
public class ElementPropertySetterTest extends AbstractTest {
private static final long serialVersionUID = 2226655074762870301L;
private final ValueChangeListener vcl = new ValueChangeListener() {
private static final long serialVersionUID = -382717228031608542L;
@Override
public void valueChange(Property.ValueChangeEvent event) {
Notification.show(event.getProperty().getValue().toString());
}
};
@Override
public Component getTestComponent() {
final MVerticalLayout mVerticalLayout = new MVerticalLayout();
TextField rawTextField = new TextField();
rawTextField.addValueChangeListener(vcl);
HtmlElementPropertySetter s1 = new HtmlElementPropertySetter(
rawTextField);
s1.setProperty("type", "number");
s1.setProperty("min", "10");
s1.setProperty("max", "100");
// prevent all but numbers with a simple js
s1.setJavaScriptEventHandler("keypress",
"function(e) {var c = viritin.getChar(e); return c==null || /^[\\d\\n\\t\\r]+$/.test(c);}");
mVerticalLayout.add(rawTextField);
HtmlElementPropertySetter s2 = new HtmlElementPropertySetter(
mVerticalLayout);
// sets with xpath, same could be also done via s1 as
// using document global selector (// vs .//)
s2.setProperty("//input", "step", "10");
s2.setProperty("//input", "required", "true");
TextField rawTextField2 = new TextField();
TextField rawTextField3 = new TextField();
rawTextField2.addValueChangeListener(vcl);
rawTextField3.addValueChangeListener(vcl);
final MVerticalLayout dates = new MVerticalLayout(rawTextField2,
rawTextField3).withCaption("dates");
HtmlElementPropertySetter s3 = new HtmlElementPropertySetter(
dates);
// set all inputs inside dates layout to be of type date
s3.setProperty(".//input", "type", "date");
mVerticalLayout.add(dates);
return mVerticalLayout;
}
}