From f00e6cdb4ae0c4667335e49c9f74d560d071963e Mon Sep 17 00:00:00 2001 From: Pranav Kant Date: Thu, 8 Feb 2018 15:04:56 +0530 Subject: [PATCH] Support version restore states (#166) See https://gerrit.libreoffice.org/gitweb?p=online.git;a=commit;h=1fabfd9fe34815cab54c1417cfc7e541adb6a341 for details --- js/documents.js | 59 +++++++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/js/documents.js b/js/documents.js index 382ed91b..97b5b699 100644 --- a/js/documents.js +++ b/js/documents.js @@ -70,6 +70,8 @@ var documentsMain = { loadErrorHint : '', renderComplete: false, // false till page is rendered with all required data about the document(s) toolbar : '
', + $deferredVersionRestoreAck: null, + wopiClientFeatures: null, // generates docKey for given fileId _generateDocKey: function(wopiFileId) { @@ -260,30 +262,31 @@ var documentsMain = { // close the viewer documentsMain.onCloseViewer(); - // close the editor - documentsMain.UI.hideEditor(); - - // If there are changes in the opened editor, we need to wait - // for sometime before these changes can be saved and a revision is created for it, - // before restoring to requested version. - documentsMain.overlay.documentOverlay('show'); - setTimeout(function() { - // restore selected version - $.ajax({ - type: 'GET', - url: e.currentTarget.href, - success: function(response) { - if (response.status === 'error') { - documentsMain.UI.notify(t('richdocuments', 'Failed to revert the document to older version')); + documentsMain.WOPIPostMessage($('#loleafletframe')[0], 'Host_VersionRestore', {Status: 'Pre_Restore'}); + + documentsMain.$deferredVersionRestoreAck = $.Deferred(); + jQuery.when(documentsMain.$deferredVersionRestoreAck). + done(function(args) { + // restore selected version + $.ajax({ + type: 'GET', + url: e.currentTarget.href, + success: function(response) { + if (response.status === 'error') { + documentsMain.UI.notify(t('richdocuments', 'Failed to revert the document to older version')); + } + + // load the file again, it should get reverted now + window.location.reload(); + documentsMain.overlay.documentOverlay('hide'); } - - // load the file again, it should get reverted now - window.location = OC.generateUrl('apps/richdocuments/index#{fileid}', {fileid: e.currentTarget.parentElement.dataset.fileid}); - window.location.reload(); - documentsMain.overlay.documentOverlay('hide'); - } + }); }); - }, 1000); + + // resolve the deferred object immediately if client doesn't support version states + if (!documentsMain.wopiClientFeatures || !documentsMain.wopiClientFeatures.VersionStates) { + documentsMain.$deferredVersionRestoreAck.resolve(); + } }); // fake click on first revision (i.e current revision) @@ -344,6 +347,7 @@ var documentsMain = { var editorInitListener = function(e) { var msg = JSON.parse(e.data); if (msg.MessageId === 'App_LoadingStatus') { + documentsMain.wopiClientFeatures = msg.Values.Features; window.removeEventListener('message', editorInitListener, false); } }; @@ -398,6 +402,17 @@ var documentsMain = { true, t('richdocuments', 'New filename'), false); + } else if (msgId === 'App_VersionRestore') { + if (!documentsMain.$deferredVersionRestoreAck) + { + console.warn('No version restore deferred object found.'); + return; + } + + if (args.Status === 'Pre_Restore_Ack') { + // user instructed to restore the version + documentsMain.$deferredVersionRestoreAck.resolve(); + } } });