1// Declarar variables globales 2let dataGlobal = []; // Almacena los resultados de la consulta 3let PaginasEncontradas = []; // Almacena las páginas encontradas 4export const allModules = ["","Ciudadanos", "Conectividad", "NuestraAlcaldia", "Proyectos", "Transparencia", "MiMunicipio"]; // Lista de todos los módulos disponibles 5 6// Función para quitar tildes de un texto 7export function quitarTildes(texto) { 8 return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); 9} 10 11// Función asincrónica para realizar la consulta en el buscador 12export async function ConsultaBuscador(terminoDeBusqueda) { 13 // Definir parámetros de la consulta 14 const folder = "Páginas"; // Carpeta en la que se realiza la búsqueda 15 const params = ["ID", "LinkFilename", "Title"]; // Campos a seleccionar en la consulta 16 17 // Normalizar el término de búsqueda eliminando tildes y convirtiéndolo a minúsculas 18 const terminoNormalizado = quitarTildes(terminoDeBusqueda.toLowerCase()); 19 20 // Limpiar los resultados anteriores en cada nueva búsqueda 21 dataGlobal = []; 22 23 // Iterar sobre todos los módulos disponibles para realizar la consulta en cada uno 24 for (const module of allModules) { 25 // Construir la URL de la consulta 26 const ulrFetch = `${location.protocol}//${location.host}/${module}/_api/web/lists/getbytitle('${folder}')/items?$select=${params}&$top=5000`; 27 28 try { 29 // Realizar la consulta utilizando fetch 30 let response = await fetch(ulrFetch, { 31 method: "GET", 32 headers: { 33 Accept: "application/json; odata=verbose", 34 }, 35 }); 36 37 // Verificar si la respuesta es exitosa 38 if (!response.ok) { 39 throw new Error(`Error en la consulta para el módulo ${module}: ${response.statusText}`); 40 } 41 42 // Obtener los datos de la respuesta en formato JSON 43 let data = await response.json(); 44 45 // Verificar que existan datos y data.d 46 if (data && data.d) { 47 let info = data.d.results; 48 49 // Verificar que existan resultados en data.d.results 50 if (info) { 51 // Filtrar los resultados que coinciden con el término de búsqueda, incluso sin tildes 52 const resultadosFiltrados = info.filter(item => { 53 const tituloNormalizado = quitarTildes(item.Title.toLowerCase()); 54 return tituloNormalizado.includes(terminoNormalizado); 55 }); 56 // Agregar los resultados de esta consulta a dataGlobal 57 dataGlobal = dataGlobal.concat(resultadosFiltrados); 58 } 59 } 60 61 } catch (error) { 62 // Manejar errores de consulta 63 console.error(`Error en la consulta para el módulo ${module}: ${error.message}`); 64 } 65 } 66 67 // Limpiar el array de páginas encontradas 68 PaginasEncontradas = []; 69 70 // Iterar sobre los resultados globales 71 dataGlobal.forEach((item) => { 72 // Obtener la URL de la página y extraer información relevante 73 const sliptUrl = item["__metadata"].uri.split("//"); 74 const url = sliptUrl[1].split("/") 75 76 // Construir un nuevo objeto con la información de la página encontrada 77 const newUrl = { 78 Title: item.Title, 79 url: `${location.protocol}//${location.host}/${url[1]}/Paginas/${item.LinkFilename}`, 80 id: item.ID, 81 module: url[1] 82 } 83 84 // Agregar el nuevo objeto al array de páginas encontradas 85 PaginasEncontradas.push(newUrl); 86 }) 87 88 // Devolver las páginas encontradas 89 return PaginasEncontradas; 90}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.