diff --git a/src/client/public/js/mobile_menu.js b/src/client/public/js/mobile_menu.js index 70dcee0..df270bc 100644 --- a/src/client/public/js/mobile_menu.js +++ b/src/client/public/js/mobile_menu.js @@ -1,21 +1,31 @@ -// Pestaña Menu del movil: que el boton atras de Android cierre la hoja en vez de -// salir de la pagina. Al abrirla se apunta una entrada en el historial; atras la -// quita y cierra la hoja. Sin este fichero el menu funciona igual (es una casilla -// y CSS), solo que atras cambia de pagina. Ver docs/ESTUDIO_NAVEGACION.md. +// Hoja del menu (pestaña Menu de la barra de abajo). Abre y cierra con una casilla +// y CSS; esto solo hace que el boton atras de Android cierre la hoja en vez de +// cambiar de pagina. Ver docs/ESTUDIO_NAVEGACION.md. (function () { var box = document.getElementById('oasis-menu-toggle'); if (!box || !window.history || !history.pushState) return; - // al volver atras a una pagina desde la que se abrio otra con el menu, la entrada - // del historial es la del menu abierto: se ensena abierto y el siguiente atras lo cierra + var sheet = document.querySelector('.menu-sheet'); + var pending = null; if (history.state && history.state.oasisMenu) box.checked = true; box.addEventListener('change', function () { - if (box.checked) { - history.pushState({ oasisMenu: true }, ''); - } else if (history.state && history.state.oasisMenu) { - history.back(); - } + if (box.checked) { history.pushState({ oasisMenu: true }, ''); } + else if (history.state && history.state.oasisMenu) { history.back(); } }); window.addEventListener('popstate', function () { if (box.checked) box.checked = false; + // se navega despues de que la vuelta atras termine (en WebView 69, si no, se + // perdia la entrada nueva) + if (pending) setTimeout(follow, 50); + }); + function follow() { if (pending) { var go = pending; pending = null; location.href = go; } } + // al ir a un modulo desde la hoja, primero se quita la entrada de la hoja: si no, + // al volver atras desde el modulo la portada aparecia con la hoja abierta + if (sheet) sheet.addEventListener('click', function (e) { + var a = e.target.closest ? e.target.closest('a[href]') : null; + if (!a || !(history.state && history.state.oasisMenu)) return; + e.preventDefault(); + pending = a.href; + history.back(); + setTimeout(follow, 1000); }); })();