mirror of https://github.com/xwiki-labs/cryptpad
Support OO apps in the API
This commit is contained in:
parent
0604b708dc
commit
2557b506ab
|
@ -107,9 +107,11 @@ define([
|
|||
var myOOId;
|
||||
var sessionId = Hash.createChannelId();
|
||||
var cpNfInner;
|
||||
let integrationChannel;
|
||||
|
||||
var evOnPatch = Util.mkEvent();
|
||||
var evOnSync = Util.mkEvent();
|
||||
var evIntegrationSave = Util.mkEvent();
|
||||
|
||||
// This structure is used for caching media data and blob urls for each media cryptpad url
|
||||
var mediasData = {};
|
||||
|
@ -317,7 +319,10 @@ define([
|
|||
isCp: cp
|
||||
}
|
||||
}, function (err, h) {
|
||||
if (!err) { evOnSync.fire(); }
|
||||
if (!err) {
|
||||
evOnSync.fire();
|
||||
evIntegrationSave.fire();
|
||||
}
|
||||
cb(err, h);
|
||||
});
|
||||
},
|
||||
|
@ -1418,6 +1423,9 @@ define([
|
|||
|
||||
debug(obj, 'toOO');
|
||||
chan.event('CMD', obj);
|
||||
if (obj && obj.type === "saveChanges") {
|
||||
evIntegrationSave.fire();
|
||||
}
|
||||
};
|
||||
|
||||
chan.on('CMD', function (obj) {
|
||||
|
@ -3117,6 +3125,73 @@ Uncaught TypeError: Cannot read property 'calculatedType' of null
|
|||
UI.removeLoadingScreen();
|
||||
};
|
||||
|
||||
let convertImportBlob = (blob, title) => {
|
||||
new Response(blob).arrayBuffer().then(function (buffer) {
|
||||
var u8Xlsx = new Uint8Array(buffer);
|
||||
x2tImportData(u8Xlsx, title, 'bin', function (bin) {
|
||||
if (!bin) {
|
||||
return void UI.errorLoadingScreen(Messages.error);
|
||||
}
|
||||
var blob = new Blob([bin], {type: 'text/plain'});
|
||||
var file = getFileType();
|
||||
resetData(blob, file);
|
||||
//saveToServer(blob, title);
|
||||
Title.updateTitle(title);
|
||||
UI.removeLoadingScreen();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
if (privateData.integration) {
|
||||
let cfg = privateData.integrationConfig || {};
|
||||
common.openIntegrationChannel(APP.onLocal);
|
||||
integrationChannel = common.getSframeChannel();
|
||||
var integrationSave = function (cb) {
|
||||
var ext = cfg.fileType;
|
||||
|
||||
var upload = Util.once(function (_blob) {
|
||||
integrationChannel.query('Q_INTEGRATION_SAVE', {
|
||||
blob: _blob
|
||||
}, cb, {
|
||||
raw: true
|
||||
});
|
||||
});
|
||||
|
||||
var data = getContent();
|
||||
x2tConvertData(data, "document.bin", ext, function (xlsData) {
|
||||
UI.removeModals();
|
||||
if (xlsData) {
|
||||
var blob = new Blob([xlsData], {type: "application/bin;charset=utf-8"});
|
||||
upload(blob);
|
||||
return;
|
||||
}
|
||||
UI.warn(Messages.error);
|
||||
});
|
||||
};
|
||||
const integrationHasUnsavedChanges = function(unsavedChanges, cb) {
|
||||
integrationChannel.query('Q_INTEGRATION_HAS_UNSAVED_CHANGES', unsavedChanges, cb);
|
||||
};
|
||||
var inte = common.createIntegration(integrationSave,
|
||||
integrationHasUnsavedChanges);
|
||||
if (inte) {
|
||||
evIntegrationSave.reg(function () {
|
||||
inte.changed();
|
||||
});
|
||||
}
|
||||
integrationChannel.on('Q_INTEGRATION_NEEDSAVE', function (data, cb) {
|
||||
integrationSave(function (obj) {
|
||||
if (obj && obj.error) { console.error(obj.error); }
|
||||
cb();
|
||||
});
|
||||
});
|
||||
if (privateData.initialState) {
|
||||
var blob = privateData.initialState;
|
||||
let title = `document.${cfg.fileType}`;
|
||||
console.error(blob, title);
|
||||
return convertImportBlob(blob, title);
|
||||
}
|
||||
}
|
||||
|
||||
if (privateData.isNewFile && privateData.fromFileData) {
|
||||
try {
|
||||
(function () {
|
||||
|
|
|
@ -11,12 +11,15 @@ define([
|
|||
'/common/sframe-common-outer.js'
|
||||
], function (nThen, ApiConfig, DomReady, Hash, SFCommonO) {
|
||||
|
||||
var isIntegration = Boolean(window.CP_integration_outer);
|
||||
var integration = window.CP_integration_outer || {};
|
||||
|
||||
// Loaded in load #2
|
||||
var hash, href, version;
|
||||
nThen(function (waitFor) {
|
||||
DomReady.onReady(waitFor());
|
||||
}).nThen(function (waitFor) {
|
||||
var obj = SFCommonO.initIframe(waitFor, true);
|
||||
var obj = SFCommonO.initIframe(waitFor, true, integration.pathname);
|
||||
href = obj.href;
|
||||
hash = obj.hash;
|
||||
var parsed = Hash.parsePadUrl(href);
|
||||
|
@ -24,9 +27,14 @@ define([
|
|||
var opts = parsed.getOptions();
|
||||
version = opts.versionHash;
|
||||
}
|
||||
if (isIntegration) {
|
||||
href = integration.href;
|
||||
hash = integration.hash;
|
||||
}
|
||||
}).nThen(function (/*waitFor*/) {
|
||||
var addData = function (obj) {
|
||||
obj.ooType = window.location.pathname.replace(/^\//, '').replace(/\/$/, '');
|
||||
let path = (integration && integration.pathname) || window.location.pathname;
|
||||
obj.ooType = path.replace(/^\//, '').replace(/\/$/, '');
|
||||
obj.ooVersionHash = version;
|
||||
obj.ooForceVersion = localStorage.CryptPad_ooVersion || "";
|
||||
};
|
||||
|
@ -161,11 +169,16 @@ define([
|
|||
hash: hash,
|
||||
href: href,
|
||||
type: 'oo',
|
||||
useCreationScreen: true,
|
||||
addData: addData,
|
||||
addRpc: addRpc,
|
||||
getPropChannels: getPropChannels,
|
||||
messaging: true
|
||||
messaging: true,
|
||||
useCreationScreen: !isIntegration,
|
||||
noDrive: true,
|
||||
integration: isIntegration,
|
||||
integrationUtils: integration.utils,
|
||||
integrationConfig: integration.config || {},
|
||||
initialState: integration.initialState || undefined
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -3156,6 +3156,7 @@ define([
|
|||
loadUniversal(Cursor, 'cursor', function () {});
|
||||
loadUniversal(Integration, 'integration', function () {});
|
||||
loadUniversal(Messenger, 'messenger', function () {});
|
||||
loadOnlyOffice();
|
||||
store.messenger = store.modules['messenger'];
|
||||
|
||||
// And now we're ready
|
||||
|
|
|
@ -648,8 +648,8 @@ define([
|
|||
const integrationHasUnsavedChanges = function(unsavedChanges, cb) {
|
||||
integrationChannel.query('Q_INTEGRATION_HAS_UNSAVED_CHANGES', unsavedChanges, cb);
|
||||
};
|
||||
var inte = common.createIntegration(onLocal, cpNfInner.chainpad,
|
||||
integrationSave, integrationHasUnsavedChanges);
|
||||
var inte = common.createIntegration(integrationSave,
|
||||
integrationHasUnsavedChanges);
|
||||
if (inte) {
|
||||
integration = true;
|
||||
evIntegrationSave.reg(function () {
|
||||
|
|
|
@ -9,8 +9,6 @@ define([
|
|||
|
||||
module.create = function (
|
||||
Common,
|
||||
onLocal,
|
||||
chainpad,
|
||||
saveHandler,
|
||||
unsavedChangesHandler) {
|
||||
|
||||
|
|
|
@ -147,7 +147,11 @@ define([
|
|||
onInsertImage: onInsertImage
|
||||
}
|
||||
};
|
||||
require(['/common/sframe-app-outer.js'], function () {
|
||||
let path = "/common/sframe-app-outer.js";
|
||||
if (['sheet', 'doc', 'presentation'].includes(data.application)) {
|
||||
path = '/common/onlyoffice/main.js';
|
||||
}
|
||||
require([path], function () {
|
||||
console.warn('SAO REQUIRED');
|
||||
delete window.CP_integration_outer;
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue