From e8d2c2579383897a1dd7f9debd359abe8ae8373d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 20 Jul 2021 09:55:51 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-1-stable-ee --- .../repository/components/blob_button_group.vue | 108 +++++++++++++++ .../repository/components/blob_content_viewer.vue | 67 +++++++-- .../repository/components/blob_edit.vue | 47 +++++++ .../repository/components/blob_header_edit.vue | 47 ------- .../repository/components/blob_replace.vue | 75 ---------- .../components/blob_viewers/download_viewer.vue | 51 +++++++ .../components/blob_viewers/empty_viewer.vue | 3 + .../repository/components/blob_viewers/index.js | 27 ++++ .../components/blob_viewers/text_viewer.vue | 25 ++++ .../repository/components/delete_blob_modal.vue | 151 +++++++++++++++++++++ .../repository/components/table/index.vue | 2 +- .../repository/components/table/row.vue | 2 + .../repository/components/tree_content.vue | 25 +++- .../repository/components/upload_blob_modal.vue | 12 +- app/assets/javascripts/repository/constants.js | 8 +- .../repository/queries/blob_info.query.graphql | 5 +- .../repository/queries/commit.fragment.graphql | 1 + 17 files changed, 508 insertions(+), 148 deletions(-) create mode 100644 app/assets/javascripts/repository/components/blob_button_group.vue create mode 100644 app/assets/javascripts/repository/components/blob_edit.vue delete mode 100644 app/assets/javascripts/repository/components/blob_header_edit.vue delete mode 100644 app/assets/javascripts/repository/components/blob_replace.vue create mode 100644 app/assets/javascripts/repository/components/blob_viewers/download_viewer.vue create mode 100644 app/assets/javascripts/repository/components/blob_viewers/empty_viewer.vue create mode 100644 app/assets/javascripts/repository/components/blob_viewers/index.js create mode 100644 app/assets/javascripts/repository/components/blob_viewers/text_viewer.vue create mode 100644 app/assets/javascripts/repository/components/delete_blob_modal.vue (limited to 'app/assets/javascripts/repository') diff --git a/app/assets/javascripts/repository/components/blob_button_group.vue b/app/assets/javascripts/repository/components/blob_button_group.vue new file mode 100644 index 00000000000..273825b996a --- /dev/null +++ b/app/assets/javascripts/repository/components/blob_button_group.vue @@ -0,0 +1,108 @@ + + + diff --git a/app/assets/javascripts/repository/components/blob_content_viewer.vue b/app/assets/javascripts/repository/components/blob_content_viewer.vue index 7fbf331d585..09ac60c94c7 100644 --- a/app/assets/javascripts/repository/components/blob_content_viewer.vue +++ b/app/assets/javascripts/repository/components/blob_content_viewer.vue @@ -5,16 +5,19 @@ import BlobContent from '~/blob/components/blob_content.vue'; import BlobHeader from '~/blob/components/blob_header.vue'; import { SIMPLE_BLOB_VIEWER, RICH_BLOB_VIEWER } from '~/blob/components/constants'; import createFlash from '~/flash'; +import axios from '~/lib/utils/axios_utils'; +import { isLoggedIn } from '~/lib/utils/common_utils'; import { __ } from '~/locale'; import blobInfoQuery from '../queries/blob_info.query.graphql'; -import BlobHeaderEdit from './blob_header_edit.vue'; -import BlobReplace from './blob_replace.vue'; +import BlobButtonGroup from './blob_button_group.vue'; +import BlobEdit from './blob_edit.vue'; +import { loadViewer, viewerProps } from './blob_viewers'; export default { components: { BlobHeader, - BlobHeaderEdit, - BlobReplace, + BlobEdit, + BlobButtonGroup, BlobContent, GlLoadingIcon, }, @@ -31,9 +34,12 @@ export default { this.switchViewer( this.hasRichViewer && !window.location.hash ? RICH_BLOB_VIEWER : SIMPLE_BLOB_VIEWER, ); + if (this.hasRichViewer && !this.blobViewer) { + this.loadLegacyViewer(); + } }, error() { - createFlash({ message: __('An error occurred while loading the file. Please try again.') }); + this.displayError(); }, }, }, @@ -54,9 +60,16 @@ export default { }, data() { return { + legacyRichViewer: null, + isBinary: false, + isLoadingLegacyViewer: false, activeViewerType: SIMPLE_BLOB_VIEWER, project: { + userPermissions: { + pushCode: false, + }, repository: { + empty: true, blobs: { nodes: [ { @@ -77,10 +90,10 @@ export default { canLock: false, isLocked: false, lockLink: '', - canModifyBlob: true, forkPath: '', simpleViewer: {}, richViewer: null, + webPath: '', }, ], }, @@ -90,10 +103,10 @@ export default { }, computed: { isLoggedIn() { - return Boolean(gon.current_user_id); + return isLoggedIn(); }, isLoading() { - return this.$apollo.queries.project.loading; + return this.$apollo.queries.project.loading || this.isLoadingLegacyViewer; }, blobInfo() { const nodes = this.project?.repository?.blobs?.nodes; @@ -110,8 +123,30 @@ export default { hasRenderError() { return Boolean(this.viewer.renderError); }, + blobViewer() { + const { fileType } = this.viewer; + return loadViewer(fileType); + }, + viewerProps() { + const { fileType } = this.viewer; + return viewerProps(fileType, this.blobInfo); + }, }, methods: { + loadLegacyViewer() { + this.isLoadingLegacyViewer = true; + axios + .get(`${this.blobInfo.webPath}?format=json&viewer=rich`) + .then(({ data: { html, binary } }) => { + this.legacyRichViewer = html; + this.isBinary = binary; + this.isLoadingLegacyViewer = false; + }) + .catch(() => this.displayError()); + }, + displayError() { + createFlash({ message: __('An error occurred while loading the file. Please try again.') }); + }, switchViewer(newViewer) { this.activeViewerType = newViewer || SIMPLE_BLOB_VIEWER; }, @@ -121,36 +156,42 @@ export default { diff --git a/app/assets/javascripts/repository/components/blob_edit.vue b/app/assets/javascripts/repository/components/blob_edit.vue new file mode 100644 index 00000000000..3d97ebe89e4 --- /dev/null +++ b/app/assets/javascripts/repository/components/blob_edit.vue @@ -0,0 +1,47 @@ + + + diff --git a/app/assets/javascripts/repository/components/blob_header_edit.vue b/app/assets/javascripts/repository/components/blob_header_edit.vue deleted file mode 100644 index 3d97ebe89e4..00000000000 --- a/app/assets/javascripts/repository/components/blob_header_edit.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/app/assets/javascripts/repository/components/blob_replace.vue b/app/assets/javascripts/repository/components/blob_replace.vue deleted file mode 100644 index 91d7811eb6d..00000000000 --- a/app/assets/javascripts/repository/components/blob_replace.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - diff --git a/app/assets/javascripts/repository/components/blob_viewers/download_viewer.vue b/app/assets/javascripts/repository/components/blob_viewers/download_viewer.vue new file mode 100644 index 00000000000..48fa33eb558 --- /dev/null +++ b/app/assets/javascripts/repository/components/blob_viewers/download_viewer.vue @@ -0,0 +1,51 @@ + + + diff --git a/app/assets/javascripts/repository/components/blob_viewers/empty_viewer.vue b/app/assets/javascripts/repository/components/blob_viewers/empty_viewer.vue new file mode 100644 index 00000000000..53210cbcc93 --- /dev/null +++ b/app/assets/javascripts/repository/components/blob_viewers/empty_viewer.vue @@ -0,0 +1,3 @@ + diff --git a/app/assets/javascripts/repository/components/blob_viewers/index.js b/app/assets/javascripts/repository/components/blob_viewers/index.js new file mode 100644 index 00000000000..4e16b16041f --- /dev/null +++ b/app/assets/javascripts/repository/components/blob_viewers/index.js @@ -0,0 +1,27 @@ +export const loadViewer = (type) => { + switch (type) { + case 'empty': + return () => import(/* webpackChunkName: 'blob_empty_viewer' */ './empty_viewer.vue'); + case 'text': + return () => import(/* webpackChunkName: 'blob_text_viewer' */ './text_viewer.vue'); + case 'download': + return () => import(/* webpackChunkName: 'blob_download_viewer' */ './download_viewer.vue'); + default: + return null; + } +}; + +export const viewerProps = (type, blob) => { + return { + text: { + content: blob.rawTextBlob, + fileName: blob.name, + readOnly: true, + }, + download: { + fileName: blob.name, + filePath: blob.rawPath, + fileSize: blob.rawSize, + }, + }[type]; +}; diff --git a/app/assets/javascripts/repository/components/blob_viewers/text_viewer.vue b/app/assets/javascripts/repository/components/blob_viewers/text_viewer.vue new file mode 100644 index 00000000000..57fc979a56e --- /dev/null +++ b/app/assets/javascripts/repository/components/blob_viewers/text_viewer.vue @@ -0,0 +1,25 @@ + + diff --git a/app/assets/javascripts/repository/components/delete_blob_modal.vue b/app/assets/javascripts/repository/components/delete_blob_modal.vue new file mode 100644 index 00000000000..6599d99d7bd --- /dev/null +++ b/app/assets/javascripts/repository/components/delete_blob_modal.vue @@ -0,0 +1,151 @@ + + + diff --git a/app/assets/javascripts/repository/components/table/index.vue b/app/assets/javascripts/repository/components/table/index.vue index ca5711de49c..69eefc807d7 100644 --- a/app/assets/javascripts/repository/components/table/index.vue +++ b/app/assets/javascripts/repository/components/table/index.vue @@ -70,7 +70,7 @@ export default { ); }, showParentRow() { - return !this.isLoading && ['', '/'].indexOf(this.path) === -1; + return ['', '/'].indexOf(this.path) === -1; }, }, methods: { diff --git a/app/assets/javascripts/repository/components/table/row.vue b/app/assets/javascripts/repository/components/table/row.vue index 62f863db871..82c18d13a6a 100644 --- a/app/assets/javascripts/repository/components/table/row.vue +++ b/app/assets/javascripts/repository/components/table/row.vue @@ -186,6 +186,8 @@ export default { :is="linkComponent" ref="link" v-gl-hover-load="handlePreload" + v-gl-tooltip:tooltip-container + :title="fullPath" :to="routerLinkTo" :href="url" :class="{ diff --git a/app/assets/javascripts/repository/components/tree_content.vue b/app/assets/javascripts/repository/components/tree_content.vue index 794a8a85cc5..c861fb8dd06 100644 --- a/app/assets/javascripts/repository/components/tree_content.vue +++ b/app/assets/javascripts/repository/components/tree_content.vue @@ -1,8 +1,9 @@