diff options
Diffstat (limited to 'app/assets/javascripts/repository/components')
6 files changed, 49 insertions, 37 deletions
diff --git a/app/assets/javascripts/repository/components/blob_content_viewer.vue b/app/assets/javascripts/repository/components/blob_content_viewer.vue index 7ad9fb56972..2cc5a8a79d2 100644 --- a/app/assets/javascripts/repository/components/blob_content_viewer.vue +++ b/app/assets/javascripts/repository/components/blob_content_viewer.vue @@ -1,5 +1,5 @@ <script> -import { GlLoadingIcon } from '@gitlab/ui'; +import { GlLoadingIcon, GlButton } from '@gitlab/ui'; import { uniqueId } from 'lodash'; import BlobContent from '~/blob/components/blob_content.vue'; import BlobHeader from '~/blob/components/blob_header.vue'; @@ -17,12 +17,16 @@ import ForkSuggestion from './fork_suggestion.vue'; import { loadViewer, viewerProps } from './blob_viewers'; export default { + i18n: { + pipelineEditor: __('Pipeline Editor'), + }, components: { BlobHeader, BlobEdit, BlobButtonGroup, BlobContent, GlLoadingIcon, + GlButton, ForkSuggestion, }, mixins: [getRefMixin], @@ -105,6 +109,7 @@ export default { rawPath: '', externalStorageUrl: '', replacePath: '', + pipelineEditorPath: '', deletePath: '', simpleViewer: {}, richViewer: null, @@ -242,6 +247,18 @@ export default { :needs-to-fork="showForkSuggestion" @edit="editBlob" /> + + <gl-button + v-if="blobInfo.pipelineEditorPath" + class="gl-mr-3" + category="secondary" + variant="confirm" + data-testid="pipeline-editor" + :href="blobInfo.pipelineEditorPath" + > + {{ $options.i18n.pipelineEditor }} + </gl-button> + <blob-button-group v-if="isLoggedIn" :path="path" diff --git a/app/assets/javascripts/repository/components/delete_blob_modal.vue b/app/assets/javascripts/repository/components/delete_blob_modal.vue index a307b7c0b8a..4a8cedb60b4 100644 --- a/app/assets/javascripts/repository/components/delete_blob_modal.vue +++ b/app/assets/javascripts/repository/components/delete_blob_modal.vue @@ -116,15 +116,14 @@ export default { ], }; }, - /* eslint-disable dot-notation */ showCreateNewMrToggle() { - return this.canPushCode && this.form.fields['branch_name'].value !== this.originalBranch; + return this.canPushCode && this.form.fields.branch_name.value !== this.originalBranch; }, formCompleted() { - return this.form.fields['commit_message'].value && this.form.fields['branch_name'].value; + return this.form.fields.commit_message.value && this.form.fields.branch_name.value; }, showHint() { - const splitCommitMessageByLineBreak = this.form.fields['commit_message'].value + const splitCommitMessageByLineBreak = this.form.fields.commit_message.value .trim() .split('\n'); const [firstLine, ...otherLines] = splitCommitMessageByLineBreak; @@ -136,7 +135,7 @@ export default { otherLines.some((text) => text.length > COMMIT_MESSAGE_BODY_MAX_LENGTH); return ( - !this.form.fields['commit_message'].feedback && + !this.form.fields.commit_message.feedback && (hasFirstLineExceedMaxLength || hasOtherLineExceedMaxLength) ); }, @@ -173,9 +172,7 @@ export default { <input type="hidden" name="_method" value="delete" /> <input :value="$options.csrf.token" type="hidden" name="authenticity_token" /> <template v-if="emptyRepo"> - <!-- Once "empty_repo_upload_experiment" is made available, will need to add class 'js-branch-name' - Follow-up issue: https://gitlab.com/gitlab-org/gitlab/-/issues/335721 --> - <input type="hidden" name="branch_name" :value="originalBranch" /> + <input type="hidden" name="branch_name" :value="originalBranch" class="js-branch-name" /> </template> <template v-else> <input type="hidden" name="original_branch" :value="originalBranch" /> diff --git a/app/assets/javascripts/repository/components/last_commit.vue b/app/assets/javascripts/repository/components/last_commit.vue index 5c713796bd6..62066973ee6 100644 --- a/app/assets/javascripts/repository/components/last_commit.vue +++ b/app/assets/javascripts/repository/components/last_commit.vue @@ -1,5 +1,12 @@ <script> -import { GlTooltipDirective, GlLink, GlButton, GlButtonGroup, GlLoadingIcon } from '@gitlab/ui'; +import { + GlTooltipDirective, + GlLink, + GlButton, + GlButtonGroup, + GlLoadingIcon, + GlSafeHtmlDirective, +} from '@gitlab/ui'; import defaultAvatarUrl from 'images/no_avatar.png'; import pathLastCommitQuery from 'shared_queries/repository/path_last_commit.query.graphql'; import { sprintf, s__ } from '~/locale'; @@ -23,6 +30,7 @@ export default { }, directives: { GlTooltip: GlTooltipDirective, + SafeHtml: GlSafeHtmlDirective, }, mixins: [getRefMixin], apollo: { @@ -96,6 +104,9 @@ export default { }, }, defaultAvatarUrl, + safeHtmlConfig: { + ADD_TAGS: ['gl-emoji'], + }, }; </script> @@ -121,10 +132,10 @@ export default { <div class="commit-detail flex-list"> <div class="commit-content qa-commit-content"> <gl-link + v-safe-html:[$options.safeHtmlConfig]="commit.titleHtml" :href="commit.webPath" :class="{ 'font-italic': !commit.message }" class="commit-row-message item-title" - v-html="commit.titleHtml /* eslint-disable-line vue/no-v-html */" /> <gl-button v-if="commit.descriptionHtml" @@ -150,15 +161,15 @@ export default { </div> <pre v-if="commitDescription" + v-safe-html:[$options.safeHtmlConfig]="commitDescription" :class="{ 'd-block': showDescription }" class="commit-row-description gl-mb-3" - v-html="commitDescription /* eslint-disable-line vue/no-v-html */" ></pre> </div> <div class="commit-actions flex-row"> <div v-if="commit.signatureHtml" - v-html="commit.signatureHtml /* eslint-disable-line vue/no-v-html */" + v-safe-html:[$options.safeHtmlConfig]="commit.signatureHtml" ></div> <div v-if="commit.pipeline" class="ci-status-link"> <gl-link diff --git a/app/assets/javascripts/repository/components/table/row.vue b/app/assets/javascripts/repository/components/table/row.vue index 5010d60f374..bd06c064ab7 100644 --- a/app/assets/javascripts/repository/components/table/row.vue +++ b/app/assets/javascripts/repository/components/table/row.vue @@ -11,7 +11,6 @@ import { GlIntersectionObserver, } from '@gitlab/ui'; import { escapeRegExp } from 'lodash'; -import filesQuery from 'shared_queries/repository/files.query.graphql'; import paginatedTreeQuery from 'shared_queries/repository/paginated_tree.query.graphql'; import { escapeFileUrl } from '~/lib/utils/url_utility'; import { TREE_PAGE_SIZE } from '~/repository/constants'; @@ -178,8 +177,7 @@ export default { return this.isFolder ? this.loadFolder() : this.loadBlob(); }, loadFolder() { - const query = this.glFeatures.paginatedTreeGraphqlQuery ? paginatedTreeQuery : filesQuery; - this.apolloQuery(query, { + this.apolloQuery(paginatedTreeQuery, { projectPath: this.projectPath, ref: this.ref, path: this.path, diff --git a/app/assets/javascripts/repository/components/tree_content.vue b/app/assets/javascripts/repository/components/tree_content.vue index 16dfe3cfb14..ffe8d5531f8 100644 --- a/app/assets/javascripts/repository/components/tree_content.vue +++ b/app/assets/javascripts/repository/components/tree_content.vue @@ -1,5 +1,4 @@ <script> -import filesQuery from 'shared_queries/repository/files.query.graphql'; import paginatedTreeQuery from 'shared_queries/repository/paginated_tree.query.graphql'; import createFlash from '~/flash'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; @@ -72,9 +71,6 @@ export default { hasShowMore() { return !this.clickedShowMore && this.pageLimitReached; }, - paginatedTreeEnabled() { - return this.glFeatures.paginatedTreeGraphqlQuery; - }, }, watch: { @@ -101,7 +97,7 @@ export default { return this.$apollo .query({ - query: this.paginatedTreeEnabled ? paginatedTreeQuery : filesQuery, + query: paginatedTreeQuery, variables: { projectPath: this.projectPath, ref: this.ref, @@ -114,20 +110,19 @@ export default { if (data.errors) throw data.errors; if (!data?.project?.repository || originalPath !== (this.path || '/')) return; - const pageInfo = this.paginatedTreeEnabled - ? data.project.repository.paginatedTree.pageInfo - : this.hasNextPage(data.project.repository.tree); + const { + project: { + repository: { + paginatedTree: { pageInfo }, + }, + }, + } = data; this.isLoadingFiles = false; this.entries = Object.keys(this.entries).reduce( (acc, key) => ({ ...acc, - [key]: this.normalizeData( - key, - this.paginatedTreeEnabled - ? data.project.repository.paginatedTree.nodes[0][key] - : data.project.repository.tree[key].edges, - ), + [key]: this.normalizeData(key, data.project.repository.paginatedTree.nodes[0][key]), }), {}, ); @@ -149,9 +144,7 @@ export default { }); }, normalizeData(key, data) { - return this.entries[key].concat( - this.paginatedTreeEnabled ? data.nodes : data.map(({ node }) => node), - ); + return this.entries[key].concat(data.nodes); }, hasNextPage(data) { return [] diff --git a/app/assets/javascripts/repository/components/upload_blob_modal.vue b/app/assets/javascripts/repository/components/upload_blob_modal.vue index 0199b893453..11e5b5608cb 100644 --- a/app/assets/javascripts/repository/components/upload_blob_modal.vue +++ b/app/assets/javascripts/repository/components/upload_blob_modal.vue @@ -15,7 +15,6 @@ import { ContentTypeMultipartFormData } from '~/lib/utils/headers'; import { numberToHumanSize } from '~/lib/utils/number_utils'; import { visitUrl, joinPaths } from '~/lib/utils/url_utility'; import { __ } from '~/locale'; -import { trackFileUploadEvent } from '~/projects/upload_file_experiment_tracking'; import UploadDropzone from '~/vue_shared/components/upload_dropzone/upload_dropzone.vue'; import { SECONDARY_OPTIONS_TEXT, @@ -165,9 +164,6 @@ export default { }, }) .then((response) => { - if (!this.replacePath) { - trackFileUploadEvent('click_upload_modal_form_submit'); - } visitUrl(response.data.filePath); }) .catch(() => { |