Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
c1fec38d
Commit
c1fec38d
authored
Jan 07, 2020
by
Martin Wortschack
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'a-little-release-cleaning' into 'master'
Refactor release block See merge request gitlab-org/gitlab!22321
parents
16761366
620f4db1
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
308 additions
and
164 deletions
+308
-164
app/assets/javascripts/releases/list/components/release_block.vue
...ts/javascripts/releases/list/components/release_block.vue
+19
-164
app/assets/javascripts/releases/list/components/release_block_assets.vue
...scripts/releases/list/components/release_block_assets.vue
+65
-0
app/assets/javascripts/releases/list/components/release_block_author.vue
...scripts/releases/list/components/release_block_author.vue
+42
-0
app/assets/javascripts/releases/list/components/release_block_header.vue
...scripts/releases/list/components/release_block_header.vue
+47
-0
app/assets/javascripts/releases/list/components/release_block_metadata.vue
...ripts/releases/list/components/release_block_metadata.vue
+84
-0
app/assets/javascripts/releases/list/components/release_block_milestones.vue
...pts/releases/list/components/release_block_milestones.vue
+51
-0
No files found.
app/assets/javascripts/releases/list/components/release_block.vue
View file @
c1fec38d
<
script
>
/* eslint-disable @gitlab/vue-i18n/no-bare-strings */
import
_
from
'
underscore
'
;
import
{
GlTooltipDirective
,
GlLink
,
GlBadge
}
from
'
@gitlab/ui
'
;
import
Icon
from
'
~/vue_shared/components/icon.vue
'
;
import
UserAvatarLink
from
'
~/vue_shared/components/user_avatar/user_avatar_link.vue
'
;
import
timeagoMixin
from
'
~/vue_shared/mixins/timeago
'
;
import
{
__
,
n__
,
sprintf
}
from
'
~/locale
'
;
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
ReleaseBlockFooter
from
'
./release_block_footer.vue
'
;
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
,
GlLink
,
GlBadge
,
Icon
,
UserAvatarLink
,
ReleaseBlockAssets
,
ReleaseBlockFooter
,
ReleaseBlockHeader
,
ReleaseBlockMetadata
,
ReleaseBlockMilestoneInfo
,
},
directives
:
{
GlTooltip
:
GlTooltipDirective
,
},
mixins
:
[
timeagoMixin
,
glFeatureFlagsMixin
()],
mixins
:
[
glFeatureFlagsMixin
()],
props
:
{
release
:
{
type
:
Object
,
...
...
@@ -45,45 +38,14 @@ export default {
id
()
{
return
slugify
(
this
.
release
.
tag_name
);
},
releasedTimeAgo
()
{
return
sprintf
(
__
(
'
released %{time}
'
),
{
time
:
this
.
timeFormatted
(
this
.
release
.
released_at
),
});
},
userImageAltDescription
()
{
return
this
.
author
&&
this
.
author
.
username
?
sprintf
(
__
(
"
%{username}'s avatar
"
),
{
username
:
this
.
author
.
username
})
:
null
;
},
commit
()
{
return
this
.
release
.
commit
||
{};
},
commitUrl
()
{
return
this
.
release
.
commit_path
;
},
tagUrl
()
{
return
this
.
release
.
tag_path
;
},
assets
()
{
return
this
.
release
.
assets
||
{};
},
author
()
{
return
this
.
release
.
author
||
{};
},
hasAuthor
()
{
return
!
_
.
isEmpty
(
this
.
author
);
},
hasEvidence
()
{
return
Boolean
(
this
.
release
.
evidence_sha
);
},
shouldRenderMilestones
()
{
return
!
_
.
isEmpty
(
this
.
release
.
milestones
);
},
labelText
()
{
return
n__
(
'
Milestone
'
,
'
Milestones
'
,
this
.
release
.
milestones
.
length
);
},
shouldShowEditButton
()
{
return
Boolean
(
this
.
release
.
_links
&&
this
.
release
.
_links
.
edit_url
);
milestones
()
{
return
this
.
release
.
milestones
||
[];
},
shouldShowEvidence
()
{
return
this
.
glFeatures
.
releaseEvidenceCollection
;
...
...
@@ -91,6 +53,11 @@ export default {
shouldShowFooter
()
{
return
this
.
glFeatures
.
releaseIssueSummary
;
},
shouldRenderAssets
()
{
return
Boolean
(
this
.
assets
.
links
.
length
||
(
this
.
assets
.
sources
&&
this
.
assets
.
sources
.
length
),
);
},
shouldRenderReleaseMetaData
()
{
return
!
this
.
glFeatures
.
releaseIssueSummary
;
},
...
...
@@ -113,127 +80,15 @@ export default {
</
script
>
<
template
>
<div
:id=
"id"
:class=
"
{ 'bg-line-target-blue': isHighlighted }" class="card release-block">
<div
class=
"card-header d-flex align-items-center bg-white pr-0"
>
<h2
class=
"card-title my-2 mr-auto gl-font-size-20"
>
{{
release
.
name
}}
<gl-badge
v-if=
"release.upcoming_release"
variant=
"warning"
class=
"align-middle"
>
{{
__
(
'
Upcoming Release
'
)
}}
</gl-badge>
</h2>
<gl-link
v-if=
"shouldShowEditButton"
v-gl-tooltip
class=
"btn btn-default append-right-10 js-edit-button ml-2"
:title=
"__('Edit this release')"
:href=
"release._links.edit_url"
>
<icon
name=
"pencil"
/>
</gl-link>
</div>
<release-block-header
:release=
"release"
/>
<div
class=
"card-body"
>
<div
v-if=
"shouldRenderMilestoneInfo"
>
<release-block-milestone-info
:milestones=
"
release.
milestones"
/>
<release-block-milestone-info
:milestones=
"milestones"
/>
<hr
class=
"mb-3 mt-0"
/>
</div>
<div
v-if=
"shouldRenderReleaseMetaData"
class=
"card-subtitle d-flex flex-wrap text-secondary"
>
<div
class=
"append-right-8"
>
<icon
name=
"commit"
class=
"align-middle"
/>
<gl-link
v-if=
"commitUrl"
v-gl-tooltip
.
bottom
:title=
"commit.title"
:href=
"commitUrl"
>
{{
commit
.
short_id
}}
</gl-link>
<span
v-else
v-gl-tooltip
.
bottom
:title=
"commit.title"
>
{{
commit
.
short_id
}}
</span>
</div>
<div
class=
"append-right-8"
>
<icon
name=
"tag"
class=
"align-middle"
/>
<gl-link
v-if=
"tagUrl"
v-gl-tooltip
.
bottom
:title=
"__('Tag')"
:href=
"tagUrl"
>
{{
release
.
tag_name
}}
</gl-link>
<span
v-else
v-gl-tooltip
.
bottom
:title=
"__('Tag')"
>
{{
release
.
tag_name
}}
</span>
</div>
<template
v-if=
"shouldRenderMilestones"
>
<div
class=
"js-milestone-list-label"
>
<icon
name=
"flag"
class=
"align-middle"
/>
<span
class=
"js-label-text"
>
{{
labelText
}}
</span>
</div>
<template
v-for=
"(milestone, index) in release.milestones"
>
<gl-link
:key=
"milestone.id"
v-gl-tooltip
:title=
"milestone.description"
:href=
"milestone.web_url"
class=
"append-right-4 prepend-left-4 js-milestone-link"
>
{{
milestone
.
title
}}
</gl-link>
<template
v-if=
"index !== release.milestones.length - 1"
>
•
</
template
>
</template>
</template>
<div
class=
"append-right-4"
>
•
<span
v-gl-tooltip
.
bottom
:title=
"tooltipTitle(release.released_at)"
>
{{ releasedTimeAgo }}
</span>
</div>
<div
v-if=
"hasAuthor"
class=
"d-flex"
>
by
<user-avatar-link
class=
"prepend-left-4"
:link-href=
"author.web_url"
:img-src=
"author.avatar_url"
:img-alt=
"userImageAltDescription"
:tooltip-text=
"author.username"
/>
</div>
</div>
<div
v-if=
"assets.links.length || (assets.sources && assets.sources.length)"
class=
"card-text prepend-top-default"
>
<b>
{{ __('Assets') }}
<span
class=
"js-assets-count badge badge-pill"
>
{{ assets.count }}
</span>
</b>
<ul
v-if=
"assets.links.length"
class=
"pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list"
>
<li
v-for=
"link in assets.links"
:key=
"link.name"
class=
"append-bottom-8"
>
<gl-link
v-gl-tooltip
.
bottom
:title=
"__('Download asset')"
:href=
"link.url"
>
<icon
name=
"package"
class=
"align-middle append-right-4 align-text-bottom"
/>
{{ link.name }}
<span
v-if=
"link.external"
>
{{ __('(external source)') }}
</span>
</gl-link>
</li>
</ul>
<div
v-if=
"assets.sources && assets.sources.length"
class=
"dropdown"
>
<button
type=
"button"
class=
"btn btn-link"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
<icon
name=
"doc-code"
class=
"align-top append-right-4"
/>
{{ __('Source code') }}
<icon
name=
"arrow-down"
/>
</button>
<div
class=
"js-sources-dropdown dropdown-menu"
>
<li
v-for=
"asset in assets.sources"
:key=
"asset.url"
>
<gl-link
:href=
"asset.url"
>
{{ __('Download') }} {{ asset.format }}
</gl-link>
</li>
</div>
</div>
</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
class=
"card-text prepend-top-default"
>
...
...
app/assets/javascripts/releases/list/components/release_block_assets.vue
0 → 100644
View file @
c1fec38d
<
script
>
import
{
GlTooltipDirective
,
GlLink
}
from
'
@gitlab/ui
'
;
import
Icon
from
'
~/vue_shared/components/icon.vue
'
;
export
default
{
name
:
'
ReleaseBlockAssets
'
,
components
:
{
GlLink
,
Icon
,
},
directives
:
{
GlTooltip
:
GlTooltipDirective
,
},
props
:
{
assets
:
{
type
:
Object
,
required
:
true
,
},
},
computed
:
{
hasAssets
()
{
return
Boolean
(
this
.
assets
.
count
);
},
},
};
</
script
>
<
template
>
<div
class=
"card-text prepend-top-default"
>
<b>
{{
__
(
'
Assets
'
)
}}
<span
class=
"js-assets-count badge badge-pill"
>
{{
assets
.
count
}}
</span>
</b>
<ul
v-if=
"assets.links.length"
class=
"pl-0 mb-0 prepend-top-8 list-unstyled js-assets-list"
>
<li
v-for=
"link in assets.links"
:key=
"link.name"
class=
"append-bottom-8"
>
<gl-link
v-gl-tooltip
.
bottom
:title=
"__('Download asset')"
:href=
"link.url"
>
<icon
name=
"package"
class=
"align-middle append-right-4 align-text-bottom"
/>
{{
link
.
name
}}
<span
v-if=
"link.external"
>
{{
__
(
'
(external source)
'
)
}}
</span>
</gl-link>
</li>
</ul>
<div
v-if=
"hasAssets"
class=
"dropdown"
>
<button
type=
"button"
class=
"btn btn-link"
data-toggle=
"dropdown"
aria-haspopup=
"true"
aria-expanded=
"false"
>
<icon
name=
"doc-code"
class=
"align-top append-right-4"
/>
{{
__
(
'
Source code
'
)
}}
<icon
name=
"arrow-down"
/>
</button>
<div
class=
"js-sources-dropdown dropdown-menu"
>
<li
v-for=
"asset in assets.sources"
:key=
"asset.url"
>
<gl-link
:href=
"asset.url"
>
{{
__
(
'
Download
'
)
}}
{{
asset
.
format
}}
</gl-link>
</li>
</div>
</div>
</div>
</
template
>
app/assets/javascripts/releases/list/components/release_block_author.vue
0 → 100644
View file @
c1fec38d
<
script
>
import
{
__
,
sprintf
}
from
'
~/locale
'
;
import
{
GlSprintf
}
from
'
@gitlab/ui
'
;
import
UserAvatarLink
from
'
~/vue_shared/components/user_avatar/user_avatar_link.vue
'
;
export
default
{
name
:
'
ReleaseBlockAuthor
'
,
components
:
{
GlSprintf
,
UserAvatarLink
,
},
props
:
{
author
:
{
type
:
Object
,
required
:
true
,
},
},
computed
:
{
userImageAltDescription
()
{
return
this
.
author
&&
this
.
author
.
username
?
sprintf
(
__
(
"
%{username}'s avatar
"
),
{
username
:
this
.
author
.
username
})
:
null
;
},
},
};
</
script
>
<
template
>
<div
class=
"d-flex"
>
<gl-sprintf
message=
"by %
{user}">
<template
#user
>
<user-avatar-link
class=
"prepend-left-4"
:link-href=
"author.web_url"
:img-src=
"author.avatar_url"
:img-alt=
"userImageAltDescription"
:tooltip-text=
"author.username"
/>
</
template
>
</gl-sprintf>
</div>
</template>
app/assets/javascripts/releases/list/components/release_block_header.vue
0 → 100644
View file @
c1fec38d
<
script
>
import
{
GlTooltipDirective
,
GlLink
,
GlBadge
}
from
'
@gitlab/ui
'
;
import
Icon
from
'
~/vue_shared/components/icon.vue
'
;
export
default
{
name
:
'
ReleaseBlockHeader
'
,
components
:
{
GlLink
,
GlBadge
,
Icon
,
},
directives
:
{
GlTooltip
:
GlTooltipDirective
,
},
props
:
{
release
:
{
type
:
Object
,
required
:
true
,
},
},
computed
:
{
shouldShowEditButton
()
{
return
Boolean
(
this
.
release
.
_links
&&
this
.
release
.
_links
.
edit_url
);
},
},
};
</
script
>
<
template
>
<div
class=
"card-header d-flex align-items-center bg-white pr-0"
>
<h2
class=
"card-title my-2 mr-auto gl-font-size-20"
>
{{
release
.
name
}}
<gl-badge
v-if=
"release.upcoming_release"
variant=
"warning"
class=
"align-middle"
>
{{
__
(
'
Upcoming Release
'
)
}}
</gl-badge>
</h2>
<gl-link
v-if=
"shouldShowEditButton"
v-gl-tooltip
class=
"btn btn-default append-right-10 js-edit-button ml-2"
:title=
"__('Edit this release')"
:href=
"release._links.edit_url"
>
<icon
name=
"pencil"
/>
</gl-link>
</div>
</
template
>
app/assets/javascripts/releases/list/components/release_block_metadata.vue
0 → 100644
View file @
c1fec38d
<
script
>
import
{
GlTooltipDirective
,
GlLink
}
from
'
@gitlab/ui
'
;
import
{
__
,
sprintf
}
from
'
~/locale
'
;
import
Icon
from
'
~/vue_shared/components/icon.vue
'
;
import
timeagoMixin
from
'
~/vue_shared/mixins/timeago
'
;
import
ReleaseBlockAuthor
from
'
./release_block_author.vue
'
;
import
ReleaseBlockMilestones
from
'
./release_block_milestones.vue
'
;
export
default
{
name
:
'
ReleaseBlockMetadata
'
,
components
:
{
Icon
,
GlLink
,
ReleaseBlockAuthor
,
ReleaseBlockMilestones
,
},
directives
:
{
GlTooltip
:
GlTooltipDirective
,
},
mixins
:
[
timeagoMixin
],
props
:
{
release
:
{
type
:
Object
,
required
:
true
,
},
},
computed
:
{
author
()
{
return
this
.
release
.
author
;
},
commit
()
{
return
this
.
release
.
commit
||
{};
},
commitUrl
()
{
return
this
.
release
.
commit_path
;
},
hasAuthor
()
{
return
Boolean
(
this
.
author
);
},
releasedTimeAgo
()
{
return
sprintf
(
__
(
'
released %{time}
'
),
{
time
:
this
.
timeFormatted
(
this
.
release
.
released_at
),
});
},
shouldRenderMilestones
()
{
return
Boolean
(
this
.
release
.
milestones
?.
length
);
},
tagUrl
()
{
return
this
.
release
.
tag_path
;
},
},
};
</
script
>
<
template
>
<div
class=
"card-subtitle d-flex flex-wrap text-secondary"
>
<div
class=
"append-right-8"
>
<icon
name=
"commit"
class=
"align-middle"
/>
<gl-link
v-if=
"commitUrl"
v-gl-tooltip
.
bottom
:title=
"commit.title"
:href=
"commitUrl"
>
{{
commit
.
short_id
}}
</gl-link>
<span
v-else
v-gl-tooltip
.
bottom
:title=
"commit.title"
>
{{
commit
.
short_id
}}
</span>
</div>
<div
class=
"append-right-8"
>
<icon
name=
"tag"
class=
"align-middle"
/>
<gl-link
v-if=
"tagUrl"
v-gl-tooltip
.
bottom
:title=
"__('Tag')"
:href=
"tagUrl"
>
{{
release
.
tag_name
}}
</gl-link>
<span
v-else
v-gl-tooltip
.
bottom
:title=
"__('Tag')"
>
{{
release
.
tag_name
}}
</span>
</div>
<release-block-milestones
v-if=
"shouldRenderMilestones"
:milestones=
"release.milestones"
/>
<div
class=
"append-right-4"
>
•
<span
v-gl-tooltip
.
bottom
:title=
"tooltipTitle(release.released_at)"
>
{{
releasedTimeAgo
}}
</span>
</div>
<release-block-author
v-if=
"hasAuthor"
:author=
"author"
/>
</div>
</
template
>
app/assets/javascripts/releases/list/components/release_block_milestones.vue
0 → 100644
View file @
c1fec38d
<
script
>
import
{
GlTooltipDirective
,
GlLink
}
from
'
@gitlab/ui
'
;
import
{
n__
}
from
'
~/locale
'
;
import
Icon
from
'
~/vue_shared/components/icon.vue
'
;
export
default
{
name
:
'
ReleaseBlockMilestones
'
,
components
:
{
GlLink
,
Icon
,
},
directives
:
{
GlTooltip
:
GlTooltipDirective
,
},
props
:
{
milestones
:
{
type
:
Array
,
required
:
true
,
},
},
computed
:
{
labelText
()
{
return
n__
(
'
Milestone
'
,
'
Milestones
'
,
this
.
milestones
.
length
);
},
},
};
</
script
>
<
template
>
<div>
<div
class=
"js-milestone-list-label"
>
<icon
name=
"flag"
class=
"align-middle"
/>
<span
class=
"js-label-text"
>
{{
labelText
}}
</span>
</div>
<template
v-for=
"(milestone, index) in milestones"
>
<gl-link
:key=
"milestone.id"
v-gl-tooltip
:title=
"milestone.description"
:href=
"milestone.web_url"
class=
"mx-1 js-milestone-link"
>
{{
milestone
.
title
}}
</gl-link>
<template
v-if=
"index !== milestones.length - 1"
>
•
</
template
>
</template>
</div>
</template>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment