diff options
author | Julius Härtl <jus@bitgrid.net> | 2018-12-17 19:07:06 +0300 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2018-12-18 12:03:14 +0300 |
commit | 202ff4be5569819a0bad962e6f5f9e03a3e475fe (patch) | |
tree | 6dea1313c0a9a04e0235a35ea6f238c08209a2b4 /js | |
parent | efc00d4994c278340897cecccadaa76c4ecf4897 (diff) |
Make version restore compatible with Nextcloud 13/14
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'js')
-rw-r--r-- | js/documents.js | 156 |
1 files changed, 91 insertions, 65 deletions
diff --git a/js/documents.js b/js/documents.js index 788bf2d3..7e5712de 100644 --- a/js/documents.js +++ b/js/documents.js @@ -283,81 +283,106 @@ var documentsMain = { }, addVersionSidebarEvents: function() { - var self = this; - var showVersionPreview = function (e) { - e.preventDefault(); - self.loadRevViewerContainer(); - var element = e.currentTarget.parentElement.parentElement; - if ($(e.currentTarget).hasClass('downloadVersion')) { - element = e.currentTarget.parentElement.parentElement.parentElement.parentElement; - } - var version = element.dataset.revision; - var fileId = documentsMain.fileId + '_' + version; - var title = documentsMain.fileName + ' - ' + version; - documentsMain.UI.showViewer( - fileId, title - ); - - // mark only current <li> as active - $(element.parentElement).find('li').removeClass('active'); - $(element).addClass('active'); - }; + $(parent.document.querySelector('#content')).on('click.revisions', '#app-sidebar .preview-container', this.showVersionPreview.bind(this)); + $(parent.document.querySelector('#content')).on('click.revisions', '#app-sidebar .downloadVersion', this.showVersionPreview.bind(this)); + // Use mousedown event to overwrite behavior of the versions app + $(parent.document.querySelector('#content')).on('mousedown.revisions', '#app-sidebar .revertVersion', this.restoreVersion.bind(this)); + }, - $(parent.document.querySelector('#content')).on('click.revisions', '#app-sidebar .preview-container', showVersionPreview); - $(parent.document.querySelector('#content')).on('click.revisions', '#app-sidebar .downloadVersion', showVersionPreview); + removeVersionSidebarEvents: function() { + $(parent.document.querySelector('#content')).off('click.revisions'); + $(parent.document.querySelector('#content')).off('click.revisions'); + $(parent.document.querySelector('#content')).off('mousedown.revisions'); + }, - // Use mousedown event to overwrite behavior of the versions app - $(parent.document.querySelector('#content')).on('mousedown.revisions', '#app-sidebar .revertVersion', function(e) { - e.preventDefault(); - e.stopPropagation(); + showVersionPreview: function (e) { + e.preventDefault(); + documentsMain.UI.loadRevViewerContainer(); + var element = e.currentTarget.parentElement.parentElement; + if ($(e.currentTarget).hasClass('downloadVersion')) { + element = e.currentTarget.parentElement.parentElement.parentElement.parentElement; + } + var version = element.dataset.revision; + var fileId = documentsMain.fileId + '_' + version; + var title = documentsMain.fileName + ' - ' + version; + documentsMain.UI.showViewer( + fileId, title + ); - // close the viewer - documentsMain.onCloseViewer(); + // mark only current <li> as active + $(element.parentElement).find('li').removeClass('active'); + $(element).addClass('active'); + }, - documentsMain.WOPIPostMessage($('#loleafletframe')[0], 'Host_VersionRestore', {Status: 'Pre_Restore'}); - - var version = e.currentTarget.parentElement.parentElement.dataset.revision; - var restoreUrl = OC.linkToRemoteBase('dav') + '/versions/' + parent.OC.getCurrentUser().uid - + '/versions/' + documentsMain.originalFileId + '/' + version; - - documentsMain.$deferredVersionRestoreAck = $.Deferred(); - jQuery.when(documentsMain.$deferredVersionRestoreAck). - done(function(args) { - // restore selected version - $.ajax({ - type: 'MOVE', - url: restoreUrl, - headers: { - Destination: OC.linkToRemote('dav') + '/versions/' + parent.OC.getCurrentUser().uid + '/restore/target' - }, - success: function(response) { - if (response.status === 'error') { - documentsMain.UI.notify(t('richdocuments', 'Failed to revert the document to older version')); - } + restoreVersion: function(e) { + var self = this; + e.preventDefault(); + e.stopPropagation(); - // load the file again, it should get reverted now - window.location = $(parent.document.querySelector('#richdocumentsframe')).attr('src'); - documentsMain.overlay.documentOverlay('hide'); + documentsMain.onCloseViewer(); - parent.OC.Apps.hideAppSidebar(); - }, - error: function() { - documentsMain.UI.notify(t('richdocuments', 'Failed to revert the document to older version')); - } - }); - }); + documentsMain.WOPIPostMessage($('#loleafletframe')[0], 'Host_VersionRestore', {Status: 'Pre_Restore'}); + + var version = e.currentTarget.parentElement.parentElement.dataset.revision; - // resolve the deferred object immediately if client doesn't support version states - if (!documentsMain.wopiClientFeatures || !documentsMain.wopiClientFeatures.VersionStates) { - documentsMain.$deferredVersionRestoreAck.resolve(); + documentsMain.$deferredVersionRestoreAck = $.Deferred(); + jQuery.when(documentsMain.$deferredVersionRestoreAck).done(function(args) { + var nextcloudVersion = parseInt(parent.oc_config.version.split('.')[0]); + if (nextcloudVersion < 15) { + self._restoreAjax(version); + } else { + self._restoreDAV(version) } }); + + // resolve the deferred object immediately if client doesn't support version states + if (!documentsMain.wopiClientFeatures || !documentsMain.wopiClientFeatures.VersionStates) { + documentsMain.$deferredVersionRestoreAck.resolve(); + } + + return false; }, - removeVersionSidebarEvents: function() { - $(parent.document.querySelector('#content')).off('click.revisions'); - $(parent.document.querySelector('#content')).off('click.revisions'); - $(parent.document.querySelector('#content')).off('mousedown.revisions'); + _restoreSuccess: 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 = $(parent.document.querySelector('#richdocumentsframe')).attr('src'); + documentsMain.overlay.documentOverlay('hide'); + parent.OC.Apps.hideAppSidebar(); + }, + + _restoreError: function() { + documentsMain.UI.notify(t('richdocuments', 'Failed to revert the document to older version')); + }, + + _restoreDAV: function(version) { + var restoreUrl = OC.linkToRemoteBase('dav') + '/versions/' + parent.OC.getCurrentUser().uid + + '/versions/' + documentsMain.originalFileId + '/' + version; + $.ajax({ + type: 'MOVE', + url: restoreUrl, + headers: { + Destination: OC.linkToRemote('dav') + '/versions/' + parent.OC.getCurrentUser().uid + '/restore/target' + }, + success: this._restoreSuccess, + error: this._restoreError + }); + }, + + _restoreAjax: function(version) { + var restoreUrl = OC.generateUrl('apps/files_versions/ajax/rollbackVersion.php?file={file}&revision={revision}', + { + file: documentsMain.fullPath, revision: version + }); + $.ajax({ + type: 'GET', + url: restoreUrl, + success: this._restoreSuccess, + error: this._restoreError + }); }, showEditor : function(title, fileId, action){ @@ -700,7 +725,7 @@ var documentsMain = { parent.document.title = documentsMain.UI.mainTitle; parent.postMessage('close', '*'); - this.removeVersionSidebarEvents(); + this.UI.removeVersionSidebarEvents(); }, onCloseViewer: function() { @@ -710,6 +735,7 @@ var documentsMain = { $('#revViewerContainer').remove(); documentsMain.isViewerMode = false; documentsMain.UI.revisionsStart = 0; + parent.$('#versionsTabView .active').removeClass('active'); $('#loleafletframe').focus(); }, |