diff options
author | Sergey Linnik <sergey.linnik@onlyoffice.com> | 2020-08-25 14:23:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-25 14:23:04 +0300 |
commit | 4dd8589ffbb0c0952f07ef98b348289188ce056e (patch) | |
tree | 919c0c1cf1980ee7bc47cef50708918f42c2d9b1 /js | |
parent | d31a12935588dea86f397b18abb14a80307f4e91 (diff) | |
parent | 74e91b2a450d65abbca978b5cc44c5e39d755a37 (diff) |
Merge pull request #343 from ONLYOFFICE/feature/version-history
Feature/version history
Diffstat (limited to 'js')
-rw-r--r-- | js/editor.js | 98 | ||||
-rw-r--r-- | js/listener.js | 10 | ||||
-rw-r--r-- | js/main.js | 51 |
3 files changed, 147 insertions, 12 deletions
diff --git a/js/editor.js b/js/editor.js index 284fe67..d8ac41b 100644 --- a/js/editor.js +++ b/js/editor.js @@ -30,7 +30,9 @@ OCA.Onlyoffice = _.extend({ AppName: "onlyoffice", - inframe: false + inframe: false, + fileId: null, + shareToken: null }, OCA.Onlyoffice); OCA.Onlyoffice.InitEditor = function () { @@ -40,11 +42,12 @@ }); }; - var fileId = $("#iframeEditor").data("id"); - var shareToken = $("#iframeEditor").data("sharetoken"); + OCA.Onlyoffice.fileId = $("#iframeEditor").data("id"); + OCA.Onlyoffice.shareToken = $("#iframeEditor").data("sharetoken"); + OCA.Onlyoffice.version = $("#iframeEditor").data("version"); var directToken = $("#iframeEditor").data("directtoken"); OCA.Onlyoffice.inframe = !!$("#iframeEditor").data("inframe"); - if (!fileId && !shareToken && !directToken) { + if (!OCA.Onlyoffice.fileId && !OCA.Onlyoffice.shareToken && !directToken) { displayError(t(OCA.Onlyoffice.AppName, "FileId is empty")); return; } @@ -56,7 +59,7 @@ var configUrl = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/config/{fileId}", { - fileId: fileId || 0 + fileId: OCA.Onlyoffice.fileId || 0 }); var params = []; @@ -64,13 +67,16 @@ if (filePath) { params.push("filePath=" + encodeURIComponent(filePath)); } - if (shareToken) { - params.push("shareToken=" + encodeURIComponent(shareToken)); + if (OCA.Onlyoffice.shareToken) { + params.push("shareToken=" + encodeURIComponent(OCA.Onlyoffice.shareToken)); } if (directToken) { $("html").addClass("onlyoffice-full-page"); params.push("directToken=" + encodeURIComponent(directToken)); } + if (OCA.Onlyoffice.version > 0) { + params.push("version=" + OCA.Onlyoffice.version); + } if (OCA.Onlyoffice.inframe || directToken) { var dsVersion = DocsAPI.DocEditor.version(); @@ -133,15 +139,22 @@ config.events = { "onDocumentStateChange": setPageTitle, + "onRequestHistory": OCA.Onlyoffice.onRequestHistory, + "onRequestHistoryData": OCA.Onlyoffice.onRequestHistoryData, + "onDocumentReady": OCA.Onlyoffice.onDocumentReady, }; + if (!OCA.Onlyoffice.version) { + config.events.onRequestHistoryClose = OCA.Onlyoffice.onRequestHistoryClose; + } + if (config.editorConfig.tenant) { config.events.onAppReady = function () { OCA.Onlyoffice.docEditor.showMessage(t(OCA.Onlyoffice.AppName, "You are using public demo ONLYOFFICE Document Server. Please do not store private sensitive data.")); }; } - if (OCA.Onlyoffice.inframe && !shareToken + if (OCA.Onlyoffice.inframe && !OCA.Onlyoffice.shareToken || OC.currentUser) { config.events.onRequestSaveAs = OCA.Onlyoffice.onRequestSaveAs; config.events.onRequestInsertImage = OCA.Onlyoffice.onRequestInsertImage; @@ -154,7 +167,7 @@ } if (OCA.Onlyoffice.inframe - && config._files_sharing && !shareToken + && config._files_sharing && !OCA.Onlyoffice.shareToken && window.parent.OCA.Onlyoffice.context) { config.events.onRequestSharingSettings = OCA.Onlyoffice.onRequestSharingSettings; } @@ -174,6 +187,73 @@ }); }; + OCA.Onlyoffice.onRequestHistory = function (version) { + $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/history?fileId={fileId}&shareToken={shareToken}", + { + fileId: OCA.Onlyoffice.fileId || 0, + shareToken: OCA.Onlyoffice.shareToken || "", + }), + function onSuccess(response) { + if (response.error) { + var data = {error: response.error}; + } else { + var currentVersion = 0; + $.each(response, function (i, fileVersion) { + if (fileVersion.version >= currentVersion) { + currentVersion = fileVersion.version; + } + }); + + if (version) { + currentVersion = Math.min(currentVersion, version); + } + + data = { + currentVersion: currentVersion, + history: response, + }; + } + OCA.Onlyoffice.docEditor.refreshHistory(data); + }); + }; + + OCA.Onlyoffice.onRequestHistoryData = function (event) { + var version = event.data; + + $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/version?fileId={fileId}&version={version}&shareToken={shareToken}", + { + fileId: OCA.Onlyoffice.fileId || 0, + version: version, + shareToken: OCA.Onlyoffice.shareToken || "", + }), + function onSuccess(response) { + if (response.error) { + response = { + error: response.error, + version: version, + }; + } + OCA.Onlyoffice.docEditor.setHistoryData(response); + }); + }; + + OCA.Onlyoffice.onRequestHistoryClose = function () { + location.reload(true); + }; + + OCA.Onlyoffice.onDocumentReady = function() { + if (OCA.Onlyoffice.inframe) { + window.parent.postMessage({ + method: "onDocumentReady" + }, + "*"); + } + + if (OCA.Onlyoffice.version > 0) { + OCA.Onlyoffice.onRequestHistory(OCA.Onlyoffice.version); + } + }; + OCA.Onlyoffice.onRequestSaveAs = function (event) { var saveData = { name: event.data.title, diff --git a/js/listener.js b/js/listener.js index 3a25edb..f571010 100644 --- a/js/listener.js +++ b/js/listener.js @@ -36,6 +36,7 @@ OCA.Onlyoffice.onRequestClose = function () { $(OCA.Onlyoffice.frameSelector).remove(); + OCA.Onlyoffice.frameSelector = null; if (OCA.Viewer && OCA.Viewer.close) { OCA.Viewer.close(); @@ -77,6 +78,12 @@ revisedMimes); }; + OCA.Onlyoffice.onDocumentReady = function () { + if (OCA.Onlyoffice.bindVersionClick) { + OCA.Onlyoffice.bindVersionClick(); + } + }; + window.addEventListener("message", function (event) { if ($(OCA.Onlyoffice.frameSelector)[0].contentWindow !== event.source || !event.data["method"]) { @@ -108,6 +115,9 @@ case "editorRequestCompareFile": OCA.Onlyoffice.onRequestCompareFile(event.data.param); break; + case "onDocumentReady": + OCA.Onlyoffice.onDocumentReady(); + break; } }, false); @@ -66,7 +66,7 @@ } fileList.add(response, { animate: true }); - OCA.Onlyoffice.OpenEditor(response.id, dir, response.name, winEditor); + OCA.Onlyoffice.OpenEditor(response.id, dir, response.name, 0, winEditor); OCA.Onlyoffice.context = { fileList: fileList }; OCA.Onlyoffice.context.fileName = response.name; @@ -76,8 +76,11 @@ ); }; - OCA.Onlyoffice.OpenEditor = function (fileId, fileDir, fileName, winEditor) { - var filePath = fileDir.replace(new RegExp("\/$"), "") + "/" + fileName; + OCA.Onlyoffice.OpenEditor = function (fileId, fileDir, fileName, version, winEditor) { + var filePath = ""; + if (fileName) { + filePath = fileDir.replace(new RegExp("\/$"), "") + "/" + fileName; + } var url = OC.generateUrl("/apps/" + OCA.Onlyoffice.AppName + "/{fileId}?filePath={filePath}", { fileId: fileId, @@ -92,6 +95,10 @@ }); } + if (version > 0) { + url += "&version=" + version; + } + if (winEditor && winEditor.location) { winEditor.location.href = url; } else if (!OCA.Onlyoffice.setting.sameTab || OCA.Onlyoffice.Desktop) { @@ -305,6 +312,40 @@ return extension; } + OCA.Onlyoffice.openVersion = function (fileId, version) { + if (OCA.Onlyoffice.frameSelector) { + $(OCA.Onlyoffice.frameSelector)[0].contentWindow.OCA.Onlyoffice.onRequestHistory(version); + return; + } + + OCA.Onlyoffice.OpenEditor(fileId, "", "", version) + }; + + OCA.Onlyoffice.bindVersionClick = function () { + unbindVersionClick(); + $(document).on("click.onlyoffice-version", "#versionsTabView .downloadVersion", function() { + var versionNodes = $("#versionsTabView ul.versions>li"); + var versionNode = $(this).closest("#versionsTabView ul.versions>li")[0]; + + var href = $(this).attr("href"); + var search = new RegExp("\/versions\/\\w+\/versions\/(\\d+)\/\\d+"); + var result = search.exec(href); + if (result && result.length > 1) { + var fileId = result[1]; + } + + var versionNum = versionNodes.length - $.inArray(versionNode, versionNodes); + + OCA.Onlyoffice.openVersion(fileId || "", versionNum); + + return false; + }); + }; + + var unbindVersionClick = function() { + $(document).off("click.onlyoffice-version", "#versionsTabView .downloadVersion"); + } + var initPage = function () { if ($("#isPublic").val() === "1" && !$("#filestable").length) { var fileName = $("#filename").val(); @@ -334,6 +375,10 @@ } else { OC.Plugins.register("OCA.Files.FileList", OCA.Onlyoffice.FileList); OC.Plugins.register("OCA.Files.NewFileMenu", OCA.Onlyoffice.NewFileMenu); + + if (OCA.Versions) { + OCA.Onlyoffice.bindVersionClick(); + } } }; |