summaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/js/fileactions.js2
-rw-r--r--apps/files/js/filelist.js45
-rw-r--r--apps/files/tests/js/filelistSpec.js57
3 files changed, 65 insertions, 39 deletions
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 404b6f1877e..1f6d5f798a9 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -266,7 +266,7 @@
var mime = this.getCurrentMimeType();
var type = this.getCurrentType();
var permissions = this.getCurrentPermissions();
- return this.getDefaultFileAction(mime,type, permissions);
+ return this.getDefaultFileAction(mime, type, permissions);
},
/**
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index ce428064337..e7d48d4bcd1 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -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');
@@ -1320,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;
},
@@ -1524,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');
}
@@ -2146,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();
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index f9c1b5f31cd..ee70a1452a9 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -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');