diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 0376db8b..f33fa30f 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -1334,7 +1334,7 @@ function Compose({ params.quote_approval_policy = quoteApprovalPolicy; } if ( - supports('@mastodon/edit-media-attributes') || + supports('@mastodon') || supports('@gotosocial/edit-media-attributes') ) { params.media_attributes = mediaAttachments.map( diff --git a/src/components/media-attachment.jsx b/src/components/media-attachment.jsx index 6b884d14..11e56760 100644 --- a/src/components/media-attachment.jsx +++ b/src/components/media-attachment.jsx @@ -38,7 +38,7 @@ function MediaAttachment({ const { i18n, t } = useLingui(); const [uiState, setUIState] = useState('default'); const supportsEdit = - supports('@mastodon/edit-media-attributes') || + supports('@mastodon') || supports('@gotosocial/edit-media-attributes'); const { type, id, file } = attachment; const url = useMemo( diff --git a/src/data/features.json b/src/data/features.json index 722ab1d1..32884f9c 100644 --- a/src/data/features.json +++ b/src/data/features.json @@ -1,5 +1,4 @@ { - "@mastodon/edit-media-attributes": ">=4.1", "@mastodon/list-exclusive": ">=4.2", "@gotosocial/list-exclusive": ">=0.17", "@gotosocial/edit-media-attributes": ">=0.18", diff --git a/src/utils/supports.js b/src/utils/supports.js index 1ea47ad0..3fac68b9 100644 --- a/src/utils/supports.js +++ b/src/utils/supports.js @@ -31,6 +31,7 @@ const platformFeatures = { const supportsCache = {}; const semverExtract = /^\d+\.\d+(\.\d+)?/; +const atSoftwareSlashMatch = /^@([a-z]+)\//i; function supports(feature) { try { @@ -49,11 +50,18 @@ function supports(feature) { return (supportsCache[key] = platformFeatures[feature].test(version)); } + const featureMatch = feature.match(atSoftwareSlashMatch); + if (!featureMatch) { + // Only software match, e.g. supports('@mastodon') + const software = feature.replace(/^@/, ''); + return (supportsCache[key] = softwareName === software); + } + const range = features[feature]; if (!range) return false; // '@mastodon/blah' => 'mastodon' - const featureSoftware = feature.match(/^@([a-z]+)\//)[1]; + const featureSoftware = featureMatch[1]; const doesSoftwareMatch = featureSoftware === softwareName.toLowerCase(); let satisfiesRange = satisfies(version, range, {