cryptpad/www/common/inner/snapshots.js

119 lines
4.1 KiB
JavaScript

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

define([
'jquery',
'/common/common-interface.js',
'/common/hyperscript.js',
'/customize/messages.js',
'/bower_components/nthen/index.js',
'/bower_components/chainpad/chainpad.dist.js',
], function ($, UI, h, Messages, nThen, ChainPad /* JsonOT */) {
var Snapshots = {};
Snapshots.create = function (common, config) {
if (!config.$toolbar) { return void console.error("config.$toolbar is undefined");}
if (Snapshots.loading) { return void console.error("Snapshot is already being loaded..."); }
Snapshots.loading = true;
var sframeChan = common.getSframeChannel();
var $toolbar = config.$toolbar;
var $snap = $toolbar.find('.cp-toolbar-snapshots');
var $bottom = $toolbar.find('.cp-toolbar-bottom');
var $cke = $toolbar.find('.cke_toolbox_main');
$snap.html('').css('display', 'flex');
$bottom.hide();
$cke.hide();
var createChainPad = function () {
return ChainPad.create({
userName: 'snapshot',
validateContent: function (content) {
try {
JSON.parse(content);
return true;
} catch (e) {
console.log('Failed to parse, rejecting patch');
return false;
}
},
initialState: '',
logLevel: 0
});
};
var snapshot;
var getData = function () {
sframeChan.query("Q_GET_SNAPSHOT", {hash: config.hash}, function (err, obj) {
if (err || (obj && obj.error)) { return void console.error(err || obj.error); }
if (!Array.isArray(obj)) { return void console.error("invalid type"); }
if (!obj.length) { return void console.error("Empty channel"); }
var checkLast = obj[obj.length - 1].serverHash === config.hash;
if (!checkLast) {
$snap.find('.cp-toolbar-snapshots-close').click();
return void UI.alert(Messages.snapshots_notFound);
}
var messages = obj;
var chainpad = createChainPad();
messages.forEach(function (m) {
chainpad.message(m);
});
snapshot = chainpad.getAuthDoc();
config.applyVal(snapshot);
chainpad.abort();
});
};
var display = function () {
var data = config.data || {};
var actions = h('span.cp-toolbar-snapshots-actions');
var $actions = $(actions);
var content = [
h('span.cp-toolbar-snapshots-info', [
h('i.fa.fa-camera'),
h('span.cp-toolbar-snapshots-title', data.title + ' - ' + new Date(data.time).toLocaleString()),
]),
actions
];
if (!config.readOnly) {
$(h('button.cp-toolbar-snapshots-restore', [
h('i.fa.fa-check'),
h('spap.cp-button-name', Messages.snapshots_restore)
])).click(function () {
var closed = config.close(true, snapshot);
if (!closed) {
return void UI.alert(Messages.snapshots_cantRestore);
}
$snap.hide();
$bottom.show();
$cke.show();
Snapshots.loading = false;
}).appendTo($actions);
}
$(h('button.cp-toolbar-snapshots-close', [
h('i.fa.fa-times'),
h('spap.cp-button-name', Messages.snapshots_close)
])).click(function () {
$snap.hide();
$bottom.show();
$cke.show();
Snapshots.loading = false;
config.close(false);
}).appendTo($actions);
$snap.append(content);
};
display();
getData();
};
return Snapshots;
});