|
|
|
|
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;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|