PageSourceSearch

https://servicios.bime.org/imagenes/proyectos/personalizacion/1c03…contenidos-sin-conexion.js?v=1759731820-616

js bime.org collected 2026-10-02 08:14:00 UTC 10,012 bytes, 216 lines download raw bytes

1/**
2 * Registra la URL visitada en localStorage.
3 * @param {string} storageKey - Clave en localStorage donde se guardan las URLs (JSON array).
4 * @param {number} maxEntries - Máximo número de entradas a mantener (por defecto 50).
5 *
6 * Guarda la URL actual (location.href). Mantiene las entradas más recientes al inicio
7 * y recorta el array si supera `maxEntries`. Maneja JSON de forma segura.
8 */
9function incrementarVisita(storageKey = 'ids_resources_visited', maxEntries = 50) {
10    try {
11
12    const currentUrl = window.location.href;
13
14    // Extraer el ID: el último segmento de la ruta (después de '/').
15    const url = new URL(currentUrl);
16    const pathSegments = url.pathname.split('/').filter(Boolean);
17    const currentId = pathSegments.length ? pathSegments[pathSegments.length - 1] : currentUrl;
18
19    // Leer las entradas existentes.
20        const raw = localStorage.getItem(storageKey);
21        let visits = [];
22
23        if (raw) {
24            try {
25                visits = JSON.parse(raw);
26                if (!Array.isArray(visits)) visits = [];
27            } catch (e) {
28                visits = [];
29            }
30        }
31
32    // Añadir el ID al inicio (más reciente primero).
33    visits.unshift(currentId);
34
35    // Evitar duplicados consecutivos.
36    if (visits.length > 1 && visits[0] === visits[1]) visits.shift();
37
38        // Recortar a maxEntries.
39        if (visits.length > maxEntries) visits = visits.slice(0, maxEntries);
40
41        localStorage.setItem(storageKey, JSON.stringify(visits));
42
43        // Si hay más de 3 IDs, mostrar modal sólo a usuarios no logueados.
44        if (visits.length > 3) {
45            try {
46                const usuarioLogueado = getCookie('UsuarioLogueado');
47                if (usuarioLogueado !== '1') mostrarModalExceso();                
48            } catch (e) {
49                mostrarModalExceso();
50            }
51        }
52
53    } catch (err) {
54        console.error('Error al incrementar la visita:', err);
55    }
56}
57
58/**
59 * Verifica si el DOM contiene alguna de las clases indicadas.
60 * @param {string[]} clasesObjetivo - Lista de nombres de clases a buscar.
61 * @returns {boolean} - True si encuentra alguna clase en el DOM.
62 */
63function contieneAlgunaClase(clasesObjetivo = []) {
64    return clasesObjetivo.some(clase => document.querySelector(`.${clase}`));
65}
66
67// Espera a que se cargue el DOM completamente
68document.addEventListener('DOMContentLoaded', () => {
69    const clases = ['MultimediaResourceModel', 'PersonModel', 'OrganizationModel', 'PlaceModel', 'EventModel'];
70
71    if (contieneAlgunaClase(clases)) {
72        incrementarVisita();
73    }
74});
75
76/**
77 * Inserta en el DOM el modal de exceso de visitas si no existe ya.
78 */
79function mostrarModalExceso() {
80
81    // Evitar insertar varias veces.
82    if (document.querySelector('.payment-modal')) return;
83
84    const modalHtml = `
85    <div class="payment-modal">
86        <div class="payment-modal_window">
87            <div class="payment-modal_top is-login">
88                <p class="payment-modal_title is-login">${$('#MSG_EXCESO_VISITAS').val()} <a href="/" style="text-decoration: underline; color: var(--c-primario); font-weight: 700;">BIME</a>!</p>
89                <p>${$('#MSG_EXCESO_VISITAS_INFO').val()}</p>
90                <p>
91                    ${$('#NO_TIENES_CUENTA').val()}
92                    <a href="/hazte-miembro" class="is-underline">${$('#REGISTRATE').val()}</a>
93                </p>
94                <div class="w-form">
95                    <form method="post" id="formPaginaLogin" class="login-form formPaginaLogin" action="/login">
96                        <div class="fieldset fieldset01">
97                            <fieldset>
98                                <div class="fieldsetContent">
99                                    <div class="form-group">
100                                        <label for="usuario_Login" class="paragraph-2 is-label">${$('#EMAIL').val()}</label>
101                                        <input placeholder="${$('#INTRODUCETUCORREOELECTRONICO').val()}" type="text" name="usuario" id="usuario_Login" class="form-control usuario_Login login-form_input w-input">
102                                    </div>
103                                    <div class="form-group">
104                                        <label for="password_login" class="control-label paragraph-2 is-label">${$('#CONTRASEÑA').val()}</label>
105                                        <input placeholder="${$('#INTRODUCETUCONTRASEÑA').val()}" type="password" name="password" id="password_login" class="form-control password_login login-form_input w-input">
106                                    </div>
107                                    <div id="loginError" class="error-wrap loginError">
108                                        <div class="ko loginErrorKo" style="display: none;">
109                                            <p id="mensajeError">${$('#CLAVEERRONEA').val()}</p>
110                                        </div>
111                                    </div>
112                                    <div id="loginErrorAutenticacionExterna" class="error-wrap loginError">
113                                        <div class="ko loginErrorAutenticacionExternaKo" style="display: none;">
114                                            <p>${$('#ERRORSERVICIOAUTENTICACION').val()}</p>
115                                        </div>
116                                    </div>
117                                </div>
118                            </fieldset>
119                        </div>
120                        <div class="fieldset actionButtons fieldset03 actionButtons">
121                            <fieldset>
122                                <div class="fieldsetContent">
123                                    <div class="login-form_lost-password-container">
124                                        <a href="/olvide-password" class="login-form_lost-password-link">${$('#OLVIDOPASSWORD').val()}</a>
125                                    </div>
126                                    <input type="button" class="principal submit btn-primary btnSubmit login-form_submit-input w-button" id="btnSubmit" value="${$('#INICIARSESION').val()}">
127                                </div>
128                            </fieldset>
129                        </div>
130                    </form>
131                </div>
132            </div>
133        </div>
134    </div>`;
135
136    const wrapper = document.createElement('div');
137    wrapper.innerHTML = modalHtml;
138    const modal = wrapper.firstElementChild;
139    document.body.appendChild(modal);
140
141    // Añadir estilos básicos.
142    const style = document.createElement('style');
143    style.textContent = `
144    .payment-modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.6);z-index:9999}
145    .payment-modal_window{background:#fff;border-radius:8px;max-width:720px;width:90%;padding:20px;position:relative}
146    .no-scroll{position:fixed;width:100%;overflow:hidden}
147    `;
148    document.head.appendChild(style);
149
150    // Bloquear scroll.
151    let scrollY = 0;
152    function bloquearScroll() {
153        scrollY = window.scrollY || window.pageYOffset;
154        document.body.style.top = `-${scrollY}px`;
155        document.body.classList.add('no-scroll');
156        document.addEventListener('wheel', preventDefault, { passive: false });
157        document.addEventListener('touchmove', preventDefault, { passive: false });
158    }
159
160    function preventDefault(e) { e.preventDefault(); }
161
162    // Cuando el modal se inserta, bloquear scroll.
163    bloquearScroll();
164
165    // Conectar el botón de login del modal al método LoggearUsuario.
166    const btnSubmit = modal.querySelector('#btnSubmit');
167    if (btnSubmit) {
168        btnSubmit.addEventListener('click', function (e) {
169            console.log('[Modal] btnSubmit clicked');
170            const usuario = modal.querySelector('#usuario_Login') ? modal.querySelector('#usuario_Login').value : '';
171            const password = modal.querySelector('#password_login') ? modal.querySelector('#password_login').value : '';
172            LoggearUsuario(usuario, password);
173        });
174    } else {
175        console.warn('[Modal] btnSubmit not found in modal');
176    }
177
178    // Permitir enviar con Enter desde los inputs.
179    const inputs = modal.querySelectorAll('#usuario_Login, #password_login');
180    inputs.forEach(input => {
181        input.addEventListener('keydown', function (e) {
182            if (e.key === 'Enter') {
183                e.preventDefault();
184                console.log('[Modal] Enter pressed in input');
185                const usuario = modal.querySelector('#usuario_Login') ? modal.querySelector('#usuario_Login').value : '';
186                const password = modal.querySelector('#password_login') ? modal.querySelector('#password_login').value : '';
187                LoggearUsuario(usuario, password);
188            }
189        });
190    });
191}
192
193function LoggearUsuario(usuario, password)
194{
195    try {
196        if (typeof $ !== 'undefined' && $.fn) {
197            let formlogin = $('#formPaginaLogin');
198            formlogin.find('#usuario_Login').val(usuario);
199            formlogin.find('#password_login').val(password);
200            formlogin.submit();
201        } else {
202            const form = document.getElementById('formPaginaLogin');
203            if (form) {
204                const userInput = form.querySelector('#usuario_Login');
205                const passInput = form.querySelector('#password_login');
206                if (userInput) userInput.value = usuario;
207                if (passInput) passInput.value = password;
208                form.submit();
209            } else {
210                console.error('LoggearUsuario: formPaginaLogin no encontrado');
211            }
212        }
213    } catch (e) {
214        console.error('LoggearUsuario error', e);
215    }
216}   

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.