MDL-69107 form_autocomplete: Rewrite item selection
[moodle.git] / lib / templates / form_autocomplete_input.mustache
1 {{!
2     This file is part of Moodle - http://moodle.org/
4     Moodle is free software: you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation, either version 3 of the License, or
7     (at your option) any later version.
9     Moodle is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
14     You should have received a copy of the GNU General Public License
15     along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16 }}
17 {{!
18     @template core/form_autocomplete_input
20     Moodle template for the input field in an autocomplate form element.
22     Classes required for JS:
23     * none
25     Data attributes required for JS:
26     * none
28     Context variables required for this template:
29     * inputId The dom id of this input field.
30     * suggestionsId The dom id of the suggestions list.
31     * selectionId The dom id of the current selection list.
32     * downArrowId The dom id of the down arrow to open the suggestions.
33     * placeholder The place holder text when the field is empty
35     Example context (json):
36     { "inputID": 1, "suggestionsId": 2, "selectionId": 3, "downArrowId": 4, "placeholder": "Select something" }
37 }}
38 {{#showSuggestions}}
39 <div class="d-md-inline-block mr-md-2 position-relative">
40     <input type="text"{{!
41     }} id="{{inputId}}"{{!
42     }} class="form-control"{{!
43     }} list="{{suggestionsId}}"{{!
44     }} placeholder="{{placeholder}}"{{!
45     }} role="combobox"{{!
46     }} aria-expanded="false"{{!
47     }} autocomplete="off"{{!
48     }} autocorrect="off"{{!
49     }} autocapitalize="off"{{!
50     }} aria-autocomplete="list"{{!
51     }} aria-owns="{{suggestionsId}} {{selectionId}}"{{!
52     }} {{#tags}}data-tags="1"{{/tags}}{{!
53     }} {{#multiple}}data-multiple="multiple"{{/multiple}}{{!
54     }}>
55     <span class="form-autocomplete-downarrow position-absolute p-1" id="{{downArrowId}}">&#x25BC;</span>
56 </div>
57 {{/showSuggestions}}
58 {{^showSuggestions}}
59 <div class="d-md-inline-block mr-md-2">
60     <input type="text"{{!
61     }} id="{{inputId}}"{{!
62     }} class="form-control"{{!
63     }} placeholder="{{placeholder}}"{{!
64     }} role="textbox"{{!
65     }} aria-owns="{{selectionId}}"{{!
66     }} {{#tags}}data-tags="1"{{/tags}}{{!
67     }} {{#multiple}}data-multiple="multiple"{{/multiple}}{{!
68     }}>
69 </div>
70 {{/showSuggestions}}
72 {{#js}}
73 require(['jquery'], function($) {
74     // Set the minimum width of the input so that the placeholder is whole displayed.
75     var inputElement = $(document.getElementById('{{inputId}}'));
76     if (inputElement.length) {
77         inputElement.css('min-width', inputElement.attr('placeholder').length + 'ch');
78     }
79 });
80 {{/js}}