package com.christophdietze.jack.client.view;
import com.christophdietze.jack.client.resources.MyClientBundle;
import com.christophdietze.jack.client.resources.MyCss;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.user.client.ui.TextBox;
public class TextBoxWithPlaceholder {
private static MyCss CSS = MyClientBundle.CSS;
static {
CSS.ensureInjected();
}
private final TextBox textBox;
private final String placeholderText;
private boolean placeholderVisible;
public static TextBoxWithPlaceholder attachTo(TextBox textBox, String placeholderText) {
return new TextBoxWithPlaceholder(textBox, placeholderText);
}
private TextBoxWithPlaceholder(final TextBox textBox, String placeholderText) {
this.textBox = textBox;
this.placeholderText = placeholderText;
showPlaceholder();
textBox.addFocusHandler(new FocusHandler() {
@Override
public void onFocus(FocusEvent event) {
hidePlaceholder();
}
});
textBox.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if (textBox.getText().isEmpty()) {
showPlaceholder();
}
}
});
}
public String getText() {
if (placeholderVisible) {
return "";
}
return textBox.getText();
}
public void update() {
if (!textBox.isAttached() && textBox.getText().isEmpty()) {
showPlaceholder();
}
}
private void showPlaceholder() {
placeholderVisible = true;
textBox.setText(placeholderText);
textBox.addStyleName(CSS.textBoxPlaceholder());
}
private void hidePlaceholder() {
if (placeholderVisible) {
textBox.setText("");
placeholderVisible = false;
textBox.removeStyleName(CSS.textBoxPlaceholder());
}
}
}