diff --git a/CHANGELOG.md b/CHANGELOG.md index 5614318b..14ab8846 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ ### 🐞 Fixes - [#348](https://github.com/estruyf/vscode-front-matter/issues/348): Fix media dashboard breadcrumb when multiple page folders are in use +- [#358](https://github.com/estruyf/vscode-front-matter/issues/358): FIx for relative path of the public folder ## [7.3.4] - 2022-06-13 diff --git a/src/commands/Folders.ts b/src/commands/Folders.ts index 6380117b..5e9ccc04 100644 --- a/src/commands/Folders.ts +++ b/src/commands/Folders.ts @@ -27,7 +27,7 @@ export class Folders { */ public static async addMediaFolder(data?: {selectedFolder?: string}) { let wsFolder = Folders.getWorkspaceFolder(); - const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + let staticFolder = Folders.getStaticFolderRelativePath(); let startPath = ""; @@ -153,6 +153,25 @@ export class Folders { } } + /** + * Get the static folder its relative path + * @returns + */ + public static getStaticFolderRelativePath(): string | undefined { + let staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + + if (staticFolder && staticFolder.includes(WORKSPACE_PLACEHOLDER)) { + staticFolder = Folders.getAbsFilePath(staticFolder); + const wsFolder = Folders.getWorkspaceFolder(); + if (wsFolder) { + const relativePath = relative(parseWinPath(wsFolder.fsPath), parseWinPath(staticFolder)); + return relativePath; + } + } + + return staticFolder; + } + /** * Retrieve the folder path * @param folder diff --git a/src/helpers/DashboardSettings.ts b/src/helpers/DashboardSettings.ts index f6969beb..8ab0f120 100644 --- a/src/helpers/DashboardSettings.ts +++ b/src/helpers/DashboardSettings.ts @@ -2,8 +2,7 @@ import { basename, join } from "path"; import { workspace } from "vscode"; import { Folders } from "../commands/Folders"; import { Project } from "../commands/Project"; -import { Template } from "../commands/Template"; -import { CONTEXT, ExtensionState, SETTING_CONTENT_DRAFT_FIELD, SETTING_CONTENT_SORTING, SETTING_CONTENT_SORTING_DEFAULT, SETTING_CONTENT_STATIC_FOLDER, SETTING_DASHBOARD_OPENONSTART, SETTING_DATA_FILES, SETTING_DATA_FOLDERS, SETTING_DATA_TYPES, SETTING_FRAMEWORK_ID, SETTING_MEDIA_SORTING_DEFAULT, SETTING_CUSTOM_SCRIPTS, SETTING_TAXONOMY_CONTENT_TYPES, SETTING_CONTENT_SNIPPETS, SETTING_DATE_FORMAT, SETTING_DASHBOARD_CONTENT_TAGS, SETTING_MEDIA_SUPPORTED_MIMETYPES, SETTING_TAXONOMY_CUSTOM } from "../constants"; +import { CONTEXT, ExtensionState, SETTING_CONTENT_DRAFT_FIELD, SETTING_CONTENT_SORTING, SETTING_CONTENT_SORTING_DEFAULT, SETTING_DASHBOARD_OPENONSTART, SETTING_DATA_FILES, SETTING_DATA_FOLDERS, SETTING_DATA_TYPES, SETTING_FRAMEWORK_ID, SETTING_MEDIA_SORTING_DEFAULT, SETTING_CUSTOM_SCRIPTS, SETTING_TAXONOMY_CONTENT_TYPES, SETTING_CONTENT_SNIPPETS, SETTING_DATE_FORMAT, SETTING_DASHBOARD_CONTENT_TAGS, SETTING_MEDIA_SUPPORTED_MIMETYPES, SETTING_TAXONOMY_CUSTOM } from "../constants"; import { DashboardViewType, SortingOption, Settings as ISettings } from "../dashboardWebView/models"; import { CustomScript, DraftField, Snippets, SortingSetting, TaxonomyType } from "../models"; import { DataFile } from "../models/DataFile"; @@ -24,7 +23,7 @@ export class DashboardSettings { return { beta: ext.isBetaVersion(), wsFolder: wsFolder ? wsFolder.fsPath : '', - staticFolder: Settings.get(SETTING_CONTENT_STATIC_FOLDER), + staticFolder: Folders.getStaticFolderRelativePath(), initialized: isInitialized, tags: Settings.getTaxonomy(TaxonomyType.Tag), categories: Settings.getTaxonomy(TaxonomyType.Category), diff --git a/src/helpers/ImageHelper.ts b/src/helpers/ImageHelper.ts index 73c8be0a..84d19142 100644 --- a/src/helpers/ImageHelper.ts +++ b/src/helpers/ImageHelper.ts @@ -4,8 +4,6 @@ import { dirname, join } from "path"; import { Field } from '../models'; import { existsSync } from 'fs'; import { Folders } from '../commands/Folders'; -import { Settings } from './SettingsHelper'; -import { SETTING_CONTENT_STATIC_FOLDER } from '../constants'; import { parseWinPath } from './parseWinPath'; export class ImageHelper { @@ -51,7 +49,7 @@ export class ImageHelper { */ public static relToAbs(filePath: string, value: string) { const wsFolder = Folders.getWorkspaceFolder(); - const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + const staticFolder = Folders.getStaticFolderRelativePath(); const staticPath = join(parseWinPath(wsFolder?.fsPath || ""), staticFolder || "", value); const contentFolderPath = filePath ? join(dirname(filePath), value) : null; @@ -73,7 +71,7 @@ export class ImageHelper { */ public static absToRel(imgValue: string) { const wsFolder = Folders.getWorkspaceFolder(); - const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + const staticFolder = Folders.getStaticFolderRelativePath(); let relPath = imgValue || ""; if (imgValue) { diff --git a/src/helpers/MediaHelpers.ts b/src/helpers/MediaHelpers.ts index a1a3f1fd..3711cf58 100644 --- a/src/helpers/MediaHelpers.ts +++ b/src/helpers/MediaHelpers.ts @@ -1,7 +1,7 @@ import { decodeBase64, Extension, MediaLibrary, Notifications, parseWinPath, Settings, Sorting } from "."; import { Dashboard } from "../commands/Dashboard"; import { Folders } from "../commands/Folders"; -import { DEFAULT_CONTENT_TYPE, ExtensionState, HOME_PAGE_NAVIGATION_ID, SETTING_CONTENT_STATIC_FOLDER, SETTING_MEDIA_SUPPORTED_MIMETYPES } from "../constants"; +import { DEFAULT_CONTENT_TYPE, ExtensionState, HOME_PAGE_NAVIGATION_ID, SETTING_MEDIA_SUPPORTED_MIMETYPES } from "../constants"; import { SortingOption } from "../dashboardWebView/models"; import { MediaInfo, MediaPaths, SortOrder, SortType } from "../models"; import { basename, extname, join, parse, dirname, relative } from "path"; @@ -27,7 +27,7 @@ export class MediaHelpers { */ public static async getMedia(page: number = 0, requestedFolder: string = '', sort: SortingOption | null = null) { const wsFolder = Folders.getWorkspaceFolder(); - const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + const staticFolder = Folders.getStaticFolderRelativePath(); const contentFolders = Folders.get(); const viewData = Dashboard.viewData; let selectedFolder = requestedFolder; @@ -210,7 +210,7 @@ export class MediaHelpers { public static async saveFile({fileName, contents, folder}: { fileName: string; contents: string; folder: string | null }) { if (fileName && contents) { const wsFolder = Folders.getWorkspaceFolder(); - const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + const staticFolder = Folders.getStaticFolderRelativePath(); const wsPath = wsFolder ? wsFolder.fsPath : ""; let absFolderPath = join(wsPath, staticFolder || ""); diff --git a/src/listeners/dashboard/PagesListener.ts b/src/listeners/dashboard/PagesListener.ts index 765d8d17..a271f0c1 100644 --- a/src/listeners/dashboard/PagesListener.ts +++ b/src/listeners/dashboard/PagesListener.ts @@ -5,7 +5,7 @@ import { basename, dirname, join } from "path"; import { commands, FileSystemWatcher, RelativePattern, TextDocument, Uri, workspace } from "vscode"; import { Dashboard } from "../../commands/Dashboard"; import { Folders } from "../../commands/Folders"; -import { COMMAND_NAME, DefaultFields, ExtensionState, SETTING_CONTENT_STATIC_FOLDER, SETTING_SEO_DESCRIPTION_FIELD } from "../../constants"; +import { COMMAND_NAME, DefaultFields, ExtensionState, SETTING_SEO_DESCRIPTION_FIELD } from "../../constants"; import { DashboardCommand } from "../../dashboardWebView/DashboardCommand"; import { DashboardMessage } from "../../dashboardWebView/DashboardMessage"; import { Page } from "../../dashboardWebView/models"; @@ -267,7 +267,7 @@ export class PagesListener extends BaseListener { const modifiedField = ArticleHelper.getModifiedDateField(article) || null; const modifiedFieldValue = modifiedField && article?.data[modifiedField] ? DateHelper.tryParse(article?.data[modifiedField])?.getTime() : undefined; - const staticFolder = Settings.get(SETTING_CONTENT_STATIC_FOLDER); + const staticFolder = Folders.getStaticFolderRelativePath(); const page: Page = { ...article.data,