feat(media): support external https image urls for entities
Allow entities to use full https:// URLs as their image path Validate external URLs to prevent http://, data:, or credentials Update API responses and frontend components to handle external sources
This commit is contained in:
@@ -178,7 +178,7 @@ export interface PokemonImage extends EntityImage {
|
||||
version: string;
|
||||
variant: string;
|
||||
description: string;
|
||||
source?: 'sprite' | 'upload';
|
||||
source?: 'sprite' | 'upload' | 'external';
|
||||
}
|
||||
|
||||
export interface EditInfo {
|
||||
|
||||
@@ -371,7 +371,7 @@ function pokemonImageAlt() {
|
||||
if (!pokemon.value?.image) {
|
||||
return '';
|
||||
}
|
||||
return pokemon.value.image.source === 'upload'
|
||||
return pokemon.value.image.source === 'upload' || pokemon.value.image.source === 'external'
|
||||
? t('media.imageAlt', { name: pokemon.value.name })
|
||||
: t('pages.pokemon.imageAlt', { name: pokemon.value.name, variant: pokemon.value.image.variant });
|
||||
}
|
||||
@@ -380,7 +380,13 @@ function pokemonImageLabel() {
|
||||
if (!pokemon.value?.image) {
|
||||
return '';
|
||||
}
|
||||
return pokemon.value.image.source === 'upload' ? t('media.uploadedImage') : `${pokemon.value.image.version} - ${pokemon.value.image.variant}`;
|
||||
if (pokemon.value.image.source === 'upload') {
|
||||
return t('media.uploadedImage');
|
||||
}
|
||||
if (pokemon.value.image.source === 'external') {
|
||||
return t('media.image');
|
||||
}
|
||||
return `${pokemon.value.image.version} - ${pokemon.value.image.variant}`;
|
||||
}
|
||||
|
||||
function openImageModal() {
|
||||
|
||||
@@ -586,12 +586,17 @@ function pokemonImageLabel(image: PokemonImage) {
|
||||
if (image.source === 'upload') {
|
||||
return t('media.uploadedImage');
|
||||
}
|
||||
if (image.source === 'external') {
|
||||
return t('media.image');
|
||||
}
|
||||
return `${image.version} - ${image.variant}`;
|
||||
}
|
||||
|
||||
function pokemonImageAlt(image: PokemonImage) {
|
||||
const name = pokemonForm.value.name.trim() || (pokemonForm.value.id.trim() ? `#${pokemonForm.value.id.trim()}` : t('pages.pokemon.title'));
|
||||
return image.source === 'upload' ? t('media.imageAlt', { name }) : t('pages.pokemon.imageAlt', { name, variant: image.variant });
|
||||
return image.source === 'upload' || image.source === 'external'
|
||||
? t('media.imageAlt', { name })
|
||||
: t('pages.pokemon.imageAlt', { name, variant: image.variant });
|
||||
}
|
||||
|
||||
function selectPokemonImage(image: PokemonImage) {
|
||||
|
||||
Reference in New Issue
Block a user