mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-75837 core_grades: Clear search support in the base search widget
This commit is contained in:
parent
d272dcab1d
commit
23640e81e8
3 changed files with 29 additions and 2 deletions
|
@ -5,6 +5,6 @@ define("core_grades/searchwidget/basewidget",["exports","core/utils","core/templ
|
||||||
* @module core_grades/searchwidget/basewidget
|
* @module core_grades/searchwidget/basewidget
|
||||||
* @copyright 2022 Mathew May <mathew.solutions>
|
* @copyright 2022 Mathew May <mathew.solutions>
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showLoader=_exports.registerListenerEvents=_exports.promisesAndResolvers=_exports.init=void 0,Templates=_interopRequireWildcard(Templates),Selectors=_interopRequireWildcard(Selectors),_notification=(obj=_notification)&&obj.__esModule?obj:{default:obj};_exports.init=async function(widgetContentContainer,bodyPromise,data,searchFunc){let unsearchableContent=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;bodyPromise.then((async bodyContent=>{if(widgetContentContainer.innerHTML=bodyContent,unsearchableContent){widgetContentContainer.querySelector(Selectors.regions.unsearchableContent).innerHTML+=unsearchableContent}const searchResultsContainer=widgetContentContainer.querySelector(Selectors.regions.searchResults);await showLoader(searchResultsContainer),await renderSearchResults(searchResultsContainer,data),registerListenerEvents(widgetContentContainer,data,searchFunc)})).catch(_notification.default.exception)};const registerListenerEvents=(widgetContentContainer,data,searchFunc)=>{const searchResultsContainer=widgetContentContainer.querySelector(Selectors.regions.searchResults),searchInput=widgetContentContainer.querySelector(Selectors.actions.search);searchInput.addEventListener("input",(0,_utils.debounce)((async()=>{await renderSearchResults(searchResultsContainer,debounceCallee(searchInput.value,data,searchFunc()))}),300)),(0,_aria.comboBox)(searchInput)};_exports.registerListenerEvents=registerListenerEvents;const showLoader=async container=>{const{html:html,js:js}=await Templates.renderForPromise("core_grades/searchwidget/loading",{});Templates.replaceNodeContents(container,html,js)};_exports.showLoader=showLoader;const debounceCallee=(searchValue,data,searchFunction)=>searchValue.length>0?searchFunction(data,searchValue):data,renderSearchResults=async(searchResultsContainer,searchResultsData)=>{const templateData={searchresults:searchResultsData},{html:html,js:js}=await Templates.renderForPromise("core_grades/searchwidget/searchresults",templateData);await Templates.replaceNodeContents(searchResultsContainer,html,js)};_exports.promisesAndResolvers=()=>{let bodyPromiseResolver;const bodyPromise=new Promise((resolve=>{bodyPromiseResolver=resolve}));return{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}}}));
|
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showLoader=_exports.registerListenerEvents=_exports.promisesAndResolvers=_exports.init=void 0,Templates=_interopRequireWildcard(Templates),Selectors=_interopRequireWildcard(Selectors),_notification=(obj=_notification)&&obj.__esModule?obj:{default:obj};_exports.init=async function(widgetContentContainer,bodyPromise,data,searchFunc){let unsearchableContent=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;bodyPromise.then((async bodyContent=>{if(widgetContentContainer.innerHTML=bodyContent,unsearchableContent){widgetContentContainer.querySelector(Selectors.regions.unsearchableContent).innerHTML+=unsearchableContent}const searchResultsContainer=widgetContentContainer.querySelector(Selectors.regions.searchResults);await showLoader(searchResultsContainer),await renderSearchResults(searchResultsContainer,data),registerListenerEvents(widgetContentContainer,data,searchFunc)})).catch(_notification.default.exception)};const registerListenerEvents=(widgetContentContainer,data,searchFunc)=>{const searchResultsContainer=widgetContentContainer.querySelector(Selectors.regions.searchResults),searchInput=widgetContentContainer.querySelector(Selectors.actions.search),clearSearchButton=widgetContentContainer.querySelector(Selectors.actions.clearSearch);searchInput.addEventListener("input",(0,_utils.debounce)((async()=>{searchInput.value.length>0?clearSearchButton.classList.remove("d-none"):clearSearchButton.classList.add("d-none"),await renderSearchResults(searchResultsContainer,debounceCallee(searchInput.value,data,searchFunc()))}),300)),clearSearchButton.addEventListener("click",(async e=>{e.stopPropagation(),searchInput.value="",searchInput.focus(),clearSearchButton.classList.add("d-none"),await renderSearchResults(searchResultsContainer,debounceCallee(searchInput.value,data,searchFunc()))})),(0,_aria.comboBox)(searchInput)};_exports.registerListenerEvents=registerListenerEvents;const showLoader=async container=>{const{html:html,js:js}=await Templates.renderForPromise("core_grades/searchwidget/loading",{});Templates.replaceNodeContents(container,html,js)};_exports.showLoader=showLoader;const debounceCallee=(searchValue,data,searchFunction)=>searchValue.length>0?searchFunction(data,searchValue):data,renderSearchResults=async(searchResultsContainer,searchResultsData)=>{const templateData={searchresults:searchResultsData},{html:html,js:js}=await Templates.renderForPromise("core_grades/searchwidget/searchresults",templateData);await Templates.replaceNodeContents(searchResultsContainer,html,js)};_exports.promisesAndResolvers=()=>{let bodyPromiseResolver;const bodyPromise=new Promise((resolve=>{bodyPromiseResolver=resolve}));return{bodyPromiseResolver:bodyPromiseResolver,bodyPromise:bodyPromise}}}));
|
||||||
|
|
||||||
//# sourceMappingURL=basewidget.min.js.map
|
//# sourceMappingURL=basewidget.min.js.map
|
File diff suppressed because one or more lines are too long
|
@ -69,9 +69,16 @@ export const init = async(widgetContentContainer, bodyPromise, data, searchFunc,
|
||||||
export const registerListenerEvents = (widgetContentContainer, data, searchFunc) => {
|
export const registerListenerEvents = (widgetContentContainer, data, searchFunc) => {
|
||||||
const searchResultsContainer = widgetContentContainer.querySelector(Selectors.regions.searchResults);
|
const searchResultsContainer = widgetContentContainer.querySelector(Selectors.regions.searchResults);
|
||||||
const searchInput = widgetContentContainer.querySelector(Selectors.actions.search);
|
const searchInput = widgetContentContainer.querySelector(Selectors.actions.search);
|
||||||
|
const clearSearchButton = widgetContentContainer.querySelector(Selectors.actions.clearSearch);
|
||||||
|
|
||||||
// The search input is triggered.
|
// The search input is triggered.
|
||||||
searchInput.addEventListener('input', debounce(async() => {
|
searchInput.addEventListener('input', debounce(async() => {
|
||||||
|
// If search query is present display the 'clear search' button, otherwise hide it.
|
||||||
|
if (searchInput.value.length > 0) {
|
||||||
|
clearSearchButton.classList.remove('d-none');
|
||||||
|
} else {
|
||||||
|
clearSearchButton.classList.add('d-none');
|
||||||
|
}
|
||||||
// Display the search results.
|
// Display the search results.
|
||||||
await renderSearchResults(
|
await renderSearchResults(
|
||||||
searchResultsContainer,
|
searchResultsContainer,
|
||||||
|
@ -82,6 +89,26 @@ export const registerListenerEvents = (widgetContentContainer, data, searchFunc)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}, 300));
|
}, 300));
|
||||||
|
|
||||||
|
// Clear search is triggered.
|
||||||
|
clearSearchButton.addEventListener('click', async(e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
// Clear the entered search query in the search bar.
|
||||||
|
searchInput.value = "";
|
||||||
|
searchInput.focus();
|
||||||
|
clearSearchButton.classList.add('d-none');
|
||||||
|
|
||||||
|
// Display all results.
|
||||||
|
await renderSearchResults(
|
||||||
|
searchResultsContainer,
|
||||||
|
debounceCallee(
|
||||||
|
searchInput.value,
|
||||||
|
data,
|
||||||
|
searchFunc()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
// Trigger event handling for the results in line with aria guidelines.
|
// Trigger event handling for the results in line with aria guidelines.
|
||||||
comboBox(searchInput);
|
comboBox(searchInput);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue