diff options
author | Morris Jobke <morris.jobke@gmail.com> | 2013-07-01 01:28:17 -0700 |
---|---|---|
committer | Morris Jobke <morris.jobke@gmail.com> | 2013-07-01 01:28:17 -0700 |
commit | b19033b3533ce4726763aac6247aa156eb0a87d6 (patch) | |
tree | a07308e75b5f00c952a622bcbfecd267b6837f43 | |
parent | 80a8b9c99581d6e2e20276e4c0273e50b67e4658 (diff) | |
parent | e0547a25ab9c5a3d9454611f72e00e3bc667e2d2 (diff) | |
download | nextcloud-server-b19033b3533ce4726763aac6247aa156eb0a87d6.tar.gz nextcloud-server-b19033b3533ce4726763aac6247aa156eb0a87d6.zip |
Merge pull request #3223 from owncloud/fix-2820
if rename of file fails, the rename is undone in the view - fix 2820
-rw-r--r-- | apps/files/js/filelist.js | 41 | ||||
-rw-r--r-- | apps/files/lib/app.php | 2 | ||||
-rw-r--r-- | apps/files/tests/ajax_rename.php | 2 | ||||
-rw-r--r-- | core/js/js.js | 4 |
4 files changed, 40 insertions, 9 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index f4ca098eed1..c15fc21abf4 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -220,13 +220,44 @@ var FileList={ if (FileList.checkName(name, newname, false)) { newname = name; } else { - $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(result) { - if (!result || result.status == 'error') { - OC.dialogs.alert(result.data.message, 'Error moving file'); - newname = name; + // save background image, because it's replaced by a spinner while async request + var oldBackgroundImage = td.css('background-image'); + // mark as loading + td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); + $.ajax({ + url: OC.filePath('files','ajax','rename.php'), + data: { + dir : $('#dir').val(), + newname: newname, + file: name + }, + success: function(result) { + if (!result || result.status === 'error') { + OC.Notification.show(result.data.message); + newname = name; + // revert changes + tr.attr('data-file', newname); + var path = td.children('a.name').attr('href'); + td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname))); + if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') { + var basename=newname.substr(0,newname.lastIndexOf('.')); + } else { + var basename=newname; + } + td.find('a.name span.nametext').text(basename); + if (newname.indexOf('.') > 0 && tr.data('type') !== 'dir') { + if (td.find('a.name span.extension').length === 0 ) { + td.find('a.name span.nametext').append('<span class="extension"></span>'); + } + td.find('a.name span.extension').text(newname.substr(newname.lastIndexOf('.'))); + } + tr.find('.fileactions').effect('highlight', {}, 5000); + tr.effect('highlight', {}, 5000); + } + // remove loading mark and recover old image + td.css('background-image', oldBackgroundImage); } }); - } } tr.data('renaming',false); diff --git a/apps/files/lib/app.php b/apps/files/lib/app.php index c2a4b9c2675..f7052ef80b0 100644 --- a/apps/files/lib/app.php +++ b/apps/files/lib/app.php @@ -70,7 +70,7 @@ class App { } else { // rename failed $result['data'] = array( - 'message' => $this->l10n->t('Unable to rename file') + 'message' => $this->l10n->t('%s could not be renamed', array($oldname)) ); } return $result; diff --git a/apps/files/tests/ajax_rename.php b/apps/files/tests/ajax_rename.php index 23e5761ddda..2b90a11743d 100644 --- a/apps/files/tests/ajax_rename.php +++ b/apps/files/tests/ajax_rename.php @@ -50,7 +50,7 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { $result = $this->files->rename($dir, $oldname, $newname); $expected = array( 'success' => false, - 'data' => array('message' => 'Unable to rename file') + 'data' => array('message' => '%s could not be renamed') ); $this->assertEquals($expected, $result); diff --git a/core/js/js.js b/core/js/js.js index 08b429a555b..3904787c4e5 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -352,10 +352,10 @@ OC.Notification={ }, show: function(text) { if(($('#notification').filter('span.undo').length == 1) || OC.Notification.isHidden()){ - $('#notification').html(text); + $('#notification').text(text); $('#notification').fadeIn().css("display","inline"); }else{ - OC.Notification.queuedNotifications.push($(text).html()); + OC.Notification.queuedNotifications.push($('<div/>').text(text).html()); } }, isHidden: function() { |