Forget button in pad2

This commit is contained in:
yflory
2017-08-21 15:20:38 +02:00
parent e4020ba8d4
commit e2d39de143
7 changed files with 205 additions and 30 deletions

View File

@@ -1039,6 +1039,28 @@ define([
}; };
}; };
// Forget button
var moveToTrash = common.moveToTrash = function (cb) {
var href = window.location.href;
common.forgetPad(href, function (err) {
if (err) {
console.log("unable to forget pad");
console.error(err);
cb(err, null);
return;
}
var n = getNetwork();
var r = getRealtime();
if (n && r) {
whenRealtimeSyncs(r, function () {
n.disconnect();
cb();
});
} else {
cb();
}
});
};
common.createButton = function (type, rightside, data, callback) { common.createButton = function (type, rightside, data, callback) {
var button; var button;
var size = "17px"; var size = "17px";
@@ -1164,25 +1186,11 @@ define([
var msg = isLoggedIn() ? Messages.forgetPrompt : Messages.fm_removePermanentlyDialog; var msg = isLoggedIn() ? Messages.forgetPrompt : Messages.fm_removePermanentlyDialog;
common.confirm(msg, function (yes) { common.confirm(msg, function (yes) {
if (!yes) { return; } if (!yes) { return; }
common.forgetPad(href, function (err) { moveToTrash(function (err) {
if (err) { if (err) { return void callback(err); }
console.log("unable to forget pad");
console.error(err);
callback(err, null);
return;
}
var n = getNetwork();
var r = getRealtime();
if (n && r) {
whenRealtimeSyncs(r, function () {
n.disconnect();
callback();
});
} else {
callback();
}
var cMsg = isLoggedIn() ? Messages.movedToTrash : Messages.deleted; var cMsg = isLoggedIn() ? Messages.movedToTrash : Messages.deleted;
common.alert(cMsg, undefined, true); common.alert(cMsg, undefined, true);
callback();
return; return;
}); });
}); });

View File

@@ -1,12 +1,14 @@
define([ define([
'/bower_components/nthen/index.js', '/bower_components/nthen/index.js',
'/customize/messages.js',
'/common/sframe-chainpad-netflux-inner.js', '/common/sframe-chainpad-netflux-inner.js',
'/common/sframe-channel.js', '/common/sframe-channel.js',
'/common/sframe-common-title.js', '/common/sframe-common-title.js',
'/common/sframe-common-interface.js', '/common/sframe-common-interface.js',
'/common/metadata-manager.js', '/common/metadata-manager.js',
], function (nThen, CpNfInner, SFrameChannel, Title, UI, MetadataMgr) { '/common/cryptpad-common.js'
], function (nThen, Messages, CpNfInner, SFrameChannel, Title, UI, MetadataMgr, Cryptpad) {
// Chainpad Netflux Inner // Chainpad Netflux Inner
var funcs = {}; var funcs = {};
@@ -21,7 +23,7 @@ define([
return ctx.cpNfInner; return ctx.cpNfInner;
}; };
funcs.isLoggedIn = function () { var isLoggedIn = funcs.isLoggedIn = function () {
if (!ctx.cpNfInner) { throw new Error("cpNfInner is not ready!"); } if (!ctx.cpNfInner) { throw new Error("cpNfInner is not ready!"); }
return ctx.cpNfInner.metadataMgr.getPrivateData().accountName; return ctx.cpNfInner.metadataMgr.getPrivateData().accountName;
}; };
@@ -77,16 +79,169 @@ define([
}); });
}; };
// TODO
funcs.feedback = function () {};
var prepareFeedback = function () {};
// BUTTONS
var isStrongestStored = function () {
var data = ctx.metadataMgr.getPrivateData();
return !data.readOnly || !data.availableHashes.editHash;
};
funcs.createButton = function (type, rightside, data, callback) {
var button;
var size = "17px";
switch (type) {
case 'export':
button = $('<button>', {
'class': 'fa fa-download',
title: Messages.exportButtonTitle,
}).append($('<span>', {'class': 'drawer'}).text(Messages.exportButton));
button.click(prepareFeedback(type));
if (callback) {
button.click(callback);
}
break;
case 'import':
button = $('<button>', {
'class': 'fa fa-upload',
title: Messages.importButtonTitle,
}).append($('<span>', {'class': 'drawer'}).text(Messages.importButton));
if (callback) {
button
.click(prepareFeedback(type))
.click(UI.importContent('text/plain', function (content, file) {
callback(content, file);
}, {accept: data ? data.accept : undefined}));
}
break;
case 'template':
if (!AppConfig.enableTemplates) { return; }
button = $('<button>', {
title: Messages.saveTemplateButton,
}).append($('<span>', {'class':'fa fa-bookmark', style: 'font:'+size+' FontAwesome'}));
if (data.rt && data.Crypt) {
button
.click(function () {
var title = data.getTitle() || document.title;
var todo = function (val) {
if (typeof(val) !== "string") { return; }
var toSave = data.rt.getUserDoc();
if (val.trim()) {
val = val.trim();
title = val;
try {
var parsed = JSON.parse(toSave);
var meta;
if (Array.isArray(parsed) && typeof(parsed[3]) === "object") {
meta = parsed[3].metadata; // pad
} else if (parsed.info) {
meta = parsed.info; // poll
} else {
meta = parsed.metadata;
}
if (typeof(meta) === "object") {
meta.title = val;
meta.defaultTitle = val;
delete meta.users;
}
toSave = JSON.stringify(parsed);
} catch(e) {
console.error("Parse error while setting the title", e);
}
}
var p = parsePadUrl(window.location.href);
if (!p.type) { return; }
var hash = createRandomHash();
var href = '/' + p.type + '/#' + hash;
data.Crypt.put(hash, toSave, function (e) {
if (e) { throw new Error(e); }
common.addTemplate(makePad(href, title));
whenRealtimeSyncs(getStore().getProxy().info.realtime, function () {
common.alert(Messages.templateSaved);
common.feedback('TEMPLATE_CREATED');
});
});
};
common.prompt(Messages.saveTemplatePrompt, title || document.title, todo);
});
}
break;
case 'forget':
button = $('<button>', {
id: 'cryptpad-forget',
title: Messages.forgetButtonTitle,
'class': "fa fa-trash cryptpad-forget",
style: 'font:'+size+' FontAwesome'
});
if (!isStrongestStored()) {
button.addClass('hidden');
}
if (callback) {
button
.click(prepareFeedback(type))
.click(function() {
var msg = isLoggedIn() ? Messages.forgetPrompt : Messages.fm_removePermanentlyDialog;
Cryptpad.confirm(msg, function (yes) {
if (!yes) { return; }
ctx.sframeChan.query('Q_MOVE_TO_TRASH', null, function (err) {
if (err) { return void callback(err); }
var cMsg = isLoggedIn() ? Messages.movedToTrash : Messages.deleted;
Cryptpad.alert(cMsg, undefined, true);
callback();
return;
});
});
});
}
break;
case 'history':
if (!AppConfig.enableHistory) {
button = $('<span>');
break;
}
button = $('<button>', {
title: Messages.historyButton,
'class': "fa fa-history history",
}).append($('<span>', {'class': 'drawer'}).text(Messages.historyText));
if (data.histConfig) {
button
.click(prepareFeedback(type))
.on('click', function () {
common.getHistory(data.histConfig);
});
}
break;
case 'more':
button = $('<button>', {
title: Messages.moreActions || 'TODO',
'class': "drawer-button fa fa-ellipsis-h",
style: 'font:'+size+' FontAwesome'
});
break;
default:
button = $('<button>', {
'class': "fa fa-question",
style: 'font:'+size+' FontAwesome'
})
.click(prepareFeedback(type));
}
if (rightside) {
button.addClass('rightside-button');
}
return button;
};
/* funcs.storeLinkToClipboard = function (readOnly, cb) { /* funcs.storeLinkToClipboard = function (readOnly, cb) {
ctx.sframeChan.query('Q_STORE_LINK_TO_CLIPBOARD', readOnly, function (err) { ctx.sframeChan.query('Q_STORE_LINK_TO_CLIPBOARD', readOnly, function (err) {
if (cb) { cb(err); } if (cb) { cb(err); }
}); });
}; };
*/ */
// TODO
funcs.feedback = function () {};
Object.freeze(funcs); Object.freeze(funcs);
return { create: function (cb) { return { create: function (cb) {
nThen(function (waitFor) { nThen(function (waitFor) {

View File

@@ -62,4 +62,6 @@ define({
// display a warning // display a warning
'Q_GET_PIN_LIMIT_STATUS': true, 'Q_GET_PIN_LIMIT_STATUS': true,
// Move a pad to the trash using the forget button
'Q_MOVE_TO_TRASH': true,
}); });

View File

@@ -75,8 +75,6 @@ define([
.append($('<div>', {'class': RIGHTSIDE_CLS})) .append($('<div>', {'class': RIGHTSIDE_CLS}))
.append($('<div>', {'class': HISTORY_CLS})); .append($('<div>', {'class': HISTORY_CLS}));
// TODO
/*
var $rightside = $toolbar.find('.'+RIGHTSIDE_CLS); var $rightside = $toolbar.find('.'+RIGHTSIDE_CLS);
if (!config.hideDrawer) { if (!config.hideDrawer) {
var $drawerContent = $('<div>', { var $drawerContent = $('<div>', {
@@ -104,7 +102,7 @@ define([
$drawerContent.hide(); $drawerContent.hide();
}; };
$drawerContent.blur(onBlur); $drawerContent.blur(onBlur);
}*/ }
// The 'notitle' class removes the line added for the title with a small screen // The 'notitle' class removes the line added for the title with a small screen
if (!config.title || typeof config.title !== "object") { if (!config.title || typeof config.title !== "object") {

View File

@@ -1157,6 +1157,7 @@ define([
if (!href) { return $icon; } if (!href) { return $icon; }
if (href.indexOf('/pad/') !== -1) { $icon = Cryptpad.getIcon('pad'); } if (href.indexOf('/pad/') !== -1) { $icon = Cryptpad.getIcon('pad'); }
else if (href.indexOf('/pad2/') !== -1) { $icon = Cryptpad.getIcon('pad'); } // SFRAME
else if (href.indexOf('/code/') !== -1) { $icon = Cryptpad.getIcon('code'); } else if (href.indexOf('/code/') !== -1) { $icon = Cryptpad.getIcon('code'); }
else if (href.indexOf('/slide/') !== -1) { $icon = Cryptpad.getIcon('slide'); } else if (href.indexOf('/slide/') !== -1) { $icon = Cryptpad.getIcon('slide'); }
else if (href.indexOf('/poll/') !== -1) { $icon = Cryptpad.getIcon('poll'); } else if (href.indexOf('/poll/') !== -1) { $icon = Cryptpad.getIcon('poll'); }

View File

@@ -486,6 +486,7 @@ define([
Title.setToolbar(toolbar); Title.setToolbar(toolbar);
var $rightside = toolbar.$rightside; var $rightside = toolbar.$rightside;
var $drawer = toolbar.$drawer;
var src = 'less!/customize/src/less/toolbar.less'; var src = 'less!/customize/src/less/toolbar.less';
require([ require([
@@ -524,6 +525,13 @@ define([
$rightside.append($collapse); $rightside.append($collapse);
} }
/* add a forget button */
var forgetCb = function (err) {
if (err) { return; }
setEditable(false);
};
var $forgetPad = common.createButton('forget', true, {}, forgetCb);
$rightside.append($forgetPad);
// TODO // TODO
return; return;
@@ -572,7 +580,6 @@ define([
//Title.setToolbar(toolbar); //Title.setToolbar(toolbar);
//var $rightside = toolbar.$rightside; //var $rightside = toolbar.$rightside;
var $drawer = toolbar.$drawer;
var editHash; var editHash;
@@ -642,15 +649,15 @@ define([
} }
/* add a forget button */ /* add a forget button */
var forgetCb = function (err) { /* var forgetCb = function (err) {
if (err) { return; } if (err) { return; }
setEditable(false); setEditable(false);
}; };
var $forgetPad = Cryptpad.createButton('forget', true, {}, forgetCb); var $forgetPad = Cryptpad.createButton('forget', true, {}, forgetCb);
$rightside.append($forgetPad); $rightside.append($forgetPad);
*/
// set the hash // set the hash
if (!readOnly) { Cryptpad.replaceHash(editHash); } //if (!readOnly) { Cryptpad.replaceHash(editHash); }
}; };
// this should only ever get called once, when the chain syncs // this should only ever get called once, when the chain syncs

View File

@@ -132,6 +132,10 @@ define([
}); });
}); });
sframeChan.on('Q_MOVE_TO_TRASH', function (data, cb) {
Cryptpad.moveToTrash(cb);
});
CpNfOuter.start({ CpNfOuter.start({
sframeChan: sframeChan, sframeChan: sframeChan,
channel: secret.channel, channel: secret.channel,