Skip to content

Commit

Permalink
Allow apps to add new items in the “New” filemenu.
Browse files Browse the repository at this point in the history
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()`.
  • Loading branch information
otetard committed Oct 26, 2015
1 parent 5181e5c commit d386168
Showing 1 changed file with 46 additions and 31 deletions.
77 changes: 46 additions & 31 deletions apps/files/js/newfilemenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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();
Expand All @@ -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,
});
},

/**
Expand All @@ -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'));
},
Expand Down

0 comments on commit d386168

Please sign in to comment.