diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
index 092711b..cfc5846 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -7,6 +7,9 @@
uses
+
+ uses
+
diff --git a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java
index b158682..392aade 100644
--- a/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java
+++ b/src/main/java/org/gcube/portlets/user/shareupdates/client/view/SuperPosedTextArea.java
@@ -4,6 +4,7 @@
package org.gcube.portlets.user.shareupdates.client.view;
import java.util.ArrayList;
+import java.util.HashSet;
import org.gcube.portlets.user.shareupdates.client.ShareUpdateService;
import org.gcube.portlets.user.shareupdates.client.ShareUpdateServiceAsync;
@@ -36,7 +37,7 @@ public class SuperPosedTextArea extends TextArea {
public final static int ARROW_UP = 38;
public final static int ARROW_DOWN = 40;
- private ArrayList mentionedUsers = new ArrayList();
+ private HashSet mentionedUsers = new HashSet();
private ArrayList hashtags = new ArrayList();
/**
@@ -44,9 +45,10 @@ public class SuperPosedTextArea extends TextArea {
*/
public SuperPosedTextArea() {
sinkEvents(Event.ONPASTE);
- sinkEvents(Event.ONKEYUP);
+ sinkEvents(Event.ONKEYPRESS);
sinkEvents(Event.ONCONTEXTMENU);
sinkEvents(Event.ONKEYDOWN);
+ sinkEvents(Event.ONKEYUP);
//get the users
shareupdateService.getPortalUsers(new AsyncCallback>() {
@Override
@@ -69,8 +71,8 @@ public class SuperPosedTextArea extends TextArea {
public void onFailure(Throwable caught) {
}
});
-
- DOM.setElementAttribute(getElement(), "id", "postTextArea");
+
+ getElement().setAttribute("id", "postTextArea");
bind();
}
@@ -100,10 +102,15 @@ public class SuperPosedTextArea extends TextArea {
t.schedule(100);
break;
}
+ case Event.ONKEYPRESS: {
+ pickUserDlg.onKeyPress(this.getCursorPos(), event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText());
+ pickHashtagDlg.onKeyPress(this.getCursorPos(), event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText());
+ break;
+ }
case Event.ONKEYUP: {
injectInDiv(getText());
- pickUserDlg.onKeyUp(event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText());
- pickHashtagDlg.onKeyUp(event.getKeyCode(), this.getAbsoluteLeft(), this.getAbsoluteTop()+this.getOffsetHeight(), getText());
+ pickUserDlg.onKeyUp(event.getKeyCode());
+ pickHashtagDlg.onKeyUp(event.getKeyCode());
break;
}
case Event.ONCONTEXTMENU: {
@@ -115,7 +122,7 @@ public class SuperPosedTextArea extends TextArea {
//avoid the arrow up to move the cursor at the beginning of the textbox and the TAB to move around inputs and enter to go newline
if (event.getKeyCode() == ARROW_UP || event.getKeyCode() == KeyCodes.KEY_TAB || event.getKeyCode() == KeyCodes.KEY_ENTER) {
DOM.eventCancelBubble(event, true);
- DOM.eventPreventDefault(event);
+ event.preventDefault();
return;
}
}
@@ -123,7 +130,7 @@ public class SuperPosedTextArea extends TextArea {
//avoid the arrow up to move the cursor at the beginning of the textbox and the TAB to move around inputs and enter to go newline
if (event.getKeyCode() == ARROW_UP || event.getKeyCode() == KeyCodes.KEY_TAB || event.getKeyCode() == KeyCodes.KEY_ENTER) {
DOM.eventCancelBubble(event, true);
- DOM.eventPreventDefault(event);
+ event.preventDefault();
return;
}
}
@@ -142,20 +149,21 @@ public class SuperPosedTextArea extends TextArea {
DOM.getElementById("highlighter").setInnerHTML("");
}
private void injectInDiv(String textAreaText) {
+ GWT.log("# injectInDiv: "+textAreaText);
String text;
// parse the text:
- // replace all the line braks by
, and all the double spaces by the html version
+ // replace all the line breaks by
, and all the double spaces by the html version
text = textAreaText.replaceAll("(\r\n|\n)","
");
text = text.replaceAll("\\s\\s"," ");
-
+
for (String mentionedUser : mentionedUsers) {
text = text.replaceAll(mentionedUser,""+mentionedUser+"");
}
-
-// for (String hashtag : hashtags) {
-// text = text.replaceAll(hashtag,""+hashtag+"");
-// }
-
+
+ for (String hashtag : hashtags) {
+ text = text.replaceAll(hashtag,""+hashtag+"");
+ }
+
// re-inject the processed text into the div
DOM.getElementById("highlighter").setInnerHTML(text);
}
@@ -167,28 +175,28 @@ public class SuperPosedTextArea extends TextArea {
eventBus.addHandler(PickedItemEvent.TYPE, new PickedItemEventHandler() {
@Override
public void onSelectedItem(PickedItemEvent event) {
- String triggerChar = event.getTriggerChar();
+
+ char triggerChar = event.getTriggerChar();
String toAdd = event.getSelectedItem().getAlternativeName();
- if (triggerChar.compareTo("#") == 0) { //has to be treated differently becase the # char remain present in the text unlike the @
+ if (triggerChar == '#') { //has to be treated differently becase the # char remain present in the text unlike the @
hashtags.add(toAdd);
-
- int tPos = getText().lastIndexOf(triggerChar);
- setText(getText().substring(0, tPos) + toAdd);
- Element highDiv = DOM.getElementById("highlighter");
- tPos = highDiv.getInnerHTML().lastIndexOf(triggerChar);
- highDiv.setInnerHTML(highDiv.getInnerHTML().substring(0, tPos) + toAdd);
+ String preceedingPart = getText().substring(0, event.getItemCursorIndexStart());
+ String afterPart = getText().substring(event.getItemCursorIndexEnd()+1);
+ //GWT.log("# BEFORE: "+preceedingPart);
+ setText(preceedingPart + toAdd + " " + afterPart);
+ injectInDiv(getText());
}
- if (event.getTriggerChar().compareTo("@") == 0) {
+ if (triggerChar == '@') {
+ GWT.log("GOT @ EVENT! "+ event.getSelectedItem().getAlternativeName());
mentionedUsers.add(toAdd);
- String[] toSplit = getText().split(triggerChar); //get the preceeding part
- setText(toSplit[0]+toAdd);
- Element highDiv = DOM.getElementById("highlighter");
+ String preceedingPart = getText().substring(0, event.getItemCursorIndexStart());
+ String afterPart = getText().substring(event.getItemCursorIndexEnd()+1);
+
+ setText(preceedingPart + toAdd + " " + afterPart);
+ injectInDiv(getText());
- String[] htmlToSplit = highDiv.getInnerHTML().split(triggerChar); //get the preceeding part
- String highLightedUser = ""+toAdd+"";
- highDiv.setInnerHTML(htmlToSplit[0]+highLightedUser);
}
}
});
@@ -203,7 +211,7 @@ public class SuperPosedTextArea extends TextArea {
GWT.log(toReturn.toString());
return toReturn;
}
-
+
public ArrayList getHashtags() {
ArrayList toReturn = new ArrayList();
for (String hashtag : hashtags) {