diff --git a/apps/frontend/src/pages/[type]/[id]/changelog.vue b/apps/frontend/src/pages/[type]/[id]/changelog.vue index f5f34b6f66..cd85b5cac2 100644 --- a/apps/frontend/src/pages/[type]/[id]/changelog.vue +++ b/apps/frontend/src/pages/[type]/[id]/changelog.vue @@ -57,6 +57,7 @@ @@ -231,6 +232,10 @@ watch( { immediate: true }, ) +function getPrimaryFile(version) { + return version.files.find((x) => x.primary) || version.files[0] +} + function createDownloadUrl(version) { return createProjectDownloadUrl(getPrimaryFile(version).url, { reason: cdnDownloadReason.value, diff --git a/apps/frontend/src/pages/[type]/[id]/settings/versions.vue b/apps/frontend/src/pages/[type]/[id]/settings/versions.vue index 7176020d39..4d1e11ebca 100644 --- a/apps/frontend/src/pages/[type]/[id]/settings/versions.vue +++ b/apps/frontend/src/pages/[type]/[id]/settings/versions.vue @@ -111,6 +111,7 @@ color: 'primary', hoverFilled: true, link: createDownloadUrl(version), + download: getPrimaryFile(version).filename, action: () => { emit('onDownload') }, diff --git a/apps/frontend/src/pages/[type]/[id]/version/[version].vue b/apps/frontend/src/pages/[type]/[id]/version/[version].vue index 52fdc553a0..68a10f6822 100644 --- a/apps/frontend/src/pages/[type]/[id]/version/[version].vue +++ b/apps/frontend/src/pages/[type]/[id]/version/[version].vue @@ -140,6 +140,7 @@ @@ -307,6 +308,7 @@ :href="decorateDownloadUrl(file.url)" class="raised-button" :title="`Download ${file.filename}`" + :download="file.filename" tabindex="0" > diff --git a/apps/frontend/src/pages/[type]/[id]/versions.vue b/apps/frontend/src/pages/[type]/[id]/versions.vue index 1694947736..75996265aa 100644 --- a/apps/frontend/src/pages/[type]/[id]/versions.vue +++ b/apps/frontend/src/pages/[type]/[id]/versions.vue @@ -47,6 +47,7 @@ { emit('onDownload') }, diff --git a/packages/ui/src/components/base/Button.vue b/packages/ui/src/components/base/Button.vue index 22f8b4cf55..48416b4f51 100644 --- a/packages/ui/src/components/base/Button.vue +++ b/packages/ui/src/components/base/Button.vue @@ -11,6 +11,10 @@ const props = defineProps({ type: Boolean, default: false, }, + download: { + type: String, + default: null, + }, action: { type: Function, default: null, @@ -106,6 +110,7 @@ const classes = computed(() => { class="btn" :class="classes" :href="disabled ? undefined : link" + :download="download || undefined" :target="external ? '_blank' : '_self'" @click=" (event) => { diff --git a/packages/ui/src/components/base/OverflowMenu.vue b/packages/ui/src/components/base/OverflowMenu.vue index f0949a3a9a..92db08c3cf 100644 --- a/packages/ui/src/components/base/OverflowMenu.vue +++ b/packages/ui/src/components/base/OverflowMenu.vue @@ -36,6 +36,7 @@ : undefined " :link="option.link ? option.link : undefined" + :download="option.download ? option.download : undefined" :external="option.external ? option.external : false" :disabled="option.disabled" @click=" @@ -76,6 +77,7 @@ interface Item extends BaseOption { icon?: Component action?: (event?: MouseEvent) => void link?: string + download?: string external?: boolean color?: | 'primary' diff --git a/packages/ui/src/components/version/VersionSummary.vue b/packages/ui/src/components/version/VersionSummary.vue index a14e0ac028..8e26a8ea1c 100644 --- a/packages/ui/src/components/version/VersionSummary.vue +++ b/packages/ui/src/components/version/VersionSummary.vue @@ -12,7 +12,12 @@