PageSourceSearch

https://campoalegre-huila.gov.co/Style%20Library/BuscadorInstitucional/buscador-subsitios/assets/js/api.js

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

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.