diff --git a/documents-webapp/src/main/webapp/js/DocumentsUtils.js b/documents-webapp/src/main/webapp/js/DocumentsUtils.js index 97a0eaf74d..f977744b8f 100644 --- a/documents-webapp/src/main/webapp/js/DocumentsUtils.js +++ b/documents-webapp/src/main/webapp/js/DocumentsUtils.js @@ -101,6 +101,20 @@ export function getEditorUrl(file, mode) { return url; } +export function openLink(url, target = '_blank') { + if (target === '_self') { + window.location.href = url; + return; + } + const link = document.createElement('a'); + link.href = url; + link.target = target; + link.style.display = 'none'; + document.body.appendChild(link); + link.click(); + link.remove(); +} + export function getViewType(appId) { return localStorage.getItem(`documents-stored-view-type-${appId}`) || 'listView'; } diff --git a/documents-webapp/src/main/webapp/vue-app/attachment/components/activity/ActivityAttachment.vue b/documents-webapp/src/main/webapp/vue-app/attachment/components/activity/ActivityAttachment.vue index 4a19e7ae23..6311149fda 100644 --- a/documents-webapp/src/main/webapp/vue-app/attachment/components/activity/ActivityAttachment.vue +++ b/documents-webapp/src/main/webapp/vue-app/attachment/components/activity/ActivityAttachment.vue @@ -298,7 +298,7 @@ export default { openFileInEditor(mode) { if (this.attachment && this.attachment.id) { const url = this.$documentsUtils.getEditorUrl(this.attachment,mode); - window.open(url, '_blank'); + this.$documentsUtils.openLink(url, '_blank'); } }, showInfo(event) { diff --git a/documents-webapp/src/main/webapp/vue-app/attachment/components/analytics/AnalyticsTableCellDocumentTitleValue.vue b/documents-webapp/src/main/webapp/vue-app/attachment/components/analytics/AnalyticsTableCellDocumentTitleValue.vue index 4932d85d7d..c6f1dcd593 100644 --- a/documents-webapp/src/main/webapp/vue-app/attachment/components/analytics/AnalyticsTableCellDocumentTitleValue.vue +++ b/documents-webapp/src/main/webapp/vue-app/attachment/components/analytics/AnalyticsTableCellDocumentTitleValue.vue @@ -122,7 +122,7 @@ export default { openFileInEditor(mode) { if (this.attachment && this.attachmentId) { const url = this.$documentsUtils.getEditorUrl(this.attachment,mode); - window.open(url,'_blank'); + this.$documentsUtils.openLink(url,'_blank'); } }, } diff --git a/documents-webapp/src/main/webapp/vue-app/attachment/components/attachment-document-creator/AttachmentCreateDocumentDrawer.vue b/documents-webapp/src/main/webapp/vue-app/attachment/components/attachment-document-creator/AttachmentCreateDocumentDrawer.vue index 87b9bb43a1..a760b25dc3 100644 --- a/documents-webapp/src/main/webapp/vue-app/attachment/components/attachment-document-creator/AttachmentCreateDocumentDrawer.vue +++ b/documents-webapp/src/main/webapp/vue-app/attachment/components/attachment-document-creator/AttachmentCreateDocumentDrawer.vue @@ -521,7 +521,7 @@ export default { this.$root.$emit('alert-message', this.$t('attachments.upload.success'), 'success'); this.resetNewDocInput(); if (openInEditor) { - window.open(`${eXo.env.portal.context}/${eXo.env.portal.portalName}/oeditor?docId=${doc.id}&backTo=${window.location.pathname}`, '_blank'); + this.$documentsUtils.openLink(`${eXo.env.portal.context}/${eXo.env.portal.portalName}/oeditor?docId=${doc.id}&backTo=${window.location.pathname}`, '_blank'); } // Return to the level-1 attachments drawer (attachment host) or simply // close the standalone drawer (drive host). diff --git a/documents-webapp/src/main/webapp/vue-app/attachment/components/attachments-upload-components/AttachmentItem.vue b/documents-webapp/src/main/webapp/vue-app/attachment/components/attachments-upload-components/AttachmentItem.vue index b8c547c96b..f8f58594a2 100644 --- a/documents-webapp/src/main/webapp/vue-app/attachment/components/attachments-upload-components/AttachmentItem.vue +++ b/documents-webapp/src/main/webapp/vue-app/attachment/components/attachments-upload-components/AttachmentItem.vue @@ -422,7 +422,7 @@ export default { openFileInEditor(mode) { if (this.attachment && this.attachment.id) { const url = this.$documentsUtils.getEditorUrl(this.attachment,mode); - window.open(url, '_blank'); + this.$documentsUtils.openLink(url, '_blank'); } }, openFile() { diff --git a/documents-webapp/src/main/webapp/vue-app/attachment/components/notes/NotesAttachmentItem.vue b/documents-webapp/src/main/webapp/vue-app/attachment/components/notes/NotesAttachmentItem.vue index 0f0e8c2ed9..4dec6f4a4c 100644 --- a/documents-webapp/src/main/webapp/vue-app/attachment/components/notes/NotesAttachmentItem.vue +++ b/documents-webapp/src/main/webapp/vue-app/attachment/components/notes/NotesAttachmentItem.vue @@ -272,7 +272,7 @@ export default { openFileInEditor(mode) { if (this.attachment && this.attachment.id) { const url = this.$documentsUtils.getEditorUrl(this.attachment,mode); - window.open(url, '_blank'); + this.$documentsUtils.openLink(url, '_blank'); } }, showInfo(event) { diff --git a/documents-webapp/src/main/webapp/vue-app/attachment/main.js b/documents-webapp/src/main/webapp/vue-app/attachment/main.js index 38807215d3..3e8183dcdc 100644 --- a/documents-webapp/src/main/webapp/vue-app/attachment/main.js +++ b/documents-webapp/src/main/webapp/vue-app/attachment/main.js @@ -105,11 +105,11 @@ export function init(entityId, entityType, defaultDrive, defaultFolder, spaceId) }, openInEditMode(file) { const fileId = file.sourceID ? file.sourceID : file.id; - window.open(`${eXo.env.portal.context}/${eXo.env.portal.metaPortalName}/oeditor?docId=${fileId}&backTo=${window.location.pathname}`, '_blank'); + this.$documentsUtils.openLink(`${eXo.env.portal.context}/${eXo.env.portal.metaPortalName}/oeditor?docId=${fileId}&backTo=${window.location.pathname}`, '_blank'); }, openInReadOnlyMode(file) { const fileId = file.sourceID ? file.sourceID : file.id; - window.open(`${eXo.env.portal.context}/${eXo.env.portal.metaPortalName}/oeditor?docId=${fileId}&mode=view&backTo=${window.location.pathname}`, '_blank'); + this.$documentsUtils.openLink(`${eXo.env.portal.context}/${eXo.env.portal.metaPortalName}/oeditor?docId=${fileId}&mode=view&backTo=${window.location.pathname}`, '_blank'); }, }, template: ``, diff --git a/documents-webapp/src/main/webapp/vue-app/document-info-drawer/components/DocumentInfoDrawer.vue b/documents-webapp/src/main/webapp/vue-app/document-info-drawer/components/DocumentInfoDrawer.vue index ff2a6f42b1..94e24212c9 100644 --- a/documents-webapp/src/main/webapp/vue-app/document-info-drawer/components/DocumentInfoDrawer.vue +++ b/documents-webapp/src/main/webapp/vue-app/document-info-drawer/components/DocumentInfoDrawer.vue @@ -570,7 +570,7 @@ export default { folderPath = `${eXo.env.portal.defaultPath}/dashboard/drive/${folderPath}`; } } - window.open(folderPath,'_self'); + this.$documentsUtils.openLink(folderPath,'_self'); }, openPreview() { if (this.file.folder) { @@ -609,7 +609,7 @@ export default { openFileInEditor(mode) { if (this.file && this.fileId) { const url = this.$documentsUtils.getEditorUrl(this.file,mode); - window.open(url,'_blank'); + this.$documentsUtils.openLink(url,'_blank'); } }, favoriteRemoved() { diff --git a/documents-webapp/src/main/webapp/vue-app/documents/components/DocumentsMain.vue b/documents-webapp/src/main/webapp/vue-app/documents/components/DocumentsMain.vue index 25ff4288f9..7d87ade57c 100644 --- a/documents-webapp/src/main/webapp/vue-app/documents/components/DocumentsMain.vue +++ b/documents-webapp/src/main/webapp/vue-app/documents/components/DocumentsMain.vue @@ -1751,7 +1751,7 @@ export default { openFileInEditor(attachment,mode,tab) { if (attachment && attachment.id) { const url = this.$documentsUtils.getEditorUrl(attachment,mode); - window.open(url,tab ? tab:'_blank'); + this.$documentsUtils.openLink(url,tab ? tab:'_blank'); } }, async dragFile(e){ diff --git a/documents-webapp/src/main/webapp/vue-app/documents/components/body/actions/DocumentActionItem.vue b/documents-webapp/src/main/webapp/vue-app/documents/components/body/actions/DocumentActionItem.vue index 236a560903..fefd568bcd 100644 --- a/documents-webapp/src/main/webapp/vue-app/documents/components/body/actions/DocumentActionItem.vue +++ b/documents-webapp/src/main/webapp/vue-app/documents/components/body/actions/DocumentActionItem.vue @@ -26,7 +26,9 @@ dense link class="ps-3" - @click.stop.prevent="handleClick"> + :href="href" + :target="href && target" + @click.stop="handleClick"> + :href="editLink" + target="_blank" />