mirror of
https://github.com/humhub/humhub.git
synced 2025-01-18 06:38:14 +01:00
131 lines
4.1 KiB
JavaScript
131 lines
4.1 KiB
JavaScript
/**
|
|
* Handling search menu user input
|
|
*/
|
|
|
|
$(document).ready(function () {
|
|
|
|
// declare variable for ajax request
|
|
var _request;
|
|
var chosenSearch = "";
|
|
|
|
/**
|
|
* Show and navigate through search resutls depends on user input
|
|
*/
|
|
$('#search-menu-search').keyup(function (event) {
|
|
|
|
|
|
if (event.keyCode == 40) {
|
|
|
|
// select next <li> element
|
|
if (chosenSearch === "") {
|
|
chosenSearch = 1;
|
|
} else if ((chosenSearch + 1) < $('#search-menu-dropdown li ul li').length) {
|
|
chosenSearch++;
|
|
}
|
|
$('#search-menu-dropdown li ul li').removeClass('selected');
|
|
$('#search-menu-dropdown li ul li:eq(' + chosenSearch + ')').addClass('selected');
|
|
return false;
|
|
|
|
} else if (event.keyCode == 38) {
|
|
|
|
// select previous <li> element
|
|
if (chosenSearch === "") {
|
|
chosenSearch = 0;
|
|
} else if (chosenSearch > 0) {
|
|
chosenSearch--;
|
|
}
|
|
$('#search-menu-dropdown li ul li').removeClass('selected');
|
|
$('#search-menu-dropdown li ul li:eq(' + chosenSearch + ')').addClass('selected');
|
|
return false;
|
|
|
|
} else if (event.keyCode == 13) {
|
|
|
|
// checking if results existing
|
|
if ($('#search-menu-dropdown li ul li').size() > 1) {
|
|
// move to selected space, by hitting enter
|
|
window.location.href = $('#search-menu-dropdown li ul li.selected a').attr('href');
|
|
}
|
|
|
|
} else {
|
|
|
|
// show search reset icon
|
|
$('#search-search-reset').fadeIn('fast');
|
|
|
|
// empty variable
|
|
chosenSearch = "";
|
|
|
|
// create ajax object
|
|
_request = jQuery.ajax();
|
|
|
|
// get content form input field
|
|
var _searchString = $(this).val();
|
|
|
|
if (_searchString.length >= 3) {
|
|
|
|
// cancel current ajax request
|
|
_request.abort();
|
|
|
|
$('#search-menu-dropdown li:not(:first)').remove();
|
|
|
|
// DOM elements to show the loader
|
|
var _menuStructure = '<li class="divider"></li><li><ul class="media-list"><li id="loader_search"><div class="loader"><div class="sk-spinner sk-spinner-three-bounce"><div class="sk-bounce1"></div><div class="sk-bounce2"></div><div class="sk-bounce3"></div></div></div></li></ul></li>';
|
|
|
|
// add the DOM element to search dropdown menu
|
|
$('#search-menu-dropdown').append(_menuStructure);
|
|
|
|
_request = $.ajax({
|
|
'type': 'GET',
|
|
'url': searchAjaxUrl.replace('-searchKeyword-', _searchString),
|
|
'cache': false,
|
|
'data': jQuery(this).parents("form").serialize(),
|
|
'success': function (html) {
|
|
jQuery("#loader_search").replaceWith(html);
|
|
|
|
// add selection to the first space entry
|
|
$('#search-menu-dropdown li ul li:eq(0)').addClass('selected');
|
|
|
|
// add new highlight matching strings
|
|
$("#search-menu-dropdown li").highlight($('#search-menu-search').val());
|
|
}});
|
|
|
|
} else {
|
|
if (_searchString == 0) {
|
|
resetSearch();
|
|
}
|
|
}
|
|
}
|
|
|
|
})
|
|
|
|
/**
|
|
* Disable key events
|
|
*/
|
|
$('#search-menu-search').keydown(function (event) {
|
|
|
|
// deactivate the standard behavior for arrow keys
|
|
if (event.keyCode == 40 || event.keyCode == 38 || event.keyCode == 13) {
|
|
event.preventDefault();
|
|
}
|
|
})
|
|
|
|
|
|
/**
|
|
* Click handler to reset user input
|
|
*/
|
|
$('#search-search-reset').click(function () {
|
|
resetSearch();
|
|
})
|
|
|
|
|
|
/**
|
|
* Reset user input
|
|
*/
|
|
function resetSearch() {
|
|
$('#search-search-reset').fadeOut('fast');
|
|
$('#search-menu-search').val('');
|
|
$('#search-menu-search').focus();
|
|
|
|
$('#search-menu-dropdown li:not(:first)').remove();
|
|
}
|
|
|
|
}); |