diff --git a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/AutoCompleterController.java b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/AutoCompleterController.java index 5681a5b9bfef914ed1f319bb5e49b0c4595fcd59..d1c85ebcbc2966bc28d895355b3ad8289774ed72 100644 --- a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/AutoCompleterController.java +++ b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/AutoCompleterController.java @@ -114,6 +114,8 @@ public class AutoCompleterController extends BasicController { myContent.contextPut("inputWidth", Integer.valueOf(inputWidth)); myContent.contextPut("minChars", Integer.valueOf(minChars)); myContent.contextPut("inputValue", ""); + myContent.contextPut("inputClear", Boolean.FALSE); + myContent.contextPut("inputReadonly", Boolean.FALSE); // Create a mapper for the server responses for a given input mapper = new AutoCompleterMapper(noResults, showDisplayKey, gprovider); diff --git a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java index 031ea1eb92d9dded80cecae1c16bd156f4857806..9e8d7d5652e540e8211c0966512bb6724b8827d6 100644 --- a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java +++ b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/FlexiAutoCompleterController.java @@ -157,6 +157,8 @@ public class FlexiAutoCompleterController extends FormBasicController { layoutCont.contextPut("minChars", Integer.valueOf(minChars)); layoutCont.contextPut("flexi", Boolean.TRUE); layoutCont.contextPut("inputValue", ""); + layoutCont.contextPut("inputClear", Boolean.FALSE); + layoutCont.contextPut("inputReadonly", Boolean.FALSE); layoutCont.getComponent().addListener(this); // Create a mapper for the server responses for a given input @@ -186,8 +188,10 @@ public class FlexiAutoCompleterController extends FormBasicController { if (event.getCommand().equals(COMMAND_SELECT)) { doSelect(ureq); } else if (event.getCommand().equals(COMMAND_CHANGE)) { + flc.contextPut("inputReadonly", Boolean.FALSE); + flc.contextPut("inputClear", Boolean.FALSE); if(allowNewValues) { - fireEvent(ureq, new NewValueChosenEvent(value)); + fireEvent(ureq, new NewValueChosenEvent(value)); } else { super.event(ureq, source, event); } @@ -235,7 +239,11 @@ public class FlexiAutoCompleterController extends FormBasicController { if (!key.equals("") && !key.equals(AUTOCOMPLETER_NO_RESULT)) { // Normal case, add entry selectedEntries.add(key); + flc.contextPut("inputReadonly", Boolean.TRUE); + flc.contextPut("inputClear", Boolean.TRUE); } else if (key.equals(AUTOCOMPLETER_NO_RESULT)) { + flc.contextPut("inputReadonly", Boolean.FALSE); + flc.contextPut("inputClear", Boolean.FALSE); return; } doFireSelection(ureq, selectedEntries); diff --git a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html index 506d2e057f9e3bd59009de3c84158957f5e9a733..80ef5539e381bf5add61a1e36834ff736aa8b688 100644 --- a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html +++ b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html @@ -8,7 +8,8 @@ $autocompleter_label #end <div class="$formElementClass"> - <input type="text" size="$inputWidth" value="$inputValue" class="form-control" name='$r.getId("o_autocomplete_input")' id='$r.getId("o_autocomplete_input")' /> + <input type="text" size="$inputWidth" #if($inputReadonly)readonly="true"#{end} value="$inputValue" class="form-control" name='$r.getId("o_autocomplete_input")' id='$r.getId("o_autocomplete_input")' /> + <i id='$r.getId("o_autocomplete_input")_remove' class="#if(!$inputClear)hidden #{end}o_icon o_icon-fw o_icon_remove"></i> </div> #if($flexi) </div> @@ -62,7 +63,9 @@ jQuery(function(){ }).on('typeahead:render', function (e) { // disabled and error items should not be selectable jQuery("div.o_disabled.tt-selectable, div.o_icon_error.tt-selectable").removeClass("tt-selectable"); - }).on('typeahead:selected', function (e, object) { + }).on('typeahead:selected', function (e, object) { + jQuery('#$r.getId("o_autocomplete_input")').attr('readonly', true); + jQuery('#$r.getId("o_autocomplete_input")_remove').removeClass('hidden'); $r.openJavaScriptCommand("select"),'key',object.value, '$r.getId("o_autocomplete_input")',jQuery('#$r.getId("o_autocomplete_input")').val()); }).on('typeahead:change', function(e, value) { @@ -77,6 +80,13 @@ jQuery(function(){ return false; } }); + jQuery('#$r.getId("o_autocomplete_input")_remove').on('click', function(e) { + jQuery('#$r.getId("o_autocomplete_input")').val(''); + jQuery('#$r.getId("o_autocomplete_input")').attr('readonly', false); + jQuery('#$r.getId("o_autocomplete_input")_remove').addClass('hidden'); + $r.openJavaScriptCommand("change"),'key','', + '$r.getId("o_autocomplete_input")',''); + }); }); /* ]]> */ </script> \ No newline at end of file