Anonymous pads fo anonymous users
parent
ce1e792419
commit
88021f2264
|
@ -39,6 +39,11 @@ define([
|
||||||
cb(void 0, map);
|
cb(void 0, map);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Store.setDrive = function (key, val, cb) {
|
||||||
|
storeObj.drive[key] = val;
|
||||||
|
cb();
|
||||||
|
};
|
||||||
|
|
||||||
var safeGet = window.safeGet = function (key) {
|
var safeGet = window.safeGet = function (key) {
|
||||||
return storeObj[key];
|
return storeObj[key];
|
||||||
};
|
};
|
||||||
|
@ -56,6 +61,10 @@ define([
|
||||||
cb(void 0, res);
|
cb(void 0, res);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Store.getDrive = function (key, cb) {
|
||||||
|
cb(void 0, storeObj.drive[key]);
|
||||||
|
};
|
||||||
|
|
||||||
var safeRemove = function (key) {
|
var safeRemove = function (key) {
|
||||||
delete storeObj[key];
|
delete storeObj[key];
|
||||||
};
|
};
|
||||||
|
@ -127,7 +136,7 @@ define([
|
||||||
};
|
};
|
||||||
|
|
||||||
var onReady = function (f, proxy, storageKey) {
|
var onReady = function (f, proxy, storageKey) {
|
||||||
filesOp = FO.init(proxy, {
|
filesOp = FO.init(proxy.drive, {
|
||||||
storageKey: storageKey
|
storageKey: storageKey
|
||||||
});
|
});
|
||||||
storeObj = proxy;
|
storeObj = proxy;
|
||||||
|
@ -179,10 +188,13 @@ define([
|
||||||
}
|
}
|
||||||
}).on('ready', function () {
|
}).on('ready', function () {
|
||||||
if (ready) { return; }
|
if (ready) { return; }
|
||||||
if (!rt.proxy[Cryptpad.storageKey] || !Cryptpad.isArray(rt.proxy[Cryptpad.storageKey])) {
|
if (!rt.proxy.drive || typeof(rt.proxy.drive) !== 'object') { rt.proxy.drive = {}; }
|
||||||
|
var drive = rt.proxy.drive;
|
||||||
|
// Creating a new anon drive: import anon pads from localStorage
|
||||||
|
if (!drive[Cryptpad.storageKey] || !Cryptpad.isArray(drive[Cryptpad.storageKey])) {
|
||||||
var oldStore = Cryptpad.getStore(true);
|
var oldStore = Cryptpad.getStore(true);
|
||||||
oldStore.get(Cryptpad.storageKey, function (err, s) {
|
oldStore.get(Cryptpad.storageKey, function (err, s) {
|
||||||
rt.proxy[Cryptpad.storageKey] = s;
|
drive[Cryptpad.storageKey] = s;
|
||||||
onReady(f, rt.proxy, Cryptpad.storageKey);
|
onReady(f, rt.proxy, Cryptpad.storageKey);
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -80,7 +80,7 @@ define([
|
||||||
|
|
||||||
var logout = common.logout = function (cb) {
|
var logout = common.logout = function (cb) {
|
||||||
[
|
[
|
||||||
fileHashKey,
|
// fileHashKey,
|
||||||
userHashKey,
|
userHashKey,
|
||||||
].forEach(function (k) {
|
].forEach(function (k) {
|
||||||
sessionStorage.removeItem(k);
|
sessionStorage.removeItem(k);
|
||||||
|
@ -88,6 +88,9 @@ define([
|
||||||
delete localStorage[k];
|
delete localStorage[k];
|
||||||
delete sessionStorage[k];
|
delete sessionStorage[k];
|
||||||
});
|
});
|
||||||
|
if (!localStorage[fileHashKey]) {
|
||||||
|
localStorage[fileHashKey] = common.createRandomHash();
|
||||||
|
}
|
||||||
if (cb) { cb(); }
|
if (cb) { cb(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -101,6 +104,11 @@ define([
|
||||||
return hash;
|
return hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var isLoggedIn = common.isLoggedIn = function () {
|
||||||
|
//return typeof getStore().getLoginName() === "string";
|
||||||
|
return typeof getUserHash() === "string";
|
||||||
|
};
|
||||||
|
|
||||||
// var isArray = function (o) { return Object.prototype.toString.call(o) === '[object Array]'; };
|
// var isArray = function (o) { return Object.prototype.toString.call(o) === '[object Array]'; };
|
||||||
var isArray = common.isArray = $.isArray;
|
var isArray = common.isArray = $.isArray;
|
||||||
|
|
||||||
|
@ -444,7 +452,7 @@ define([
|
||||||
// STORAGE
|
// STORAGE
|
||||||
/* fetch and migrate your pad history from localStorage */
|
/* fetch and migrate your pad history from localStorage */
|
||||||
var getRecentPads = common.getRecentPads = function (cb, legacy) {
|
var getRecentPads = common.getRecentPads = function (cb, legacy) {
|
||||||
getStore(legacy).get(storageKey, function (err, recentPads) {
|
getStore(legacy).getDrive(storageKey, function (err, recentPads) {
|
||||||
if (isArray(recentPads)) {
|
if (isArray(recentPads)) {
|
||||||
cb(void 0, migrateRecentPads(recentPads));
|
cb(void 0, migrateRecentPads(recentPads));
|
||||||
return;
|
return;
|
||||||
|
@ -456,7 +464,7 @@ define([
|
||||||
// STORAGE
|
// STORAGE
|
||||||
/* commit a list of pads to localStorage */
|
/* commit a list of pads to localStorage */
|
||||||
var setRecentPads = common.setRecentPads = function (pads, cb, legacy) {
|
var setRecentPads = common.setRecentPads = function (pads, cb, legacy) {
|
||||||
getStore(legacy).set(storageKey, pads, function (err, data) {
|
getStore(legacy).setDrive(storageKey, pads, function (err, data) {
|
||||||
cb(err, data);
|
cb(err, data);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -566,8 +574,11 @@ define([
|
||||||
|
|
||||||
if (!contains) {
|
if (!contains) {
|
||||||
var data = makePad(href, name);
|
var data = makePad(href, name);
|
||||||
|
if (common.initialPath) {
|
||||||
|
data.owner = 1; // TODO use owner id here?
|
||||||
|
}
|
||||||
renamed.push(data);
|
renamed.push(data);
|
||||||
if (USE_FS_STORE && typeof(getStore().addPad) === "function") {
|
if (USE_FS_STORE && common.initialPath && typeof(getStore().addPad) === "function") {
|
||||||
getStore().addPad(href, common.initialPath, name);
|
getStore().addPad(href, common.initialPath, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ define([
|
||||||
var ROOT = "root";
|
var ROOT = "root";
|
||||||
var UNSORTED = "unsorted";
|
var UNSORTED = "unsorted";
|
||||||
var FILES_DATA = "filesData";
|
var FILES_DATA = "filesData";
|
||||||
|
var ANON = "anon"; // virtual path
|
||||||
var TRASH = "trash";
|
var TRASH = "trash";
|
||||||
var TEMPLATE = "template";
|
var TEMPLATE = "template";
|
||||||
var NEW_FOLDER_NAME = Messages.fm_newFolder;
|
var NEW_FOLDER_NAME = Messages.fm_newFolder;
|
||||||
|
@ -57,6 +58,9 @@ define([
|
||||||
var isPathInTrash = exp.isPathInTrash = function (path) {
|
var isPathInTrash = exp.isPathInTrash = function (path) {
|
||||||
return path[0] && path[0] === TRASH;
|
return path[0] && path[0] === TRASH;
|
||||||
};
|
};
|
||||||
|
var isPathInAnon = exp.isPathInAnon = function (path) {
|
||||||
|
return path[0] && path[0] === ANON;
|
||||||
|
};
|
||||||
|
|
||||||
var isPathInFilesData = exp.isPathInFilesData = function (path) {
|
var isPathInFilesData = exp.isPathInFilesData = function (path) {
|
||||||
return path[0] && path[0] === FILES_DATA;
|
return path[0] && path[0] === FILES_DATA;
|
||||||
|
@ -227,6 +231,13 @@ define([
|
||||||
return ret;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*var getAnonFiles = exp.getAnonFiles = function () {
|
||||||
|
if (!files[ANON]) {
|
||||||
|
files[ANON] = [];
|
||||||
|
}
|
||||||
|
return files[ANON].slice();
|
||||||
|
};*///TODO
|
||||||
|
|
||||||
var removeFileFromRoot = function (root, href) {
|
var removeFileFromRoot = function (root, href) {
|
||||||
if (isFile(root)) { return; }
|
if (isFile(root)) { return; }
|
||||||
for (var e in root) {
|
for (var e in root) {
|
||||||
|
@ -688,6 +699,11 @@ define([
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var isAnonFile = exp.isAnonFile = function (file) {
|
||||||
|
var data = getFileData(file);
|
||||||
|
return !data.owner;
|
||||||
|
};
|
||||||
|
|
||||||
var fixFiles = exp.fixFiles = function () {
|
var fixFiles = exp.fixFiles = function () {
|
||||||
// Explore the tree and check that everything is correct:
|
// Explore the tree and check that everything is correct:
|
||||||
// * 'root', 'trash', 'unsorted' and 'filesData' exist and are objects
|
// * 'root', 'trash', 'unsorted' and 'filesData' exist and are objects
|
||||||
|
@ -709,6 +725,11 @@ define([
|
||||||
debug("An element in ROOT was not a folder nor a file. ", element[el]);
|
debug("An element in ROOT was not a folder nor a file. ", element[el]);
|
||||||
element[el] = undefined;
|
element[el] = undefined;
|
||||||
delete element[el];
|
delete element[el];
|
||||||
|
} else if (isFile(element[el])) {
|
||||||
|
if (isAnonFile(element[el])) {
|
||||||
|
debug("An element in ROOT was an anonymous file. ", element[el]);
|
||||||
|
delete element[el];
|
||||||
|
}
|
||||||
} else if (isFolder(element[el])) {
|
} else if (isFolder(element[el])) {
|
||||||
fixRoot(element[el]);
|
fixRoot(element[el]);
|
||||||
}
|
}
|
||||||
|
@ -721,6 +742,7 @@ define([
|
||||||
var addToClean = function (obj, idx) {
|
var addToClean = function (obj, idx) {
|
||||||
if (typeof(obj) !== "object") { toClean.push(idx); return; }
|
if (typeof(obj) !== "object") { toClean.push(idx); return; }
|
||||||
if (!isFile(obj.element) && !isFolder(obj.element)) { toClean.push(idx); return; }
|
if (!isFile(obj.element) && !isFolder(obj.element)) { toClean.push(idx); return; }
|
||||||
|
if (isFile(obj.element) && isAnonFile(obj.element)) { toClean.push(idx); return; }
|
||||||
if (!$.isArray(obj.path)) { toClean.push(idx); return; }
|
if (!$.isArray(obj.path)) { toClean.push(idx); return; }
|
||||||
};
|
};
|
||||||
for (var el in tr) {
|
for (var el in tr) {
|
||||||
|
@ -745,15 +767,12 @@ define([
|
||||||
var templateFiles = getTemplateFiles();
|
var templateFiles = getTemplateFiles();
|
||||||
var toClean = [];
|
var toClean = [];
|
||||||
us.forEach(function (el, idx) {
|
us.forEach(function (el, idx) {
|
||||||
if (!isFile(el) || rootFiles.indexOf(el) !== -1 || templateFiles.indexOf(el) !== -1) {
|
if (!isFile(el) || rootFiles.indexOf(el) !== -1 || templateFiles.indexOf(el) !== -1 || isAnonFile(el)) {
|
||||||
toClean.push(idx);
|
toClean.push(idx);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
toClean.forEach(function (el) {
|
toClean.forEach(function (idx) {
|
||||||
var idx = us.indexOf(el);
|
|
||||||
if (idx !== -1) {
|
|
||||||
us.splice(idx, 1);
|
us.splice(idx, 1);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
var fixTemplate = function () {
|
var fixTemplate = function () {
|
||||||
|
@ -764,36 +783,44 @@ define([
|
||||||
var unsortedFiles = getUnsortedFiles();
|
var unsortedFiles = getUnsortedFiles();
|
||||||
var toClean = [];
|
var toClean = [];
|
||||||
us.forEach(function (el, idx) {
|
us.forEach(function (el, idx) {
|
||||||
if (!isFile(el) || rootFiles.indexOf(el) !== -1 || unsortedFiles.indexOf(el) !== -1) {
|
if (!isFile(el) || rootFiles.indexOf(el) !== -1 || unsortedFiles.indexOf(el) !== -1 || isAnonFile(el)) {
|
||||||
toClean.push(idx);
|
toClean.push(idx);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
toClean.forEach(function (el) {
|
toClean.forEach(function (idx) {
|
||||||
var idx = us.indexOf(el);
|
|
||||||
if (idx !== -1) {
|
|
||||||
us.splice(idx, 1);
|
us.splice(idx, 1);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
/*var fixAnon = function () {
|
||||||
|
if (!$.isArray(files[ANON])) { debug("ANON was not an array"); files[FILES_DATA] = []; }
|
||||||
|
};*/// TODO
|
||||||
var fixFilesData = function () {
|
var fixFilesData = function () {
|
||||||
if (!$.isArray(files[FILES_DATA])) { debug("FILES_DATA was not an array"); files[FILES_DATA] = []; }
|
if (!$.isArray(files[FILES_DATA])) { debug("FILES_DATA was not an array"); files[FILES_DATA] = []; }
|
||||||
var fd = files[FILES_DATA];
|
var fd = files[FILES_DATA];
|
||||||
var rootFiles = getRootFiles();
|
var rootFiles = getRootFiles();
|
||||||
var unsortedFiles = getUnsortedFiles();
|
var unsortedFiles = getUnsortedFiles();
|
||||||
|
var templateFiles = getTemplateFiles();
|
||||||
var trashFiles = getTrashFiles();
|
var trashFiles = getTrashFiles();
|
||||||
|
//var anonFiles = getAnonFiles();
|
||||||
var toClean = [];
|
var toClean = [];
|
||||||
fd.forEach(function (el, idx) {
|
fd.forEach(function (el, idx) {
|
||||||
if (typeof(el) !== "object") {
|
if (typeof(el) !== "object") {
|
||||||
debug("An element in filesData was not an object.", el);
|
debug("An element in filesData was not an object.", el);
|
||||||
toClean.push(el);
|
toClean.push(el);
|
||||||
} else {
|
return;
|
||||||
if (rootFiles.indexOf(el.href) === -1
|
}
|
||||||
|
if (el.owner
|
||||||
|
&& rootFiles.indexOf(el.href) === -1
|
||||||
&& unsortedFiles.indexOf(el.href) === -1
|
&& unsortedFiles.indexOf(el.href) === -1
|
||||||
|
&& templateFiles.indexOf(el.href) === -1
|
||||||
&& trashFiles.indexOf(el.href) === -1) {
|
&& trashFiles.indexOf(el.href) === -1) {
|
||||||
debug("An element in filesData was not in ROOT, UNSORTED or TRASH.", el);
|
debug("An element in filesData was not in ROOT, UNSORTED or TRASH.", el);
|
||||||
files[UNSORTED].push(el.href);
|
files[UNSORTED].push(el.href);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
/*if (!el.owner && anonFiles.indexOf(el.href) === -1) {
|
||||||
|
files[ANON].push(el.href);
|
||||||
|
}*/// TODO
|
||||||
});
|
});
|
||||||
toClean.forEach(function (el) {
|
toClean.forEach(function (el) {
|
||||||
var idx = fd.indexOf(el);
|
var idx = fd.indexOf(el);
|
||||||
|
|
|
@ -97,7 +97,7 @@ li {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tree #trashTree, #tree #unsortedTree, #tree #templateTree, #tree #allfilesTree {
|
#tree .category2 {
|
||||||
margin-top: 2em;
|
margin-top: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,8 @@ define([
|
||||||
var APP = window.APP = {
|
var APP = window.APP = {
|
||||||
$bar: $iframe.find('#toolbar'),
|
$bar: $iframe.find('#toolbar'),
|
||||||
editable: false,
|
editable: false,
|
||||||
Cryptpad: Cryptpad
|
Cryptpad: Cryptpad,
|
||||||
|
loggedIn: Cryptpad.isLoggedIn()
|
||||||
};
|
};
|
||||||
|
|
||||||
var stringify = APP.stringify = function (obj) {
|
var stringify = APP.stringify = function (obj) {
|
||||||
|
@ -43,6 +44,11 @@ define([
|
||||||
var TEMPLATE_NAME = Messages.fm_templateName;
|
var TEMPLATE_NAME = Messages.fm_templateName;
|
||||||
var TRASH = "trash";
|
var TRASH = "trash";
|
||||||
var TRASH_NAME = Messages.fm_trashName;
|
var TRASH_NAME = Messages.fm_trashName;
|
||||||
|
|
||||||
|
// anon: Virtual path, not stored in the object but extracted from FILES_DATA
|
||||||
|
var ANON = "anon";
|
||||||
|
var ANON_NAME = Messages.fm_anonName || 'Anon pads......';
|
||||||
|
|
||||||
var LOCALSTORAGE_LAST = "cryptpad-file-lastOpened";
|
var LOCALSTORAGE_LAST = "cryptpad-file-lastOpened";
|
||||||
var LOCALSTORAGE_OPENED = "cryptpad-file-openedFolders";
|
var LOCALSTORAGE_OPENED = "cryptpad-file-openedFolders";
|
||||||
var LOCALSTORAGE_VIEWMODE = "cryptpad-file-viewMode";
|
var LOCALSTORAGE_VIEWMODE = "cryptpad-file-viewMode";
|
||||||
|
@ -130,7 +136,8 @@ define([
|
||||||
else { $iframe.find('[draggable="false"]').attr('draggable', true); }
|
else { $iframe.find('[draggable="false"]').attr('draggable', true); }
|
||||||
};
|
};
|
||||||
|
|
||||||
var init = function (files) {
|
var init = function (proxy) {
|
||||||
|
var files = proxy.drive;
|
||||||
var isOwnDrive = function () {
|
var isOwnDrive = function () {
|
||||||
return Cryptpad.getUserHash() === APP.hash || localStorage.FS_hash === APP.hash;
|
return Cryptpad.getUserHash() === APP.hash || localStorage.FS_hash === APP.hash;
|
||||||
};
|
};
|
||||||
|
@ -166,7 +173,7 @@ define([
|
||||||
|
|
||||||
// FILE MANAGER
|
// FILE MANAGER
|
||||||
// _WORKGROUP_ and other people drive : display Documents as main page
|
// _WORKGROUP_ and other people drive : display Documents as main page
|
||||||
var currentPath = module.currentPath = isOwnDrive() ? getLastOpenedFolder() : [ROOT];
|
var currentPath = module.currentPath = APP.loggedIn ? isOwnDrive() ? getLastOpenedFolder() : [ROOT] : [ANON];
|
||||||
var lastSelectTime;
|
var lastSelectTime;
|
||||||
var selectedElement;
|
var selectedElement;
|
||||||
|
|
||||||
|
@ -725,6 +732,7 @@ define([
|
||||||
else if (name === TRASH && path.length === 1) { name = TRASH_NAME; }
|
else if (name === TRASH && path.length === 1) { name = TRASH_NAME; }
|
||||||
else if (name === UNSORTED && path.length === 1) { name = UNSORTED_NAME; }
|
else if (name === UNSORTED && path.length === 1) { name = UNSORTED_NAME; }
|
||||||
else if (name === TEMPLATE && path.length === 1) { name = TEMPLATE_NAME; }
|
else if (name === TEMPLATE && path.length === 1) { name = TEMPLATE_NAME; }
|
||||||
|
else if (name === ANON && path.length === 1) { name = ANON_NAME; }
|
||||||
else if (name === FILES_DATA && path.length === 1) { name = FILES_DATA_NAME; }
|
else if (name === FILES_DATA && path.length === 1) { name = FILES_DATA_NAME; }
|
||||||
else if (filesOp.isPathInTrash(path)) { name = getTrashTitle(path); }
|
else if (filesOp.isPathInTrash(path)) { name = getTrashTitle(path); }
|
||||||
var $title = $('<h1>').text(name);
|
var $title = $('<h1>').text(name);
|
||||||
|
@ -749,19 +757,19 @@ define([
|
||||||
var $box = $('<div>', {'class': 'info-box'});
|
var $box = $('<div>', {'class': 'info-box'});
|
||||||
var msg;
|
var msg;
|
||||||
switch (path[0]) {
|
switch (path[0]) {
|
||||||
case 'root':
|
case ROOT:
|
||||||
msg = Messages.fm_info_root;
|
msg = Messages.fm_info_root;
|
||||||
break;
|
break;
|
||||||
case 'unsorted':
|
case UNSORTED:
|
||||||
msg = Messages.fm_info_unsorted;
|
msg = Messages.fm_info_unsorted;
|
||||||
break;
|
break;
|
||||||
case 'template':
|
case TEMPLATE:
|
||||||
msg = Messages.fm_info_template;
|
msg = Messages.fm_info_template;
|
||||||
break;
|
break;
|
||||||
case 'trash':
|
case TRASH:
|
||||||
msg = Messages.fm_info_trash;
|
msg = Messages.fm_info_trash;
|
||||||
break;
|
break;
|
||||||
case Cryptpad.storageKey:
|
case FILES_DATA:
|
||||||
msg = Messages.fm_info_allFiles;
|
msg = Messages.fm_info_allFiles;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -836,12 +844,13 @@ define([
|
||||||
options.push({tag: 'hr'});
|
options.push({tag: 'hr'});
|
||||||
}
|
}
|
||||||
AppConfig.availablePadTypes.forEach(function (type) {
|
AppConfig.availablePadTypes.forEach(function (type) {
|
||||||
|
var path = filesOp.comparePath(currentPath, [ANON]) ? '' : '/#?path=' + encodeURIComponent(currentPath);
|
||||||
options.push({
|
options.push({
|
||||||
tag: 'a',
|
tag: 'a',
|
||||||
attributes: {
|
attributes: {
|
||||||
'class': 'newdoc',
|
'class': 'newdoc',
|
||||||
'data-type': type,
|
'data-type': type,
|
||||||
'href': '/' + type + '/#?path=' + encodeURIComponent(currentPath),
|
'href': '/' + type + path,
|
||||||
'target': '_blank'
|
'target': '_blank'
|
||||||
},
|
},
|
||||||
content: Messages.type[type]
|
content: Messages.type[type]
|
||||||
|
@ -1060,7 +1069,7 @@ define([
|
||||||
|
|
||||||
// Unsorted element are represented by "href" in an array: they don't have a filename
|
// Unsorted element are represented by "href" in an array: they don't have a filename
|
||||||
// and they don't hav a hierarchical structure (folder/subfolders)
|
// and they don't hav a hierarchical structure (folder/subfolders)
|
||||||
var displayHrefArray = function ($container, rootName) {
|
var displayHrefArray = function ($container, rootName, draggable) {
|
||||||
var unsorted = files[rootName];
|
var unsorted = files[rootName];
|
||||||
if (rootName === UNSORTED && allFilesSorted()) { return; }
|
if (rootName === UNSORTED && allFilesSorted()) { return; }
|
||||||
var $fileHeader = getFileListHeader(false);
|
var $fileHeader = getFileListHeader(false);
|
||||||
|
@ -1081,7 +1090,7 @@ define([
|
||||||
var $name = $('<span>', { 'class': 'file-element element' });
|
var $name = $('<span>', { 'class': 'file-element element' });
|
||||||
addFileData(href, file.title, $name, false);
|
addFileData(href, file.title, $name, false);
|
||||||
var $element = $('<li>', {
|
var $element = $('<li>', {
|
||||||
draggable: true
|
draggable: draggable
|
||||||
}).append($icon).append($name).dblclick(function () {
|
}).append($icon).append($name).dblclick(function () {
|
||||||
openFile(href);
|
openFile(href);
|
||||||
});
|
});
|
||||||
|
@ -1092,17 +1101,22 @@ define([
|
||||||
onElementClick(e, $element, path);
|
onElementClick(e, $element, path);
|
||||||
});
|
});
|
||||||
$element.contextmenu(openDefaultContextMenu);
|
$element.contextmenu(openDefaultContextMenu);
|
||||||
|
if (draggable) {
|
||||||
addDragAndDropHandlers($element, path, false, false);
|
addDragAndDropHandlers($element, path, false, false);
|
||||||
|
}
|
||||||
$container.append($element);
|
$container.append($element);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
var displayAllFiles = function ($container) {
|
var displayAllFiles = function ($container, anon) {
|
||||||
var allfiles = files[FILES_DATA];
|
var allfiles = files[FILES_DATA];
|
||||||
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 = allfiles;
|
var keys = allfiles.filter(function (el) {
|
||||||
|
return anon && !el.owner || !anon && el.owner;
|
||||||
|
});
|
||||||
|
|
||||||
var sortedFiles = sortElements(false, [FILES_DATA], keys, Cryptpad.getLSAttribute(SORT_FILE_BY), !getSortFileDesc(), false, true);
|
var sortedFiles = sortElements(false, [FILES_DATA], keys, Cryptpad.getLSAttribute(SORT_FILE_BY), !getSortFileDesc(), false, true);
|
||||||
sortedFiles.forEach(function (file) {
|
sortedFiles.forEach(function (file) {
|
||||||
var $icon = $fileIcon.clone();
|
var $icon = $fileIcon.clone();
|
||||||
|
@ -1183,9 +1197,10 @@ define([
|
||||||
var isUnsorted = filesOp.comparePath(path, [UNSORTED]);
|
var isUnsorted = filesOp.comparePath(path, [UNSORTED]);
|
||||||
var isTemplate = filesOp.comparePath(path, [TEMPLATE]);
|
var isTemplate = filesOp.comparePath(path, [TEMPLATE]);
|
||||||
var isAllFiles = filesOp.comparePath(path, [FILES_DATA]);
|
var isAllFiles = filesOp.comparePath(path, [FILES_DATA]);
|
||||||
|
var isAnon = filesOp.comparePath(path, [ANON]);
|
||||||
|
|
||||||
var root = filesOp.findElement(files, path);
|
var root = filesOp.findElement(files, path);
|
||||||
if (typeof(root) === "undefined") {
|
if (typeof(root) === "undefined" && !isAnon) {
|
||||||
log(Messages.fm_unknownFolderError);
|
log(Messages.fm_unknownFolderError);
|
||||||
debug("Unable to locate the selected directory: ", path);
|
debug("Unable to locate the selected directory: ", path);
|
||||||
var parentPath = path.slice();
|
var parentPath = path.slice();
|
||||||
|
@ -1221,9 +1236,12 @@ define([
|
||||||
var $fileHeader = getFileListHeader(true);
|
var $fileHeader = getFileListHeader(true);
|
||||||
|
|
||||||
if (isUnsorted || isTemplate) {
|
if (isUnsorted || isTemplate) {
|
||||||
displayHrefArray($list, path[0]);
|
// 3rd parameter is "draggable": anon pads shouldn't be draggable
|
||||||
|
displayHrefArray($list, path[0], !isAnon);
|
||||||
} else if (isAllFiles) {
|
} else if (isAllFiles) {
|
||||||
displayAllFiles($list);
|
displayAllFiles($list, false);
|
||||||
|
} else if (isAnon) {
|
||||||
|
displayAllFiles($list, true);
|
||||||
} else if (isTrashRoot) {
|
} else if (isTrashRoot) {
|
||||||
displayTrashRoot($list, $folderHeader, $fileHeader);
|
displayTrashRoot($list, $folderHeader, $fileHeader);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1352,7 +1370,7 @@ define([
|
||||||
var isOpened = filesOp.comparePath(path, currentPath);
|
var isOpened = filesOp.comparePath(path, currentPath);
|
||||||
var $unsortedElement = createTreeElement(UNSORTED_NAME, $icon, [UNSORTED], false, true, false, isOpened);
|
var $unsortedElement = createTreeElement(UNSORTED_NAME, $icon, [UNSORTED], false, true, false, isOpened);
|
||||||
$unsortedElement.addClass('root');
|
$unsortedElement.addClass('root');
|
||||||
var $unsortedList = $('<ul>', { id: 'unsortedTree' }).append($unsortedElement);
|
var $unsortedList = $('<ul>', { id: 'unsortedTree', 'class': 'category2' }).append($unsortedElement);
|
||||||
$container.append($unsortedList);
|
$container.append($unsortedList);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1361,7 +1379,7 @@ define([
|
||||||
var isOpened = filesOp.comparePath(path, currentPath);
|
var isOpened = filesOp.comparePath(path, currentPath);
|
||||||
var $element = createTreeElement(TEMPLATE_NAME, $icon, [TEMPLATE], false, true, false, isOpened);
|
var $element = createTreeElement(TEMPLATE_NAME, $icon, [TEMPLATE], false, true, false, isOpened);
|
||||||
$element.addClass('root');
|
$element.addClass('root');
|
||||||
var $list = $('<ul>', { id: 'templateTree' }).append($element);
|
var $list = $('<ul>', { id: 'templateTree', 'class': 'category2' }).append($element);
|
||||||
$container.append($list);
|
$container.append($list);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1370,7 +1388,19 @@ define([
|
||||||
var isOpened = filesOp.comparePath(path, currentPath);
|
var isOpened = filesOp.comparePath(path, currentPath);
|
||||||
var $allfilesElement = createTreeElement(FILES_DATA_NAME, $icon, [FILES_DATA], false, false, false, isOpened);
|
var $allfilesElement = createTreeElement(FILES_DATA_NAME, $icon, [FILES_DATA], false, false, false, isOpened);
|
||||||
$allfilesElement.addClass('root');
|
$allfilesElement.addClass('root');
|
||||||
var $allfilesList = $('<ul>', { id: 'allfilesTree' }).append($allfilesElement);
|
var $allfilesList = $('<ul>', { id: 'allfilesTree', 'class': 'category2' }).append($allfilesElement);
|
||||||
|
$container.append($allfilesList);
|
||||||
|
};
|
||||||
|
|
||||||
|
var createAnonFiles = function ($container, path, anonUser) {
|
||||||
|
var $icon = $unsortedIcon.clone();
|
||||||
|
var isOpened = filesOp.comparePath(path, currentPath);
|
||||||
|
var $allfilesElement = createTreeElement(ANON_NAME, $icon, [ANON], false, false, false, isOpened);
|
||||||
|
$allfilesElement.addClass('root');
|
||||||
|
var $allfilesList = $('<ul>', { id: 'anonTree', 'class': 'category2' }).append($allfilesElement);
|
||||||
|
if (anonUser) {
|
||||||
|
$allfilesList.removeClass('category2');
|
||||||
|
}
|
||||||
$container.append($allfilesList);
|
$container.append($allfilesList);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1390,16 +1420,21 @@ define([
|
||||||
$trashElement.contextmenu(openTrashTreeContextMenu);
|
$trashElement.contextmenu(openTrashTreeContextMenu);
|
||||||
if (isOpened) { $trash.addClass('active'); }
|
if (isOpened) { $trash.addClass('active'); }
|
||||||
|
|
||||||
var $trashList = $('<ul>', { id: 'trashTree' }).append($trashElement);
|
var $trashList = $('<ul>', { id: 'trashTree', 'class': 'category2' }).append($trashElement);
|
||||||
$container.append($trashList);
|
$container.append($trashList);
|
||||||
};
|
};
|
||||||
|
|
||||||
var resetTree = module.resetTree = function () {
|
var resetTree = module.resetTree = function () {
|
||||||
$tree.html('');
|
$tree.html('');
|
||||||
|
if (!APP.loggedIn) {
|
||||||
|
createAnonFiles($tree, [ANON], true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
createTree($tree, [ROOT]);
|
createTree($tree, [ROOT]);
|
||||||
if (!isWorkgroup()) {
|
if (!isWorkgroup()) {
|
||||||
createUnsorted($tree, [UNSORTED]);
|
createUnsorted($tree, [UNSORTED]);
|
||||||
createTemplate($tree, [TEMPLATE]);
|
createTemplate($tree, [TEMPLATE]);
|
||||||
|
createAnonFiles($tree, [ANON]);
|
||||||
createAllFiles($tree, [FILES_DATA]);
|
createAllFiles($tree, [FILES_DATA]);
|
||||||
}
|
}
|
||||||
createTrash($tree, [TRASH]);
|
createTrash($tree, [TRASH]);
|
||||||
|
@ -1646,16 +1681,19 @@ define([
|
||||||
onRefresh.to = window.setTimeout(refresh, 500);
|
onRefresh.to = window.setTimeout(refresh, 500);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
files.on('change', [], function (o, n, p) {
|
proxy.on('change', [], function (o, n, p) {
|
||||||
var path = arguments[2];
|
var path = arguments[2];
|
||||||
if ((filesOp.isPathInUnsorted(currentPath) && filesOp.isPathInUnsorted(path)) ||
|
if (path[0] !== 'drive') { return false; }
|
||||||
(filesOp.isPathInTemplate(currentPath) && filesOp.isPathInTemplate(path)) ||
|
path = path.slice(1);
|
||||||
(path.length >= currentPath.length && filesOp.isSubpath(path, currentPath)) ||
|
var cPath = filesOp.isPathInAnon(currentPath) ? [FILES_DATA] : currentPath.slice();
|
||||||
(filesOp.isPathInTrash(currentPath) && filesOp.isPathInTrash(path))) {
|
if ((filesOp.isPathInUnsorted(cPath) && filesOp.isPathInUnsorted(path)) ||
|
||||||
|
(filesOp.isPathInTemplate(cPath) && filesOp.isPathInTemplate(path)) ||
|
||||||
|
(path.length >= cPath.length && filesOp.isSubpath(path, cPath)) ||
|
||||||
|
(filesOp.isPathInTrash(cPath) && filesOp.isPathInTrash(path))) {
|
||||||
// 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) {
|
||||||
if (filesOp.isPathInHrefArray(currentPath)) {
|
if (filesOp.isPathInHrefArray(cPath) || filesOp.isPathInAnon(path)) {
|
||||||
onRefresh.refresh();
|
onRefresh.refresh();
|
||||||
} else {
|
} else {
|
||||||
refreshFilesData();
|
refreshFilesData();
|
||||||
|
@ -1791,8 +1829,9 @@ define([
|
||||||
module.files = proxy;
|
module.files = proxy;
|
||||||
if (JSON.stringify(proxy) === '{}') {
|
if (JSON.stringify(proxy) === '{}') {
|
||||||
var store = Cryptpad.getStore(true);
|
var store = Cryptpad.getStore(true);
|
||||||
|
var drive = proxy.drive = {};
|
||||||
store.get(Cryptpad.storageKey, function (err, s) {
|
store.get(Cryptpad.storageKey, function (err, s) {
|
||||||
proxy[FILES_DATA] = s;
|
drive[FILES_DATA] = s;
|
||||||
initLocalStorage();
|
initLocalStorage();
|
||||||
init(proxy);
|
init(proxy);
|
||||||
APP.userList.onChange();
|
APP.userList.onChange();
|
||||||
|
@ -1800,6 +1839,7 @@ define([
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!proxy.drive || typeof(proxy.drive) !== 'object') { proxy.drive = {}; }
|
||||||
initLocalStorage();
|
initLocalStorage();
|
||||||
init(proxy);
|
init(proxy);
|
||||||
APP.userList.onChange();
|
APP.userList.onChange();
|
||||||
|
|
Loading…
Reference in New Issue