resolve merge conflicts
This commit is contained in:
@@ -46,6 +46,7 @@ define([
|
||||
else { return $('body').width() <= 600; }
|
||||
},
|
||||
isMac: navigator.platform === "MacIntel",
|
||||
allowFolderUpload: File.prototype.hasOwnProperty("webkitRelativePath"),
|
||||
};
|
||||
|
||||
var stringify = function (obj) {
|
||||
@@ -89,6 +90,8 @@ define([
|
||||
var faDelete = 'fa-eraser';
|
||||
var faProperties = 'fa-database';
|
||||
var faTags = 'fa-hashtag';
|
||||
var faUploadFiles = 'cptools-file-upload';
|
||||
var faUploadFolder = 'cptools-folder-upload';
|
||||
var faEmpty = 'fa-trash-o';
|
||||
var faRestore = 'fa-repeat';
|
||||
var faShowParent = 'fa-location-arrow';
|
||||
@@ -381,6 +384,15 @@ define([
|
||||
'data-icon': faSharedFolder,
|
||||
}, Messages.fc_newsharedfolder)),
|
||||
$separator.clone()[0],
|
||||
h('li', h('a.cp-app-drive-context-uploadfiles.dropdown-item.cp-app-drive-context-editable', {
|
||||
'tabindex': '-1',
|
||||
'data-icon': faUploadFiles,
|
||||
}, Messages.uploadButton)),
|
||||
h('li', h('a.cp-app-drive-context-uploadfolder.dropdown-item.cp-app-drive-context-editable', {
|
||||
'tabindex': '-1',
|
||||
'data-icon': faUploadFolder,
|
||||
}, Messages.uploadFolderButton)),
|
||||
$separator.clone()[0],
|
||||
h('li', h('a.cp-app-drive-context-newdoc.dropdown-item.cp-app-drive-context-editable', {
|
||||
'tabindex': '-1',
|
||||
'data-icon': AppConfig.applicationsIcon.pad,
|
||||
@@ -1070,7 +1082,11 @@ define([
|
||||
// Hide the new shared folder menu if we're already in a shared folder
|
||||
return manager.isInSharedFolder(currentPath) || APP.disableSF;
|
||||
}
|
||||
return AppConfig.availablePadTypes.indexOf($el.attr('data-type')) === -1;
|
||||
if (className === 'uploadfiles') { return; }
|
||||
if (className === 'uploadfolder') { return !APP.allowFolderUpload; }
|
||||
if (className === 'newdoc') {
|
||||
return AppConfig.availablePadTypes.indexOf($el.attr('data-type')) === -1;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
// In case of multiple selection, we must hide the option if at least one element
|
||||
@@ -1189,7 +1205,7 @@ define([
|
||||
|
||||
switch(type) {
|
||||
case 'content':
|
||||
show = ['newfolder', 'newsharedfolder', 'newdoc'];
|
||||
show = ['newfolder', 'newsharedfolder', 'uploadfiles', 'uploadfolder', 'newdoc'];
|
||||
break;
|
||||
case 'tree':
|
||||
show = ['open', 'openro', 'openincode', 'expandall', 'collapseall', 'color', 'download', 'share', 'rename', 'delete', 'deleteowned', 'removesf', 'properties', 'hashtag'];
|
||||
@@ -2251,6 +2267,111 @@ define([
|
||||
});
|
||||
return arr;
|
||||
};
|
||||
var showUploadFilesModal = function () {
|
||||
var $input = $('<input>', {
|
||||
'type': 'file',
|
||||
'style': 'display: none;',
|
||||
'multiple': 'multiple'
|
||||
}).on('change', function (e) {
|
||||
var files = Util.slice(e.target.files);
|
||||
files.forEach(function (file) {
|
||||
var ev = {
|
||||
target: $content[0],
|
||||
path: findDropPath($content[0])
|
||||
};
|
||||
APP.FM.handleFile(file, ev);
|
||||
});
|
||||
});
|
||||
$input.click();
|
||||
};
|
||||
|
||||
// create the folder structure before to upload files from folder
|
||||
var uploadFolder = function (fileList) {
|
||||
var currentFolder = currentPath;
|
||||
// create an array of all the files relative path
|
||||
var files = Array.prototype.map.call(fileList, function (file) {
|
||||
return {
|
||||
file: file,
|
||||
path: file.webkitRelativePath.split("/"),
|
||||
};
|
||||
});
|
||||
// if folder name already exist in drive, rename it
|
||||
var uploadedFolderName = files[0].path[0];
|
||||
var availableName = manager.user.userObject.getAvailableName(manager.find(currentFolder), uploadedFolderName);
|
||||
|
||||
// ask for folder name and files options, then upload all the files!
|
||||
APP.FM.showFolderUploadModal(availableName, function (folderUploadOptions) {
|
||||
if (!folderUploadOptions) { return; }
|
||||
|
||||
// verfify folder name is possible, and update files path
|
||||
availableName = manager.user.userObject.getAvailableName(manager.find(currentFolder), folderUploadOptions.folderName);
|
||||
if (uploadedFolderName !== availableName) {
|
||||
files.forEach(function (file) {
|
||||
file.path[0] = availableName;
|
||||
});
|
||||
}
|
||||
|
||||
// uploadSteps is an array of objects {folders: [], files: []}, containing all the folders and files to create safely
|
||||
// at the index i + 1, the files and folders are children of the folders at the index i
|
||||
var maxSteps = files.reduce(function (max, file) { return Math.max(max, file.path.length); }, 0);
|
||||
var uploadSteps = [];
|
||||
for (var i = 0 ; i < maxSteps ; i++) {
|
||||
uploadSteps[i] = {
|
||||
folders: [],
|
||||
files: [],
|
||||
};
|
||||
}
|
||||
files.forEach(function (file) {
|
||||
// add steps to create subfolders containing file
|
||||
for (var depth = 0 ; depth < file.path.length - 1 ; depth++) {
|
||||
var subfolderStr = file.path.slice(0, depth + 1).join("/");
|
||||
if (uploadSteps[depth].folders.indexOf(subfolderStr) === -1) {
|
||||
uploadSteps[depth].folders.push(subfolderStr);
|
||||
}
|
||||
}
|
||||
// add step to upload file (one step later than the step of its direct parent folder)
|
||||
uploadSteps[file.path.length - 1].files.push(file);
|
||||
});
|
||||
|
||||
// add folders, then add files when theirs folders have been created
|
||||
// wait for the folders to be created to go to the next step (don't wait for the files)
|
||||
var stepByStep = function (uploadSteps, i) {
|
||||
if (i >= uploadSteps.length) { return; }
|
||||
nThen(function (waitFor) {
|
||||
// add folders
|
||||
uploadSteps[i].folders.forEach(function (folder) {
|
||||
var folderPath = folder.split("/");
|
||||
var parentFolder = currentFolder.concat(folderPath.slice(0, -1));
|
||||
var folderName = folderPath.slice(-1);
|
||||
manager.addFolder(parentFolder, folderName, waitFor(refresh));
|
||||
});
|
||||
// upload files
|
||||
uploadSteps[i].files.forEach(function (file) {
|
||||
var ev = {
|
||||
target: $content[0],
|
||||
path: currentFolder.concat(file.path.slice(0, -1)),
|
||||
};
|
||||
APP.FM.handleFile(file.file, ev, folderUploadOptions);
|
||||
});
|
||||
}).nThen(function () {
|
||||
stepByStep(uploadSteps, i + 1);
|
||||
});
|
||||
};
|
||||
|
||||
stepByStep(uploadSteps, 0);
|
||||
});
|
||||
};
|
||||
var showUploadFolderModal = function () {
|
||||
var $input = $('<input>', {
|
||||
'type': 'file',
|
||||
'style': 'display: none;',
|
||||
'multiple': 'multiple',
|
||||
'webkitdirectory': true,
|
||||
}).on('change', function (e) {
|
||||
uploadFolder(e.target.files);
|
||||
});
|
||||
$input.click();
|
||||
};
|
||||
var addNewPadHandlers = function ($block, isInRoot) {
|
||||
// Handlers
|
||||
if (isInRoot) {
|
||||
@@ -2277,24 +2398,8 @@ define([
|
||||
});
|
||||
});
|
||||
}
|
||||
$block.find('a.cp-app-drive-new-upload, li.cp-app-drive-new-upload')
|
||||
.click(function () {
|
||||
var $input = $('<input>', {
|
||||
'type': 'file',
|
||||
'style': 'display: none;',
|
||||
'multiple': 'multiple'
|
||||
}).on('change', function (e) {
|
||||
var files = Util.slice(e.target.files);
|
||||
files.forEach(function (file) {
|
||||
var ev = {
|
||||
target: $content[0],
|
||||
path: findDropPath($content[0])
|
||||
};
|
||||
APP.FM.handleFile(file, ev);
|
||||
});
|
||||
});
|
||||
$input.click();
|
||||
});
|
||||
$block.find('a.cp-app-drive-new-fileupload, li.cp-app-drive-new-fileupload').click(showUploadFilesModal);
|
||||
$block.find('a.cp-app-drive-new-folderupload, li.cp-app-drive-new-folderupload').click(showUploadFolderModal);
|
||||
}
|
||||
$block.find('a.cp-app-drive-new-doc, li.cp-app-drive-new-doc')
|
||||
.click(function () {
|
||||
@@ -2329,9 +2434,16 @@ define([
|
||||
options.push({tag: 'hr'});
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-upload'},
|
||||
attributes: {'class': 'cp-app-drive-new-fileupload'},
|
||||
content: $('<div>').append(getIcon('fileupload')).html() + Messages.uploadButton
|
||||
});
|
||||
if (APP.allowFolderUpload) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-folderupload'},
|
||||
content: $('<div>').append(getIcon('folderupload')).html() + Messages.uploadFolderButton
|
||||
});
|
||||
}
|
||||
options.push({tag: 'hr'});
|
||||
}
|
||||
getNewPadTypes().forEach(function (type) {
|
||||
@@ -2613,13 +2725,22 @@ define([
|
||||
$element3.append($('<span>', { 'class': 'cp-app-drive-new-name' })
|
||||
.text(Messages.fm_sharedFolder));
|
||||
}
|
||||
// File
|
||||
var $element2 = $('<li>', {
|
||||
'class': 'cp-app-drive-new-upload cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
// Upload file
|
||||
var $elementFileUpload = $('<li>', {
|
||||
'class': 'cp-app-drive-new-fileupload cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(getIcon('fileupload')).appendTo($container);
|
||||
$element2.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
$elementFileUpload.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
.text(Messages.uploadButton));
|
||||
// Upload folder
|
||||
if (APP.allowFolderUpload) {
|
||||
var $elementFolderUpload = $('<li>', {
|
||||
'class': 'cp-app-drive-new-folderupload cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(getIcon('folderupload')).appendTo($container);
|
||||
$elementFolderUpload.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
.text(Messages.uploadFolderButton));
|
||||
}
|
||||
}
|
||||
// Pads
|
||||
getNewPadTypes().forEach(function (type) {
|
||||
@@ -3852,6 +3973,12 @@ define([
|
||||
manager.addSharedFolder(paths[0].path, obj, refresh);
|
||||
});
|
||||
}
|
||||
else if ($this.hasClass("cp-app-drive-context-uploadfiles")) {
|
||||
showUploadFilesModal();
|
||||
}
|
||||
else if ($this.hasClass("cp-app-drive-context-uploadfolder")) {
|
||||
showUploadFolderModal();
|
||||
}
|
||||
else if ($this.hasClass("cp-app-drive-context-newdoc")) {
|
||||
var ntype = $this.data('type') || 'pad';
|
||||
var path2 = manager.isPathIn(currentPath, [TRASH]) ? '' : currentPath;
|
||||
|
||||
Reference in New Issue
Block a user