111 lines
2.7 KiB
Java
111 lines
2.7 KiB
Java
/**
|
|
*
|
|
*/
|
|
package org.gcube.portlets.user.shareupdates.client.form;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import org.gcube.portlets.user.shareupdates.client.dialog.PickUsersDialog;
|
|
import org.gcube.portlets.user.shareupdates.client.elements.Div;
|
|
|
|
import com.google.gwt.core.client.GWT;
|
|
import com.google.gwt.user.client.Event;
|
|
import com.google.gwt.user.client.Timer;
|
|
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
|
|
import com.google.gwt.user.client.ui.SuggestOracle.Callback;
|
|
import com.google.gwt.user.client.ui.SuggestOracle.Request;
|
|
import com.google.gwt.user.client.ui.SuggestOracle.Response;
|
|
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
|
|
|
|
/**
|
|
* @author massi
|
|
*
|
|
*/
|
|
public class MyTextArea extends Div {
|
|
final MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
|
|
int limit = 10;
|
|
|
|
void showSuggestions(String query) {
|
|
if (query.length() > 0) {
|
|
oracle.requestSuggestions(new Request(query, limit), new Callback() {
|
|
public void onSuggestionsReady(Request request, Response response) {
|
|
for (Suggestion s : response.getSuggestions()) {
|
|
GWT.log("s:"+s.getReplacementString());
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
PickUsersDialog pickUserDlg = new PickUsersDialog();
|
|
/**
|
|
*
|
|
*/
|
|
public MyTextArea() {
|
|
sinkEvents(Event.ONPASTE);
|
|
sinkEvents(Event.ONCONTEXTMENU);
|
|
sinkEvents(Event.ONKEYUP);
|
|
|
|
ArrayList<String> users = new ArrayList<String>();
|
|
users.add("Massi");
|
|
users.add("Gino");
|
|
users.add("Marco");
|
|
users.add("Franco");
|
|
users.add("Anna");
|
|
users.add("Antonio");
|
|
pickUserDlg.fill(users);
|
|
|
|
oracle.add("Massi");
|
|
oracle.add("Gino");
|
|
oracle.add("Marco");
|
|
oracle.add("Franco");
|
|
oracle.add("Anna");
|
|
oracle.add("Antonio");
|
|
}
|
|
|
|
/**
|
|
* paste event overridden
|
|
*/
|
|
public void onBrowserEvent(Event event) {
|
|
super.onBrowserEvent(event);
|
|
switch (event.getTypeInt()) {
|
|
case Event.ONPASTE: {
|
|
final String before = getText();
|
|
GWT.log("BEFORE:" + before);
|
|
Timer t = new Timer() {
|
|
@Override
|
|
public void run() {
|
|
String toCheck = getText().replaceAll(before, "");
|
|
ShareUpdateForm.get().checkLink(toCheck);
|
|
}
|
|
};
|
|
t.schedule(100);
|
|
break;
|
|
}
|
|
case Event.ONCONTEXTMENU: {
|
|
removeSampleText();
|
|
break;
|
|
}
|
|
case Event.ONKEYUP: {
|
|
final String before = getText();
|
|
//showSuggestions(before);
|
|
if (before.endsWith("@")) { //the only way i found to intercept @
|
|
pickUserDlg.setPopupPosition(this.getAbsoluteLeft(), this.getAbsoluteTop()+65);
|
|
pickUserDlg.show();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
protected void removeSampleText() {
|
|
if (getText().equals(ShareUpdateForm.SHARE_UPDATE_TEXT) || getText().equals(ShareUpdateForm.ERROR_UPDATE_TEXT) ) {
|
|
setText("");
|
|
addStyleName("dark-color");
|
|
removeStyleName("error");
|
|
}
|
|
}
|
|
}
|