mirror of
https://github.com/modrinth/code.git
synced 2026-08-28 18:45:15 +00:00
fix: add download attribute to fix JAR files saving as ZIP in Chromium (#6065)
* fix: add download attribute to fix JAR files saving as ZIP in Chromium - JAR files were downloading with a `.zip` extension in Chromium-based browsers (Chrome, Edge, Arc, Brave, Opera, Vivaldi) - Root cause: JAR files are ZIP archives internally, so Chromium sniffs the `Content-Type` as `application/zip` and overrides the filename extension when no `download` attribute is present - Fix: add `download="<filename>"` to all file download `<a>` tags so the browser uses the original filename from the API * fix: add download attribute to remaining download links Missed in initial pass: changelog page button, versions overflow menu, settings/versions overflow menu. Also adds `download` prop to Button and OverflowMenu to support dropdown link items. Adds missing `getPrimaryFile` definition in changelog.vue. --------- Co-authored-by: Mr_chank <180248271+chank-op@users.noreply.github.com> Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
This commit is contained in:
co-authored by
Mr_chank
Prospector
parent
e9eb98f97e
commit
02a7774722
@@ -12,7 +12,12 @@
|
||||
</p>
|
||||
</div>
|
||||
<ButtonStyled color="brand">
|
||||
<a :href="downloadUrl" class="min-w-0" @click="emit('onDownload')">
|
||||
<a
|
||||
:href="downloadUrl"
|
||||
:download="primaryFilename"
|
||||
class="min-w-0"
|
||||
@click="emit('onDownload')"
|
||||
>
|
||||
<DownloadIcon aria-hidden="true" /> Download
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
@@ -42,12 +47,17 @@ const props = defineProps<{
|
||||
decorateDownloadUrl?: (url: string) => string
|
||||
}>()
|
||||
|
||||
const primaryFile = computed<VersionFile>(
|
||||
() => props.version.files.find((x) => x.primary) || props.version.files[0],
|
||||
)
|
||||
|
||||
const downloadUrl = computed(() => {
|
||||
const primary: VersionFile = props.version.files.find((x) => x.primary) || props.version.files[0]
|
||||
const raw = primary.url
|
||||
const raw = primaryFile.value.url
|
||||
return props.decorateDownloadUrl ? props.decorateDownloadUrl(raw) : raw
|
||||
})
|
||||
|
||||
const primaryFilename = computed(() => primaryFile.value.filename)
|
||||
|
||||
const emit = defineEmits<{
|
||||
onDownload: []
|
||||
onNavigate: [url: string]
|
||||
|
||||
Reference in New Issue
Block a user