* add class .no-permission which shows the default delete icon * fixes #15172 * add unit test for no permission and for delete permissiontags/v8.1.0beta1
@@ -581,7 +581,9 @@ a.action>img { | |||
#fileList tr:hover a.action, | |||
#fileList a.action.permanent, | |||
#fileList tr:focus a.action, | |||
#fileList a.action.permanent | |||
#fileList a.action.permanent, | |||
#fileList tr:hover a.action.no-permission:hover, | |||
#fileList tr:focus a.action.no-permission:focus | |||
/*#fileList .name:focus .action*/ { | |||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; | |||
filter: alpha(opacity=50); |
@@ -288,9 +288,15 @@ | |||
} else if (mountType === 'shared-root') { | |||
deleteTitle = t('files', 'Unshare'); | |||
} | |||
var cssClasses = 'action delete icon-delete'; | |||
if((context.$file.data('permissions') & OC.PERMISSION_DELETE) === 0) { | |||
// add css class no-permission to delete icon | |||
cssClasses += ' no-permission'; | |||
deleteTitle = t('files', 'No permission to delete'); | |||
} | |||
var $actionLink = $('<a href="#" original-title="' + | |||
escapeHTML(deleteTitle) + | |||
'" class="action delete icon-delete">' + | |||
'" class="' +cssClasses + '">' + | |||
'<span class="hidden-visually">' + escapeHTML(deleteTitle) + '</span>' + | |||
'</a>' | |||
); | |||
@@ -426,12 +432,17 @@ | |||
name: 'Delete', | |||
displayName: '', | |||
mime: 'all', | |||
permissions: OC.PERMISSION_DELETE, | |||
// permission is READ because we show a hint instead if there is no permission | |||
permissions: OC.PERMISSION_READ, | |||
icon: function() { | |||
return OC.imagePath('core', 'actions/delete'); | |||
}, | |||
render: _.bind(this._renderDeleteAction, this), | |||
actionHandler: function(fileName, context) { | |||
// if there is no permission to delete do nothing | |||
if((context.$file.data('permissions') & OC.PERMISSION_DELETE) === 0) { | |||
return; | |||
} | |||
context.fileList.do_delete(fileName, context.dir); | |||
$('.tipsy').remove(); | |||
} |
@@ -157,6 +157,48 @@ describe('OCA.Files.FileActions tests', function() { | |||
expect(deleteStub.getCall(0).args[1]).toEqual('/somepath/dir'); | |||
deleteStub.restore(); | |||
}); | |||
it('shows delete hint when no permission to delete', function() { | |||
var deleteStub = sinon.stub(fileList, 'do_delete'); | |||
var fileData = { | |||
id: 18, | |||
type: 'file', | |||
name: 'testName.txt', | |||
path: '/somepath/dir', | |||
mimetype: 'text/plain', | |||
size: '1234', | |||
etag: 'a01234c', | |||
mtime: '123456', | |||
permissions: OC.PERMISSION_READ | |||
}; | |||
var $tr = fileList.add(fileData); | |||
FileActions.display($tr.find('td.filename'), true, fileList); | |||
var $action = $tr.find('.action.delete'); | |||
expect($action.hasClass('no-permission')).toEqual(true); | |||
deleteStub.restore(); | |||
}); | |||
it('shows delete hint not when permission to delete', function() { | |||
var deleteStub = sinon.stub(fileList, 'do_delete'); | |||
var fileData = { | |||
id: 18, | |||
type: 'file', | |||
name: 'testName.txt', | |||
path: '/somepath/dir', | |||
mimetype: 'text/plain', | |||
size: '1234', | |||
etag: 'a01234c', | |||
mtime: '123456', | |||
permissions: OC.PERMISSION_DELETE | |||
}; | |||
var $tr = fileList.add(fileData); | |||
FileActions.display($tr.find('td.filename'), true, fileList); | |||
var $action = $tr.find('.action.delete'); | |||
expect($action.hasClass('no-permission')).toEqual(false); | |||
deleteStub.restore(); | |||
}); | |||
it('passes context to action handler', function() { | |||
var actionStub = sinon.stub(); | |||
var fileData = { |
@@ -128,7 +128,7 @@ describe('OCA.External.FileList tests', function() { | |||
'?dir=/another%20mount%20points/sftp%20mount' | |||
); | |||
expect($tr.find('.nametext').text().trim()).toEqual('sftp mount'); | |||
expect($tr.find('.column-scope').text().trim()).toEqual('System'); | |||
expect($tr.find('.column-scope > span').text().trim()).toEqual('System'); | |||
expect($tr.find('.column-backend').text().trim()).toEqual('SFTP'); | |||
$tr = $rows.eq(1); |
@@ -56,7 +56,9 @@ | |||
background-image: url('../img/actions/confirm.svg'); | |||
} | |||
.icon-delete { | |||
.icon-delete, | |||
.icon-delete.no-permission:hover, | |||
.icon-delete.no-permission:focus { | |||
background-image: url('../img/actions/delete.svg'); | |||
} | |||
.icon-delete:hover, |