diff --git a/.travis.yml b/.travis.yml
index 7c1e31bd5..66252d383 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,7 +8,7 @@ cache:
- $HOME/.m2
before_install:
# install the gwt-material-jquery because it will depends on built in jquery
-- git clone -b release_2.4.1 https://github.com/GwtMaterialDesign/gwt-material-jquery.git
+- git clone -b release_2.4.2 https://github.com/GwtMaterialDesign/gwt-material-jquery.git
- cd gwt-material-jquery
- mvn install -DskipTests=true -DdryRun=true
- cd ..
diff --git a/.utility/deploy.sh b/.utility/deploy.sh
index 99bc32d1a..c45c40d91 100644
--- a/.utility/deploy.sh
+++ b/.utility/deploy.sh
@@ -1,6 +1,6 @@
#!/bin/bash
set -ev
-if [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "release_2.4.1" ]; then
+if [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "release_2.4.2" ]; then
echo "ossrh\${env.OSSRH_USER}\${env.OSSRH_PASS}" > ~/settings.xml
mvn deploy -DskipTests --settings ~/settings.xml
fi
\ No newline at end of file
diff --git a/README.md b/README.md
index f89d06da2..c3e1ccf60 100644
--- a/README.md
+++ b/README.md
@@ -20,12 +20,12 @@ We created textMixin = new TextMixin<>(this);
+ private TextMixin textMixin;
public TextWidget() {
super(DOM.createDiv());
@@ -42,11 +44,33 @@ public TextWidget(Element element, String... initialClass) {
@Override
public String getText() {
- return textMixin.getText();
+ return getTextMixin().getText();
}
@Override
public void setText(String text) {
- textMixin.setText(text);
+ getTextMixin().setText(text);
}
-}
\ No newline at end of file
+
+ @Override
+ public void setHtml(SafeHtml html) {
+ getTextMixin().setHtml(html);
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ getTextMixin().setSanitizer(sanitizer);
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return getTextMixin().getSanitizer();
+ }
+
+ public TextMixin getTextMixin() {
+ if (textMixin == null) {
+ textMixin = new TextMixin<>(this);
+ }
+ return textMixin;
+ }
+}
diff --git a/gwt-material/src/main/java/gwt/material/design/client/base/mixin/AbstractMixin.java b/gwt-material/src/main/java/gwt/material/design/client/base/mixin/AbstractMixin.java
index 9d62d7fda..32a0bbcf5 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/base/mixin/AbstractMixin.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/base/mixin/AbstractMixin.java
@@ -26,7 +26,7 @@
/**
* @author Sven Jacobs
*/
-abstract class AbstractMixin {
+public abstract class AbstractMixin {
T uiObject;
@@ -37,4 +37,8 @@ abstract class AbstractMixin {
public void setUiObject(T uiObject) {
this.uiObject = uiObject;
}
+
+ public T getUiObject() {
+ return uiObject;
+ }
}
diff --git a/gwt-material/src/main/java/gwt/material/design/client/base/mixin/HTMLMixin.java b/gwt-material/src/main/java/gwt/material/design/client/base/mixin/HTMLMixin.java
index 1363cc936..b14ed8580 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/base/mixin/HTMLMixin.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/base/mixin/HTMLMixin.java
@@ -23,13 +23,14 @@
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.HasHTML;
import com.google.gwt.user.client.ui.UIObject;
+import gwt.material.design.client.base.HasSafeText;
import static gwt.material.design.jquery.client.api.JQuery.$;
/**
* @author Grant Slender
*/
-public class HTMLMixin extends TextMixin implements HasHTML {
+public class HTMLMixin extends TextMixin implements HasHTML {
public HTMLMixin(final T uiObject) {
super(uiObject);
diff --git a/gwt-material/src/main/java/gwt/material/design/client/base/mixin/TextMixin.java b/gwt-material/src/main/java/gwt/material/design/client/base/mixin/TextMixin.java
index 4cc68b9b9..ce18b3f7e 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/base/mixin/TextMixin.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/base/mixin/TextMixin.java
@@ -20,23 +20,68 @@
* #L%
*/
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.ui.UIObject;
+import gwt.material.design.client.base.DefaultHtmlSanitizer;
+import gwt.material.design.client.base.HasSafeText;
/**
+ * @author Mark Kevin
* @author Ben Dol
*/
-public class TextMixin extends AbstractMixin {
+public class TextMixin extends AbstractMixin implements HasSafeText {
+
+ protected static HtmlSanitizer DEFAULT_SANITIZER = new DefaultHtmlSanitizer();
+ protected HtmlSanitizer _sanitizer;
+ protected SafeHtml safeHtml;
public TextMixin(final T uiObject) {
super(uiObject);
}
public String getText() {
- return uiObject.getElement().getInnerText();
+ return safeHtml != null ? uiObject.getElement().getInnerText() : null;
}
public void setText(final String text) {
- uiObject.getElement().setInnerText(text);
+ setHtml(toSafeHtml(text));
+ }
+
+ protected SafeHtml toSafeHtml(String text) {
+ SafeHtml safeHtml = null;
+ if (text != null) {
+ if (_sanitizer == null) {
+ safeHtml = DEFAULT_SANITIZER.sanitize(text);
+ } else {
+ safeHtml = _sanitizer.sanitize(text);
+ }
+ }
+ return safeHtml;
+ }
+
+ @Override
+ public void setHtml(SafeHtml safeHtml) {
+ this.safeHtml = safeHtml;
+ uiObject.getElement().setInnerSafeHtml(safeHtml != null ? safeHtml : SafeHtmlUtils.fromString(""));
+ }
+
+ public static void setDefaultSanitizer(HtmlSanitizer defaultSanitizer) {
+ DEFAULT_SANITIZER = defaultSanitizer;
+ }
+
+ public static HtmlSanitizer getDefaultSanitizer() {
+ return DEFAULT_SANITIZER;
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ _sanitizer = sanitizer;
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return _sanitizer;
}
}
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialBadge.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialBadge.java
index 04e9b8662..29af757e3 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialBadge.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialBadge.java
@@ -20,7 +20,6 @@
package gwt.material.design.client.ui;
import com.google.gwt.dom.client.Document;
-import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import gwt.material.design.client.constants.Color;
import gwt.material.design.client.constants.CssName;
import gwt.material.design.client.ui.html.Span;
@@ -81,14 +80,4 @@ public MaterialBadge(String text, Color textColor, Color bgColor) {
setTextColor(textColor);
setBackgroundColor(bgColor);
}
-
- @Override
- public String getText() {
- return SafeHtmlUtils.fromString(getElement().getInnerText()).asString();
- }
-
- @Override
- public void setText(String text) {
- getElement().setInnerSafeHtml(SafeHtmlUtils.fromString(text));
- }
}
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCardTitle.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCardTitle.java
index 30947e07d..c57b08644 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCardTitle.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCardTitle.java
@@ -21,8 +21,11 @@
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Style;
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.ui.HasText;
import gwt.material.design.client.base.HasIcon;
+import gwt.material.design.client.base.HasSafeText;
import gwt.material.design.client.base.MaterialWidget;
import gwt.material.design.client.constants.*;
import gwt.material.design.client.ui.html.Span;
@@ -38,7 +41,7 @@
* @see Material Design Specification
*/
//@formatter:on
-public class MaterialCardTitle extends MaterialWidget implements HasIcon, HasText {
+public class MaterialCardTitle extends MaterialWidget implements HasIcon, HasSafeText, HasText {
private MaterialIcon icon = new MaterialIcon();
private Span titleLabel = new Span();
@@ -56,11 +59,26 @@ public String getText() {
public void setText(String text) {
titleLabel.setText(text);
- if(!titleLabel.isAttached()) {
+ if (!titleLabel.isAttached()) {
add(titleLabel);
}
}
+ @Override
+ public void setHtml(SafeHtml html) {
+ titleLabel.setHtml(html);
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ titleLabel.setSanitizer(sanitizer);
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return titleLabel.getSanitizer();
+ }
+
@Override
public MaterialIcon getIcon() {
return icon;
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialChip.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialChip.java
index bdec35e6f..9006fa944 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialChip.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialChip.java
@@ -26,7 +26,9 @@
import com.google.gwt.event.logical.shared.HasCloseHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
-import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasValue;
import gwt.material.design.client.base.*;
import gwt.material.design.client.base.mixin.ActiveMixin;
@@ -62,7 +64,7 @@
*/
//@formatter:on
public class MaterialChip extends AbstractValueWidget implements HasImage, HasIcon, HasLetter,
- HasValue, HasCloseHandlers, HasType, HasActive {
+ HasValue, HasCloseHandlers, HasType, HasActive, HasSafeText, HasText {
private MaterialIcon icon = new MaterialIcon(IconType.CLOSE);
private Span chipLabel = new Span();
@@ -126,6 +128,21 @@ public String getText() {
return getValue();
}
+ @Override
+ public void setHtml(SafeHtml html) {
+ chipLabel.setHtml(html);
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ chipLabel.setSanitizer(sanitizer);
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return chipLabel.getSanitizer();
+ }
+
@Override
public void setValue(String value, boolean fireEvents) {
chipLabel.setText(value);
@@ -134,7 +151,7 @@ public void setValue(String value, boolean fireEvents) {
@Override
public String getValue() {
- return SafeHtmlUtils.fromString(chipLabel.getElement().getInnerText()).asString();
+ return chipLabel.getText();
}
@Override
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCollection.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCollection.java
index 6e3f57900..89be87918 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCollection.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialCollection.java
@@ -145,7 +145,7 @@ public void clearActive() {
* Sets the header of the collection component.
*/
public void setHeader(String header) {
- headerLabel.getElement().setInnerSafeHtml(SafeHtmlUtils.fromString(header));
+ headerLabel.setText(header);
addStyleName(CssName.WITH_HEADER);
ListItem item = new ListItem(headerLabel);
UiHelper.addMousePressedHandlers(item);
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialHelpBlock.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialHelpBlock.java
index fe5b3f5cd..93e305bbc 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialHelpBlock.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialHelpBlock.java
@@ -20,8 +20,11 @@
package gwt.material.design.client.ui;
import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.ui.HasText;
import gwt.material.design.client.base.HasIcon;
+import gwt.material.design.client.base.HasSafeText;
import gwt.material.design.client.base.mixin.TextMixin;
import gwt.material.design.client.constants.Color;
import gwt.material.design.client.constants.IconPosition;
@@ -29,7 +32,7 @@
import gwt.material.design.client.constants.IconType;
import gwt.material.design.client.ui.html.Div;
-public class MaterialHelpBlock extends Div implements HasText, HasIcon {
+public class MaterialHelpBlock extends Div implements HasSafeText, HasText, HasIcon {
private MaterialIcon icon = new MaterialIcon();
private TextMixin textMixin;
@@ -48,6 +51,21 @@ public void setText(String text) {
getTextMixin().setText(text);
}
+ @Override
+ public void setHtml(SafeHtml html) {
+ getTextMixin().setHtml(html);
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ getTextMixin().setSanitizer(sanitizer);
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return getTextMixin().getSanitizer();
+ }
+
@Override
public MaterialIcon getIcon() {
return icon;
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialLabel.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialLabel.java
index 893dd452d..549cb50d6 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialLabel.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialLabel.java
@@ -20,8 +20,11 @@
package gwt.material.design.client.ui;
import com.google.gwt.dom.client.Document;
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.ui.HasText;
import gwt.material.design.client.base.AbstractValueWidget;
+import gwt.material.design.client.base.HasSafeText;
import gwt.material.design.client.base.mixin.TextMixin;
import gwt.material.design.client.base.mixin.ToggleStyleMixin;
import gwt.material.design.client.constants.Color;
@@ -42,7 +45,7 @@
* @see Material Design Specification
*/
//@formatter:on
-public class MaterialLabel extends AbstractValueWidget implements HasText {
+public class MaterialLabel extends AbstractValueWidget implements HasSafeText, HasText {
private boolean secondary;
private TextMixin textMixin;
@@ -79,6 +82,21 @@ public void setText(String text) {
setValue(text, true);
}
+ @Override
+ public void setHtml(SafeHtml html) {
+ getTextMixin().setHtml(html);
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ getTextMixin().setSanitizer(sanitizer);
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return getTextMixin().getSanitizer();
+ }
+
@Override
public void setValue(String value, boolean fireEvents) {
getTextMixin().setText(value);
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialTitle.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialTitle.java
index ff0315bfb..48e211004 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialTitle.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialTitle.java
@@ -106,12 +106,12 @@ public Paragraph getParagraph() {
@Override
public void setValue(String value, boolean fireEvents) {
- header.getElement().setInnerSafeHtml(SafeHtmlUtils.fromString(value));
+ header.setText(value);
super.setValue(value, fireEvents);
}
@Override
public String getValue() {
- return SafeHtmlUtils.fromString(header.getElement().getInnerHTML()).asString();
+ return header.getText();
}
}
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialValueBox.java b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialValueBox.java
index b6affda9b..cba44d13b 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialValueBox.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/MaterialValueBox.java
@@ -235,7 +235,7 @@ public String getPlaceholder() {
public void setPlaceholder(String placeholder) {
valueBoxBase.getElement().setAttribute("placeholder", placeholder);
- if (!label.getText().isEmpty()) {
+ if (label.getText() != null && !label.getText().isEmpty()) {
label.setStyleName(CssName.ACTIVE);
}
}
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/html/Heading.java b/gwt-material/src/main/java/gwt/material/design/client/ui/html/Heading.java
index bbdb06f38..d7317545d 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/html/Heading.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/html/Heading.java
@@ -20,13 +20,16 @@
package gwt.material.design.client.ui.html;
import com.google.gwt.dom.client.Document;
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.user.client.ui.HasText;
+import gwt.material.design.client.base.HasSafeText;
import gwt.material.design.client.base.MaterialWidget;
import gwt.material.design.client.base.mixin.TextMixin;
import gwt.material.design.client.constants.HeadingSize;
-public class Heading extends MaterialWidget implements HasText {
+public class Heading extends MaterialWidget implements HasSafeText, HasText {
private TextMixin textMixin;
@@ -49,6 +52,21 @@ public void setText(String text) {
getTextMixin().setText(text);
}
+ @Override
+ public void setHtml(SafeHtml html) {
+ getTextMixin().setHtml(html);
+ }
+
+ @Override
+ public void setSanitizer(HtmlSanitizer sanitizer) {
+ getTextMixin().setSanitizer(sanitizer);
+ }
+
+ @Override
+ public HtmlSanitizer getSanitizer() {
+ return getTextMixin().getSanitizer();
+ }
+
public TextMixin getTextMixin() {
if (textMixin == null) {
textMixin = new TextMixin<>(this);
diff --git a/gwt-material/src/main/java/gwt/material/design/client/ui/html/Label.java b/gwt-material/src/main/java/gwt/material/design/client/ui/html/Label.java
index 4609bbae2..7bcf77ba7 100644
--- a/gwt-material/src/main/java/gwt/material/design/client/ui/html/Label.java
+++ b/gwt-material/src/main/java/gwt/material/design/client/ui/html/Label.java
@@ -19,10 +19,16 @@
*/
package gwt.material.design.client.ui.html;
+import com.google.gwt.safehtml.shared.HtmlSanitizer;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.DOM;
+import gwt.material.design.client.base.HasSafeText;
import gwt.material.design.client.base.MaterialWidget;
+import gwt.material.design.client.base.mixin.TextMixin;
-public class Label extends MaterialWidget {
+public class Label extends MaterialWidget implements HasSafeText {
+
+ private TextMixin