web-apps/apps/common/Gateway.js

372 lines
11 KiB
JavaScript
Raw Normal View History

2016-04-01 13:17:09 +00:00
/*
*
* (c) Copyright Ascensio System SIA 2010-2019
2016-04-01 13:17:09 +00:00
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
2016-04-01 13:17:09 +00:00
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
2016-11-18 16:12:10 +00:00
2020-07-31 17:34:55 +00:00
if (window.Common === undefined) {
window.Common = {};
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:12:10 +00:00
Common.Gateway = new(function() {
var me = this,
$me = $(me);
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
var commandMap = {
'init': function(data) {
$me.trigger('init', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'openDocument': function(data) {
$me.trigger('opendocument', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'showMessage': function(data) {
$me.trigger('showmessage', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'applyEditRights': function(data) {
$me.trigger('applyeditrights', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'processSaveResult': function(data) {
$me.trigger('processsaveresult', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'processRightsChange': function(data) {
$me.trigger('processrightschange', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'refreshHistory': function(data) {
$me.trigger('refreshhistory', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'setHistoryData': function(data) {
$me.trigger('sethistorydata', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'setEmailAddresses': function(data) {
$me.trigger('setemailaddresses', data);
},
2016-03-11 00:48:53 +00:00
'setActionLink': function (data) {
$me.trigger('setactionlink', data.url);
},
2016-11-18 16:12:10 +00:00
'processMailMerge': function(data) {
$me.trigger('processmailmerge', data);
},
2016-03-11 00:48:53 +00:00
'downloadAs': function(data) {
$me.trigger('downloadas', data);
2016-11-18 16:12:10 +00:00
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'processMouse': function(data) {
$me.trigger('processmouse', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'internalCommand': function(data) {
$me.trigger('internalcommand', data);
},
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
'resetFocus': function(data) {
$me.trigger('resetfocus', data);
},
'setUsers': function(data) {
$me.trigger('setusers', data);
},
'showSharingSettings': function(data) {
$me.trigger('showsharingsettings', data);
},
'setSharingSettings': function(data) {
$me.trigger('setsharingsettings', data);
},
'insertImage': function(data) {
$me.trigger('insertimage', data);
},
'setMailMergeRecipients': function(data) {
$me.trigger('setmailmergerecipients', data);
2019-10-11 12:12:59 +00:00
},
'setRevisedFile': function(data) {
$me.trigger('setrevisedfile', data);
2020-12-14 19:45:30 +00:00
},
'setFavorite': function(data) {
$me.trigger('setfavorite', data);
},
'requestClose': function(data) {
$me.trigger('requestclose', data);
2021-05-06 11:37:46 +00:00
},
'blurFocus': function(data) {
$me.trigger('blurfocus', data);
},
'grabFocus': function(data) {
$me.trigger('grabfocus', data);
2022-06-07 14:43:17 +00:00
},
'setReferenceData': function(data) {
$me.trigger('setreferencedata', data);
2016-11-18 16:12:10 +00:00
}
};
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
var _postMessage = function(msg) {
// TODO: specify explicit origin
if (window.parent && window.JSON) {
2017-01-23 11:34:23 +00:00
msg.frameEditorId = window.frameEditorId;
2016-11-18 16:12:10 +00:00
window.parent.postMessage(window.JSON.stringify(msg), "*");
}
};
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
var _onMessage = function(msg) {
// TODO: check message origin
2021-06-02 12:46:22 +00:00
if (msg.origin !== window.parentOrigin && msg.origin !== window.location.origin && !(msg.origin==="null" && (window.parentOrigin==="file://" || window.location.origin==="file://"))) return;
2020-03-19 14:38:09 +00:00
2016-11-18 16:12:10 +00:00
var data = msg.data;
if (Object.prototype.toString.apply(data) !== '[object String]' || !window.JSON) {
return;
}
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
var cmd, handler;
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
try {
cmd = window.JSON.parse(data)
} catch(e) {
cmd = '';
}
2016-03-11 00:48:53 +00:00
2016-11-18 16:12:10 +00:00
if (cmd) {
handler = commandMap[cmd.command];
if (handler) {
handler.call(this, cmd.data);
}
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:12:10 +00:00
};
var fn = function(e) { _onMessage(e); };
if (window.attachEvent) {
window.attachEvent('onmessage', fn);
} else {
window.addEventListener('message', fn, false);
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:12:10 +00:00
return {
appReady: function() {
_postMessage({ event: 'onAppReady' });
2016-11-18 16:12:10 +00:00
},
requestEditRights: function() {
_postMessage({ event: 'onRequestEditRights' });
},
requestHistory: function() {
_postMessage({ event: 'onRequestHistory' });
},
requestHistoryData: function(revision) {
_postMessage({
event: 'onRequestHistoryData',
data: revision
});
},
requestRestore: function(version, url, fileType) {
2016-11-18 16:12:10 +00:00
_postMessage({
event: 'onRequestRestore',
data: {
version: version,
url: url,
fileType: fileType
2016-11-18 16:12:10 +00:00
}
});
},
requestEmailAddresses: function() {
_postMessage({ event: 'onRequestEmailAddresses' });
},
requestStartMailMerge: function() {
_postMessage({event: 'onRequestStartMailMerge'});
},
requestHistoryClose: function(revision) {
_postMessage({event: 'onRequestHistoryClose'});
},
reportError: function(code, description) {
_postMessage({
event: 'onError',
data: {
errorCode: code,
errorDescription: description
}
});
},
2017-10-07 09:20:39 +00:00
reportWarning: function(code, description) {
_postMessage({
event: 'onWarning',
data: {
warningCode: code,
warningDescription: description
}
});
},
2016-11-18 16:12:10 +00:00
sendInfo: function(info) {
_postMessage({
event: 'onInfo',
data: info
});
},
setDocumentModified: function(modified) {
_postMessage({
event: 'onDocumentStateChange',
data: modified
});
},
internalMessage: function(type, data) {
_postMessage({
event: 'onInternalMessage',
data: {
type: type,
data: data
}
});
},
updateVersion: function() {
_postMessage({ event: 'onOutdatedVersion' });
},
downloadAs: function(url, fileType) {
2016-11-18 16:12:10 +00:00
_postMessage({
event: 'onDownloadAs',
data: {
url: url,
fileType: fileType
}
2016-11-18 16:12:10 +00:00
});
},
requestSaveAs: function(url, title, fileType) {
2019-07-26 09:54:20 +00:00
_postMessage({
event: 'onRequestSaveAs',
data: {
url: url,
title: title,
fileType: fileType
2019-07-26 09:54:20 +00:00
}
});
},
2016-11-18 16:12:10 +00:00
collaborativeChanges: function() {
_postMessage({event: 'onCollaborativeChanges'});
},
requestRename: function(title) {
_postMessage({event: 'onRequestRename', data: title});
},
metaChange: function(meta) {
_postMessage({event: 'onMetaChange', data: meta});
},
documentReady: function() {
_postMessage({ event: 'onDocumentReady' });
},
requestClose: function() {
_postMessage({event: 'onRequestClose'});
},
requestMakeActionLink: function (config) {
_postMessage({event:'onMakeActionLink', data: config});
},
requestUsers: function () {
_postMessage({event:'onRequestUsers'});
},
requestSendNotify: function (emails) {
_postMessage({event:'onRequestSendNotify', data: emails});
},
requestInsertImage: function (command) {
_postMessage({event:'onRequestInsertImage', data: {c: command}});
},
requestMailMergeRecipients: function () {
_postMessage({event:'onRequestMailMergeRecipients'});
},
2019-10-11 12:12:59 +00:00
requestCompareFile: function () {
_postMessage({event:'onRequestCompareFile'});
},
requestSharingSettings: function () {
_postMessage({event:'onRequestSharingSettings'});
2019-10-11 12:12:59 +00:00
},
requestCreateNew: function () {
_postMessage({event:'onRequestCreateNew'});
},
2022-06-07 14:43:17 +00:00
requestReferenceData: function (data) {
_postMessage({event:'onRequestReferenceData', data: data});
},
2021-03-26 17:37:29 +00:00
pluginsReady: function() {
_postMessage({ event: 'onPluginsReady' });
},
2016-11-18 16:12:10 +00:00
on: function(event, handler){
var localHandler = function(event, data){
handler.call(me, data)
};
$me.on(event, localHandler);
}
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:12:10 +00:00
})();