diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java index e87e730e2c49c4457e4aba0f857da415fc3c83d9..e04c05cecd0e56ca117cf7171c936fc6ed910c9b 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java @@ -76,9 +76,7 @@ public class TextBoxListElementImpl extends AbstractTextElement implements TextB } else { //this one handle multipart/form too String submitValue = getRootForm().getRequestParameter(inputId); - if(StringHelper.containsNonWhitespace(submitValue)) { - component.setCmd(ureq, submitValue); - } + component.setCmd(ureq, submitValue); } } diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java index 9b47bca26fb34f96e8a42ee14a3b48fce84b9b84..cc7919b14d3471040279983014701ea0ad24b487 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java +++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java @@ -153,9 +153,10 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl { } public void setCmd(UserRequest ureq, String cmd) { - if(!StringHelper.containsNonWhitespace(cmd)) { + if(cmd == null) { return; } + // empty string is ok = empty text box String[] splitted = cmd.split(","); List<String> cleanedItemValues = new ArrayList<String>(); @@ -434,12 +435,13 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl { } /** - * returns a the initialItems as comma-separated list.<br /> + * returns a the current items as comma-separated list.<br /> * * @return An HTML escaped list of item */ - protected String getInitialItemsAsString() { - Map<String, String> content = getInitialItems(); + protected String getItemsAsString() { + Map<String, String> content = getCurrentItems(); + if (content != null && content.size() != 0) { //antisamy + escaping to prevent issue with the javascript code OWASPAntiSamyXSSFilter filter = new OWASPAntiSamyXSSFilter(); diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java index 97cc01b4979791c8418fa3867143106ddf2acf07..f98e9376255362517c363c62736d4b9e59c035fa 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java +++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java @@ -30,6 +30,8 @@ import org.olat.core.gui.render.Renderer; import org.olat.core.gui.render.StringOutput; import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.translator.Translator; +import org.olat.core.util.Formatter; +import org.olat.core.util.Util; /** * Description:<br> @@ -57,7 +59,7 @@ public class TextBoxListRenderer extends DefaultComponentRenderer { TextBoxListComponent tblComponent = (TextBoxListElementComponent) source; if (tblComponent.isEnabled()) { - renderEnabledMode(tblComponent, sb); + renderEnabledMode(tblComponent, sb, translator); } else { renderDisabledMode(tblComponent, sb); } @@ -72,18 +74,20 @@ public class TextBoxListRenderer extends DefaultComponentRenderer { * the StringOutput * @param translator */ - private void renderEnabledMode(TextBoxListComponent tblComponent, StringOutput sb) { + private void renderEnabledMode(TextBoxListComponent tblComponent, StringOutput sb, Translator translator) { TextBoxListElementImpl te = ((TextBoxListElementComponent)tblComponent).getTextElementImpl(); Form rootForm = te.getRootForm(); String dispatchId = tblComponent.getFormDispatchId(); - String initialValue = tblComponent.getInitialItemsAsString(); + String initialValue = tblComponent.getItemsAsString(); sb.append("<input type='text' id='textboxlistinput").append(dispatchId).append("'") .append(" name='textboxlistinput").append(dispatchId).append("'"); if (te.hasFocus()) { sb.append(" autofocus"); } - sb.append(" value='").append(initialValue).append("' />\n"); + sb.append(" value='").append(initialValue).append("'"); + Translator myTrans = Util.createPackageTranslator(this.getClass(), translator.getLocale()); + sb.append(" placeholder='").append(Formatter.escapeDoubleQuotes(myTrans.translate("add.enter"))).append("' class='o_textbox'/>\n"); String o_ffEvent = FormJSHelper.getJSFnCallFor(rootForm, dispatchId, 2); // generate the JS-code for the bootstrap tagsinput @@ -116,11 +120,13 @@ public class TextBoxListRenderer extends DefaultComponentRenderer { private void renderDisabledMode(TextBoxListComponent tblComponent, StringOutput output) { // read only view, we just display the initialItems as // comma-separated string - String readOnlyContent = tblComponent.getInitialItemsAsString(); + String readOnlyContent = tblComponent.getItemsAsString(); if (readOnlyContent.length() > 0) { - output.append("<div><i class='o_icon o_icon_tags'> </i> ") - .append(readOnlyContent) - .append("</div>"); + output.append("<span class='o_textbox_disabled'><i class='o_icon o_icon_tags'> </i> "); + for (String item : readOnlyContent.split(",")) { + output.append("<span class='tag label label-info'>").append(item.trim()).append("</span>"); + } + output.append("</span>"); } else { output.append("-"); } diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties index 26a2de17429b57e840ada3623aeaae03bd2d403f..46a6d684d4ce87e1443a1857da1c80eb33b08396 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties @@ -2,3 +2,4 @@ add.new.element.prefix=Hinzuf\u00fcgen please.wait.searching=Bitte warten. Suche nach: more.results.found.specify.search=Es wurden noch weitere Resultate gefunden, bitte Suche verfeinern. default.input.hint=Klicken Sie hier, um ein Element hinzuzuf\u00fcgen. Mehrere Elemente k\u00f6nnen mit Komma getrennt werden. +add.enter=Eingabe mit \u23CE abschliessen \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties index 6b01f8f346cef0f37b83a197308d53aad679375a..fb0744da518fb873cd240d703ce86f5dadda33df 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties @@ -3,3 +3,4 @@ add.new.element.prefix=Add default.input.hint=Click here to add an element. Several elements can be separated by commas. more.results.found.specify.search=More search results found. Please refine your search. please.wait.searching=Please be patient. Searching for\: +add.enter=Terminate input with \u23CE \ No newline at end of file