nextcloud/apps/files/js/fileactions.js

197 lines
6.1 KiB
JavaScript
Raw Normal View History

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
}
2012-10-28 14:51:54 +04:00
if (mime) {
if (FileActions.actions[mime]) {
actions = $.extend(actions, FileActions.actions[mime]);
2011-06-04 22:16:44 +04:00
}
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
}
}
2012-10-28 14:51:54 +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
}
}
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);
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();
if ($('tr').filterAttr('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
var actionHandler = function (event) {
event.stopPropagation();
event.preventDefault();
FileActions.currentFile = event.data.elem;
var file = FileActions.getCurrentFile();
2013-01-14 23:30:39 +04:00
event.data.actionFunc(file);
};
2013-01-14 23:30:39 +04:00
$.each(actions, function (name, action) {
// 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') {
return true;
}
2013-01-14 23:30:39 +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);
}
2012-10-29 00:01:50 +04:00
var html = '<a href="#" class="action" data-action="'+name+'">';
2012-10-28 14:51:54 +04:00
if (img) {
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);
//alert(element);
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);
}
2013-01-14 23:30:39 +04:00
});
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);
}
if (typeof trashBinApp !== 'undefined' && trashBinApp) {
var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete" />';
} else {
2012-10-28 15:47:33 +04:00
var html = '<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" />';
}
2012-10-28 14:51:54 +04:00
var element = $(html);
if (img) {
element.append($('<img class ="svg" src="' + img + '"/>'));
}
element.data('action', actions['Delete']);
element.on('click',{a:null, elem:parent, actionFunc:actions['Delete']},actionHandler);
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 () {
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 () {
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 () {
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) {
var downloadScope = 'all';
} else {
var downloadScope = 'file';
}
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());
});
}
2012-10-28 15:47:33 +04:00
$('#fileList tr').each(function(){
FileActions.display($(this).children('td.filename'));
});
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-10-28 14:51:54 +04:00
$.each(filename, function (index, file) {
var filename = $('tr').filterAttr('data-file', file);
filename.hide();
filename.find('input[type="checkbox"]').removeAttr('checked');
filename.removeClass('selected');
});
procesSelection();
2012-10-28 14:51:54 +04:00
} else {
FileList.do_delete(filename);
}
$('.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) {
FileList.rename(filename);
});
2011-06-04 22:16:44 +04:00
2013-01-21 16:07:43 +04:00
2012-10-28 14:51:54 +04:00
FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename) {
window.location = OC.linkTo('files', 'index.php') + '?dir=' + encodeURIComponent($('#dir').val()).replace(/%2F/g, '/') + '/' + encodeURIComponent(filename);
2011-06-04 22:16:44 +04:00
});
2012-10-28 14:51:54 +04:00
FileActions.setDefault('dir', 'Open');