summaryrefslogtreecommitdiffstats
path: root/apps/files/js
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-12-22 12:31:55 +0100
committerGitHub <noreply@github.com>2017-12-22 12:31:55 +0100
commite37fa60784f94abb6715704ffcbd479c05938e3a (patch)
tree7c3b22cc9dc5aa87c0319fcea497aca0b4bcd4df /apps/files/js
parente40d6f6d8c54df43c302eaec7496080b42a49619 (diff)
parentc059fbd409b088f65922354149f6d2fd9b5d01b3 (diff)
downloadnextcloud-server-e37fa60784f94abb6715704ffcbd479c05938e3a.tar.gz
nextcloud-server-e37fa60784f94abb6715704ffcbd479c05938e3a.zip
Merge pull request #7591 from nextcloud/trigger-events-before-and-after-a-file-action-is-executed
Trigger events before and after a file action is executed
Diffstat (limited to 'apps/files/js')
-rw-r--r--apps/files/js/fileactions.js26
-rw-r--r--apps/files/js/filelist.js19
2 files changed, 34 insertions, 11 deletions
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 6c031ab06d5..2fb7dfba29f 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -47,14 +47,6 @@
*/
$el: null,
- /**
- * List of handlers to be notified whenever a register() or
- * setDefault() was called.
- *
- * @member {Function[]}
- */
- _updateListeners: {},
-
_fileActionTriggerTemplate: null,
/**
@@ -142,7 +134,22 @@
var mime = action.mime;
var name = action.name;
var actionSpec = {
- action: action.actionHandler,
+ action: function(fileName, context) {
+ // Actions registered in one FileAction may be executed on a
+ // different one (for example, due to the "merge" function),
+ // so the listeners have to be updated on the FileActions
+ // from the context instead of on the one in which it was
+ // originally registered.
+ if (context && context.fileActions) {
+ context.fileActions._notifyUpdateListeners('beforeTriggerAction', {action: actionSpec, fileName: fileName, context: context});
+ }
+
+ action.actionHandler(fileName, context);
+
+ if (context && context.fileActions) {
+ context.fileActions._notifyUpdateListeners('afterTriggerAction', {action: actionSpec, fileName: fileName, context: context});
+ }
+ },
name: name,
displayName: action.displayName,
mime: mime,
@@ -174,7 +181,6 @@
this.defaults = {};
this.icons = {};
this.currentFile = null;
- this._updateListeners = [];
},
/**
* Sets the default action for a given mime type.
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index fa9819b78b5..7735e9357b1 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -676,8 +676,25 @@
$(event.target).closest('a').blur();
}
} else {
- this._updateDetailsView($tr.attr('data-file'));
+ // Even if there is no Details action the default event
+ // handler is prevented for consistency (although there
+ // should always be a Details action); otherwise the link
+ // would be downloaded by the browser when the user expected
+ // the details to be shown.
event.preventDefault();
+ var filename = $tr.attr('data-file');
+ var mime = this.fileActions.getCurrentMimeType();
+ var type = this.fileActions.getCurrentType();
+ var permissions = this.fileActions.getCurrentPermissions();
+ var action = this.fileActions.get(mime, type, permissions)['Details'];
+ if (action) {
+ action(filename, {
+ $file: $tr,
+ fileList: this,
+ fileActions: this.fileActions,
+ dir: $tr.attr('data-path') || this.getCurrentDirectory()
+ });
+ }
}
}
},