/** * Search Navbar */ 'use strict'; $(function () { window.Helpers.initSidebarToggle(); // Toggle Universal Sidebar // Navbar Search with autosuggest (typeahead) var searchToggler = $('.search-toggler'), searchInputWrapper = $('.search-input-wrapper'), searchInput = $('.search-input'), contentBackdrop = $('.content-backdrop'); // Open search input on click of search icon if (searchToggler.length) { searchToggler.on('click', function () { if (searchInputWrapper.length) { searchInputWrapper.toggleClass('d-none'); searchInput.trigger('focus'); } }); document.addEventListener('keydown', function (event) { const ctrlKey = event.ctrlKey; const slashKey = event.key === '/'; // Usa 'key' para obtener la tecla como texto if (ctrlKey && slashKey) { const searchInputWrapper = document.querySelector('.search-input-wrapper'); const searchInput = document.querySelector('.search-input'); if (searchInputWrapper) { searchInputWrapper.classList.toggle('d-none'); // Alterna la visibilidad if (searchInput) { searchInput.focus(); // Coloca el foco en el input } } } }); // Note: Following code is required to update container class of typeahead dropdown width on focus of search input. setTimeout is required to allow time to initiate Typeahead UI. setTimeout(function () { var twitterTypeahead = $('.twitter-typeahead'); searchInput.on('focus', function () { if (searchInputWrapper.hasClass('container-xxl')) { searchInputWrapper.find(twitterTypeahead).addClass('container-xxl'); twitterTypeahead.removeClass('container-fluid'); } else if (searchInputWrapper.hasClass('container-fluid')) { searchInputWrapper.find(twitterTypeahead).addClass('container-fluid'); twitterTypeahead.removeClass('container-xxl'); } }); }, 10); } if (searchInput.length) { // Función para normalizar cadenas (eliminar acentos) function normalizeString(str) { return str .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase(); } // Filter config con soporte para ignorar acentos var filterConfig = function (data) { return function findMatches(q, cb) { let matches = []; // Normalizar la consulta const normalizedQuery = normalizeString(q); data.filter(function (i) { const normalizedName = normalizeString(i.name); if (normalizedName.startsWith(normalizedQuery)) { matches.push(i); } else if ( !normalizedName.startsWith(normalizedQuery) && normalizedName.includes(normalizedQuery) ) { matches.push(i); // Ordenar por coincidencia secundaria matches.sort(function (a, b) { return b.name < a.name ? 1 : -1; }); } }); cb(matches); }; }; // Search JSON var searchJson = 'search-navbar'; // For vertical layout if ($('#layout-menu').hasClass('menu-horizontal')) { var searchJson = 'search-navbar'; // For vertical layout } // Search API AJAX call var searchData = $.ajax({ url: assetsPath + '../../admin/' + searchJson, //? Use your own search api instead dataType: 'json', async: false }).responseJSON; // Init typeahead on searchInput searchInput.each(function () { var $this = $(this); searchInput .typeahead( { hint: false, classNames: { menu: 'tt-menu navbar-search-suggestion', cursor: 'active', suggestion: 'suggestion d-flex justify-content-between px-4 py-2 w-100' } }, // Páginas { name: 'pages', display: 'name', limit: 8, source: filterConfig(searchData.pages), templates: { header: '
No se encontro resultados
' + '