Add proxy manager inner

pull/1/head
yflory 7 years ago
parent bd6a199dca
commit 0c9dfc1fb5

@ -149,7 +149,7 @@ define([
// Remove the shared folder from this list of files ID // Remove the shared folder from this list of files ID
files.filter(function (f) { return !userObject.isSharedFolder(f); }); files.filter(function (f) { return !userObject.isSharedFolder(f); });
// Deduplicate // Deduplicate
Util.deduplicateString(files); files = Util.deduplicateString(files);
// Get the files data associated to these files // Get the files data associated to these files
var filesData = {}; var filesData = {};
@ -350,7 +350,7 @@ define([
userObjects.forEach(function (uo) { userObjects.forEach(function (uo) {
Array.prototype.push.apply(list, uo.getTagsList()); Array.prototype.push.apply(list, uo.getTagsList());
}); });
Util.deduplicateString(list); list = Util.deduplicateString(list);
return list; return list;
}; };
@ -391,8 +391,8 @@ define([
// Don't push duplicates // Don't push duplicates
if (result.indexOf(data.channel) !== -1) { return; } if (result.indexOf(data.channel) !== -1) { return; }
// Return pads owned by someone else or expired by time // Return pads owned by someone else or expired by time
if ((data.owners && data.owners.length && data.owners.indexOf(edPublic) === -1) || if ((data.owners && data.owners.length && data.owners.indexOf(edPublic) === -1)
(data.expire && data.expire < (+new Date()))) { || (data.expire && data.expire < (+new Date()))) {
result.push(data.channel); result.push(data.channel);
} }
}; };
@ -485,7 +485,262 @@ define([
}; };
}; };
/*
Inner only
*/
var renameInner = function (Env, path, newName, cb) {
return void Env.sframeChan.query("Q_DRIVE_USEROBJECT", {
cmd: "rename",
data: {
path: path,
newName: newName
}
}, cb);
};
var moveInner = function (Env, paths, newPath, cb) {
return void Env.sframeChan.query("Q_DRIVE_USEROBJECT", {
cmd: "move",
data: {
paths: paths,
newPath: newPath
}
}, cb);
};
var emptyTrashInner = function (Env, cb) {
return void Env.sframeChan.query("Q_DRIVE_USEROBJECT", {
cmd: "emptyTrash"
}, cb);
};
var addFolderInner = function (Env, path, name, cb) {
return void Env.sframeChan.query("Q_DRIVE_USEROBJECT", {
cmd: "addFolder",
data: {
path: path,
name: name
}
}, cb);
};
var deleteInner = function (Env, paths, cb, nocheck, isOwnPadRemoved, noUnpin) {
return void Env.sframeChan.query("Q_DRIVE_USEROBJECT", {
cmd: "delete",
data: {
paths: paths,
nocheck: nocheck,
noUnpin: noUnpin,
isOwnPadRemoved: isOwnPadRemoved
}
}, cb);
};
var restoreInner = function (Env, path, cb) {
return void Env.sframeChan.query("Q_DRIVE_USEROBJECT", {
cmd: "restore",
data: {
path: path
}
}, cb);
};
/* Tools */
var _getUserObjectFromId = function (Env, id) {
var userObjects = _getUserObjects(Env);
var userObject = Env.user.userObject;
userObjects.some(function (uo) {
if (Object.keys(uo.getFileData(id)).length) {
userObject = uo;
return true;
}
});
return userObject;
};
var _getUserObjectPath = function (Env, uo) {
var fId = uo.id;
if (!fId) { return; }
var fPath = Env.user.userObject.findFile(fId)[0];
return fPath;
};
var getFileData = function (Env, id) {
var userObjects = _getUserObjects(Env);
var data = {};
userObjects.some(function (uo) {
data = uo.getFileData(id);
if (Object.keys(data).length) { return true; }
});
return data;
};
var find = function (Env, path) {
var resolved = _resolvePath(Env, path);
return resolved.userObject.find(path);
};
var getTitle = function (Env, id, type) {
var uo = _getUserObjectFromId(Env, id);
return uo.getTitle(id, type);
};
var isReadOnlyFile = function (Env, id) {
var uo = _getUserObjectFromId(Env, id);
return uo.isReadOnlyFile(id);
};
var getFiles = function (Env, categories) {
var files = [];
var userObjects = _getUserObjects(Env);
userObjects.forEach(function (uo) {
Array.prototype.push.apply(files, uo.getFiles(categories));
});
files = Util.deduplicateString(files);
return files;
};
var search = function (Env, value) {
var ret = [];
var userObjects = _getUserObjects(Env);
userObjects.forEach(function (uo) {
var fPath = _getUserObjectPath(Env, uo);
var results = uo.search(value);
if (fPath) {
// This is a shared folder, we have to fix the paths in the search results
results = results.map(function (r) {
r.paths.map(function (p) {
Array.prototype.unshift.apply(p, fPath);
});
});
}
// Push the results from this proxy
Array.prototype.push.apply(ret, results);
});
return ret;
};
var findFile = function (Env, id) {
var ret = [];
var userObjects = _getUserObjects(Env);
userObjects.forEach(function (uo) {
var fPath = _getUserObjectPath(Env, uo);
var results = uo.findFile(id);
if (fPath) {
// This is a shared folder, we have to fix the paths in the results
results = results.map(function (p) {
Array.prototype.unshift.apply(p, fPath);
});
}
// Push the results from this proxy
Array.prototype.push.apply(ret, results);
});
return ret;
};
var findChannels = function (Env, channels) {
var ret = [];
var userObjects = _getUserObjects(Env);
userObjects.forEach(function (uo) {
var results = uo.findChannels(channels);
Array.prototype.push.apply(ret, results);
});
ret = Util.deduplicateString(ret);
return ret;
};
var getRecentPads = function (Env) {
return Env.user.userObject.getRecentPads();
};
var getOwnedPads = function (Env, edPublic) {
return Env.user.userObject.getOwnedPads(edPublic);
};
/* Generic: doesn't need access to a proxy */
var isFile = function (Env, el, allowStr) {
return Env.user.userObject.isFile(el, allowStr);
};
var isFolder = function (Env, el) {
return Env.user.userObject.isFolder(el);
};
var isFolderEmpty = function (Env, el) {
return Env.user.userObject.isFolderEmpty(el);
};
var isPathIn = function (Env, path, categories) {
return Env.user.userObject.isPathIn(path, categories);
};
var isSubpath = function (Env, path, parentPath) {
return Env.user.userObject.isSubpath(path, parentPath);
};
var isInTrashRoot = function (Env, path) {
return Env.user.userObject.isInTrashRoot(path);
};
var comparePath = function (Env, a, b) {
return Env.user.userObject.comparePath(a, b);
};
var hasSubfolder = function (Env, el, trashRoot) {
return Env.user.userObject.hasSubfolder(el, trashRoot);
};
var hasFile = function (Env, el, trashRoot) {
return Env.user.userObject.hasFile(el, trashRoot);
};
var createInner = function (proxy, sframeChan, uoConfig) {
var Env = {
cfg: uoConfig,
sframeChan: sframeChan,
user: {
proxy: proxy,
userObject: UserObject.init(proxy, uoConfig)
},
folders: {}
};
var callWithEnv = function (f) {
return function () {
[].unshift.call(arguments, Env);
return f.apply(null, arguments);
};
};
return {
// Manager
addProxy: callWithEnv(addProxy),
removeProxy: callWithEnv(removeProxy),
// Drive RPC commands
rename: callWithEnv(renameInner),
move: callWithEnv(moveInner),
emptyTrash: callWithEnv(emptyTrashInner),
addFolder: callWithEnv(addFolderInner),
delete: callWithEnv(deleteInner),
restore: callWithEnv(restoreInner),
// Tools
getFileData: callWithEnv(getFileData),
find: callWithEnv(find),
getTitle: callWithEnv(getTitle),
isReadOnlyFile: callWithEnv(isReadOnlyFile),
getFiles: callWithEnv(getFiles),
search: callWithEnv(search),
getRecentPads: callWithEnv(getRecentPads),
getOwnedPads: callWithEnv(getOwnedPads),
getTagsList: callWithEnv(getTagsList),
findFile: callWithEnv(findFile),
findChannels: callWithEnv(findChannels),
// Generic
isFile: callWithEnv(isFile),
isFolder: callWithEnv(isFolder),
isFolderEmpty: callWithEnv(isFolderEmpty),
isPathIn: callWithEnv(isPathIn),
isSubpath: callWithEnv(isSubpath),
isinTrashRoot: callWithEnv(isInTrashRoot),
comparePath: callWithEnv(comparePath),
hasSubfolder: callWithEnv(hasSubfolder),
hasFile: callWithEnv(hasFile),
// Data
user: Env.user,
folders: Env.folders
};
};
return { return {
create: create create: create,
createInner: createInner
}; };
}); });

@ -31,6 +31,9 @@ define([
exp.TEMPLATE = TEMPLATE; exp.TEMPLATE = TEMPLATE;
exp.SHARED_FOLDERS = SHARED_FOLDERS; exp.SHARED_FOLDERS = SHARED_FOLDERS;
exp.sharedFolder = config.sharedFolder;
exp.id = config.id;
// Logging // Logging
var logging = function () { var logging = function () {
console.log.apply(console, arguments); console.log.apply(console, arguments);

@ -12,7 +12,7 @@ define([
'/common/sframe-common.js', '/common/sframe-common.js',
'/common/common-realtime.js', '/common/common-realtime.js',
'/common/hyperscript.js', '/common/hyperscript.js',
'/common/userObject.js', '/common/proxy-manager.js',
'/customize/application_config.js', '/customize/application_config.js',
'/bower_components/chainpad-listmap/chainpad-listmap.js', '/bower_components/chainpad-listmap/chainpad-listmap.js',
'/customize/messages.js', '/customize/messages.js',
@ -34,7 +34,7 @@ define([
SFCommon, SFCommon,
CommonRealtime, CommonRealtime,
h, h,
FO, ProxyManager,
AppConfig, AppConfig,
Listmap, Listmap,
Messages) Messages)
@ -302,7 +302,7 @@ define([
return $(menu); return $(menu);
}; };
var andThen = function (common, proxy) { var andThen = function (common, proxy, folders) {
var files = proxy.drive; var files = proxy.drive;
var metadataMgr = common.getMetadataMgr(); var metadataMgr = common.getMetadataMgr();
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
@ -315,8 +315,15 @@ define([
config.sframeChan = sframeChan; config.sframeChan = sframeChan;
var filesOp = FO.init(files, config); var manager = ProxyManager.createInner(files, sframeChan, config);
var error = filesOp.error;
Object.keys(folders).forEach(function (id) {
var f = folders[id];
// f.data => metadata (href, title, password...)
// f.proxy => listmap
// f.id => id?
manager.addProxy(id, f.proxy);
});
var $tree = APP.$tree = $("#cp-app-drive-tree"); var $tree = APP.$tree = $("#cp-app-drive-tree");
var $content = APP.$content = $("#cp-app-drive-content"); var $content = APP.$content = $("#cp-app-drive-content");
@ -360,7 +367,7 @@ define([
// Templates enabled: display template category // Templates enabled: display template category
if (AppConfig.enableTemplates) { displayedCategories.push(TEMPLATE); } if (AppConfig.enableTemplates) { displayedCategories.push(TEMPLATE); }
// Tags used: display Tags category // Tags used: display Tags category
if (Object.keys(filesOp.getTagsList()).length) { displayedCategories.push(TAGS); } if (Object.keys(manager.getTagsList()).length) { displayedCategories.push(TAGS); }
var virtualCategories = [SEARCH, RECENT, OWNED, TAGS]; var virtualCategories = [SEARCH, RECENT, OWNED, TAGS];
@ -622,7 +629,7 @@ define([
var removeInput = function (cancel) { var removeInput = function (cancel) {
if (!cancel && $('.cp-app-drive-element-row > input').length === 1) { if (!cancel && $('.cp-app-drive-element-row > input').length === 1) {
var $input = $('.cp-app-drive-element-row > input'); var $input = $('.cp-app-drive-element-row > input');
filesOp.rename($input.data('path'), $input.val(), APP.refresh); manager.rename($input.data('path'), $input.val(), APP.refresh);
} }
$('.cp-app-drive-element-row > input').remove(); $('.cp-app-drive-element-row > input').remove();
$('.cp-app-drive-element-row > span:hidden').removeAttr('style'); $('.cp-app-drive-element-row > span:hidden').removeAttr('style');
@ -648,14 +655,14 @@ define([
ret = date.toLocaleDateString(); ret = date.toLocaleDateString();
} }
} catch (e) { } catch (e) {
error("Unable to format that string to a date with .toLocaleString", sDate, e); console.error("Unable to format that string to a date with .toLocaleString", sDate, e);
} }
return ret; return ret;
}; };
var openFile = function (el, href) { var openFile = function (el, href) {
if (!href) { if (!href) {
var data = filesOp.getFileData(el); var data = manager.getFileData(el);
if (!data || (!data.href && !data.roHref)) { if (!data || (!data.href && !data.roHref)) {
return void logError("Missing data for the file", el, data); return void logError("Missing data for the file", el, data);
} }
@ -690,8 +697,8 @@ define([
$name = $element.find('> .cp-app-drive-element'); $name = $element.find('> .cp-app-drive-element');
} }
$name.hide(); $name.hide();
var el = filesOp.find(path); var el = manager.find(path);
var name = filesOp.isFile(el) ? filesOp.getTitle(el) : path[path.length - 1]; var name = manager.isFile(el) ? manager.getTitle(el) : path[path.length - 1];
var $input = $('<input>', { var $input = $('<input>', {
placeholder: name, placeholder: name,
value: name value: name
@ -705,7 +712,7 @@ define([
e.stopPropagation(); e.stopPropagation();
if (e.which === 13) { if (e.which === 13) {
removeInput(true); removeInput(true);
filesOp.rename(path, $input.val(), refresh); manager.rename(path, $input.val(), refresh);
return; return;
} }
if (e.which === 27) { if (e.which === 27) {
@ -880,7 +887,7 @@ define([
}; };
var updateContextButton = function () { var updateContextButton = function () {
if (filesOp.isPathIn(currentPath, [TRASH])) { if (manager.isPathIn(currentPath, [TRASH])) {
$driveToolbar.find('cp-app-drive-toolbar-emptytrash').show(); $driveToolbar.find('cp-app-drive-toolbar-emptytrash').show();
} else { } else {
$driveToolbar.find('cp-app-drive-toolbar-emptytrash').hide(); $driveToolbar.find('cp-app-drive-toolbar-emptytrash').hide();
@ -1098,19 +1105,19 @@ define([
}; };
var getElementName = function (path) { var getElementName = function (path) {
var file = filesOp.find(path); var file = manager.find(path);
if (!file || !filesOp.isFile(file)) { return '???'; } if (!file || !manager.isFile(file)) { return '???'; }
return filesOp.getTitle(file); return manager.getTitle(file);
}; };
// filesOp.moveElements is able to move several paths to a new location, including // manager.moveElements is able to move several paths to a new location, including
// the Trash or the "Unsorted files" folder // the Trash or the "Unsorted files" folder
var moveElements = function (paths, newPath, force, cb) { var moveElements = function (paths, newPath, force, cb) {
if (!APP.editable) { return; } if (!APP.editable) { return; }
var andThenMove = function () { var andThenMove = function () {
filesOp.move(paths, newPath, cb); manager.move(paths, newPath, cb);
}; };
// Cancel drag&drop from TRASH to TRASH // Cancel drag&drop from TRASH to TRASH
if (filesOp.isPathIn(newPath, [TRASH]) && paths.length && paths[0][0] === TRASH) { if (manager.isPathIn(newPath, [TRASH]) && paths.length && paths[0][0] === TRASH) {
return; return;
} }
andThenMove(); andThenMove();
@ -1125,7 +1132,7 @@ define([
$selected.each(function (idx, elmt) { $selected.each(function (idx, elmt) {
var ePath = $(elmt).data('path'); var ePath = $(elmt).data('path');
if (ePath) { if (ePath) {
var val = filesOp.find(ePath); var val = manager.find(ePath);
if (!val) { return; } // Error? A ".selected" element in not in the object if (!val) { return; } // Error? A ".selected" element in not in the object
paths.push({ paths.push({
path: ePath, path: ePath,
@ -1139,7 +1146,7 @@ define([
} else { } else {
removeSelected(); removeSelected();
$element.addClass('cp-app-drive-element-selected'); $element.addClass('cp-app-drive-element-selected');
var val = filesOp.find(path); var val = manager.find(path);
if (!val) { return; } // The element in not in the object if (!val) { return; } // The element in not in the object
paths = [{ paths = [{
path: path, path: path,
@ -1159,7 +1166,7 @@ define([
var $target = $(target); var $target = $(target);
var $el = findDataHolder($target); var $el = findDataHolder($target);
var newPath = $el.data('path'); var newPath = $el.data('path');
if ((!newPath || filesOp.isFile(filesOp.find(newPath))) if ((!newPath || manager.isFile(manager.find(newPath)))
&& $target.parents('#cp-app-drive-content')) { && $target.parents('#cp-app-drive-content')) {
newPath = currentPath; newPath = currentPath;
} }
@ -1188,7 +1195,7 @@ define([
var movedPaths = []; var movedPaths = [];
var importedElements = []; var importedElements = [];
oldPaths.forEach(function (p) { oldPaths.forEach(function (p) {
var el = filesOp.find(p.path); var el = manager.find(p.path);
if (el && (stringify(el) === stringify(p.value.el) || !p.value || !p.value.el)) { if (el && (stringify(el) === stringify(p.value.el) || !p.value || !p.value.el)) {
movedPaths.push(p.path); movedPaths.push(p.path);
} else { } else {
@ -1252,9 +1259,9 @@ define([
// In list mode, display metadata from the filesData object // In list mode, display metadata from the filesData object
var addFileData = function (element, $span) { var addFileData = function (element, $span) {
if (!filesOp.isFile(element)) { return; } if (!manager.isFile(element)) { return; }
var data = filesOp.getFileData(element); var data = manager.getFileData(element);
var href = data.href || data.roHref; var href = data.href || data.roHref;
if (!data) { return void logError("No data for the file", element); } if (!data) { return void logError("No data for the file", element); }
@ -1281,7 +1288,7 @@ define([
$owner.attr('title', Messages.fm_padIsOwnedOther); $owner.attr('title', Messages.fm_padIsOwnedOther);
} }
var name = filesOp.getTitle(element); var name = manager.getTitle(element);
// The element with the class '.name' is underlined when the 'li' is hovered // The element with the class '.name' is underlined when the 'li' is hovered
var $name = $('<span>', {'class': 'cp-app-drive-element-name'}).text(name); var $name = $('<span>', {'class': 'cp-app-drive-element-name'}).text(name);
@ -1311,10 +1318,10 @@ define([
}; };
var addFolderData = function (element, key, $span) { var addFolderData = function (element, key, $span) {
if (!element || !filesOp.isFolder(element)) { return; } if (!element || !manager.isFolder(element)) { return; }
// The element with the class '.name' is underlined when the 'li' is hovered // The element with the class '.name' is underlined when the 'li' is hovered
var sf = filesOp.hasSubfolder(element); var sf = manager.hasSubfolder(element);
var files = filesOp.hasFile(element); var files = manager.hasFile(element);
var $name = $('<span>', {'class': 'cp-app-drive-element-name'}).text(key); var $name = $('<span>', {'class': 'cp-app-drive-element-name'}).text(key);
var $state = $('<span>', {'class': 'cp-app-drive-element-state'}); var $state = $('<span>', {'class': 'cp-app-drive-element-state'});
var $subfolders = $('<span>', { var $subfolders = $('<span>', {
@ -1329,7 +1336,7 @@ define([
// This is duplicated in cryptpad-common, it should be unified // This is duplicated in cryptpad-common, it should be unified
var getFileIcon = function (id) { var getFileIcon = function (id) {
var data = filesOp.getFileData(id); var data = manager.getFileData(id);
return UI.getFileIcon(data); return UI.getFileIcon(data);
}; };
var getIcon = UI.getIcon; var getIcon = UI.getIcon;
@ -1348,16 +1355,16 @@ define([
newPath.push(key); newPath.push(key);
} }
var element = filesOp.find(newPath); var element = manager.find(newPath);
var $icon = !isFolder ? getFileIcon(element) : undefined; var $icon = !isFolder ? getFileIcon(element) : undefined;
var ro = filesOp.isReadOnlyFile(element); var ro = manager.isReadOnlyFile(element);
// ro undefined means it's an old hash which doesn't support read-only // ro undefined means it's an old hash which doesn't support read-only
var roClass = typeof(ro) === 'undefined' ?' cp-app-drive-element-noreadonly' : var roClass = typeof(ro) === 'undefined' ?' cp-app-drive-element-noreadonly' :
ro ? ' cp-app-drive-element-readonly' : ''; ro ? ' cp-app-drive-element-readonly' : '';
var liClass = 'cp-app-drive-element-file cp-app-drive-element' + roClass; var liClass = 'cp-app-drive-element-file cp-app-drive-element' + roClass;
if (isFolder) { if (isFolder) {
liClass = 'cp-app-drive-element-folder cp-app-drive-element'; liClass = 'cp-app-drive-element-folder cp-app-drive-element';
$icon = filesOp.isFolderEmpty(root[key]) ? $folderEmptyIcon.clone() : $folderIcon.clone(); $icon = manager.isFolderEmpty(root[key]) ? $folderEmptyIcon.clone() : $folderIcon.clone();
} }
var $element = $('<li>', { var $element = $('<li>', {
draggable: true, draggable: true,
@ -1397,7 +1404,7 @@ define([
$element.contextmenu(openContextMenu('trash')); $element.contextmenu(openContextMenu('trash'));
$element.data('context', 'trash'); $element.data('context', 'trash');
} }
var isNewFolder = APP.newFolder && filesOp.comparePath(newPath, APP.newFolder); var isNewFolder = APP.newFolder && manager.comparePath(newPath, APP.newFolder);
if (isNewFolder) { if (isNewFolder) {
appStatus.onReady(function () { appStatus.onReady(function () {
window.setTimeout(function () { displayRenameInput($element, newPath); }, 0); window.setTimeout(function () { displayRenameInput($element, newPath); }, 0);
@ -1444,12 +1451,12 @@ define([
// Create the title block with the "parent folder" button // Create the title block with the "parent folder" button
var createTitle = function ($container, path, noStyle) { var createTitle = function ($container, path, noStyle) {
if (!path || path.length === 0) { return; } if (!path || path.length === 0) { return; }
var isTrash = filesOp.isPathIn(path, [TRASH]); var isTrash = manager.isPathIn(path, [TRASH]);
if (APP.mobile() && !noStyle) { // noStyle means title in search result if (APP.mobile() && !noStyle) { // noStyle means title in search result
return $container; return $container;
} }
var isVirtual = virtualCategories.indexOf(path[0]) !== -1; var isVirtual = virtualCategories.indexOf(path[0]) !== -1;
var el = isVirtual ? undefined : filesOp.find(path); var el = isVirtual ? undefined : manager.find(path);
path = path[0] === SEARCH ? path.slice(0,1) : path; path = path[0] === SEARCH ? path.slice(0,1) : path;
path.forEach(function (p, idx) { path.forEach(function (p, idx) {
if (isTrash && [2,3].indexOf(idx) !== -1) { return; } if (isTrash && [2,3].indexOf(idx) !== -1) { return; }
@ -1466,7 +1473,7 @@ define([
APP.displayDirectory(path.slice(0, sliceEnd)); APP.displayDirectory(path.slice(0, sliceEnd));
}); });
} }
} else if (idx > 0 && filesOp.isFile(el)) { } else if (idx > 0 && manager.isFile(el)) {
name = getElementName(path); name = getElementName(path);
} }
@ -1569,7 +1576,7 @@ define([
$button.click(function () { $button.click(function () {
UI.confirm(Messages.fm_emptyTrashDialog, function(res) { UI.confirm(Messages.fm_emptyTrashDialog, function(res) {
if (!res) { return; } if (!res) { return; }
filesOp.emptyTrash(refresh); manager.emptyTrash(refresh);
}); });
}); });
$container.append($button); $container.append($button);
@ -1605,7 +1612,7 @@ define([
}; };
$block.find('a.cp-app-drive-new-folder, li.cp-app-drive-new-folder') $block.find('a.cp-app-drive-new-folder, li.cp-app-drive-new-folder')
.click(function () { .click(function () {
filesOp.addFolder(currentPath, null, onCreated); manager.addFolder(currentPath, null, onCreated);
}); });
$block.find('a.cp-app-drive-new-upload, li.cp-app-drive-new-upload') $block.find('a.cp-app-drive-new-upload, li.cp-app-drive-new-upload')
.click(function () { .click(function () {
@ -1626,7 +1633,7 @@ define([
$block.find('a.cp-app-drive-new-doc, li.cp-app-drive-new-doc') $block.find('a.cp-app-drive-new-doc, li.cp-app-drive-new-doc')
.click(function () { .click(function () {
var type = $(this).attr('data-type') || 'pad'; var type = $(this).attr('data-type') || 'pad';
var path = filesOp.isPathIn(currentPath, [TRASH]) ? '' : currentPath; var path = manager.isPathIn(currentPath, [TRASH]) ? '' : currentPath;
common.sessionStorage.put(Constants.newPadPathKey, path, function () { common.sessionStorage.put(Constants.newPadPathKey, path, function () {
common.openURL('/' + type + '/'); common.openURL('/' + type + '/');
}); });
@ -1636,7 +1643,7 @@ define([
if (!APP.editable) { return; } if (!APP.editable) { return; }
if (!APP.loggedIn) { return; } // Anonymous users can use the + menu in the toolbar if (!APP.loggedIn) { return; } // Anonymous users can use the + menu in the toolbar
if (!filesOp.isPathIn(currentPath, [ROOT, 'hrefArray'])) { return; } if (!manager.isPathIn(currentPath, [ROOT, 'hrefArray'])) { return; }
// Create dropdown // Create dropdown
var options = []; var options = [];
@ -1813,8 +1820,8 @@ define([
}; };
var sortElements = function (folder, path, oldkeys, prop, asc, useId) { var sortElements = function (folder, path, oldkeys, prop, asc, useId) {
var root = path && filesOp.find(path); var root = path && manager.find(path);
var test = folder ? filesOp.isFolder : filesOp.isFile; var test = folder ? manager.isFolder : manager.isFile;
var keys = oldkeys.filter(function (e) { var keys = oldkeys.filter(function (e) {
return useId ? test(e) : (path && test(root[e])); return useId ? test(e) : (path && test(root[e]));
}); });
@ -1823,7 +1830,7 @@ define([
var getProp = function (el, prop) { var getProp = function (el, prop) {
if (folder) { return el.toLowerCase(); } if (folder) { return el.toLowerCase(); }
var id = useId ? el : root[el]; var id = useId ? el : root[el];
var data = filesOp.getFileData(id); var data = manager.getFileData(id);
if (!data) { return ''; } if (!data) { return ''; }
if (prop === 'type') { if (prop === 'type') {
var hrefData = Hash.parsePadUrl(data.href || data.roHref); var hrefData = Hash.parsePadUrl(data.href || data.roHref);
@ -1832,7 +1839,7 @@ define([
if (prop === 'atime' || prop === 'ctime') { if (prop === 'atime' || prop === 'ctime') {
return new Date(data[prop]); return new Date(data[prop]);
} }
return (filesOp.getTitle(id) || "").toLowerCase(); return (manager.getTitle(id) || "").toLowerCase();
}; };
keys.sort(function(a, b) { keys.sort(function(a, b) {
if (getProp(a, prop) < getProp(b, prop)) { return mult * -1; } if (getProp(a, prop) < getProp(b, prop)) { return mult * -1; }
@ -1842,7 +1849,7 @@ define([
return keys; return keys;
}; };
var sortTrashElements = function (folder, oldkeys, prop, asc) { var sortTrashElements = function (folder, oldkeys, prop, asc) {
var test = folder ? filesOp.isFolder : filesOp.isFile; var test = folder ? manager.isFolder : manager.isFile;
var keys = oldkeys.filter(function (e) { var keys = oldkeys.filter(function (e) {
return test(e.element); return test(e.element);
}); });
@ -1851,7 +1858,7 @@ define([
var getProp = function (el, prop) { var getProp = function (el, prop) {
if (prop && !folder) { if (prop && !folder) {
var element = el.element; var element = el.element;
var e = filesOp.getFileData(element); var e = manager.getFileData(element);
if (!e) { if (!e) {
e = { e = {
href : el, href : el,
@ -1966,7 +1973,7 @@ define([
sortBy = sortBy === "" ? sortBy = 'name' : sortBy; sortBy = sortBy === "" ? sortBy = 'name' : sortBy;
var sortedFiles = sortElements(false, [rootName], keys, sortBy, !getSortFileDesc(), true); var sortedFiles = sortElements(false, [rootName], keys, sortBy, !getSortFileDesc(), true);
sortedFiles.forEach(function (id) { sortedFiles.forEach(function (id) {
var file = filesOp.getFileData(id); var file = manager.getFileData(id);
if (!file) { if (!file) {
//debug("Unsorted or template returns an element not present in filesData: ", href); //debug("Unsorted or template returns an element not present in filesData: ", href);
file = { title: Messages.fm_noname }; file = { title: Messages.fm_noname };
@ -1974,7 +1981,7 @@ define([
} }
var idx = files[rootName].indexOf(id); var idx = files[rootName].indexOf(id);
var $icon = getFileIcon(id); var $icon = getFileIcon(id);
var ro = filesOp.isReadOnlyFile(id); var ro = manager.isReadOnlyFile(id);
// ro undefined mens it's an old hash which doesn't support read-only // ro undefined mens it's an old hash which doesn't support read-only
var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' : var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' :
ro ? ' cp-app-drive-element-readonly' : ''; ro ? ' cp-app-drive-element-readonly' : '';
@ -2018,11 +2025,11 @@ define([
if (allfiles.length === 0) { return; } if (allfiles.length === 0) { return; }
var $fileHeader = getFileListHeader(false); var $fileHeader = getFileListHeader(false);
$container.append($fileHeader); $container.append($fileHeader);
var keys = filesOp.getFiles([FILES_DATA]); var keys = manager.getFiles([FILES_DATA]);
var sortedFiles = sortElements(false, [FILES_DATA], keys, APP.store[SORT_FILE_BY], !getSortFileDesc(), true); var sortedFiles = sortElements(false, [FILES_DATA], keys, APP.store[SORT_FILE_BY], !getSortFileDesc(), true);
sortedFiles.forEach(function (id) { sortedFiles.forEach(function (id) {
var $icon = getFileIcon(id); var $icon = getFileIcon(id);
var ro = filesOp.isReadOnlyFile(id); var ro = manager.isReadOnlyFile(id);
// ro undefined maens it's an old hash which doesn't support read-only // ro undefined maens it's an old hash which doesn't support read-only
var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' : var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' :
ro ? ' cp-app-drive-element-readonly' : ''; ro ? ' cp-app-drive-element-readonly' : '';
@ -2056,7 +2063,7 @@ define([
return; return;
} }
root[key].forEach(function (el, idx) { root[key].forEach(function (el, idx) {
if (!filesOp.isFile(el.element) && !filesOp.isFolder(el.element)) { return; } if (!manager.isFile(el.element) && !manager.isFolder(el.element)) { return; }
var spath = [key, idx, 'element']; var spath = [key, idx, 'element'];
filesList.push({ filesList.push({
element: el.element, element: el.element,
@ -2067,12 +2074,12 @@ define([
}); });
var sortedFolders = sortTrashElements(true, filesList, null, !getSortFolderDesc()); var sortedFolders = sortTrashElements(true, filesList, null, !getSortFolderDesc());
var sortedFiles = sortTrashElements(false, filesList, APP.store[SORT_FILE_BY], !getSortFileDesc()); var sortedFiles = sortTrashElements(false, filesList, APP.store[SORT_FILE_BY], !getSortFileDesc());
if (filesOp.hasSubfolder(root, true)) { $list.append($folderHeader); } if (manager.hasSubfolder(root, true)) { $list.append($folderHeader); }
sortedFolders.forEach(function (f) { sortedFolders.forEach(function (f) {
var $element = createElement([TRASH], f.spath, root, true); var $element = createElement([TRASH], f.spath, root, true);
$list.append($element); $list.append($element);
}); });
if (filesOp.hasFile(root, true)) { $list.append($fileHeader); } if (manager.hasFile(root, true)) { $list.append($fileHeader); }
sortedFiles.forEach(function (f) { sortedFiles.forEach(function (f) {
var $element = createElement([TRASH], f.spath, root, false); var $element = createElement([TRASH], f.spath, root, false);
$list.append($element); $list.append($element);
@ -2080,7 +2087,7 @@ define([
}; };
var displaySearch = function ($list, value) { var displaySearch = function ($list, value) {
var filesList = filesOp.search(value); var filesList = manager.search(value);
filesList.forEach(function (r) { filesList.forEach(function (r) {
r.paths.forEach(function (path) { r.paths.forEach(function (path) {
var href = r.data.href; var href = r.data.href;
@ -2106,7 +2113,7 @@ define([
.text(Messages.fm_creation); .text(Messages.fm_creation);
var $ctime = $('<td>', {'class': 'cp-app-drive-search-col2'}) var $ctime = $('<td>', {'class': 'cp-app-drive-search-col2'})
.text(new Date(r.data.ctime).toLocaleString()); .text(new Date(r.data.ctime).toLocaleString());
if (filesOp.isPathIn(path, ['hrefArray'])) { if (manager.isPathIn(path, ['hrefArray'])) {
path.pop(); path.pop();
path.push(r.data.title); path.push(r.data.title);
} }
@ -2119,7 +2126,7 @@ define([
if (parentPath) { if (parentPath) {
$a = $('<a>').text(Messages.fm_openParent).click(function (e) { $a = $('<a>').text(Messages.fm_openParent).click(function (e) {
e.preventDefault(); e.preventDefault();
if (filesOp.isInTrashRoot(parentPath)) { parentPath = [TRASH]; } if (manager.isInTrashRoot(parentPath)) { parentPath = [TRASH]; }
else { parentPath.pop(); } else { parentPath.pop(); }
APP.selectedFiles = [r.id]; APP.selectedFiles = [r.id];
APP.displayDirectory(parentPath); APP.displayDirectory(parentPath);
@ -2144,25 +2151,25 @@ define([
}; };
var displayRecent = function ($list) { var displayRecent = function ($list) {
var filesList = filesOp.getRecentPads(); var filesList = manager.getRecentPads();
var limit = 20; var limit = 20;
var i = 0; var i = 0;
filesList.forEach(function (id) { filesList.forEach(function (id) {
if (i >= limit) { return; } if (i >= limit) { return; }
// Check path (pad exists and not in trash) // Check path (pad exists and not in trash)
var paths = filesOp.findFile(id); var paths = manager.findFile(id);
if (!paths.length) { return; } if (!paths.length) { return; }
var path = paths[0]; var path = paths[0];
if (filesOp.isPathIn(path, [TRASH])) { return; } if (manager.isPathIn(path, [TRASH])) { return; }
// Display the pad // Display the pad
var file = filesOp.getFileData(id); var file = manager.getFileData(id);
if (!file) { if (!file) {
//debug("Unsorted or template returns an element not present in filesData: ", href); //debug("Unsorted or template returns an element not present in filesData: ", href);
file = { title: Messages.fm_noname }; file = { title: Messages.fm_noname };
//return; //return;
} }
var $icon = getFileIcon(id); var $icon = getFileIcon(id);
var ro = filesOp.isReadOnlyFile(id); var ro = manager.isReadOnlyFile(id);
// ro undefined mens it's an old hash which doesn't support read-only // ro undefined mens it's an old hash which doesn't support read-only
var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' : var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' :
ro ? ' cp-app-drive-element-readonly' : ''; ro ? ' cp-app-drive-element-readonly' : '';
@ -2190,17 +2197,17 @@ define([
// Owned pads category // Owned pads category
var displayOwned = function ($container) { var displayOwned = function ($container) {
var list = filesOp.getOwnedPads(edPublic); var list = manager.getOwnedPads(edPublic);
if (list.length === 0) { return; } if (list.length === 0) { return; }
var $fileHeader = getFileListHeader(false); var $fileHeader = getFileListHeader(false);
$container.append($fileHeader); $container.append($fileHeader);
var sortedFiles = sortElements(false, false, list, APP.store[SORT_FILE_BY], !getSortFileDesc(), true); var sortedFiles = sortElements(false, false, list, APP.store[SORT_FILE_BY], !getSortFileDesc(), true);
sortedFiles.forEach(function (id) { sortedFiles.forEach(function (id) {
var paths = filesOp.findFile(id); var paths = manager.findFile(id);
if (!paths.length) { return; } if (!paths.length) { return; }
var path = paths[0]; var path = paths[0];
var $icon = getFileIcon(id); var $icon = getFileIcon(id);
var ro = filesOp.isReadOnlyFile(id); var ro = manager.isReadOnlyFile(id);
// ro undefined maens it's an old hash which doesn't support read-only // ro undefined maens it's an old hash which doesn't support read-only
var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' : var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' :
ro ? ' cp-app-drive-element-readonly' : ''; ro ? ' cp-app-drive-element-readonly' : '';
@ -2226,7 +2233,7 @@ define([
// Tags category // Tags category
var displayTags = function ($container) { var displayTags = function ($container) {
var list = filesOp.getTagsList(); var list = manager.getTagsList();
if (Object.keys(list).length === 0) { return; } if (Object.keys(list).length === 0) { return; }
var sortedTags = Object.keys(list); var sortedTags = Object.keys(list);
sortedTags.sort(function (a, b) { sortedTags.sort(function (a, b) {
@ -2276,16 +2283,16 @@ define([
if (!path || path.length === 0) { if (!path || path.length === 0) {
path = [ROOT]; path = [ROOT];
} }
var isInRoot = filesOp.isPathIn(path, [ROOT]); var isInRoot = manager.isPathIn(path, [ROOT]);
var inTrash = filesOp.isPathIn(path, [TRASH]); var inTrash = manager.isPathIn(path, [TRASH]);
var isTrashRoot = filesOp.comparePath(path, [TRASH]); var isTrashRoot = manager.comparePath(path, [TRASH]);
var isTemplate = filesOp.comparePath(path, [TEMPLATE]); var isTemplate = manager.comparePath(path, [TEMPLATE]);
var isAllFiles = filesOp.comparePath(path, [FILES_DATA]); var isAllFiles = manager.comparePath(path, [FILES_DATA]);
var isVirtual = virtualCategories.indexOf(path[0]) !== -1; var isVirtual = virtualCategories.indexOf(path[0]) !== -1;
var isSearch = path[0] === SEARCH; var isSearch = path[0] === SEARCH;
var isTags = path[0] === TAGS; var isTags = path[0] === TAGS;
var root = isVirtual ? undefined : filesOp.find(path); var root = isVirtual ? undefined : manager.find(path);
if (!isVirtual && typeof(root) === "undefined") { if (!isVirtual && typeof(root) === "undefined") {
log(Messages.fm_unknownFolderError); log(Messages.fm_unknownFolderError);
debug("Unable to locate the selected directory: ", path); debug("Unable to locate the selected directory: ", path);
@ -2385,20 +2392,20 @@ define([
displayTags($list); displayTags($list);
} else { } else {
$dirContent.contextmenu(openContextMenu('content')); $dirContent.contextmenu(openContextMenu('content'));
if (filesOp.hasSubfolder(root)) { $list.append($folderHeader); } if (manager.hasSubfolder(root)) { $list.append($folderHeader); }
// display sub directories // display sub directories
var keys = Object.keys(root); var keys = Object.keys(root);
var sortedFolders = sortElements(true, path, keys, null, !getSortFolderDesc()); var sortedFolders = sortElements(true, path, keys, null, !getSortFolderDesc());
var sortedFiles = sortElements(false, path, keys, APP.store[SORT_FILE_BY], !getSortFileDesc()); var sortedFiles = sortElements(false, path, keys, APP.store[SORT_FILE_BY], !getSortFileDesc());
sortedFolders.forEach(function (key) { sortedFolders.forEach(function (key) {
if (filesOp.isFile(root[key])) { return; } if (manager.isFile(root[key])) { return; }
var $element = createElement(path, key, root, true); var $element = createElement(path, key, root, true);
$element.appendTo($list); $element.appendTo($list);
}); });
if (filesOp.hasFile(root)) { $list.append($fileHeader); } if (manager.hasFile(root)) { $list.append($fileHeader); }
// display files // display files
sortedFiles.forEach(function (key) { sortedFiles.forEach(function (key) {
if (filesOp.isFolder(root[key])) { return; } if (manager.isFolder(root[key])) { return; }
var $element = createElement(path, key, root, false); var $element = createElement(path, key, root, false);
$element.appendTo($list); $element.appendTo($list);
}); });
@ -2460,13 +2467,13 @@ define([
$collapse.removeClass('fa-minus-square-o'); $collapse.removeClass('fa-minus-square-o');
$collapse.addClass('fa-plus-square-o'); $collapse.addClass('fa-plus-square-o');
// Change the current opened folder if it was collapsed // Change the current opened folder if it was collapsed
if (filesOp.isSubpath(currentPath, path)) { if (manager.isSubpath(currentPath, path)) {
displayDirectory(path); displayDirectory(path);
} }
} }
}); });
if (wasFolderOpened(path) || if (wasFolderOpened(path) ||
(filesOp.isSubpath(currentPath, path) && path.length < currentPath.length)) { (manager.isSubpath(currentPath, path) && path.length < currentPath.length)) {
$collapse.click(); $collapse.click();
} }
} }
@ -2479,20 +2486,20 @@ define([
}; };
var createTree = function ($container, path) { var createTree = function ($container, path) {
var root = filesOp.find(path); var root = manager.find(path);
// don't try to display what doesn't exist // don't try to display what doesn't exist
if (!root) { return; } if (!root) { return; }
// Display the root element in the tree // Display the root element in the tree
var displayingRoot = filesOp.comparePath([ROOT], path); var displayingRoot = manager.comparePath([ROOT], path);
if (displayingRoot) { if (displayingRoot) {
var isRootOpened = filesOp.comparePath([ROOT], currentPath); var isRootOpened = manager.comparePath([ROOT], currentPath);
var $rootIcon = filesOp.isFolderEmpty(files[ROOT]) ? var $rootIcon = manager.isFolderEmpty(files[ROOT]) ?
(isRootOpened ? $folderOpenedEmptyIcon : $folderEmptyIcon) : (isRootOpened ? $folderOpenedEmptyIcon : $folderEmptyIcon) :
(isRootOpened ? $folderOpenedIcon : $folderIcon); (isRootOpened ? $folderOpenedIcon : $folderIcon);
var $rootElement = createTreeElement(ROOT_NAME, $rootIcon.clone(), [ROOT], false, true, true, isRootOpened); var $rootElement = createTreeElement(ROOT_NAME, $rootIcon.clone(), [ROOT], false, true, true, isRootOpened);
if (!filesOp.hasSubfolder(root)) { if (!manager.hasSubfolder(root)) {
$rootElement.find('.cp-app-drive-icon-expcol').css('visibility', 'hidden'); $rootElement.find('.cp-app-drive-icon-expcol').css('visibility', 'hidden');
} }
$rootElement.addClass('cp-app-drive-tree-root'); $rootElement.addClass('cp-app-drive-tree-root');
@ -2501,19 +2508,19 @@ define([
$('<ul>', {'class': 'cp-app-drive-tree-docs'}) $('<ul>', {'class': 'cp-app-drive-tree-docs'})
.append($rootElement).appendTo($container); .append($rootElement).appendTo($container);
$container = $rootElement; $container = $rootElement;
} else if (filesOp.isFolderEmpty(root)) { return; } } else if (manager.isFolderEmpty(root)) { return; }
// Display root content // Display root content
var $list = $('<ul>').appendTo($container); var $list = $('<ul>').appendTo($container);
var keys = Object.keys(root).sort(); var keys = Object.keys(root).sort();
keys.forEach(function (key) { keys.forEach(function (key) {
// Do not display files in the menu // Do not display files in the menu
if (!filesOp.isFolder(root[key])) { return; } if (!manager.isFolder(root[key])) { return; }
var newPath = path.slice(); var newPath = path.slice();
newPath.push(key); newPath.push(key);
var isCurrentFolder = filesOp.comparePath(newPath, currentPath); var isCurrentFolder = manager.comparePath(newPath, currentPath);
var isEmpty = filesOp.isFolderEmpty(root[key]); var isEmpty = manager.isFolderEmpty(root[key]);
var subfolder = filesOp.hasSubfolder(root[key]); var subfolder = manager.hasSubfolder(root[key]);
var $icon = isEmpty ? var $icon = isEmpty ?
(isCurrentFolder ? $folderOpenedEmptyIcon : $folderEmptyIcon) : (isCurrentFolder ? $folderOpenedEmptyIcon : $folderEmptyIcon) :
(isCurrentFolder ? $folderOpenedIcon : $folderIcon); (isCurrentFolder ? $folderOpenedIcon : $folderIcon);
@ -2525,8 +2532,8 @@ define([
}; };
var createTrash = function ($container, path) { var createTrash = function ($container, path) {
var $icon = filesOp.isFolderEmpty(files[TRASH]) ? $trashEmptyIcon.clone() : $trashIcon.clone(); var $icon = manager.isFolderEmpty(files[TRASH]) ? $trashEmptyIcon.clone() : $trashIcon.clone();
var isOpened = filesOp.comparePath(path, currentPath); var isOpened = manager.comparePath(path, currentPath);
var $trashElement = createTreeElement(TRASH_NAME, $icon, [TRASH], false, true, false, isOpened); var $trashElement = createTreeElement(TRASH_NAME, $icon, [TRASH], false, true, false, isOpened);
$trashElement.addClass('root'); $trashElement.addClass('root');
$trashElement.find('>.cp-app-drive-element-row') $trashElement.find('>.cp-app-drive-element-row')
@ -2567,7 +2574,7 @@ define([
if (!isInSearchTmp) { search.oldLocation = currentPath.slice(); } if (!isInSearchTmp) { search.oldLocation = currentPath.slice(); }
var newLocation = [SEARCH, $input.val()]; var newLocation = [SEARCH, $input.val()];
setSearchCursor(); setSearchCursor();
if (!filesOp.comparePath(newLocation, currentPath.slice())) { displayDirectory(newLocation); } if (!manager.comparePath(newLocation, currentPath.slice())) { displayDirectory(newLocation); }
return; return;
} }
if (e.which === 27) { if (e.which === 27) {
@ -2582,7 +2589,7 @@ define([
if (!isInSearchTmp) { search.oldLocation = currentPath.slice(); } if (!isInSearchTmp) { search.oldLocation = currentPath.slice(); }
var newLocation = [SEARCH, $input.val()]; var newLocation = [SEARCH, $input.val()];
setSearchCursor(); setSearchCursor();
if (!filesOp.comparePath(newLocation, currentPath.slice())) { displayDirectory(newLocation); } if (!manager.comparePath(newLocation, currentPath.slice())) { displayDirectory(newLocation); }
}, 500); }, 500);
}).appendTo($div); }).appendTo($div);
$searchIcon.clone().appendTo($div); $searchIcon.clone().appendTo($div);
@ -2615,7 +2622,7 @@ define([
var createCategory = function ($container, cat) { var createCategory = function ($container, cat) {
var options = categories[cat]; var options = categories[cat];
var $icon = options.$icon.clone(); var $icon = options.$icon.clone();
var isOpened = filesOp.comparePath([cat], currentPath); var isOpened = manager.comparePath([cat], currentPath);
var $element = createTreeElement(options.name, $icon, [cat], options.draggable, options.droppable, false, isOpened); var $element = createTreeElement(options.name, $icon, [cat], options.draggable, options.droppable, false, isOpened);
$element.addClass('cp-app-drive-tree-root'); $element.addClass('cp-app-drive-tree-root');
var $list = $('<ul>', { 'class': 'cp-app-drive-tree-category' }).append($element); var $list = $('<ul>', { 'class': 'cp-app-drive-tree-category' }).append($element);
@ -2676,12 +2683,12 @@ define([
}); });
var getProperties = APP.getProperties = function (el, cb) { var getProperties = APP.getProperties = function (el, cb) {
if (!filesOp.isFile(el)) { if (!manager.isFile(el)) {
return void cb('NOT_FILE'); return void cb('NOT_FILE');
} }
//var ro = filesOp.isReadOnlyFile(el); //var ro = manager.isReadOnlyFile(el);
var base = APP.origin; var base = APP.origin;
var data = JSON.parse(JSON.stringify(filesOp.getFileData(el))); var data = JSON.parse(JSON.stringify(manager.getFileData(el)));
if (!data || !(data.href || data.roHref)) { return void cb('INVALID_FILE'); } if (!data || !(data.href || data.roHref)) { return void cb('INVALID_FILE'); }
if (data.href) { if (data.href) {
@ -2710,7 +2717,7 @@ define([
UI.confirm(msg, function(res) { UI.confirm(msg, function(res) {
$(window).focus(); $(window).focus();
if (!res) { return; } if (!res) { return; }
filesOp.delete(pathsList, refresh); manager.delete(pathsList, refresh);
}); });
}; };
var deleteOwnedPaths = function (paths, pathsList) { var deleteOwnedPaths = function (paths, pathsList) {
@ -2723,7 +2730,7 @@ define([
UI.confirm(msgD, function(res) { UI.confirm(msgD, function(res) {
$(window).focus(); $(window).focus();
if (!res) { return; } if (!res) { return; }
filesOp.delete(pathsList, refresh); manager.delete(pathsList, refresh);
}); });
}; };
$contextMenu.on("click", "a", function(e) { $contextMenu.on("click", "a", function(e) {
@ -2762,13 +2769,13 @@ define([
} }
else if ($(this).hasClass('cp-app-drive-context-openro')) { else if ($(this).hasClass('cp-app-drive-context-openro')) {
paths.forEach(function (p) { paths.forEach(function (p) {
var el = filesOp.find(p.path); var el = manager.find(p.path);
var href; var href;
if (filesOp.isPathIn(p.path, [FILES_DATA])) { if (manager.isPathIn(p.path, [FILES_DATA])) {
href = el.roHref; href = el.roHref;
} else { } else {
if (!el || filesOp.isFolder(el)) { return; } if (!el || manager.isFolder(el)) { return; }
var data = filesOp.getFileData(el); var data = manager.getFileData(el);
href = data.roHref; href = data.roHref;
} }
openFile(null, href); openFile(null, href);
@ -2781,11 +2788,11 @@ define([
APP.newFolder = info.newPath; APP.newFolder = info.newPath;
APP.displayDirectory(paths[0].path); APP.displayDirectory(paths[0].path);
}; };
filesOp.addFolder(paths[0].path, null, onFolderCreated); manager.addFolder(paths[0].path, null, onFolderCreated);
} }
else if ($(this).hasClass("cp-app-drive-context-newdoc")) { else if ($(this).hasClass("cp-app-drive-context-newdoc")) {
var ntype = $(this).data('type') || 'pad'; var ntype = $(this).data('type') || 'pad';
var path2 = filesOp.isPathIn(currentPath, [TRASH]) ? '' : currentPath; var path2 = manager.isPathIn(currentPath, [TRASH]) ? '' : currentPath;
common.sessionStorage.put(Constants.newPadPathKey, path2, function () { common.sessionStorage.put(Constants.newPadPathKey, path2, function () {
common.openURL('/' + ntype + '/'); common.openURL('/' + ntype + '/');
}); });
@ -2794,13 +2801,13 @@ define([
if (type === 'trash') { if (type === 'trash') {
var pPath = paths[0].path; var pPath = paths[0].path;
if (paths.length !== 1 || pPath.length !== 4) { return; } if (paths.length !== 1 || pPath.length !== 4) { return; }
var element = filesOp.find(pPath.slice(0,3)); // element containing the oldpath var element = manager.find(pPath.slice(0,3)); // element containing the oldpath
var sPath = stringifyPath(element.path); var sPath = stringifyPath(element.path);
UI.alert('<strong>' + Messages.fm_originalPath + "</strong>:<br>" + sPath, undefined, true); UI.alert('<strong>' + Messages.fm_originalPath + "</strong>:<br>" + sPath, undefined, true);
return; return;
} }
if (paths.length !== 1) { return; } if (paths.length !== 1) { return; }
el = filesOp.find(paths[0].path); el = manager.find(paths[0].path);
getProperties(el, function (e, $prop) { getProperties(el, function (e, $prop) {
if (e) { return void logError(e); } if (e) { return void logError(e); }
UI.alert($prop[0], undefined, true); UI.alert($prop[0], undefined, true);
@ -2808,21 +2815,21 @@ define([
} }
else if ($(this).hasClass("cp-app-drive-context-hashtag")) { else if ($(this).hasClass("cp-app-drive-context-hashtag")) {
if (paths.length !== 1) { return; } if (paths.length !== 1) { return; }
el = filesOp.find(paths[0].path); el = manager.find(paths[0].path);
var data = filesOp.getFileData(el); var data = manager.getFileData(el);
if (!data) { return void console.error("Expected to find a file"); } if (!data) { return void console.error("Expected to find a file"); }
var href = data.href || data.roHref; var href = data.href || data.roHref;
common.updateTags(href); common.updateTags(href);
} }
else if ($(this).hasClass("cp-app-drive-context-empty")) { else if ($(this).hasClass("cp-app-drive-context-empty")) {
if (paths.length !== 1 || !paths[0].element if (paths.length !== 1 || !paths[0].element
|| !filesOp.comparePath(paths[0].path, [TRASH])) { || !manager.comparePath(paths[0].path, [TRASH])) {
log(Messages.fm_forbidden); log(Messages.fm_forbidden);
return; return;
} }
UI.confirm(Messages.fm_emptyTrashDialog, function(res) { UI.confirm(Messages.fm_emptyTrashDialog, function(res) {
if (!res) { return; } if (!res) { return; }
filesOp.emptyTrash(refresh); manager.emptyTrash(refresh);
}); });
} }
else if ($(this).hasClass("cp-app-drive-context-remove")) { else if ($(this).hasClass("cp-app-drive-context-remove")) {
@ -2833,24 +2840,24 @@ define([
var restorePath = paths[0].path; var restorePath = paths[0].path;
var restoreName = paths[0].path[paths[0].path.length - 1]; var restoreName = paths[0].path[paths[0].path.length - 1];
if (restorePath.length === 4) { if (restorePath.length === 4) {
var rEl = filesOp.find(restorePath); var rEl = manager.find(restorePath);
if (filesOp.isFile(rEl)) { if (manager.isFile(rEl)) {
restoreName = filesOp.getTitle(rEl); restoreName = manager.getTitle(rEl);
} else { } else {
restoreName = restorePath[1]; restoreName = restorePath[1];
} }
} }
UI.confirm(Messages._getKey("fm_restoreDialog", [restoreName]), function(res) { UI.confirm(Messages._getKey("fm_restoreDialog", [restoreName]), function(res) {
if (!res) { return; } if (!res) { return; }
filesOp.restore(restorePath, refresh); manager.restore(restorePath, refresh);
}); });
} }
else if ($(this).hasClass("cp-app-drive-context-openparent")) { else if ($(this).hasClass("cp-app-drive-context-openparent")) {
if (paths.length !== 1) { return; } if (paths.length !== 1) { return; }
var parentPath = paths[0].path.slice(); var parentPath = paths[0].path.slice();
if (filesOp.isInTrashRoot(parentPath)) { parentPath = [TRASH]; } if (manager.isInTrashRoot(parentPath)) { parentPath = [TRASH]; }
else { parentPath.pop(); } else { parentPath.pop(); }
el = filesOp.find(paths[0].path); el = manager.find(paths[0].path);
APP.selectedFiles = [el]; APP.selectedFiles = [el];
APP.displayDirectory(parentPath); APP.displayDirectory(parentPath);
} }
@ -2883,13 +2890,13 @@ define([
$appContainer.on('keydown', function (e) { $appContainer.on('keydown', function (e) {
// "Del" // "Del"
if (e.which === 46) { if (e.which === 46) {
if (filesOp.isPathIn(currentPath, [FILES_DATA]) && APP.loggedIn) { if (manager.isPathIn(currentPath, [FILES_DATA]) && APP.loggedIn) {
return; // We can't remove elements directly from filesData return; // We can't remove elements directly from filesData
} }
var $selected = $('.cp-app-drive-element-selected'); var $selected = $('.cp-app-drive-element-selected');
if (!$selected.length) { return; } if (!$selected.length) { return; }
var paths = []; var paths = [];
var isTrash = filesOp.isPathIn(currentPath, [TRASH]); var isTrash = manager.isPathIn(currentPath, [TRASH]);
$selected.each(function (idx, elmt) { $selected.each(function (idx, elmt) {
if (!$(elmt).data('path')) { return; } if (!$(elmt).data('path')) { return; }
paths.push($(elmt).data('path')); paths.push($(elmt).data('path'));
@ -2939,8 +2946,8 @@ define([
if (path[0] !== 'drive') { return false; } if (path[0] !== 'drive') { return false; }
path = path.slice(1); path = path.slice(1);
var cPath = currentPath.slice(); var cPath = currentPath.slice();
if ((filesOp.isPathIn(cPath, ['hrefArray', TRASH]) && cPath[0] === path[0]) || if ((manager.isPathIn(cPath, ['hrefArray', TRASH]) && cPath[0] === path[0]) ||
(path.length >= cPath.length && filesOp.isSubpath(path, cPath))) { (path.length >= cPath.length && manager.isSubpath(path, cPath))) {
// Reload after a few ms to make sure all the change events have been received // Reload after a few ms to make sure all the change events have been received
onRefresh.refresh(); onRefresh.refresh();
} else if (path.length && path[0] === FILES_DATA) { } else if (path.length && path[0] === FILES_DATA) {
@ -2955,8 +2962,8 @@ define([
if (path[0] !== 'drive') { return false; } if (path[0] !== 'drive') { return false; }
path = path.slice(1); path = path.slice(1);
var cPath = currentPath.slice(); var cPath = currentPath.slice();
if ((filesOp.isPathIn(cPath, ['hrefArray', TRASH]) && cPath[0] === path[0]) || if ((manager.isPathIn(cPath, ['hrefArray', TRASH]) && cPath[0] === path[0]) ||
(path.length >= cPath.length && filesOp.isSubpath(path, cPath))) { (path.length >= cPath.length && manager.isSubpath(path, cPath))) {
// Reload after a few to make sure all the change events have been received // Reload after a few to make sure all the change events have been received
onRefresh.refresh(); onRefresh.refresh();
} }
@ -2987,13 +2994,13 @@ define([
UI.removeLoadingScreen(); UI.removeLoadingScreen();
sframeChan.query('Q_DRIVE_GETDELETED', null, function (err, data) { sframeChan.query('Q_DRIVE_GETDELETED', null, function (err, data) {
var ids = filesOp.findChannels(data); var ids = manager.findChannels(data);
var titles = []; var titles = [];
ids.forEach(function (id) { ids.forEach(function (id) {
var title = filesOp.getTitle(id); var title = manager.getTitle(id);
titles.push(title); titles.push(title);
var paths = filesOp.findFile(id); var paths = manager.findFile(id);
filesOp.delete(paths, refresh); manager.delete(paths, refresh);
}); });
if (!titles.length) { return; } if (!titles.length) { return; }
UI.log(Messages._getKey('fm_deletedPads', [titles.join(', ')])); UI.log(Messages._getKey('fm_deletedPads', [titles.join(', ')]));
@ -3011,6 +3018,7 @@ define([
var main = function () { var main = function () {
var common; var common;
var proxy = {}; var proxy = {};
var folders = {};
var readOnly; var readOnly;
nThen(function (waitFor) { nThen(function (waitFor) {
@ -3051,6 +3059,7 @@ define([
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
updateObject(sframeChan, proxy, waitFor()); updateObject(sframeChan, proxy, waitFor());
// XXX Load shared folders
}).nThen(function () { }).nThen(function () {
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
var metadataMgr = common.getMetadataMgr(); var metadataMgr = common.getMetadataMgr();
@ -3113,7 +3122,7 @@ define([
if (!proxy.drive || typeof(proxy.drive) !== 'object') { if (!proxy.drive || typeof(proxy.drive) !== 'object') {
throw new Error("Corrupted drive"); throw new Error("Corrupted drive");
} }
andThen(common, proxy); andThen(common, proxy, folders);
var onDisconnect = APP.onDisconnect = function (noAlert) { var onDisconnect = APP.onDisconnect = function (noAlert) {
setEditable(false); setEditable(false);

Loading…
Cancel
Save