Skip to content
Snippets Groups Projects
Select Git revision
  • 9b6bd7e747bd5ed44d169a8e1baee0e519d209d6
  • main default protected
  • studip-rector
  • ci-opt
  • course-members-export-as-word
  • data-vue-app
  • pipeline-improvements
  • webpack-optimizations
  • rector
  • icon-renewal
  • http-client-and-factories
  • jsonapi-atomic-operations
  • vueify-messages
  • tic-2341
  • 135-translatable-study-areas
  • extensible-sorm-action-parameters
  • sorm-configuration-trait
  • jsonapi-mvv-routes
  • docblocks-for-magic-methods
19 results

SchemaProvider.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    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;
                }