From 710ef136b48cf67d037294038d082b755cf33a8f Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Wed, 12 Feb 2025 14:53:56 +0100 Subject: [PATCH] Fix: improve media folder parsing on Windows and update path handling in various modules --- CHANGELOG.md | 1 + src/commands/Folders.ts | 6 ++++-- src/helpers/FrameworkDetector.ts | 4 ++-- src/helpers/MediaHelpers.ts | 2 +- src/helpers/processPathPlaceholders.ts | 3 ++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58a1d30b..84cf0355 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ### 🐞 Fixes +- Fix for media folder parsing on Windows - [#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 diff --git a/src/commands/Folders.ts b/src/commands/Folders.ts index 0aaf250b..8e6be394 100644 --- a/src/commands/Folders.ts +++ b/src/commands/Folders.ts @@ -219,7 +219,9 @@ export class Folders { : Folders.getAbsFilePath(assetFolder); const wsFolder = Folders.getWorkspaceFolder(); if (wsFolder) { - const relativePath = relative(parseWinPath(wsFolder.fsPath), parseWinPath(assetFolder)); + const relativePath = parseWinPath( + relative(parseWinPath(wsFolder.fsPath), parseWinPath(assetFolder)) + ); return relativePath === '' ? '/' : relativePath; } } @@ -648,7 +650,7 @@ export class Folders { const uniqueFolders = [...new Set(folders)]; const relativeFolderPaths = uniqueFolders.map((folder) => - relative(parseWinPath(wsFolder.fsPath), folder) + parseWinPath(relative(parseWinPath(wsFolder.fsPath), folder)) ); Logger.verbose('Folders:getContentFolders:end'); diff --git a/src/helpers/FrameworkDetector.ts b/src/helpers/FrameworkDetector.ts index 51972743..ac2ab623 100644 --- a/src/helpers/FrameworkDetector.ts +++ b/src/helpers/FrameworkDetector.ts @@ -137,7 +137,7 @@ export class FrameworkDetector { const assetDir = dirname(absAssetPath); const fileName = parse(absAssetPath); - relAssetPath = relative(fileDir, assetDir); + relAssetPath = parseWinPath(relative(fileDir, assetDir)); relAssetPath = join(relAssetPath, `${fileName.name}${fileName.ext}`); } // Support for HEXO image folder @@ -197,7 +197,7 @@ export class FrameworkDetector { const assetDir = dirname(absAssetPath); const fileName = parse(absAssetPath); - let relAssetPath = relative(fileDir, assetDir); + let relAssetPath = parseWinPath(relative(fileDir, assetDir)); relAssetPath = join(relAssetPath, `${fileName.name}${fileName.ext}`); return parseWinPath(relAssetPath); } diff --git a/src/helpers/MediaHelpers.ts b/src/helpers/MediaHelpers.ts index 3d39f456..db8a2036 100644 --- a/src/helpers/MediaHelpers.ts +++ b/src/helpers/MediaHelpers.ts @@ -422,7 +422,7 @@ export class MediaHelpers { // If the image exists in a content folder, the relative path needs to be used if (existsInContent) { - const relImgPath = relative(fileDir, imgDir); + const relImgPath = parseWinPath(relative(fileDir, imgDir)); relPath = join(relImgPath, basename(relPath)); diff --git a/src/helpers/processPathPlaceholders.ts b/src/helpers/processPathPlaceholders.ts index d7bda25f..93a51bbc 100644 --- a/src/helpers/processPathPlaceholders.ts +++ b/src/helpers/processPathPlaceholders.ts @@ -1,5 +1,6 @@ import { dirname, relative } from 'path'; import { ContentFolder } from '../models'; +import { parseWinPath } from './parseWinPath'; export const processPathPlaceholders = ( value: string, @@ -11,7 +12,7 @@ export const processPathPlaceholders = ( const relPathToken = '{{pathToken.relPath}}'; if (value.includes(relPathToken) && contentFolder?.path) { const dirName = dirname(filePath); - const relPath = relative(contentFolder.path, dirName); + const relPath = parseWinPath(relative(contentFolder.path, dirName)); value = value.replace(relPathToken, relPath); }