Autostore base

This commit is contained in:
yflory 2018-08-27 14:58:09 +02:00
parent 294fa38137
commit e8a5244362
11 changed files with 211 additions and 18 deletions

View File

@ -0,0 +1,75 @@
@import (reference) "./colortheme-all.less";
.corner_main() {
--LessLoader_require: LessLoader_currentFile();
};
& {
@corner-button-ok: #2c9b00;
@corner-button-cancel: #990000;
@keyframes appear {
0% {
transform: scale(0.1);
}
100% {
transform: scale(1.0);
}
}
.cp-corner-container {
position: absolute;
right: 0;
bottom: 0;
width: 300px;
height: 200px;
border-top-left-radius: 200px;
padding: 15px;
text-align: right;
background-color: @colortheme_logo-1;
color: @colortheme_base;
z-index: 999;
scale: 0.1;
transform-origin: bottom right;
animation: appear 0.8s ease-in-out;
.cp-corner-filler {
float: left;
clear: left;
height: 21px;
}
.cp-corner-text {
}
.cp-corner-actions {
min-height: 30px;
margin: 15px auto;
display: inline-block;
}
.cp-corner-footer {
font-style: italic;
font-size: 0.8em;
}
button {
color: white;
border: 0px;
padding: 5px;
color: @colortheme_base;
&.cp-corner-primary {
background-color: @corner-button-ok;
font-weight: bold;
&:hover {
background-color: lighten(@corner-button-ok, 10%);
}
}
&.cp-corner-cancel {
background-color: @corner-button-cancel;
margin-left: 10px;
&:hover {
background-color: lighten(@corner-button-cancel, 10%);
}
}
}
}
}

View File

@ -2,6 +2,7 @@
@import (reference) "./toolbar.less"; @import (reference) "./toolbar.less";
@import (reference) './fileupload.less'; @import (reference) './fileupload.less';
@import (reference) './alertify.less'; @import (reference) './alertify.less';
@import (reference) './corner.less';
@import (reference) './tokenfield.less'; @import (reference) './tokenfield.less';
@import (reference) './creation.less'; @import (reference) './creation.less';
@import (reference) './tippy.less'; @import (reference) './tippy.less';
@ -27,6 +28,7 @@
@color: @color @color: @color
); );
.alertify_main(); .alertify_main();
.corner_main();
.fileupload_main(); .fileupload_main();
.tokenfield_main(); .tokenfield_main();
.tippy_main(); .tippy_main();
@ -60,6 +62,7 @@
); );
.fileupload_main(); .fileupload_main();
.alertify_main(); .alertify_main();
.corner_main();
.tippy_main(); .tippy_main();
.checkmark_main(20px); .checkmark_main(20px);
.password_main(); .password_main();

View File

@ -1226,5 +1226,11 @@ define(function () {
out.sharedFolders_create_password = "Folder password"; out.sharedFolders_create_password = "Folder password";
out.sharedFolders_share = "Share this URL with other registered users to give them access to the shared folder. Once they open this URL, the shared folder will be added to the root directory of their CryptDrive."; out.sharedFolders_share = "Share this URL with other registered users to give them access to the shared folder. Once they open this URL, the shared folder will be added to the root directory of their CryptDrive.";
// Manual pad storage popup
out.manual_notstored = "This pad is not stored in your drive. Do you want to store it now?"; // XXX
out.manual_settings = "You can enable automatic pad storage in your Settings page!"; // XXX
out.manual_store = "Store";
out.manual_hide = "Don't store";
return out; return out;
}); });

View File

@ -879,5 +879,37 @@ define([
UI.createRadio = Pages.createRadio; UI.createRadio = Pages.createRadio;
UI.cornerPopup = function (text, actions, footer) {
// XXX create "minimize" icon
var popup = h('div.cp-corner-container', [
h('div.cp-corner-filler', { style: "width:130px;" }),
h('div.cp-corner-filler', { style: "width:90px;" }),
h('div.cp-corner-filler', { style: "width:60px;" }),
h('div.cp-corner-filler', { style: "width:40px;" }),
h('div.cp-corner-filler', { style: "width:20px;" }),
h('div.cp-corner-text', text),
h('div.cp-corner-actions', actions),
h('div.cp-corner-footer', footer)
]);
var hide = function () {
$(popup).hide();
};
var show = function () {
$(popup).show();
};
var deletePopup = function () {
$(popup).remove();
};
$('body').append(popup);
return {
hide: hide,
show: show,
delete: deletePopup
};
};
return UI; return UI;
}); });

View File

@ -2308,5 +2308,39 @@ define([
$(password).find('.cp-password-input').focus(); $(password).find('.cp-password-input').focus();
}; };
var storePopupState = false;
UIElements.displayStorePadPopup = function (common) {
if (storePopupState) { return; }
storePopupState = true;
var text = Messages.manual_notstored;
var footer = Messages.manual_settings;
var hide = h('button.cp-corner-cancel', Messages.manual_hide);
var store = h('button.cp-corner-primary', Messages.manual_store);
var actions = h('div', [
store,
hide,
]);
console.log(text, footer);
var modal = UI.cornerPopup(text, actions, footer);
$(hide).click(function () {
modal.delete();
});
$(store).click(function () {
modal.delete();
common.getSframeChannel().query("Q_AUTOSTORE_STORE", null, function (err, obj) {
if (err || (obj && obj.error)) {
console.error(err || obj.error);
return void UI.warn("Error"); // XXX
}
UI.log("Saved"); // XXX
});
});
};
return UIElements; return UIElements;
}); });

View File

@ -547,7 +547,7 @@ define([
postMessage("SET_PAD_TITLE", data, function (obj) { postMessage("SET_PAD_TITLE", data, function (obj) {
if (obj && obj.error) { if (obj && obj.error) {
console.log("unable to set pad title"); if (obj.error !== "EAUTH") { console.log("unable to set pad title"); }
return void cb(obj.error); return void cb(obj.error);
} }
cb(); cb();
@ -925,6 +925,10 @@ define([
common.loading = {}; common.loading = {};
common.loading.onDriveEvent = Util.mkEvent(); common.loading.onDriveEvent = Util.mkEvent();
// (Auto)store pads
common.autoStore = {};
common.autoStore.onStoreRequest = Util.mkEvent();
common.getFullHistory = function (data, cb) { common.getFullHistory = function (data, cb) {
postMessage("GET_FULL_HISTORY", data, cb); postMessage("GET_FULL_HISTORY", data, cb);
}; };
@ -1060,7 +1064,9 @@ define([
// Account deletion // Account deletion
DELETE_ACCOUNT: common.startAccountDeletion, DELETE_ACCOUNT: common.startAccountDeletion,
// Loading // Loading
LOADING_DRIVE: common.loading.onDriveEvent.fire LOADING_DRIVE: common.loading.onDriveEvent.fire,
// AutoStore
AUTOSTORE_DISPLAY_POPUP: common.autoStore.onStoreRequest.fire,
}; };
common.hasCSSVariables = function () { common.hasCSSVariables = function () {

View File

@ -765,22 +765,32 @@ define([
// Add the pad if it does not exist in our drive // Add the pad if it does not exist in our drive
if (!contains) { if (!contains) {
var roHref; var autoStore = Util.find(store.proxy, ['settings', 'general', 'autostore']);
if (h.mode === "view") { if (autoStore !== 1 && !data.forceSave && !data.path) {
roHref = href; // XXX
href = undefined; // send event to inner to display the corner popup
postMessage(clientId, "AUTOSTORE_DISPLAY_POPUP", {
autoStore: autoStore
});
return void cb({error: "EAUTH"});
} else {
var roHref;
if (h.mode === "view") {
roHref = href;
href = undefined;
}
Store.addPad(clientId, {
href: href,
roHref: roHref,
channel: channel,
title: title,
owners: owners,
expire: expire,
password: data.password,
path: data.path
}, cb);
return;
} }
Store.addPad(clientId, {
href: href,
roHref: roHref,
channel: channel,
title: title,
owners: owners,
expire: expire,
password: data.password,
path: data.path
}, cb);
return;
} else { } else {
sendDriveEvent('DRIVE_CHANGE', { sendDriveEvent('DRIVE_CHANGE', {
path: ['drive', UserObject.FILES_DATA] path: ['drive', UserObject.FILES_DATA]

View File

@ -93,7 +93,8 @@ define([
path: path, path: path,
password: password, password: password,
channel: id, channel: id,
owners: metadata.owners owners: metadata.owners,
// XXX FORCESAVE ??
}; };
common.setPadTitle(data, function (err) { common.setPadTitle(data, function (err) {
if (err) { return void console.error(err); } if (err) { return void console.error(err); }

View File

@ -358,6 +358,22 @@ define([
setDocumentTitle(); setDocumentTitle();
}); });
Cryptpad.autoStore.onStoreRequest.reg(function (data) {
sframeChan.event("EV_AUTOSTORE_DISPLAY_POPUP", data);
});
sframeChan.on('Q_AUTOSTORE_STORE', function (obj, cb) {
var data = {
password: password,
title: currentTitle,
channel: secret.channel,
path: initialPathInDrive, // Where to store the pad if we don't have it in our drive
forceSave: true
};
Cryptpad.setPadTitle(data, function (err) {
cb(err);
});
});
sframeChan.on('Q_SETTINGS_SET_DISPLAY_NAME', function (newName, cb) { sframeChan.on('Q_SETTINGS_SET_DISPLAY_NAME', function (newName, cb) {
Cryptpad.setDisplayName(newName, function (err) { Cryptpad.setDisplayName(newName, function (err) {
@ -399,6 +415,7 @@ define([
Cryptpad.saveAsTemplate(Cryptget.put, data, cb); Cryptpad.saveAsTemplate(Cryptget.put, data, cb);
}); });
// Messaging
sframeChan.on('Q_SEND_FRIEND_REQUEST', function (netfluxId, cb) { sframeChan.on('Q_SEND_FRIEND_REQUEST', function (netfluxId, cb) {
Cryptpad.inviteFromUserlist(netfluxId, cb); Cryptpad.inviteFromUserlist(netfluxId, cb);
}); });
@ -411,6 +428,7 @@ define([
sframeChan.event('EV_FRIEND_REQUEST', data); sframeChan.event('EV_FRIEND_REQUEST', data);
}); });
// History
sframeChan.on('Q_GET_FULL_HISTORY', function (data, cb) { sframeChan.on('Q_GET_FULL_HISTORY', function (data, cb) {
var crypto = Crypto.createEncryptor(secret.keys); var crypto = Crypto.createEncryptor(secret.keys);
Cryptpad.getFullHistory({ Cryptpad.getFullHistory({
@ -452,6 +470,7 @@ define([
}); });
}); });
// Store
sframeChan.on('Q_GET_PAD_ATTRIBUTE', function (data, cb) { sframeChan.on('Q_GET_PAD_ATTRIBUTE', function (data, cb) {
var href; var href;
if (readOnly && hashes.editHash) { if (readOnly && hashes.editHash) {

View File

@ -452,6 +452,10 @@ define([
UI.errorLoadingScreen($err, true, true); UI.errorLoadingScreen($err, true, true);
}); });
ctx.sframeChan.on('EV_AUTOSTORE_DISPLAY_POPUP', function () {
UIElements.displayStorePadPopup(funcs);
});
ctx.metadataMgr.onReady(waitFor()); ctx.metadataMgr.onReady(waitFor());
}).nThen(function () { }).nThen(function () {
try { try {

View File

@ -254,4 +254,7 @@ define({
// Get all existing tags // Get all existing tags
'Q_GET_ALL_TAGS': true, 'Q_GET_ALL_TAGS': true,
// Store pads in the drive
'EV_AUTOSTORE_DISPLAY_POPUP': true,
'Q_AUTOSTORE_STORE': true,
}); });