- {{#recommended}}
- {{>core_course/chooser_item}}
- {{/recommended}}
+
-
-
- {{#default}}
- {{>core_course/chooser_item}}
- {{/default}}
+
+
+ {{#recommended}}
+ {{>core_course/chooser_item}}
+ {{/recommended}}
+
+
+
+
+ {{#default}}
+ {{>core_course/chooser_item}}
+ {{/default}}
+
diff --git a/course/templates/chooser_search.mustache b/course/templates/chooser_search.mustache
new file mode 100644
index 00000000000..68be1ea8402
--- /dev/null
+++ b/course/templates/chooser_search.mustache
@@ -0,0 +1,50 @@
+{{!
+ This file is part of Moodle - http://moodle.org/
+
+ Moodle is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Moodle is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Moodle. If not, see
.
+}}
+{{!
+ @template core_course/chooser_search
+
+ Chooser search template.
+
+ Example context (json):
+ {}
+}}
+
+
+
diff --git a/course/templates/chooser_search_results.mustache b/course/templates/chooser_search_results.mustache
new file mode 100644
index 00000000000..44d9f1b4602
--- /dev/null
+++ b/course/templates/chooser_search_results.mustache
@@ -0,0 +1,40 @@
+{{!
+ This file is part of Moodle - http://moodle.org/
+
+ Moodle is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Moodle is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Moodle. If not, see
.
+}}
+{{!
+ @template core_course/chooser_search_results
+
+ Chooser search results template.
+
+ Example context (json):
+ {
+ "searchresultsnumber": "10",
+ "searchresults": {
+ "label": "Option name",
+ "description": "Option description",
+ "urls": {
+ "addoption": "http://addoptionurl.com"
+ },
+ "icon": "

"
+ }
+ }
+}}
+
{{#str}} resultsfound, core, {{searchresultsnumber}} {{/str}}
+
+ {{#searchresults}}
+ {{>core_course/chooser_item}}
+ {{/searchresults}}
+
diff --git a/lang/en/moodle.php b/lang/en/moodle.php
index 36e7b775cda..39595d073bd 100644
--- a/lang/en/moodle.php
+++ b/lang/en/moodle.php
@@ -247,6 +247,7 @@ $string['changesmadereallygoaway'] = 'You have made changes. Are you sure you wa
$string['city'] = 'City/town';
$string['cleaningtempdata'] = 'Cleaning temp data';
$string['clear'] = 'Clear';
+$string['clearsearch'] = 'Clear search input';
$string['clickhelpiconformoreinfo'] = '... continues ... Click on the help icon to read the full article';
$string['clickhere'] = 'Click here ...';
$string['clicktohideshow'] = 'Click to expand or collapse';
@@ -1724,6 +1725,7 @@ $string['resourcedisplayopen'] = 'Open';
$string['resourcedisplaypopup'] = 'In pop-up';
$string['resources'] = 'Resources';
$string['resources_help'] = 'Resource types enable almost any kind of web content to be inserted into the course.';
+$string['resultsfound'] = '{$a} results found';
$string['restore'] = 'Restore';
$string['restorecancelled'] = 'Restore cancelled';
$string['restorecannotassignroles'] = 'Restore needs to assign roles and you do not have permission to do so';
@@ -1789,6 +1791,7 @@ $string['search_help'] = 'For basic searching of one or more words anywhere in t
For advanced searching, press the search button without typing anything in the search box to access the advanced search form.';
$string['searchagain'] = 'Search again';
+$string['searchactivities'] = 'Search for activities by name or description';
$string['searchbyemail'] = 'Search by email address';
$string['searchbyusername'] = 'Search by username';
$string['searchcourses'] = 'Search courses';
diff --git a/lib/classes/output/icon_system_fontawesome.php b/lib/classes/output/icon_system_fontawesome.php
index 74fab989386..8f7076092d3 100644
--- a/lib/classes/output/icon_system_fontawesome.php
+++ b/lib/classes/output/icon_system_fontawesome.php
@@ -85,6 +85,7 @@ class icon_system_fontawesome extends icon_system_font {
'core:e/bold' => 'fa-bold',
'core:e/bullet_list' => 'fa-list-ul',
'core:e/cancel' => 'fa-times',
+ 'core:e/cancel_solid_circle' => 'fas fa-times-circle',
'core:e/cell_props' => 'fa-info',
'core:e/cite' => 'fa-quote-right',
'core:e/cleanup_messy_code' => 'fa-eraser',
diff --git a/theme/boost/scss/moodle/core.scss b/theme/boost/scss/moodle/core.scss
index 8fd7052ab0c..4e6fbb68956 100644
--- a/theme/boost/scss/moodle/core.scss
+++ b/theme/boost/scss/moodle/core.scss
@@ -1528,7 +1528,51 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
overflow-y: hidden;
}
-.modchoosercontainer .optionscontainer {
+.modchooser .searchcontainer .searchbar {
+
+ .searchinput {
+ font-size: inherit;
+ border: 1px solid #dee2e6;
+ border-top-left-radius: .3rem;
+ border-bottom-left-radius: .3rem;
+ border-right: none;
+ }
+
+ .searchbar-append {
+ align-items: center;
+ border: 1px solid #dee2e6;
+ border-left: none;
+ border-top-right-radius: .3rem;
+ border-bottom-right-radius: .3rem;
+
+ i {
+ color: #868e96;
+ margin: 0;
+ vertical-align: middle;
+ }
+
+ .clear {
+
+ i {
+ height: 23px;
+ width: 23px;
+ font-size: 23px;
+ pointer-events: none;
+ }
+ }
+ .search-icon {
+
+ i {
+ height: 20px;
+ width: 20px;
+ font-size: 20px;
+ }
+ }
+ }
+}
+
+.modchoosercontainer .optionscontainer,
+.modchoosercontainer .searchresultitemscontainer {
overflow-x: hidden;
.option {
// Six items per line.
@@ -1592,7 +1636,8 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
}
@include media-breakpoint-down(lg) {
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
// Five items per line.
flex-basis: 20%;
}
@@ -1607,13 +1652,15 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
.modchooser .modal-body .carousel-item,
.modchooser .modal-body .optionsummary,
.modchoosercontainer,
- .optionscontainer {
+ .optionscontainer,
+ .searchresultitemscontainer {
height: 100%;
}
.path-course-view .modal-dialog.modal-lg {
margin: 0;
}
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
// Four items per line.
flex-basis: 25%;
}
diff --git a/theme/boost/style/moodle.css b/theme/boost/style/moodle.css
index 91f87b5841d..46b4d2ca779 100644
--- a/theme/boost/style/moodle.css
+++ b/theme/boost/style/moodle.css
@@ -10666,23 +10666,58 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
.modchoosercontainer.noscroll {
overflow-y: hidden; }
-.modchoosercontainer .optionscontainer {
+.modchooser .searchcontainer .searchbar .searchinput {
+ font-size: inherit;
+ border: 1px solid #dee2e6;
+ border-top-left-radius: .3rem;
+ border-bottom-left-radius: .3rem;
+ border-right: none; }
+
+.modchooser .searchcontainer .searchbar .searchbar-append {
+ align-items: center;
+ border: 1px solid #dee2e6;
+ border-left: none;
+ border-top-right-radius: .3rem;
+ border-bottom-right-radius: .3rem; }
+ .modchooser .searchcontainer .searchbar .searchbar-append i {
+ color: #868e96;
+ margin: 0;
+ vertical-align: middle; }
+ .modchooser .searchcontainer .searchbar .searchbar-append .clear i {
+ height: 23px;
+ width: 23px;
+ font-size: 23px;
+ pointer-events: none; }
+ .modchooser .searchcontainer .searchbar .searchbar-append .search-icon i {
+ height: 20px;
+ width: 20px;
+ font-size: 20px; }
+
+.modchoosercontainer .optionscontainer,
+.modchoosercontainer .searchresultitemscontainer {
overflow-x: hidden; }
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
flex-basis: 16%; }
- .modchoosercontainer .optionscontainer .option .optionactions .optionaction {
+ .modchoosercontainer .optionscontainer .option .optionactions .optionaction,
+ .modchoosercontainer .searchresultitemscontainer .option .optionactions .optionaction {
cursor: pointer;
margin: 0.2rem;
color: #868e96; }
- .modchoosercontainer .optionscontainer .option .optionactions .optionaction i {
+ .modchoosercontainer .optionscontainer .option .optionactions .optionaction i,
+ .modchoosercontainer .searchresultitemscontainer .option .optionactions .optionaction i {
margin: 0; }
- .modchoosercontainer .optionscontainer .option .optioninfo a {
+ .modchoosercontainer .optionscontainer .option .optioninfo a,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a {
color: #495057; }
- .modchoosercontainer .optionscontainer .option .optioninfo a:hover {
+ .modchoosercontainer .optionscontainer .option .optioninfo a:hover,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a:hover {
text-decoration: none; }
- .modchoosercontainer .optionscontainer .option .optioninfo a .optionname {
+ .modchoosercontainer .optionscontainer .option .optioninfo a .optionname,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a .optionname {
margin-top: 0.5em; }
- .modchoosercontainer .optionscontainer .option .optioninfo a .optionicon .icon {
+ .modchoosercontainer .optionscontainer .option .optioninfo a .optionicon .icon,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a .optionicon .icon {
margin: 0;
padding: 0;
width: 32px;
@@ -10707,7 +10742,8 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
background: #fff; }
@media (max-width: 1199.98px) {
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
flex-basis: 20%; } }
@media (max-width: 575.98px) {
@@ -10719,11 +10755,13 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
.modchooser .modal-body .carousel-item,
.modchooser .modal-body .optionsummary,
.modchoosercontainer,
- .optionscontainer {
+ .optionscontainer,
+ .searchresultitemscontainer {
height: 100%; }
.path-course-view .modal-dialog.modal-lg {
margin: 0; }
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
flex-basis: 25%; } }
/* Form element: listing */
diff --git a/theme/classic/style/moodle.css b/theme/classic/style/moodle.css
index 9a252daf903..8a004953aba 100644
--- a/theme/classic/style/moodle.css
+++ b/theme/classic/style/moodle.css
@@ -10873,23 +10873,58 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
.modchoosercontainer.noscroll {
overflow-y: hidden; }
-.modchoosercontainer .optionscontainer {
+.modchooser .searchcontainer .searchbar .searchinput {
+ font-size: inherit;
+ border: 1px solid #dee2e6;
+ border-top-left-radius: .3rem;
+ border-bottom-left-radius: .3rem;
+ border-right: none; }
+
+.modchooser .searchcontainer .searchbar .searchbar-append {
+ align-items: center;
+ border: 1px solid #dee2e6;
+ border-left: none;
+ border-top-right-radius: .3rem;
+ border-bottom-right-radius: .3rem; }
+ .modchooser .searchcontainer .searchbar .searchbar-append i {
+ color: #868e96;
+ margin: 0;
+ vertical-align: middle; }
+ .modchooser .searchcontainer .searchbar .searchbar-append .clear i {
+ height: 23px;
+ width: 23px;
+ font-size: 23px;
+ pointer-events: none; }
+ .modchooser .searchcontainer .searchbar .searchbar-append .search-icon i {
+ height: 20px;
+ width: 20px;
+ font-size: 20px; }
+
+.modchoosercontainer .optionscontainer,
+.modchoosercontainer .searchresultitemscontainer {
overflow-x: hidden; }
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
flex-basis: 16%; }
- .modchoosercontainer .optionscontainer .option .optionactions .optionaction {
+ .modchoosercontainer .optionscontainer .option .optionactions .optionaction,
+ .modchoosercontainer .searchresultitemscontainer .option .optionactions .optionaction {
cursor: pointer;
margin: 0.2rem;
color: #868e96; }
- .modchoosercontainer .optionscontainer .option .optionactions .optionaction i {
+ .modchoosercontainer .optionscontainer .option .optionactions .optionaction i,
+ .modchoosercontainer .searchresultitemscontainer .option .optionactions .optionaction i {
margin: 0; }
- .modchoosercontainer .optionscontainer .option .optioninfo a {
+ .modchoosercontainer .optionscontainer .option .optioninfo a,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a {
color: #495057; }
- .modchoosercontainer .optionscontainer .option .optioninfo a:hover {
+ .modchoosercontainer .optionscontainer .option .optioninfo a:hover,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a:hover {
text-decoration: none; }
- .modchoosercontainer .optionscontainer .option .optioninfo a .optionname {
+ .modchoosercontainer .optionscontainer .option .optioninfo a .optionname,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a .optionname {
margin-top: 0.5em; }
- .modchoosercontainer .optionscontainer .option .optioninfo a .optionicon .icon {
+ .modchoosercontainer .optionscontainer .option .optioninfo a .optionicon .icon,
+ .modchoosercontainer .searchresultitemscontainer .option .optioninfo a .optionicon .icon {
margin: 0;
padding: 0;
width: 32px;
@@ -10914,7 +10949,8 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
background: #fff; }
@media (max-width: 1199.98px) {
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
flex-basis: 20%; } }
@media (max-width: 575.98px) {
@@ -10926,11 +10962,13 @@ body#page-lib-editor-tinymce-plugins-moodlemedia-preview {
.modchooser .modal-body .carousel-item,
.modchooser .modal-body .optionsummary,
.modchoosercontainer,
- .optionscontainer {
+ .optionscontainer,
+ .searchresultitemscontainer {
height: 100%; }
.path-course-view .modal-dialog.modal-lg {
margin: 0; }
- .modchoosercontainer .optionscontainer .option {
+ .modchoosercontainer .optionscontainer .option,
+ .modchoosercontainer .searchresultitemscontainer .option {
flex-basis: 25%; } }
/* Form element: listing */