[fix] Do not close "force reconnect" messages

If a "force reconnect" message is displayed to the user, it means the
only way to go back to a healthy state is to reload the pad. So we
cannot hide this kind of message, like what is done with other modals
(eg: "settings").
This commit is contained in:
Luiza Pagliari 2017-05-04 14:34:01 -03:00
parent 4eec3763b4
commit 9176bf9bad
2 changed files with 137 additions and 58 deletions

View File

@ -259,18 +259,25 @@ var padeditbar = (function()
// hide all modules and remove highlighting of all buttons // hide all modules and remove highlighting of all buttons
if(moduleName == "none") if(moduleName == "none")
{ {
var returned = false var returned = false;
for(var i=0;i<self.dropdowns.length;i++) for(var i=0;i<self.dropdowns.length;i++)
{ {
var thisModuleName = self.dropdowns[i];
//skip the userlist //skip the userlist
if(self.dropdowns[i] == "users") if(thisModuleName == "users")
continue; continue;
var module = $("#" + self.dropdowns[i]); var module = $("#" + thisModuleName);
//skip any "force reconnect" message
var isAForceReconnectMessage = module.find('#forcereconnect').is(':visible');
if(isAForceReconnectMessage)
continue;
if(module.css('display') != "none") if(module.css('display') != "none")
{ {
$("li[data-key=" + self.dropdowns[i] + "] > a").removeClass("selected"); $("li[data-key=" + thisModuleName + "] > a").removeClass("selected");
module.slideUp("fast", cb); module.slideUp("fast", cb);
returned = true; returned = true;
} }
@ -283,16 +290,17 @@ var padeditbar = (function()
// respectively add highlighting to the corresponding button // respectively add highlighting to the corresponding button
for(var i=0;i<self.dropdowns.length;i++) for(var i=0;i<self.dropdowns.length;i++)
{ {
var module = $("#" + self.dropdowns[i]); var thisModuleName = self.dropdowns[i];
var module = $("#" + thisModuleName);
if(module.css('display') != "none") if(module.css('display') != "none")
{ {
$("li[data-key=" + self.dropdowns[i] + "] > a").removeClass("selected"); $("li[data-key=" + thisModuleName + "] > a").removeClass("selected");
module.slideUp("fast"); module.slideUp("fast");
} }
else if(self.dropdowns[i]==moduleName) else if(thisModuleName==moduleName)
{ {
$("li[data-key=" + self.dropdowns[i] + "] > a").addClass("selected"); $("li[data-key=" + thisModuleName + "] > a").addClass("selected");
module.slideDown("fast", cb); module.slideDown("fast", cb);
} }
} }

View File

@ -1,4 +1,7 @@
describe('Pad modal', function() { describe('Pad modal', function() {
context('when modal is a "force reconnect" message', function() {
var MODAL_SELECTOR = '#connectivity .userdup';
var padId, $originalPadFrame; var padId, $originalPadFrame;
beforeEach(function(done) { beforeEach(function(done) {
@ -9,9 +12,9 @@ describe('Pad modal', function() {
$otherIframeWithSamePad.insertAfter($originalPadFrame); $otherIframeWithSamePad.insertAfter($originalPadFrame);
// wait for modal to be displayed // wait for modal to be displayed
var $errorMessageModal = helper.padChrome$('#connectivity .userdup'); var $modal = helper.padChrome$(MODAL_SELECTOR);
helper.waitFor(function() { helper.waitFor(function() {
return $errorMessageModal.is(':visible'); return $modal.is(':visible');
}, 50000).done(done); }, 50000).done(done);
}); });
@ -19,28 +22,21 @@ describe('Pad modal', function() {
}); });
it('disables editor', function(done) { it('disables editor', function(done) {
var editorDocument = helper.padOuter$("iframe[name='ace_inner']").get(0).contentDocument; expect(isEditorDisabled()).to.be(true);
var editorBody = editorDocument.getElementById('innerdocbody');
var editorIsEditable = editorBody.contentEditable === 'false' // IE/Safari
|| editorDocument.designMode === 'off'; // other browsers
expect(editorIsEditable).to.be(true);
done(); done();
}); });
context('and user clicks on editor', function() { context('and user clicks on editor', function() {
beforeEach(function() { beforeEach(function() {
var $editor = helper.padInner$('#innerdocbody'); clickOnPadInner();
$editor.click();
}); });
it('closes the modal', function(done) { it('does not close the modal', function(done) {
var $errorMessageModal = helper.padChrome$('#connectivity .userdup'); var $modal = helper.padChrome$(MODAL_SELECTOR);
var modalIsVisible = $errorMessageModal.is(':visible'); var modalIsVisible = $modal.is(':visible');
expect(modalIsVisible).to.be(false); expect(modalIsVisible).to.be(true);
done(); done();
}); });
@ -48,17 +44,92 @@ describe('Pad modal', function() {
context('and user clicks on pad outer', function() { context('and user clicks on pad outer', function() {
beforeEach(function() { beforeEach(function() {
var $lineNumbersColumn = helper.padOuter$('#sidedivinner'); clickOnPadOuter();
$lineNumbersColumn.click();
}); });
it('closes the modal', function(done) { it('does not close the modal', function(done) {
var $errorMessageModal = helper.padChrome$('#connectivity .userdup'); var $modal = helper.padChrome$(MODAL_SELECTOR);
var modalIsVisible = $errorMessageModal.is(':visible'); var modalIsVisible = $modal.is(':visible');
expect(modalIsVisible).to.be(false); expect(modalIsVisible).to.be(true);
done(); done();
}); });
}); });
}); });
// we use "settings" here, but other modals have the same behaviour
context('when modal is not an error message', function() {
var MODAL_SELECTOR = '#settings';
beforeEach(function(done) {
helper.newPad(function() {
openSettingsAndWaitForModalToBeVisible(done);
});
this.timeout(60000);
});
it('does not disable editor', function(done) {
expect(isEditorDisabled()).to.be(false);
done();
});
context('and user clicks on editor', function() {
beforeEach(function() {
clickOnPadInner();
});
it('closes the modal', function(done) {
expect(isModalOpened(MODAL_SELECTOR)).to.be(false);
done();
});
});
context('and user clicks on pad outer', function() {
beforeEach(function() {
clickOnPadOuter();
});
it('closes the modal', function(done) {
expect(isModalOpened(MODAL_SELECTOR)).to.be(false);
done();
});
});
});
var clickOnPadInner = function() {
var $editor = helper.padInner$('#innerdocbody');
$editor.click();
}
var clickOnPadOuter = function() {
var $lineNumbersColumn = helper.padOuter$('#sidedivinner');
$lineNumbersColumn.click();
}
var openSettingsAndWaitForModalToBeVisible = function(done) {
helper.padChrome$('.buttonicon-settings').click();
// wait for modal to be displayed
var modalSelector = '#settings';
helper.waitFor(function() {
return isModalOpened(modalSelector);
}, 10000).done(done);
}
var isEditorDisabled = function() {
var editorDocument = helper.padOuter$("iframe[name='ace_inner']").get(0).contentDocument;
var editorBody = editorDocument.getElementById('innerdocbody');
var editorIsDisabled = editorBody.contentEditable === 'false' // IE/Safari
|| editorDocument.designMode === 'off'; // other browsers
return editorIsDisabled;
}
var isModalOpened = function(modalSelector) {
var $modal = helper.padChrome$(modalSelector);
return $modal.is(':visible');
}
});