diff options
author | Sergey Linnik <sergey.linnik@onlyoffice.com> | 2020-01-16 12:17:43 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-16 12:17:43 +0300 |
commit | 8100ca57f8a43324e4a550c050191c2bc34a785f (patch) | |
tree | a7ce49a327b68d836e937baeb27bd030798a065d /js | |
parent | 9afe41f8bf1ef8bc60645beed5b4423f4be7ac25 (diff) | |
parent | 4f788e907079812f45225cf239908e0489287b43 (diff) |
Merge pull request #206 from ONLYOFFICE/feature/direct-editor
Feature/direct editor
Diffstat (limited to 'js')
-rw-r--r-- | js/directeditor.js | 76 | ||||
-rw-r--r-- | js/editor.js | 44 |
2 files changed, 106 insertions, 14 deletions
diff --git a/js/directeditor.js b/js/directeditor.js new file mode 100644 index 0000000..e29dabd --- /dev/null +++ b/js/directeditor.js @@ -0,0 +1,76 @@ +/** + * + * (c) Copyright Ascensio System SIA 2019 + * + * 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. + * + * 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 + * + */ + +(function (OCA) { + + OCA.Onlyoffice = _.extend({}, OCA.Onlyoffice); + + var callMobileMessage = function (messageName, attributes) { + var message = messageName + if (typeof attributes !== "undefined") { + message = { + MessageName: messageName, + Values: attributes, + }; + } + var attributesString = null + try { + attributesString = JSON.stringify(attributes); + } catch (e) { + attributesString = null; + } + + // Forward to mobile handler + if (window.DirectEditingMobileInterface && typeof window.DirectEditingMobileInterface[messageName] === "function") { + if (attributesString === null || typeof attributesString === "undefined") { + window.DirectEditingMobileInterface[messageName](); + } else { + window.DirectEditingMobileInterface[messageName](attributesString); + } + } + + // iOS webkit fallback + if (window.webkit + && window.webkit.messageHandlers + && window.webkit.messageHandlers.DirectEditingMobileInterface) { + window.webkit.messageHandlers.DirectEditingMobileInterface.postMessage(message); + } + + window.postMessage(message); + } + + OCA.Onlyoffice.directEditor = { + close: function() { + callMobileMessage("close"); + }, + loaded: function() { + callMobileMessage("loaded"); + } + }; + +})(OCA); diff --git a/js/editor.js b/js/editor.js index b73cd17..ab9682a 100644 --- a/js/editor.js +++ b/js/editor.js @@ -41,10 +41,10 @@ }; var fileId = $("#iframeEditor").data("id"); - var filePath = $("#iframeEditor").data("path"); var shareToken = $("#iframeEditor").data("sharetoken"); + var directToken = $("#iframeEditor").data("directtoken"); OCA.Onlyoffice.inframe = !!$("#iframeEditor").data("inframe"); - if (!fileId && !shareToken) { + if (!fileId && !shareToken && !directToken) { displayError(t(OCA.Onlyoffice.AppName, "FileId is empty")); return; } @@ -60,24 +60,29 @@ }); var params = []; + var filePath = $("#iframeEditor").data("path"); if (filePath) { params.push("filePath=" + encodeURIComponent(filePath)); } if (shareToken) { params.push("shareToken=" + encodeURIComponent(shareToken)); } + if (directToken) { + $("html").addClass("onlyoffice-full-page"); + params.push("directToken=" + encodeURIComponent(directToken)); + } - if (OCA.Onlyoffice.inframe) { - var dsVersion = DocsAPI.DocEditor.version(); - var versionArray = dsVersion.split("."); - if (versionArray[0] < 5 || versionArray[1] < 5) { + var dsVersion = DocsAPI.DocEditor.version(); + var versionArray = dsVersion.split("."); + if (versionArray[0] < 5 || versionArray[1] < 5) { + if (OCA.Onlyoffice.inframe) { window.parent.postMessage({ method: "editorShowHeaderButton" }); - params.push("inframe=2"); - } else { - params.push("inframe=1"); } + params.push("inframe=2"); + } else if (OCA.Onlyoffice.inframe) { + params.push("inframe=1"); } if (OCA.Onlyoffice.Desktop) { @@ -132,16 +137,22 @@ config.events.onRequestCompareFile = OCA.Onlyoffice.onRequestCompareFile; } - if (OCA.Onlyoffice.inframe) { + if (OCA.Onlyoffice.directEditor || OCA.Onlyoffice.inframe) { config.events.onRequestClose = OCA.Onlyoffice.onRequestClose; - if (config._files_sharing && !shareToken) { - config.events.onRequestSharingSettings = OCA.Onlyoffice.onRequestSharingSettings; - } + } + + if (OCA.Onlyoffice.inframe && config._files_sharing && !shareToken) { + config.events.onRequestSharingSettings = OCA.Onlyoffice.onRequestSharingSettings; } OCA.Onlyoffice.docEditor = new DocsAPI.DocEditor("iframeEditor", config); - if (config.type === "mobile" && $("#app > iframe").css("position") === "fixed") { + if (OCA.Onlyoffice.directEditor) { + OCA.Onlyoffice.directEditor.loaded(); + } + + if (!OCA.Onlyoffice.directEditor + && config.type === "mobile" && $("#app > iframe").css("position") === "fixed") { $("#app > iframe").css("height", "calc(100% - 50px)"); } } @@ -259,6 +270,11 @@ }; OCA.Onlyoffice.onRequestClose = function () { + if (OCA.Onlyoffice.directEditor) { + OCA.Onlyoffice.directEditor.close(); + return; + } + window.parent.postMessage({ method: "editorRequestClose" }); |