Select Git revision
SchemaProvider.php
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
-
Marcus Eibrink-Lunzenauer authoredMarcus Eibrink-Lunzenauer authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
global_search.js 9.17 KiB
const GlobalSearch = {
lastSearch: null,
/**
* Toggles visibility of search input field and hints.
* @param visible boolean indicating whether shown or not
* @param cleanup boolean whether to clear search term and results
* @returns {boolean}
*/
toggleSearchBar: function(visible, cleanup) {
$('#globalsearch-searchbar').toggleClass('is-visible', visible);
$('#globalsearch-input').attr('aria-expanded', visible ? 'true' : 'false');
$('#globalsearch-input').toggleClass('hidden-small-down', !visible);
$('#globalsearch-icon').toggleClass('hidden-small-down', visible);
$('#globalsearch-clear').toggleClass('hidden-small-down', !visible);
if (!visible && cleanup) {
GlobalSearch.lastSearch = null;
$('#globalsearch-searchbar').removeClass('has-value');
$('#globalsearch-results').html('');
$('#globalsearch-input').blur().val('');
}
$('html:not(.size-large)').toggleClass('globalsearch-visible', visible);
return false;
},
/**
* Performs the actual search.
*/
doSearch: function() {
var searchterm = $('#globalsearch-input').val().trim();
var hasValue = searchterm.length >= 3;
var results = $();
var resultsDiv = $('#globalsearch-results');
var resultsPerType = resultsDiv.data('results-per-type');
var moreResultsText = resultsDiv.data('more-results');
var limit = resultsPerType * 3;
var wrapper = $('#globalsearch-searchbar');
if (searchterm === '') {
return;
}
wrapper.toggleClass('has-value', hasValue);
if (!hasValue || GlobalSearch.lastSearch === searchterm) {
return;
}
GlobalSearch.lastSearch = searchterm;
// Display spinner symbol, user should always see something is happening.
wrapper.addClass('is-searching');
// Call AJAX endpoint and get search results.
$.getJSON(STUDIP.URLHelper.getURL('dispatch.php/globalsearch/find/' + limit, {}, true), {
search: searchterm,
filters: '{"category":"show_all_categories","semester":"future"}'
}).done(function(json) {
resultsDiv.empty();
// No results found...
if (!$.isPlainObject(json) || $.isEmptyObject(json)) {
wrapper.removeClass('is-searching');
resultsDiv.html(resultsDiv.data('no-result'));
return;
}