cryptpad/www/drive/inner.js

257 lines
9.3 KiB
JavaScript
Raw Normal View History

define([
2017-09-27 08:31:35 +00:00
'jquery',
'/common/toolbar3.js',
2019-09-04 14:00:16 +00:00
'/common/drive-ui.js',
2017-09-27 08:31:35 +00:00
'/common/common-util.js',
'/common/common-interface.js',
2017-11-23 11:28:49 +00:00
'/common/common-feedback.js',
2017-09-27 08:31:35 +00:00
'/bower_components/nthen/index.js',
'/common/sframe-common.js',
2018-07-05 14:33:37 +00:00
'/common/proxy-manager.js',
2017-09-27 08:31:35 +00:00
'/customize/application_config.js',
'/customize/messages.js',
2017-09-27 08:31:35 +00:00
'css!/bower_components/bootstrap/dist/css/bootstrap.min.css',
2018-03-21 17:31:53 +00:00
'css!/bower_components/components-font-awesome/css/font-awesome.min.css',
2018-07-14 13:15:23 +00:00
'less!/drive/app-drive.less',
2017-09-27 08:31:35 +00:00
], function (
$,
Toolbar,
2019-09-04 14:00:16 +00:00
DriveUI,
2017-09-27 08:31:35 +00:00
Util,
UI,
2017-11-23 11:28:49 +00:00
Feedback,
2017-09-27 08:31:35 +00:00
nThen,
SFCommon,
2018-07-05 14:33:37 +00:00
ProxyManager,
2017-09-27 08:31:35 +00:00
AppConfig,
Messages)
2017-09-27 08:31:35 +00:00
{
2019-09-04 14:00:16 +00:00
var APP = {};
var SHARED_FOLDER_NAME = Messages.fm_sharedFolderName;
2017-09-27 08:31:35 +00:00
2019-09-04 14:00:16 +00:00
var copyObjectValue = function (objRef, objToCopy) {
for (var k in objRef) { delete objRef[k]; }
$.extend(true, objRef, objToCopy);
};
var updateSharedFolders = function (sframeChan, manager, drive, folders, cb) {
if (!drive || !drive.sharedFolders) {
return void cb();
2018-01-19 16:03:58 +00:00
}
2019-09-04 14:00:16 +00:00
var oldIds = Object.keys(folders);
nThen(function (waitFor) {
Object.keys(drive.sharedFolders).forEach(function (fId) {
sframeChan.query('Q_DRIVE_GETOBJECT', {
sharedFolder: fId
}, waitFor(function (err, newObj) {
folders[fId] = folders[fId] || {};
copyObjectValue(folders[fId], newObj);
if (manager && oldIds.indexOf(fId) === -1) {
manager.addProxy(fId, folders[fId]);
2017-09-27 08:31:35 +00:00
}
2019-09-04 14:00:16 +00:00
}));
});
}).nThen(function () {
cb();
2017-12-05 17:09:43 +00:00
});
2019-09-04 14:00:16 +00:00
};
var updateObject = function (sframeChan, obj, cb) {
sframeChan.query('Q_DRIVE_GETOBJECT', null, function (err, newObj) {
copyObjectValue(obj, newObj);
if (!APP.loggedIn && APP.newSharedFolder) {
obj.drive.sharedFolders = obj.drive.sharedFolders || {};
obj.drive.sharedFolders[APP.newSharedFolder] = {};
2017-09-27 08:31:35 +00:00
}
2019-09-04 14:00:16 +00:00
cb();
2017-12-05 17:09:43 +00:00
});
2019-09-04 14:00:16 +00:00
};
2017-09-27 08:31:35 +00:00
2019-09-04 14:00:16 +00:00
var history = {
isHistoryMode: false,
2017-09-27 08:31:35 +00:00
};
2019-09-04 14:00:16 +00:00
var setEditable = DriveUI.setEditable;
2017-09-27 08:31:35 +00:00
var setHistory = function (bool, update) {
history.isHistoryMode = bool;
setEditable(!bool);
if (!bool && update) {
history.onLeaveHistory();
}
};
var main = function () {
var common;
var proxy = {};
2018-07-05 14:33:37 +00:00
var folders = {};
2017-09-27 08:36:16 +00:00
var readOnly;
2017-09-27 08:31:35 +00:00
nThen(function (waitFor) {
$(waitFor(function () {
UI.addLoadingScreen();
2017-09-27 08:31:35 +00:00
}));
window.cryptpadStore.getAll(waitFor(function (val) {
APP.store = JSON.parse(JSON.stringify(val));
}));
2019-09-04 14:00:16 +00:00
SFCommon.create(waitFor(function (c) { common = c; }));
2017-09-27 08:31:35 +00:00
}).nThen(function (waitFor) {
var privReady = Util.once(waitFor());
var metadataMgr = common.getMetadataMgr();
if (JSON.stringify(metadataMgr.getPrivateData()) !== '{}') {
privReady();
return;
}
metadataMgr.onChange(function () {
if (typeof(metadataMgr.getPrivateData().readOnly) === 'boolean') {
readOnly = APP.readOnly = metadataMgr.getPrivateData().readOnly;
2017-09-27 08:31:35 +00:00
privReady();
}
});
}).nThen(function (waitFor) {
2017-09-27 08:31:35 +00:00
APP.loggedIn = common.isLoggedIn();
2017-11-23 11:28:49 +00:00
if (!APP.loggedIn) { Feedback.send('ANONYMOUS_DRIVE'); }
2017-09-27 08:31:35 +00:00
APP.$body = $('body');
APP.$bar = $('#cp-toolbar');
common.setTabTitle(Messages.type.drive);
var metadataMgr = common.getMetadataMgr();
var privateData = metadataMgr.getPrivateData();
if (privateData.newSharedFolder) {
APP.newSharedFolder = privateData.newSharedFolder;
}
var sframeChan = common.getSframeChannel();
2018-07-09 12:36:55 +00:00
updateObject(sframeChan, proxy, waitFor(function () {
2018-07-12 15:27:16 +00:00
updateSharedFolders(sframeChan, null, proxy.drive, folders, waitFor());
2018-07-09 12:36:55 +00:00
}));
}).nThen(function () {
var sframeChan = common.getSframeChannel();
var metadataMgr = common.getMetadataMgr();
var privateData = metadataMgr.getPrivateData();
APP.disableSF = !privateData.enableSF && AppConfig.disableSharedFolders;
if (APP.newSharedFolder && !APP.loggedIn) {
readOnly = APP.readOnly = true;
var data = folders[APP.newSharedFolder];
if (data) {
sframeChan.query('Q_SET_PAD_TITLE_IN_DRIVE', {
title: data.metadata && data.metadata.title,
}, function () {});
}
}
// ANON_SHARED_FOLDER
var pageTitle = (!APP.loggedIn && APP.newSharedFolder) ? SHARED_FOLDER_NAME : Messages.type.drive;
var configTb = {
2019-05-23 14:09:04 +00:00
displayed: ['useradmin', 'pageTitle', 'newpad', 'limit', 'notifications'],
pageTitle: pageTitle,
metadataMgr: metadataMgr,
readOnly: privateData.readOnly,
sfCommon: common,
$container: APP.$bar
2017-09-27 08:31:35 +00:00
};
var toolbar = APP.toolbar = Toolbar.create(configTb);
2017-09-27 08:31:35 +00:00
var $rightside = toolbar.$rightside;
$rightside.html(''); // Remove the drawer if we don't use it to hide the toolbar
APP.$displayName = APP.$bar.find('.' + Toolbar.constants.username);
2017-09-27 08:31:35 +00:00
/* add the usage */
if (APP.loggedIn) {
common.createUsageBar(function (err, $limitContainer) {
2019-09-04 14:00:16 +00:00
if (err) { return void DriveUI.logError(err); }
APP.$limit = $limitContainer;
}, true);
}
/* add a history button */
APP.histConfig = {
onLocal: function () {
2018-07-19 16:49:14 +00:00
UI.addLoadingScreen({ loadingText: Messages.fm_restoreDrive });
2019-06-17 12:13:06 +00:00
var data = {};
if (history.sfId) {
copyObjectValue(folders[history.sfId], history.currentObj);
data.sfId = history.sfId;
data.drive = history.currentObj;
} else {
proxy.drive = history.currentObj.drive;
data.drive = history.currentObj.drive;
}
sframeChan.query("Q_DRIVE_RESTORE", data, function () {
2018-07-19 15:51:38 +00:00
UI.removeLoadingScreen();
}, {
timeout: 5 * 60 * 1000
});
},
2019-06-17 12:13:06 +00:00
onOpen: function () {},
onRemote: function () {},
setHistory: setHistory,
applyVal: function (val) {
var obj = JSON.parse(val || '{}');
history.currentObj = obj;
history.onEnterHistory(obj);
},
$toolbar: APP.$bar,
};
2017-09-27 08:31:35 +00:00
// Add a "Burn this drive" button
if (!APP.loggedIn) {
APP.$burnThisDrive = common.createButton(null, true).click(function () {
UI.confirm(Messages.fm_burnThisDrive, function (yes) {
if (!yes) { return; }
common.getSframeChannel().event('EV_BURN_ANON_DRIVE');
}, null, true);
}).attr('title', Messages.fm_burnThisDriveButton)
.removeClass('fa-question')
.addClass('fa-ban');
}
metadataMgr.onChange(function () {
var name = metadataMgr.getUserData().name || Messages.anonymous;
APP.$displayName.text(name);
});
$('body').css('display', '');
if (!proxy.drive || typeof(proxy.drive) !== 'object') {
throw new Error("Corrupted drive");
}
2019-09-04 14:00:16 +00:00
DriveUI.create(common, {
proxy: proxy,
folders: folders,
updateObject: updateObject,
updateSharedFolders: updateSharedFolders,
history: history,
APP: APP
});
2019-09-04 14:00:16 +00:00
var onDisconnect = function (noAlert) {
2017-09-27 08:31:35 +00:00
setEditable(false);
if (APP.refresh) { APP.refresh(); }
APP.toolbar.failed();
if (!noAlert) { UI.alert(Messages.common_connectionLost, undefined, true); }
2017-09-27 08:31:35 +00:00
};
var onReconnect = function (info) {
setEditable(true);
if (APP.refresh) { APP.refresh(); }
APP.toolbar.reconnecting(info.myId);
UI.findOKButton().click();
2017-09-27 08:31:35 +00:00
};
sframeChan.on('EV_DRIVE_LOG', function (msg) {
UI.log(msg);
2017-09-27 08:31:35 +00:00
});
sframeChan.on('EV_NETWORK_DISCONNECT', function () {
2017-09-27 08:31:35 +00:00
onDisconnect();
});
sframeChan.on('EV_NETWORK_RECONNECT', function (data) {
// data.myId;
onReconnect(data);
2017-09-27 08:31:35 +00:00
});
common.onLogout(function () { setEditable(false); });
2017-09-27 08:31:35 +00:00
});
};
main();
});