From 7d4747ea1692f42b9ae007cf5da654a95c610ec3 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 23 Jun 2014 16:35:11 +0200 Subject: [PATCH] Fix blurring of invalid file name on rename When renaming to an existing file name, blurring the field should not remove it. This fix keeps the field until escape is pressed instead of replacing it with a broken empty space. --- apps/files/js/filelist.js | 16 ++++++++--- apps/files/tests/js/filelistSpec.js | 41 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index fb97b2f4595..fc08d9b54fc 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1195,9 +1195,20 @@ return true; }; + function restore() { + input.tipsy('hide'); + tr.data('renaming',false); + form.remove(); + td.children('a.name').show(); + } + form.submit(function(event) { event.stopPropagation(); event.preventDefault(); + if (input.hasClass('error')) { + return; + } + try { var newName = input.val(); input.tipsy('hide'); @@ -1267,10 +1278,7 @@ input.addClass('error'); } if (event.keyCode === 27) { - input.tipsy('hide'); - tr.data('renaming',false); - form.remove(); - td.children('a.name').show(); + restore(); } }); input.click(function(event) { diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 743ebf9706a..0b0ff0412b2 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -591,6 +591,47 @@ describe('OCA.Files.FileList tests', function() { expect($tr.find('.action').hasClass('hidden')).toEqual(true); expect($tr.find('.fileactions').hasClass('hidden')).toEqual(true); + // input and form are gone + expect(fileList.$fileList.find('input.filename').length).toEqual(0); + expect(fileList.$fileList.find('form').length).toEqual(0); + }); + it('Validates the file name', function() { + var $input, $tr; + + for (var i = 0; i < testFiles.length; i++) { + fileList.add(testFiles[i], {silent: true}); + } + + // trigger rename prompt + fileList.rename('One.txt'); + $input = fileList.$fileList.find('input.filename'); + $input.val('Two.jpg'); + + // simulate key to trigger validation + $input.trigger(new $.Event('keyup', {keyCode: 97})); + + // input is still there with error + expect(fileList.$fileList.find('input.filename').length).toEqual(1); + expect(fileList.$fileList.find('input.filename').hasClass('error')).toEqual(true); + + // trigger submit does not send server request + $input.closest('form').trigger('submit'); + expect(fakeServer.requests.length).toEqual(0); + + // simulate escape key + $input.trigger(new $.Event('keyup', {keyCode: 27})); + + // element is added back with the correct name + $tr = fileList.findFileEl('One.txt'); + expect($tr.length).toEqual(1); + expect($tr.find('a .nametext').text().trim()).toEqual('One.txt'); + expect($tr.find('a.name').is(':visible')).toEqual(true); + + $tr = fileList.findFileEl('Two.jpg'); + expect($tr.length).toEqual(1); + expect($tr.find('a .nametext').text().trim()).toEqual('Two.jpg'); + expect($tr.find('a.name').is(':visible')).toEqual(true); + // input and form are gone expect(fileList.$fileList.find('input.filename').length).toEqual(0); expect(fileList.$fileList.find('form').length).toEqual(0); -- 2.39.5