PageSourceSearch

https://www.girardota.gov.co/Style%20Library/BuscadorInstitucional/buscador-home/assets/js/api.js

js girardota.gov.co collected 2026-10-01 13:02:16 UTC 5,863 bytes, 234 lines download raw bytes

1const BASE_URL = '/sp_api.aspx?ref='
2const SITIOS_ESPECIFICOS = [
3    'Sala de Prensa'
4]
5
6const LISTAS_ESPECIFICAS = [
7    {
8        nombre: 'Acordeon',
9        campos: [
10            'Title',
11            'Pagina'
12        ]
13    },
14
15    {
16        nombre: 'Normatividad',
17        campos: [
18            'FileLeafRef',
19            'FileRef',
20            'Description',
21            'Descripcion',
22            'Descripción'
23        ]
24    },
25
26    {
27        nombre: 'TramitesyServicios',
28        campos: [
29            'Title',
30            'Trámite Online',
31            'Description',
32            'Descripcion',
33            'Descripción'
34        ]
35    }
36]
37
38/**
39 * Obtiene los subsitios del portal
40 * @returns {Promise<Array>} Lista de subsitios
41 */
42
43const obtenerSubsitios = async () => {
44    const response = await fetch(BASE_URL + 'get-subsites');
45    if (!response.ok) {
46        throw new Error('Error al obtener los subsitios');
47    }
48    let data = await response.json();
49    data = data.data || []
50    return data;
51
52}
53
54const obtenerSubsitiosPrimerNivelEspecificos = (subsitios) => {
55    // Filtrar solo los subsitios de primer nivel
56    let sites = subsitios.filter(subsitio => {
57        // Cuenta la cantidad de "/" en la URL
58        // Ejemplo: "/Geoportal/" => 2 barras
59        return subsitio.Url.split('/').filter(Boolean).length === 1;
60    });
61
62    // Agregar subsitios específicos
63    for (const nombre of SITIOS_ESPECIFICOS) {
64        const subsitio = obtenerSubsitioEspecifico(subsitios, nombre);
65        if (subsitio) {
66            sites.push(subsitio);
67        }
68    }
69    return sites;
70}
71
72/**
73 * Obtiene un subsitio específico por su nombre
74 * Hace parte del mapeo de sitios con paginas de primer nivel y especificas
75 * @param {Array} subsitios - Lista de subsitios
76 * @param {string} nombreSubsitio - Nombre del subsitio a buscar
77 *  
78 * @return {Object|null} Objeto del subsitio encontrado o null si no se encuentra
79 */
80const obtenerSubsitioEspecifico = (subsitios, nombreSubsitio) => {
81    const subsitio = subsitios.find(s => s.Title.toLowerCase() === nombreSubsitio.toLowerCase());
82    if (!subsitio) {
83        return null;
84    }
85    return subsitio;
86}
87
88/**
89 * Obtiene las páginas de un subsitio específico
90 * Hace parte del mapeo de sitios con paginas de primer nivel y especificas
91 * @param {string} subsitio - Nombre del subsitio
92 * @return {Promise<Array>} Lista de páginas del subsitio
93 */
94const obtenerPaginasSubsitio = async (subsitio) => {
95    const body = {
96        site: subsitio,
97        fields: [
98            'Title',
99            'FileRef',
100            'Comments'
101        ],
102        list: 'Páginas'
103    }
104
105    const response = await fetch(BASE_URL + 'get-list-items', {
106        method: 'POST',
107        headers: {
108            'Content-Type': 'application/json'
109        },
110        credentials: 'include',
111        body: JSON.stringify(body)
112    });
113    if(response.url.includes("/_login/default.aspx")) {
114        return [];
115    }
116
117    if (!response.ok) {
118        throw new Error('Error al obtener las páginas del subsitio');
119    }
120
121    let data = await response.json();
122    data = data.data || [];
123
124    return data
125}
126
127/**
128 * 
129 * @param {*} subsitio 
130 * @returns 
131 */
132const obtenerPaginaPrincipalSubsitio = async (subsitio) => {
133    const body = {
134        site: subsitio,
135        fields: [
136            'Title',
137            'FileRef'
138        ],
139    }
140
141    const response = await fetch(BASE_URL + 'get-principal-page', {
142        method: 'POST',
143        headers: {
144            'Content-Type': 'application/json'
145        },
146        body: JSON.stringify(body)
147    });
148
149    if(response.url.includes("/_login/default.aspx")) {
150        return null;
151    }
152
153    if (!response.ok) {
154        throw new Error('Error al obtener la página principal del subsitio');
155    }
156
157    let data = await response.json();
158    data = data.data || {};
159
160    return data
161}
162
163const obtenerListas = async (subsitio) => {
164    const body = {
165        site: subsitio,
166        fields: ['Title']
167    };
168
169    const response = await fetch(BASE_URL + 'get-lists', {
170        method: 'POST',
171        headers: {
172            'Content-Type': 'application/json'
173        },
174        body: JSON.stringify(body)
175    });
176
177    if(response.url.includes("/_login/default.aspx")) {
178        return [];
179    }
180
181    if (!response.ok) {
182        console.warn(`No se pudo obtener las listas del sitio "${subsitio}"`);
183        return [];
184    }
185
186    const data = await response.json();
187    return data.data || [];
188};
189
190/**
191 * Consulta solo listas específicas enviadas en el body
192 * @param {string} subsitio - URL del subsitio
193 * @param {Array<string>} nombresListas - Nombres de las listas a consultar
194 * @returns {Promise<Array>} Datos de las listas específicas
195 */
196
197const obtenerElementosLista = async (subsitio, lista, campos) => {
198    const body = {
199        site: subsitio,
200        list: lista,
201        fields: campos
202    };
203
204    const response = await fetch(BASE_URL + 'get-list-items', {
205        method: 'POST',
206        headers: {
207            'Content-Type': 'application/json'
208        },
209        body: JSON.stringify(body)
210    });
211
212    if(response.url.includes("/_login/default.aspx")) {
213        return [];
214    }
215
216    if (!response.ok) {
217        console.warn(`No se pudieron obtener las listas específicas del sitio "${subsitio}"`);
218        return [];
219    }
220
221    const data = await response.json();
222    return data.data || [];
223};
224
225
226export const api = {
227    obtenerSubsitios,
228    obtenerPaginasSubsitio,
229    obtenerSubsitiosPrimerNivelEspecificos,
230    obtenerPaginaPrincipalSubsitio,
231    obtenerListas,
232    obtenerElementosLista,
233    LISTAS_ESPECIFICAS
234}

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.