From 482cbc3bf6bda692c59d7a2308394510c186d726 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Thu, 6 Feb 2025 11:40:22 +0100 Subject: [PATCH] Issue: [[&mediaUrl]] placeholder in Media snippets is not relative #913 --- CHANGELOG.md | 1 + src/dashboardWebView/components/Media/Item.tsx | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7daf38e..58a1d30b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### 🐞 Fixes - [#909](https://github.com/estruyf/vscode-front-matter/issues/909): Schema fix for the view modes +- [#913](https://github.com/estruyf/vscode-front-matter/issues/913): Fix for relative media paths in page bundles - [#914](https://github.com/estruyf/vscode-front-matter/issues/914): Fix sanitizing of default filenames with an `_` in it ## [10.7.0] - 2024-12-31 - [Release notes](https://beta.frontmatter.codes/updates/v10.7.0) diff --git a/src/dashboardWebView/components/Media/Item.tsx b/src/dashboardWebView/components/Media/Item.tsx index 1f480035..8a7c1e8c 100644 --- a/src/dashboardWebView/components/Media/Item.tsx +++ b/src/dashboardWebView/components/Media/Item.tsx @@ -7,7 +7,7 @@ import { PlusIcon, VideoCameraIcon, } from '@heroicons/react/24/outline'; -import { basename } from 'path'; +import { basename, parse } from 'path'; import * as React from 'react'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; @@ -55,8 +55,17 @@ export const Item: React.FunctionComponent = ({ const { mediaFolder, mediaDetails, isAudio, isImage, isVideo } = useMediaInfo(media); const relPath = useMemo(() => { + if (viewData?.data?.pageBundle && viewData?.data?.filePath) { + const articlePath = viewData?.data?.filePath; + const articleDir = parse(parseWinPath(articlePath)).dir; + + const mediaPath = parseWinPath(media.fsPath); + if (mediaPath.startsWith(articleDir)) { + return getRelPath(media.fsPath, undefined, articleDir); + } + } return getRelPath(media.fsPath, settings?.staticFolder, settings?.wsFolder); - }, [media.fsPath, settings?.staticFolder, settings?.wsFolder]); + }, [media.fsPath, settings?.staticFolder, settings?.wsFolder, viewData?.data?.pageBundle, viewData?.data?.filePath]); const hasViewData = useMemo(() => { return viewData?.data?.filePath !== undefined;