diff --git a/package.json b/package.json index a62cbc67..17232b2e 100644 --- a/package.json +++ b/package.json @@ -97,19 +97,6 @@ "markdownDescription": "Specify if you want to automatically update the modified date of your article/page. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.content.autoupdatedate)", "scope": "Content" }, - "frontMatter.content.supportedFileTypes": { - "type": "array", - "default": [ - "md", - "mdx", - "markdown" - ], - "markdownDescription": "Specify the file types that you want to use in Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.content.supportedfiletypes)", - "items": { - "type": "string" - }, - "scope": "Content" - }, "frontMatter.content.defaultFileType": { "type": "string", "default": "md", @@ -294,6 +281,19 @@ }, "scope": "Content" }, + "frontMatter.content.supportedFileTypes": { + "type": "array", + "default": [ + "md", + "mdx", + "markdown" + ], + "markdownDescription": "Specify the file types that you want to use in Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.content.supportedfiletypes)", + "items": { + "type": "string" + }, + "scope": "Content" + }, "frontMatter.content.wysiwyg": { "type": "boolean", "default": true, @@ -530,6 +530,24 @@ "default": null, "markdownDescription": "Specify the command you want to use to start your static site generator or framework. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.framework.startcommand)" }, + "frontMatter.global.notifications": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "info", + "warning", + "error" + ] + }, + "default": [ + "info", + "warning", + "error" + ], + "markdownDescription": "Specifies the notifications you want to see. By default, all notifications types will be shown. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.global.notifications)", + "scope": "Templates" + }, "frontMatter.media.defaultSorting": { "type": "string", "default": "", @@ -949,24 +967,6 @@ "default": "yyyy-MM-dd", "markdownDescription": "Specify the prefix you want to add for your new article filenames. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.templates.prefix)", "scope": "Templates" - }, - "frontMatter.global.notifications": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "info", - "warning", - "error" - ] - }, - "default": [ - "info", - "warning", - "error" - ], - "markdownDescription": "Specifies the notifications you want to see. By default, all notifications types will be shown. [Check in the docs](https://frontmatter.codes/docs/settings#frontmatter.global.notifications)", - "scope": "Templates" } } }, @@ -976,137 +976,6 @@ "title": "Authenticate", "category": "Front matter" }, - { - "command": "frontMatter.collapseSections", - "title": "Collapse sections", - "category": "Front matter", - "icon": { - "light": "assets/icons/close-light.svg", - "dark": "assets/icons/close-dark.svg" - } - }, - { - "command": "frontMatter.createTemplate", - "title": "Create a template from current file", - "category": "Front matter" - }, - { - "command": "frontMatter.createCategory", - "title": "Create category", - "category": "Front matter" - }, - { - "command": "frontMatter.createTag", - "title": "Create tag", - "category": "Front matter" - }, - { - "command": "frontMatter.exportTaxonomy", - "title": "Export all tags & categories to your settings", - "category": "Front matter" - }, - { - "command": "frontMatter.createFromTemplate", - "title": "Front Matter: New article from template" - }, - { - "command": "frontMatter.registerFolder", - "title": "Front Matter: Register folder" - }, - { - "command": "frontMatter.unregisterFolder", - "title": "Front Matter: Unregister folder" - }, - { - "command": "frontMatter.generateSlug", - "title": "Generate slug based on content title", - "category": "Front matter" - }, - { - "command": "frontMatter.init", - "title": "Initialize project", - "category": "Front matter" - }, - { - "command": "frontMatter.insertCategories", - "title": "Insert categories", - "category": "Front matter" - }, - { - "command": "frontMatter.insertImage", - "title": "Insert image into your content", - "category": "Front matter", - "icon": { - "dark": "/assets/icons/media-dark.svg", - "light": "/assets/icons/media-light.svg" - } - }, - { - "command": "frontMatter.insertTags", - "title": "Insert tags", - "category": "Front matter" - }, - { - "command": "frontMatter.createContent", - "title": "Create new content from defined content type or template", - "category": "Front matter" - }, - { - "command": "frontMatter.dashboard", - "title": "Open dashboard", - "category": "Front matter", - "icon": { - "dark": "/assets/icons/frontmatter-small-dark.svg", - "light": "/assets/icons/frontmatter-small-light.svg" - } - }, - { - "command": "frontMatter.dashboard.media", - "title": "Open media dashboard", - "category": "Front matter", - "icon": { - "dark": "/assets/icons/frontmatter-small-dark.svg", - "light": "/assets/icons/frontmatter-small-light.svg" - } - }, - { - "command": "frontMatter.dashboard.data", - "title": "Open data dashboard", - "category": "Front matter", - "icon": { - "dark": "/assets/icons/frontmatter-small-dark.svg", - "light": "/assets/icons/frontmatter-small-light.svg" - } - }, - { - "command": "frontMatter.dashboard.close", - "title": "Close dashboard", - "category": "Front matter", - "icon": { - "dark": "/assets/icons/frontmatter-small-teal.svg", - "light": "/assets/icons/frontmatter-small-teal.svg" - } - }, - { - "command": "frontMatter.preview", - "title": "Preview content", - "category": "Front matter" - }, - { - "command": "frontMatter.promoteSettings", - "title": "Promote settings from local to team level", - "category": "Front matter" - }, - { - "command": "frontMatter.remap", - "title": "Remap or remove tag/category in all articles", - "category": "Front matter" - }, - { - "command": "frontMatter.setLastModifiedDate", - "title": "Set lastmod date", - "category": "Front matter" - }, { "command": "frontMatter.markup.bold", "title": "Bold", @@ -1117,21 +986,12 @@ } }, { - "command": "frontMatter.markup.italic", - "title": "Italic", + "command": "frontMatter.dashboard.close", + "title": "Close dashboard", "category": "Front matter", "icon": { - "light": "assets/icons/italic-light.svg", - "dark": "assets/icons/italic-dark.svg" - } - }, - { - "command": "frontMatter.markup.strikethrough", - "title": "Strikethrough", - "category": "Front matter", - "icon": { - "light": "assets/icons/strikethrough-light.svg", - "dark": "assets/icons/strikethrough-dark.svg" + "dark": "/assets/icons/frontmatter-small-teal.svg", + "light": "/assets/icons/frontmatter-small-teal.svg" } }, { @@ -1161,6 +1021,62 @@ "dark": "assets/icons/blockquote-dark.svg" } }, + { + "command": "frontMatter.collapseSections", + "title": "Collapse sections", + "category": "Front matter", + "icon": { + "light": "assets/icons/close-light.svg", + "dark": "assets/icons/close-dark.svg" + } + }, + { + "command": "frontMatter.createTemplate", + "title": "Create a template from current file", + "category": "Front matter" + }, + { + "command": "frontMatter.createCategory", + "title": "Create category", + "category": "Front matter" + }, + { + "command": "frontMatter.createContent", + "title": "Create new content from defined content type or template", + "category": "Front matter" + }, + { + "command": "frontMatter.createTag", + "title": "Create tag", + "category": "Front matter" + }, + { + "command": "frontMatter.diagnostics", + "title": "Diagnostic logging", + "category": "Front matter" + }, + { + "command": "frontMatter.exportTaxonomy", + "title": "Export all tags & categories to your settings", + "category": "Front matter" + }, + { + "command": "frontMatter.createFromTemplate", + "title": "Front Matter: New article from template" + }, + { + "command": "frontMatter.registerFolder", + "title": "Front Matter: Register folder" + }, + { + "command": "frontMatter.unregisterFolder", + "title": "Front Matter: Unregister folder" + }, + { + "command": "frontMatter.generateSlug", + "title": "Generate slug based on content title", + "category": "Front matter" + }, { "command": "frontMatter.markup.heading", "title": "Heading", @@ -1171,12 +1087,63 @@ } }, { - "command": "frontMatter.markup.unorderedlist", - "title": "Unordered list", + "command": "frontMatter.init", + "title": "Initialize project", + "category": "Front matter" + }, + { + "command": "frontMatter.insertCategories", + "title": "Insert categories", + "category": "Front matter" + }, + { + "command": "frontMatter.insertImage", + "title": "Insert image into your content", "category": "Front matter", "icon": { - "light": "assets/icons/unordered-list-light.svg", - "dark": "assets/icons/unordered-list-dark.svg" + "dark": "/assets/icons/media-dark.svg", + "light": "/assets/icons/media-light.svg" + } + }, + { + "command": "frontMatter.insertTags", + "title": "Insert tags", + "category": "Front matter" + }, + { + "command": "frontMatter.markup.italic", + "title": "Italic", + "category": "Front matter", + "icon": { + "light": "assets/icons/italic-light.svg", + "dark": "assets/icons/italic-dark.svg" + } + }, + { + "command": "frontMatter.dashboard", + "title": "Open dashboard", + "category": "Front matter", + "icon": { + "dark": "/assets/icons/frontmatter-small-dark.svg", + "light": "/assets/icons/frontmatter-small-light.svg" + } + }, + { + "command": "frontMatter.dashboard.data", + "title": "Open data dashboard", + "category": "Front matter", + "icon": { + "dark": "/assets/icons/frontmatter-small-dark.svg", + "light": "/assets/icons/frontmatter-small-light.svg" + } + }, + { + "command": "frontMatter.dashboard.media", + "title": "Open media dashboard", + "category": "Front matter", + "icon": { + "dark": "/assets/icons/frontmatter-small-dark.svg", + "light": "/assets/icons/frontmatter-small-light.svg" } }, { @@ -1188,11 +1155,6 @@ "dark": "assets/icons/ordered-list-dark.svg" } }, - { - "command": "frontMatter.markup.tasklist", - "title": "Task list", - "category": "Front matter" - }, { "command": "frontMatter.markup.options", "title": "Other markup options", @@ -1203,9 +1165,47 @@ } }, { - "command": "frontMatter.diagnostics", - "title": "Diagnostic logging", + "command": "frontMatter.preview", + "title": "Preview content", "category": "Front matter" + }, + { + "command": "frontMatter.promoteSettings", + "title": "Promote settings from local to team level", + "category": "Front matter" + }, + { + "command": "frontMatter.remap", + "title": "Remap or remove tag/category in all articles", + "category": "Front matter" + }, + { + "command": "frontMatter.setLastModifiedDate", + "title": "Set lastmod date", + "category": "Front matter" + }, + { + "command": "frontMatter.markup.strikethrough", + "title": "Strikethrough", + "category": "Front matter", + "icon": { + "light": "assets/icons/strikethrough-light.svg", + "dark": "assets/icons/strikethrough-dark.svg" + } + }, + { + "command": "frontMatter.markup.tasklist", + "title": "Task list", + "category": "Front matter" + }, + { + "command": "frontMatter.markup.unorderedlist", + "title": "Unordered list", + "category": "Front matter", + "icon": { + "light": "assets/icons/unordered-list-light.svg", + "dark": "assets/icons/unordered-list-dark.svg" + } } ], "menus": { @@ -1481,4 +1481,4 @@ "dependencies": { "node-fetch": "^2.6.7" } -} +} \ No newline at end of file diff --git a/src/commands/Backers.ts b/src/commands/Backers.ts index 582896cd..215a03eb 100644 --- a/src/commands/Backers.ts +++ b/src/commands/Backers.ts @@ -11,21 +11,24 @@ export class Backers { public static async init(context: ExtensionContext) { Backers.creds = new Credentials(); - await Backers.creds.initialize(context); + await Backers.creds.initialize(context, Backers.tryUsernameCheck); + Backers.tryUsernameCheck(); + + context.subscriptions.push( + commands.registerCommand('frontMatter.authenticate', async () => { + Backers.tryUsernameCheck(); + }) + ); + } + + public static async tryUsernameCheck() { try { const username = await Backers.getUsername(); Backers.validate(username || ""); } catch (e) { Backers.validate(""); } - - context.subscriptions.push( - commands.registerCommand('frontMatter.authenticate', async () => { - const username = await Backers.getUsername(); - Backers.validate(username || ""); - }) - ); } public static async getUsername() { diff --git a/src/dashboardWebView/components/SponsorMsg.tsx b/src/dashboardWebView/components/SponsorMsg.tsx index a810c72d..1a56d1a5 100644 --- a/src/dashboardWebView/components/SponsorMsg.tsx +++ b/src/dashboardWebView/components/SponsorMsg.tsx @@ -12,7 +12,7 @@ export interface ISponsorMsgProps { export const SponsorMsg: React.FunctionComponent = ({beta, isBacker, version}: React.PropsWithChildren) => { return ( -

+

{ isBacker ? ( Front Matter{version ? ` (v${version.installedVersion}${!!beta ? ` BETA` : ''})` : ''} diff --git a/src/explorerView/ExplorerView.ts b/src/explorerView/ExplorerView.ts index 0c30e445..7cb73195 100644 --- a/src/explorerView/ExplorerView.ts +++ b/src/explorerView/ExplorerView.ts @@ -469,36 +469,38 @@ export class ExplorerView implements WebviewViewProvider, Disposable { } // Process image fields - for (const field of imageFields) { - if (parentObj[field.name]) { - const imageData = ImageHelper.allRelToAbs(field, parentObj[field.name]) - - if (imageData) { - if (field.multiple && imageData instanceof Array) { - const preview = imageData.map(preview => preview && preview.absPath ? ({ - ...preview, - webviewUrl: this.panel?.webview.asWebviewUri(preview.absPath).toString() - }) : null); - - parentObj[field.name] = preview || []; - } else if (!field.multiple && !Array.isArray(imageData) && imageData.absPath) { - const preview = this.panel?.webview.asWebviewUri(imageData.absPath); - parentObj[field.name] = { - ...imageData, - webviewUrl: preview ? preview.toString() : null - }; + if (parentObj) { + for (const field of imageFields) { + if (parentObj[field.name]) { + const imageData = ImageHelper.allRelToAbs(field, parentObj[field.name]) + + if (imageData) { + if (field.multiple && imageData instanceof Array) { + const preview = imageData.map(preview => preview && preview.absPath ? ({ + ...preview, + webviewUrl: this.panel?.webview.asWebviewUri(preview.absPath).toString() + }) : null); + + parentObj[field.name] = preview || []; + } else if (!field.multiple && !Array.isArray(imageData) && imageData.absPath) { + const preview = this.panel?.webview.asWebviewUri(imageData.absPath); + parentObj[field.name] = { + ...imageData, + webviewUrl: preview ? preview.toString() : null + }; + } + } else { + parentObj[field.name] = field.multiple ? [] : ""; } - } else { - parentObj[field.name] = field.multiple ? [] : ""; + } + } + + // Check if there are sub-fields to process + const subFields = fields.filter((field) => field.type === "fields"); + if (subFields?.length > 0) { + for (const field of subFields) { + this.processImageFields(updatedMetadata, field.fields || [], [...parents, field.name]); } - } - } - - // Check if there are sub-fields to process - const subFields = fields.filter((field) => field.type === "fields"); - if (subFields?.length > 0) { - for (const field of subFields) { - this.processImageFields(updatedMetadata, field.fields || [], [...parents, field.name]); } } } diff --git a/src/services/Credentials.ts b/src/services/Credentials.ts index 0261141f..8e4d564c 100644 --- a/src/services/Credentials.ts +++ b/src/services/Credentials.ts @@ -9,8 +9,8 @@ const SCOPES = ['user:email']; export class Credentials { private octokit: Octokit.Octokit | undefined; - async initialize(context: ExtensionContext): Promise { - this.registerListeners(context); + async initialize(context: ExtensionContext, callback: () => void): Promise { + this.registerListeners(context, callback); this.setOctokit(); } @@ -33,15 +33,21 @@ export class Credentials { this.octokit = undefined; } - registerListeners(context: ExtensionContext): void { + registerListeners(context: ExtensionContext, callback: () => void): void { /** * Sessions are changed when a user logs in or logs out. */ - context.subscriptions.push(authentication.onDidChangeSessions(async e => { - if (e.provider.id === GITHUB_AUTH_PROVIDER_ID) { - await this.setOctokit(); - } - })); + context.subscriptions.push( + authentication.onDidChangeSessions(async e => { + if (e.provider.id === GITHUB_AUTH_PROVIDER_ID) { + await this.setOctokit(); + + if (callback) { + callback(); + } + } + }) + ); } async getOctokit(): Promise {