summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/releases/components/release_block.vue
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 21:09:08 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 21:09:08 +0000
commit866ca4e49ff74ffadf8e6f6ff663a168489c2aba (patch)
treecc3135b1bae11dbd1cb3a30cb547473ad89a5551 /app/assets/javascripts/releases/components/release_block.vue
parent26a50872e9da9509c52c70f74dc21698fec906db (diff)
downloadgitlab-ce-866ca4e49ff74ffadf8e6f6ff663a168489c2aba.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/releases/components/release_block.vue')
-rw-r--r--app/assets/javascripts/releases/components/release_block.vue120
1 files changed, 120 insertions, 0 deletions
diff --git a/app/assets/javascripts/releases/components/release_block.vue b/app/assets/javascripts/releases/components/release_block.vue
new file mode 100644
index 00000000000..e6bb5325120
--- /dev/null
+++ b/app/assets/javascripts/releases/components/release_block.vue
@@ -0,0 +1,120 @@
+<script>
+import _ from 'underscore';
+import $ from 'jquery';
+import { slugify } from '~/lib/utils/text_utility';
+import { getLocationHash } from '~/lib/utils/url_utility';
+import { scrollToElement } from '~/lib/utils/common_utils';
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
+import '~/behaviors/markdown/render_gfm';
+import EvidenceBlock from './evidence_block.vue';
+import ReleaseBlockAssets from './release_block_assets.vue';
+import ReleaseBlockFooter from './release_block_footer.vue';
+import ReleaseBlockHeader from './release_block_header.vue';
+import ReleaseBlockMetadata from './release_block_metadata.vue';
+import ReleaseBlockMilestoneInfo from './release_block_milestone_info.vue';
+
+export default {
+ name: 'ReleaseBlock',
+ components: {
+ EvidenceBlock,
+ ReleaseBlockAssets,
+ ReleaseBlockFooter,
+ ReleaseBlockHeader,
+ ReleaseBlockMetadata,
+ ReleaseBlockMilestoneInfo,
+ },
+ mixins: [glFeatureFlagsMixin()],
+ props: {
+ release: {
+ type: Object,
+ required: true,
+ default: () => ({}),
+ },
+ },
+ data() {
+ return {
+ isHighlighted: false,
+ };
+ },
+ computed: {
+ id() {
+ return slugify(this.release.tag_name);
+ },
+ assets() {
+ return this.release.assets || {};
+ },
+ hasEvidence() {
+ return Boolean(this.release.evidence_sha);
+ },
+ milestones() {
+ return this.release.milestones || [];
+ },
+ shouldShowEvidence() {
+ return this.glFeatures.releaseEvidenceCollection;
+ },
+ shouldShowFooter() {
+ return this.glFeatures.releaseIssueSummary;
+ },
+ shouldRenderAssets() {
+ return Boolean(
+ this.assets.links.length || (this.assets.sources && this.assets.sources.length),
+ );
+ },
+ shouldRenderReleaseMetaData() {
+ return !this.glFeatures.releaseIssueSummary;
+ },
+ shouldRenderMilestoneInfo() {
+ return Boolean(this.glFeatures.releaseIssueSummary && !_.isEmpty(this.release.milestones));
+ },
+ },
+
+ mounted() {
+ this.renderGFM();
+
+ const hash = getLocationHash();
+ if (hash && slugify(hash) === this.id) {
+ this.isHighlighted = true;
+ setTimeout(() => {
+ this.isHighlighted = false;
+ }, 2000);
+
+ scrollToElement(this.$el);
+ }
+ },
+ methods: {
+ renderGFM() {
+ $(this.$refs['gfm-content']).renderGFM();
+ },
+ },
+};
+</script>
+<template>
+ <div :id="id" :class="{ 'bg-line-target-blue': isHighlighted }" class="card release-block">
+ <release-block-header :release="release" />
+ <div class="card-body">
+ <div v-if="shouldRenderMilestoneInfo">
+ <release-block-milestone-info :milestones="milestones" />
+ <hr class="mb-3 mt-0" />
+ </div>
+
+ <release-block-metadata v-if="shouldRenderReleaseMetaData" :release="release" />
+ <release-block-assets v-if="shouldRenderAssets" :assets="assets" />
+ <evidence-block v-if="hasEvidence && shouldShowEvidence" :release="release" />
+
+ <div ref="gfm-content" class="card-text prepend-top-default">
+ <div v-html="release.description_html"></div>
+ </div>
+ </div>
+
+ <release-block-footer
+ v-if="shouldShowFooter"
+ class="card-footer"
+ :commit="release.commit"
+ :commit-path="release.commit_path"
+ :tag-name="release.tag_name"
+ :tag-path="release.tag_path"
+ :author="release.author"
+ :released-at="release.released_at"
+ />
+ </div>
+</template>