2012-10-28 14:51:54 +04:00
|
|
|
var FileActions = {
|
|
|
|
actions: {},
|
|
|
|
defaults: {},
|
|
|
|
icons: {},
|
|
|
|
currentFile: null,
|
|
|
|
register: function (mime, name, permissions, icon, action) {
|
|
|
|
if (!FileActions.actions[mime]) {
|
|
|
|
FileActions.actions[mime] = {};
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2012-07-26 00:33:08 +04:00
|
|
|
if (!FileActions.actions[mime][name]) {
|
|
|
|
FileActions.actions[mime][name] = {};
|
|
|
|
}
|
|
|
|
FileActions.actions[mime][name]['action'] = action;
|
|
|
|
FileActions.actions[mime][name]['permissions'] = permissions;
|
2012-10-28 14:51:54 +04:00
|
|
|
FileActions.icons[name] = icon;
|
2011-06-04 22:16:44 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
setDefault: function (mime, name) {
|
|
|
|
FileActions.defaults[mime] = name;
|
2011-06-04 22:16:44 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
get: function (mime, type, permissions) {
|
|
|
|
var actions = {};
|
|
|
|
if (FileActions.actions.all) {
|
|
|
|
actions = $.extend(actions, FileActions.actions.all);
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2013-04-24 17:26:36 +04:00
|
|
|
if (type) {//type is 'dir' or 'file'
|
|
|
|
if (FileActions.actions[type]) {
|
|
|
|
actions = $.extend(actions, FileActions.actions[type]);
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2013-04-24 17:26:36 +04:00
|
|
|
}
|
|
|
|
if (mime) {
|
2012-10-28 14:51:54 +04:00
|
|
|
var mimePart = mime.substr(0, mime.indexOf('/'));
|
|
|
|
if (FileActions.actions[mimePart]) {
|
|
|
|
actions = $.extend(actions, FileActions.actions[mimePart]);
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2013-04-24 17:26:36 +04:00
|
|
|
if (FileActions.actions[mime]) {
|
|
|
|
actions = $.extend(actions, FileActions.actions[mime]);
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
|
|
|
}
|
2012-07-26 00:33:08 +04:00
|
|
|
var filteredActions = {};
|
2012-10-28 14:51:54 +04:00
|
|
|
$.each(actions, function (name, action) {
|
2012-07-26 00:33:08 +04:00
|
|
|
if (action.permissions & permissions) {
|
|
|
|
filteredActions[name] = action.action;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return filteredActions;
|
2011-06-04 22:16:44 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
getDefault: function (mime, type, permissions) {
|
|
|
|
if (mime) {
|
|
|
|
var mimePart = mime.substr(0, mime.indexOf('/'));
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2012-10-28 14:51:54 +04:00
|
|
|
var name = false;
|
|
|
|
if (mime && FileActions.defaults[mime]) {
|
|
|
|
name = FileActions.defaults[mime];
|
|
|
|
} else if (mime && FileActions.defaults[mimePart]) {
|
|
|
|
name = FileActions.defaults[mimePart];
|
|
|
|
} else if (type && FileActions.defaults[type]) {
|
|
|
|
name = FileActions.defaults[type];
|
|
|
|
} else {
|
|
|
|
name = FileActions.defaults.all;
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2012-10-28 14:51:54 +04:00
|
|
|
var actions = this.get(mime, type, permissions);
|
2011-06-17 01:15:58 +04:00
|
|
|
return actions[name];
|
2011-06-04 22:16:44 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
display: function (parent) {
|
|
|
|
FileActions.currentFile = parent;
|
|
|
|
var actions = FileActions.get(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
|
|
|
|
var file = FileActions.getCurrentFile();
|
2013-08-08 15:50:04 +04:00
|
|
|
if ($('tr[data-file="'+file+'"]').data('renaming')) {
|
2011-07-29 04:26:20 +04:00
|
|
|
return;
|
|
|
|
}
|
2012-04-15 15:25:31 +04:00
|
|
|
parent.children('a.name').append('<span class="fileactions" />');
|
2012-10-28 14:51:54 +04:00
|
|
|
var defaultAction = FileActions.getDefault(FileActions.getCurrentMimeType(), FileActions.getCurrentType(), FileActions.getCurrentPermissions());
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2012-11-14 19:05:24 +04:00
|
|
|
var actionHandler = function (event) {
|
2012-11-04 23:48:38 +04:00
|
|
|
event.stopPropagation();
|
|
|
|
event.preventDefault();
|
2012-11-14 19:05:24 +04:00
|
|
|
|
|
|
|
FileActions.currentFile = event.data.elem;
|
|
|
|
var file = FileActions.getCurrentFile();
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2012-11-14 19:05:24 +04:00
|
|
|
event.data.actionFunc(file);
|
2012-11-04 23:48:38 +04:00
|
|
|
};
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2013-02-11 19:09:04 +04:00
|
|
|
var addAction = function (name, action) {
|
2012-08-24 23:11:33 +04:00
|
|
|
// NOTE: Temporary fix to prevent rename action in root of Shared directory
|
2012-10-28 15:47:33 +04:00
|
|
|
if (name === 'Rename' && $('#dir').val() === '/Shared') {
|
2012-11-14 19:05:24 +04:00
|
|
|
return true;
|
2012-08-24 23:11:33 +04:00
|
|
|
}
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2012-11-14 19:05:24 +04:00
|
|
|
if ((name === 'Download' || action !== defaultAction) && name !== 'Delete') {
|
2012-10-28 14:51:54 +04:00
|
|
|
var img = FileActions.icons[name];
|
|
|
|
if (img.call) {
|
|
|
|
img = img(file);
|
2011-08-12 01:21:30 +04:00
|
|
|
}
|
2013-02-11 19:09:04 +04:00
|
|
|
var html = '<a href="#" class="action" data-action="' + name + '">';
|
2012-10-28 14:51:54 +04:00
|
|
|
if (img) {
|
2012-11-14 19:05:24 +04:00
|
|
|
html += '<img class ="svg" src="' + img + '" /> ';
|
2012-10-28 14:51:54 +04:00
|
|
|
}
|
|
|
|
html += t('files', name) + '</a>';
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2012-10-28 14:51:54 +04:00
|
|
|
var element = $(html);
|
|
|
|
element.data('action', name);
|
2012-11-14 19:05:24 +04:00
|
|
|
//alert(element);
|
2013-02-11 19:09:04 +04:00
|
|
|
element.on('click', {a: null, elem: parent, actionFunc: actions[name]}, actionHandler);
|
2012-04-15 15:25:31 +04:00
|
|
|
parent.find('a.name>span.fileactions').append(element);
|
2011-07-28 01:23:46 +04:00
|
|
|
}
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2013-02-11 19:09:04 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
$.each(actions, function (name, action) {
|
|
|
|
if (name !== 'Share') {
|
|
|
|
addAction(name, action);
|
|
|
|
}
|
2012-11-14 19:05:24 +04:00
|
|
|
});
|
2013-03-13 14:33:20 +04:00
|
|
|
if(actions.Share && !($('#dir').val() === '/' && file === 'Shared')){
|
2013-04-24 18:13:17 +04:00
|
|
|
// t('files', 'Share')
|
2013-02-11 19:09:04 +04:00
|
|
|
addAction('Share', actions.Share);
|
|
|
|
}
|
2013-01-14 23:30:39 +04:00
|
|
|
|
2012-10-28 14:51:54 +04:00
|
|
|
if (actions['Delete']) {
|
|
|
|
var img = FileActions.icons['Delete'];
|
|
|
|
if (img.call) {
|
|
|
|
img = img(file);
|
2011-08-22 17:20:24 +04:00
|
|
|
}
|
2013-02-11 19:09:04 +04:00
|
|
|
if (typeof trashBinApp !== 'undefined' && trashBinApp) {
|
2013-07-18 20:46:37 +04:00
|
|
|
var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete delete-icon" />';
|
2012-09-07 08:01:52 +04:00
|
|
|
} else {
|
2013-07-18 20:41:01 +04:00
|
|
|
var html = '<a href="#" class="action delete delete-icon" />';
|
2012-09-07 08:01:52 +04:00
|
|
|
}
|
2012-10-28 14:51:54 +04:00
|
|
|
var element = $(html);
|
2012-11-04 23:48:38 +04:00
|
|
|
element.data('action', actions['Delete']);
|
2013-02-11 19:09:04 +04:00
|
|
|
element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler);
|
2011-07-28 01:31:38 +04:00
|
|
|
parent.parent().children().last().append(element);
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2011-07-22 02:18:41 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
getCurrentFile: function () {
|
2011-07-28 06:29:04 +04:00
|
|
|
return FileActions.currentFile.parent().attr('data-file');
|
2011-06-04 22:16:44 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
getCurrentMimeType: function () {
|
2011-07-28 06:29:04 +04:00
|
|
|
return FileActions.currentFile.parent().attr('data-mime');
|
2011-06-04 22:16:44 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
getCurrentType: function () {
|
2011-07-28 06:29:04 +04:00
|
|
|
return FileActions.currentFile.parent().attr('data-type');
|
2012-07-26 00:33:08 +04:00
|
|
|
},
|
2012-10-28 14:51:54 +04:00
|
|
|
getCurrentPermissions: function () {
|
2012-07-26 00:33:08 +04:00
|
|
|
return FileActions.currentFile.parent().data('permissions');
|
2011-06-04 22:16:44 +04:00
|
|
|
}
|
2012-09-06 00:17:33 +04:00
|
|
|
};
|
2011-06-04 22:16:44 +04:00
|
|
|
|
2012-10-28 14:51:54 +04:00
|
|
|
$(document).ready(function () {
|
|
|
|
if ($('#allowZipDownload').val() == 1) {
|
2012-03-19 14:56:02 +04:00
|
|
|
var downloadScope = 'all';
|
|
|
|
} else {
|
|
|
|
var downloadScope = 'file';
|
|
|
|
}
|
2013-02-11 19:09:04 +04:00
|
|
|
|
2013-01-18 13:51:13 +04:00
|
|
|
if (typeof disableDownloadActions == 'undefined' || !disableDownloadActions) {
|
|
|
|
FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
|
|
|
|
return OC.imagePath('core', 'actions/download');
|
|
|
|
}, function (filename) {
|
|
|
|
window.location = OC.filePath('files', 'ajax', 'download.php') + '?files=' + encodeURIComponent(filename) + '&dir=' + encodeURIComponent($('#dir').val());
|
|
|
|
});
|
|
|
|
}
|
2013-02-11 19:09:04 +04:00
|
|
|
$('#fileList tr').each(function () {
|
2012-10-28 15:47:33 +04:00
|
|
|
FileActions.display($(this).children('td.filename'));
|
|
|
|
});
|
2013-08-08 15:50:04 +04:00
|
|
|
|
|
|
|
$('#fileList').trigger(jQuery.Event("fileActionsReady"));
|
2013-02-11 19:09:04 +04:00
|
|
|
|
2011-06-04 22:16:44 +04:00
|
|
|
});
|
|
|
|
|
2012-10-28 14:51:54 +04:00
|
|
|
FileActions.register('all', 'Delete', OC.PERMISSION_DELETE, function () {
|
|
|
|
return OC.imagePath('core', 'actions/delete');
|
|
|
|
}, function (filename) {
|
|
|
|
if (Files.cancelUpload(filename)) {
|
|
|
|
if (filename.substr) {
|
|
|
|
filename = [filename];
|
2012-03-27 23:38:55 +04:00
|
|
|
}
|
2012-10-28 14:51:54 +04:00
|
|
|
$.each(filename, function (index, file) {
|
|
|
|
var filename = $('tr').filterAttr('data-file', file);
|
2012-03-27 23:38:55 +04:00
|
|
|
filename.hide();
|
|
|
|
filename.find('input[type="checkbox"]').removeAttr('checked');
|
|
|
|
filename.removeClass('selected');
|
|
|
|
});
|
|
|
|
procesSelection();
|
2012-10-28 14:51:54 +04:00
|
|
|
} else {
|
2012-03-27 23:38:55 +04:00
|
|
|
FileList.do_delete(filename);
|
|
|
|
}
|
2012-07-28 05:28:25 +04:00
|
|
|
$('.tipsy').remove();
|
2011-06-04 22:16:44 +04:00
|
|
|
});
|
|
|
|
|
2012-09-21 14:30:13 +04:00
|
|
|
// t('files', 'Rename')
|
2012-10-28 14:51:54 +04:00
|
|
|
FileActions.register('all', 'Rename', OC.PERMISSION_UPDATE, function () {
|
|
|
|
return OC.imagePath('core', 'actions/rename');
|
|
|
|
}, function (filename) {
|
2011-07-29 01:04:34 +04:00
|
|
|
FileList.rename(filename);
|
2011-07-28 06:29:04 +04:00
|
|
|
});
|
2011-06-04 22:16:44 +04:00
|
|
|
|
2012-10-28 14:51:54 +04:00
|
|
|
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
|
2013-08-17 15:07:18 +04:00
|
|
|
var dir = $('#dir').val() || '/';
|
2013-06-28 23:00:09 +04:00
|
|
|
if (dir !== '/') {
|
2012-12-29 05:10:01 +04:00
|
|
|
dir = dir + '/';
|
|
|
|
}
|
2013-08-17 15:07:18 +04:00
|
|
|
FileList.changeDirectory(dir + filename);
|
2011-06-04 22:16:44 +04:00
|
|
|
});
|
|
|
|
|
2012-10-28 14:51:54 +04:00
|
|
|
FileActions.setDefault('dir', 'Open');
|