Merge pull request #20185 from azul/open-new_tab
Modify do_action so default ctrl-click opens tab
This commit is contained in:
commit
e5ac5c7f34
|
@ -256,6 +256,19 @@
|
|||
return undefined;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the default file action handler for the current file
|
||||
*
|
||||
* @return {OCA.Files.FileActions~actionSpec} action spec
|
||||
* @since 8.2
|
||||
*/
|
||||
getCurrentDefaultFileAction: function() {
|
||||
var mime = this.getCurrentMimeType();
|
||||
var type = this.getCurrentType();
|
||||
var permissions = this.getCurrentPermissions();
|
||||
return this.getDefaultFileAction(mime, type, permissions);
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the default file action handler for the given conditions
|
||||
*
|
||||
|
@ -263,7 +276,7 @@
|
|||
* @param {string} type "dir" or "file"
|
||||
* @param {int} permissions permissions
|
||||
*
|
||||
* @return {OCA.Files.FileActions~actionHandler} action handler
|
||||
* @return {OCA.Files.FileActions~actionSpec} action spec
|
||||
* @since 8.2
|
||||
*/
|
||||
getDefaultFileAction: function(mime, type, permissions) {
|
||||
|
|
|
@ -77,11 +77,7 @@
|
|||
fileActions.getCurrentPermissions()
|
||||
);
|
||||
|
||||
var defaultAction = fileActions.getDefaultFileAction(
|
||||
fileActions.getCurrentMimeType(),
|
||||
fileActions.getCurrentType(),
|
||||
fileActions.getCurrentPermissions()
|
||||
);
|
||||
var defaultAction = fileActions.getCurrentDefaultFileAction();
|
||||
|
||||
var items = _.filter(actions, function(actionSpec) {
|
||||
return !defaultAction || actionSpec.name !== defaultAction.name;
|
||||
|
|
|
@ -432,7 +432,7 @@
|
|||
this.setupUploadEvents(this._uploader);
|
||||
}
|
||||
}
|
||||
|
||||
this.triedActionOnce = false;
|
||||
|
||||
OC.Plugins.attach('OCA.Files.FileList', this);
|
||||
|
||||
|
@ -874,16 +874,12 @@
|
|||
if ($tr.hasClass('dragging')) {
|
||||
return;
|
||||
}
|
||||
if (this._allowSelection && (event.ctrlKey || event.shiftKey)) {
|
||||
if (this._allowSelection && event.shiftKey) {
|
||||
event.preventDefault();
|
||||
if (event.shiftKey) {
|
||||
this._selectRange($tr);
|
||||
} else {
|
||||
this._selectSingle($tr);
|
||||
}
|
||||
this._selectRange($tr);
|
||||
this._lastChecked = $tr;
|
||||
this.updateSelectionSummary();
|
||||
} else {
|
||||
} else if (!event.ctrlKey) {
|
||||
// clicked directly on the name
|
||||
if (!this._detailsView || $(event.target).is('.nametext, .name, .thumbnail') || $(event.target).closest('.nametext').length) {
|
||||
var filename = $tr.attr('data-file');
|
||||
|
@ -892,13 +888,10 @@
|
|||
event.preventDefault();
|
||||
} else if (!renaming) {
|
||||
this.fileActions.currentFile = $tr.find('td');
|
||||
var mime = this.fileActions.getCurrentMimeType();
|
||||
var type = this.fileActions.getCurrentType();
|
||||
var permissions = this.fileActions.getCurrentPermissions();
|
||||
var action = this.fileActions.getDefault(mime,type, permissions);
|
||||
if (action) {
|
||||
var spec = this.fileActions.getCurrentDefaultFileAction();
|
||||
if (spec && spec.action) {
|
||||
event.preventDefault();
|
||||
action(filename, {
|
||||
spec.action(filename, {
|
||||
$file: $tr,
|
||||
fileList: this,
|
||||
fileActions: this.fileActions,
|
||||
|
@ -1323,6 +1316,31 @@
|
|||
}, 0);
|
||||
}
|
||||
|
||||
if(!this.triedActionOnce) {
|
||||
var id = OC.Util.History.parseUrlQuery().openfile;
|
||||
if (id) {
|
||||
var $tr = this.$fileList.children().filterAttr('data-id', '' + id);
|
||||
var filename = $tr.attr('data-file');
|
||||
this.fileActions.currentFile = $tr.find('td');
|
||||
var dir = $tr.attr('data-path') || this.getCurrentDirectory();
|
||||
var spec = this.fileActions.getCurrentDefaultFileAction();
|
||||
if (spec && spec.action) {
|
||||
spec.action(filename, {
|
||||
$file: $tr,
|
||||
fileList: this,
|
||||
fileActions: this.fileActions,
|
||||
dir: dir
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
var url = this.getDownloadUrl(filename, dir, true);
|
||||
OCA.Files.Files.handleDownload(url);
|
||||
}
|
||||
}
|
||||
this.triedActionOnce = true;
|
||||
}
|
||||
|
||||
return newTrs;
|
||||
},
|
||||
|
||||
|
@ -1527,10 +1545,14 @@
|
|||
td = $('<td class="filename"></td>');
|
||||
|
||||
|
||||
var spec = this.fileActions.getDefaultFileAction(mime, type, permissions);
|
||||
// linkUrl
|
||||
if (mime === 'httpd/unix-directory') {
|
||||
linkUrl = this.linkTo(path + '/' + name);
|
||||
}
|
||||
else if (spec && spec.action) {
|
||||
linkUrl = this.getDefaultActionUrl(path, fileData.id);
|
||||
}
|
||||
else {
|
||||
linkUrl = this.getDownloadUrl(name, path, type === 'dir');
|
||||
}
|
||||
|
@ -2149,6 +2171,10 @@
|
|||
return OCA.Files.Files.getDownloadUrl(files, dir || this.getCurrentDirectory(), isDir);
|
||||
},
|
||||
|
||||
getDefaultActionUrl: function(path, id) {
|
||||
return this.linkTo(path) + "&openfile="+id;
|
||||
},
|
||||
|
||||
getUploadUrl: function(fileName, dir) {
|
||||
if (_.isUndefined(dir)) {
|
||||
dir = this.getCurrentDirectory();
|
||||
|
|
|
@ -239,6 +239,33 @@ describe('OCA.Files.FileList tests', function() {
|
|||
expect($tr.find('.date').text()).not.toEqual('?');
|
||||
expect(fileList.findFileEl('testName.txt')[0]).toEqual($tr[0]);
|
||||
});
|
||||
it('generates file element with url for default action when one is defined', function() {
|
||||
var actionStub = sinon.stub();
|
||||
fileList.setFiles(testFiles);
|
||||
fileList.fileActions.registerAction({
|
||||
mime: 'text/plain',
|
||||
name: 'Test',
|
||||
type: OCA.Files.FileActions.TYPE_INLINE,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
icon: function() {
|
||||
// Specify icon for hitory button
|
||||
return OC.imagePath('core','actions/history');
|
||||
},
|
||||
actionHandler: actionStub
|
||||
});
|
||||
fileList.fileActions.setDefault('text/plain', 'Test');
|
||||
var fileData = new FileInfo({
|
||||
id: 18,
|
||||
name: 'testName.txt',
|
||||
mimetype: 'text/plain',
|
||||
size: 1234,
|
||||
etag: 'a01234c',
|
||||
mtime: 123456
|
||||
});
|
||||
var $tr = fileList.add(fileData);
|
||||
expect($tr.find('a.name').attr('href'))
|
||||
.toEqual(OC.getRootPath() + '/index.php/apps/files?dir=&openfile=18');
|
||||
});
|
||||
it('generates dir element with correct attributes when calling add() with dir data', function() {
|
||||
var fileData = new FileInfo({
|
||||
id: 19,
|
||||
|
@ -1906,36 +1933,6 @@ describe('OCA.Files.FileList tests', function() {
|
|||
|
||||
expect($tr.find('input:checkbox').prop('checked')).toEqual(true);
|
||||
});
|
||||
it('Selects/deselect a file when clicking on the name while holding Ctrl', function() {
|
||||
var $tr = fileList.findFileEl('One.txt');
|
||||
var $tr2 = fileList.findFileEl('Three.pdf');
|
||||
var e;
|
||||
expect($tr.find('input:checkbox').prop('checked')).toEqual(false);
|
||||
expect($tr2.find('input:checkbox').prop('checked')).toEqual(false);
|
||||
e = new $.Event('click');
|
||||
e.ctrlKey = true;
|
||||
$tr.find('td.filename .name').trigger(e);
|
||||
|
||||
expect($tr.find('input:checkbox').prop('checked')).toEqual(true);
|
||||
expect($tr2.find('input:checkbox').prop('checked')).toEqual(false);
|
||||
|
||||
// click on second entry, does not clear the selection
|
||||
e = new $.Event('click');
|
||||
e.ctrlKey = true;
|
||||
$tr2.find('td.filename .name').trigger(e);
|
||||
expect($tr.find('input:checkbox').prop('checked')).toEqual(true);
|
||||
expect($tr2.find('input:checkbox').prop('checked')).toEqual(true);
|
||||
|
||||
expect(_.pluck(fileList.getSelectedFiles(), 'name')).toEqual(['One.txt', 'Three.pdf']);
|
||||
|
||||
// deselect now
|
||||
e = new $.Event('click');
|
||||
e.ctrlKey = true;
|
||||
$tr2.find('td.filename .name').trigger(e);
|
||||
expect($tr.find('input:checkbox').prop('checked')).toEqual(true);
|
||||
expect($tr2.find('input:checkbox').prop('checked')).toEqual(false);
|
||||
expect(_.pluck(fileList.getSelectedFiles(), 'name')).toEqual(['One.txt']);
|
||||
});
|
||||
it('Selects a range when clicking on one file then Shift clicking on another one', function() {
|
||||
var $tr = fileList.findFileEl('One.txt');
|
||||
var $tr2 = fileList.findFileEl('Three.pdf');
|
||||
|
|
|
@ -113,9 +113,9 @@ OCA.Sharing.PublicApp = {
|
|||
// Show file preview if previewer is available, images are already handled by the template
|
||||
if (mimetype.substr(0, mimetype.indexOf('/')) !== 'image' && $('.publicpreview').length === 0) {
|
||||
// Trigger default action if not download TODO
|
||||
var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
|
||||
if (typeof action !== 'undefined') {
|
||||
action($('#filename').val());
|
||||
var spec = FileActions.getDefaultFileAction(mimetype, 'file', OC.PERMISSION_READ);
|
||||
if (spec && spec.action) {
|
||||
spec.action($('#filename').val());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -204,10 +204,6 @@ OCA.Sharing.PublicApp = {
|
|||
var $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);
|
||||
if (hideDownload === 'true') {
|
||||
this.fileActions.currentFile = $tr.find('td');
|
||||
var mime = this.fileActions.getCurrentMimeType();
|
||||
var type = this.fileActions.getCurrentType();
|
||||
var permissions = this.fileActions.getCurrentPermissions();
|
||||
var action = this.fileActions.getDefault(mime, type, permissions);
|
||||
|
||||
// Remove the link. This means that files without a default action fail hard
|
||||
$tr.find('a.name').attr('href', '#');
|
||||
|
@ -252,7 +248,7 @@ OCA.Sharing.PublicApp = {
|
|||
};
|
||||
|
||||
this.fileList.linkTo = function (dir) {
|
||||
return OC.generateUrl('/s/' + token + '', {dir: dir});
|
||||
return OC.generateUrl('/s/' + token + '') + '?' + OC.buildQueryString({path: dir});
|
||||
};
|
||||
|
||||
this.fileList.generatePreviewUrl = function (urlSpec) {
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -241,6 +241,11 @@
|
|||
return '#'
|
||||
},
|
||||
|
||||
getDefaultActionUrl: function() {
|
||||
// no default action
|
||||
return '#'
|
||||
},
|
||||
|
||||
updateStorageStatistics: function() {
|
||||
// no op because the trashbin doesn't have
|
||||
// storage info like free space / used space
|
||||
|
|
Loading…
Reference in New Issue