diff options
author | Olivier Tétard <olivier.tetard@miskin.fr> | 2015-10-21 23:15:38 +0200 |
---|---|---|
committer | Olivier Tétard <olivier.tetard@miskin.fr> | 2015-10-26 15:03:27 +0100 |
commit | d3861685045a006b47c68185223be21a6233802e (patch) | |
tree | 6318d2e93b164584721e50a5f9131599f7ea42ee /apps/files | |
parent | 5181e5c29a1037137e8435c46c3a9075fe858a21 (diff) | |
download | nextcloud-server-d3861685045a006b47c68185223be21a6233802e.tar.gz nextcloud-server-d3861685045a006b47c68185223be21a6233802e.zip |
Allow apps to add new items in the “New” filemenu.
Owncloud apps can now add new items to the “new” file menu. A new
`addMenuEntry()` was added to `NewFileMenu`. To add a new item, you
have to attach a plugin to `OCA.Files.NewFileMenu` that will call
`addMenuEntry()`.
Diffstat (limited to 'apps/files')
-rw-r--r-- | apps/files/js/newfilemenu.js | 77 |
1 files changed, 46 insertions, 31 deletions
diff --git a/apps/files/js/newfilemenu.js b/apps/files/js/newfilemenu.js index 0a67aba202b..175eb1d1a75 100644 --- a/apps/files/js/newfilemenu.js +++ b/apps/files/js/newfilemenu.js @@ -56,6 +56,28 @@ } this._fileList = options && options.fileList; + + this._menuItems = [{ + id: 'file', + displayName: t('files', 'Text file'), + templateName: t('files', 'New text file.txt'), + iconClass: 'icon-filetype-text', + fileType: 'file', + actionHandler: function(name) { + self._fileList.createFile(name); + } + }, { + id: 'folder', + displayName: t('files', 'Folder'), + templateName: t('files', 'New folder'), + iconClass: 'icon-folder', + fileType: 'folder', + actionHandler: function(name) { + self._fileList.createDirectory(name); + } + }]; + + OC.Plugins.attach('OCA.Files.NewFileMenu', this); }, template: function(data) { @@ -163,7 +185,14 @@ if (checkInput()) { var newname = $input.val(); - self._createFile(fileType, newname); + + /* Find the right actionHandler that should be called. + * Actions is retrieved by using `actionSpec.id` */ + action = _.filter(self._menuItems, function(item) { + return item.id == $target.attr('data-action'); + }).pop(); + action.actionHandler(newname); + $form.remove(); $target.find('.displayname').removeClass('hidden'); OC.hideMenus(); @@ -172,23 +201,21 @@ }, /** - * Creates a file with the given type and name. - * This calls the matching methods on the attached file list. - * - * @param {string} fileType file type - * @param {string} name file name - */ - _createFile: function(fileType, name) { - switch(fileType) { - case 'file': - this._fileList.createFile(name); - break; - case 'folder': - this._fileList.createDirectory(name); - break; - default: - console.warn('Unknown file type "' + fileType + '"'); - } + * Add a new item menu entry in the “New” file menu (in + * last position). By clicking on the item, the + * `actionHandler` function is called. + * + * @param {Object} actionSpec item’s properties + */ + addMenuEntry: function(actionSpec) { + this._menuItems.push({ + id: actionSpec.id, + displayName: actionSpec.displayName, + templateName: actionSpec.templateName, + iconClass: actionSpec.iconClass, + fileType: actionSpec.fileType, + actionHandler: actionSpec.actionHandler, + }); }, /** @@ -198,19 +225,7 @@ this.$el.html(this.template({ uploadMaxHumanFileSize: 'TODO', uploadLabel: t('files', 'Upload'), - items: [{ - id: 'file', - displayName: t('files', 'Text file'), - templateName: t('files', 'New text file.txt'), - iconClass: 'icon-filetype-text', - fileType: 'file' - }, { - id: 'folder', - displayName: t('files', 'Folder'), - templateName: t('files', 'New folder'), - iconClass: 'icon-folder', - fileType: 'folder' - }] + items: this._menuItems })); OC.Util.scaleFixForIE8(this.$('.svg')); }, |