Fix more issues with shared folders

This commit is contained in:
yflory
2018-07-12 17:27:16 +02:00
parent 8516587ece
commit 7d89026d83
5 changed files with 236 additions and 83 deletions

View File

@@ -213,10 +213,11 @@ define([
for (var k in objRef) { delete objRef[k]; }
$.extend(true, objRef, objToCopy);
};
var updateSharedFolders = function (sframeChan, drive, folders, cb) {
var updateSharedFolders = function (sframeChan, manager, drive, folders, cb) {
if (!drive || !drive.sharedFolders) {
return void cb();
}
var oldIds = Object.keys(folders);
nThen(function (waitFor) {
Object.keys(drive.sharedFolders).forEach(function (fId) {
sframeChan.query('Q_DRIVE_GETOBJECT', {
@@ -224,6 +225,9 @@ define([
}, waitFor(function (err, newObj) {
folders[fId] = folders[fId] || {};
copyObjectValue(folders[fId], newObj);
if (manager && oldIds.indexOf(fId) === -1) {
manager.addProxy(fId, folders[fId]);
}
}));
});
}).nThen(function () {
@@ -260,6 +264,10 @@ define([
'tabindex': '-1',
'data-icon': faFolder,
}, Messages.fc_newfolder)),
h('li', h('a.cp-app-drive-context-newsharedfolder.dropdown-item.cp-app-drive-context-editable', {
'tabindex': '-1',
'data-icon': faSharedFolder,
}, 'New SF')), // XXX
h('li', h('a.cp-app-drive-context-hashtag.dropdown-item.cp-app-drive-context-editable', {
'tabindex': '-1',
'data-icon': faTags,
@@ -786,6 +794,7 @@ define([
if (type === "content") {
filter = function ($el, className) {
if (className === 'newfolder') { return; }
if (className === 'newsharedfolder') { return; }
return AppConfig.availablePadTypes.indexOf($el.attr('data-type')) === -1;
};
} else {
@@ -869,7 +878,7 @@ define([
switch(type) {
case 'content':
show = ['newfolder', 'newdoc'];
show = ['newfolder', 'newsharedfolder', 'newdoc'];
break;
case 'tree':
show = ['open', 'openro', 'rename', 'delete', 'deleteowned', 'removesf',
@@ -1648,6 +1657,52 @@ define([
$container.append($button);
};
// Get the upload options
var addSharedFolderModal = function (cb) {
var createHelper = function (href, text) {
var q = h('a.fa.fa-question-circle', {
style: 'text-decoration: none !important;',
title: text,
href: APP.origin + href,
target: "_blank",
'data-tippy-placement': "right"
});
return q;
};
// Ask for name, password and owner
// XXX
var content = h('div', [
h('h4', "NEW SF TITLE"),
h('label', {for: 'cp-app-drive-sf-name'}, 'SF NAME'),
h('input#cp-app-drive-sf-name', {type: 'text', placeholder: "NEW FOLDER NAME"}),
//h('label', {for: 'cp-app-drive-sf-password'}, 'SF PASSWORD'),
//UI.passwordInput({id: 'cp-app-drive-sf-password'}),
h('span', {
style: 'display:flex;align-items:center;justify-content:space-between'
}, [
UI.createCheckbox('cp-app-drive-sf-owned', "OWNED?", true),
createHelper('/faq.html#keywords-owned', Messages.creation_owned1) // TODO
]),
]);
UI.confirm(content, function (yes) {
if (!yes) { return void cb(); }
// Get the values
var newName = $(content).find('#cp-app-drive-sf-name').val();
//var password = $(content).find('#cp-app-drive-sf-password').val() || undefined;
var password;
var owned = $(content).find('#cp-app-drive-sf-owned').is(':checked');
cb({
name: newName,
password: password,
owned: owned
});
});
};
var getNewPadTypes = function () {
var arr = [];
AppConfig.availablePadTypes.forEach(function (type) {
@@ -1680,6 +1735,12 @@ define([
.click(function () {
manager.addFolder(currentPath, null, onCreated);
});
$block.find('a.cp-app-drive-new-shared-folder, li.cp-app-drive-new-shared-folder')
.click(function () {
addSharedFolderModal(function (obj) {
manager.addSharedFolder(currentPath, obj, refresh);
});
});
$block.find('a.cp-app-drive-new-upload, li.cp-app-drive-new-upload')
.click(function () {
var $input = $('<input>', {
@@ -1719,6 +1780,11 @@ define([
attributes: {'class': 'cp-app-drive-new-folder'},
content: $('<div>').append($folderIcon.clone()).html() + Messages.fm_folder
});
options.push({
tag: 'a',
attributes: {'class': 'cp-app-drive-new-shared-folder'},
content: $('<div>').append($folderIcon.clone()).html() + "NEW SF" // XXX
});
options.push({tag: 'hr'});
options.push({
tag: 'a',
@@ -1967,6 +2033,13 @@ define([
}).prepend($folderIcon.clone()).appendTo($container);
$element1.append($('<span>', { 'class': 'cp-app-drive-new-name' })
.text(Messages.fm_folder));
// Shared Folder
var $element3 = $('<li>', {
'class': 'cp-app-drive-new-shared-folder cp-app-drive-element-row ' +
'cp-app-drive-element-grid'
}).prepend($folderIcon.clone()).appendTo($container);
$element3.append($('<span>', { 'class': 'cp-app-drive-new-name' })
.text("SF")); // XXX
// File
var $element2 = $('<li>', {
'class': 'cp-app-drive-new-upload cp-app-drive-element-row ' +
@@ -2510,7 +2583,7 @@ define([
}
updateObject(sframeChan, proxy, function () {
copyObjectValue(files, proxy.drive);
updateSharedFolders(sframeChan, files, folders, function () {
updateSharedFolders(sframeChan, manager, files, folders, function () {
_displayDirectory(path, force);
});
});
@@ -2590,7 +2663,14 @@ define([
// Display root content
var $list = $('<ul>').appendTo($container);
var keys = Object.keys(root).sort();
var keys = Object.keys(root).sort(function (a, b) {
var newA = manager.isSharedFolder(root[a]) ?
manager.getSharedFolderData(root[a]).title : a;
var newB = manager.isSharedFolder(root[b]) ?
manager.getSharedFolderData(root[b]).title : b;
return newA < newB ? -1 :
(newA === newB ? 0 : 1);
});
keys.forEach(function (key) {
// Do not display files in the menu
if (!manager.isFolder(root[key])) { return; }
@@ -2604,8 +2684,8 @@ define([
newPath.push(manager.user.userObject.ROOT);
isCurrentFolder = manager.comparePath(newPath, currentPath);
// Subfolders?
root = manager.folders[fId].proxy[manager.user.userObject.ROOT];
subfolder = manager.hasSubfolder(root);
var newRoot = manager.folders[fId].proxy[manager.user.userObject.ROOT];
subfolder = manager.hasSubfolder(newRoot);
// Fix name
key = manager.getSharedFolderData(fId).title;
// Fix icon
@@ -2893,6 +2973,12 @@ define([
};
manager.addFolder(paths[0].path, null, onFolderCreated);
}
else if ($(this).hasClass('cp-app-drive-context-newsharedfolder')) {
if (paths.length !== 1) { return; }
addSharedFolderModal(function (obj) {
manager.addSharedFolder(paths[0].path, obj, refresh);
});
}
else if ($(this).hasClass("cp-app-drive-context-newdoc")) {
var ntype = $(this).data('type') || 'pad';
var path2 = manager.isPathIn(currentPath, [TRASH]) ? '' : currentPath;
@@ -3165,7 +3251,7 @@ define([
var sframeChan = common.getSframeChannel();
updateObject(sframeChan, proxy, waitFor(function () {
updateSharedFolders(sframeChan, proxy.drive, folders, waitFor());
updateSharedFolders(sframeChan, null, proxy.drive, folders, waitFor());
}));
}).nThen(function () {
var sframeChan = common.getSframeChannel();