|
|
|
@ -416,7 +416,7 @@ define([
|
|
|
|
|
clearTimeout(pendingChanges[key]);
|
|
|
|
|
delete pendingChanges[key];
|
|
|
|
|
});
|
|
|
|
|
if (APP.stopHistory) { APP.history = false; }
|
|
|
|
|
if (APP.stopHistory || APP.template) { APP.history = false; }
|
|
|
|
|
startOO(blob, type, true);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -426,14 +426,15 @@ define([
|
|
|
|
|
var file = getFileType();
|
|
|
|
|
blob.name = (metadataMgr.getMetadataLazy().title || file.doc) + '.' + file.type;
|
|
|
|
|
var data = {
|
|
|
|
|
hash: APP.history ? ooChannel.historyLastHash : ooChannel.lastHash,
|
|
|
|
|
index: APP.history ? ooChannel.currentIndex : ooChannel.cpIndex
|
|
|
|
|
hash: (APP.history || APP.template) ? ooChannel.historyLastHash : ooChannel.lastHash,
|
|
|
|
|
index: (APP.history || APP.template) ? ooChannel.currentIndex : ooChannel.cpIndex
|
|
|
|
|
};
|
|
|
|
|
fixSheets();
|
|
|
|
|
|
|
|
|
|
ooChannel.ready = false;
|
|
|
|
|
ooChannel.queue = [];
|
|
|
|
|
data.callback = function () {
|
|
|
|
|
if (APP.template) { APP.template = false; }
|
|
|
|
|
resetData(blob, file);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -1296,6 +1297,13 @@ define([
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (APP.template) {
|
|
|
|
|
getEditor().setViewModeDisconnect();
|
|
|
|
|
UI.removeLoadingScreen();
|
|
|
|
|
makeCheckpoint(true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (APP.history) {
|
|
|
|
|
try {
|
|
|
|
|
getEditor().asc_setRestriction(true);
|
|
|
|
@ -1829,6 +1837,108 @@ define([
|
|
|
|
|
pinImages();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var loadCp = function (cp, keepQueue) {
|
|
|
|
|
loadLastDocument(cp, function () {
|
|
|
|
|
var file = getFileType();
|
|
|
|
|
var type = common.getMetadataMgr().getPrivateData().ooType;
|
|
|
|
|
var blob = loadInitDocument(type, true);
|
|
|
|
|
if (!keepQueue) { ooChannel.queue = []; }
|
|
|
|
|
resetData(blob, file);
|
|
|
|
|
}, function (blob, file) {
|
|
|
|
|
if (!keepQueue) { ooChannel.queue = []; }
|
|
|
|
|
resetData(blob, file);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var loadTemplate = function (href, pw, parsed) {
|
|
|
|
|
APP.history = true;
|
|
|
|
|
APP.template = true;
|
|
|
|
|
getEditor().setViewModeDisconnect();
|
|
|
|
|
var content = parsed.content;
|
|
|
|
|
|
|
|
|
|
// Get checkpoint
|
|
|
|
|
var hashes = content.hashes || {};
|
|
|
|
|
var idx = sortCpIndex(hashes);
|
|
|
|
|
var lastIndex = idx[idx.length - 1];
|
|
|
|
|
var lastCp = hashes[lastIndex];
|
|
|
|
|
|
|
|
|
|
// Current cp or initial hash (invalid hash ==> initial hash)
|
|
|
|
|
var toHash = lastCp.hash || 'NONE';
|
|
|
|
|
// Last hash
|
|
|
|
|
var fromHash = 'NONE';
|
|
|
|
|
|
|
|
|
|
sframeChan.query('Q_GET_HISTORY_RANGE', {
|
|
|
|
|
href: href,
|
|
|
|
|
password: pw,
|
|
|
|
|
channel: content.channel,
|
|
|
|
|
lastKnownHash: fromHash,
|
|
|
|
|
toHash: toHash,
|
|
|
|
|
}, function (err, data) {
|
|
|
|
|
if (err) { return void console.error(err); }
|
|
|
|
|
if (!Array.isArray(data.messages)) { return void console.error('Not an array!'); }
|
|
|
|
|
|
|
|
|
|
// The first "cp" in history is the empty doc. It doesn't include the first patch
|
|
|
|
|
// of the history
|
|
|
|
|
var initialCp = !lastCp.hash;
|
|
|
|
|
|
|
|
|
|
var messages = (data.messages || []).slice(initialCp ? 0 : 1);
|
|
|
|
|
|
|
|
|
|
ooChannel.queue = messages.map(function (obj) {
|
|
|
|
|
return {
|
|
|
|
|
hash: obj.serverHash,
|
|
|
|
|
msg: JSON.parse(obj.msg)
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
ooChannel.historyLastHash = ooChannel.lastHash;
|
|
|
|
|
ooChannel.currentIndex = ooChannel.cpIndex;
|
|
|
|
|
console.error(ooChannel.historyLastHash);
|
|
|
|
|
loadCp(lastCp, true);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var openTemplatePicker = function () {
|
|
|
|
|
var metadataMgr = common.getMetadataMgr();
|
|
|
|
|
var type = metadataMgr.getPrivateData().app;
|
|
|
|
|
var sframeChan = common.getSframeChannel();
|
|
|
|
|
var pickerCfgInit = {
|
|
|
|
|
types: [type],
|
|
|
|
|
where: ['template'],
|
|
|
|
|
hidden: true
|
|
|
|
|
};
|
|
|
|
|
var pickerCfg = {
|
|
|
|
|
types: [type],
|
|
|
|
|
where: ['template'],
|
|
|
|
|
};
|
|
|
|
|
var onConfirm = function () {
|
|
|
|
|
common.openFilePicker(pickerCfg, function (data) {
|
|
|
|
|
if (data.type !== type) { return; }
|
|
|
|
|
UI.addLoadingScreen({hideTips: true});
|
|
|
|
|
sframeChan.query('Q_OO_TEMPLATE_USE', {
|
|
|
|
|
href: data.href,
|
|
|
|
|
}, function (err, val) {
|
|
|
|
|
var parsed;
|
|
|
|
|
try {
|
|
|
|
|
parsed = JSON.parse(val);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error(e, val);
|
|
|
|
|
UI.removeLoadingScreen();
|
|
|
|
|
return void UI.warn(Messages.error);
|
|
|
|
|
}
|
|
|
|
|
console.error(data);
|
|
|
|
|
loadTemplate(data.href, data.password, parsed);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
sframeChan.query("Q_TEMPLATE_EXIST", type, function (err, data) {
|
|
|
|
|
if (data) {
|
|
|
|
|
common.openFilePicker(pickerCfgInit);
|
|
|
|
|
onConfirm();
|
|
|
|
|
} else {
|
|
|
|
|
UI.alert(Messages.template_empty);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
config.onInit = function (info) {
|
|
|
|
|
var privateData = metadataMgr.getPrivateData();
|
|
|
|
|
|
|
|
|
@ -1850,6 +1960,7 @@ define([
|
|
|
|
|
Title.setToolbar(toolbar);
|
|
|
|
|
|
|
|
|
|
if (window.CP_DEV_MODE) {
|
|
|
|
|
|
|
|
|
|
var $save = common.createButton('save', true, {}, function () {
|
|
|
|
|
makeCheckpoint(true);
|
|
|
|
|
});
|
|
|
|
@ -1866,18 +1977,6 @@ define([
|
|
|
|
|
APP.stopHistory = true;
|
|
|
|
|
makeCheckpoint(true);
|
|
|
|
|
};
|
|
|
|
|
var loadCp = function (cp, keepQueue) {
|
|
|
|
|
loadLastDocument(cp, function () {
|
|
|
|
|
var file = getFileType();
|
|
|
|
|
var type = common.getMetadataMgr().getPrivateData().ooType;
|
|
|
|
|
var blob = loadInitDocument(type, true);
|
|
|
|
|
if (!keepQueue) { ooChannel.queue = []; }
|
|
|
|
|
resetData(blob, file);
|
|
|
|
|
}, function (blob, file) {
|
|
|
|
|
if (!keepQueue) { ooChannel.queue = []; }
|
|
|
|
|
resetData(blob, file);
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
var onPatch = function (patch) {
|
|
|
|
|
// Patch on the current cp
|
|
|
|
|
ooChannel.send(JSON.parse(patch.msg));
|
|
|
|
@ -1971,6 +2070,10 @@ define([
|
|
|
|
|
load: loadSnapshot
|
|
|
|
|
});
|
|
|
|
|
toolbar.$drawer.append($snapshot);
|
|
|
|
|
|
|
|
|
|
// Import template
|
|
|
|
|
var $template = common.createButton('importtemplate', true, {}, openTemplatePicker);
|
|
|
|
|
$template.appendTo(toolbar.$drawer);
|
|
|
|
|
})();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|