diff --git a/www/code/inner.js b/www/code/inner.js index 488a084e4..53d852ebd 100644 --- a/www/code/inner.js +++ b/www/code/inner.js @@ -571,6 +571,14 @@ define([ cpNfInner = common.startRealtime(config); metadataMgr = cpNfInner.metadataMgr; + cpNfInner.onInfiniteSpinner(function () { + setEditable(false); + Cryptpad.confirm(Messages.realtime_unrecoverableError, function (yes) { + if (!yes) { return; } + common.gotoURL(); + }); + }); + editor.on('change', onLocal); Cryptpad.onLogout(function () { setEditable(false); }); diff --git a/www/common/common-interface.js b/www/common/common-interface.js index b93e57de3..467cad4ab 100644 --- a/www/common/common-interface.js +++ b/www/common/common-interface.js @@ -36,8 +36,9 @@ define([ return $('button.ok').last(); }; - var listenForKeys = UI.listenForKeys = function (yes, no) { + var listenForKeys = UI.listenForKeys = function (yes, no, el) { var handler = function (e) { + e.stopPropagation(); switch (e.which) { case 27: // cancel if (typeof(no) === 'function') { no(e); } @@ -48,7 +49,7 @@ define([ } }; - $(window).keyup(handler); + $(el || window).keydown(handler); return handler; }; @@ -114,7 +115,9 @@ define([ }; dialog.frame = function (content) { - return h('div.alertify', [ + return h('div.alertify', { + tabindex: 1, + }, [ h('div.dialog', [ h('div', content), ]) @@ -229,6 +232,7 @@ define([ var close = Util.once(function () { $(frame).fadeOut(150, function () { $(this).remove(); }); stopListening(listener); + cb(); }); listener = listenForKeys(close, close); var $ok = $(ok).click(close); @@ -237,7 +241,6 @@ define([ setTimeout(function () { $ok.focus(); UI.notify(); - if (!document.hasFocus()) { window.focus(); } }); }; @@ -283,7 +286,6 @@ define([ setTimeout(function () { input.select().focus(); UI.notify(); - if (!document.hasFocus()) { window.focus(); } }); }; @@ -330,10 +332,10 @@ define([ document.body.appendChild(frame); setTimeout(function () { UI.notify(); + $(frame).find('.ok').focus(); if (typeof(opt.done) === 'function') { opt.done($ok.closest('.dialog')); } - if (!document.hasFocus()) { window.focus(); } }); }; diff --git a/www/common/userObject.js b/www/common/userObject.js index 4fac4519f..f93bb83c1 100644 --- a/www/common/userObject.js +++ b/www/common/userObject.js @@ -657,7 +657,9 @@ define([ var fData = files[FILES_DATA]; getFiles([FILES_DATA]).forEach(function (id) { if (filesList.indexOf(id) === -1) { - removePadAttribute(fData[id].href); + if (fData[id] && fData[id].href) { + removePadAttribute(fData[id].href); + } spliceFileData(id); } }); diff --git a/www/register/main.js b/www/register/main.js index d302a0634..e8fdb8d22 100644 --- a/www/register/main.js +++ b/www/register/main.js @@ -115,6 +115,15 @@ define([ var doesAccept = $checkAcceptTerms[0].checked; /* basic validation */ + if (!Cred.isLongEnoughPassword(passwd)) { + var warning = Messages._getKey('register_passwordTooShort', [ + Cred.MINIMUM_PASSWORD_LENGTH + ]); + return void Cryptpad.alert(warning, function () { + registering = false; + }); + } + if (passwd !== confirmPassword) { // do their passwords match? return void Cryptpad.alert(Messages.register_passwordsDontMatch); } diff --git a/www/slide/inner.js b/www/slide/inner.js index a4eb9bf72..80fb3e02d 100644 --- a/www/slide/inner.js +++ b/www/slide/inner.js @@ -682,6 +682,14 @@ define([ cpNfInner = common.startRealtime(config); metadataMgr = cpNfInner.metadataMgr; + cpNfInner.onInfiniteSpinner(function () { + setEditable(false); + Cryptpad.confirm(Messages.realtime_unrecoverableError, function (yes) { + if (!yes) { return; } + common.gotoURL(); + }); + }); + editor.on('change', onLocal); Cryptpad.onLogout(function () { setEditable(false); });