Ir al contenido
449 915 3020
¡Hasta que estés satisfecho, está terminado!
Mi cuenta
Usuario
Password
Remember me
Ingresar
Olvidé mi contraseña
¿Aún no tienes una cuenta?
Crear cuenta
Activa las notificaciones
Activar
Instala nuestra app movil
Toca compartir
Agregar a inicio
Instala nuestra app movil
Instalar
(function(){ // ===== CONFIG (tus IDs de Elementor popups) ===== var POPUP_INSTALL_ANDROID = 1134; // Instalación Android/desktop var POPUP_INSTALL_IOS = 1166; // Instalación iOS (A2HS) var POPUP_PUSH_ACTIVATE = 1176; // Activar notificaciones (en PWA) // ================================================= var LS = window.localStorage||{getItem:function(){},setItem:function(){},removeItem:function(){}}; var deferredPrompt = null; var SHOWN_INSTALL_FLAG='maipro.install.shown'; var SHOWN_PUSH_FLAG='maipro.push.shown'; function log(){ if (window.console && console.log) console.log.apply(console, ['[Maipro]'].concat([].slice.call(arguments))); } function warn(){ if (window.console && console.warn) console.warn.apply(console, ['[Maipro]'].concat([].slice.call(arguments))); } function $(s){return document.querySelector(s);} function getCookie(n){var m=document.cookie.match(new RegExp('(?:^|; )'+n+'=([^;]+)'));return m?decodeURIComponent(m[1]):'';} function isStandalone(){var m=false;try{m=window.matchMedia&&window.matchMedia('(display-mode: standalone)').matches;}catch(e){} return m||(window.navigator.standalone===true);} function isIOS(){return /iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;} function canShowInstallPopup(){ if(isStandalone()) return false; return !LS.getItem(SHOWN_INSTALL_FLAG); } function canShowPushPopup(){ // Mostramos el popup de activación solo si estamos en modo standalone (PWA) y no hay permiso ya concedido if(!isStandalone()) return false; if(window.Notification && Notification.permission==='granted') return false; return !LS.getItem(SHOWN_PUSH_FLAG); } // ---------- Elementor Popups helpers ---------- function openPopupById(id){ try{ if(window.elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup){ elementorProFrontend.modules.popup.showPopup({id:id}); return true; } }catch(e){ warn('No se pudo abrir popup', id, e); } return false; } function closePopups(){ try{ if(window.elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup){ elementorProFrontend.modules.popup.closePopup(); } }catch(e){} } function openPopupWhenReady(id, maxWaitMs){ var started = Date.now(); (function tick(){ if (openPopupById(id)) return; if (Date.now() - started > (maxWaitMs||6000)) { warn('Timeout abriendo popup', id); return; } setTimeout(tick, 250); })(); } // ---------- Instalación PWA ---------- window.addEventListener('beforeinstallprompt', function(e){ e.preventDefault(); deferredPrompt = e; log('beforeinstallprompt capturado'); var btn = $('#btn-install-pwa'); if (btn){ btn.disabled=false; btn.textContent='Instalar app'; } }); function maybeShowWebInstallFallback(){ if (canShowInstallPopup() && !isIOS() && !isStandalone()) { log('Mostrando popup de instalación (fallback web)'); LS.setItem(SHOWN_INSTALL_FLAG,'1'); openPopupWhenReady(POPUP_INSTALL_ANDROID, 6000); } } function maybeShowIOSInstall(){ if (canShowInstallPopup() && isIOS() && !isStandalone()) { log('Mostrando popup iOS A2HS'); LS.setItem(SHOWN_INSTALL_FLAG,'1'); openPopupWhenReady(POPUP_INSTALL_IOS, 6000); } } function wireInstallButtons(){ var bInstall=$('#btn-install-pwa'); if(bInstall){ if(!deferredPrompt){ bInstall.disabled = true; bInstall.textContent='Preparando instalación…'; } bInstall.addEventListener('click', function(ev){ ev.preventDefault(); if(!deferredPrompt){ alert('Aún preparando instalación. Intenta otra vez.'); return; } deferredPrompt.prompt(); deferredPrompt.userChoice.then(function(choice){ log('Instalación:', choice && choice.outcome); deferredPrompt = null; closePopups(); })['catch'](function(){ deferredPrompt=null; closePopups(); }); }); } var bDismiss=$('#btn-install-dismiss'); if(bDismiss){ bDismiss.addEventListener('click', function(){ closePopups(); }); } var bDismissIOS=$('#btn-install-ios-dismiss'); if(bDismissIOS){ bDismissIOS.addEventListener('click', function(){ closePopups(); }); } } // ---------- OneSignal helpers (no inyectar SDK aquí) ---------- function waitForOneSignalReady(timeoutMs) { timeoutMs = timeoutMs || 8000; return new Promise(function (resolve) { var waited = 0; var interval = 150; var t = setInterval(function () { if (window.OneSignal && typeof OneSignal.push === 'function') { clearInterval(t); return resolve(true); } waited += interval; if (waited >= timeoutMs) { clearInterval(t); return resolve(false); } }, interval); }); } function safeSetExternalUserId() { try { var externalId = (window.MaiproOneSignalConfig && MaiproOneSignalConfig.externalUserId) ? String(MaiproOneSignalConfig.externalUserId) : (window.USER_ID ? String(window.USER_ID) : null); if (!externalId) return; OneSignal.push(function() { if (typeof OneSignal.setExternalUserId === 'function') { try { OneSignal.setExternalUserId(externalId); log('OneSignal externalUserId seteado:', externalId); } catch(e){ warn('setExternalUserId error', e); } } }); } catch(e) { warn('safeSetExternalUserId', e); } } // Mostrar prompt de OneSignal (slidedown o registro) function showOneSignalPrompt() { waitForOneSignalReady(8000).then(function(ready){ if (!ready) { warn('OneSignal SDK no listo'); alert('OneSignal SDK no cargado todavía. Intenta de nuevo.'); return; } // Asociar external user id si existe safeSetExternalUserId(); OneSignal.push(function(){ if (typeof OneSignal.showSlidedownPrompt === 'function') { OneSignal.showSlidedownPrompt(); } else if (typeof OneSignal.registerForPushNotifications === 'function') { OneSignal.registerForPushNotifications().catch(function(e){ warn('registerForPushNotifications failed', e); }); } else { warn('No hay método de prompt disponible en OneSignal'); } }); }); } // Opcional: guardar mapping OneSignal userId <-> WP user_id en servidor (recomendado) // Puedes descomentar y ajustar la URL /wp-admin/admin-ajax.php?action=maipro_save_onesignal function saveOneSignalIdOnServer(oneSignalUserId) { try { if (!oneSignalUserId) return; // Si quieres que el servidor guarde el mapping, implementa el handler PHP para maipro_save_onesignal /* fetch('/wp-admin/admin-ajax.php?action=maipro_save_onesignal', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ onesignal_id: oneSignalUserId }) }).then(function(r){ return r.json(); }).then(function(j){ log('Saved OS id on server', j); }).catch(function(e){ warn('saveOneSignalIdOnServer error', e); }); */ } catch(e){ warn('saveOneSignalIdOnServer', e); } } // Cuando se suscriba, OneSignal dispara subscriptionChange / puedes obtener userId function bindOneSignalEvents() { waitForOneSignalReady(8000).then(function(ready){ if(!ready) return; OneSignal.push(function(){ try { OneSignal.on && OneSignal.on('subscriptionChange', function(isSubscribed){ log('OneSignal subscriptionChange:', isSubscribed); if (isSubscribed) { OneSignal.getUserId().then(function(osId){ log('OneSignal userId:', osId); // Guardar mapping opcional: saveOneSignalIdOnServer(osId); }).catch(function(e){ warn('getUserId error', e); }); } }); } catch(e){ warn('bindOneSignalEvents error', e); } }); }); } // ---------- Notificaciones: integrar con el popup de Elementor ---------- function setPushStatus(t){ var el=$('#push-status'); if(el) el.textContent=t||''; } function wirePushPopup(){ function attach(){ var root = document.querySelector('.elementor-popup-modal[data-elementor-id="'+POPUP_PUSH_ACTIVATE+'"]'); if (!root) return false; var btn = root.querySelector('#btn-activar-push'); if (!btn || btn.__wired) return false; btn.__wired = true; btn.style.display='inline-flex'; btn.style.visibility='visible'; btn.style.opacity='1'; // reemplazamos la lógica que antes usaba Firebase por llamada a OneSignal prompt btn.addEventListener('click', function(ev){ ev.preventDefault(); setPushStatus('Preparando OneSignal...'); // Mostrar prompt de OneSignal (manejamos internamente si SDK no existe) showOneSignalPrompt(); }); return true; } var mo = new MutationObserver(function(){ attach(); }); mo.observe(document.documentElement, { childList:true, subtree:true }); setTimeout(attach, 300); if (window.jQuery && window.elementorProFrontend) { try { jQuery(document).on('elementor/popup/show', function(e,id){ if(id===POPUP_PUSH_ACTIVATE) setTimeout(attach,50); }); } catch(e){} } } function maybeShowPushPopup(){ try { var p=new URLSearchParams(window.location.search); if(p.get('showpush')==='1'){ openPopupWhenReady(POPUP_PUSH_ACTIVATE,6000); return; } } catch(e){} if (canShowPushPopup()) { log('Mostrando popup de activar notificaciones (PWA)'); LS.setItem(SHOWN_PUSH_FLAG,'1'); openPopupWhenReady(POPUP_PUSH_ACTIVATE, 6000); } } // ---------- Inicio y flujo ---------- function init(){ wireInstallButtons(); wirePushPopup(); // Enlazar eventos OneSignal para capturar subscriptionChange y mapear al servidor si hace falta bindOneSignalEvents(); if(isStandalone()){ // si estamos en PWA, esperar a que OneSignal esté listo y luego mostrar el popup si corresponde waitForOneSignalReady(8000).then(function(){ maybeShowPushPopup(); }); }else{ // si no estamos en PWA, mostrar popups de instalación según plataforma maybeShowIOSInstall(); maybeShowWebInstallFallback(); } } if(document.readyState==='complete' || document.readyState==='interactive'){ setTimeout(init, 300); } else { document.addEventListener('DOMContentLoaded', function(){ setTimeout(init,300); }); } // Mostrar instaladores si no está instalado pasado cierto timeout setTimeout(function(){ if(!isStandalone()){ if(isIOS()) maybeShowIOSInstall(); else maybeShowWebInstallFallback(); } }, 3000); window.addEventListener('appinstalled', function(){ LS.removeItem(SHOWN_INSTALL_FLAG); closePopups(); }); // Delegated listener fallback para botones que no se pudieron enganchar document.addEventListener('click', function(ev){ var el = ev.target; // activar push (fallback): si hay un botón con id btn-activar-push en cualquier parte if (el && (el.id === 'btn-activar-push' || (el.closest && el.closest('#btn-activar-push')))) { ev.preventDefault(); showOneSignalPrompt(); } }, true); // CSS para que el botón siempre sea visible en el popup (function(){ var css = document.createElement('style'); css.textContent = '' + '.elementor-popup-modal[data-elementor-id="'+POPUP_PUSH_ACTIVATE+'"] #btn-activar-push{' + ' display:inline-flex !important; visibility:visible !important; opacity:1 !important;' + '}'; document.head.appendChild(css); })(); })();