Skip to content

Commit 8f4be78

Browse files
committed
TruncateMixin Enhancements added a way to turn off setting title when text is truncated.
1 parent b0b4d8a commit 8f4be78

File tree

3 files changed

+55
-12
lines changed

3 files changed

+55
-12
lines changed

gwt-material/src/main/java/gwt/material/design/client/base/HasTruncate.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,11 @@ public interface HasTruncate {
2727
void setTruncate(boolean truncate);
2828

2929
boolean isTruncate();
30+
31+
/**
32+
* Will enable long texts to set the elements attribute when mouse overed the truncated text
33+
*/
34+
void setEnableTruncateTitle(boolean value);
35+
36+
boolean isEnableTruncateTitle();
3037
}

gwt-material/src/main/java/gwt/material/design/client/base/MaterialWidget.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,16 @@ public boolean isTruncate() {
10761076
return getTruncateMixin().isTruncate();
10771077
}
10781078

1079+
@Override
1080+
public void setEnableTruncateTitle(boolean value) {
1081+
getTruncateMixin().setEnableTruncateTitle(value);
1082+
}
1083+
1084+
@Override
1085+
public boolean isEnableTruncateTitle() {
1086+
return getTruncateMixin().isEnableTruncateTitle();
1087+
}
1088+
10791089
@Override
10801090
public void setBorder(String value) {
10811091
getBorderMixin().setBorder(value);

gwt-material/src/main/java/gwt/material/design/client/base/mixin/TruncateMixin.java

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@
1919
*/
2020
package gwt.material.design.client.base.mixin;
2121

22+
import com.google.gwt.event.shared.HandlerRegistration;
2223
import com.google.gwt.user.client.Element;
2324
import com.google.gwt.user.client.ui.HasText;
24-
import com.google.gwt.user.client.ui.Widget;
2525
import gwt.material.design.client.base.HasTruncate;
2626
import gwt.material.design.client.base.MaterialWidget;
2727
import gwt.material.design.client.constants.CssName;
2828

2929
public class TruncateMixin<T extends MaterialWidget & HasTruncate> extends AbstractMixin<T> implements HasTruncate {
3030

3131
private ToggleStyleMixin<MaterialWidget> toggleStyleMixin;
32+
private HandlerRegistration mouseOverHandler, mouseOutHandler;
33+
private boolean enableTruncateTitle = true;
3234

3335
public TruncateMixin(T uiObject) {
3436
super(uiObject);
@@ -42,19 +44,33 @@ public void setTruncate(boolean truncate) {
4244

4345
public void checkEllipsis() {
4446
if (uiObject instanceof HasText) {
45-
Element element = uiObject.getElement();
46-
HasText hasText = (HasText) uiObject;
47-
element.setAttribute("title", "");
48-
uiObject.addMouseOverHandler(event -> {
49-
if (!uiObject.getElement().hasAttribute("title")) return;
50-
String text = hasText.getText();
51-
boolean withEllipsis = element.getOffsetWidth() < element.getScrollWidth();
52-
if (withEllipsis) {
53-
element.setAttribute("title", text);
47+
if (enableTruncateTitle) {
48+
Element element = uiObject.getElement();
49+
HasText hasText = (HasText) uiObject;
50+
element.setAttribute("title", "");
51+
if (mouseOutHandler == null) {
52+
mouseOverHandler = uiObject.addMouseOverHandler(event -> {
53+
if (!uiObject.getElement().hasAttribute("title")) return;
54+
String text = hasText.getText();
55+
boolean withEllipsis = element.getOffsetWidth() < element.getScrollWidth();
56+
if (withEllipsis) {
57+
element.setAttribute("title", text);
58+
}
59+
});
5460
}
55-
});
5661

57-
uiObject.addMouseOutHandler(event -> element.setAttribute("title", ""));
62+
if (mouseOutHandler == null) {
63+
mouseOutHandler = uiObject.addMouseOutHandler(event -> element.setAttribute("title", ""));
64+
}
65+
} else {
66+
if (mouseOverHandler != null) {
67+
mouseOverHandler.removeHandler();
68+
}
69+
70+
if (mouseOutHandler != null) {
71+
mouseOutHandler.removeHandler();
72+
}
73+
}
5874
}
5975
}
6076

@@ -63,6 +79,16 @@ public boolean isTruncate() {
6379
return getToggleStyleMixin().isOn();
6480
}
6581

82+
@Override
83+
public void setEnableTruncateTitle(boolean value) {
84+
this.enableTruncateTitle = value;
85+
}
86+
87+
@Override
88+
public boolean isEnableTruncateTitle() {
89+
return enableTruncateTitle;
90+
}
91+
6692
public ToggleStyleMixin<MaterialWidget> getToggleStyleMixin() {
6793
if (toggleStyleMixin == null) {
6894
toggleStyleMixin = new ToggleStyleMixin<>(uiObject, CssName.TRUNCATE);

0 commit comments

Comments
 (0)