Compare commits
195 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62b9f12494 | ||
|
|
accb069bab | ||
|
|
d869d15694 | ||
|
|
e54907daaf | ||
|
|
7b689326e3 | ||
|
|
4a4db839ab | ||
|
|
cc2c878c5c | ||
|
|
273af6d80f | ||
|
|
11233ba449 | ||
|
|
bb2ba5dbe8 | ||
|
|
128644eade | ||
|
|
aced5c550f | ||
|
|
93b096ab3d | ||
|
|
4dd27ad98f | ||
|
|
01ae0b49cc | ||
|
|
313533d74d | ||
|
|
5f92ad33ff | ||
|
|
7240747e86 | ||
|
|
fbbfaa572e | ||
|
|
b981ed6c4f | ||
|
|
3eb23d7501 | ||
|
|
965fac68c9 | ||
|
|
e2837794f3 | ||
|
|
ae436e1a0e | ||
|
|
0d19abfa8f | ||
|
|
58d3c8e211 | ||
|
|
2117dab03e | ||
|
|
20ff578c3f | ||
|
|
3c29526d88 | ||
|
|
a9fb507b28 | ||
|
|
d5adc348a2 | ||
|
|
71ecca3b85 | ||
|
|
bb29fa344c | ||
|
|
c67a1f9870 | ||
|
|
c972325eff | ||
|
|
60c8dd6185 | ||
|
|
033baea418 | ||
|
|
72f830e474 | ||
|
|
624afe9029 | ||
|
|
e161fe23d5 | ||
|
|
51517c6a43 | ||
|
|
e7de1209c3 | ||
|
|
9fcdf75c89 | ||
|
|
430ce8940c | ||
|
|
5c8228bd17 | ||
|
|
577ff2f13a | ||
|
|
f9134f1167 | ||
|
|
42b5a4ac9e | ||
|
|
0657c6307f | ||
|
|
d4bef8a4e5 | ||
|
|
c3f51c6764 | ||
|
|
91f127ef94 | ||
|
|
6158971fd8 | ||
|
|
9d2cc7cd9f | ||
|
|
964c943e88 | ||
|
|
0a6e2fac36 | ||
|
|
2a8c3abac6 | ||
|
|
7e4c5b0469 | ||
|
|
5fcd8d6fe7 | ||
|
|
0f07be3e3b | ||
|
|
5444925cf4 | ||
|
|
2b89dda08c | ||
|
|
c4feb205fc | ||
|
|
78bfa62ed4 | ||
|
|
f350d4af91 | ||
|
|
d15f2554a1 | ||
|
|
ab603d9419 | ||
|
|
1acf85c6da | ||
|
|
3383a770b4 | ||
|
|
a6d2fffeb9 | ||
|
|
3d530f7929 | ||
|
|
f02f994174 | ||
|
|
343dfb2d5d | ||
|
|
9ddaedaaf2 | ||
|
|
32c6b4c5ea | ||
|
|
90f4d92741 | ||
|
|
580b1dca6d | ||
|
|
520bdf2be3 | ||
|
|
9724168c3f | ||
|
|
ab02e64708 | ||
|
|
f857b0eaa8 | ||
|
|
03aee57221 | ||
|
|
07db685666 | ||
|
|
8684f32d98 | ||
|
|
2e536a4de7 | ||
|
|
739dffe274 | ||
|
|
41d2f3f22b | ||
|
|
e285e8d775 | ||
|
|
9cf4ae46dd | ||
|
|
72c9d1e25f | ||
|
|
5f13d318c2 | ||
|
|
ffdf8262d7 | ||
|
|
7fcbdb4ade | ||
|
|
a8407920bc | ||
|
|
e1f6c90fc0 | ||
|
|
11354ad8e5 | ||
|
|
af3e63046c | ||
|
|
cee4621964 | ||
|
|
8db76abf51 | ||
|
|
3ca50bbe58 | ||
|
|
e4cb93274b | ||
|
|
39ad0e034e | ||
|
|
cef607ffc8 | ||
|
|
258c5fe670 | ||
|
|
046b24337d | ||
|
|
24fb1347df | ||
|
|
3665823803 | ||
|
|
a020b9ad8c | ||
|
|
2c026ff5e5 | ||
|
|
966d0107d9 | ||
|
|
c770a9035f | ||
|
|
731212264c | ||
|
|
3a8dcbe22f | ||
|
|
6cbe76096b | ||
|
|
039170eae5 | ||
|
|
14ddd8b53c | ||
|
|
b60aadc4a3 | ||
|
|
79ee6607ca | ||
|
|
fe9fbe899d | ||
|
|
f4816afa65 | ||
|
|
a196c4192a | ||
|
|
6d43ff11a4 | ||
|
|
1c5e98d40c | ||
|
|
0f1085756c | ||
|
|
83f103b991 | ||
|
|
13f5446163 | ||
|
|
96c496caba | ||
|
|
7c2a59615f | ||
|
|
0ea972e4f3 | ||
|
|
d1eb252380 | ||
|
|
3e038c58a3 | ||
|
|
2cb72a607b | ||
|
|
2f7d8e5816 | ||
|
|
1337b21789 | ||
|
|
ff1c00167c | ||
|
|
35f1b38c1b | ||
|
|
f1d613274d | ||
|
|
2423b7351d | ||
|
|
36b3b338ea | ||
|
|
103c10890e | ||
|
|
f182403a4e | ||
|
|
15b187f3f7 | ||
|
|
ed00f8f60e | ||
|
|
93a6df85dd | ||
|
|
e26028c5fb | ||
|
|
90bfa87995 | ||
|
|
414e980647 | ||
|
|
78bb85350a | ||
|
|
5a9ef1add8 | ||
|
|
e573e3d964 | ||
|
|
2d4848bdee | ||
|
|
43eb5a78e7 | ||
|
|
03a0260b46 | ||
|
|
cb9c081a52 | ||
|
|
fd652042c5 | ||
|
|
2c8316288d | ||
|
|
2a763ab384 | ||
|
|
44ec37a518 | ||
|
|
3ab726d7fb | ||
|
|
8ba2e15db0 | ||
|
|
c506ab75c1 | ||
|
|
1c088d2605 | ||
|
|
0e4be12a9f | ||
|
|
2002410e08 | ||
|
|
f4e1f06662 | ||
|
|
f2eef85206 | ||
|
|
4a701dd323 | ||
|
|
1128e230c6 | ||
|
|
48ee263c27 | ||
|
|
1a71848acd | ||
|
|
c79d0ee603 | ||
|
|
ac3b4a012b | ||
|
|
08b8fa6fdb | ||
|
|
9244af0ac4 | ||
|
|
c1f426c85c | ||
|
|
6b9402d593 | ||
|
|
9c252d0931 | ||
|
|
240211c769 | ||
|
|
dff78d9e0a | ||
|
|
0bcf23d18e | ||
|
|
1907771e73 | ||
|
|
3974dc7a97 | ||
|
|
a624881791 | ||
|
|
9df668a054 | ||
|
|
180ea7880b | ||
|
|
c952cf4057 | ||
|
|
73ce0d23ae | ||
|
|
fdb4a0892c | ||
|
|
57960120a4 | ||
|
|
d74611e04f | ||
|
|
acc0a9ad19 | ||
|
|
f809fb2fe7 | ||
|
|
feebdadaa5 | ||
|
|
8967d236fe | ||
|
|
6afcaec446 |
1
.frontmatter/database/pinnedItemsDb.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
9
.github/workflows/release-beta.yml
vendored
@@ -20,11 +20,18 @@ jobs:
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
- name: Install the dependencies
|
||||
run: npm i
|
||||
run: npm ci
|
||||
|
||||
- name: Prepare BETA
|
||||
run: node scripts/beta-release.js $GITHUB_RUN_ID
|
||||
|
||||
- name: Run localization sync
|
||||
run: npm run localization:sync
|
||||
env:
|
||||
TRANSLATION_API_KEY: ${{ secrets.TRANSLATION_API_KEY }}
|
||||
TRANSLATION_API_LOCATION: ${{ secrets.TRANSLATION_API_LOCATION }}
|
||||
TRANSLATION_API_URL: ${{ secrets.TRANSLATION_API_URL }}
|
||||
|
||||
- name: Publish
|
||||
run: npx @vscode/vsce publish -p ${{ secrets.VSCE_PAT }} --baseImagesUrl https://raw.githubusercontent.com/estruyf/vscode-front-matter/dev
|
||||
|
||||
|
||||
9
.github/workflows/release.yml
vendored
@@ -20,11 +20,18 @@ jobs:
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
- name: Install the dependencies
|
||||
run: npm i
|
||||
run: npm ci
|
||||
|
||||
- name: Prepare MAIN release
|
||||
run: node scripts/main-release.js
|
||||
|
||||
- name: Run localization sync
|
||||
run: npm run localization:sync
|
||||
env:
|
||||
TRANSLATION_API_KEY: ${{ secrets.TRANSLATION_API_KEY }}
|
||||
TRANSLATION_API_LOCATION: ${{ secrets.TRANSLATION_API_LOCATION }}
|
||||
TRANSLATION_API_URL: ${{ secrets.TRANSLATION_API_URL }}
|
||||
|
||||
- name: Publish
|
||||
run: npx @vscode/vsce publish -p ${{ secrets.VSCE_PAT }}
|
||||
|
||||
|
||||
3
.gitignore
vendored
@@ -11,4 +11,5 @@ e2e/extensions
|
||||
e2e/sample
|
||||
|
||||
localization.log
|
||||
localization.md
|
||||
localization.md
|
||||
.env
|
||||
|
||||
8
.vscode/settings.json
vendored
@@ -1,5 +1,11 @@
|
||||
// Place your settings in this file to overwrite default and user settings.
|
||||
{
|
||||
"workbench.colorCustomizations": {
|
||||
"titleBar.activeBackground": "#15c2cb",
|
||||
"titleBar.inactiveBackground": "#44ffd299",
|
||||
"titleBar.activeForeground": "#0E131F",
|
||||
"titleBar.inactiveForeground": "#0E131F99"
|
||||
},
|
||||
"files.exclude": {
|
||||
"out": false // set this to true to hide the "out" folder with the compiled JS files
|
||||
},
|
||||
@@ -8,8 +14,6 @@
|
||||
},
|
||||
// Turn off tsc task auto detection since we have the necessary tasks as npm scripts
|
||||
"typescript.tsc.autoDetect": "off",
|
||||
"eliostruyf.writingstyleguide.terms.isDisabled": true,
|
||||
"eliostruyf.writingstyleguide.biasFree.isDisabled": true,
|
||||
"squarl.groups": [
|
||||
{
|
||||
"id": "dashboard",
|
||||
|
||||
110
CHANGELOG.md
@@ -1,5 +1,114 @@
|
||||
# Change Log
|
||||
|
||||
## [9.5.0] - 2024-xx-xx
|
||||
|
||||
### ✨ New features
|
||||
|
||||
- [#731](https://github.com/estruyf/vscode-front-matter/issues/731): Added the ability to map/unmap taxonomy to multiple pages at once
|
||||
- [#749](https://github.com/estruyf/vscode-front-matter/issues/749): Ability to set your own filters on the content dashboard with the `frontMatter.content.filters` setting
|
||||
|
||||
### 🎨 Enhancements
|
||||
|
||||
- [#673](https://github.com/estruyf/vscode-front-matter/pull/673): Added git settings to the welcome view and settings view
|
||||
- [#727](https://github.com/estruyf/vscode-front-matter/pull/727): Updated Japanese translations thanks to [mayumihara](https://github.com/mayumih387)
|
||||
- [#737](https://github.com/estruyf/vscode-front-matter/issues/737): Optimize the grid layout of the content and media dashboards
|
||||
- [#741](https://github.com/estruyf/vscode-front-matter/issues/741): Added message on the content dashboard when content is processed
|
||||
- [#747](https://github.com/estruyf/vscode-front-matter/issues/747): The `@frontmatter/extensibility` dependency now supports scripts for placeholders
|
||||
|
||||
### ⚡️ Optimizations
|
||||
|
||||
### 🐞 Fixes
|
||||
|
||||
- [#721](https://github.com/estruyf/vscode-front-matter/issues/721): Fix keywords regex to support unicode characters
|
||||
- [#725](https://github.com/estruyf/vscode-front-matter/issues/725): Fix for opening menu of pinned items
|
||||
- [#730](https://github.com/estruyf/vscode-front-matter/issues/730): Add debounce to the input fields
|
||||
- [#738](https://github.com/estruyf/vscode-front-matter/issues/738): Fix when re-opening the preview after closing it
|
||||
- [#743](https://github.com/estruyf/vscode-front-matter/issues/743): Fix for storing data in YAML data files
|
||||
- [#745](https://github.com/estruyf/vscode-front-matter/issues/745): Fix for date field values in `block` field type
|
||||
|
||||
## [9.4.0] - 2023-12-12 - [Release notes](https://beta.frontmatter.codes/updates/v9.4.0)
|
||||
|
||||
### ✨ New features
|
||||
|
||||
- Localization implemented for the whole extension
|
||||
|
||||
### 🎨 Enhancements
|
||||
|
||||
- [#273](https://github.com/estruyf/vscode-front-matter/issues/273): Allow single value arrays to be set as a string with the `singleValueAsString` field property
|
||||
- [#686](https://github.com/estruyf/vscode-front-matter/issues/686): Allow script authors to ask questions during script execution
|
||||
- [#688](https://github.com/estruyf/vscode-front-matter/issues/688): Allow to show the scheduled articles in the content dashboard (filter and group)
|
||||
- [#690](https://github.com/estruyf/vscode-front-matter/issues/690): Added the ability to filter values in the `contentRelationship` field
|
||||
- [#700](https://github.com/estruyf/vscode-front-matter/issues/700): Added the `{{pathToken.relPath}}` placeholder for the `previewPath` property
|
||||
- [#706](https://github.com/estruyf/vscode-front-matter/issues/706): Show the error of scripts failing in the Front Matter output panel
|
||||
- [#709](https://github.com/estruyf/vscode-front-matter/issues/709): Take "where clause" into account on content creation
|
||||
- [#710](https://github.com/estruyf/vscode-front-matter/issues/710): Hide child field when parent field its "when clause" is not met, also remove the fields from the content
|
||||
- [#713](https://github.com/estruyf/vscode-front-matter/issues/713): Add the ability to always use quotes around string values in front matter
|
||||
- [#722](https://github.com/estruyf/vscode-front-matter/issues/722): Allow to create sub-content which shows a dialog to select the parent folder
|
||||
|
||||
### ⚡️ Optimizations
|
||||
|
||||
- Dashboard layout grid optimizations
|
||||
- Added the content-type name to the metadata section in the panel
|
||||
- New implementation of the combobox for the `contentRelationship` field
|
||||
|
||||
### 🐞 Fixes
|
||||
|
||||
- [#685](https://github.com/estruyf/vscode-front-matter/issues/685): Fix when using non-string values in the tag picker
|
||||
- [#691](https://github.com/estruyf/vscode-front-matter/issues/691): Silent authentication retrieval for GitHub sponsors
|
||||
- [#694](https://github.com/estruyf/vscode-front-matter/issues/694): Start terminal session from the folder where the `frontmatter.json` file is located
|
||||
- [#696](https://github.com/estruyf/vscode-front-matter/issues/696): Close the local server terminal on restart
|
||||
- [#699](https://github.com/estruyf/vscode-front-matter/issues/699): Changing border theme variable for the dashboard header
|
||||
- [#703](https://github.com/estruyf/vscode-front-matter/issues/703): Fix retrieval of Astro Collections for `pnpm` projects
|
||||
- [#704](https://github.com/estruyf/vscode-front-matter/issues/704): Fix `zod` schema script for optional fields
|
||||
- [#707](https://github.com/estruyf/vscode-front-matter/issues/707): Fix `clearEmpty` issue with `draft` and `boolean` fields which are by default set to `true`
|
||||
- [#711](https://github.com/estruyf/vscode-front-matter/issues/711): Fix in character mapping in the slug field
|
||||
- [#712](https://github.com/estruyf/vscode-front-matter/issues/712): Keep the search context when deleting media files
|
||||
- [#714](https://github.com/estruyf/vscode-front-matter/issues/714): Fix for taxonomy filtering from taxonomy view to content view
|
||||
- [#717](https://github.com/estruyf/vscode-front-matter/issues/717): Fix in loading yaml data files
|
||||
- [#718](https://github.com/estruyf/vscode-front-matter/issues/718): Fix JSON schema for the `frontMatter.panel.actions.disabled` setting
|
||||
- [#719](https://github.com/estruyf/vscode-front-matter/issues/719): Fix styling on data view with objects views
|
||||
|
||||
## [9.3.1] - 2023-10-27
|
||||
|
||||
### 🐞 Fixes
|
||||
|
||||
- [#697](https://github.com/estruyf/vscode-front-matter/issues/697): Fix missing localization key
|
||||
|
||||
## [9.3.0] - 2023-10-06 - [Release notes](https://beta.frontmatter.codes/updates/v9.3.0)
|
||||
|
||||
### ✨ New features
|
||||
|
||||
- [#80](https://github.com/estruyf/vscode-front-matter/issues/80): Minimal settings view for the Front Matter CMS
|
||||
- [#553](https://github.com/estruyf/vscode-front-matter/issues/553): New `frontMatter.config.dynamicFilePath` setting which allows you to dynamically update the settings from a custom JS file
|
||||
- [#563](https://github.com/estruyf/vscode-front-matter/issues/563): New `fieldCollection` to inherit/reuse fields in multiple content-types
|
||||
- [#653](https://github.com/estruyf/vscode-front-matter/issues/653): Retrieve the Astro Content Collections to allow content type generation
|
||||
- [#675](https://github.com/estruyf/vscode-front-matter/issues/675): Pinning content to the top of the content dashboard
|
||||
|
||||
### 🎨 Enhancements
|
||||
|
||||
- [#517](https://github.com/estruyf/vscode-front-matter/issues/517): Add `contentTypes` property to custom scripts to show/hide custom actions
|
||||
- [#517](https://github.com/estruyf/vscode-front-matter/issues/517): Added `frontMatter.panel.actions.disabled` setting to define which actions should be hidden
|
||||
- [#638](https://github.com/estruyf/vscode-front-matter/issues/638): Add Hexo support for the `_drafts` folder
|
||||
- [#659](https://github.com/estruyf/vscode-front-matter/issues/659): Implement a filter for the taxonomy dashboard
|
||||
- [#662](https://github.com/estruyf/vscode-front-matter/issues/662): Always show the `all articles` tab with the page counter
|
||||
- [#663](https://github.com/estruyf/vscode-front-matter/issues/663): Make card tags clickable to filter the view
|
||||
- [#669](https://github.com/estruyf/vscode-front-matter/issues/669): Add the video preview to the details panel + caption field
|
||||
- [#674](https://github.com/estruyf/vscode-front-matter/issues/674): Specify to disable content creation for a specific page folder
|
||||
- [#676](https://github.com/estruyf/vscode-front-matter/issues/676): Allow the `frontmatter.json` file to be placed in a sub-directory
|
||||
- [#677](https://github.com/estruyf/vscode-front-matter/issues/677): Added support for [Browse Lite](https://marketplace.visualstudio.com/items?itemName=antfu.browse-lite) extension to open preview when installed
|
||||
|
||||
### 🐞 Fixes
|
||||
|
||||
- [#623](https://github.com/estruyf/vscode-front-matter/issues/623): Fix issue where metadata is not maintained on file move
|
||||
- [#629](https://github.com/estruyf/vscode-front-matter/issues/629): Fix array indent to the new property
|
||||
- [#660](https://github.com/estruyf/vscode-front-matter/issues/660): Allow only to select unique content relationship values
|
||||
- [#661](https://github.com/estruyf/vscode-front-matter/issues/661): Fixing the dropdowns when used at the bottom of a collapsible group
|
||||
- [#664](https://github.com/estruyf/vscode-front-matter/issues/664): Fix for parsing draft status in Hexo and Jekyll
|
||||
- [#665](https://github.com/estruyf/vscode-front-matter/issues/665): Added `dev` parameter to Nuxt script
|
||||
- [#668](https://github.com/estruyf/vscode-front-matter/issues/668): Reset pagination on media search
|
||||
- [#678](https://github.com/estruyf/vscode-front-matter/issues/678): Check field type of `tags` fields for tags rendering on item cards
|
||||
- [#681](https://github.com/estruyf/vscode-front-matter/issues/681): Fix SVG icons which are used in the VSCode UI
|
||||
|
||||
## [9.2.0] - 2023-09-11
|
||||
|
||||
### ✨ New features
|
||||
@@ -16,6 +125,7 @@
|
||||
- [#645](https://github.com/estruyf/vscode-front-matter/issues/645): French localization added (thanks to [Clément Barbaza](https://github.com/cba85))
|
||||
- [#649](https://github.com/estruyf/vscode-front-matter/issues/649): Parse optional variables from snippets
|
||||
- [#652](https://github.com/estruyf/vscode-front-matter/issues/652): Show the start/stop server buttons depending on the local terminal session
|
||||
- [#654](https://github.com/estruyf/vscode-front-matter/issues/654): Added a new action to open the content in the browser
|
||||
|
||||
### 🐞 Fixes
|
||||
|
||||
|
||||
@@ -25,9 +25,9 @@ Eager to start contributing? Great 🤩, you can contribute to the following pro
|
||||
|
||||
- Start by forking this project;
|
||||
- Clone your fork to your local machine;
|
||||
- Run `pnpm i`;
|
||||
- Run `npm i`;
|
||||
- Open the project in VS Code;
|
||||
- To start developing, run `pnpm dev:ext` and press `f5` to start the debugging session.
|
||||
- To start developing, run `npm run dev:ext` and press `f5` to start the debugging session.
|
||||
|
||||
### Tips
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M6 15h15" />
|
||||
<path d="M21 19h-15" />
|
||||
|
||||
|
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 449 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M6 15h15" />
|
||||
<path d="M21 19h-15" />
|
||||
|
||||
|
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 449 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M7 5h6a3.5 3.5 0 0 1 0 7h-6z" />
|
||||
<path d="M13 12h1a3.5 3.5 0 0 1 0 7h-7v-7" />
|
||||
|
||||
|
Before Width: | Height: | Size: 329 B After Width: | Height: | Size: 329 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M7 5h6a3.5 3.5 0 0 1 0 7h-6z" />
|
||||
<path d="M13 12h1a3.5 3.5 0 0 1 0 7h-7v-7" />
|
||||
|
||||
|
Before Width: | Height: | Size: 329 B After Width: | Height: | Size: 329 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 32 32">
|
||||
<path fill="#C5C5C5" d="M16 19a6.99 6.99 0 0 1-5.833-3.129l1.666-1.107a5 5 0 0 0 8.334 0l1.666 1.107A6.99 6.99 0 0 1 16 19zm4-11a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2zm-8 0a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2z"/>
|
||||
<path fill="#C5C5C5" d="M17.736 30L16 29l4-7h6a1.997 1.997 0 0 0 2-2V6a1.997 1.997 0 0 0-2-2H6a1.997 1.997 0 0 0-2 2v14a1.997 1.997 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V6a3.999 3.999 0 0 1 4-4h20a3.999 3.999 0 0 1 4 4v14a4 4 0 0 1-4 4h-4.835Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 540 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 32 32">
|
||||
<path fill="#424242" d="M16 19a6.99 6.99 0 0 1-5.833-3.129l1.666-1.107a5 5 0 0 0 8.334 0l1.666 1.107A6.99 6.99 0 0 1 16 19zm4-11a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2zm-8 0a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2z"/>
|
||||
<path fill="#424242" d="M17.736 30L16 29l4-7h6a1.997 1.997 0 0 0 2-2V6a1.997 1.997 0 0 0-2-2H6a1.997 1.997 0 0 0-2 2v14a1.997 1.997 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V6a3.999 3.999 0 0 1 4-4h20a3.999 3.999 0 0 1 4 4v14a4 4 0 0 1-4 4h-4.835Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 540 B After Width: | Height: | Size: 540 B |
@@ -1,4 +1,4 @@
|
||||
<svg width="32px" height="32px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#C5C5C5">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#C5C5C5">
|
||||
<path d="M9 9H4v1h5V9z" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3l1-1h7l1 1v7l-1 1h-2v2l-1 1H3l-1-1V6l1-1h2V3zm1 2h4l1 1v4h2V3H6v2zm4 1H3v7h7V6z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 277 B After Width: | Height: | Size: 273 B |
@@ -1,4 +1,4 @@
|
||||
<svg width="32px" height="32px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#424242">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="#424242">
|
||||
<path d="M9 9H4v1h5V9z" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3l1-1h7l1 1v7l-1 1h-2v2l-1 1H3l-1-1V6l1-1h2V3zm1 2h4l1 1v4h2V3H6v2zm4 1H3v7h7V6z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 277 B After Width: | Height: | Size: 273 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<polyline points="7 8 3 12 7 16" />
|
||||
<polyline points="17 8 21 12 17 16" />
|
||||
|
||||
|
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 358 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<polyline points="7 8 3 12 7 16" />
|
||||
<polyline points="17 8 21 12 17 16" />
|
||||
|
||||
|
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 358 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M9 12h6" />
|
||||
<path d="M12 9v6" />
|
||||
|
||||
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 422 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M9 12h6" />
|
||||
<path d="M12 9v6" />
|
||||
|
||||
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 422 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M7 12h10" />
|
||||
<path d="M7 4v16" />
|
||||
|
||||
|
Before Width: | Height: | Size: 400 B After Width: | Height: | Size: 400 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M7 12h10" />
|
||||
<path d="M7 4v16" />
|
||||
|
||||
|
Before Width: | Height: | Size: 400 B After Width: | Height: | Size: 400 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<line x1="11" y1="5" x2="17" y2="5" />
|
||||
<line x1="7" y1="19" x2="13" y2="19" />
|
||||
|
||||
|
Before Width: | Height: | Size: 362 B After Width: | Height: | Size: 362 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<line x1="11" y1="5" x2="17" y2="5" />
|
||||
<line x1="7" y1="19" x2="13" y2="19" />
|
||||
|
||||
|
Before Width: | Height: | Size: 362 B After Width: | Height: | Size: 362 B |
@@ -1,3 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="#C5C5C5" width="24" height="24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="#C5C5C5" width="16" height="16">
|
||||
<path fillRule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clipRule="evenodd" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 269 B After Width: | Height: | Size: 269 B |
@@ -1,3 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="#424242" width="24" height="24">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="#424242" width="16" height="16">
|
||||
<path fillRule="evenodd" d="M4 3a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V5a2 2 0 00-2-2H4zm12 12H4l4-8 3 6 2-4 3 6z" clipRule="evenodd" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 269 B After Width: | Height: | Size: 269 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<line x1="8" y1="12" x2="8" y2="12.01" />
|
||||
|
||||
|
Before Width: | Height: | Size: 408 B After Width: | Height: | Size: 408 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<circle cx="12" cy="12" r="9" />
|
||||
<line x1="8" y1="12" x2="8" y2="12.01" />
|
||||
|
||||
|
Before Width: | Height: | Size: 408 B After Width: | Height: | Size: 408 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M11 6h9" />
|
||||
<path d="M11 12h9" />
|
||||
|
||||
|
Before Width: | Height: | Size: 451 B After Width: | Height: | Size: 451 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list-numbers" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M11 6h9" />
|
||||
<path d="M11 12h9" />
|
||||
|
||||
|
Before Width: | Height: | Size: 451 B After Width: | Height: | Size: 451 B |
@@ -1,3 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="#C5C5C5" stroke-width="2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="#C5C5C5" stroke-width="2">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M14.121 14.121L19 19m-7-7l7-7m-7 7l-2.879 2.879M12 12L9.121 9.121m0 5.758a3 3 0 10-4.243 4.243 3 3 0 004.243-4.243zm0-5.758a3 3 0 10-4.243-4.243 3 3 0 004.243 4.243z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 357 B After Width: | Height: | Size: 380 B |
@@ -1,3 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="#424242" stroke-width="2">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="#424242" stroke-width="2">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="M14.121 14.121L19 19m-7-7l7-7m-7 7l-2.879 2.879M12 12L9.121 9.121m0 5.758a3 3 0 10-4.243 4.243 3 3 0 004.243-4.243zm0-5.758a3 3 0 10-4.243-4.243 3 3 0 004.243 4.243z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 357 B After Width: | Height: | Size: 380 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M7 5v9a5 5 0 0 0 10 0v-9" />
|
||||
<path d="M4 12h16" />
|
||||
|
||||
|
Before Width: | Height: | Size: 301 B After Width: | Height: | Size: 301 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<path d="M7 5v9a5 5 0 0 0 10 0v-9" />
|
||||
<path d="M4 12h16" />
|
||||
|
||||
|
Before Width: | Height: | Size: 301 B After Width: | Height: | Size: 301 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#C5C5C5" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<line x1="9" y1="6" x2="20" y2="6" />
|
||||
<line x1="9" y1="12" x2="20" y2="12" />
|
||||
|
||||
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 533 B |
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-list" width="16" height="16" viewBox="0 0 24 24" stroke-width="2" stroke="#424242" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||
<line x1="9" y1="6" x2="20" y2="6" />
|
||||
<line x1="9" y1="12" x2="20" y2="12" />
|
||||
|
||||
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 533 B |
@@ -66,43 +66,6 @@
|
||||
padding: 1rem 1.25rem;
|
||||
}
|
||||
|
||||
.spinner,
|
||||
.spinner:before,
|
||||
.spinner:after {
|
||||
border-radius: 50%;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
animation-fill-mode: both;
|
||||
animation: load7 1.8s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.spinner {
|
||||
color: var(--vscode-panelSectionHeader-foreground);
|
||||
font-size: 10px;
|
||||
margin: 80px auto;
|
||||
position: relative;
|
||||
text-indent: -9999em;
|
||||
transform: translateZ(0);
|
||||
animation-delay: -0.16s;
|
||||
}
|
||||
|
||||
.spinner:before,
|
||||
.spinner:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.spinner:before {
|
||||
left: -3.5em;
|
||||
-webkit-animation-delay: -0.32s;
|
||||
animation-delay: -0.32s;
|
||||
}
|
||||
|
||||
.spinner:after {
|
||||
left: 3.5em;
|
||||
}
|
||||
|
||||
.frontmatter {
|
||||
padding-top: 0;
|
||||
padding-bottom: var(--input-margin-vertical);
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
import { By, VSBrowser, EditorView, WebView, Workbench, Notification, StatusBar, NotificationType } from "vscode-extension-tester";
|
||||
import { expect } from "chai";
|
||||
import { sleep } from "./utils";
|
||||
import { join } from "path";
|
||||
|
||||
// https://github.com/microsoft/vscode-java-dependency/blob/4256fa6adcaff5ec24dbdbb8d9a516fad21431c5/test/ui/index.ts
|
||||
// https://github.com/microsoft/vscode-java-dependency/blob/4256fa6adcaff5ec24dbdbb8d9a516fad21431c5/test/ui/command.test.ts
|
||||
|
||||
describe("Initialization testing", function() {
|
||||
this.timeout(2 * 60 * 1000 /*ms*/);
|
||||
|
||||
let workbench: Workbench;
|
||||
let view: WebView;
|
||||
|
||||
before(async function() {
|
||||
await VSBrowser.instance.openResources(join(__dirname, '../sample'));
|
||||
await sleep(3000);
|
||||
workbench = new Workbench();
|
||||
|
||||
await workbench.executeCommand("frontMatter.dashboard");
|
||||
await sleep(3000);
|
||||
|
||||
await new EditorView().openEditor(`FrontMatter Dashboard`);
|
||||
|
||||
view = new WebView();
|
||||
await view.switchToFrame();
|
||||
});
|
||||
|
||||
it("1. Open welcome dashboard", async function() {
|
||||
const element = await view.findWebElement(By.css('h1'));
|
||||
|
||||
const title = await element.getText();
|
||||
|
||||
expect(title).has.string(`Front Matter`);
|
||||
});
|
||||
|
||||
it("2. Initialize project", async function() {
|
||||
const btn = await view.findWebElement(By.css('[data-test="welcome-init"] button'));
|
||||
expect(btn).to.exist;
|
||||
|
||||
await btn.click();
|
||||
|
||||
await sleep(1000);
|
||||
|
||||
await VSBrowser.instance.driver.wait(() => {
|
||||
return notificationExists(workbench, 'Front Matter:');
|
||||
}, 2000) as Notification;
|
||||
|
||||
const notifications = await workbench.getNotifications();
|
||||
|
||||
let notification!: Notification;
|
||||
for (const not of notifications) {
|
||||
console.log(not);
|
||||
|
||||
// const message = await not.get;
|
||||
// console.log(message);
|
||||
// if (message.includes('Front Matter:')) {
|
||||
// notification = not;
|
||||
// }
|
||||
}
|
||||
|
||||
expect(await notification.getMessage()).has.string(`Project initialized successfully.`);
|
||||
});
|
||||
|
||||
it("3. Check if project file is created", async function() {});
|
||||
});
|
||||
|
||||
|
||||
async function notificationExists(workbench: Workbench, text: string): Promise<Notification | undefined> {
|
||||
const notifications = await (await (new StatusBar()).openNotificationsCenter()).getNotifications(NotificationType.Info);
|
||||
|
||||
for (const notification of notifications) {
|
||||
const message = await notification.getMessage();
|
||||
if (message.indexOf(text) >= 0) {
|
||||
return notification;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
import * as path from 'path'
|
||||
import * as semver from 'semver'
|
||||
import { ExTester, ReleaseQuality } from 'vscode-extension-tester'
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const vsCodeVersion: semver.SemVer = new semver.SemVer(`1.66.0`)
|
||||
const version = vsCodeVersion.version
|
||||
|
||||
const storageFolder = path.join(__dirname, '..', 'storage')
|
||||
const extFolder = path.join(__dirname, '..', 'extensions')
|
||||
|
||||
try {
|
||||
const testPath = path.join(__dirname, 'command.test.js')
|
||||
|
||||
const exTester = new ExTester(storageFolder, ReleaseQuality.Stable, extFolder)
|
||||
await exTester.downloadCode(version)
|
||||
await exTester.installVsix({ useYarn: false })
|
||||
// await exTester.installFromMarketplace("eliostruyf.vscode-front-matter");
|
||||
await exTester.downloadChromeDriver(version)
|
||||
// await exTester.setupRequirements({vscodeVersion: version});
|
||||
const result = await exTester.runTests(testPath, {
|
||||
vscodeVersion: version,
|
||||
resources: [storageFolder],
|
||||
})
|
||||
|
||||
process.exit(result)
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
@@ -1 +0,0 @@
|
||||
export * from './sleep';
|
||||
@@ -1,3 +0,0 @@
|
||||
export async function sleep(time: number) {
|
||||
await new Promise((resolve) => setTimeout(resolve, time));
|
||||
}
|
||||
@@ -336,5 +336,29 @@
|
||||
"dashboard.steps.stepsToGetStarted.template.name": "Verwende eine Konfigurationsvorlage",
|
||||
"dashboard.steps.stepsToGetStarted.template.description": "Wählen Sie eine Vorlage aus, um die Datei frontmatter.json mit den empfohlenen Einstellungen vorzufüllen.",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Vorlagendateien kopiert.",
|
||||
"common.openOnWebsite": "Auf der Website öffnen"
|
||||
"common.openOnWebsite": "Auf der Website öffnen",
|
||||
"common.filter.value": "Filtern nach {0}",
|
||||
"dashboard.media.detailsSlideOver.unmapped.description": "Möchten Sie die Metadaten von nicht zugeordneten Dateien neu zuordnen?",
|
||||
"common.settings": "Einstellungen",
|
||||
"common.refreshSettings": "Einstellungen aktualisieren",
|
||||
"common.pin": "Stecknadel",
|
||||
"common.unpin": "Losheften",
|
||||
"settings.view.common": "Gemeinsam",
|
||||
"settings.view.contentFolders": "Inhaltsordner",
|
||||
"settings.view.astro": "Astro",
|
||||
"settings.openOnStartup": "Öffnen Sie das Dashboard beim Start",
|
||||
"settings.contentTypes": "Inhaltstypen",
|
||||
"settings.contentFolders": "Inhaltsordner",
|
||||
"settings.diagnostic": "Diagnostisch",
|
||||
"settings.diagnostic.description": "Sie können die Diagnose ausführen, um die gesamte Front Matter CMS-Konfiguration zu überprüfen.",
|
||||
"settings.diagnostic.link": "Führen Sie eine vollständige Diagnose durch",
|
||||
"settings.commonSettings.website.title": "Website- und SSG-Einstellungen",
|
||||
"settings.commonSettings.previewUrl": "Vorschau-URL",
|
||||
"settings.commonSettings.websiteUrl": "Website-URL",
|
||||
"settings.commonSettings.startCommand": "SSG/Framework-Startbefehl",
|
||||
"dashboard.contents.overview.pinned": "Angeheftet",
|
||||
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Erstellen Sie Content-Typen für Ihre Astro Content Collections",
|
||||
"dashboard.welcomeScreen.link.documentation.label": "Dokumentation",
|
||||
"dashboard.configuration.astro.astroContentTypes.empty": "Es wurden keine Astro Content Collections gefunden.",
|
||||
"dashboard.configuration.astro.astroContentTypes.description": "Die folgenden Astro Content Collections und können verwendet werden, um einen Inhaltstyp zu generieren."
|
||||
}
|
||||
1
l10n/bundle.l10n.es.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -336,5 +336,29 @@
|
||||
"dashboard.steps.stepsToGetStarted.template.name": "Utiliser un modèle de configuration",
|
||||
"dashboard.steps.stepsToGetStarted.template.description": "Sélectionnez un modèle pour préremplir le fichier frontmatter.json avec les paramètres recommandés.",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Fichiers de modèle copiés.",
|
||||
"common.openOnWebsite": "Ouvrir sur le site web"
|
||||
"common.openOnWebsite": "Ouvrir sur le site web",
|
||||
"common.filter.value": "Filtrer par {0}",
|
||||
"dashboard.media.detailsSlideOver.unmapped.description": "Voulez-vous remapper les métadonnées des fichiers non mappés?",
|
||||
"common.settings": "Paramètres",
|
||||
"common.refreshSettings": "Actualiser les paramètres",
|
||||
"common.pin": "Épingler",
|
||||
"common.unpin": "Détacher",
|
||||
"settings.view.common": "Commun",
|
||||
"settings.view.contentFolders": "Dossiers de contenu",
|
||||
"settings.view.astro": "Astro",
|
||||
"settings.openOnStartup": "Ouvrir le tableau de bord au démarrage",
|
||||
"settings.contentTypes": "Types de contenu",
|
||||
"settings.contentFolders": "Dossiers de contenu",
|
||||
"settings.diagnostic": "Diagnostique",
|
||||
"settings.diagnostic.description": "Vous pouvez exécuter les diagnostics pour vérifier l’ensemble de la configuration de Front Matter CMS.",
|
||||
"settings.diagnostic.link": "Exécuter des diagnostics complets",
|
||||
"settings.commonSettings.website.title": "Paramètres du site Web et SSG",
|
||||
"settings.commonSettings.previewUrl": "URL d’aperçu",
|
||||
"settings.commonSettings.websiteUrl": "URL du site Web",
|
||||
"settings.commonSettings.startCommand": "Commande de démarrage SSG/Framework",
|
||||
"dashboard.contents.overview.pinned": "Épinglé",
|
||||
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Créer des types de contenu pour vos collections de contenu Astro",
|
||||
"dashboard.welcomeScreen.link.documentation.label": "Documentation",
|
||||
"dashboard.configuration.astro.astroContentTypes.empty": "Aucune collection de contenu Astro trouvée.",
|
||||
"dashboard.configuration.astro.astroContentTypes.description": "Les collections de contenu Astro suivantes peuvent être utilisées pour générer un type de contenu."
|
||||
}
|
||||
@@ -336,5 +336,29 @@
|
||||
"dashboard.steps.stepsToGetStarted.template.name": "Usa un modello di configurazione",
|
||||
"dashboard.steps.stepsToGetStarted.template.description": "Seleziona un modello per riempire in anticipo il file frontmatter.json con le impostazioni consigliate.",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.notification": "File del modello copiati.",
|
||||
"common.openOnWebsite": "Apri sul sito web"
|
||||
"common.openOnWebsite": "Apri sul sito web",
|
||||
"common.filter.value": "Filtra per {0}",
|
||||
"dashboard.media.detailsSlideOver.unmapped.description": "Vuoi riassegnare i metadati dei file non mappati?",
|
||||
"common.settings": "Impostazioni",
|
||||
"common.refreshSettings": "Aggiorna impostazioni",
|
||||
"common.pin": "Spilla",
|
||||
"common.unpin": "Rimuovere",
|
||||
"settings.view.common": "Comune",
|
||||
"settings.view.contentFolders": "Cartelle di contenuto",
|
||||
"settings.view.astro": "Astro",
|
||||
"settings.openOnStartup": "Apri dashboard all'avvio",
|
||||
"settings.contentTypes": "Tipi di contenuto",
|
||||
"settings.contentFolders": "Cartelle di contenuto",
|
||||
"settings.diagnostic": "Diagnostico",
|
||||
"settings.diagnostic.description": "È possibile eseguire la diagnostica per verificare l'intera configurazione CMS di Front Matter.",
|
||||
"settings.diagnostic.link": "Eseguire la diagnostica completa",
|
||||
"settings.commonSettings.website.title": "Impostazioni del sito Web e del SSG",
|
||||
"settings.commonSettings.previewUrl": "URL di anteprima",
|
||||
"settings.commonSettings.websiteUrl": "URL del sito web",
|
||||
"settings.commonSettings.startCommand": "Comando di avvio SSG/Framework",
|
||||
"dashboard.contents.overview.pinned": "Appuntato",
|
||||
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Crea tipi di contenuto per le tue raccolte di contenuti Astro",
|
||||
"dashboard.welcomeScreen.link.documentation.label": "Documentazione",
|
||||
"dashboard.configuration.astro.astroContentTypes.empty": "Nessuna raccolta di contenuti Astro trovata.",
|
||||
"dashboard.configuration.astro.astroContentTypes.description": "Le seguenti raccolte di contenuti Astro e possono essere utilizzate per generare un tipo di contenuto."
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
"common.delete": "削除",
|
||||
"common.cancel": "キャンセル",
|
||||
"common.clear": "クリア",
|
||||
"common.apply": "適用",
|
||||
"common.clear.value": "値をクリア",
|
||||
"common.search": "検索",
|
||||
"common.save": "保存",
|
||||
@@ -20,38 +21,85 @@
|
||||
"common.slug": "スラッグ",
|
||||
"common.support": "サポート",
|
||||
"common.remove.value": "{0}を削除",
|
||||
"common.filter": "絞り込み",
|
||||
"common.filter.value": "{0}で絞り込み",
|
||||
"common.error.message": "申し訳ありません。エラーが発生しました。",
|
||||
"common.openOnWebsite": "ウェブサイトで開く",
|
||||
"common.settings": "設定",
|
||||
"common.refreshSettings": "設定の再読み込み",
|
||||
"common.pin": "ピン留めする",
|
||||
"common.unpin": "ピン留めを外す",
|
||||
"common.noResults": "結果なし",
|
||||
"common.error": "申し訳ありません。エラーが発生しました。",
|
||||
"common.yes": "はい",
|
||||
"common.no": "いいえ",
|
||||
"common.openSettings": "設定を開く",
|
||||
"common.back": "戻る",
|
||||
|
||||
"notifications.outputChannel.link": "出力ウィンドウ",
|
||||
"notifications.outputChannel.description": "詳細は{0}を確認してください。",
|
||||
|
||||
"settings.view.common": "一般",
|
||||
"settings.view.contentFolders": "記事フォルダー",
|
||||
"settings.view.astro": "Astro",
|
||||
"settings.openOnStartup": "起動時にダッシュボードを開く",
|
||||
"settings.contentTypes": "記事タイプ",
|
||||
"settings.contentFolders": "記事フォルダー",
|
||||
"settings.diagnostic": "診断",
|
||||
"settings.diagnostic.description": "診断プログラムを実行して、Front Matter CMS構成全体を確認できます。",
|
||||
"settings.diagnostic.link": "完全診断を実行する",
|
||||
|
||||
"settings.commonSettings.website.title": "ウェブサイトとSSGの設定",
|
||||
"settings.commonSettings.previewUrl": "プレビュー用URL",
|
||||
"settings.commonSettings.websiteUrl": "ウェブサイトのURL",
|
||||
"settings.commonSettings.startCommand": "SSG/フレームワーク起動コマンド",
|
||||
|
||||
"developer.title": "開発モード",
|
||||
"developer.reload.title": "ダッシュボードを再読み込み",
|
||||
"developer.reload.label": "再読み込み",
|
||||
"developer.devTools.title": "開発ツールを開く",
|
||||
"developer.devTools.label": "開発ツール",
|
||||
|
||||
"field.required": "必須フィールド",
|
||||
"field.unknown": "不明なフィールド",
|
||||
|
||||
"dashboard.chatbot.answer.answer": "回答",
|
||||
"dashboard.chatbot.answer.resources": "参考",
|
||||
"dashboard.chatbot.answer.warning": "回答が正しくない場合もあります。内容がおかしいと思われる場合には、公式ドキュメントを確認してください。",
|
||||
|
||||
"dashboard.chatbot.chatbot.loading": "アシスタントを起動中",
|
||||
"dashboard.chatbot.chatbot.ready": "準備ができました。何について知りたいですか?",
|
||||
|
||||
"dashboard.chatbot.chatbox.placeholder": "Front Matterの設定方法は?",
|
||||
|
||||
"dashboard.chatbot.header.heading": "Front Matter AIに質問する",
|
||||
"dashboard.chatbot.header.description": "このAIはmendable.aiをベースに公式ドキュメントがチューニングされており、Front Matter関連のクエリを理解してあなたをアシストします。何でも聞いてください!",
|
||||
|
||||
"dashboard.common.choiceButton.open": "オプションを開く",
|
||||
|
||||
"dashboard.contents.contentActions.actionMenuButton.title": "メニュー",
|
||||
"dashboard.contents.contentActions.menuItem.view": "開く",
|
||||
"dashboard.contents.contentActions.alert.title": "削除: {0}",
|
||||
"dashboard.contents.contentActions.alert.description": "本当に\"{0}\"を削除しますか?",
|
||||
|
||||
"dashboard.contents.item.invalidTitle": "<無効なタイトル>",
|
||||
"dashboard.contents.item.invalidDescription": "<無効なディスクリプション>",
|
||||
|
||||
"dashboard.contents.list.title": "タイトル",
|
||||
"dashboard.contents.list.date": "日付",
|
||||
"dashboard.contents.list.status": "ステータス",
|
||||
|
||||
"dashboard.contents.overview.noMarkdown": "Markdownファイルはありません",
|
||||
"dashboard.contents.overview.noFolders": "プロジェクト内の記事用フォルダーを登録して、Front Matterが記事を見つけられるようにしてください。",
|
||||
"dashboard.contents.overview.pinned": "ピン留めアイテム",
|
||||
|
||||
"dashboard.contents.status.draft": "下書き",
|
||||
"dashboard.contents.status.published": "公開済み",
|
||||
"dashboard.contents.status.scheduled": "予約済み",
|
||||
|
||||
"dashboard.dataView.dataForm.modify": "エントリーを編集",
|
||||
"dashboard.dataView.dataForm.add": "エントリーを作成",
|
||||
|
||||
"dashboard.dataView.dataView.select": "データタイプを選択",
|
||||
"dashboard.dataView.dataView.title": "\"{0}\"のエントリー",
|
||||
"dashboard.dataView.dataView.add": "新規エントリーを追加",
|
||||
@@ -60,34 +108,50 @@
|
||||
"dashboard.dataView.dataView.getStarted": "データタイプを選択して開始する",
|
||||
"dashboard.dataView.dataView.noDataFiles": "データファイルが見つかりませんでした",
|
||||
"dashboard.dataView.dataView.getStarted.link": "データファイルの利用方法について確認する",
|
||||
|
||||
"dashboard.dataView.emptyView.heading": "最初にデータタイプを選んでください",
|
||||
|
||||
"dashboard.dataView.sortableItem.editButton.title": "\"{0}\"を編集する",
|
||||
"dashboard.dataView.sortableItem.deleteButton.title": "\"{0}\"を削除する",
|
||||
"dashboard.dataView.sortableItem.alert.title": "データアイテムを削除",
|
||||
"dashboard.dataView.sortableItem.alert.description": "本当にこのデータアイテムを削除しますか?",
|
||||
|
||||
"dashboard.errorView.description": "ダッシュボードを一旦閉じてからやり直してください。",
|
||||
|
||||
"dashboard.header.breadcrumb.home": "ホーム",
|
||||
"dashboard.header.clearFilters.title": "フィルター・グループ・並べ替えを解除",
|
||||
|
||||
"dashboard.header.clearFilters.title": "絞り込み・グループ・並べ替えを解除",
|
||||
|
||||
"dashboard.header.filter.default": "なし",
|
||||
|
||||
"dashboard.header.folders.default": "全ての記事タイプ",
|
||||
"dashboard.header.folders.menuButton.showing": "表示",
|
||||
|
||||
"dashboard.header.grouping.option.none": "なし",
|
||||
"dashboard.header.grouping.option.year": "公開年",
|
||||
"dashboard.header.grouping.option.draft": "下書き/公開済み",
|
||||
"dashboard.header.grouping.menuButton.label": "グループ",
|
||||
|
||||
"dashboard.header.navigation.allArticles": "全ての記事",
|
||||
"dashboard.header.navigation.published": "公開済み",
|
||||
"dashboard.header.navigation.scheduled": "予約済み",
|
||||
"dashboard.header.navigation.draft": "下書き",
|
||||
|
||||
"dashboard.header.header.createContent": "新しい記事を作成",
|
||||
"dashboard.header.header.createByContentType": "記事タイプから作成",
|
||||
"dashboard.header.header.createByTemplate": "テンプレートから作成",
|
||||
|
||||
"dashboard.header.pagination.first": "最初",
|
||||
"dashboard.header.pagination.previous": "前へ",
|
||||
"dashboard.header.pagination.next": "次へ",
|
||||
"dashboard.header.pagination.last": "最後",
|
||||
|
||||
"dashboard.header.paginationStatus.text": "{0}~{1}件目(全{2}件中)を表示中",
|
||||
|
||||
"dashboard.header.projectSwitcher.label": "プロジェクト",
|
||||
|
||||
"dashboard.header.refreshDashboard.label": "ダッシュボードを再読み込み",
|
||||
|
||||
"dashboard.header.sorting.lastModified.asc": "最終更新日(昇順)",
|
||||
"dashboard.header.sorting.lastModified.desc": "最終更新日(降順)",
|
||||
"dashboard.header.sorting.filename.asc": "ファイル名(昇順)",
|
||||
@@ -101,21 +165,27 @@
|
||||
"dashboard.header.sorting.alt.asc": "代替テキスト(昇順)",
|
||||
"dashboard.header.sorting.alt.desc": "代替テキスト(降順)",
|
||||
"dashboard.header.sorting.label": "並べ替え",
|
||||
|
||||
"dashboard.header.startup.label": "起動時に表示",
|
||||
|
||||
"dashboard.header.tabs.contents": "記事",
|
||||
"dashboard.header.tabs.media": "メディア",
|
||||
"dashboard.header.tabs.snippets": "スニペット",
|
||||
"dashboard.header.tabs.data": "データ",
|
||||
"dashboard.header.tabs.taxonomies": "タクソノミー",
|
||||
|
||||
"dashboard.header.viewSwitch.toGrid": "グリッド表示",
|
||||
"dashboard.header.viewSwitch.toList": "リスト表示",
|
||||
|
||||
"dashboard.layout.sponsor.support.msg": "Front Matterをサポートする",
|
||||
"dashboard.layout.sponsor.review.label": "評価する",
|
||||
"dashboard.layout.sponsor.review.msg": "Front Matterを評価する",
|
||||
|
||||
"dashboard.media.common.title": "タイトル",
|
||||
"dashboard.media.common.caption": "キャプション",
|
||||
"dashboard.media.common.alt": "代替テキスト",
|
||||
"dashboard.media.common.size": "サイズ",
|
||||
|
||||
"dashboard.media.dialog.title": "ファイルの詳細",
|
||||
"dashboard.media.panel.close": "パネルを閉じる",
|
||||
"dashboard.media.metadata.panel.title": "メタデータを編集",
|
||||
@@ -127,8 +197,10 @@
|
||||
"dashboard.media.metadata.panel.form.information.modifiedDate": "最終更新日",
|
||||
"dashboard.media.metadata.panel.form.information.dimensions": "ディメンション",
|
||||
"dashboard.media.metadata.panel.form.information.folder": "フォルダー",
|
||||
|
||||
"dashboard.media.folderCreation.hexo.create": "Assetフォルダーを作成",
|
||||
"dashboard.media.folderCreation.folder.create": "新規フォルダーを作成",
|
||||
|
||||
"dashboard.media.item.quickAction.insert.field": "この画像を\"{0}\"フィールドに追加",
|
||||
"dashboard.media.item.quickAction.insert.markdown": "画像をMarkdown記法で挿入",
|
||||
"dashboard.media.item.quickAction.copy.path": "ファイルパスをコピー",
|
||||
@@ -138,6 +210,7 @@
|
||||
"dashboard.media.item.menuItem.reveal.media": "メディアの場所を表示",
|
||||
"dashboard.media.item.infoDialog.snippet.description": "このメディアに適用するメディア用スニペットを選択してください。",
|
||||
"dashboard.media.item.alert.delete.description": "本当にこのファイルを {0} から削除しますか?",
|
||||
|
||||
"dashboard.media.media.description": "記事に挿入するメディアファイルを選択してください。",
|
||||
"dashboard.media.media.dragAndDrop": "デスクトップから画像をドラッグ&ドロップして、アップロード後に選択することもできます。",
|
||||
"dashboard.media.media.folder.upload": "{0}にアップロードする",
|
||||
@@ -145,13 +218,17 @@
|
||||
"dashboard.media.media.placeholder": "メディアファイルはありません。Shiftキーを押しながら、新規ファイルをドラック&ドロップで追加することができます。",
|
||||
"dashboard.media.media.contentFolder": "記事フォルダー",
|
||||
"dashboard.media.media.publicFolder": "Publicフォルダー",
|
||||
|
||||
"dashboard.media.mediaHeaderTop.searchbox.placeholder": "フォルダー内を検索",
|
||||
|
||||
"dashboard.media.mediaSnippetForm.formDialog.title": "メディアを挿入: {0}",
|
||||
"dashboard.media.mediaSnippetForm.formDialog.description": "メディアファイル\"{0}\"を現在の記事に挿入する",
|
||||
|
||||
"dashboard.preview.input.placeholder": "URLを入力",
|
||||
"dashboard.preview.button.navigate.title": "ナビゲーション",
|
||||
"dashboard.preview.button.refresh.title": "更新",
|
||||
"dashboard.preview.button.open.title": "開く",
|
||||
|
||||
"dashboard.snippetsView.item.quickAction.editSnippet": "スニペットを編集",
|
||||
"dashboard.snippetsView.item.quickAction.deleteSnippet": "スニペットを削除",
|
||||
"dashboard.snippetsView.item.quickAction.viewSnippet": "スニペットファイルの表示",
|
||||
@@ -161,6 +238,7 @@
|
||||
"dashboard.snippetsView.item.edit.formDialog.description": "\"{0}\"スニペットの編集",
|
||||
"dashboard.snippetsView.item.alert.title": "\"{0}\"スニペットを削除",
|
||||
"dashboard.snippetsView.item.alert.description": "本当に\"{0}\"スニペットを削除しますか?",
|
||||
|
||||
"dashboard.snippetsView.newForm.snippetInput.title.placeholder": "スニペットのタイトル",
|
||||
"dashboard.snippetsView.newForm.snippetInput.description.label": "概要",
|
||||
"dashboard.snippetsView.newForm.snippetInput.description.placeholder": "スニペットの概要",
|
||||
@@ -171,12 +249,14 @@
|
||||
"dashboard.snippetsView.newForm.snippetInput.isMediaSnippet.checkbox.description": "このスニペットをメディアファイル挿入時に利用",
|
||||
"dashboard.snippetsView.newForm.snippetInput.docsButton.title": "メディア用スニペットのプレースホルダーについて読む",
|
||||
"dashboard.snippetsView.newForm.snippetInput.docsButton.description": "スニペットに設定可能なプレースホルダーをドキュメントで確認",
|
||||
|
||||
"dashboard.snippetsView.snippets.ariaLabel": "スニペット ヘッダー",
|
||||
"dashboard.snippetsView.snippets.button.create": "新規スニペットを作成",
|
||||
"dashboard.snippetsView.snippets.select.description": "挿入するスニペットを選択してください。",
|
||||
"dashboard.snippetsView.snippets.empty.message": "スニペットはありません",
|
||||
"dashboard.snippetsView.snippets.readMore": "スニペットの使い方を読む",
|
||||
"dashboard.snippetsView.snippets.formDialog.title": "新規スニペットを作成",
|
||||
|
||||
"dashboard.steps.stepsToGetStarted.button.addFolder.title": "Front Matterに記事フォルダーとして登録",
|
||||
"dashboard.steps.stepsToGetStarted.initializeProject.name": "プロジェクトの初期設定",
|
||||
"dashboard.steps.stepsToGetStarted.initializeProject.description": "Front Matter CMSに必要な設定ファイルを作成します。クリックして開始してください。",
|
||||
@@ -184,20 +264,32 @@
|
||||
"dashboard.steps.stepsToGetStarted.framework.description": "静的サイトジェネレーターまたはフレームワークを選択して、必要なセッティングを追加します。",
|
||||
"dashboard.steps.stepsToGetStarted.framework.select": "フレームワークを選択",
|
||||
"dashboard.steps.stepsToGetStarted.framework.select.other": "その他",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.name": "アセットフォルダーを登録",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.description": "記事のメディアファイルを保存するためのフォルダーを選択してください。",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "'public'フォルダーを使用する",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Astroアセットフォルダー(src/assets)を使用する",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "別のフォルダーを指定する場合は、frontmatter.jsonファイルへ手動で設定可能です。",
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.name": "記事ファイルのフォルダーを登録",
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.description": "記事ファイルの保存フォルダーを追加してください。フォルダーが設定されると、フォルダー内の記事ファイルがFront Matterでリスト化され、新規記事ファイルを追加できるようになります。",
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.description": "記事ファイルの保存フォルダーを追加してください。フォルダーが設定されると、フォルダー内の記事ファイルがFront Matterでリスト化され、新規の記事ファイルを追加できるようになります。",
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.label": "記事ファイルを含むフォルダー",
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "フォルダーの登録は、エクスプローラーでフォルダー名を右クリックして「フォルダーを登録」を選択することでも可能です。",
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "エクスプローラーでフォルダー名を右クリックして「フォルダーを登録」を選択する方法でも、フォルダーの登録が可能です。",
|
||||
"dashboard.steps.stepsToGetStarted.tags.name": "全てのタグとカテゴリーをインポート(オプション)",
|
||||
"dashboard.steps.stepsToGetStarted.tags.description": "Front Matterに記事用フォルダーが登録されました。記事から全てのタグとカテゴリーをインポートしますか?",
|
||||
"dashboard.steps.stepsToGetStarted.showDashboard.name": "ダッシュボードを開く",
|
||||
"dashboard.steps.stepsToGetStarted.showDashboard.description": "全ての設定が終わると、ダッシュボードが表示できるようになります。",
|
||||
"dashboard.steps.stepsToGetStarted.template.name": "設定用のテンプレートを使用する",
|
||||
"dashboard.steps.stepsToGetStarted.template.description": "おすすめの設定のテンプレートを選択して、frontmatter.jsonに反映させます。",
|
||||
"dashboard.steps.stepsToGetStarted.template.warning": "選択によりプロジェクトの構成にテンプレートが適用され、この設定画面は終了します。",
|
||||
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Astroコンテンツコレクションのコンテンツタイプを作成する",
|
||||
|
||||
"dashboard.taxonomyView.button.add.title": "\"{0}\"をタクソノミーに追加",
|
||||
"dashboard.taxonomyView.button.edit.title": "\"{0}\"を編集",
|
||||
"dashboard.taxonomyView.button.merge.title": "\"{0}\"をマージ",
|
||||
"dashboard.taxonomyView.button.move.title": "他のタクソノミーへ移行",
|
||||
"dashboard.taxonomyView.button.delete.title": "\"{0}\"を削除",
|
||||
|
||||
"dashboard.taxonomyView.taxonomyLookup.button.title": "{1}\"{0}\"の記事一覧を表示",
|
||||
|
||||
"dashboard.taxonomyView.taxonomyManager.description": "サイト内{0}の新規作成・編集・コマンド",
|
||||
"dashboard.taxonomyView.taxonomyManager.button.create": "新規{0}を作成",
|
||||
"dashboard.taxonomyView.taxonomyManager.table.heading.name": "名前",
|
||||
@@ -205,17 +297,25 @@
|
||||
"dashboard.taxonomyView.taxonomyManager.table.heading.action": "コマンド",
|
||||
"dashboard.taxonomyView.taxonomyManager.table.row.empty": "{0}はありません",
|
||||
"dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "設定ファイルに見つかりません",
|
||||
"dashboard.taxonomyView.taxonomyManager.filterInput.placeholder": "絞り込み",
|
||||
|
||||
"dashboard.taxonomyView.taxonomyTagging.pageTitle": "タクソノミー {0} をリマッピング",
|
||||
"dashboard.taxonomyView.taxonomyTagging.checkbox": "ページにタクソノミー{0}を付ける",
|
||||
|
||||
"dashboard.taxonomyView.taxonomyView.navigationBar.title": "タクソノミーを選択",
|
||||
"dashboard.taxonomyView.taxonomyView.button.import": "タクソノミーをインポート",
|
||||
"dashboard.taxonomyView.taxonomyView.navigationItem.tags": "タグ",
|
||||
"dashboard.taxonomyView.taxonomyView.navigationItem.categories": "カテゴリー",
|
||||
|
||||
"dashboard.unkownView.title": "表示出来る画面がありません",
|
||||
"dashboard.unkownView.description": "存在しない画面で終了してしまったようです。ダッシュボードを再度開きなおしてください。",
|
||||
|
||||
"dashboard.welcomeScreen.title": "Front Matterで静的サイトを管理しよう",
|
||||
"dashboard.welcomeScreen.thanks": "Front Matterをお使いいただきありがとうございます!",
|
||||
"dashboard.welcomeScreen.description": "私たちはFront Matterをより使いやすくするため、日々努力しています。ご質問やご提案など、GitHubまでお気軽にお問い合わせください。",
|
||||
"dashboard.welcomeScreen.link.github.title": "GitHub",
|
||||
"dashboard.welcomeScreen.link.github.label": "GitHub / ドキュメント",
|
||||
"dashboard.welcomeScreen.link.github.label": "GitHub",
|
||||
"dashboard.welcomeScreen.link.documentation.label": "ドキュメント",
|
||||
"dashboard.welcomeScreen.link.sponsor.title": "スポンサーになる",
|
||||
"dashboard.welcomeScreen.link.sponsor.label": "スポンサー",
|
||||
"dashboard.welcomeScreen.link.review.title": "評価する",
|
||||
@@ -223,41 +323,66 @@
|
||||
"dashboard.welcomeScreen.actions.heading": "以下の手順に従って、この拡張機能をスタートさせてください。",
|
||||
"dashboard.welcomeScreen.actions.description": "サイドパネルからもFront Matterを利用できます。サイドパネルでは、各コンテンツに合った具体的なコマンドが実行可能です。",
|
||||
"dashboard.welcomeScreen.actions.thanks": "Front Matterをお楽しみください!",
|
||||
|
||||
"dashboard.media.detailsSlideOver.unmapped.description": "未割り当てのファイルのメタデータを再マップしますか?",
|
||||
|
||||
"dashboard.configuration.astro.astroContentTypes.empty": "Astroコンテンツコレクションが見つかりません。",
|
||||
"dashboard.configuration.astro.astroContentTypes.description": "以下のAstroコンテンツコレクションは、コンテンツタイプを生成するために使用できます。",
|
||||
|
||||
"panel.contentType.contentTypeValidator.title": "記事タイプ",
|
||||
"panel.contentType.contentTypeValidator.hint": "記事タイプのフィールドは設定と異なります。この記事の記事タイプを、作成・更新または設定しますか?",
|
||||
"panel.contentType.contentTypeValidator.button.create": "新しい記事タイプを作成",
|
||||
"panel.contentType.contentTypeValidator.button.add": "この記事タイプの設定にないフィールドを追加",
|
||||
"panel.contentType.contentTypeValidator.button.change": "このファイルの記事タイプを変更",
|
||||
|
||||
"panel.dataBlock.dataBlockField.group.selected.edit": "編集: {0}",
|
||||
"panel.dataBlock.dataBlockField.group.selected.create": "新規{0}を作成",
|
||||
"panel.dataBlock.dataBlockField.group.select": "グループを選択",
|
||||
"panel.dataBlock.dataBlockField.add": "{0}を追加",
|
||||
|
||||
"panel.dataBlock.dataBlockRecord.edit": "レコードを編集",
|
||||
"panel.dataBlock.dataBlockRecord.delete": "レコードを削除",
|
||||
|
||||
"panel.dataBlock.dataBlockRecords.label": "レコード",
|
||||
|
||||
"panel.dataBlock.dataBlockSelector.label": "ブロックタイプ",
|
||||
|
||||
"panel.errorBoundary.fieldBoundary.label": "フィールドの表示に失敗しました",
|
||||
|
||||
"panel.fields.choiceField.select": "{0}を選択",
|
||||
"panel.fields.choiceField.clear": "値をクリア",
|
||||
|
||||
"panel.fields.contentTypeRelationshipField.loading": "読み込み中...",
|
||||
|
||||
"panel.fields.dateTimeField.button.pick": "日付を選択",
|
||||
"panel.fields.dateTimeField.time": "時刻",
|
||||
|
||||
"panel.fields.fieldMessage.required": "{0}は必須フィールドです",
|
||||
|
||||
"panel.fields.fileField.delete": "ファイルを削除",
|
||||
"panel.fields.fileField.add": "{0}を追加",
|
||||
|
||||
"panel.fields.imageFallback.label": "画像を読み込めませんでした。",
|
||||
|
||||
"panel.fields.listField.edit": "レコードを編集",
|
||||
"panel.fields.listField.delete": "レコードを削除",
|
||||
|
||||
"panel.fields.previewImage.remove": "画像を削除",
|
||||
|
||||
"panel.fields.previewImageField.add": "{0}を追加",
|
||||
|
||||
"panel.fields.slugField.update": "更新が可能",
|
||||
"panel.fields.slugField.generate": "スラッグを生成",
|
||||
|
||||
"panel.fields.textField.ai.message": "Front Matter AIに{0}を提案してもらう",
|
||||
"panel.fields.textField.ai.generate": "提案を生成中...",
|
||||
"panel.fields.textField.loading": "読み込み中",
|
||||
"panel.fields.textField.limit": "値が上限を超えています。{0}",
|
||||
|
||||
"panel.fields.wrapperField.unknown": "不明なフィールド: {0}",
|
||||
|
||||
"panel.actions.title": "コマンド",
|
||||
|
||||
"panel.articleDetails.title": "詳細",
|
||||
"panel.articleDetails.type": "項目",
|
||||
"panel.articleDetails.total": "数",
|
||||
@@ -266,15 +391,18 @@
|
||||
"panel.articleDetails.internalLinks": "内部リンク",
|
||||
"panel.articleDetails.externalLinks": "外部リンク",
|
||||
"panel.articleDetails.images": "画像",
|
||||
|
||||
"panel.baseView.initialize": "プロジェクトの初期設定",
|
||||
"panel.baseView.actions.title": "コマンド",
|
||||
"panel.baseView.action.openDashboard": "ダッシュボードを開く",
|
||||
"panel.baseView.action.openPreview": "プレビューを開く",
|
||||
"panel.baseView.action.createContent": "新しい記事を作成",
|
||||
"panel.baseView.empty": "他の操作を見るには、ファイルを開いてください。",
|
||||
|
||||
"panel.fileList.label.singular": "ファイル",
|
||||
"panel.fileList.label.plural": "ファイル",
|
||||
|
||||
"panel.folderAndFiles.title": "最近の更新",
|
||||
|
||||
"panel.globalSettings.title": "一般設定",
|
||||
"panel.globalSettings.action.modifiedDate.label": "最終更新日",
|
||||
"panel.globalSettings.action.modifiedDate.description": "最終更新日を自動で更新",
|
||||
@@ -284,7 +412,9 @@
|
||||
"panel.globalSettings.action.preview.placeholder": "例: {0}",
|
||||
"panel.globalSettings.action.server.label": "ローカルサーバーのコマンド",
|
||||
"panel.globalSettings.action.server.placeholder": "例: {0}",
|
||||
|
||||
"panel.metadata.title": "メタデータ",
|
||||
|
||||
"panel.otherActions.title": "他のコマンド",
|
||||
"panel.otherActions.writingSettings.enabled": "ライティング設定が有効",
|
||||
"panel.otherActions.writingSettings.disabled": "ライティング設定を有効化",
|
||||
@@ -295,17 +425,23 @@
|
||||
"panel.otherActions.documentation": "ドキュメントを開く",
|
||||
"panel.otherActions.settings": "設定方法の概要",
|
||||
"panel.otherActions.issue": "問題を報告",
|
||||
|
||||
"panel.preview.title": "プレビューを表示",
|
||||
|
||||
"panel.publishAction.publish": "公開",
|
||||
"panel.publishAction.unpublish": "下書きに戻す",
|
||||
"panel.seoDetails.recommended": "🚧: Recommended",
|
||||
|
||||
"panel.seoDetails.recommended": "推奨",
|
||||
|
||||
"panel.seoKeywordInfo.density": "キーワード出現率 {0} *",
|
||||
"panel.seoKeywordInfo.validInfo.label": "見出しへの利用",
|
||||
"panel.seoKeywordInfo.validInfo.content": "本文",
|
||||
|
||||
"panel.seoKeywords.title": "キーワード",
|
||||
"panel.seoKeywords.header.keyword": "キーワード",
|
||||
"panel.seoKeywords.header.details": "詳細",
|
||||
"panel.seoKeywords.density": "* キーワード出現率は通常1~1.5%で十分です。",
|
||||
|
||||
"panel.seoStatus.title": "推奨項目",
|
||||
"panel.seoStatus.header.property": "項目",
|
||||
"panel.seoStatus.header.length": "長さ",
|
||||
@@ -315,26 +451,270 @@
|
||||
"panel.seoStatus.seoFieldInfo.article": "記事の長さ",
|
||||
"panel.seoStatus.collapsible.title": "SEO対策",
|
||||
"panel.seoStatus.required": "{0}か{1}は必須です。",
|
||||
|
||||
"panel.slugAction.title": "スラッグを最適化",
|
||||
|
||||
"panel.spinner.loading": "読み込み中...",
|
||||
|
||||
"panel.startServerbutton.start": "サーバーを起動",
|
||||
"panel.startServerbutton.stop": "サーバーを停止",
|
||||
|
||||
"panel.tag.add": "\"{0}\"を設定に追加",
|
||||
|
||||
"panel.tagPicker.inputPlaceholder.empty": "{0}を選択",
|
||||
"panel.tagPicker.inputPlaceholder.disabled": "{0}の上限数に達しました",
|
||||
"panel.tagPicker.ai.suggest": "Front Matter AIに{0}を提案してもらう",
|
||||
"panel.tagPicker.ai.generating": "提案を生成中...",
|
||||
"panel.tagPicker.limit": "上限数: {0}",
|
||||
"panel.tagPicker.unkown": "不明なタグを追加",
|
||||
|
||||
"panel.tags.tag.warning": "\"{0}\"は設定に保存されていません。削除すると復元できませんのでご注意ください。",
|
||||
|
||||
"panel.viewPanel.mediaInsert": "ダッシュボードのメディア管理画面から、利用したい画像を選択してください。",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.name": "アセットフォルダーの場所はどこですか?",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.description": "記事のメディアファイルを保存するためのフォルダーを選択してください。",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.public.title": "'public'フォルダーを使用する",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.assets.title": "Astroアセットフォルダー(src/assets)を使用する",
|
||||
"dashboard.steps.stepsToGetStarted.assetsFolder.other.description": "別のフォルダを設定する場合は、frontmatter.jsonファイルで手動で行うことができます。",
|
||||
"dashboard.steps.stepsToGetStarted.template.name": "設定テンプレートを使用する",
|
||||
"dashboard.steps.stepsToGetStarted.template.description": "おすすめの設定でfrontmatter.jsonファイルを事前に埋めるテンプレートを選択します。",
|
||||
|
||||
"commands.article.setDate.error": "日付の表示形式の解析中に何らかの問題が発生しました。\"{0}\"の設定を確認してください。",
|
||||
"commands.article.updateSlug.error": "ファイル名を変更できませんでした。: {0}",
|
||||
|
||||
"commands.cache.cleared": "キャッシュがクリアされました。",
|
||||
|
||||
"commands.chatbot.title": "何でも聞いてください",
|
||||
|
||||
"commands.content.option.contentType.label": "記事タイプから記事を作成",
|
||||
"commands.content.option.contentType.description": "設定済みの記事タイプを選択して記事を作成",
|
||||
"commands.content.option.template.label": "テンプレートから記事を作成",
|
||||
"commands.content.option.template.description": "設定済みのテンプレートを選択して記事を作成",
|
||||
"commands.content.quickPick.title": "記事の作成",
|
||||
"commands.content.quickPick.placeholder": "記事の作成方法を選択してください。",
|
||||
|
||||
"commands.dashboard.title": "ダッシュボード",
|
||||
|
||||
"commands.folders.addMediaFolder.inputBox.title": "メディアフォルダーの追加",
|
||||
"commands.folders.addMediaFolder.inputBox.prompt": "新規作成するフォルダー名を入力してください。(\"/\"で多階層のフォルダーを作成可能です)",
|
||||
"commands.folders.addMediaFolder.noFolder.warning": "フォルダー名が入力されていません。",
|
||||
"commands.folders.create.folderExists.warning": "フォルダーは既に登録済です。",
|
||||
"commands.folders.create.input.title": "フォルダーを登録する",
|
||||
"commands.folders.create.input.prompt": "登録するフォルダー名を指定してください。",
|
||||
"commands.folders.create.input.placeholder": "フォルダー名",
|
||||
"commands.folders.create.success": "フォルダーが登録されました。",
|
||||
"commands.folders.getWorkspaceFolder.workspaceFolderPick.placeholder": "Front Matterを利用するメインのワークスペースのフォルダーを選択してください。",
|
||||
"commands.folders.get.notificationError.title": "\"{0}\"フォルダーが存在しません。このフォルダーを設定から削除してください。",
|
||||
"commands.folders.get.notificationError.remove.action": "フォルダー設定を削除",
|
||||
"commands.folders.get.notificationError.create.action": "フォルダーを作成",
|
||||
|
||||
"commands.preview.panel.title": "プレビュー: {0}",
|
||||
"commands.preview.askUserToPickFolder.title": "プレビュー用の記事フォルダーを選択してください。",
|
||||
|
||||
"commands.project.initialize.success": "プロジェクトが初期化されました。",
|
||||
"commands.project.switchProject.title": "どのプロジェクトに切り替えますか?",
|
||||
"commands.project.createSampleTemplate.info": "テンプレートサンプルを作成しました。",
|
||||
|
||||
"commands.settings.create.input.prompt": "設定に追加したい{0}の値を入力してください。",
|
||||
"commands.settings.create.input.placeholder": "{0}の名前",
|
||||
"commands.settings.create.warning": "入力された {0} は既に存在しています。",
|
||||
"commands.settings.create.quickPick.placeholder": "新規{0}をページに追加しますか?",
|
||||
"commands.settings.export.progress.title": "{0}: タグとカテゴリーをエクスポートしています。",
|
||||
"commands.settings.export.progress.success": "エクスポートが完了しました。タグ: {0} - カテゴリー: {1}",
|
||||
"commands.settings.remap.quickpick.title": "再構成",
|
||||
"commands.settings.remap.quickpick.placeholder": "何を再構成しますか?",
|
||||
"commands.settings.remap.noTaxonomy.warning": "編集可能な{0}が存在しません。",
|
||||
"commands.settings.remap.selectTaxonomy.placeholder": "編集したい{0}を選択してください。",
|
||||
"commands.settings.remap.newOption.input.prompt": "\"{1}\"を再構成します。変更したい{0}値を入力してください。全ての記事から{0}を削除する場合は空欄にしてください。",
|
||||
"commands.settings.remap.newOption.input.placeholder": "{0}名",
|
||||
"commands.settings.remap.delete.placeholder": "{1} {0}を削除しますか?",
|
||||
|
||||
"commands.statusListener.verifyRequiredFields.diagnostic.emptyField": "フィールド {0} は必須です。値を入力してください。",
|
||||
"commands.statusListener.verifyRequiredFields.notification.error": "以下の必須のフィールドに値が入力されていません。: {0}",
|
||||
|
||||
"commands.template.generate.input.title": "テンプレート名",
|
||||
"commands.template.generate.input.prompt": "テンプレート名を入力してください。",
|
||||
"commands.template.generate.input.placeholder": "article",
|
||||
"commands.template.generate.noTitle.warning": "テンプレート名が入力されていません。",
|
||||
"commands.template.generate.keepContents.title": "記事本文の反映",
|
||||
"commands.template.generate.keepContents.placeholder": "記事本文をテンプレートにそのまま残しますか?",
|
||||
"commands.template.generate.keepContents.noOption.warning": "記事本文を残すかどうかの選択がされませんでした。",
|
||||
"commands.template.generate.keepContents.success": "{0}フォルダー内にテンプレートが作成されました。",
|
||||
"commands.template.getTemplates.warning": "テンプレートがありません。",
|
||||
"commands.template.create.folderPath.warning": "取得されたプロジェクトフォルダーのパスが不正です。",
|
||||
"commands.template.create.noTemplates.warning": "テンプレートがありません。",
|
||||
"commands.template.create.selectTemplate.title": "テンプレートの選択",
|
||||
"commands.template.create.selectTemplate.placeholder": "記事テンプレートを選択してください。",
|
||||
"commands.template.create.selectTemplate.noTemplate.warning": "テンプレートが選択されていません。",
|
||||
"commands.template.create.selectTemplate.notFound.warning": "記事テンプレートが見つかりません。",
|
||||
"commands.template.create.success": "新規記事が有効になりました。",
|
||||
|
||||
"commands.wysiwyg.command.unorderedList.label": "順序なしリスト",
|
||||
"commands.wysiwyg.command.unorderedList.detail": "順序なしリストを追加",
|
||||
"commands.wysiwyg.command.orderedList.label": "順序付きリスト",
|
||||
"commands.wysiwyg.command.orderedList.detail": "順序付きリストを追加",
|
||||
"commands.wysiwyg.command.taskList.label": "タスクリスト",
|
||||
"commands.wysiwyg.command.taskList.detail": "タスクリストを追加",
|
||||
"commands.wysiwyg.command.code.label": "コード",
|
||||
"commands.wysiwyg.command.code.detail": "インラインコードスニペットを追加",
|
||||
"commands.wysiwyg.command.codeblock.label": "コードブロック",
|
||||
"commands.wysiwyg.command.codeblock.detail": "コードブロックを追加",
|
||||
"commands.wysiwyg.command.blockquote.label": "ブロック引用要素",
|
||||
"commands.wysiwyg.command.blockquote.detail": "ブロック引用要素を追加",
|
||||
"commands.wysiwyg.command.strikethrough.label": "取り消し線",
|
||||
"commands.wysiwyg.command.strikethrough.detail": "取り消し線付きテキストを追加",
|
||||
"commands.wysiwyg.quickPick.title": "WYSIWYG オプション",
|
||||
"commands.wysiwyg.quickPick.placeholder": "どのマークアップ要素を挿入しますか?",
|
||||
"commands.wysiwyg.addHyperlink.hyperlinkInput.title": "WYSIWYG ハイパーリンク",
|
||||
"commands.wysiwyg.addHyperlink.hyperlinkInput.prompt": "URLを入力",
|
||||
"commands.wysiwyg.addHyperlink.textInput.title": "WYSIWYG テキスト",
|
||||
"commands.wysiwyg.addHyperlink.textInput.prompt": "ハイパーリンクのテキストを入力",
|
||||
"commands.wysiwyg.insertText.heading.input.title": "見出し",
|
||||
"commands.wysiwyg.insertText.heading.input.placeholder": "見出しのレベルを選択",
|
||||
|
||||
"helpers.articleHelper.createContent.pageBundle.error": "{0}という名称のページバンドルは、既に {1} に存在しています。",
|
||||
"helpers.articleHelper.createContent.contentExists.warning": "同タイトルの記事が存在します。別のタイトルを付けてください。",
|
||||
"helpers.articleHelper.processCustomPlaceholders.placeholder.error": "プレースホルダー{0}の生成中にエラーが発生しました。",
|
||||
"helpers.articleHelper.parseFile.diagnostic.error": "{0}のfront matterの解析中にエラーが発生しました。",
|
||||
|
||||
"helpers.contentType.generate.noFrontMatter.error": "記事タイプの生成に必要なfront matterデータがありません。",
|
||||
"helpers.contentType.generate.override.quickPick.title": "デフォルトの記事タイプを上書き",
|
||||
"helpers.contentType.generate.override.quickPick.placeholder": "この記事のフィールド設定を、デフォルトの記事タイプのフィールド設定に上書きしますか?",
|
||||
"helpers.contentType.generate.contentTypeInput.title": "記事タイプを生成",
|
||||
"helpers.contentType.generate.contentTypeInput.prompt": "新規作成したい記事タイプ名を入力してください。",
|
||||
"helpers.contentType.generate.contentTypeInput.validation.enterName": "記事タイプ名を入力してください。",
|
||||
"helpers.contentType.generate.contentTypeInput.validation.nameExists": "この記事タイプ名は既に存在しています。",
|
||||
"helpers.contentType.generate.noContentTypeName.warning": "記事タイプが選択されませんでした。",
|
||||
"helpers.contentType.generate.pageBundle.quickPick.title": "ページバンドルとして使用",
|
||||
"helpers.contentType.generate.pageBundle.quickPick.placeHolder": "この記事タイプをページバンドルとして使用しますか?",
|
||||
"helpers.contentType.generate.updated.success": "記事タイプ {0} を更新しました。",
|
||||
"helpers.contentType.generate.generated.success": "記事タイプ {0} を生成しました。",
|
||||
"helpers.contentType.addMissingFields.noFrontMatter.warning": "追加すべきfront matterデータはありません。",
|
||||
"helpers.contentType.addMissingFields.updated.success": "記事タイプ {0} を更新しました。",
|
||||
"helpers.contentType.setContentType.noFrontMatter.warning": "記事タイプの設定が必要なfront matterデータが見つかりません。",
|
||||
"helpers.contentType.setContentType.quickPick.title": "記事タイプを選択",
|
||||
"helpers.contentType.setContentType.quickPick.placeholder": "どの記事タイプを使用しますか?",
|
||||
"helpers.contentType.create.allowSubContent.title": "サブコンテンツとしての要否",
|
||||
"helpers.contentType.create.allowSubContent.placeHolder": "新規記事をサブコンテンツとして作成しますか?",
|
||||
"helpers.contentType.create.allowSubContent.showOpenDialog.openLabel": "フォルダーを選択",
|
||||
"helpers.contentType.create.allowSubContent.showOpenDialog.title": "新規記事用のフォルダーを選択してください。",
|
||||
"helpers.contentType.create.pageBundle.title": "ページバンドルとして要否",
|
||||
"helpers.contentType.create.pageBundle.placeHolder": "ページバンドルとして記事を作成しますか?",
|
||||
"helpers.contentType.create.progress.title": "{0}: 記事ファイルを作成中...",
|
||||
"helpers.contentType.create.success": "記事ファイルを作成しました。",
|
||||
"helpers.contentType.verify.warning": "記事タイプ・コマンドは、このモードでは有効になっていません。",
|
||||
|
||||
"helpers.customScript.executing": "実行中: {0}",
|
||||
"helpers.customScript.singleRun.article.warning": "{0}: Article couldn't be retrieved.",
|
||||
"helpers.customScript.bulkRun.noFiles.warning": "{0}: ファイルが見つかりません。",
|
||||
"helpers.customScript.runMediaScript.noFolder.warning": "{0}: フォルダーまたはメディアへのパスの指定がされていません。",
|
||||
"helpers.customScript.showOutput.frontMatter.success": "{0}: front matter updated.",
|
||||
"helpers.customScript.showOutput.copyOutput.action": "出力結果をコピー",
|
||||
"helpers.customScript.showOutput.success": "{0}: カスタムスクリプトを実行しました。",
|
||||
"helpers.customScript.validateCommand.error": "不正なコマンド: {0}",
|
||||
|
||||
"helpers.dataFileHelper.process.error": "データファイルの実行中に何らかの問題が発生しました。",
|
||||
|
||||
"helpers.extension.getVersion.changelog": "変更履歴を確認する",
|
||||
"helpers.extension.getVersion.starIt": "⭐️を付ける",
|
||||
"helpers.extension.getVersion.update.notification": "{0} が v{1} に更新されました!新機能をチェックしてください!",
|
||||
"helpers.extension.migrateSettings.deprecated.warning": "\"{0}\"及び\"{1}\"の設定は非推奨になりました。代わりに\"isPublishDate\"と\"isModifiedDate\"の日付フィールドを使用してください。",
|
||||
"helpers.extension.migrateSettings.deprecated.warning.hide": "非表示にする",
|
||||
"helpers.extension.migrateSettings.deprecated.warning.seeGuide": "移行ガイドを読む",
|
||||
"helpers.extension.migrateSettings.templates.quickPick.title": "{0} - テンプレート",
|
||||
"helpers.extension.migrateSettings.templates.quickPick.placeholder": "テンプレート機能の使用を継続しますか?",
|
||||
"helpers.extension.checkIfExtensionCanRun.warning": "Front MatterのBETA版は安定版がインストールされている場合は利用できません。BETA版のみがインストールされていることを確認してください。",
|
||||
|
||||
"helpers.mediaHelper.saveFile.folder.error": "選択されたフォルダーが見つかりません。",
|
||||
"helpers.mediaHelper.saveFile.file.uploaded.success": "ファイル{0}が{1}へアップロードされました。",
|
||||
"helpers.mediaHelper.saveFile.file.uploaded.failed": "申し訳ありません、{0}のアップロード中にエラーが発生しました。",
|
||||
"helpers.mediaHelper.deleteFile.file.deletion.failed": "申し訳ありません、{0}の削除中にエラーが発生しました。",
|
||||
|
||||
"helpers.mediaLibrary.remove.warning": "その場所にはファイル\"{0}\"が既に存在しています。",
|
||||
"helpers.mediaLibrary.remove.error": "申し訳ありません、\"{0}\"を\"{1}\"へのアップロード中にエラーが発生しました。",
|
||||
|
||||
"helpers.openFileInEditor.error": "ファイルを開けません。",
|
||||
|
||||
"helpers.questions.contentTitle.aiInput.title": "タイトルまたはディスクリプション",
|
||||
"helpers.questions.contentTitle.aiInput.prompt": "どんな内容について書きたいですか?",
|
||||
"helpers.questions.contentTitle.aiInput.placeholder": "どんな内容について書きたいですか?",
|
||||
"helpers.questions.contentTitle.aiInput.quickPick.title.separator": "タイトル/ディスクリプション",
|
||||
"helpers.questions.contentTitle.aiInput.quickPick.ai.separator": "AI生成によるタイトル",
|
||||
"helpers.questions.contentTitle.aiInput.select.title": "タイトルを選択",
|
||||
"helpers.questions.contentTitle.aiInput.select.placeholder": "記事に付けるタイトルを選択",
|
||||
"helpers.questions.contentTitle.aiInput.failed": "AIタイトルの取得に失敗しました。自分で作成するか、後からもう一度試してください。",
|
||||
"helpers.questions.contentTitle.aiInput.warning": "記事タイトルの入力がされていません。",
|
||||
"helpers.questions.contentTitle.titleInput.title": "記事タイトル",
|
||||
"helpers.questions.contentTitle.titleInput.prompt": "新しい記事のタイトルを入力してください。",
|
||||
"helpers.questions.contentTitle.titleInput.placeholder": "タイトル",
|
||||
"helpers.questions.contentTitle.titleInput.warning": "記事タイトルの入力がされていません。",
|
||||
"helpers.questions.selectContentFolder.quickPick.title": "フォルダーを選択",
|
||||
"helpers.questions.selectContentFolder.quickPick.placeholder": "記事の保存先を選択してください。",
|
||||
"helpers.questions.selectContentFolder.quickPick.noSelection.warning": "記事の保存先が選択されていません。",
|
||||
"helpers.questions.selectContentType.noContentType.warning": "記事タイプが見つかりません。先に記事タイプを作成してから記事を作成してください。",
|
||||
"helpers.questions.selectContentType.quickPick.title": "記事タイプ",
|
||||
"helpers.questions.selectContentType.quickPick.placeholder": "新規作成する記事の記事タイプを選択してください。",
|
||||
"helpers.questions.selectContentType.noSelection.warning": "記事タイプが選択されていません。",
|
||||
|
||||
"helpers.seoHelper.checkLength.diagnostic.message": "記事{0}の文字数が{1}文字を超えています(現在の文字数: {2})。SEOの観点上、{1}文字以内に収めることが推奨されます。",
|
||||
|
||||
"helpers.settingsHelper.checkToPromote.message": "ローカル設定が存在します。この設定をグローバル設定(\"frontmatter.json\")に昇格させますか?",
|
||||
"helpers.settingsHelper.promote.success": "全ての設定をチームレベルに昇格しました。",
|
||||
"helpers.settingsHelper.readConfig.progress.title": "{0}: 動的な設定ファイルを読み込んでいます...",
|
||||
"helpers.settingsHelper.readConfig.error": "設定の読み込みでエラーが発生しました。",
|
||||
"helpers.settingsHelper.refreshConfig.success": "設定を再読み込みしました。",
|
||||
|
||||
"helpers.taxonomyHelper.rename.input.title": "タクソノミー名を変更 {0}",
|
||||
"helpers.taxonomyHelper.rename.validate.equalValue": "現在のファイル名とは別のファイル名を入力してください。",
|
||||
"helpers.taxonomyHelper.rename.validate.noValue": "新しいファイル名を入力してください。",
|
||||
"helpers.taxonomyHelper.merge.quickPick.title": "\"{0}\"を別の{1}にマージ",
|
||||
"helpers.taxonomyHelper.merge.quickPick.placeholder": "マージする{0}を選択してください。",
|
||||
"helpers.taxonomyHelper.delete.quickPick.title": "\"{0}\"を{1}から削除",
|
||||
"helpers.taxonomyHelper.delete.quickPick.placeholder": "本当に\"{0}\"を{1}から削除しますか?",
|
||||
"helpers.taxonomyHelper.createNew.input.title": "{0}に新規タクソノミーを作成",
|
||||
"helpers.taxonomyHelper.createNew.input.placeholder": "作成したいタクソノミー名を入力してください。",
|
||||
"helpers.taxonomyHelper.createNew.input.validate.noValue": "タクソノミー名は必須です。",
|
||||
"helpers.taxonomyHelper.createNew.input.validate.exists": "このタクソノミー名は既に存在しています。",
|
||||
"helpers.taxonomyHelper.process.insert": "{0}: 選択した記事に \"{1}\" を追加しています。",
|
||||
"helpers.taxonomyHelper.process.edit": "{0}: {2}内の\"{1}\"を{3}に変更しています。",
|
||||
"helpers.taxonomyHelper.process.merge": "{0}: {2}内の\"{1}\"を{3}にマージしています。",
|
||||
"helpers.taxonomyHelper.process.delete": "{0}: \"{1}\"を{2}から削除しています。",
|
||||
"helpers.taxonomyHelper.process.insert.success": "追加しました。",
|
||||
"helpers.taxonomyHelper.process.edit.success": "変更しました。",
|
||||
"helpers.taxonomyHelper.process.merge.success": "マージしました。",
|
||||
"helpers.taxonomyHelper.process.delete.success": "削除しました。",
|
||||
"helpers.taxonomyHelper.move.quickPick.title": "\"{0}\"を別のタクソノミータイプに移行",
|
||||
"helpers.taxonomyHelper.move.quickPick.placeholder": "移行先のタクソノミータイプを選択してください。",
|
||||
"helpers.taxonomyHelper.move.progress.title": "{0}: \"{1}\"を{2}から\"${3}\"へ移行しています。",
|
||||
"helpers.taxonomyHelper.move.success": "移行しました。",
|
||||
|
||||
"listeners.dashboard.dashboardListener.openConfig.notification": "設定内容を確認するには\"frontmatter.json\"を開いてください。",
|
||||
"listeners.dashboard.dashboardListener.pinItem.noPath.error": "パスが指定されていません。",
|
||||
"listeners.dashboard.dashboardListener.pinItem.coundNotPin.error": "ピン留めができませんでした。",
|
||||
"listeners.dashboard.dashboardListener.pinItem.coundNotUnPin.error": "ピン留めの解除ができませんでした。",
|
||||
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.notification": "テンプレートファイルがコピーされました。",
|
||||
"common.openOnWebsite": "ウェブサイトで開く"
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.progress.title": "テンプレートをダウンロードして初期化しています...",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.download.error": "テンプレートのダウンロードに失敗しました。",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.init.error": "テンプレートの初期化に失敗しました。",
|
||||
|
||||
"listeners.dashboard.snippetListener.addSnippet.missingFields.warning": "スニペットのタイトルまたはbodyが空です。",
|
||||
"listeners.dashboard.snippetListener.addSnippet.exists.warning": "同じタイトルのスニペットが既に存在しています。",
|
||||
"listeners.dashboard.snippetListener.updateSnippet.noSnippets.warning": "更新が必要なスニペットはありません。",
|
||||
|
||||
"listeners.general.gitListener.push.error": "submoduleのpushに失敗しました。",
|
||||
|
||||
"listeners.panel.dataListener.aiSuggestTaxonomy.noEditor.error": "アクティブなエディターがありません。",
|
||||
"listeners.panel.dataListener.aiSuggestTaxonomy.noData.error": "記事データがありません。",
|
||||
"listeners.panel.dataListener.getDataFileEntries.noDataFiles.error": "データファイルのエントリーが見つかりませんでした。",
|
||||
|
||||
|
||||
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noEditor.error": "アクティブなエディターがありません。",
|
||||
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noData.error": "記事データがありません。",
|
||||
|
||||
"services.modeSwitch.switchMode.quickPick.placeholder": "モードを選択してください。",
|
||||
"services.modeSwitch.switchMode.quickPick.title": "{0}: モードの選択",
|
||||
"services.modeSwitch.setText.mode": "モード: {0}",
|
||||
|
||||
"services.pagesParser.parsePages.statusBar.text": "読み込み中...",
|
||||
"services.pagesParser.parsePages.file.error": "ファイルエラー: {0}",
|
||||
|
||||
"services.sponsorAi.getTitles.warning": "AIによるタイトル生成に時間がかかりすぎています。後でもう一度試してください。",
|
||||
"services.sponsorAi.getDescription.warning": "AIによるディスクリプション生成に時間がかかりすぎています。後でもう一度試してください。",
|
||||
"services.sponsorAi.getTaxonomySuggestions.warning": "AIによるタクソノミー生成に時間がかかりすぎています。後でもう一度試してください。",
|
||||
|
||||
"services.terminal.openLocalServerTerminal.terminalOption.message": "ローカルサーバーを起動"
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
"common.edit": "Edit",
|
||||
"common.delete": "Delete",
|
||||
"common.cancel": "Cancel",
|
||||
"common.apply": "Apply",
|
||||
"common.clear": "Clear",
|
||||
"common.clear.value": "Clear value",
|
||||
"common.search": "Search",
|
||||
@@ -20,8 +21,45 @@
|
||||
"common.slug": "Slug",
|
||||
"common.support": "Support",
|
||||
"common.remove.value": "Remove {0}",
|
||||
"common.filter": "Back",
|
||||
"common.filter.value": "Filter by {0}",
|
||||
"common.error.message": "Sorry, something went wrong.",
|
||||
"common.openOnWebsite": "Open on website",
|
||||
"common.settings": "Settings",
|
||||
"common.refreshSettings": "Refresh settings",
|
||||
"common.pin": "Pin",
|
||||
"common.unpin": "Unpin",
|
||||
"common.noResults": "No results",
|
||||
"common.error": "Sorry, something went wrong.",
|
||||
"common.yes": "yes",
|
||||
"common.no": "no",
|
||||
"common.openSettings": "Open settings",
|
||||
"common.back": "Back",
|
||||
|
||||
"loading.initPages": "Loading content",
|
||||
|
||||
"notifications.outputChannel.link": "output window",
|
||||
"notifications.outputChannel.description": "Check the {0} for more details.",
|
||||
|
||||
"settings.view.common": "Common",
|
||||
"settings.view.contentFolders": "Content folders",
|
||||
"settings.view.astro": "Astro",
|
||||
"settings.openOnStartup": "Open dashboard on startup",
|
||||
"settings.contentTypes": "Content types",
|
||||
"settings.contentFolders": "Content folders",
|
||||
"settings.diagnostic": "Diagnostic",
|
||||
"settings.diagnostic.description": "You can run the diagnostics to check the whole Front Matter CMS configuration.",
|
||||
"settings.diagnostic.link": "Run full diagnostics",
|
||||
"settings.git": "Git synchronization",
|
||||
"settings.git.enabled": "Enable Git synchronization to easily sync your changes with your repository.",
|
||||
"settings.git.commitMessage": "Commit message",
|
||||
"settings.git.submoduleInfo": "When working with Git submodules, you can refer to the submodule settings in the documentation.",
|
||||
"settings.git.submoduleLink": "Read more about Git submodules",
|
||||
|
||||
"settings.commonSettings.website.title": "Website and SSG settings",
|
||||
"settings.commonSettings.previewUrl": "Preview URL",
|
||||
"settings.commonSettings.websiteUrl": "Website URL",
|
||||
"settings.commonSettings.startCommand": "SSG/Framework start command",
|
||||
|
||||
"developer.title": "Developer mode",
|
||||
"developer.reload.title": "Reload the dashboard",
|
||||
@@ -60,9 +98,11 @@
|
||||
|
||||
"dashboard.contents.overview.noMarkdown": "No Markdown to show",
|
||||
"dashboard.contents.overview.noFolders": "Make sure you registered a content folder in your project to let Front Matter find the contents.",
|
||||
"dashboard.contents.overview.pinned": "Pinned",
|
||||
|
||||
"dashboard.contents.status.draft": "Draft",
|
||||
"dashboard.contents.status.published": "Published",
|
||||
"dashboard.contents.status.scheduled": "Scheduled",
|
||||
|
||||
"dashboard.dataView.dataForm.modify": "Modify the data",
|
||||
"dashboard.dataView.dataForm.add": "Add new data",
|
||||
@@ -75,6 +115,7 @@
|
||||
"dashboard.dataView.dataView.getStarted": "Select a data type to get started",
|
||||
"dashboard.dataView.dataView.noDataFiles": "No data files found",
|
||||
"dashboard.dataView.dataView.getStarted.link": "Read more to get started using data files",
|
||||
"dashboard.dataView.dataView.update.message": "Updated your data entries",
|
||||
|
||||
"dashboard.dataView.emptyView.heading": "Select your date type first",
|
||||
|
||||
@@ -101,6 +142,7 @@
|
||||
|
||||
"dashboard.header.navigation.allArticles": "All articles",
|
||||
"dashboard.header.navigation.published": "Published",
|
||||
"dashboard.header.navigation.scheduled": "Scheduled",
|
||||
"dashboard.header.navigation.draft": "In draft",
|
||||
|
||||
"dashboard.header.header.createContent": "Create content",
|
||||
@@ -181,7 +223,7 @@
|
||||
"dashboard.media.media.dragAndDrop": "You can also drag and drop images from your desktop and select them once uploaded.",
|
||||
"dashboard.media.media.folder.upload": "Upload to {0}",
|
||||
"dashboard.media.media.folder.default": "No folder selected, files you drop will be added to the {0} folder",
|
||||
"dashboard.media.media.placeholder": "No media files to show. You can drag & drop new files by holding your [shift] key.",
|
||||
"dashboard.media.media.placeholder": "No media files to show. You can drag&drop new files by holding your [shift] key.",
|
||||
"dashboard.media.media.contentFolder": "Content folder",
|
||||
"dashboard.media.media.publicFolder": "Public folder",
|
||||
|
||||
@@ -241,10 +283,14 @@
|
||||
"dashboard.steps.stepsToGetStarted.contentFolders.information.description": "You can also perform this action by right-clicking on the folder in the explorer view, and selecting register folder",
|
||||
"dashboard.steps.stepsToGetStarted.tags.name": "Import all tags and categories (optional)",
|
||||
"dashboard.steps.stepsToGetStarted.tags.description": "Now that Front Matter knows all the content folders. Would you like to import all tags and categories from the available content?",
|
||||
"dashboard.steps.stepsToGetStarted.git.name": "Do you want to enable Git synchronization?",
|
||||
"dashboard.steps.stepsToGetStarted.git.description": "Enable Git synchronization to eaily sync your changes with your repository.",
|
||||
"dashboard.steps.stepsToGetStarted.showDashboard.name": "Show the dashboard",
|
||||
"dashboard.steps.stepsToGetStarted.showDashboard.description": "Once all actions are completed, the dashboard can be loaded.",
|
||||
"dashboard.steps.stepsToGetStarted.template.name": "Use a configuration template",
|
||||
"dashboard.steps.stepsToGetStarted.template.description": "Select a template to prefill the frontmatter.json file with the recommended settings.",
|
||||
"dashboard.steps.stepsToGetStarted.template.warning": "Selecting a template applies a whole configuration to your project and closes this configuration view.",
|
||||
"dashboard.steps.stepsToGetStarted.astroContentTypes.name": "Create Content-Types for your Astro Content Collections",
|
||||
|
||||
"dashboard.taxonomyView.button.add.title": "Add {0} to taxonomy settings",
|
||||
"dashboard.taxonomyView.button.edit.title": "Edit {0}",
|
||||
@@ -261,6 +307,10 @@
|
||||
"dashboard.taxonomyView.taxonomyManager.table.heading.action": "Action",
|
||||
"dashboard.taxonomyView.taxonomyManager.table.row.empty": "No {0} found",
|
||||
"dashboard.taxonomyView.taxonomyManager.table.unmapped.title": "Missing in your settings",
|
||||
"dashboard.taxonomyView.taxonomyManager.filterInput.placeholder": "Filter",
|
||||
|
||||
"dashboard.taxonomyView.taxonomyTagging.pageTitle": "Map your content with: {0}",
|
||||
"dashboard.taxonomyView.taxonomyTagging.checkbox": "Tag page with {0}",
|
||||
|
||||
"dashboard.taxonomyView.taxonomyView.navigationBar.title": "Select the taxonomy",
|
||||
"dashboard.taxonomyView.taxonomyView.button.import": "Import taxonomy",
|
||||
@@ -274,7 +324,8 @@
|
||||
"dashboard.welcomeScreen.thanks": "Thank you for using Front Matter!",
|
||||
"dashboard.welcomeScreen.description": "We try to aim to make Front Matter as easy to use as possible, but if you have any questions or suggestions. Please don't hesitate to reach out to us on GitHub.",
|
||||
"dashboard.welcomeScreen.link.github.title": "GitHub",
|
||||
"dashboard.welcomeScreen.link.github.label": "GitHub / Documentation",
|
||||
"dashboard.welcomeScreen.link.github.label": "GitHub",
|
||||
"dashboard.welcomeScreen.link.documentation.label": "Documentation",
|
||||
"dashboard.welcomeScreen.link.sponsor.title": "Become a sponsor",
|
||||
"dashboard.welcomeScreen.link.sponsor.label": "Sponsor",
|
||||
"dashboard.welcomeScreen.link.review.title": "Write a review",
|
||||
@@ -283,6 +334,11 @@
|
||||
"dashboard.welcomeScreen.actions.description": "You can also use the extension from the Front Matter side panel. There you will find the actions you can perform specifically for your pages.",
|
||||
"dashboard.welcomeScreen.actions.thanks": "We hope you enjoy Front Matter!",
|
||||
|
||||
"dashboard.media.detailsSlideOver.unmapped.description": "Do you want to remap the metadata of unmapped files?",
|
||||
|
||||
"dashboard.configuration.astro.astroContentTypes.empty": "No Astro Content Collections found.",
|
||||
"dashboard.configuration.astro.astroContentTypes.description": "The following Astro Content Collections can be used to generate a content-type.",
|
||||
|
||||
"panel.contentType.contentTypeValidator.title": "Content-type",
|
||||
"panel.contentType.contentTypeValidator.hint": "We noticed field differences between the content-type and the front matter data. \n Would you like to create, update, or set the content-type for this content?",
|
||||
"panel.contentType.contentTypeValidator.button.create": "Create content-type",
|
||||
@@ -349,7 +405,6 @@
|
||||
"panel.baseView.initialize": "Initialize project",
|
||||
"panel.baseView.actions.title": "Actions",
|
||||
"panel.baseView.action.openDashboard": "Open dashboard",
|
||||
"panel.baseView.action.openPreview": "Open preview",
|
||||
"panel.baseView.action.createContent": "Create content",
|
||||
"panel.baseView.empty": "Open a file to see more actions",
|
||||
|
||||
@@ -427,5 +482,249 @@
|
||||
|
||||
"panel.viewPanel.mediaInsert": "Continue in the media dashboard to select the image you want to insert.",
|
||||
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Template files copied."
|
||||
"commands.article.setDate.error": "Something failed while parsing the date format. Check your \"{0}\" setting.",
|
||||
"commands.article.updateSlug.error": "Failed to rename file: {0}",
|
||||
|
||||
"commands.cache.cleared": "Cache cleared",
|
||||
|
||||
"commands.chatbot.title": "Ask me anything",
|
||||
|
||||
"commands.content.option.contentType.label": "Create content by content type",
|
||||
"commands.content.option.contentType.description": "Select if you want to create new content by the available content type(s)",
|
||||
"commands.content.option.template.label": "Create content by template",
|
||||
"commands.content.option.template.description": "Select if you want to create new content by the available template(s)",
|
||||
"commands.content.quickPick.title": "Create content",
|
||||
"commands.content.quickPick.placeholder": "Select how you want to create your new content",
|
||||
|
||||
"commands.dashboard.title": "Dashboard",
|
||||
|
||||
"commands.folders.addMediaFolder.inputBox.title": "Add media folder",
|
||||
"commands.folders.addMediaFolder.inputBox.prompt": "Which name would you like to give to your folder (use \"/\" to create multi-level folders)?",
|
||||
"commands.folders.addMediaFolder.noFolder.warning": "No folder name was specified.",
|
||||
"commands.folders.create.folderExists.warning": "Folder is already registered",
|
||||
"commands.folders.create.input.title": "Register folder",
|
||||
"commands.folders.create.input.prompt": "Which name would you like to specify for this folder?",
|
||||
"commands.folders.create.input.placeholder": "Folder name",
|
||||
"commands.folders.create.success": "Folder registered",
|
||||
"commands.folders.getWorkspaceFolder.workspaceFolderPick.placeholder": "Please select the main workspace folder for Front Matter to use.",
|
||||
"commands.folders.get.notificationError.title": "Folder \"{0}\" does not exist. Please remove it from the settings.",
|
||||
"commands.folders.get.notificationError.remove.action": "Remove folder",
|
||||
"commands.folders.get.notificationError.create.action": "Create folder",
|
||||
|
||||
"commands.preview.panel.title": "Preview: {0}",
|
||||
"commands.preview.askUserToPickFolder.title": "Select the folder of the article to preview",
|
||||
|
||||
"commands.project.initialize.success": "Project initialized successfully.",
|
||||
"commands.project.switchProject.title": "To which project do you want to switch?",
|
||||
"commands.project.createSampleTemplate.info": "Sample template created.",
|
||||
|
||||
"commands.settings.create.input.prompt": "Insert the value of the {0} that you want to add to your configuration.",
|
||||
"commands.settings.create.input.placeholder": "Name of the {0}",
|
||||
"commands.settings.create.warning": "The provided {0} already exists.",
|
||||
"commands.settings.create.quickPick.placeholder": "Do you want to add the new {0} to the page?",
|
||||
"commands.settings.export.progress.title": "{0}: exporting tags and categories",
|
||||
"commands.settings.export.progress.success": "Export completed. Tags: {0} - Categories: {1}.",
|
||||
"commands.settings.remap.quickpick.title": "Remap",
|
||||
"commands.settings.remap.quickpick.placeholder": "What do you want to remap?",
|
||||
"commands.settings.remap.noTaxonomy.warning": "No {0} configured.",
|
||||
"commands.settings.remap.selectTaxonomy.placeholder": "Select your {0} to insert.",
|
||||
"commands.settings.remap.newOption.input.prompt": "Specify the value of the {0} with which you want to remap \"{1}\". Leave the input <blank> if you want to remove the {0} from all articles.",
|
||||
"commands.settings.remap.newOption.input.placeholder": "Name of the {0}",
|
||||
"commands.settings.remap.delete.placeholder": "Delete {0} {1}?",
|
||||
|
||||
"commands.statusListener.verifyRequiredFields.diagnostic.emptyField": "The {0} field is required. Please define a value for the field.",
|
||||
"commands.statusListener.verifyRequiredFields.notification.error": "The following fields are required to contain a value: {0}",
|
||||
|
||||
"commands.template.generate.input.title": "Template title",
|
||||
"commands.template.generate.input.prompt": "Which name would you like to give your template?",
|
||||
"commands.template.generate.input.placeholder": "article",
|
||||
"commands.template.generate.noTitle.warning": "You did not specify a template title.",
|
||||
"commands.template.generate.keepContents.title": "Keep content",
|
||||
"commands.template.generate.keepContents.placeholder": "Do you want to keep the contents for the template?",
|
||||
"commands.template.generate.keepContents.noOption.warning": "You did not pick any of the options for keeping the template its content.",
|
||||
"commands.template.generate.keepContents.success": "Template created and is now available in your {0} folder.",
|
||||
"commands.template.getTemplates.warning": "No templates found.",
|
||||
"commands.template.create.folderPath.warning": "Incorrect project folder path retrieved.",
|
||||
"commands.template.create.noTemplates.warning": "No templates found.",
|
||||
"commands.template.create.selectTemplate.title": "Select a template",
|
||||
"commands.template.create.selectTemplate.placeholder": "Select the content template to use",
|
||||
"commands.template.create.selectTemplate.noTemplate.warning": "No template selected.",
|
||||
"commands.template.create.selectTemplate.notFound.warning": "Content template could not be found.",
|
||||
"commands.template.create.success": "Your new content is now available.",
|
||||
|
||||
"commands.wysiwyg.command.unorderedList.label": "Unordered list",
|
||||
"commands.wysiwyg.command.unorderedList.detail": "Add an unordered list",
|
||||
"commands.wysiwyg.command.orderedList.label": "Ordered list",
|
||||
"commands.wysiwyg.command.orderedList.detail": "Add an ordered list",
|
||||
"commands.wysiwyg.command.taskList.label": "Task list",
|
||||
"commands.wysiwyg.command.taskList.detail": "Add a task list",
|
||||
"commands.wysiwyg.command.code.label": "Code",
|
||||
"commands.wysiwyg.command.code.detail": "Add inline code snippet",
|
||||
"commands.wysiwyg.command.codeblock.label": "Code block",
|
||||
"commands.wysiwyg.command.codeblock.detail": "Add a code block",
|
||||
"commands.wysiwyg.command.blockquote.label": "Blockquote",
|
||||
"commands.wysiwyg.command.blockquote.detail": "Add a blockquote",
|
||||
"commands.wysiwyg.command.strikethrough.label": "Strikethrough",
|
||||
"commands.wysiwyg.command.strikethrough.detail": "Add strikethrough text",
|
||||
"commands.wysiwyg.quickPick.title": "WYSIWYG Options",
|
||||
"commands.wysiwyg.quickPick.placeholder": "Which type of markup would you like to insert?",
|
||||
"commands.wysiwyg.addHyperlink.hyperlinkInput.title": "WYSIWYG Hyperlink",
|
||||
"commands.wysiwyg.addHyperlink.hyperlinkInput.prompt": "Enter the URL",
|
||||
"commands.wysiwyg.addHyperlink.textInput.title": "WYSIWYG Text",
|
||||
"commands.wysiwyg.addHyperlink.textInput.prompt": "Enter the text for the hyperlink",
|
||||
"commands.wysiwyg.insertText.heading.input.title": "Heading level",
|
||||
"commands.wysiwyg.insertText.heading.input.placeholder": "Which heading level do you want to insert?",
|
||||
|
||||
"helpers.articleHelper.createContent.pageBundle.error": "A page bundle with the name {0} already exists in {1}.",
|
||||
"helpers.articleHelper.createContent.contentExists.warning": "Content with the title already exists. Please specify a new title.",
|
||||
"helpers.articleHelper.processCustomPlaceholders.placeholder.error": "Error while processing the {0} placeholder.",
|
||||
"helpers.articleHelper.parseFile.diagnostic.error": "Error parsing the front matter of {0}.",
|
||||
|
||||
"helpers.contentType.generate.noFrontMatter.error": "No front matter data found to generate a content type.",
|
||||
"helpers.contentType.generate.override.quickPick.title": "Override the default content type",
|
||||
"helpers.contentType.generate.override.quickPick.placeholder": "Do you want to overwrite the default content type configuration with the fields used in the current field?",
|
||||
"helpers.contentType.generate.contentTypeInput.title": "Generate Content Type",
|
||||
"helpers.contentType.generate.contentTypeInput.prompt": "Enter the name of the content type to generate",
|
||||
"helpers.contentType.generate.contentTypeInput.validation.enterName": "Please enter a name for the content type.",
|
||||
"helpers.contentType.generate.contentTypeInput.validation.nameExists": "A content type with this name already exists.",
|
||||
"helpers.contentType.generate.noContentTypeName.warning": "You didn't specify a name for the content type.",
|
||||
"helpers.contentType.generate.pageBundle.quickPick.title": "Use as a page bundle",
|
||||
"helpers.contentType.generate.pageBundle.quickPick.placeHolder": "Do you want to use this content type as a page bundle?",
|
||||
"helpers.contentType.generate.updated.success": "Content type {0} has been updated.",
|
||||
"helpers.contentType.generate.generated.success": "Content type {0} has been generated.",
|
||||
"helpers.contentType.addMissingFields.noFrontMatter.warning": "No front matter data found to add missing fields.",
|
||||
"helpers.contentType.addMissingFields.updated.success": "Content type {0} has been updated.",
|
||||
"helpers.contentType.setContentType.noFrontMatter.warning": "No front matter data found to set the content type.",
|
||||
"helpers.contentType.setContentType.quickPick.title": "Select the content type",
|
||||
"helpers.contentType.setContentType.quickPick.placeholder": "Which content type would you like to use?",
|
||||
"helpers.contentType.create.allowSubContent.title": "Do you want to create it as sub-content?",
|
||||
"helpers.contentType.create.allowSubContent.placeHolder": "Do you want to create it as sub-content?",
|
||||
"helpers.contentType.create.allowSubContent.showOpenDialog.openLabel": "Select folder",
|
||||
"helpers.contentType.create.allowSubContent.showOpenDialog.title": "Select folder to create the content",
|
||||
"helpers.contentType.create.pageBundle.title": "Create as a page bundle?",
|
||||
"helpers.contentType.create.pageBundle.placeHolder": "Do you want to create the sub-content as a page bundle?",
|
||||
"helpers.contentType.create.progress.title": "{0}: Creating content...",
|
||||
"helpers.contentType.create.success": "Your new content has been created.",
|
||||
"helpers.contentType.verify.warning": "The content type actions are not available in this mode.",
|
||||
|
||||
"helpers.customScript.executing": "Executing: {0}",
|
||||
"helpers.customScript.singleRun.article.warning": "{0}: Article couldn't be retrieved.",
|
||||
"helpers.customScript.bulkRun.noFiles.warning": "{0}: No files found",
|
||||
"helpers.customScript.runMediaScript.noFolder.warning": "{0}: There was no folder or media path specified.",
|
||||
"helpers.customScript.showOutput.frontMatter.success": "{0}: front matter updated.",
|
||||
"helpers.customScript.showOutput.copyOutput.action": "Copy output",
|
||||
"helpers.customScript.showOutput.success": "{0}: Executed your custom script.",
|
||||
"helpers.customScript.validateCommand.error": "Invalid command: {0}",
|
||||
|
||||
"helpers.dataFileHelper.process.error": "Something went wrong while processing the data file.",
|
||||
|
||||
"helpers.extension.getVersion.changelog": "Check the changelog",
|
||||
"helpers.extension.getVersion.starIt": "Give it a ⭐️",
|
||||
"helpers.extension.getVersion.update.notification": "{0} has been updated to v{1} — check out what's new!",
|
||||
"helpers.extension.migrateSettings.deprecated.warning": "The \"{0}\" and \"{1}\" settings have been deprecated. Please use the \"isPublishDate\" and \"isModifiedDate\" datetime field properties instead.",
|
||||
"helpers.extension.migrateSettings.deprecated.warning.hide": "Hide",
|
||||
"helpers.extension.migrateSettings.deprecated.warning.seeGuide": "See migration guide",
|
||||
"helpers.extension.migrateSettings.templates.quickPick.title": "{0} - Templates",
|
||||
"helpers.extension.migrateSettings.templates.quickPick.placeholder": "Do you want to keep on using the template functionality?",
|
||||
"helpers.extension.checkIfExtensionCanRun.warning": "Front Matter BETA cannot be used while the stable version is installed. Please ensure that you have only over version installed.",
|
||||
|
||||
"helpers.mediaHelper.saveFile.folder.error": "We couldn't find your selected folder.",
|
||||
"helpers.mediaHelper.saveFile.file.uploaded.success": "File {0} uploaded to: {1}",
|
||||
"helpers.mediaHelper.saveFile.file.uploaded.failed": "Sorry, something went wrong uploading {0}",
|
||||
"helpers.mediaHelper.deleteFile.file.deletion.failed": "Sorry, something went wrong deleting {0}",
|
||||
|
||||
"helpers.mediaLibrary.remove.warning": "The name \"{0}\" already exists at the file location.",
|
||||
"helpers.mediaLibrary.remove.error": "Sorry, something went wrong updating \"{0}\" to \"{1}\".",
|
||||
|
||||
"helpers.openFileInEditor.error": "Couldn't open the file.",
|
||||
|
||||
"helpers.questions.contentTitle.aiInput.title": "Title or description",
|
||||
"helpers.questions.contentTitle.aiInput.prompt": "What would you like to write about?",
|
||||
"helpers.questions.contentTitle.aiInput.placeholder": "What would you like to write about?",
|
||||
"helpers.questions.contentTitle.aiInput.quickPick.title.separator": "your title/description",
|
||||
"helpers.questions.contentTitle.aiInput.quickPick.ai.separator": "AI generated title",
|
||||
"helpers.questions.contentTitle.aiInput.select.title": "Select a title",
|
||||
"helpers.questions.contentTitle.aiInput.select.placeholder": "Select a title for your content",
|
||||
"helpers.questions.contentTitle.aiInput.failed": "Failed fetching the AI title. Please try to use your own title or try again later.",
|
||||
"helpers.questions.contentTitle.aiInput.warning": "You did not specify a title for your content.",
|
||||
"helpers.questions.contentTitle.titleInput.title": "Content title",
|
||||
"helpers.questions.contentTitle.titleInput.prompt": "What would you like to use as a title for the content to create?",
|
||||
"helpers.questions.contentTitle.titleInput.placeholder": "Content title",
|
||||
"helpers.questions.contentTitle.titleInput.warning": "You did not specify a title for your content.",
|
||||
"helpers.questions.selectContentFolder.quickPick.title": "Select a folder",
|
||||
"helpers.questions.selectContentFolder.quickPick.placeholder": "Select where you want to create your content",
|
||||
"helpers.questions.selectContentFolder.quickPick.noSelection.warning": "You didn't select a place where you wanted to create your content.",
|
||||
"helpers.questions.selectContentType.noContentType.warning": "No content types found. Please create a content type first.",
|
||||
"helpers.questions.selectContentType.quickPick.title": "Content type",
|
||||
"helpers.questions.selectContentType.quickPick.placeholder": "Select the content type to create your new content",
|
||||
"helpers.questions.selectContentType.noSelection.warning": "No content type was selected.",
|
||||
|
||||
"helpers.seoHelper.checkLength.diagnostic.message": "Article {0} is longer than {1} characters (current length: {2}). For SEO reasons, it would be better to make it less than {1} characters.",
|
||||
|
||||
"helpers.settingsHelper.checkToPromote.message": "You have local settings. Would you like to promote them to the global settings (\"frontmatter.json\")?",
|
||||
"helpers.settingsHelper.promote.success": "All settings promoted to team level.",
|
||||
"helpers.settingsHelper.readConfig.progress.title": "{0}: Reading dynamic config file...",
|
||||
"helpers.settingsHelper.readConfig.error": "Error reading your configuration.",
|
||||
"helpers.settingsHelper.refreshConfig.success": "Settings have been refreshed.",
|
||||
|
||||
"helpers.taxonomyHelper.rename.input.title": "Rename the {0}",
|
||||
"helpers.taxonomyHelper.rename.validate.equalValue": "The new value must be different from the old one.",
|
||||
"helpers.taxonomyHelper.rename.validate.noValue": "A new value must be provided.",
|
||||
"helpers.taxonomyHelper.merge.quickPick.title": "Merge the \"{0}\" with another {1} value",
|
||||
"helpers.taxonomyHelper.merge.quickPick.placeholder": "Select the {0} value to merge with",
|
||||
"helpers.taxonomyHelper.delete.quickPick.title": "Delete the \"{0}\" {1} value",
|
||||
"helpers.taxonomyHelper.delete.quickPick.placeholder": "Are you sure you want to delete the \"{0}\" {1} value?",
|
||||
"helpers.taxonomyHelper.createNew.input.title": "Create a new {0} value",
|
||||
"helpers.taxonomyHelper.createNew.input.placeholder": "Enter the value you want to add",
|
||||
"helpers.taxonomyHelper.createNew.input.validate.noValue": "A value must be provided.",
|
||||
"helpers.taxonomyHelper.createNew.input.validate.exists": "The value already exists.",
|
||||
"helpers.taxonomyHelper.process.insert": "{0}: Inserting \"{1}\" to your selected pages.",
|
||||
"helpers.taxonomyHelper.process.edit": "{0}: Renaming \"{1}\" from {2} to {3}.",
|
||||
"helpers.taxonomyHelper.process.merge": "{0}: Merging \"{1}\" from {2} to {3}.",
|
||||
"helpers.taxonomyHelper.process.delete": "{0}: Deleting \"{1}\" from {2}.",
|
||||
"helpers.taxonomyHelper.process.insert.success": "Insert completed.",
|
||||
"helpers.taxonomyHelper.process.edit.success": "Edit completed.",
|
||||
"helpers.taxonomyHelper.process.merge.success": "Merge completed.",
|
||||
"helpers.taxonomyHelper.process.delete.success": "Deletion completed.",
|
||||
"helpers.taxonomyHelper.move.quickPick.title": "Move the \"{0}\" to another type",
|
||||
"helpers.taxonomyHelper.move.quickPick.placeholder": "Select the type to move to",
|
||||
"helpers.taxonomyHelper.move.progress.title": "{0}: Moving \"{1}\" from {2} to \"${3}\".",
|
||||
"helpers.taxonomyHelper.move.success": "Move completed.",
|
||||
|
||||
"listeners.dashboard.dashboardListener.openConfig.notification": "Open the \"frontmatter.json\" file if you want to review the configuration.",
|
||||
"listeners.dashboard.dashboardListener.pinItem.noPath.error": "No path provided.",
|
||||
"listeners.dashboard.dashboardListener.pinItem.coundNotPin.error": "Could not pin item.",
|
||||
"listeners.dashboard.dashboardListener.pinItem.coundNotUnPin.error": "Could not unpin item.",
|
||||
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.notification": "Template files copied.",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.progress.title": "Downloading and initializing the template...",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.download.error": "Failed to download the template.",
|
||||
"listeners.dashboard.settingsListener.triggerTemplate.init.error": "Failed to initialize the template.",
|
||||
|
||||
"listeners.dashboard.snippetListener.addSnippet.missingFields.warning": "Snippet missing title or body",
|
||||
"listeners.dashboard.snippetListener.addSnippet.exists.warning": "Snippet with the same title already exists",
|
||||
"listeners.dashboard.snippetListener.updateSnippet.noSnippets.warning": "No snippets to update",
|
||||
|
||||
"listeners.general.gitListener.push.error": "Failed to push submodules.",
|
||||
|
||||
"listeners.panel.dataListener.aiSuggestTaxonomy.noEditor.error": "No active editor",
|
||||
"listeners.panel.dataListener.aiSuggestTaxonomy.noData.error": "No article data",
|
||||
"listeners.panel.dataListener.getDataFileEntries.noDataFiles.error": "Couldn't find data file entries",
|
||||
|
||||
|
||||
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noEditor.error": "No active editor",
|
||||
"listeners.panel.taxonomyListener.aiSuggestTaxonomy.noData.error": "No article data",
|
||||
|
||||
"services.modeSwitch.switchMode.quickPick.placeholder": "Select the mode you want to use",
|
||||
"services.modeSwitch.switchMode.quickPick.title": "{0}: Mode selection",
|
||||
"services.modeSwitch.setText.mode": "Mode: {0}",
|
||||
|
||||
"services.pagesParser.parsePages.statusBar.text": "Processing...",
|
||||
"services.pagesParser.parsePages.file.error": "File error: {0}",
|
||||
|
||||
"services.sponsorAi.getTitles.warning": "The AI title generation took too long. Please try again later.",
|
||||
"services.sponsorAi.getDescription.warning": "The AI description generation took too long. Please try again later.",
|
||||
"services.sponsorAi.getTaxonomySuggestions.warning": "The AI taxonomy generation took too long. Please try again later.",
|
||||
|
||||
"services.terminal.openLocalServerTerminal.terminalOption.message": "Starting local server"
|
||||
}
|
||||
1
l10n/bundle.l10n.ko.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
l10n/bundle.l10n.pt-br.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
17556
package-lock.json
generated
183
package.json
@@ -3,7 +3,7 @@
|
||||
"displayName": "Front Matter CMS",
|
||||
"description": "Front Matter is a CMS that runs within Visual Studio Code. It gives you the power and control of a full-blown CMS while also providing you the flexibility and speed of the static site generator of your choice like: Hugo, Jekyll, Docusaurus, NextJs, Gatsby, and many more...",
|
||||
"icon": "assets/frontmatter-teal-128x128.png",
|
||||
"version": "9.2.0",
|
||||
"version": "9.5.0",
|
||||
"preview": false,
|
||||
"publisher": "eliostruyf",
|
||||
"galleryBanner": {
|
||||
@@ -93,8 +93,8 @@
|
||||
"activitybar": [
|
||||
{
|
||||
"id": "frontmatter-explorer",
|
||||
"title": "Front Matter",
|
||||
"icon": "assets/frontmatter-short-min.svg"
|
||||
"title": "FM",
|
||||
"icon": "$(fm-logo)"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -103,8 +103,7 @@
|
||||
{
|
||||
"id": "frontMatter.explorer",
|
||||
"name": "Front Matter",
|
||||
"icon": "assets/frontmatter-short-min.svg",
|
||||
"contextualTitle": "Front Matter",
|
||||
"icon": "$(fm-logo)",
|
||||
"type": "webview"
|
||||
}
|
||||
]
|
||||
@@ -161,6 +160,11 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"frontMatter.config.dynamicFilePath": {
|
||||
"type": "string",
|
||||
"markdownDescription": "%setting.frontMatter.config.dynamicFilePath.markdownDescription%",
|
||||
"default": ""
|
||||
},
|
||||
"frontMatter.content.autoUpdateDate": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
@@ -302,6 +306,11 @@
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"disableCreation": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.content.pageFolders.items.properties.disableCreation.description%"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
@@ -483,6 +492,31 @@
|
||||
"markdownDescription": "%setting.frontMatter.content.wysiwyg.markdownDescription%",
|
||||
"scope": "Content"
|
||||
},
|
||||
"frontMatter.content.filters": {
|
||||
"type": "array",
|
||||
"default": [
|
||||
"pageFolders",
|
||||
"tags",
|
||||
"categories"
|
||||
],
|
||||
"markdownDescription": "%setting.frontMatter.content.filters.markdownDescription%",
|
||||
"items": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"frontMatter.custom.scripts": {
|
||||
"type": "array",
|
||||
"default": [],
|
||||
@@ -580,6 +614,13 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"contentTypes": {
|
||||
"type": "array",
|
||||
"description": "%setting.frontMatter.custom.scripts.items.properties.contentTypes.description%",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
@@ -985,6 +1026,23 @@
|
||||
"markdownDescription": "%setting.frontMatter.panel.freeform.markdownDescription%",
|
||||
"scope": "Panel"
|
||||
},
|
||||
"frontMatter.panel.actions.disabled": {
|
||||
"type": "array",
|
||||
"default": [],
|
||||
"markdownDescription": "%setting.frontMatter.panel.actions.disabled.markdownDescription%",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"openDashboard",
|
||||
"createContent",
|
||||
"optimizeSlug",
|
||||
"preview",
|
||||
"openOnWebsite",
|
||||
"startStopServer",
|
||||
"customActions"
|
||||
]
|
||||
}
|
||||
},
|
||||
"frontMatter.preview.host": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
@@ -1049,6 +1107,21 @@
|
||||
],
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fileType.description%"
|
||||
},
|
||||
"clearEmpty": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.clearEmpty.description%"
|
||||
},
|
||||
"allowAsSubContent": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.allowAsSubContent.description%"
|
||||
},
|
||||
"isSubContent": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.isSubContent.description%"
|
||||
},
|
||||
"fields": {
|
||||
"$id": "#contenttypefield",
|
||||
"type": "array",
|
||||
@@ -1080,7 +1153,8 @@
|
||||
"divider",
|
||||
"heading",
|
||||
"customField",
|
||||
"contentRelationship"
|
||||
"contentRelationship",
|
||||
"fieldCollection"
|
||||
],
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.type.description%"
|
||||
},
|
||||
@@ -1236,6 +1310,11 @@
|
||||
"default": 0,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description%"
|
||||
},
|
||||
"singleValueAsString": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.singleValueAsString.description%"
|
||||
},
|
||||
"isPublishDate": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
@@ -1281,11 +1360,6 @@
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.required.description%"
|
||||
},
|
||||
"clearEmpty": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "%setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.clearEmpty.description%"
|
||||
},
|
||||
"customType": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
@@ -1483,6 +1557,20 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "fieldCollection"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"required": [
|
||||
"fieldGroup"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
@@ -1693,6 +1781,12 @@
|
||||
"markdownDescription": "%setting.frontMatter.taxonomy.modifiedField.markdownDescription%",
|
||||
"deprecationMessage": "%setting.frontMatter.taxonomy.modifiedField.deprecationMessage%"
|
||||
},
|
||||
"frontMatter.taxonomy.quoteStringValues": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"markdownDescription": "%setting.frontMatter.taxonomy.quoteStringValues.markdownDescription%",
|
||||
"scope": "Taxonomy"
|
||||
},
|
||||
"frontMatter.taxonomy.noPropertyValueQuotes": {
|
||||
"type": "array",
|
||||
"default": [],
|
||||
@@ -1846,10 +1940,7 @@
|
||||
"command": "frontMatter.dashboard.close",
|
||||
"title": "%command.frontMatter.dashboard.close%",
|
||||
"category": "Front Matter",
|
||||
"icon": {
|
||||
"dark": "/assets/icons/frontmatter-small-teal.svg",
|
||||
"light": "/assets/icons/frontmatter-small-teal.svg"
|
||||
}
|
||||
"icon": "$(fm-logo)"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.markup.code",
|
||||
@@ -1994,46 +2085,31 @@
|
||||
"command": "frontMatter.dashboard",
|
||||
"title": "%command.frontMatter.dashboard%",
|
||||
"category": "Front Matter",
|
||||
"icon": {
|
||||
"dark": "/assets/icons/frontmatter-small-dark.svg",
|
||||
"light": "/assets/icons/frontmatter-small-light.svg"
|
||||
}
|
||||
"icon": "$(fm-logo)"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.dashboard.data",
|
||||
"title": "%command.frontMatter.dashboard.data%",
|
||||
"category": "Front Matter",
|
||||
"icon": {
|
||||
"dark": "/assets/icons/frontmatter-small-dark.svg",
|
||||
"light": "/assets/icons/frontmatter-small-light.svg"
|
||||
}
|
||||
"icon": "$(fm-logo)"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.dashboard.media",
|
||||
"title": "%command.frontMatter.dashboard.media%",
|
||||
"category": "Front Matter",
|
||||
"icon": {
|
||||
"dark": "/assets/icons/frontmatter-small-dark.svg",
|
||||
"light": "/assets/icons/frontmatter-small-light.svg"
|
||||
}
|
||||
"icon": "$(fm-logo)"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.dashboard.snippets",
|
||||
"title": "%command.frontMatter.dashboard.snippets%",
|
||||
"category": "Front Matter",
|
||||
"icon": {
|
||||
"dark": "/assets/icons/frontmatter-small-dark.svg",
|
||||
"light": "/assets/icons/frontmatter-small-light.svg"
|
||||
}
|
||||
"icon": "$(fm-logo)"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.dashboard.taxonomy",
|
||||
"title": "%command.frontMatter.dashboard.taxonomy%",
|
||||
"category": "Front Matter",
|
||||
"icon": {
|
||||
"dark": "/assets/icons/frontmatter-small-dark.svg",
|
||||
"light": "/assets/icons/frontmatter-small-light.svg"
|
||||
}
|
||||
"icon": "$(fm-logo)"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.markup.orderedlist",
|
||||
@@ -2129,6 +2205,12 @@
|
||||
}
|
||||
],
|
||||
"menus": {
|
||||
"webview/context": [
|
||||
{
|
||||
"command": "workbench.action.webview.openDeveloperTools",
|
||||
"when": "frontMatter:isDevelopment"
|
||||
}
|
||||
],
|
||||
"editor/title": [
|
||||
{
|
||||
"command": "frontMatter.markup.heading",
|
||||
@@ -2327,6 +2409,10 @@
|
||||
"command": "frontMatter.markup.options",
|
||||
"when": "false"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.config.reload",
|
||||
"when": "false"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.insertSnippet",
|
||||
"when": "frontMatter:file:isValid == true && frontMatter:dashboard:snippets:enabled"
|
||||
@@ -2403,7 +2489,8 @@
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.settings.refresh",
|
||||
"group": "navigation@4"
|
||||
"group": "navigation@4",
|
||||
"when": "view == frontMatter.explorer"
|
||||
},
|
||||
{
|
||||
"command": "frontMatter.dashboard",
|
||||
@@ -2479,9 +2566,6 @@
|
||||
"prod:panel": "webpack --mode production --config ./webpack/panel.config.js",
|
||||
"test-compile": "tsc -p ./",
|
||||
"clean": "rimraf dist",
|
||||
"start:site": "cd ./docs && npm run dev",
|
||||
"clean:test": "rm ./e2e/sample/frontmatter.json || exit 0 && rm -rf ./e2e/sample/.frontmatter || exit 0",
|
||||
"test": "pnpm lint; tsc -p tsconfig.e2e.json && npm run clean:test && pnpm i -g @vscode/vsce && node ./e2e/out/runTests.js",
|
||||
"lint": "eslint --max-warnings=0 ./src/{commands,components}",
|
||||
"prettier": "prettier --write ./src",
|
||||
"localization:watch": "node ./scripts/watch-localization.js",
|
||||
@@ -2493,45 +2577,41 @@
|
||||
"@actions/core": "^1.10.0",
|
||||
"@bendera/vscode-webview-elements": "0.6.2",
|
||||
"@estruyf/vscode": "^1.1.0",
|
||||
"@headlessui/react": "1.5.0",
|
||||
"@heroicons/react": "1.0.4",
|
||||
"@headlessui/react": "^1.7.17",
|
||||
"@heroicons/react": "^2.1.1",
|
||||
"@iarna/toml": "2.2.3",
|
||||
"@octokit/rest": "^18.12.0",
|
||||
"@popperjs/core": "^2.11.6",
|
||||
"@sentry/react": "^6.19.7",
|
||||
"@sentry/tracing": "^6.19.7",
|
||||
"@tailwindcss/forms": "^0.5.3",
|
||||
"@types/chai": "^4.3.4",
|
||||
"@types/glob": "7.1.3",
|
||||
"@types/invariant": "^2.2.35",
|
||||
"@types/js-yaml": "3.12.1",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/lodash.omit": "^4.5.7",
|
||||
"@types/lodash.uniqby": "4.7.6",
|
||||
"@types/lodash.xor": "^4.5.7",
|
||||
"@types/mdast": "^3.0.10",
|
||||
"@types/mime-types": "^2.1.1",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/mustache": "^4.2.2",
|
||||
"@types/node": "10.17.48",
|
||||
"@types/node-fetch": "^2.6.2",
|
||||
"@types/node": "^18.17.1",
|
||||
"@types/react": "17.0.0",
|
||||
"@types/react-datepicker": "^4.8.0",
|
||||
"@types/react-dom": "17.0.0",
|
||||
"@types/vscode": "^1.73.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.50.0",
|
||||
"@typescript-eslint/parser": "^5.50.0",
|
||||
"@vscode/codicons": "0.0.20",
|
||||
"@vscode/l10n": "^0.0.14",
|
||||
"@vscode/webview-ui-toolkit": "^0.9.3",
|
||||
"@vscode/webview-ui-toolkit": "^1.2.2",
|
||||
"@webpack-cli/serve": "^1.7.0",
|
||||
"ajv": "^8.12.0",
|
||||
"array-move": "^4.0.0",
|
||||
"assert": "^2.0.0",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"chai": "^4.3.7",
|
||||
"cheerio": "1.0.0-rc.12",
|
||||
"css-loader": "5.2.7",
|
||||
"date-fns": "2.23.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"downshift": "6.0.6",
|
||||
"eslint": "^8.33.0",
|
||||
"fuse.js": "6.5.3",
|
||||
@@ -2550,9 +2630,7 @@
|
||||
"lodash.xor": "^4.5.0",
|
||||
"mdast-util-from-markdown": "1.0.0",
|
||||
"mime-types": "^2.1.35",
|
||||
"mocha": "^10.2.0",
|
||||
"mustache": "^4.2.0",
|
||||
"node-fetch": "^2.6.9",
|
||||
"node-json-db": "^2.2.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"path-browserify": "^1.0.1",
|
||||
@@ -2570,7 +2648,6 @@
|
||||
"react-quill": "^2.0.0",
|
||||
"react-router-dom": "^6.8.0",
|
||||
"react-sortable-hoc": "^2.0.0",
|
||||
"react-toastify": "^8.2.0",
|
||||
"recoil": "^0.4.1",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"rimraf": "^3.0.2",
|
||||
@@ -2585,12 +2662,12 @@
|
||||
"uniforms-bridge-json-schema": "^3.10.2",
|
||||
"uniforms-unstyled": "^3.10.2",
|
||||
"url-join-ts": "^1.0.5",
|
||||
"vscode-extension-tester": "^5.3.0",
|
||||
"wc-react": "github:estruyf/wc-react",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-bundle-analyzer": "^4.7.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-dev-server": "^4.11.1",
|
||||
"webpack-ignore-dynamic-require": "^1.0.0",
|
||||
"yaml": "^2.2.1",
|
||||
"yawn-yaml": "^1.5.0"
|
||||
},
|
||||
|
||||
@@ -239,8 +239,11 @@
|
||||
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "Diese Einstellung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte definieren Sie Ihr Medien-Snippet in der `frontMatter.content.snippet` Einstellung.",
|
||||
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "Diese Einstellung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte verwenden Sie stattdessen die neuen `isPublishDate`-Einstellungen in den Datumsfeldern Ihrer Content-Typen.",
|
||||
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "Diese Einstellung ist veraltet und wird in der nächsten Hauptversion entfernt. Bitte verwenden Sie stattdessen die neuen `isModifiedDate`-Einstellungen in den Datumsfeldern Ihrer Content-Typen.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "🚧: Specify the name of the custom field type to use.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.clearEmpty.description": "🚧: Specify if the empty values should be cleared.",
|
||||
"setting.frontMatter.website.host.markdownDescription": "🚧: Specify the host URL of your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
|
||||
"command.frontMatter.settings.refresh": "🚧: Refresh Front Matter Settings"
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "Geben Sie den Namen des zu verwendenden benutzerdefinierten Feldtyps an.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.clearEmpty.description": "Geben Sie an, ob die leeren Werte gelöscht werden sollen.",
|
||||
"setting.frontMatter.website.host.markdownDescription": "Geben Sie die Host-URL Ihrer Website an. [Überprüfen Sie die Dokumente] (https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
|
||||
"command.frontMatter.settings.refresh": "Aktualisieren Sie die Einstellungen für Frontmatter",
|
||||
"setting.frontMatter.config.dynamicFilePath.markdownDescription": "Geben Sie den Pfad zur dynamischen Konfigurationsdatei an (z. B. [[workspace]]/config.js). [Überprüfen Sie die Dokumente] (https://frontmatter.codes/docs/settings/overview#frontmatter.config.dynamicfilepath)",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.disableCreation.description": "Deaktivieren Sie die Erstellung neuer Inhalte im Ordner.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.contentTypes.description": "Definieren Sie die Inhaltstypen, für die das Skript verwendet werden soll. Wenn keine definiert sind, ist sie für alle Typen verfügbar."
|
||||
}
|
||||
@@ -40,7 +40,7 @@
|
||||
"command.frontMatter.preview": "記事のプレビューを開く",
|
||||
"command.frontMatter.chatbot": "Front Matter AIに質問する",
|
||||
"command.frontMatter.promoteSettings": "ローカル設定をチームレベルへ昇格させる",
|
||||
"command.frontMatter.remap": "全ての記事のタグまたはカテゴリーを再配置または削除する",
|
||||
"command.frontMatter.remap": "全ての記事のタグまたはカテゴリーを再構成または削除する",
|
||||
"command.frontMatter.setLastModifiedDate": "最終更新日を設定する",
|
||||
"command.frontMatter.markup.strikethrough": "取り消し線",
|
||||
"command.frontMatter.mode.switch": "モードの切り替え",
|
||||
@@ -50,90 +50,92 @@
|
||||
"command.frontMatter.cache.clear": "キャッシュをクリア",
|
||||
"settings.configuration.title": "Front Matter: チームで作業する場合はfrontmatter.jsonで設定してください。",
|
||||
"setting.frontMatter.projects.markdownDescription": "Front Matter CMSを利用するプロジェクトを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.projects)",
|
||||
"setting.frontMatter.projects.items.properties.name.markdownDescription": "🚧: Specify the name of the project.",
|
||||
"setting.frontMatter.projects.items.properties.default.markdownDescription": "🚧: Specify if this project is the default project to load.",
|
||||
"setting.frontMatter.projects.items.properties.name.markdownDescription": "プロジェクトの名前を指定します。",
|
||||
"setting.frontMatter.projects.items.properties.default.markdownDescription": "このプロジェクトを読み込む既定のプロジェクトにするかどうかを指定します。",
|
||||
"setting.frontMatter.sponsors.ai.enabled.markdownDescription": "AIによる提案を利用します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.sponsors.ai.enabled)",
|
||||
"setting.frontMatter.extensibility.scripts.markdownDescription": "Front Matter CMSで読み込むスクリプトのリストを指定します。. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.extensibility.scripts)",
|
||||
"setting.frontMatter.extensibility.scripts.markdownDescription": "Front Matter CMSで読み込むスクリプトのリストを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.extensibility.scripts)",
|
||||
"setting.frontMatter.experimental.markdownDescription": "実験的な機能をオンにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.experimental)",
|
||||
"setting.frontMatter.extends.markdownDescription": "Front Matter CMSの構成を拡張するパス/URLのリストを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.extends)",
|
||||
"setting.frontMatter.content.autoUpdateDate.markdownDescription": "記事やページの最終編集日を自動で更新します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.autoupdatedate)",
|
||||
"setting.frontMatter.content.defaultFileType.markdownDescription": "新しい記事を作成する際の既定のファイル形式を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultfiletype)",
|
||||
"setting.frontMatter.content.defaultSorting.markdownDescription": "ダッシュボード上に表示される記事一覧の既定の並び順を設定します。Enum(列挙型)や任意のIDを指定してください。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.defaultsorting)",
|
||||
"setting.frontMatter.content.draftField.markdownDescription": "記事の下書きステータスを管理するフィールドを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.draftfield)",
|
||||
"setting.frontMatter.content.draftField.properties.type.description": "🚧: Type of the draft field you want to use",
|
||||
"setting.frontMatter.content.draftField.properties.name.description": "🚧: Name of the field to use",
|
||||
"setting.frontMatter.content.draftField.properties.invert.description": "🚧: By default the draft field is set to true when the content is a draft. Set this to true to set it to false.",
|
||||
"setting.frontMatter.content.draftField.properties.choices.description": "🚧: List of choices for the field",
|
||||
"setting.frontMatter.content.draftField.properties.type.description": "使用する下書きフィールドの種類",
|
||||
"setting.frontMatter.content.draftField.properties.name.description": "使用するフィールドの名前",
|
||||
"setting.frontMatter.content.draftField.properties.invert.description": "既定では、記事が下書きの場合、下書きフィールドは true に設定されます。これを true に設定すると、false に設定されます。",
|
||||
"setting.frontMatter.content.draftField.properties.choices.description": "フィールドの選択肢のリスト",
|
||||
"setting.frontMatter.content.fmHighlight.markdownDescription": "Markdownファイル内のfront matterをハイライトします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.fmhighlight)",
|
||||
"setting.frontMatter.content.hideFm.markdownDescription": "Markdownファイル内のfront matterを非表示にします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefm)",
|
||||
"setting.frontMatter.content.hideFmMessage.markdownDescription": "front matterが非表示の際に、編集画面に表示するメッセージを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.hidefmmessage)",
|
||||
"setting.frontMatter.content.pageFolders.markdownDescription": "フォルダーを配列で定義して、この拡張機能が記事を取得したり新しい記事を作成できるようにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.pagefolders)",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.title.description": "🚧: Name of the folder",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.path.description": "🚧: Path of the folder",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.excludeSubdir.description": "🚧: Exclude sub-directories",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.previewPath.description": "🚧: Defines a custom preview path for the folder.",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.filePrefix.description": "🚧: Defines a prefix for the file name.",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.contentTypes.description": "🚧: Defines which content types can be used for the current location. If not defined, all content types will be available.",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.title.description": "フォルダーの名前",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.path.description": "フォルダーのパス",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.excludeSubdir.description": "サブディレクトリを除外する",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.previewPath.description": "フォルダーのカスタム プレビュー パスを定義します。",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.filePrefix.description": "ファイル名の接頭辞を定義します。",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.contentTypes.description": "現在の場所に使用できる記事タイプを定義します。定義しない場合は、全ての記事タイプを使用できます。",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.disableCreation.description": "フォルダー内の新しい記事の作成を無効にします。",
|
||||
"setting.frontMatter.content.placeholders.markdownDescription": "記事タイプとテンプレートで使用するプレースホルダーを配列で定義して、記事のfront matterを自動で入力できるようにします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.placeholders)",
|
||||
"setting.frontMatter.content.placeholders.items.properties.id.description": "🚧: ID of the placeholder, in your content type or template, use it as follows: {{placeholder}}",
|
||||
"setting.frontMatter.content.placeholders.items.properties.value.description": "🚧: The placeholder its value",
|
||||
"setting.frontMatter.content.placeholders.items.properties.script.description": "🚧: The script to execute to get the value of the placeholder",
|
||||
"setting.frontMatter.content.placeholders.items.properties.id.description": "プレースホルダーのIDを記事タイプまたはテンプレートで、次のように使用します: {{placeholder}}",
|
||||
"setting.frontMatter.content.placeholders.items.properties.value.description": "プレースホルダーの値",
|
||||
"setting.frontMatter.content.placeholders.items.properties.script.description": "プレースホルダーの値を取得するために実行するスクリプト",
|
||||
"setting.frontMatter.content.publicFolder.markdownDescription": "アセットが保存されているフォルダーを設定します。例えば、Hugoでは`static`フォルダーです。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.publicfolder)",
|
||||
"setting.frontMatter.content.publicFolder.properties.path.description": "アセットフォルダーのパスを指定します。",
|
||||
"setting.frontMatter.content.publicFolder.properties.relative.description": "メディアファイルへのパスがコンテンツファイルに対して相対的であるかを定義します。",
|
||||
"setting.frontMatter.content.publicFolder.properties.relative.description": "メディアファイルへのパスが記事ファイルに対して相対的であるかを定義します。",
|
||||
"setting.frontMatter.snippets.wrapper.enabled.markdownDescription": "スニペット挿入時にコメントでラップします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.snippets.wrapper.enabled)",
|
||||
"setting.frontMatter.content.snippets.markdownDescription": "記事中に使用するスニペットを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.snippets)",
|
||||
"setting.frontMatter.content.sorting.markdownDescription": "ダッシュボード上での記事の並べ替えオプションを追加します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.sorting)",
|
||||
"setting.frontMatter.content.sorting.items.properties.id.description": "🚧: The ID of the sorting option. This will be used for the storing the last used sorting option or the default option.",
|
||||
"setting.frontMatter.content.sorting.items.properties.title.description": "🚧: Name of the sorting label",
|
||||
"setting.frontMatter.content.sorting.items.properties.name.description": "🚧: Name of the metadata field to sort by",
|
||||
"setting.frontMatter.content.sorting.items.properties.order.description": "🚧: Order of the sorting",
|
||||
"setting.frontMatter.content.sorting.items.properties.type.description": "🚧: Type of the field value",
|
||||
"setting.frontMatter.content.sorting.items.properties.id.description": "並べ替えオプションの ID。これは、最後に使用した並べ替えオプションまたは既定のオプションを格納するために使用されます。",
|
||||
"setting.frontMatter.content.sorting.items.properties.title.description": "並べ替えラベルの名前",
|
||||
"setting.frontMatter.content.sorting.items.properties.name.description": "並べ替えの基準となるメタデータ フィールドの名前",
|
||||
"setting.frontMatter.content.sorting.items.properties.order.description": "ソートの順序",
|
||||
"setting.frontMatter.content.sorting.items.properties.type.description": "フィールド値の型",
|
||||
"setting.frontMatter.content.supportedFileTypes.markdownDescription": "Front Matterでサポートされるファイル形式を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.supportedfiletypes)",
|
||||
"setting.frontMatter.content.wysiwyg.markdownDescription": "What You See, Is What You Get(WYSIWYG)Markdownコントロールを有効にします。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.content.wysiwyg)",
|
||||
"setting.frontMatter.custom.scripts.markdownDescription": "実行するNode.jsスクリプトのパスを指定します。現在のファイルのパスが引数として渡されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.custom.scripts)",
|
||||
"setting.frontMatter.custom.scripts.items.properties.id.description": "🚧: ID of the script.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.title.description": "🚧: Title you want to give to your script. Will be shown as the title of the button.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.script.description": "🚧: Path to the script to execute",
|
||||
"setting.frontMatter.custom.scripts.items.properties.nodeBin.description": "🚧: Path to the node executable. This is required when using NVM, so that there is no confusion of which node version to use. (deprecated: use the command property instead)",
|
||||
"setting.frontMatter.custom.scripts.items.properties.bulk.description": "🚧: Run the script for all content files",
|
||||
"setting.frontMatter.custom.scripts.items.properties.output.description": "🚧: Define where you want to output your script output. Default is a notification, but you can specify to show it in an editor panel.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.outputType.description": "🚧: The type of output for the editor panel. Can be used to change it to 'markdown' for example",
|
||||
"setting.frontMatter.custom.scripts.items.properties.type.description": "🚧: The type for which the script will be used.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.command.description": "🚧: The type of script you want to execute.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.hidden.description": "🚧: Hide the action from the UI",
|
||||
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.type.description": "🚧: The environment type for which the script needs to be used",
|
||||
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.script.description": "🚧: Path to the script to execute",
|
||||
"setting.frontMatter.custom.scripts.items.properties.id.description": "スクリプトの ID。",
|
||||
"setting.frontMatter.custom.scripts.items.properties.title.description": "スクリプトに付けるタイトル。ボタンのタイトルとして表示されます。",
|
||||
"setting.frontMatter.custom.scripts.items.properties.script.description": "実行するスクリプトへのパス",
|
||||
"setting.frontMatter.custom.scripts.items.properties.nodeBin.description": "実行可能なNode.jsへのパス。これは、NVMを使用する際に、Node.jsのバージョンが混同されないようにするために必要です。(非推奨: 代わりにコマンドプロパティを使用してください)",
|
||||
"setting.frontMatter.custom.scripts.items.properties.bulk.description": "全ての記事ファイルに対してスクリプトを実行する",
|
||||
"setting.frontMatter.custom.scripts.items.properties.output.description": "スクリプト出力を出力する場所を定義します。デフォルトは通知表示ですが、エディターパネルに表示するように指定できます。",
|
||||
"setting.frontMatter.custom.scripts.items.properties.outputType.description": "エディター・パネルの出力のタイプ。たとえば、「マークダウン」に変更するために使用できます",
|
||||
"setting.frontMatter.custom.scripts.items.properties.type.description": "スクリプトが使用される型。",
|
||||
"setting.frontMatter.custom.scripts.items.properties.command.description": "実行するスクリプトの種類。",
|
||||
"setting.frontMatter.custom.scripts.items.properties.hidden.description": "UI からアクションを非表示にする",
|
||||
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.type.description": "スクリプトを使用する必要がある環境タイプ",
|
||||
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.script.description": "実行するスクリプトへのパス",
|
||||
"setting.frontMatter.custom.scripts.items.properties.contentTypes.description": "スクリプトを使用する記事タイプを定義します。何も定義されていない場合は、全ての型で使用できます。",
|
||||
"setting.frontMatter.dashboard.content.pagination.markdownDescription": "ページネーションの有効/無効を設定します。ページ数は最大52まで設定できます。規定値は`16`です。ページ分割を無効にするには`false`を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.pagination)",
|
||||
"setting.frontMatter.dashboard.content.cardTags.markdownDescription": "記事一覧をカード型で表示する際、どのメタデータフィールドをタグとして使うかを指定します。空欄またはnull値の場合、タグは表示されなくなります。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.cardtags)",
|
||||
"setting.frontMatter.dashboard.content.card.fields.state.markdownDescription": "記事一覧をカード型で表示する際、下書き・公開済みのステータスを表示します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.state)",
|
||||
"setting.frontMatter.dashboard.content.card.fields.date.markdownDescription": "記事一覧をカード型で表示する際、日付を表示します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.date)",
|
||||
"setting.frontMatter.dashboard.content.card.fields.description.markdownDescription": "記事一覧をカード型で表示する際、どのメタデータフィールドをディスクリプションとして使うかを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.description)",
|
||||
"setting.frontMatter.dashboard.content.card.fields.title.markdownDescription": "記事一覧をカード型で表示する際、どのメタデータフィールドをタイトルとして使うかを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.title)",
|
||||
"setting.frontMatter.dashboard.mediaSnippet.markdownDescription": "🚧: Specify the a snippet for your custom media insert markup. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.mediasnippet)",
|
||||
"setting.frontMatter.dashboard.mediaSnippet.markdownDescription": "カスタムメディア挿入マークアップのスニペットを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.mediasnippet)",
|
||||
"setting.frontMatter.dashboard.mediaSnippet.items.description": "スニペット内で `{mediaUrl}`, `{caption}`, `{alt}`, `{filename}`, `{mediaHeight}`, `{mediaWidth}` のプレースホルダーを使用して、メディア情報を自動的に挿入します。",
|
||||
"setting.frontMatter.dashboard.openOnStart.markdownDescription": "VS Codeの起動時にダッシュボードを表示します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.openonstart)",
|
||||
"setting.frontMatter.data.files.markdownDescription": "ウェブサイトに使用するデータのファイルを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.data.files)",
|
||||
"setting.frontMatter.data.files.items.properties.id.description": "🚧: Your unique ID you want to use for your data file.",
|
||||
"setting.frontMatter.data.files.items.properties.title.description": "🚧: Title you want to give to your data file.",
|
||||
"setting.frontMatter.data.files.items.properties.labelField.description": "🚧: The field you want to use as label for your data entries.",
|
||||
"setting.frontMatter.data.files.items.properties.file.description": "🚧: Path to the file to load. Only JSON or YAML files are supported.",
|
||||
"setting.frontMatter.data.files.items.properties.fileType.description": "🚧: Defines how you want to parse the file. JSON is the default.",
|
||||
"setting.frontMatter.data.files.items.properties.schema.description": "🚧: The JSON schema for your data which will be used to render the data form.",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.title.description": "🚧: Title of the form.",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.type.description": "🚧: Defines the type of the form. Default is 'object'.",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.required.description": "🚧: Defines the required fields for the form.",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.properties.description": "🚧: Defines the fields of the form.",
|
||||
"setting.frontMatter.data.files.items.properties.type.description": "🚧: If you are using data types, you can specify your type ID.",
|
||||
"setting.frontMatter.data.files.items.properties.singleEntry.description": "🚧: If you want to use a single entry for your data file.",
|
||||
"setting.frontMatter.data.files.items.properties.id.description": "データ ファイルに使用する一意の ID。",
|
||||
"setting.frontMatter.data.files.items.properties.title.description": "データ ファイルに付けるタイトル。",
|
||||
"setting.frontMatter.data.files.items.properties.labelField.description": "データエントリのラベルとして使用するフィールド。",
|
||||
"setting.frontMatter.data.files.items.properties.file.description": "読み込むファイルへのパス。JSON または YAML ファイルのみがサポートされています。",
|
||||
"setting.frontMatter.data.files.items.properties.fileType.description": "ファイルの解析方法を定義します。JSON がデフォルトです。",
|
||||
"setting.frontMatter.data.files.items.properties.schema.description": "データ フォームのレンダリングに使用されるデータの JSON スキーマ。",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.title.description": "フォームのタイトル。",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.type.description": "フォームの種類を定義します。デフォルトは 'オブジェクト' です。",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.required.description": "フォームの必須フィールドを定義します。",
|
||||
"setting.frontMatter.data.files.items.properties.schema.properties.properties.description": "フォームのフィールドを定義します。",
|
||||
"setting.frontMatter.data.files.items.properties.type.description": "データ型を使用している場合は、型 ID を指定できます。",
|
||||
"setting.frontMatter.data.files.items.properties.singleEntry.description": "データ ファイルに 1 つのエントリを使用する場合。",
|
||||
"setting.frontMatter.data.folders.markdownDescription": "ウェブサイトに使用するデータのフォルダーを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.data.folders)",
|
||||
"setting.frontMatter.data.folders.items.properties.id.description": "🚧: Your unique ID you want to use for your data folder.",
|
||||
"setting.frontMatter.data.folders.items.properties.labelField.description": "🚧: The field you want to use as label for your data entries.",
|
||||
"setting.frontMatter.data.folders.items.properties.path.description": "🚧: Path to the folder to load files.",
|
||||
"setting.frontMatter.data.folders.items.properties.type.description": "🚧: If you are using data types, you can specify your type ID.",
|
||||
"setting.frontMatter.data.folders.items.properties.singleEntry.description": "🚧: If you want to use a single entry for your data files in the folder.",
|
||||
"setting.frontMatter.data.folders.items.properties.id.description": "データ フォルダーに使用する一意の ID。",
|
||||
"setting.frontMatter.data.folders.items.properties.labelField.description": "データエントリのラベルとして使用するフィールド。",
|
||||
"setting.frontMatter.data.folders.items.properties.path.description": "ファイルを読み込むフォルダーへのパス。",
|
||||
"setting.frontMatter.data.folders.items.properties.type.description": "データ型を使用している場合は、型 ID を指定できます。",
|
||||
"setting.frontMatter.data.folders.items.properties.singleEntry.description": "フォルダー内のデータ ファイルに 1 つのエントリを使用する場合。",
|
||||
"setting.frontMatter.data.types.markdownDescription": "データタイプを指定します。これらのタイプは、データファイルで使用できます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.data.types)",
|
||||
"setting.frontMatter.data.types.items.properties.id.description": "🚧: Your unique ID you want to use for your data type.",
|
||||
"setting.frontMatter.data.types.items.properties.id.description": "データ型に使用する一意の ID。",
|
||||
"setting.frontMatter.file.preserveCasing.markdownDescription": "タイトルからファイル名の大文字と小文字を区別します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.file.preservecasing)",
|
||||
"setting.frontMatter.framework.id.markdownDescription": "ウェブサイトに使用している静的サイトジェネレーターまたはフレームワークのIDを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.id)",
|
||||
"setting.frontMatter.framework.startCommand.markdownDescription": "静的サイト・ジェネレーターまたはフレームワークを起動させるコマンドを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.framework.startcommand)",
|
||||
@@ -145,82 +147,85 @@
|
||||
"setting.frontMatter.git.submodule.folder.markdownDescription": "コンテンツのサブモジュールフォルダーを指定します。複数のサブモジュールを使用する場合に便利です。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.git.submodule.folder)",
|
||||
"setting.frontMatter.global.activeMode.markdownDescription": "Front Matterで有効なモードを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.activemode)",
|
||||
"setting.frontMatter.global.modes.markdownDescription": "Front Matterで利用するモードを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.modes)",
|
||||
"setting.frontMatter.global.modes.items.properties.id.description": "🚧: The ID of your mode.",
|
||||
"setting.frontMatter.global.modes.items.properties.features.description": "🚧: The features you want to use for your mode.",
|
||||
"setting.frontMatter.global.modes.items.properties.id.description": "モードの ID。",
|
||||
"setting.frontMatter.global.modes.items.properties.features.description": "モードに使用する機能。",
|
||||
"setting.frontMatter.global.notifications.markdownDescription": "表示したい通知を設定します。既定では全ての通知が表示されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.notifications)",
|
||||
"setting.frontMatter.global.disabledNotificaitons.markdownDescription": "表示しない通知を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
|
||||
"setting.frontMatter.global.disabledNotifications.markdownDescription": "これは、Front Matter CMSで無効にできる通知タイプの配列です。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
|
||||
"setting.frontMatter.media.defaultSorting.markdownDescription": "ダッシュボードのメディア一覧での既定の並び順を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.media.defaultsorting)",
|
||||
"setting.frontMatter.media.supportedMimeTypes.markdownDescription": "メディアファイルでサポートされるMIMEタイプを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes)",
|
||||
"setting.frontMatter.panel.freeform.markdownDescription": "未登録のタグ/カテゴリーをタグピッカーに入力することを許可するかどうかを設定します(有効にすると、後で保存するオプションが使えます)。規定値はtrue。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform)",
|
||||
"setting.frontMatter.panel.freeform.markdownDescription": "未登録のタグ/カテゴリーをタグピッカーに入力可能にするかどうかを設定します(有効にすると、後で保存するオプションが使えます)。規定値はtrue。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform)",
|
||||
"setting.frontMatter.panel.actions.disabled.markdownDescription": "パネル内で非表示にしたいコマンドを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.actions.disabled)",
|
||||
"setting.frontMatter.preview.host.markdownDescription": "プレビュー表示に使用するホストのURLを設定します(例:`http://localhost:1313`)。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.host)",
|
||||
"setting.frontMatter.preview.pathName.markdownDescription": "ホストパスとスラッグの間に追加したいパスを設定します。例えば、パスに`yyyy/MM`などの日付を含めたい場合等に使えます。日付は記事の日付フィールドの値に基づいて生成されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.pathname)",
|
||||
"setting.frontMatter.site.baseURL.markdownDescription": "ベースURLを設定します。これはSEOチェックに利用されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.site.baseurl)",
|
||||
"setting.frontMatter.taxonomy.alignFilename.markdownDescription": "ファイル生成時にファイル名をスラッグに合わせる[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.alignfilename)",
|
||||
"setting.frontMatter.taxonomy.alignFilename.markdownDescription": "ファイル生成時にファイル名をスラッグに合わせます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.alignfilename)",
|
||||
"setting.frontMatter.taxonomy.categories.markdownDescription": "Front Matterで利用するカテゴリーを管理します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.categories)",
|
||||
"setting.frontMatter.taxonomy.commaSeparatedFields.markdownDescription": "カンマ区切りで配列を管理するフィールド名を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.commaseparatedfields)",
|
||||
"setting.frontMatter.taxonomy.commaSeparatedFields.items.description": "コンマ区切りの配列として使用するフィールドの名前。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.markdownDescription": "記事・ページ・その他で利用したい記事タイプを設定します。front matterで正しく`type`が設定されていることを確認してください。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.contenttypes)",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.description": "Front Matterで使用するコンテンツタイプを定義します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.name.description": "🚧: Define the type of field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fileType.description": "🚧: Specifies the type of content you want to create.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.description": "🚧: Define the fields of the content type",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.description": "Front Matterで使用するコンテンツタイプを定義します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.type.description": "🚧: Define the type of field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.name.description": "🚧: Name of the field to use",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.title.description": "🚧: Title to show in the UI",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.description.description": "🚧: Description to show in the UI",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.default.description": "🚧: Default value",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.description": "🚧: Define your choices",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.id.description": "🚧: The choice ID",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.title.description": "🚧: The choice title",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.single.description": "🚧: Is a single line field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.wysiwyg.description": "🚧: Is a WYSIWYG field (HTML output)",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.multiple.description": "🚧: Do you allow to select multiple values?",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPreviewImage.description": "🚧: Specify if the image field can be used as preview. Be aware, you can only have one preview image per content type.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.hidden.description": "🚧: Do you want to hide the field from the metadata section?",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyId.description": "🚧: The ID of your taxonomy field. It cannot contain the \"tags\" or \"categories\" value.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fileExtensions.description": "🚧: Specify the file extensions to allow for the file picker",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fieldGroup.description": "🚧: The ID(s) of your field group(s) defined in the `frontMatter.taxonomy.fieldGroups` setting",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataType.description": "🚧: The ID(s) of your data type(s) defined in the `frontMatter.data.types` setting",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.description": "🚧: Specify the options for the number field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.isDecimal.description": "🚧: Specify if the number is a decimal",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.min.description": "🚧: The minimum value",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.max.description": "🚧: The maximum value",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.step.description": "🚧: The step value",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description": "🚧: Limit the number of taxonomies to select. Set to 0 to allow unlimited.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPublishDate.description": "🚧: Specify if the field is the publish date field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isModifiedDate.description": "🚧: Specify if the field is the modified date field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileId.description": "🚧: Specify the ID of the data file to use for this field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileKey.description": "🚧: Specify the key of the data file to use for this field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileValue.description": "🚧: Specify the property name that will be used to show the value for the field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.editable.description": "🚧: Specify if the field is editable",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.encodeEmoji.description": "🚧: Specify if the field should encode emoji",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dateFormat.description": "🚧: Specify the date format to use",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.required.description": "🚧: Specify if the field is required",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeName.description": "🚧: Specify the content type name to filter content for the contentRelationship field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeValue.description": "🚧: Specify the value to insert for the contentRelationship field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.description": "🚧: Specify the conditions to show the field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.fieldRef.description": "🚧: The field ID to use",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.operator.description": "🚧: The operator to use",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.value.description": "🚧: The value to compare",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.caseSensitive.description": "🚧: Specify if the comparison is case sensitive. Default: true",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.pageBundle.description": "🚧: Specify if you want to create a folder when creating new content.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.previewPath.description": "🚧: Defines a custom preview path for the content type.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.template.description": "🚧: An optional template that can be used for creating new content.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.postScript.description": "🚧: An optional post script that can be used after new content creation.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.filePrefix.description": "🚧: Defines a prefix for the file name.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.defaultFileName.description": "🚧: Default file name to use when creating new content.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.description": "Front Matterで使用する記事タイプを定義します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.name.description": "フィールドの種類を定義する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fileType.description": "作成する記事タイプを指定します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.description": "記事タイプのフィールドを定義する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.description": "Front Matterで使用する記事タイプを定義します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.type.description": "フィールドの種類を定義する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.name.description": "使用するフィールドの名前",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.title.description": "UI に表示するタイトル",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.description.description": "UI に表示する説明",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.default.description": "既定値",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.description": "選択肢を定義する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.id.description": "選択肢 ID",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.choices.items.properties.title.description": "選択肢のタイトル",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.single.description": "単一行フィールドである",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.wysiwyg.description": "WYSIWYG フィールド (HTML 出力) である",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.multiple.description": "複数の値を選択できますか?",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPreviewImage.description": "画像フィールドをプレビューとして使用できるかどうかを指定します。記事タイプごとに使用できるプレビュー画像は1つだけです。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.hidden.description": "メタデータ セクションからフィールドを非表示にしますか?",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyId.description": "分類フィールドのID。「タグ」または「カテゴリ」の値を含めることはできません。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fileExtensions.description": "ファイルピッカーで許可するファイル拡張子を指定する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.fieldGroup.description": "'frontMatter.taxonomy.fieldGroups' 設定で定義されているフィールドグループの ID",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataType.description": "'frontMatter.data.types' 設定で定義されているデータ型の ID",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.description": "数値フィールドのオプションを指定する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.isDecimal.description": "数値が 10 進数かどうかを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.min.description": "最小値",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.max.description": "最大値",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.step.description": "ステップ値",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description": "選択する分類の数を制限します。無制限を許可するには 0 に設定します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.singleValueAsString.description": "配列内の要素が1つだけの時、配列ではなく文字列として扱います。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPublishDate.description": "フィールドが公開日フィールドであるかどうかを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isModifiedDate.description": "フィールドが変更日フィールドであるかどうかを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileId.description": "このフィールドに使用するデータファイルのIDを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileKey.description": "このフィールドに使用するデータファイルのキーを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileValue.description": "フィールドの値を表示するために使用するプロパティ名を指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.editable.description": "フィールドが編集可能かどうかを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.encodeEmoji.description": "フィールドが絵文字をエンコードするかどうかを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dateFormat.description": "使用する日付形式を指定する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.required.description": "フィールドが必須かどうかを指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeName.description": "記事タイプを指定して、contentRelationship フィールドのコンテンツをフィルター処理します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.contentTypeValue.description": "コンテンツリレーションシップフィールドに挿入する値を指定します",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.description": "フィールドを表示する条件を指定する",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.fieldRef.description": "使用するフィールド ID",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.operator.description": "使用する演算子",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.value.description": "比較する値",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.when.properties.caseSensitive.description": "比較で大文字と小文字を区別するかどうかを指定します。デフォルト: true",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.pageBundle.description": "新しい記事を作成するときにフォルダーを作成するかどうかを指定します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.previewPath.description": "記事タイプのカスタム プレビュー パスを定義します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.template.description": "新しい記事の作成に使用できるオプションのテンプレート。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.postScript.description": "新しい記事の作成後に使用できるオプションのポストスクリプト。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.filePrefix.description": "ファイル名の接頭辞を定義します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.defaultFileName.description": "新しい記事の作成時に使用する既定のファイル名。",
|
||||
"setting.frontMatter.taxonomy.customTaxonomy.markdownDescription": "カスタムタクソノミーのフィールドデータを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.tags)",
|
||||
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.id.description": "🚧: ID for your taxonomy field. It cannot contain the \"tags\" or \"categories\" value.",
|
||||
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.options.description": "🚧: Options from which you can pick.",
|
||||
"setting.frontMatter.taxonomy.dateField.markdownDescription": "🚧: This setting is used to define the publishing date field of your articles. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield)",
|
||||
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.id.description": "分類フィールドの ID。「タグ」または「カテゴリ」の値を含めることはできません。",
|
||||
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.options.description": "選択できるオプション。",
|
||||
"setting.frontMatter.taxonomy.dateField.markdownDescription": "この設定は、記事の公開日フィールドを定義するために使用されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield)",
|
||||
"setting.frontMatter.taxonomy.dateFormat.markdownDescription": "記事の日付フォーマットを指定します。詳しくは[date-fns formatting](https://date-fns.org/v2.0.1/docs/format)を確認してください。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.dateformat)",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.markdownDescription": "ブロックフィールドで使用したいフィールドグループを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.fieldgroups)",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.items.properties.id.description": "🚧: The name of the field group",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.items.properties.labelField.description": "🚧: The name of the field to be used as display value",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.items.properties.id.description": "フィールドグループの名前",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.items.properties.labelField.description": "表示値として使用するフィールドの名前",
|
||||
"setting.frontMatter.taxonomy.frontMatterType.markdownDescription": "front matterの形式を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.frontmattertype)",
|
||||
"setting.frontMatter.taxonomy.indentArrays.markdownDescription": "front matterメタデータが配列の場合はインデント(字下げ)させます。規定値はtrueです。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.indentarrays)",
|
||||
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "🚧: This setting is used to define the modified date field of your articles. [ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield)",
|
||||
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "この設定は、記事の変更日フィールドを定義するために使用されます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield)",
|
||||
"setting.frontMatter.taxonomy.quoteStringValues.markdownDescription": "front matterの文字列の値をクォーテーションで囲みます。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.quotestringvalues)",
|
||||
"setting.frontMatter.taxonomy.noPropertyValueQuotes.markdownDescription": "引用符を付与しないメタデータを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.nopropertyvaluequotes)",
|
||||
"setting.frontMatter.taxonomy.noPropertyValueQuotes.items.description": "引用符を削除したいプロパティの名前。",
|
||||
"setting.frontMatter.taxonomy.seoContentLengh.markdownDescription": "最適な記事の長さを指定します。2021年のSEOでは、1,760語から2,400語の間が最も理想的とされています。(-1に設定するとオフになります。)[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seocontentlengh)",
|
||||
@@ -236,12 +241,14 @@
|
||||
"setting.frontMatter.templates.enabled.markdownDescription": "テンプレート機能を利用します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.enabled)",
|
||||
"setting.frontMatter.templates.folder.markdownDescription": "テンプレートを保存するフォルダーを設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.folder)",
|
||||
"setting.frontMatter.templates.prefix.markdownDescription": "新しい記事の作成時、ファイル名に付与する接頭辞を設定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.templates.prefix)",
|
||||
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "🚧: This setting is deprecated and will be removed in the next major version. Please define your media snippet in the `frontMatter.content.snippet` setting.",
|
||||
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "🚧: This setting is deprecated and will be removed in the next major version. Please use the new `isPublishDate` settings instead in your content types date fields.",
|
||||
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "🚧: This setting is deprecated and will be removed in the next major version. Please use the new `isModifiedDate` settings instead in your content types date fields.",
|
||||
"setting.frontMatter.global.disabledNotifications.markdownDescription": "🚧: This is an array with the notifications types that can be disabled for Front Matter CMS. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.global.disablednotifications)",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "🚧: Specify the name of the custom field type to use.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.clearEmpty.description": "🚧: Specify if the empty values should be cleared.",
|
||||
"setting.frontMatter.website.host.markdownDescription": "🚧: Specify the host URL of your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
|
||||
"command.frontMatter.settings.refresh": "🚧: Refresh Front Matter Settings"
|
||||
"setting.frontMatter.dashboard.mediaSnippet.deprecationMessage": "この設定は非推奨であり、次のメジャーバージョンで削除される予定です。メディア スニペットは 'frontMatter.content.snippet' 設定で定義してください。",
|
||||
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "この設定は非推奨であり、次のメジャーバージョンで削除される予定です。代わりに、記事タイプの日付フィールドで新しい 'isPublishDate' 設定を使用してください。",
|
||||
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "この設定は非推奨であり、次のメジャーバージョンで削除される予定です。代わりに、記事タイプの日付フィールドで新しい 'isModifiedDate' 設定を使用してください。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "使用するユーザー設定フィールド型の名前を指定します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.clearEmpty.description": "空の値をクリアするかどうかを指定します。",
|
||||
"setting.frontMatter.website.host.markdownDescription": "ウェブサイトのホストURLを指定します。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
|
||||
"command.frontMatter.settings.refresh": "Front Matterの設定の再読み込み",
|
||||
"setting.frontMatter.config.dynamicFilePath.markdownDescription": "動的構成ファイルへのパスを指定します (例: [[ワークスペース]]/config.js)。[ドキュメントを確認](https://frontmatter.codes/docs/settings/overview#frontmatter.config.dynamicfilepath)",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.allowAsSubContent.description": "記事をサブコンテンツとして作成可能かどうかを設定します。",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.isSubContent.description": "記事をサブコンテンツとして作成するかどうかを設定します。"
|
||||
}
|
||||
@@ -74,6 +74,7 @@
|
||||
"setting.frontMatter.content.pageFolders.items.properties.previewPath.description": "Defines a custom preview path for the folder.",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.filePrefix.description": "Defines a prefix for the file name.",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.contentTypes.description": "Defines which content types can be used for the current location. If not defined, all content types will be available.",
|
||||
"setting.frontMatter.content.pageFolders.items.properties.disableCreation.description": "Disable the creation of new content in the folder.",
|
||||
"setting.frontMatter.content.placeholders.markdownDescription": "This array of placeholders defines the placeholders that you can use in your content types and templates for automatically populating your content its front matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.placeholders)",
|
||||
"setting.frontMatter.content.placeholders.items.properties.id.description": "ID of the placeholder, in your content type or template, use it as follows: {{placeholder}}",
|
||||
"setting.frontMatter.content.placeholders.items.properties.value.description": "The placeholder its value",
|
||||
@@ -91,6 +92,7 @@
|
||||
"setting.frontMatter.content.sorting.items.properties.type.description": "Type of the field value",
|
||||
"setting.frontMatter.content.supportedFileTypes.markdownDescription": "Specify the file types that you want to use in Front Matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.supportedfiletypes)",
|
||||
"setting.frontMatter.content.wysiwyg.markdownDescription": "Specifies if you want to enable/disable the What You See, Is What You Get (WYSIWYG) markdown controls. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.wysiwyg)",
|
||||
"setting.frontMatter.content.filters.markdownDescription": "Specify the filters you want to use for your content dashboard. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.content.filters)",
|
||||
"setting.frontMatter.custom.scripts.markdownDescription": "Specify the path to a Node.js script to execute. The current file path will be provided as an argument. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.custom.scripts)",
|
||||
"setting.frontMatter.custom.scripts.items.properties.id.description": "ID of the script.",
|
||||
"setting.frontMatter.custom.scripts.items.properties.title.description": "Title you want to give to your script. Will be shown as the title of the button.",
|
||||
@@ -104,6 +106,7 @@
|
||||
"setting.frontMatter.custom.scripts.items.properties.hidden.description": "Hide the action from the UI",
|
||||
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.type.description": "The environment type for which the script needs to be used",
|
||||
"setting.frontMatter.custom.scripts.items.properties.environments.items.properties.script.description": "Path to the script to execute",
|
||||
"setting.frontMatter.custom.scripts.items.properties.contentTypes.description": "Define the content types for which the script will be used. If none are defined, it will be available to all types.",
|
||||
"setting.frontMatter.dashboard.content.pagination.markdownDescription": "Specify if you want to enable/disable pagination for your content. You can define your page number up to 52. Default items per page is `16`. Disabling the pagination can be done by setting it to `false`. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.pagination)",
|
||||
"setting.frontMatter.dashboard.content.cardTags.markdownDescription": "Specify the name of the metadata field that will be used to show the tags on the content card. When empty or null, it will hide the tags from the card. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.dashboard.content.cardtags)",
|
||||
"setting.frontMatter.dashboard.content.card.fields.state.markdownDescription": "Specify if you want to show the state/draft status on the content card view. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontMatter.dashboard.content.card.fields.state)",
|
||||
@@ -152,6 +155,7 @@
|
||||
"setting.frontMatter.media.defaultSorting.markdownDescription": "Specify the default sorting option for the media dashboard. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.defaultsorting)",
|
||||
"setting.frontMatter.media.supportedMimeTypes.markdownDescription": "Specify the mime types to support for the media files. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.media.supportedmimetypes)",
|
||||
"setting.frontMatter.panel.freeform.markdownDescription": "Specifies if you want to allow yourself from entering unknown tags/categories in the tag picker (when enabled, you will have the option to store them afterwards). Default: true. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.freeform)",
|
||||
"setting.frontMatter.panel.actions.disabled.markdownDescription": "Specify the actions you want to disable in the panel. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.panel.actions.disabled)",
|
||||
"setting.frontMatter.preview.host.markdownDescription": "Specify the host URL (example: http://localhost:1313) to be used when opening the preview. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.host)",
|
||||
"setting.frontMatter.preview.pathName.markdownDescription": "Specify the path you want to add after the host and before your slug. This can be used for instance to include the year/month like: `yyyy/MM`. The date will be generated based on the article its date field value. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.preview.pathname)",
|
||||
"setting.frontMatter.site.baseURL.markdownDescription": "Specify the base URL of your site, this will be used for SEO checks. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.site.baseurl)",
|
||||
@@ -188,6 +192,7 @@
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.max.description": "The maximum value",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.numberOptions.properties.step.description": "The step value",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.taxonomyLimit.description": "Limit the number of taxonomies to select. Set to 0 to allow unlimited.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.singleValueAsString.description": "Specify if you want to store a single array value as a string instead of an array.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isPublishDate.description": "Specify if the field is the publish date field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.isModifiedDate.description": "Specify if the field is the modified date field",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.dataFileId.description": "Specify the ID of the data file to use for this field",
|
||||
@@ -215,12 +220,13 @@
|
||||
"setting.frontMatter.taxonomy.customTaxonomy.items.properties.options.description": "Options from which you can pick.",
|
||||
"setting.frontMatter.taxonomy.dateField.markdownDescription": "This setting is used to define the publishing date field of your articles. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.datefield)",
|
||||
"setting.frontMatter.taxonomy.dateFormat.markdownDescription": "Specify the date format for your articles. Check [date-fns formating](https://date-fns.org/v2.0.1/docs/format) for more information. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.dateformat)",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.markdownDescription": "Define the field groups you want to use for your block fields. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.fieldgroups)",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.markdownDescription": "Define the field groups you want to use for your block fields or collection fields. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.fieldgroups)",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.items.properties.id.description": "The name of the field group",
|
||||
"setting.frontMatter.taxonomy.fieldGroups.items.properties.labelField.description": "The name of the field to be used as display value",
|
||||
"setting.frontMatter.taxonomy.frontMatterType.markdownDescription": "Specify the type of Front Matter to use. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.frontmattertype)",
|
||||
"setting.frontMatter.taxonomy.indentArrays.markdownDescription": "Specify if arrays in front matter are indented. Default: true. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.indentarrays)",
|
||||
"setting.frontMatter.taxonomy.modifiedField.markdownDescription": "This setting is used to define the modified date field of your articles. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.modifiedfield)",
|
||||
"setting.frontMatter.taxonomy.quoteStringValues.markdownDescription": "Specify if you want to quote string values in the front matter. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.quotestringvalues)",
|
||||
"setting.frontMatter.taxonomy.noPropertyValueQuotes.markdownDescription": "Specify the properties from which quotes need to be removed. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.nopropertyvaluequotes)",
|
||||
"setting.frontMatter.taxonomy.noPropertyValueQuotes.items.description": "Name of the properties you want to remove quotes from.",
|
||||
"setting.frontMatter.taxonomy.seoContentLengh.markdownDescription": "Specifies the optimal minimum length for your articles. Between 1,760 words – 2,400 is the absolute ideal article length for SEO in 2021. (set to `-1` to turn it off). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.taxonomy.seocontentlengh)",
|
||||
@@ -240,7 +246,10 @@
|
||||
"setting.frontMatter.taxonomy.dateField.deprecationMessage": "This setting is deprecated and will be removed in the next major version. Please use the new `isPublishDate` settings instead in your content types date fields.",
|
||||
"setting.frontMatter.taxonomy.modifiedField.deprecationMessage": "This setting is deprecated and will be removed in the next major version. Please use the new `isModifiedDate` settings instead in your content types date fields.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.customType.description": "Specify the name of the custom field type to use.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.fields.items.properties.clearEmpty.description": "Specify if the empty values should be cleared.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.clearEmpty.description": "Specify if the empty values should be cleared.",
|
||||
"setting.frontMatter.website.host.markdownDescription": "Specify the host URL of your website. [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.website.url)",
|
||||
"command.frontMatter.settings.refresh": "Refresh Front Matter Settings"
|
||||
"command.frontMatter.settings.refresh": "Refresh Front Matter Settings",
|
||||
"setting.frontMatter.config.dynamicFilePath.markdownDescription": "Specify the path to the dynamic config file (ex: [[workspace]]/config.js). [Check in the docs](https://frontmatter.codes/docs/settings/overview#frontmatter.config.dynamicfilepath)",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.allowAsSubContent.description": "Specify if the content type can be used as sub content.",
|
||||
"setting.frontMatter.taxonomy.contentTypes.items.properties.isSubContent.description": "Specify if the content type is sub content."
|
||||
}
|
||||
8237
pnpm-lock.yaml
generated
@@ -1,5 +1,6 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const jsoncParser = require('jsonc-parser');
|
||||
|
||||
const camlCase = (str) => {
|
||||
const words = str.split('.');
|
||||
@@ -15,12 +16,14 @@ const camlCase = (str) => {
|
||||
const enFile = fs.readFileSync(path.join(__dirname, '../l10n/bundle.l10n.json'), 'utf8');
|
||||
|
||||
// Parse the EN file
|
||||
const en = JSON.parse(enFile);
|
||||
const en = jsoncParser.parse(enFile);
|
||||
|
||||
const keys = Object.keys(en);
|
||||
|
||||
// Create an enum file
|
||||
const enumFile = fs.createWriteStream(path.join(__dirname, '../src/localization/localization.enum.ts'));
|
||||
const enumFile = fs.createWriteStream(
|
||||
path.join(__dirname, '../src/localization/localization.enum.ts')
|
||||
);
|
||||
|
||||
// Write the enum file header
|
||||
enumFile.write(`export enum LocalizationKey {\n`);
|
||||
@@ -38,4 +41,4 @@ const camlCase = (str) => {
|
||||
|
||||
// Close the enum file
|
||||
enumFile.close();
|
||||
})();
|
||||
})();
|
||||
|
||||
@@ -1,6 +1,42 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const glob = require('glob');
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
require('dotenv').config()
|
||||
|
||||
const transKey = process.env.TRANSLATION_API_KEY || "";
|
||||
const apiUrl = process.env.TRANSLATION_API_URL || "";
|
||||
const location = process.env.TRANSLATION_API_LOCATION || "";
|
||||
|
||||
const getTranslation = (translation) => {
|
||||
let value = undefined;
|
||||
|
||||
if (translation && translation.translations && translation.translations.length > 0) {
|
||||
value = translation.translations[0].text;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
const callTranslationService = async (body, locale) => {
|
||||
const response = await fetch(`${apiUrl}/translate?api-version=3.0&from=en&to=${locale}`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Ocp-Apim-Subscription-Key': transKey,
|
||||
'Ocp-Apim-Subscription-Region': location,
|
||||
'Content-type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
'X-ClientTraceId': uuidv4().toString(),
|
||||
},
|
||||
body
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return await response.json();
|
||||
}
|
||||
|
||||
(async () => {
|
||||
// Get all the files from the l10n directory
|
||||
@@ -11,6 +47,7 @@ const glob = require('glob');
|
||||
const enContent = JSON.parse(enFile);
|
||||
const enKeys = Object.keys(enContent);
|
||||
|
||||
console.log(`Starting l10n bundles`);
|
||||
for (const file of files) {
|
||||
if (file.endsWith(`bundle.l10n.json`)) {
|
||||
continue;
|
||||
@@ -20,17 +57,54 @@ const glob = require('glob');
|
||||
const fileContent = fs.readFileSync(path.join(__dirname, `../l10n/${file}`), 'utf8');
|
||||
let content = {};
|
||||
|
||||
// Get the locale
|
||||
const fileName = path.basename(file);
|
||||
const fileSplit = fileName.split('.');
|
||||
const locale = fileSplit[fileSplit.length - 2];
|
||||
if (!locale) {
|
||||
continue;
|
||||
}
|
||||
console.log(`- Processing: ${locale}`);
|
||||
|
||||
try {
|
||||
content = JSON.parse(fileContent);
|
||||
} catch (e) {
|
||||
// Ignore the error
|
||||
}
|
||||
|
||||
const keysToTranslate = [];
|
||||
|
||||
// Loop through the EN keys
|
||||
for (const key of enKeys) {
|
||||
// If the key does not exist in the file, add it
|
||||
if (!content[key]) {
|
||||
content[key] = `🚧: ${enContent[key]}`;
|
||||
if (!content[key] || content[key].startsWith(`🚧: `)) {
|
||||
keysToTranslate.push({
|
||||
name: key,
|
||||
value: enContent[key],
|
||||
});
|
||||
|
||||
if (!apiUrl || !transKey || !location) {
|
||||
content[key] = `${enContent[key]}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (apiUrl && transKey && location) {
|
||||
if (keysToTranslate.length > 0) {
|
||||
console.log(` - Translating: ${keysToTranslate.length}`);
|
||||
const body = JSON.stringify(keysToTranslate.map(key => ({ text: key.value })));
|
||||
const data = await callTranslationService(body, locale);
|
||||
|
||||
for (let i = 0; i < keysToTranslate.length; i++) {
|
||||
const keyToTranslate = keysToTranslate[i];
|
||||
const translation = getTranslation(data[i]);
|
||||
|
||||
if (keyToTranslate.name && translation) {
|
||||
content[keyToTranslate.name] = translation;
|
||||
} else {
|
||||
content[keyToTranslate.name] = `${keyToTranslate.value}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,21 +120,60 @@ const glob = require('glob');
|
||||
|
||||
const pkgFiles = glob.sync(path.join(__dirname, '../package.nls.*.json'));
|
||||
|
||||
console.log(``);
|
||||
console.log(`Starting nls bundles`);
|
||||
for (const file of pkgFiles) {
|
||||
const fileContent = fs.readFileSync(file, 'utf8');
|
||||
let content = {};
|
||||
|
||||
// Get the locale
|
||||
const fileName = path.basename(file);
|
||||
const fileSplit = fileName.split('.');
|
||||
const locale = fileSplit[fileSplit.length - 2];
|
||||
if (!locale) {
|
||||
continue;
|
||||
}
|
||||
console.log(`- Processing: ${locale}`);
|
||||
|
||||
try {
|
||||
content = JSON.parse(fileContent);
|
||||
} catch (e) {
|
||||
// Ignore the error
|
||||
}
|
||||
|
||||
const keysToTranslate = [];
|
||||
|
||||
// Loop through the EN keys
|
||||
for (const key of enPkgKeys) {
|
||||
// If the key does not exist in the file, add it
|
||||
if (!content[key]) {
|
||||
content[key] = `🚧: ${enPkgContent[key]}`;
|
||||
const contentValue = content[key];
|
||||
if (!contentValue || contentValue.startsWith(`🚧: `)) {
|
||||
keysToTranslate.push({
|
||||
name: key,
|
||||
value: enPkgContent[key],
|
||||
});
|
||||
|
||||
if (!apiUrl || !transKey || !location) {
|
||||
content[key] = `🚧: ${enPkgContent[key]}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (apiUrl && transKey && location) {
|
||||
if (keysToTranslate.length > 0) {
|
||||
console.log(` - Translating: ${keysToTranslate.length}`);
|
||||
const body = JSON.stringify(keysToTranslate.map(key => ({ text: key.value })));
|
||||
const data = await callTranslationService(body, locale);
|
||||
|
||||
for (let i = 0; i < keysToTranslate.length; i++) {
|
||||
const keyToTranslate = keysToTranslate[i];
|
||||
const translation = getTranslation(data[i]);
|
||||
|
||||
if (keyToTranslate.name && translation) {
|
||||
content[keyToTranslate.name] = translation;
|
||||
} else {
|
||||
content[keyToTranslate.name] = `${keyToTranslate.value}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ import {
|
||||
TelemetryEvent
|
||||
} from './../constants';
|
||||
import * as vscode from 'vscode';
|
||||
import { CustomPlaceholder, Field, TaxonomyType } from '../models';
|
||||
import { CustomPlaceholder, Field } from '../models';
|
||||
import { format } from 'date-fns';
|
||||
import { ArticleHelper, Settings, SlugHelper, TaxonomyHelper } from '../helpers';
|
||||
import { ArticleHelper, Settings, SlugHelper } from '../helpers';
|
||||
import { Notifications } from '../helpers/Notifications';
|
||||
import { extname, basename, parse, dirname } from 'path';
|
||||
import { COMMAND_NAME, DefaultFields } from '../constants';
|
||||
@@ -29,74 +29,10 @@ import { NavigationType } from '../dashboardWebView/models';
|
||||
import { processKnownPlaceholders } from '../helpers/PlaceholderHelper';
|
||||
import { Position } from 'vscode';
|
||||
import { SNIPPET } from '../constants/Snippet';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Article {
|
||||
/**
|
||||
* Insert taxonomy
|
||||
*
|
||||
* @param type
|
||||
*/
|
||||
public static async insert(type: TaxonomyType) {
|
||||
const editor = vscode.window.activeTextEditor;
|
||||
if (!editor) {
|
||||
return;
|
||||
}
|
||||
|
||||
const article = ArticleHelper.getCurrent();
|
||||
|
||||
if (!article) {
|
||||
return;
|
||||
}
|
||||
|
||||
let options: vscode.QuickPickItem[] = [];
|
||||
const matterProp: string = type === TaxonomyType.Tag ? 'tags' : 'categories';
|
||||
|
||||
// Add the selected options to the options array
|
||||
if (article.data[matterProp]) {
|
||||
const propData = article.data[matterProp];
|
||||
if (propData && propData.length > 0) {
|
||||
options = [...propData]
|
||||
.filter((p) => p)
|
||||
.map(
|
||||
(p) =>
|
||||
({
|
||||
label: p,
|
||||
picked: true
|
||||
} as vscode.QuickPickItem)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Add all the known options to the selection list
|
||||
const crntOptions = (await TaxonomyHelper.get(type)) || [];
|
||||
if (crntOptions && crntOptions.length > 0) {
|
||||
for (const crntOpt of crntOptions) {
|
||||
if (!options.find((o) => o.label === crntOpt)) {
|
||||
options.push({
|
||||
label: crntOpt
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.length === 0) {
|
||||
Notifications.info(`No ${type === TaxonomyType.Tag ? 'tags' : 'categories'} configured.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedOptions = await vscode.window.showQuickPick(options, {
|
||||
placeHolder: `Select your ${type === TaxonomyType.Tag ? 'tags' : 'categories'} to insert`,
|
||||
canPickMany: true,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
|
||||
if (selectedOptions) {
|
||||
article.data[matterProp] = selectedOptions.map((o) => o.label);
|
||||
}
|
||||
|
||||
ArticleHelper.update(editor, article);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the article date
|
||||
*/
|
||||
@@ -117,7 +53,7 @@ export class Article {
|
||||
ArticleHelper.update(editor, article);
|
||||
} catch (e) {
|
||||
Notifications.error(
|
||||
`Something failed while parsing the date format. Check your "${CONFIG_KEY}${SETTING_DATE_FORMAT}" setting.`
|
||||
l10n.t(LocalizationKey.commandsArticleSetDateError, `${CONFIG_KEY}${SETTING_DATE_FORMAT}`)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -127,7 +63,7 @@ export class Article {
|
||||
* @param article
|
||||
*/
|
||||
public static updateDate(article: ParsedFrontMatter) {
|
||||
article.data = ArticleHelper.updateDates(article.data);
|
||||
article.data = ArticleHelper.updateDates(article);
|
||||
return article;
|
||||
}
|
||||
|
||||
@@ -180,7 +116,7 @@ export class Article {
|
||||
return cloneArticle;
|
||||
} catch (e: unknown) {
|
||||
Notifications.error(
|
||||
`Something failed while parsing the date format. Check your "${CONFIG_KEY}${SETTING_DATE_FORMAT}" setting.`
|
||||
l10n.t(LocalizationKey.commandsArticleSetDateError, `${CONFIG_KEY}${SETTING_DATE_FORMAT}`)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -227,7 +163,7 @@ export class Article {
|
||||
}
|
||||
|
||||
let filePrefix = Settings.get<string>(SETTING_TEMPLATES_PREFIX);
|
||||
const contentType = ArticleHelper.getContentType(article.data);
|
||||
const contentType = ArticleHelper.getContentType(article);
|
||||
filePrefix = ArticleHelper.getFilePrefix(filePrefix, editor.document.uri.fsPath, contentType);
|
||||
|
||||
const titleField = 'title';
|
||||
@@ -292,7 +228,12 @@ export class Article {
|
||||
overwrite: false
|
||||
});
|
||||
} catch (e: unknown) {
|
||||
Notifications.error(`Failed to rename file: ${(e as Error).message || e}`);
|
||||
Notifications.error(
|
||||
l10n.t(
|
||||
LocalizationKey.commandsArticleUpdateSlugError,
|
||||
((e as Error).message || e) as string
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -393,7 +334,7 @@ export class Article {
|
||||
|
||||
const article = ArticleHelper.getFrontMatter(editor);
|
||||
const contentType =
|
||||
article && article.data ? ArticleHelper.getContentType(article.data) : DEFAULT_CONTENT_TYPE;
|
||||
article && article.data ? ArticleHelper.getContentType(article) : DEFAULT_CONTENT_TYPE;
|
||||
|
||||
const position = editor.selection.active;
|
||||
const selectionText = editor.document.getText(editor.selection);
|
||||
@@ -422,7 +363,7 @@ export class Article {
|
||||
return;
|
||||
}
|
||||
|
||||
let position = editor.selection.active;
|
||||
const position = editor.selection.active;
|
||||
const selectionText = editor.document.getText(editor.selection);
|
||||
|
||||
// Check for snippet wrapper
|
||||
|
||||
@@ -1,77 +1,64 @@
|
||||
import { commands, ExtensionContext } from 'vscode';
|
||||
import { authentication, commands, ExtensionContext } from 'vscode';
|
||||
import { COMMAND_NAME, CONTEXT } from '../constants';
|
||||
import { Extension } from '../helpers';
|
||||
import { Credentials } from '../services/Credentials';
|
||||
import fetch from 'node-fetch';
|
||||
import { Extension, Logger } from '../helpers';
|
||||
import { Dashboard } from './Dashboard';
|
||||
import { SettingsListener } from '../listeners/panel';
|
||||
import { PanelProvider } from '../panelWebView/PanelProvider';
|
||||
|
||||
export class Backers {
|
||||
private static creds: Credentials | null = null;
|
||||
|
||||
public static async init(context: ExtensionContext) {
|
||||
Backers.creds = new Credentials();
|
||||
await Backers.creds.initialize(context, Backers.tryUsernameCheck);
|
||||
|
||||
Backers.tryUsernameCheck();
|
||||
Backers.checkSponsor();
|
||||
|
||||
context.subscriptions.push(
|
||||
commands.registerCommand(COMMAND_NAME.authenticate, async () => {
|
||||
Backers.tryUsernameCheck();
|
||||
await authentication.getSession('github', ['read:user'], { createIfNone: true });
|
||||
Backers.checkSponsor();
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public static async tryUsernameCheck() {
|
||||
try {
|
||||
const username = await Backers.getUsername();
|
||||
Backers.validate(username || '');
|
||||
} catch (e) {
|
||||
Backers.validate('');
|
||||
}
|
||||
}
|
||||
|
||||
public static async getUsername() {
|
||||
const octokit = await Backers.creds?.getOctokit();
|
||||
const user = await octokit?.users.getAuthenticated();
|
||||
|
||||
if (user?.data?.login) {
|
||||
return user?.data?.login;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public static async validate(username: string) {
|
||||
public static async checkSponsor() {
|
||||
const ext = Extension.getInstance();
|
||||
const githubAuth = await authentication.getSession('github', ['read:user'], { silent: true });
|
||||
if (githubAuth && githubAuth.accessToken) {
|
||||
try {
|
||||
const isBeta = ext.isBetaVersion();
|
||||
const response = await fetch(
|
||||
`https://${isBeta ? `beta.` : ``}frontmatter.codes/api/v2/backers`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
accept: 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
token: githubAuth.accessToken
|
||||
})
|
||||
}
|
||||
);
|
||||
|
||||
if (!username) {
|
||||
ext.setState(CONTEXT.backer, undefined, 'global');
|
||||
}
|
||||
if (response.ok) {
|
||||
const prevData = await ext.getState<boolean>(CONTEXT.backer, 'global');
|
||||
await ext.setState(CONTEXT.backer, true, 'global');
|
||||
|
||||
const isBeta = ext.isBetaVersion();
|
||||
if (!prevData) {
|
||||
const PanelView = PanelProvider.getInstance();
|
||||
if (PanelView.visible) {
|
||||
SettingsListener.getSettings();
|
||||
}
|
||||
|
||||
const response = await fetch(
|
||||
`https://${isBeta ? `beta.` : ``}frontmatter.codes/api/backers?backer=${username}`
|
||||
);
|
||||
|
||||
if (response.ok) {
|
||||
const prevData = await ext.getState<boolean>(CONTEXT.backer, 'global');
|
||||
await ext.setState(CONTEXT.backer, true, 'global');
|
||||
|
||||
if (!prevData) {
|
||||
const PanelView = PanelProvider.getInstance();
|
||||
if (PanelView.visible) {
|
||||
SettingsListener.getSettings();
|
||||
}
|
||||
|
||||
if (Dashboard.isOpen) {
|
||||
Dashboard.reload();
|
||||
if (Dashboard.isOpen) {
|
||||
Dashboard.reload();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ext.setState(CONTEXT.backer, false, 'global');
|
||||
}
|
||||
} catch (e) {
|
||||
Logger.error(`Failed to check if user is a sponsor: ${(e as Error).message}`);
|
||||
}
|
||||
} else {
|
||||
ext.setState(CONTEXT.backer, false, 'global');
|
||||
ext.setState(CONTEXT.backer, undefined, 'global');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { commands } from 'vscode';
|
||||
import { COMMAND_NAME, ExtensionState } from '../constants';
|
||||
import { Extension, Notifications } from '../helpers';
|
||||
import { Extension, Logger, Notifications } from '../helpers';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Cache {
|
||||
public static async registerCommands() {
|
||||
@@ -20,7 +22,7 @@ export class Cache {
|
||||
await Extension.getInstance().setState(key, data, type);
|
||||
}
|
||||
|
||||
public static async clear(showNotification: boolean = true) {
|
||||
public static async clear(showNotification = true) {
|
||||
const ext = Extension.getInstance();
|
||||
|
||||
await ext.setState(ExtensionState.Dashboard.Pages.Cache, undefined, 'workspace', true);
|
||||
@@ -28,7 +30,9 @@ export class Cache {
|
||||
await ext.setState(ExtensionState.Settings.Extends, undefined, 'workspace', true);
|
||||
|
||||
if (showNotification) {
|
||||
Notifications.info('Cache cleared');
|
||||
Notifications.info(l10n.t(LocalizationKey.commandsCacheCleared));
|
||||
} else {
|
||||
Logger.info(l10n.t(LocalizationKey.commandsCacheCleared));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@ import { Telemetry } from './../helpers/Telemetry';
|
||||
import { TelemetryEvent, PreviewCommands, GeneralCommands } from './../constants';
|
||||
import { join } from 'path';
|
||||
import { commands, Uri, ViewColumn, window } from 'vscode';
|
||||
import { Extension, Settings } from '../helpers';
|
||||
import { Extension } from '../helpers';
|
||||
import { WebviewHelper } from '@estruyf/vscode';
|
||||
import { getLocalizationFile } from '../utils/getLocalizationFile';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Chatbot {
|
||||
/**
|
||||
@@ -14,7 +16,7 @@ export class Chatbot {
|
||||
// Create the preview webview
|
||||
const webView = window.createWebviewPanel(
|
||||
'frontMatterChatbot',
|
||||
'Front Matter AI - Ask me anything',
|
||||
`Front Matter AI - ${l10n.t(LocalizationKey.commandsChatbotTitle)}`,
|
||||
{
|
||||
viewColumn: ViewColumn.Beside,
|
||||
preserveFocus: true
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { commands, QuickPickItem, window } from 'vscode';
|
||||
import { COMMAND_NAME, SETTING_TEMPLATES_ENABLED } from '../constants';
|
||||
import { Settings } from '../helpers';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Content {
|
||||
public static async create() {
|
||||
@@ -12,18 +14,18 @@ export class Content {
|
||||
|
||||
const options: QuickPickItem[] = [
|
||||
{
|
||||
label: 'Create content by content type',
|
||||
description: 'Select if you want to create new content by the available content type(s)'
|
||||
label: l10n.t(LocalizationKey.commandsContentOptionContentTypeLabel),
|
||||
description: l10n.t(LocalizationKey.commandsContentOptionContentTypeDescription)
|
||||
},
|
||||
{
|
||||
label: 'Create content by template',
|
||||
description: 'Select if you want to create new content by the available template(s)'
|
||||
label: l10n.t(LocalizationKey.commandsContentOptionTemplateLabel),
|
||||
description: l10n.t(LocalizationKey.commandsContentOptionTemplateDescription)
|
||||
} as QuickPickItem
|
||||
];
|
||||
|
||||
const selectedOption = await window.showQuickPick(options, {
|
||||
title: 'Create content',
|
||||
placeHolder: `Select how you want to create your new content`,
|
||||
title: l10n.t(LocalizationKey.commandsContentQuickPickTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsContentQuickPickPlaceholder),
|
||||
canPickMany: false,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
|
||||
@@ -6,8 +6,8 @@ import {
|
||||
SETTING_EXTENSIBILITY_SCRIPTS
|
||||
} from '../constants';
|
||||
import { join } from 'path';
|
||||
import { commands, Uri, ViewColumn, Webview, WebviewPanel, window, workspace } from 'vscode';
|
||||
import { Logger, Settings as SettingsHelper } from '../helpers';
|
||||
import { commands, Uri, ViewColumn, Webview, WebviewPanel, window } from 'vscode';
|
||||
import { DashboardSettings, Logger, Settings as SettingsHelper } from '../helpers';
|
||||
import { DashboardCommand } from '../dashboardWebView/DashboardCommand';
|
||||
import { Extension } from '../helpers/Extension';
|
||||
import { WebviewHelper } from '@estruyf/vscode';
|
||||
@@ -23,11 +23,14 @@ import {
|
||||
SnippetListener,
|
||||
TaxonomyListener,
|
||||
LogListener,
|
||||
LocalizationListener
|
||||
LocalizationListener,
|
||||
SsgListener
|
||||
} from '../listeners/dashboard';
|
||||
import { MediaListener as PanelMediaListener } from '../listeners/panel';
|
||||
import { GitListener, ModeListener } from '../listeners/general';
|
||||
import { Folders } from './Folders';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Dashboard {
|
||||
private static webview: WebviewPanel | null = null;
|
||||
@@ -118,7 +121,7 @@ export class Dashboard {
|
||||
// Create the preview webview
|
||||
Dashboard.webview = window.createWebviewPanel(
|
||||
'frontMatterDashboard',
|
||||
'FrontMatter Dashboard',
|
||||
`Front Matter ${l10n.t(LocalizationKey.commandsDashboardTitle)}`,
|
||||
ViewColumn.One,
|
||||
{
|
||||
enableScripts: true,
|
||||
@@ -134,7 +137,7 @@ export class Dashboard {
|
||||
light: Uri.file(join(extensionUri.fsPath, 'assets/icons/frontmatter-short-light.svg'))
|
||||
};
|
||||
|
||||
Dashboard.webview.webview.html = Dashboard.getWebviewContent(
|
||||
Dashboard.webview.webview.html = await Dashboard.getWebviewContent(
|
||||
Dashboard.webview.webview,
|
||||
extensionUri
|
||||
);
|
||||
@@ -157,6 +160,7 @@ export class Dashboard {
|
||||
Dashboard.isDisposed = true;
|
||||
Dashboard._viewData = undefined;
|
||||
PanelMediaListener.getMediaSelection();
|
||||
DashboardSettings.updateAfterClose();
|
||||
await commands.executeCommand('setContext', CONTEXT.isDashboardOpen, false);
|
||||
});
|
||||
|
||||
@@ -180,6 +184,7 @@ export class Dashboard {
|
||||
GitListener.process(msg);
|
||||
TaxonomyListener.process(msg);
|
||||
LogListener.process(msg);
|
||||
SsgListener.process(msg);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -202,6 +207,7 @@ export class Dashboard {
|
||||
command: DashboardCommand;
|
||||
requestId?: string;
|
||||
payload?: unknown;
|
||||
error?: unknown;
|
||||
}) {
|
||||
if (Dashboard.isDisposed) {
|
||||
return;
|
||||
@@ -216,7 +222,7 @@ export class Dashboard {
|
||||
* Retrieve the webview HTML contents
|
||||
* @param webView
|
||||
*/
|
||||
private static getWebviewContent(webView: Webview, extensionPath: Uri): string {
|
||||
private static async getWebviewContent(webView: Webview, extensionPath: Uri): Promise<string> {
|
||||
const dashboardFile = 'dashboardWebView.js';
|
||||
const localPort = `9000`;
|
||||
const localServerUrl = `localhost:${localPort}`;
|
||||
@@ -274,10 +280,9 @@ export class Dashboard {
|
||||
}`
|
||||
];
|
||||
|
||||
const globalConfigPath = await SettingsHelper.projectConfigPath();
|
||||
const frontMatterUri = webView
|
||||
.asWebviewUri(
|
||||
SettingsHelper.projectConfigPath ? Uri.file(SettingsHelper.projectConfigPath) : Uri.file('')
|
||||
)
|
||||
.asWebviewUri(globalConfigPath ? Uri.file(globalConfigPath) : Uri.file(''))
|
||||
.toString();
|
||||
|
||||
const webviewUrl = frontMatterUri.replace(`/${SettingsHelper.globalFile}`, '');
|
||||
|
||||
@@ -25,6 +25,8 @@ import { Telemetry } from '../helpers/Telemetry';
|
||||
import { glob } from 'glob';
|
||||
import { mkdirAsync } from '../utils/mkdirAsync';
|
||||
import { existsAsync } from '../utils';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export const WORKSPACE_PLACEHOLDER = `[[workspace]]`;
|
||||
|
||||
@@ -57,15 +59,15 @@ export class Folders {
|
||||
}
|
||||
|
||||
const folderName = await window.showInputBox({
|
||||
title: `Add media folder`,
|
||||
prompt: `Which name would you like to give to your folder (use "/" to create multi-level folders)?`,
|
||||
title: l10n.t(LocalizationKey.commandsFoldersAddMediaFolderInputBoxTitle),
|
||||
prompt: l10n.t(LocalizationKey.commandsFoldersAddMediaFolderInputBoxPrompt),
|
||||
value: startPath,
|
||||
ignoreFocusOut: true,
|
||||
placeHolder: `${format(new Date(), `yyyy/MM`)}`
|
||||
});
|
||||
|
||||
if (!folderName) {
|
||||
Notifications.warning(`No folder name was specified.`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsFoldersAddMediaFolderNoFolderWarning));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -95,7 +97,7 @@ export class Folders {
|
||||
return;
|
||||
}
|
||||
|
||||
const folders = Folders.get();
|
||||
const folders = Folders.get().filter((f) => !f.disableCreation);
|
||||
const location = folders.find((f) => f.title === selectedFolder);
|
||||
if (location) {
|
||||
const folderPath = Folders.getFolderPath(Uri.file(location.path));
|
||||
@@ -109,9 +111,12 @@ export class Folders {
|
||||
* Register the new folder path
|
||||
* @param folderInfo
|
||||
*/
|
||||
public static async register(folderInfo: { title: string; path: Uri } | Uri) {
|
||||
public static async register(
|
||||
folderInfo: { title: string; path: Uri; contentType: string[] } | Uri
|
||||
) {
|
||||
let folderName = folderInfo instanceof Uri ? undefined : folderInfo.title;
|
||||
const folder = folderInfo instanceof Uri ? folderInfo : folderInfo.path;
|
||||
const contentType = folderInfo instanceof Uri ? undefined : folderInfo.contentType;
|
||||
|
||||
if (folder && folder.fsPath) {
|
||||
const wslPath = folder.fsPath.replace(/\//g, '\\');
|
||||
@@ -123,29 +128,35 @@ export class Folders {
|
||||
);
|
||||
|
||||
if (exists) {
|
||||
Notifications.warning(`Folder is already registered`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsFoldersCreateFolderExistsWarning));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!folderName) {
|
||||
folderName = await window.showInputBox({
|
||||
title: `Register folder`,
|
||||
prompt: `Which name would you like to specify for this folder?`,
|
||||
placeHolder: `Folder name`,
|
||||
title: l10n.t(LocalizationKey.commandsFoldersCreateInputTitle),
|
||||
prompt: l10n.t(LocalizationKey.commandsFoldersCreateInputPrompt),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsFoldersCreateInputPlaceholder),
|
||||
value: basename(folder.fsPath),
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
}
|
||||
|
||||
folders.push({
|
||||
const contentFolder = {
|
||||
title: folderName,
|
||||
path: folder.fsPath
|
||||
} as ContentFolder);
|
||||
} as ContentFolder;
|
||||
|
||||
if (contentType) {
|
||||
contentFolder.contentTypes = typeof contentType === 'string' ? [contentType] : contentType;
|
||||
}
|
||||
|
||||
folders.push(contentFolder);
|
||||
|
||||
folders = uniqBy(folders, (f) => f.path);
|
||||
await Folders.update(folders);
|
||||
|
||||
Notifications.info(`Folder registered`);
|
||||
Notifications.info(l10n.t(LocalizationKey.commandsFoldersCreateSuccess));
|
||||
|
||||
Telemetry.send(TelemetryEvent.registerFolder);
|
||||
|
||||
@@ -236,7 +247,9 @@ export class Folders {
|
||||
if (!projectFolder) {
|
||||
window
|
||||
.showWorkspaceFolderPick({
|
||||
placeHolder: `Please select the main workspace folder for Front Matter to use.`
|
||||
placeHolder: l10n.t(
|
||||
LocalizationKey.commandsFoldersGetWorkspaceFolderWorkspaceFolderPickPlaceholder
|
||||
)
|
||||
})
|
||||
.then(async (selectedFolder) => {
|
||||
if (selectedFolder) {
|
||||
@@ -270,7 +283,6 @@ export class Folders {
|
||||
public static async getInfo(limit?: number): Promise<FolderInfo[] | null> {
|
||||
const supportedFiles = Settings.get<string[]>(SETTING_CONTENT_SUPPORTED_FILETYPES);
|
||||
const folders = Folders.get();
|
||||
const wsFolder = parseWinPath(Folders.getWorkspaceFolder()?.fsPath || '');
|
||||
|
||||
if (folders && folders.length > 0) {
|
||||
const folderInfo: FolderInfo[] = [];
|
||||
@@ -352,7 +364,10 @@ export class Folders {
|
||||
*/
|
||||
public static get(): ContentFolder[] {
|
||||
const wsFolder = Folders.getWorkspaceFolder();
|
||||
const folders: ContentFolder[] = Settings.get(SETTING_CONTENT_PAGE_FOLDERS) as ContentFolder[];
|
||||
let folders: ContentFolder[] = Settings.get(SETTING_CONTENT_PAGE_FOLDERS) as ContentFolder[];
|
||||
|
||||
// Filter out folders without a path
|
||||
folders = folders.filter((f) => f.path);
|
||||
|
||||
const contentFolders = folders.map((folder) => {
|
||||
if (!folder.title) {
|
||||
@@ -366,14 +381,21 @@ export class Folders {
|
||||
} else {
|
||||
if (folderPath && !existsSync(folderPath)) {
|
||||
Notifications.errorShowOnce(
|
||||
`Folder "${folder.title} (${folder.path})" does not exist. Please remove it from the settings.`,
|
||||
'Remove folder',
|
||||
'Create folder'
|
||||
l10n.t(
|
||||
LocalizationKey.commandsFoldersGetNotificationErrorTitle,
|
||||
`${folder.title} (${folder.path})`
|
||||
),
|
||||
l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorRemoveAction),
|
||||
l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorCreateAction)
|
||||
).then((answer) => {
|
||||
if (answer === 'Remove folder') {
|
||||
if (
|
||||
answer === l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorRemoveAction)
|
||||
) {
|
||||
const folders = Folders.get();
|
||||
Folders.update(folders.filter((f) => f.path !== folder.path));
|
||||
} else if (answer === 'Create folder') {
|
||||
} else if (
|
||||
answer === l10n.t(LocalizationKey.commandsFoldersGetNotificationErrorCreateAction)
|
||||
) {
|
||||
mkdirAsync(folderPath as string, { recursive: true });
|
||||
}
|
||||
});
|
||||
@@ -429,9 +451,14 @@ export class Folders {
|
||||
public static getAbsFilePath(filePath: string): string {
|
||||
const wsFolder = Folders.getWorkspaceFolder();
|
||||
const isWindows = process.platform === 'win32';
|
||||
let absPath = filePath.replace(WORKSPACE_PLACEHOLDER, parseWinPath(wsFolder?.fsPath || ''));
|
||||
absPath = isWindows ? absPath.split('/').join('\\') : absPath;
|
||||
return parseWinPath(absPath);
|
||||
|
||||
if (filePath.includes(WORKSPACE_PLACEHOLDER)) {
|
||||
let absPath = filePath.replace(WORKSPACE_PLACEHOLDER, parseWinPath(wsFolder?.fsPath || ''));
|
||||
absPath = isWindows ? absPath.split('/').join('\\') : absPath;
|
||||
return parseWinPath(absPath);
|
||||
}
|
||||
|
||||
return parseWinPath(join(parseWinPath(wsFolder?.fsPath || ''), filePath));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -583,7 +610,7 @@ export class Folders {
|
||||
*/
|
||||
private static findFolders(pattern: string): Promise<string[]> {
|
||||
return new Promise((resolve) => {
|
||||
glob(pattern, { ignore: '**/node_modules/**' }, (err, files) => {
|
||||
glob(pattern, { ignore: '**/node_modules/**', dot: true }, (err, files) => {
|
||||
const allFolders = files.map((file) => dirname(file));
|
||||
const uniqueFolders = [...new Set(allFolders)];
|
||||
resolve(uniqueFolders);
|
||||
|
||||
@@ -13,7 +13,7 @@ import {
|
||||
} from './../constants';
|
||||
import { ArticleHelper } from './../helpers/ArticleHelper';
|
||||
import { join, parse } from 'path';
|
||||
import { commands, env, Uri, ViewColumn, window, WebviewPanel } from 'vscode';
|
||||
import { commands, env, Uri, ViewColumn, window, WebviewPanel, extensions } from 'vscode';
|
||||
import { Extension, parseWinPath, processKnownPlaceholders, Settings } from '../helpers';
|
||||
import { ContentFolder, ContentType, PreviewSettings } from '../models';
|
||||
import { format } from 'date-fns';
|
||||
@@ -22,9 +22,10 @@ import { Article } from '.';
|
||||
import { urlJoin } from 'url-join-ts';
|
||||
import { WebviewHelper } from '@estruyf/vscode';
|
||||
import { Folders } from './Folders';
|
||||
import { DataListener } from '../listeners/panel';
|
||||
import { ParsedFrontMatter } from '../parsers';
|
||||
import { getLocalizationFile } from '../utils/getLocalizationFile';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Preview {
|
||||
public static filePath: string | undefined = undefined;
|
||||
@@ -48,22 +49,33 @@ export class Preview {
|
||||
return;
|
||||
}
|
||||
|
||||
const browserLiteCommand = await this.getBrowserLiteCommand();
|
||||
|
||||
const editor = window.activeTextEditor;
|
||||
const crntFilePath = editor?.document.uri.fsPath;
|
||||
this.filePath = crntFilePath;
|
||||
|
||||
if (crntFilePath && this.webviews[crntFilePath]) {
|
||||
if (crntFilePath && this.webviews[crntFilePath] && !browserLiteCommand) {
|
||||
this.webviews[crntFilePath].reveal();
|
||||
return;
|
||||
}
|
||||
|
||||
const article = editor ? ArticleHelper.getFrontMatter(editor) : null;
|
||||
const slug = await this.getContentSlug(article, editor?.document.uri.fsPath);
|
||||
const localhostUrl = await this.getLocalServerUrl();
|
||||
|
||||
if (browserLiteCommand) {
|
||||
const pageUrl = urlJoin(localhostUrl.toString(), slug || '');
|
||||
commands.executeCommand(browserLiteCommand, pageUrl);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the preview webview
|
||||
const webView = window.createWebviewPanel(
|
||||
'frontMatterPreview',
|
||||
article?.data?.title ? `Preview: ${article?.data?.title}` : 'FrontMatter Preview',
|
||||
article?.data?.title
|
||||
? l10n.t(LocalizationKey.commandsPreviewPanelTitle, article?.data.title)
|
||||
: 'Front Matter Preview',
|
||||
{
|
||||
viewColumn: ViewColumn.Beside,
|
||||
preserveFocus: true
|
||||
@@ -82,29 +94,15 @@ export class Preview {
|
||||
light: Uri.file(join(extensionPath, 'assets/icons/frontmatter-short-light.svg'))
|
||||
};
|
||||
|
||||
const localhostUrl = await this.getLocalServerUrl();
|
||||
|
||||
const cspSource = webView.webview.cspSource;
|
||||
|
||||
webView.onDidDispose(() => {
|
||||
this.filePath = undefined;
|
||||
if (crntFilePath) {
|
||||
if (crntFilePath && this.webviews[crntFilePath]) {
|
||||
delete this.webviews[crntFilePath];
|
||||
}
|
||||
webView.dispose();
|
||||
});
|
||||
|
||||
webView.onDidChangeViewState(async (e) => {
|
||||
if (e.webviewPanel.visible) {
|
||||
this.filePath = crntFilePath;
|
||||
|
||||
if (crntFilePath) {
|
||||
const article = await ArticleHelper.getFrontMatterByPath(crntFilePath);
|
||||
DataListener.pushMetadata(article?.data);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
webView.webview.onDidReceiveMessage(async (message) => {
|
||||
switch (message.command) {
|
||||
case PreviewCommands.toVSCode.open:
|
||||
@@ -201,7 +199,7 @@ export class Preview {
|
||||
* @param filePath
|
||||
* @param slug
|
||||
*/
|
||||
public static async updatePageUrl(filePath: string, slug?: string) {
|
||||
public static async updatePageUrl(filePath: string, _: string) {
|
||||
const webView = this.webviews[filePath];
|
||||
if (webView) {
|
||||
const localhost = await this.getLocalServerUrl();
|
||||
@@ -222,7 +220,7 @@ export class Preview {
|
||||
* @returns
|
||||
*/
|
||||
public static async getContentSlug(
|
||||
article: ParsedFrontMatter | null,
|
||||
article: ParsedFrontMatter | null | undefined,
|
||||
filePath?: string
|
||||
): Promise<string | undefined> {
|
||||
if (!filePath) {
|
||||
@@ -239,7 +237,7 @@ export class Preview {
|
||||
|
||||
let contentType: ContentType | undefined = undefined;
|
||||
if (article?.data) {
|
||||
contentType = ArticleHelper.getContentType(article.data);
|
||||
contentType = ArticleHelper.getContentType(article);
|
||||
}
|
||||
|
||||
// Check if there is a pathname defined on content folder level
|
||||
@@ -258,10 +256,16 @@ export class Preview {
|
||||
|
||||
if (!selectedFolder && article?.data && contentType && !contentType.previewPath) {
|
||||
// Try to find the folder by content type
|
||||
const crntFolders = folders.filter((folder) =>
|
||||
folder.contentTypes?.includes((contentType as ContentType).name)
|
||||
let crntFolders = folders.filter(
|
||||
(folder) =>
|
||||
folder.contentTypes?.includes((contentType as ContentType).name) && folder.previewPath
|
||||
);
|
||||
|
||||
// Use file path to find the folder
|
||||
if (crntFolders.length > 0) {
|
||||
crntFolders = crntFolders.filter((folder) => filePath?.startsWith(folder.path));
|
||||
}
|
||||
|
||||
if (crntFolders && crntFolders.length === 1) {
|
||||
selectedFolder = crntFolders[0];
|
||||
} else if (crntFolders && crntFolders.length > 1) {
|
||||
@@ -338,6 +342,22 @@ export class Preview {
|
||||
return slug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Browser Lite is installed
|
||||
*/
|
||||
private static async getBrowserLiteCommand() {
|
||||
const ext = extensions.getExtension(`antfu.browse-lite`);
|
||||
if (ext && ext.packageJSON) {
|
||||
const hasCommand = ext.packageJSON.contributes?.commands?.find(
|
||||
(c: { command: string }) => c.command === 'browse-lite.open'
|
||||
);
|
||||
if (hasCommand) {
|
||||
return 'browse-lite.open';
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the localhost url
|
||||
* @returns
|
||||
@@ -380,7 +400,7 @@ export class Preview {
|
||||
const folderNames = crntFolders.map((folder) => folder.title);
|
||||
const selectedFolderName = await window.showQuickPick(folderNames, {
|
||||
canPickMany: false,
|
||||
title: 'Select the folder of the article to preview'
|
||||
title: l10n.t(LocalizationKey.commandsPreviewAskUserToPickFolderTitle)
|
||||
});
|
||||
|
||||
if (selectedFolderName) {
|
||||
|
||||
@@ -21,6 +21,8 @@ import {
|
||||
} from '../constants';
|
||||
import { SettingsListener } from '../listeners/dashboard';
|
||||
import { existsAsync, writeFileAsync } from '../utils';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Project {
|
||||
private static content = `---
|
||||
@@ -43,8 +45,8 @@ categories: []
|
||||
subscriptions.push(commands.registerCommand(COMMAND_NAME.switchProject, Project.switchProject));
|
||||
}
|
||||
|
||||
public static isInitialized() {
|
||||
const hasProjectFile = Settings.hasProjectFile();
|
||||
public static async isInitialized() {
|
||||
const hasProjectFile = await Settings.hasProjectFile();
|
||||
// If it has a project file, initialize the media library
|
||||
if (hasProjectFile) {
|
||||
MediaLibrary.getInstance();
|
||||
@@ -66,7 +68,7 @@ categories: []
|
||||
if (sampleTemplate !== undefined) {
|
||||
await Project.createSampleTemplate();
|
||||
} else {
|
||||
Notifications.info('Project initialized successfully.');
|
||||
Notifications.info(l10n.t(LocalizationKey.commandsProjectInitializeSuccess));
|
||||
}
|
||||
|
||||
// Initialize the media library
|
||||
@@ -89,10 +91,14 @@ categories: []
|
||||
} catch (error: unknown) {
|
||||
const err = error as Error;
|
||||
Logger.error(`Project::init: ${err?.message || err}`);
|
||||
Notifications.error(`Sorry, something went wrong - ${err?.message || err}`);
|
||||
Notifications.errorWithOutput(l10n.t(LocalizationKey.commonError));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Project switcher
|
||||
* @returns
|
||||
*/
|
||||
public static async switchProject() {
|
||||
const projects = Settings.getProjects();
|
||||
const project = await window.showQuickPick(
|
||||
@@ -100,7 +106,7 @@ categories: []
|
||||
{
|
||||
canPickMany: false,
|
||||
ignoreFocusOut: true,
|
||||
title: 'Select a project to switch to'
|
||||
title: l10n.t(LocalizationKey.commandsProjectSwitchProjectTitle)
|
||||
}
|
||||
);
|
||||
|
||||
@@ -136,7 +142,7 @@ categories: []
|
||||
await writeFileAsync(article.fsPath, Project.content, {
|
||||
encoding: 'utf-8'
|
||||
});
|
||||
Notifications.info('Sample template created.');
|
||||
Notifications.info(l10n.t(LocalizationKey.commandsProjectCreateSampleTemplateInfo));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ import { EXTENSION_NAME } from '../constants';
|
||||
import { ArticleHelper, FilesHelper } from '../helpers';
|
||||
import { FrontMatterParser } from '../parsers';
|
||||
import { Notifications } from '../helpers/Notifications';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Settings {
|
||||
/**
|
||||
@@ -13,21 +15,19 @@ export class Settings {
|
||||
* @param type
|
||||
*/
|
||||
public static async create(type: TaxonomyType) {
|
||||
const taxonomy = type === TaxonomyType.Tag ? 'tag' : 'category';
|
||||
|
||||
const newOption = await vscode.window.showInputBox({
|
||||
prompt: `Insert the value of the ${
|
||||
type === TaxonomyType.Tag ? 'tag' : 'category'
|
||||
} that you want to add to your configuration.`,
|
||||
placeHolder: `Name of the ${type === TaxonomyType.Tag ? 'tag' : 'category'}`,
|
||||
prompt: l10n.t(LocalizationKey.commandsFoldersCreateInputPrompt, taxonomy),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsFoldersCreateInputPlaceholder, taxonomy),
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
|
||||
if (newOption) {
|
||||
let options = (await TaxonomyHelper.get(type)) || [];
|
||||
const options = (await TaxonomyHelper.get(type)) || [];
|
||||
|
||||
if (options.find((o) => o === newOption)) {
|
||||
Notifications.info(
|
||||
`The provided ${type === TaxonomyType.Tag ? 'tag' : 'category'} already exists.`
|
||||
);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsSettingsCreateWarning, taxonomy));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -35,15 +35,16 @@ export class Settings {
|
||||
TaxonomyHelper.update(type, options);
|
||||
|
||||
// Ask if the new term needs to be added to the page
|
||||
const addToPage = await vscode.window.showQuickPick(['yes', 'no'], {
|
||||
canPickMany: false,
|
||||
placeHolder: `Do you want to add the new ${
|
||||
type === TaxonomyType.Tag ? 'tag' : 'category'
|
||||
} to the page?`,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
const addToPage = await vscode.window.showQuickPick(
|
||||
[l10n.t(LocalizationKey.commonYes), l10n.t(LocalizationKey.commonNo)],
|
||||
{
|
||||
canPickMany: false,
|
||||
placeHolder: l10n.t(LocalizationKey.commandsSettingsCreateQuickPickPlaceholder, taxonomy),
|
||||
ignoreFocusOut: true
|
||||
}
|
||||
);
|
||||
|
||||
if (addToPage && addToPage === 'yes') {
|
||||
if (addToPage && addToPage === l10n.t(LocalizationKey.commonYes)) {
|
||||
const editor = vscode.window.activeTextEditor;
|
||||
if (!editor) {
|
||||
return;
|
||||
@@ -54,7 +55,7 @@ export class Settings {
|
||||
return;
|
||||
}
|
||||
|
||||
const matterProp: string = type === TaxonomyType.Tag ? 'tags' : 'categories';
|
||||
const matterProp: string = taxonomy;
|
||||
// Add the selected options to the options array
|
||||
if (article.data[matterProp]) {
|
||||
const propData: string[] = article.data[matterProp];
|
||||
@@ -83,7 +84,7 @@ export class Settings {
|
||||
vscode.window.withProgress(
|
||||
{
|
||||
location: vscode.ProgressLocation.Notification,
|
||||
title: `${EXTENSION_NAME}: exporting tags and categories`,
|
||||
title: l10n.t(LocalizationKey.commandsSettingsExportProgressTitle, EXTENSION_NAME),
|
||||
cancellable: false
|
||||
},
|
||||
async (progress) => {
|
||||
@@ -146,7 +147,11 @@ export class Settings {
|
||||
|
||||
// Done
|
||||
Notifications.info(
|
||||
`Export completed. Tags: ${crntTags.length} - Categories: ${crntCategories.length}.`
|
||||
l10n.t(
|
||||
LocalizationKey.commandsSettingsExportProgressSuccess,
|
||||
crntTags.length,
|
||||
crntCategories.length
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
@@ -157,8 +162,8 @@ export class Settings {
|
||||
*/
|
||||
public static async remap() {
|
||||
const taxType = await vscode.window.showQuickPick(['Tag', 'Category'], {
|
||||
title: `Remap`,
|
||||
placeHolder: `What do you want to remap?`,
|
||||
title: l10n.t(LocalizationKey.commandsSettingsRemapQuickpickTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsSettingsRemapQuickpickPlaceholder),
|
||||
canPickMany: false,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
@@ -168,15 +173,18 @@ export class Settings {
|
||||
}
|
||||
|
||||
const type = taxType === 'Tag' ? TaxonomyType.Tag : TaxonomyType.Category;
|
||||
const taxonomy = type === TaxonomyType.Tag ? 'tags' : 'categories';
|
||||
const options = (await TaxonomyHelper.get(type)) || [];
|
||||
|
||||
if (!options || options.length === 0) {
|
||||
Notifications.info(`No ${type === TaxonomyType.Tag ? 'tags' : 'categories'} configured.`);
|
||||
Notifications.warning(
|
||||
l10n.t(LocalizationKey.commandsSettingsRemapNoTaxonomyWarning, taxonomy)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedOption = await vscode.window.showQuickPick(options, {
|
||||
placeHolder: `Select your ${type === TaxonomyType.Tag ? 'tags' : 'categories'} to insert`,
|
||||
placeHolder: l10n.t(LocalizationKey.commandsSettingsRemapSelectTaxonomyPlaceholder, taxonomy),
|
||||
canPickMany: false,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
@@ -186,19 +194,23 @@ export class Settings {
|
||||
}
|
||||
|
||||
const newOptionValue = await vscode.window.showInputBox({
|
||||
prompt: `Specify the value of the ${
|
||||
type === TaxonomyType.Tag ? 'tag' : 'category'
|
||||
} with which you want to remap "${selectedOption}". Leave the input <blank> if you want to remove the ${
|
||||
type === TaxonomyType.Tag ? 'tag' : 'category'
|
||||
} from all articles.`,
|
||||
placeHolder: `Name of the ${type === TaxonomyType.Tag ? 'tag' : 'category'}`,
|
||||
prompt: l10n.t(
|
||||
LocalizationKey.commandsSettingsRemapNewOptionInputPrompt,
|
||||
taxonomy,
|
||||
selectedOption
|
||||
),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsSettingsRemapNewOptionInputPlaceholder, taxonomy),
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
|
||||
if (!newOptionValue) {
|
||||
const deleteAnswer = await vscode.window.showQuickPick(['yes', 'no'], {
|
||||
canPickMany: false,
|
||||
placeHolder: `Delete ${selectedOption} ${type === TaxonomyType.Tag ? 'tag' : 'category'}?`,
|
||||
placeHolder: l10n.t(
|
||||
LocalizationKey.commandsSettingsRemapDeletePlaceholder,
|
||||
selectedOption,
|
||||
taxonomy
|
||||
),
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
if (deleteAnswer === 'no') {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ParsedFrontMatter } from './../parsers/FrontMatterParser';
|
||||
import {
|
||||
CONTEXT,
|
||||
EXTENSION_NAME,
|
||||
NOTIFICATION_TYPE,
|
||||
SETTING_SEO_DESCRIPTION_FIELD,
|
||||
SETTING_SEO_DESCRIPTION_LENGTH,
|
||||
@@ -16,6 +17,8 @@ import { DataListener } from '../listeners/panel';
|
||||
import { commands } from 'vscode';
|
||||
import { Field } from '../models';
|
||||
import { Preview } from './Preview';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class StatusListener {
|
||||
/**
|
||||
@@ -29,7 +32,7 @@ export class StatusListener {
|
||||
let document = editor?.document;
|
||||
|
||||
if (!document) {
|
||||
const filePath = Preview.filePath;
|
||||
const filePath = Preview.filePath || ArticleHelper.getActiveFile();
|
||||
if (filePath) {
|
||||
document = await vscode.workspace.openTextDocument(vscode.Uri.file(filePath));
|
||||
}
|
||||
@@ -135,12 +138,13 @@ export class StatusListener {
|
||||
|
||||
const diagnostic: vscode.Diagnostic = {
|
||||
code: '',
|
||||
message: `This ${fields
|
||||
.map((f) => f.name)
|
||||
.join('/')} field is required to contain a value.`,
|
||||
message: l10n.t(
|
||||
LocalizationKey.commandsStatusListenerVerifyRequiredFieldsDiagnosticEmptyField,
|
||||
fields.map((f) => f.name).join('/')
|
||||
),
|
||||
range: new vscode.Range(posStart, posEnd),
|
||||
severity: vscode.DiagnosticSeverity.Error,
|
||||
source: 'Front Matter'
|
||||
source: EXTENSION_NAME
|
||||
};
|
||||
|
||||
requiredDiagnostics.push(diagnostic);
|
||||
@@ -158,7 +162,10 @@ export class StatusListener {
|
||||
Notifications.showIfNotDisabled(
|
||||
NOTIFICATION_TYPE.requiredFieldValidation,
|
||||
'ERROR_ONCE',
|
||||
`The following fields are required to contain a value: ${fieldsToReport.join(', ')}`
|
||||
l10n.t(
|
||||
LocalizationKey.commandsStatusListenerVerifyRequiredFieldsNotificationError,
|
||||
fieldsToReport.join(', ')
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@ import { PagesListener } from '../listeners/dashboard';
|
||||
import { extname } from 'path';
|
||||
import { Telemetry } from '../helpers/Telemetry';
|
||||
import { writeFileAsync, copyFileAsync } from '../utils';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
export class Template {
|
||||
/**
|
||||
@@ -31,27 +33,30 @@ export class Template {
|
||||
const clonedArticle = Object.assign({}, article);
|
||||
|
||||
const titleValue = await vscode.window.showInputBox({
|
||||
title: `Template title`,
|
||||
prompt: `What name would you like to give your template?`,
|
||||
placeHolder: `article`,
|
||||
title: l10n.t(LocalizationKey.commandsTemplateGenerateInputTitle),
|
||||
prompt: l10n.t(LocalizationKey.commandsTemplateGenerateInputPrompt),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsTemplateGenerateInputPlaceholder),
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
|
||||
if (!titleValue) {
|
||||
Notifications.warning(`You did not specify a template title.`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateGenerateNoTitleWarning));
|
||||
return;
|
||||
}
|
||||
|
||||
const keepContents = await vscode.window.showQuickPick(['yes', 'no'], {
|
||||
title: `Keep contents`,
|
||||
canPickMany: false,
|
||||
placeHolder: `Do you want to keep the contents for the template?`,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
const keepContents = await vscode.window.showQuickPick(
|
||||
[l10n.t(LocalizationKey.commonYes), l10n.t(LocalizationKey.commonNo)],
|
||||
{
|
||||
title: l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsPlaceholder),
|
||||
canPickMany: false,
|
||||
ignoreFocusOut: true
|
||||
}
|
||||
);
|
||||
|
||||
if (!keepContents) {
|
||||
Notifications.warning(
|
||||
`You did not pick any of the options for keeping the template its content.`
|
||||
l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsNoOptionWarning)
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -60,14 +65,16 @@ export class Template {
|
||||
const templatePath = Project.templatePath();
|
||||
if (templatePath) {
|
||||
const fileContents = ArticleHelper.stringifyFrontMatter(
|
||||
keepContents === 'no' ? '' : clonedArticle.content,
|
||||
keepContents === l10n.t(LocalizationKey.commonNo) ? '' : clonedArticle.content,
|
||||
clonedArticle.data
|
||||
);
|
||||
|
||||
const templateFile = path.join(templatePath.fsPath, `${titleValue}.${fileType}`);
|
||||
await writeFileAsync(templateFile, fileContents, { encoding: 'utf-8' });
|
||||
|
||||
Notifications.info(`Template created and is now available in your ${folder} folder.`);
|
||||
Notifications.info(
|
||||
l10n.t(LocalizationKey.commandsTemplateGenerateKeepContentsSuccess, folder)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -79,7 +86,7 @@ export class Template {
|
||||
const folder = Settings.get<string>(SETTING_TEMPLATES_FOLDER);
|
||||
|
||||
if (!folder) {
|
||||
Notifications.warning(`No templates found.`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateGetTemplatesWarning));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -96,26 +103,28 @@ export class Template {
|
||||
const contentTypes = ContentType.getAll();
|
||||
|
||||
if (!folderPath) {
|
||||
Notifications.warning(`Incorrect project folder path retrieved.`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateCreateFolderPathWarning));
|
||||
return;
|
||||
}
|
||||
|
||||
const templates = await Template.getTemplates();
|
||||
if (!templates || templates.length === 0) {
|
||||
Notifications.warning(`No templates found.`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commandsTemplateCreateNoTemplatesWarning));
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedTemplate = await vscode.window.showQuickPick(
|
||||
templates.map((t) => path.basename(t.fsPath)),
|
||||
{
|
||||
title: `Select a template`,
|
||||
placeHolder: `Select the content template to use`,
|
||||
title: l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplateTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplatePlaceholder),
|
||||
ignoreFocusOut: true
|
||||
}
|
||||
);
|
||||
if (!selectedTemplate) {
|
||||
Notifications.warning(`No template selected.`);
|
||||
Notifications.warning(
|
||||
l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplateNoTemplateWarning)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -127,7 +136,9 @@ export class Template {
|
||||
// Start the template read
|
||||
const template = templates.find((t) => t.fsPath.endsWith(selectedTemplate));
|
||||
if (!template) {
|
||||
Notifications.warning(`Content template could not be found.`);
|
||||
Notifications.warning(
|
||||
l10n.t(LocalizationKey.commandsTemplateCreateSelectTemplateNotFoundWarning)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -152,9 +163,9 @@ export class Template {
|
||||
await copyFileAsync(template.fsPath, newFilePath);
|
||||
|
||||
// Update the properties inside the template
|
||||
let frontMatter = await ArticleHelper.getFrontMatterByPath(newFilePath);
|
||||
const frontMatter = await ArticleHelper.getFrontMatterByPath(newFilePath);
|
||||
if (!frontMatter) {
|
||||
Notifications.warning(`Something failed when retrieving the newly created file.`);
|
||||
Notifications.warning(l10n.t(LocalizationKey.commonError));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -165,11 +176,15 @@ export class Template {
|
||||
newFilePath
|
||||
);
|
||||
|
||||
frontMatter = Article.updateDate(frontMatter);
|
||||
const article = Article.updateDate(frontMatter);
|
||||
|
||||
if (!article) {
|
||||
return;
|
||||
}
|
||||
|
||||
await writeFileAsync(
|
||||
newFilePath,
|
||||
ArticleHelper.stringifyFrontMatter(frontMatter.content, frontMatter.data),
|
||||
ArticleHelper.stringifyFrontMatter(article.content, article.data),
|
||||
{ encoding: 'utf8' }
|
||||
);
|
||||
|
||||
@@ -181,7 +196,7 @@ export class Template {
|
||||
vscode.window.showTextDocument(txtDoc);
|
||||
}
|
||||
|
||||
Notifications.info(`Your new content has been created.`);
|
||||
Notifications.info(l10n.t(LocalizationKey.commandsTemplateCreateSuccess));
|
||||
|
||||
Telemetry.send(TelemetryEvent.createContentFromTemplate);
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { commands, window, Selection, QuickPickItem, TextEditor } from 'vscode';
|
||||
import { COMMAND_NAME, CONTEXT, SETTING_CONTENT_WYSIWYG } from '../constants';
|
||||
import { Settings } from '../helpers';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../localization';
|
||||
|
||||
enum MarkupType {
|
||||
bold = 1,
|
||||
@@ -81,45 +83,45 @@ export class Wysiwyg {
|
||||
commands.registerCommand(COMMAND_NAME.options, async () => {
|
||||
const qpItems: QuickPickItem[] = [
|
||||
{
|
||||
label: '$(list-unordered) Unordered list',
|
||||
detail: 'Add an unordered list',
|
||||
label: `$(list-unordered) ${LocalizationKey.commandsWysiwygCommandUnorderedListLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandUnorderedListDetail,
|
||||
alwaysShow: true
|
||||
},
|
||||
{
|
||||
label: '$(list-ordered) Ordered list',
|
||||
detail: 'Add an ordered list',
|
||||
label: `$(list-ordered) ${LocalizationKey.commandsWysiwygCommandOrderedListLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandOrderedListDetail,
|
||||
alwaysShow: true
|
||||
},
|
||||
{
|
||||
label: '$(tasklist) Task list',
|
||||
detail: 'Add a task list',
|
||||
label: `$(tasklist) ${LocalizationKey.commandsWysiwygCommandTaskListLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandTaskListDetail,
|
||||
alwaysShow: true
|
||||
},
|
||||
{
|
||||
label: '$(code) Code',
|
||||
detail: 'Add inline code snippet',
|
||||
label: `$(code) ${LocalizationKey.commandsWysiwygCommandCodeLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandCodeDetail,
|
||||
alwaysShow: true
|
||||
},
|
||||
{
|
||||
label: '$(symbol-namespace) Code block',
|
||||
detail: 'Add a code block',
|
||||
label: `$(symbol-namespace) ${LocalizationKey.commandsWysiwygCommandCodeblockLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandCodeblockDetail,
|
||||
alwaysShow: true
|
||||
},
|
||||
{
|
||||
label: '$(quote) Blockquote',
|
||||
detail: 'Add a blockquote',
|
||||
label: `$(quote) ${LocalizationKey.commandsWysiwygCommandBlockquoteLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandBlockquoteDetail,
|
||||
alwaysShow: true
|
||||
},
|
||||
{
|
||||
label: '$(symbol-text) Strikethrough',
|
||||
detail: 'Add a strikethrough',
|
||||
label: `$(symbol-text) ${LocalizationKey.commandsWysiwygCommandStrikethroughLabel}`,
|
||||
detail: LocalizationKey.commandsWysiwygCommandStrikethroughDetail,
|
||||
alwaysShow: true
|
||||
}
|
||||
];
|
||||
|
||||
const option = await window.showQuickPick([...qpItems], {
|
||||
title: 'WYSIWYG Options',
|
||||
placeHolder: 'Which type of markup would you like to insert?',
|
||||
title: l10n.t(LocalizationKey.commandsWysiwygQuickPickTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsWysiwygQuickPickPlaceholder),
|
||||
canPickMany: false,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
@@ -209,17 +211,17 @@ export class Wysiwyg {
|
||||
const linkText = hasTextSelection ? editor.document.getText(selection) : '';
|
||||
|
||||
const link = await window.showInputBox({
|
||||
title: 'WYSIWYG Hyperlink',
|
||||
placeHolder: 'Enter the URL',
|
||||
prompt: 'Enter the URL',
|
||||
title: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkHyperlinkInputTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkHyperlinkInputPrompt),
|
||||
prompt: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkHyperlinkInputPrompt),
|
||||
value: linkText,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
|
||||
const text = await window.showInputBox({
|
||||
title: 'WYSIWYG Text',
|
||||
prompt: 'Enter the text for the hyperlink',
|
||||
placeHolder: 'Enter the text for the hyperlink',
|
||||
title: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkTextInputTitle),
|
||||
prompt: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkTextInputPrompt),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsWysiwygAddHyperlinkTextInputPrompt),
|
||||
value: linkText,
|
||||
ignoreFocusOut: true
|
||||
});
|
||||
@@ -278,9 +280,9 @@ export class Wysiwyg {
|
||||
const headingLvl = await window.showQuickPick(
|
||||
['Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6'],
|
||||
{
|
||||
title: 'Heading Level',
|
||||
title: l10n.t(LocalizationKey.commandsWysiwygInsertTextHeadingInputTitle),
|
||||
placeHolder: l10n.t(LocalizationKey.commandsWysiwygInsertTextHeadingInputPlaceholder),
|
||||
canPickMany: false,
|
||||
placeHolder: 'Which heading level do you want to insert?',
|
||||
ignoreFocusOut: true
|
||||
}
|
||||
);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { PlusIcon } from '@heroicons/react/outline';
|
||||
import { PlusIcon } from '@heroicons/react/24/outline';
|
||||
import * as React from 'react';
|
||||
import { HTMLFieldProps, connectField, filterDOMProps, joinName, useField } from 'uniforms';
|
||||
import './ListAddField.css';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { TrashIcon } from '@heroicons/react/outline';
|
||||
import { TrashIcon } from '@heroicons/react/24/outline';
|
||||
import * as React from 'react';
|
||||
import { HTMLFieldProps, connectField, filterDOMProps, joinName, useField } from 'uniforms';
|
||||
import './ListDelField.css';
|
||||
@@ -29,7 +29,7 @@ function ListDel({ disabled, name, readOnly, ...props }: ListDelFieldProps) {
|
||||
|
||||
return (
|
||||
<span
|
||||
className="autoform__list_del_field"
|
||||
className="autoform__list_del_field mb-1"
|
||||
{...filterDOMProps(props)}
|
||||
onClick={onAction}
|
||||
onKeyDown={onAction}
|
||||
|
||||
@@ -26,6 +26,7 @@ function LongText({
|
||||
<LabelField label={label} id={id} required={props.required} />
|
||||
|
||||
<textarea
|
||||
className={`block w-full py-2 pr-2 sm:text-sm appearance-none disabled:opacity-50 rounded bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] border-[var(--frontmatter-border)] focus:border-[var(--vscode-focusBorder)] focus:outline-0`}
|
||||
disabled={disabled}
|
||||
id={id}
|
||||
name={name}
|
||||
|
||||
@@ -28,6 +28,7 @@ function Text({
|
||||
<LabelField label={label} id={id} required={props.required} />
|
||||
|
||||
<input
|
||||
className='block w-full py-2 pr-2 sm:text-sm appearance-none disabled:opacity-50 rounded bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] border-[var(--frontmatter-border)] focus:border-[var(--vscode-focusBorder)] focus:outline-0'
|
||||
autoComplete={autoComplete}
|
||||
disabled={disabled}
|
||||
id={id}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { ContentType } from './../models/PanelSettings';
|
||||
export const DEFAULT_CONTENT_TYPE_NAME = 'default';
|
||||
|
||||
export const DEFAULT_CONTENT_TYPE: ContentType = {
|
||||
name: 'default',
|
||||
name: DEFAULT_CONTENT_TYPE_NAME,
|
||||
pageBundle: false,
|
||||
previewPath: null,
|
||||
fields: [
|
||||
|
||||
@@ -65,7 +65,7 @@ export const FrameworkDetectors = [
|
||||
requiredFiles: ['nuxt.config.js'],
|
||||
requiredDependencies: ['nuxt'],
|
||||
commands: {
|
||||
start: 'npx nuxt'
|
||||
start: 'npx nuxt dev'
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -8,6 +8,7 @@ export const GeneralCommands = {
|
||||
toVSCode: {
|
||||
openLink: 'openLink',
|
||||
gitSync: 'gitSync',
|
||||
gitIsRepo: 'gitIsRepo',
|
||||
getLocalization: 'getLocalization',
|
||||
openOnWebsite: 'openOnWebsite'
|
||||
}
|
||||
|
||||
3
src/constants/Git.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const GIT_CONFIG = {
|
||||
defaultCommitMessage: 'Synced by Front Matter'
|
||||
};
|
||||
@@ -8,3 +8,5 @@ export const DOCUMENTATION_SETTINGS_LINK = 'https://frontmatter.codes/docs/setti
|
||||
|
||||
export const SENTRY_LINK =
|
||||
'https://1ac45704bbe74264a7b4674bdc2abf48@o1022172.ingest.sentry.io/5988293';
|
||||
|
||||
export const DOCS_SUBMODULES = 'https://frontmatter.codes/docs/git-integration#git-submodules';
|
||||
|
||||
@@ -4,5 +4,6 @@ export const LocalStore = {
|
||||
databaseFolder: 'database',
|
||||
templatesFolder: 'templates',
|
||||
mediaDatabaseFile: 'mediaDb.json',
|
||||
taxonomyDatabaseFile: 'taxonomyDb.json'
|
||||
taxonomyDatabaseFile: 'taxonomyDb.json',
|
||||
pinnedItemsDatabaseFile: 'pinnedItemsDb.json'
|
||||
};
|
||||
|
||||
5
src/constants/SsgScripts.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export const SsgScripts = {
|
||||
folder: '/ssg-scripts',
|
||||
astroContentCollectionScript: 'astro.collections.mjs',
|
||||
astroContentCollectionJSON: 'astro.collections.json'
|
||||
};
|
||||
@@ -6,6 +6,7 @@ export const CONTEXT = {
|
||||
wysiwyg: 'frontMatter:markdown:wysiwyg',
|
||||
backer: 'frontMatter:backers:supporter',
|
||||
isValidFile: 'frontMatter:file:isValid',
|
||||
isDevelopment: 'frontMatter:isDevelopment',
|
||||
|
||||
hasViewModes: 'frontMatter:has:modes',
|
||||
|
||||
@@ -14,5 +15,5 @@ export const CONTEXT = {
|
||||
|
||||
isGitEnabled: 'frontMatter:git:enabled',
|
||||
|
||||
projectSwitchEnabled: 'frontMatter:project:switch:enabled',
|
||||
projectSwitchEnabled: 'frontMatter:project:switch:enabled'
|
||||
};
|
||||
|
||||
@@ -7,6 +7,7 @@ export * from './ExtensionState';
|
||||
export * from './Features';
|
||||
export * from './FrameworkDetectors';
|
||||
export * from './GeneralCommands';
|
||||
export * from './Git';
|
||||
export * from './Links';
|
||||
export * from './LocalStore';
|
||||
export * from './Navigation';
|
||||
@@ -14,6 +15,7 @@ export * from './NotificationType';
|
||||
export * from './PreviewCommands';
|
||||
export * from './SentryIgnore';
|
||||
export * from './Snippet';
|
||||
export * from './SsgScripts';
|
||||
export * from './StaticFolderPlaceholder';
|
||||
export * from './TelemetryEvent';
|
||||
export * from './Templates';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export const EXTENSION_NAME = '𝖥𝗋𝗈𝗇𝗍 𝖬𝖺𝗍𝗍𝖾𝗋 𝖢𝖬𝖲';
|
||||
export const EXTENSION_NAME = 'Front Matter CMS';
|
||||
|
||||
export const CONFIG_KEY = 'frontMatter';
|
||||
|
||||
@@ -7,6 +7,7 @@ export const SETTING_EXPERIMENTAL = 'experimental';
|
||||
export const SETTING_EXTENSIBILITY_SCRIPTS = 'extensibility.scripts';
|
||||
|
||||
export const SETTING_EXTENDS = 'extends';
|
||||
export const SETTING_CONFIG_DYNAMIC_FILE_PATH = 'config.dynamicFilePath';
|
||||
|
||||
export const SETTING_GLOBAL_NOTIFICATIONS = 'global.notifications';
|
||||
export const SETTING_GLOBAL_NOTIFICATIONS_DISABLED = 'global.disabledNotifications';
|
||||
@@ -28,6 +29,7 @@ export const SETTING_SLUG_UPDATE_FILE_NAME = 'taxonomy.alignFilename';
|
||||
|
||||
export const SETTING_INDENT_ARRAY = 'taxonomy.indentArrays';
|
||||
export const SETTING_REMOVE_QUOTES = 'taxonomy.noPropertyValueQuotes';
|
||||
export const SETTING_QUOTE_STRINGS = 'taxonomy.quoteStringValues';
|
||||
|
||||
export const SETTING_FRONTMATTER_TYPE = 'taxonomy.frontMatterType';
|
||||
|
||||
@@ -45,6 +47,7 @@ export const SETTING_TEMPLATES_ENABLED = 'templates.enabled';
|
||||
export const SETTING_TELEMETRY_DISABLE = 'telemetry.disable';
|
||||
|
||||
export const SETTING_PANEL_FREEFORM = 'panel.freeform';
|
||||
export const SETTING_PANEL_ACTIONS_DISABLED = 'panel.actions.disabled';
|
||||
|
||||
export const SETTING_PREVIEW_HOST = 'preview.host';
|
||||
export const SETTING_PREVIEW_PATHNAME = 'preview.pathName';
|
||||
@@ -57,6 +60,7 @@ export const SETTING_CONTENT_STATIC_FOLDER = 'content.publicFolder';
|
||||
export const SETTING_CONTENT_FRONTMATTER_HIGHLIGHT = 'content.fmHighlight';
|
||||
export const SETTING_CONTENT_DRAFT_FIELD = 'content.draftField';
|
||||
export const SETTING_CONTENT_SORTING = 'content.sorting';
|
||||
export const SETTING_CONTENT_FILTERS = 'content.filters';
|
||||
export const SETTING_CONTENT_WYSIWYG = 'content.wysiwyg';
|
||||
export const SETTING_CONTENT_PLACEHOLDERS = 'content.placeholders';
|
||||
export const SETTING_CONTENT_SNIPPETS = 'content.snippets';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
export enum DashboardCommand {
|
||||
initializing = 'initializing',
|
||||
loading = 'loading',
|
||||
pages = 'pages',
|
||||
searchPages = 'searchPages',
|
||||
|
||||
@@ -4,6 +4,7 @@ export enum DashboardMessage {
|
||||
setPageViewType = 'setPageViewType',
|
||||
getMode = 'getMode',
|
||||
showWarning = 'showWarning',
|
||||
openConfig = 'openConfig',
|
||||
|
||||
// Project switching
|
||||
switchProject = 'switchProject',
|
||||
@@ -14,6 +15,8 @@ export enum DashboardMessage {
|
||||
addFolder = 'addFolder',
|
||||
addAssetsFolder = 'addAssetsFolder',
|
||||
triggerTemplate = 'triggerTemplate',
|
||||
ssgGetAstroContentTypes = 'ssgGetAstroContentTypes',
|
||||
ssgSetAstroContentTypes = 'ssgSetAstroContentTypes',
|
||||
|
||||
// Content dashboard
|
||||
getData = 'getData',
|
||||
@@ -24,6 +27,9 @@ export enum DashboardMessage {
|
||||
searchPages = 'searchPages',
|
||||
openFile = 'openFile',
|
||||
deleteFile = 'deleteFile',
|
||||
getPinnedItems = 'getPinnedItems',
|
||||
pinItem = 'pinItem',
|
||||
unpinItem = 'unpinItem',
|
||||
|
||||
// Media Dashboard
|
||||
getMedia = 'getMedia',
|
||||
@@ -37,6 +43,8 @@ export enum DashboardMessage {
|
||||
createMediaFolder = 'createMediaFolder',
|
||||
insertFile = 'insertFile',
|
||||
createHexoAssetFolder = 'createHexoAssetFolder',
|
||||
getUnmappedMedia = 'getUnmappedMedia',
|
||||
remapMediaMetadata = 'remapMediaMetadata',
|
||||
|
||||
// Data dashboard
|
||||
getDataEntries = 'getDataEntries',
|
||||
@@ -56,12 +64,19 @@ export enum DashboardMessage {
|
||||
createTaxonomy = 'createTaxonomy',
|
||||
importTaxonomy = 'importTaxonomy',
|
||||
moveTaxonomy = 'moveTaxonomy',
|
||||
mapTaxonomy = 'mapTaxonomy',
|
||||
|
||||
// Other
|
||||
getTheme = 'getTheme',
|
||||
updateSetting = 'updateSetting',
|
||||
setState = 'setState',
|
||||
getState = 'getState',
|
||||
runCustomScript = 'runCustomScript',
|
||||
sendTelemetry = 'sendTelemetry',
|
||||
logError = 'logError'
|
||||
logError = 'logError',
|
||||
showNotification = 'showNotification',
|
||||
|
||||
// Settings
|
||||
getSettings = 'getSettings',
|
||||
setSettings = 'setSettings'
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import { ErrorView } from './ErrorView';
|
||||
import { DashboardMessage } from '../DashboardMessage';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../localization';
|
||||
import { SettingsView } from './SettingsView/SettingsView';
|
||||
|
||||
export interface IAppProps {
|
||||
showWelcome: boolean;
|
||||
@@ -29,7 +30,7 @@ export interface IAppProps {
|
||||
export const App: React.FunctionComponent<IAppProps> = ({
|
||||
showWelcome
|
||||
}: React.PropsWithChildren<IAppProps>) => {
|
||||
const { loading, pages, settings, localeReady } = useMessages();
|
||||
const { pages, settings, localeReady } = useMessages();
|
||||
const view = useRecoilValue(DashboardViewSelector);
|
||||
const mode = useRecoilValue(ModeAtom);
|
||||
const [isDevMode, setIsDevMode] = useState(false);
|
||||
@@ -122,7 +123,7 @@ Stack: ${componentStack}`
|
||||
<Route path={routePaths.welcome} element={<WelcomeScreen settings={settings} />} />
|
||||
<Route
|
||||
path={routePaths.contents}
|
||||
element={<Contents pages={pages} loading={loading} />}
|
||||
element={<Contents pages={pages} />}
|
||||
/>
|
||||
<Route path={routePaths.media} element={<Media />} />
|
||||
<Route path={routePaths.snippets} element={<Snippets />} />
|
||||
@@ -133,6 +134,8 @@ Stack: ${componentStack}`
|
||||
<Route path={routePaths.taxonomy} element={<TaxonomyView pages={pages} />} />
|
||||
)}
|
||||
|
||||
<Route path={routePaths.settings} element={<SettingsView />} />
|
||||
|
||||
<Route path={`*`} element={<UnknownView />} />
|
||||
</Routes>
|
||||
</main>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { PaperAirplaneIcon } from '@heroicons/react/outline';
|
||||
import { PaperAirplaneIcon } from '@heroicons/react/24/outline';
|
||||
import * as React from 'react';
|
||||
import { useCallback } from 'react';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../../localization';
|
||||
|
||||
@@ -13,7 +12,6 @@ export interface IChatboxProps {
|
||||
export const Chatbox: React.FunctionComponent<IChatboxProps> = ({ isLoading, onTrigger }: React.PropsWithChildren<IChatboxProps>) => {
|
||||
const [message, setMessage] = React.useState<string>("");
|
||||
const [isFocussed, setIsFocussed] = React.useState<boolean>(false);
|
||||
const { getColors } = useThemeColors();
|
||||
|
||||
const callAi = useCallback(() => {
|
||||
setTimeout(() => {
|
||||
@@ -29,11 +27,7 @@ export const Chatbox: React.FunctionComponent<IChatboxProps> = ({ isLoading, onT
|
||||
<div className='chatbox px-4'>
|
||||
<textarea
|
||||
className={`
|
||||
resize-none w-full outline-none border-0 pr-8
|
||||
${getColors(
|
||||
'focus:outline-none border-gray-300 text-vulcan-500',
|
||||
'border-transparent bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] focus:outline-none focus:border-transparent'
|
||||
)}`}
|
||||
resize-none w-full outline-none border-0 pr-8 border-transparent bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] focus:outline-none focus:border-transparent`}
|
||||
placeholder={l10n.t(LocalizationKey.dashboardChatbotChatboxPlaceholder)}
|
||||
autoFocus={true}
|
||||
value={message}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as React from 'react';
|
||||
import { ThumbDownIcon, ThumbUpIcon } from '@heroicons/react/outline';
|
||||
import { ThumbDownIcon as ThumbDownSolidIcon, ThumbUpIcon as ThumbUpSolidIcon } from '@heroicons/react/solid';
|
||||
import { HandThumbDownIcon, HandThumbUpIcon } from '@heroicons/react/24/outline';
|
||||
import { HandThumbDownIcon as ThumbDownSolidIcon, HandThumbUpIcon as ThumbUpSolidIcon } from '@heroicons/react/24/solid';
|
||||
import { useCallback } from 'react';
|
||||
import { useSettingsContext } from '../../providers/SettingsProvider';
|
||||
|
||||
@@ -53,7 +53,7 @@ export const Feedback: React.FunctionComponent<IFeedbackProps> = ({
|
||||
isUpVoted ? (
|
||||
<ThumbUpSolidIcon className='h-4 w-4 text-[var(--vscode-textLink-foreground)]' />
|
||||
) : (
|
||||
<ThumbUpIcon className='h-4 w-4' />
|
||||
<HandThumbUpIcon className='h-4 w-4' />
|
||||
)
|
||||
}
|
||||
</button>
|
||||
@@ -64,7 +64,7 @@ export const Feedback: React.FunctionComponent<IFeedbackProps> = ({
|
||||
isDownVoted ? (
|
||||
<ThumbDownSolidIcon className='h-4 w-4 text-[var(--vscode-textLink-foreground)]' />
|
||||
) : (
|
||||
<ThumbDownIcon className='h-4 w-4' />
|
||||
<HandThumbDownIcon className='h-4 w-4' />
|
||||
)
|
||||
}
|
||||
</button>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as React from 'react';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
|
||||
export interface IButtonProps {
|
||||
secondary?: boolean;
|
||||
@@ -15,19 +14,14 @@ export const Button: React.FunctionComponent<IButtonProps> = ({
|
||||
secondary,
|
||||
children
|
||||
}: React.PropsWithChildren<IButtonProps>) => {
|
||||
const { getColors } = useThemeColors();
|
||||
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={`${className || ''
|
||||
} inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium focus:outline-none rounded ${getColors(
|
||||
'text-white dark:text-vulcan-500 disabled:bg-gray-500',
|
||||
'disabled:opacity-50'
|
||||
)
|
||||
} ${secondary ?
|
||||
getColors(`bg-red-300 hover:bg-red-400`, `bg-[var(--vscode-button-secondaryBackground)] text-[--vscode-button-secondaryForeground] hover:bg-[var(--vscode-button-secondaryHoverBackground)]`) :
|
||||
getColors(`bg-teal-600 hover:bg-teal-700`, `bg-[var(--frontmatter-button-background)] text-[var(--vscode-button-foreground)] hover:bg-[var(--frontmatter-button-hoverBackground)]`)
|
||||
} inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium focus:outline-none rounded disabled:opacity-50 ${secondary ?
|
||||
`bg-[var(--vscode-button-secondaryBackground)] text-[--vscode-button-secondaryForeground] hover:bg-[var(--vscode-button-secondaryHoverBackground)]` :
|
||||
`bg-[var(--frontmatter-button-background)] text-[var(--vscode-button-foreground)] hover:bg-[var(--frontmatter-button-hoverBackground)]`
|
||||
}
|
||||
`}
|
||||
onClick={onClick}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { Menu } from '@headlessui/react';
|
||||
import { ChevronDownIcon } from '@heroicons/react/outline';
|
||||
import { ChevronDownIcon } from '@heroicons/react/24/outline';
|
||||
import * as React from 'react';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
import { MenuItem, MenuItems } from '../Menu';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../../localization';
|
||||
@@ -24,18 +23,13 @@ export const ChoiceButton: React.FunctionComponent<IChoiceButtonProps> = ({
|
||||
choices,
|
||||
title
|
||||
}: React.PropsWithChildren<IChoiceButtonProps>) => {
|
||||
const { getColors } = useThemeColors();
|
||||
|
||||
return (
|
||||
<span className="relative z-50 inline-flex shadow-sm rounded-md">
|
||||
<button
|
||||
type="button"
|
||||
className={`inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium ${choices.length > 0 ? `rounded-l` : `rounded`
|
||||
} ${getColors(
|
||||
`text-white dark:text-vulcan-500 bg-teal-600 hover:bg-teal-700 disabled:bg-gray-500`,
|
||||
`text-[var(--vscode-button-foreground)] bg-[var(--frontmatter-button-background)] hover:bg-[var(--vscode-button-hoverBackground)] disabled:opacity-50`
|
||||
)
|
||||
}`}
|
||||
} text-[var(--vscode-button-foreground)] bg-[var(--frontmatter-button-background)] hover:bg-[var(--vscode-button-hoverBackground)] disabled:opacity-50`}
|
||||
onClick={onClick}
|
||||
disabled={disabled}
|
||||
>
|
||||
@@ -45,11 +39,7 @@ export const ChoiceButton: React.FunctionComponent<IChoiceButtonProps> = ({
|
||||
{choices.length > 0 && (
|
||||
<Menu as="span" className="-ml-px relative block">
|
||||
<Menu.Button
|
||||
className={`h-full inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium focus:outline-none rounded-r ${getColors(
|
||||
`text-white dark:text-vulcan-500 bg-teal-700 hover:bg-teal-800 disabled:bg-gray-500`,
|
||||
`text-[var(--vscode-button-foreground)] bg-[var(--frontmatter-button-background)] hover:bg-[var(--vscode-button-hoverBackground)] disabled:opacity-50`
|
||||
)
|
||||
}`}
|
||||
className={`h-full inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium focus:outline-none rounded-r text-[var(--vscode-button-foreground)] bg-[var(--frontmatter-button-background)] hover:bg-[var(--vscode-button-hoverBackground)] disabled:opacity-50`}
|
||||
disabled={disabled}
|
||||
>
|
||||
<span className="sr-only">{l10n.t(LocalizationKey.dashboardCommonChoiceButtonOpen)}</span>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { format as fnsFormat } from 'date-fns';
|
||||
import * as React from 'react';
|
||||
import { DateHelper } from '../../../helpers/DateHelper';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
|
||||
export interface IDateFieldProps {
|
||||
className?: string;
|
||||
@@ -15,7 +14,6 @@ export const DateField: React.FunctionComponent<IDateFieldProps> = ({
|
||||
format
|
||||
}: React.PropsWithChildren<IDateFieldProps>) => {
|
||||
const [dateValue, setDateValue] = React.useState<string>('');
|
||||
const { getColors } = useThemeColors();
|
||||
|
||||
React.useEffect(() => {
|
||||
try {
|
||||
@@ -38,7 +36,7 @@ export const DateField: React.FunctionComponent<IDateFieldProps> = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<span className={`date__field ${className || ''} text-xs ${getColors(`text-vulcan-100 dark:text-whisper-900`, `text-[var(--vscode-editor-foreground)]`)}`}>
|
||||
<span className={`date__field ${className || ''} text-xs text-[var(--frontmatter-text)]`}>
|
||||
{dateValue}
|
||||
</span>
|
||||
);
|
||||
|
||||
18
src/dashboardWebView/components/Common/Link.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
import * as React from 'react';
|
||||
|
||||
export interface ILinkProps {
|
||||
title: string;
|
||||
href: string;
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export const Link: React.FunctionComponent<ILinkProps> = ({ children, title, href, className }: React.PropsWithChildren<ILinkProps>) => {
|
||||
return (
|
||||
<a
|
||||
className={`text-[var(--frontmatter-secondary-text)] hover:text-[var(--frontmatter-link-hover)] ${className || ""}`}
|
||||
title={title}
|
||||
href={href}>
|
||||
{children}
|
||||
</a>
|
||||
);
|
||||
};
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as React from 'react';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
|
||||
export interface ILinkButtonProps {
|
||||
title: string;
|
||||
@@ -7,17 +6,10 @@ export interface ILinkButtonProps {
|
||||
}
|
||||
|
||||
export const LinkButton: React.FunctionComponent<ILinkButtonProps> = ({ children, title, onClick }: React.PropsWithChildren<ILinkButtonProps>) => {
|
||||
const { getColors } = useThemeColors();
|
||||
|
||||
return (
|
||||
<button
|
||||
type="button"
|
||||
className={
|
||||
getColors(
|
||||
`text-gray-500 hover:text-vulcan-600 dark:text-gray-400 dark:hover:text-whisper-600`,
|
||||
`text-[var(--frontmatter-secondary-text)] hover:text-[var(--frontmatter-link-hover)]`
|
||||
)
|
||||
}
|
||||
className={`text-[var(--frontmatter-secondary-text)] hover:text-[var(--frontmatter-link-hover)]`}
|
||||
title={title}
|
||||
onClick={onClick}>
|
||||
{children}
|
||||
|
||||
@@ -1,23 +1,31 @@
|
||||
import * as React from 'react';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
import { LoadingType } from '../../../models';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../../localization';
|
||||
|
||||
export interface ISpinnerProps { }
|
||||
export interface ISpinnerProps {
|
||||
type?: LoadingType;
|
||||
}
|
||||
|
||||
export const Spinner: React.FunctionComponent<ISpinnerProps> = (
|
||||
props: React.PropsWithChildren<ISpinnerProps>
|
||||
{ type }: React.PropsWithChildren<ISpinnerProps>
|
||||
) => {
|
||||
const { getColors } = useThemeColors();
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`fixed top-0 left-0 right-0 bottom-0 w-full h-full flex flex-wrap items-center justify-center z-50 ${getColors(
|
||||
`bg-black bg-opacity-50`,
|
||||
`bg-[var(--vscode-editor-background)] opacity-75`
|
||||
)
|
||||
}`}
|
||||
>
|
||||
<div className={`loader ease-linear rounded-full border-8 border-t-8 h-16 w-16 ${getColors(`border-gray-50 border-t-teal-500`, `border-[var(--vscode-activityBar-inactiveForeground)] border-t-[var(--vscode-activityBarBadge-background)]`)
|
||||
}`} />
|
||||
<div className={`z-50 fixed top-0 left-0 right-0 bottom-0 w-full h-full bg-[var(--vscode-editor-background)] opacity-75`}>
|
||||
<div
|
||||
className={`absolute top-0 w-full h-[2px] `}
|
||||
>
|
||||
<div className={`h-full absolute rounded-sm bg-[var(--vscode-activityBarBadge-background)] animate-[vscode-loader_4s_ease-in-out_infinite]`} />
|
||||
</div>
|
||||
|
||||
{
|
||||
type === 'initPages' && (
|
||||
<div className='spinner-msg h-full text-2xl flex justify-center items-center text-[var(--vscode-foreground)]'>
|
||||
<span>{l10n.t(LocalizationKey.loadingInitPages)}</span>
|
||||
<span className='dots'></span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
};
|
||||
78
src/dashboardWebView/components/Common/TextField.tsx
Normal file
@@ -0,0 +1,78 @@
|
||||
import { XCircleIcon } from '@heroicons/react/24/solid';
|
||||
import * as React from 'react';
|
||||
|
||||
export interface ITextFieldProps {
|
||||
name: string;
|
||||
value?: string;
|
||||
placeholder?: string;
|
||||
icon?: JSX.Element;
|
||||
disabled?: boolean;
|
||||
autoFocus?: boolean;
|
||||
multiline?: boolean;
|
||||
rows?: number;
|
||||
onChange?: (value: string) => void;
|
||||
onReset?: () => void;
|
||||
}
|
||||
|
||||
export const TextField: React.FunctionComponent<ITextFieldProps> = ({
|
||||
name,
|
||||
value,
|
||||
placeholder,
|
||||
icon,
|
||||
autoFocus,
|
||||
multiline,
|
||||
rows,
|
||||
disabled,
|
||||
onChange,
|
||||
onReset
|
||||
}: React.PropsWithChildren<ITextFieldProps>) => {
|
||||
return (
|
||||
<div className="relative flex justify-center">
|
||||
{
|
||||
icon && (
|
||||
<div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
||||
{icon}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
{
|
||||
multiline ? (
|
||||
<textarea
|
||||
rows={rows || 3}
|
||||
name={name}
|
||||
className={`block w-full py-2 ${icon ? "pl-10" : "pl-2"} pr-2 sm:text-sm appearance-none disabled:opacity-50 rounded bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] border-[var(--frontmatter-border)] focus:border-[var(--vscode-focusBorder)] focus:outline-0`}
|
||||
style={{
|
||||
boxShadow: "none"
|
||||
}}
|
||||
placeholder={placeholder || ""}
|
||||
value={value}
|
||||
autoFocus={!!autoFocus}
|
||||
onChange={(e) => onChange && onChange(e.target.value)}
|
||||
disabled={!!disabled}
|
||||
/>
|
||||
) : (
|
||||
<input
|
||||
type="text"
|
||||
name={name}
|
||||
className={`block w-full py-2 ${icon ? "pl-10" : "pl-2"} pr-2 sm:text-sm appearance-none disabled:opacity-50 rounded bg-[var(--vscode-input-background)] text-[var(--vscode-input-foreground)] placeholder-[var(--vscode-input-placeholderForeground)] border-[var(--frontmatter-border)] focus:border-[var(--vscode-focusBorder)] focus:outline-0`}
|
||||
style={{
|
||||
boxShadow: "none"
|
||||
}}
|
||||
placeholder={placeholder || ""}
|
||||
value={value}
|
||||
autoFocus={!!autoFocus}
|
||||
onChange={(e) => onChange && onChange(e.target.value)}
|
||||
disabled={!!disabled}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
{(value && onReset) && (
|
||||
<button onClick={onReset} className="absolute inset-y-0 right-0 pr-3 flex items-center text-[var(--vscode-input-foreground)] hover:text-[var(--vscode-textLink-activeForeground)]">
|
||||
<XCircleIcon className={`h-5 w-5`} aria-hidden="true" />
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,84 @@
|
||||
import * as React from 'react';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { messageHandler } from '@estruyf/vscode/dist/client';
|
||||
import { DashboardMessage } from '../../../DashboardMessage';
|
||||
import { AstroCollection } from '../../../../models';
|
||||
import { Settings, Status } from '../../../models';
|
||||
import { SelectItem } from '../../Steps/SelectItem';
|
||||
import { LocalizationKey } from '../../../../localization';
|
||||
|
||||
export interface IAstroContentTypesProps {
|
||||
settings: Settings
|
||||
triggerLoading: (isLoading: boolean) => void;
|
||||
setStatus: (status: Status) => void;
|
||||
}
|
||||
|
||||
export const AstroContentTypes: React.FunctionComponent<IAstroContentTypesProps> = ({
|
||||
settings,
|
||||
triggerLoading,
|
||||
setStatus
|
||||
}: React.PropsWithChildren<IAstroContentTypesProps>) => {
|
||||
const [collections, setCollections] = React.useState<AstroCollection[]>([]);
|
||||
|
||||
React.useEffect(() => {
|
||||
triggerLoading(true);
|
||||
messageHandler.request<AstroCollection[]>(DashboardMessage.ssgGetAstroContentTypes).then((result) => {
|
||||
triggerLoading(false);
|
||||
setCollections(result);
|
||||
});
|
||||
}, []);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (collections.length > 0 && settings?.contentTypes?.length > 0) {
|
||||
// Find created content types from the collections
|
||||
const astroCollection = collections.find(c => settings.contentTypes.find((ct) => ct.name === c.name));
|
||||
if (astroCollection) {
|
||||
setStatus(Status.Completed);
|
||||
} else {
|
||||
setStatus(Status.Active);
|
||||
}
|
||||
}
|
||||
}, [collections, settings.contentTypes])
|
||||
|
||||
const generateContentType = (collection: AstroCollection) => {
|
||||
triggerLoading(true);
|
||||
messageHandler.request(DashboardMessage.ssgSetAstroContentTypes, {
|
||||
collection
|
||||
}).then((result) => {
|
||||
triggerLoading(false);
|
||||
setStatus(Status.Completed);
|
||||
});
|
||||
}
|
||||
|
||||
if (!collections || collections.length === 0) {
|
||||
return (
|
||||
<div className='mt-1'>
|
||||
{l10n.t(LocalizationKey.dashboardConfigurationAstroAstroContentTypesEmpty)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='mt-1'>
|
||||
<p>{l10n.t(LocalizationKey.dashboardConfigurationAstroAstroContentTypesDescription)}</p>
|
||||
|
||||
<div className='mt-2'>
|
||||
{
|
||||
(collections || []).map((collection) => {
|
||||
const ct = settings.contentTypes.find((c) => c.name === collection.name);
|
||||
|
||||
return (
|
||||
<SelectItem
|
||||
key={collection.name}
|
||||
title={collection.name}
|
||||
buttonTitle={collection.name}
|
||||
isSelected={ct !== undefined}
|
||||
onClick={() => generateContentType(collection)}
|
||||
disabled={ct !== undefined} />
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
import * as React from 'react';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../../../localization';
|
||||
import { Settings } from '../../../models';
|
||||
import { Folder } from './Folder';
|
||||
import { Messenger } from '@estruyf/vscode/dist/client';
|
||||
import { DashboardMessage } from '../../../DashboardMessage';
|
||||
|
||||
export interface IContentFoldersProps {
|
||||
settings: Settings
|
||||
triggerLoading: (isLoading: boolean) => void;
|
||||
}
|
||||
|
||||
export const ContentFolders: React.FunctionComponent<IContentFoldersProps> = ({
|
||||
settings
|
||||
}: React.PropsWithChildren<IContentFoldersProps>) => {
|
||||
|
||||
const addFolder = (folder: string) => {
|
||||
Messenger.send(DashboardMessage.addFolder, folder);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<p>
|
||||
{l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedContentFoldersDescription)}
|
||||
</p>
|
||||
|
||||
{settings?.dashboardState?.welcome?.contentFolders?.length > 0 && (
|
||||
<div className="mt-4">
|
||||
<div className="text-sm">{l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedContentFoldersLabel)}</div>
|
||||
<div className="mt-1 space-y-1">
|
||||
{settings?.dashboardState?.welcome?.contentFolders?.map((folder: string) => (
|
||||
<Folder
|
||||
key={folder}
|
||||
folder={folder}
|
||||
addFolder={addFolder}
|
||||
wsFolder={settings.wsFolder}
|
||||
folders={settings.contentFolders}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<p className={`mt-4`}>
|
||||
<b>{l10n.t(LocalizationKey.commonInformation)}</b>: {l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedContentFoldersInformationDescription)}.
|
||||
</p>
|
||||
</>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
import * as React from 'react';
|
||||
import { join } from 'path';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../../../localization';
|
||||
import { ContentFolder } from '../../../../models';
|
||||
import { SelectItem } from '../../Steps/SelectItem';
|
||||
|
||||
export interface IFolderProps {
|
||||
wsFolder: string;
|
||||
folder: string;
|
||||
folders: ContentFolder[];
|
||||
addFolder: (folder: string) => void;
|
||||
}
|
||||
|
||||
export const Folder: React.FunctionComponent<IFolderProps> = ({
|
||||
wsFolder,
|
||||
folder,
|
||||
folders,
|
||||
addFolder
|
||||
}: React.PropsWithChildren<IFolderProps>) => {
|
||||
|
||||
const isAdded = React.useMemo(
|
||||
() => folders.find((f) => f.path.toLowerCase() === join(wsFolder, folder).toLowerCase()),
|
||||
[folder, folders, wsFolder]
|
||||
);
|
||||
|
||||
return (
|
||||
<SelectItem
|
||||
title={folder}
|
||||
buttonTitle={l10n.t(LocalizationKey.dashboardStepsStepsToGetStartedButtonAddFolderTitle)}
|
||||
isSelected={!!isAdded}
|
||||
onClick={() => addFolder(folder)} />
|
||||
);
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Messenger } from '@estruyf/vscode/dist/client';
|
||||
import { Messenger, messageHandler } from '@estruyf/vscode/dist/client';
|
||||
import { Menu } from '@headlessui/react';
|
||||
import { EyeIcon, GlobeIcon, TerminalIcon, TrashIcon } from '@heroicons/react/outline';
|
||||
import { EyeIcon, GlobeEuropeAfricaIcon, CommandLineIcon, TrashIcon } from '@heroicons/react/24/outline';
|
||||
import * as React from 'react';
|
||||
import { CustomScript, ScriptType } from '../../../models';
|
||||
import { DashboardMessage } from '../../DashboardMessage';
|
||||
@@ -8,16 +8,18 @@ import { MenuItem, MenuItems, ActionMenuButton, QuickAction } from '../Menu';
|
||||
import { Alert } from '../Modals/Alert';
|
||||
import { usePopper } from 'react-popper';
|
||||
import { useState } from 'react';
|
||||
import useThemeColors from '../../hooks/useThemeColors';
|
||||
import * as l10n from '@vscode/l10n';
|
||||
import { LocalizationKey } from '../../../localization';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { useRecoilState, useRecoilValue } from 'recoil';
|
||||
import { SettingsSelector } from '../../state';
|
||||
import { GeneralCommands } from '../../../constants';
|
||||
import { PinIcon } from '../Icons/PinIcon';
|
||||
import { PinnedItemsAtom } from '../../state/atom/PinnedItems';
|
||||
|
||||
export interface IContentActionsProps {
|
||||
title: string;
|
||||
path: string;
|
||||
relPath: string;
|
||||
scripts: CustomScript[] | undefined;
|
||||
listView?: boolean;
|
||||
onOpen: () => void;
|
||||
@@ -26,12 +28,13 @@ export interface IContentActionsProps {
|
||||
export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
title,
|
||||
path,
|
||||
relPath,
|
||||
scripts,
|
||||
onOpen,
|
||||
listView
|
||||
}: React.PropsWithChildren<IContentActionsProps>) => {
|
||||
const [pinnedItems, setPinnedItems] = useRecoilState(PinnedItemsAtom);
|
||||
const [showDeletionAlert, setShowDeletionAlert] = React.useState(false);
|
||||
const { getColors } = useThemeColors();
|
||||
const settings = useRecoilValue(SettingsSelector);
|
||||
|
||||
const [referenceElement, setReferenceElement] = useState<any>(null);
|
||||
@@ -68,6 +71,20 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
}
|
||||
}, [settings?.websiteUrl, path]);
|
||||
|
||||
const pinItem = React.useCallback((e: React.MouseEvent<HTMLButtonElement>) => {
|
||||
e.stopPropagation();
|
||||
messageHandler.request<string[]>(DashboardMessage.pinItem, path).then((result) => {
|
||||
setPinnedItems(result || []);
|
||||
})
|
||||
}, [path]);
|
||||
|
||||
const unpinItem = React.useCallback((e: React.MouseEvent<HTMLButtonElement>) => {
|
||||
e.stopPropagation();
|
||||
messageHandler.request<string[]>(DashboardMessage.unpinItem, path).then((result) => {
|
||||
setPinnedItems(result || []);
|
||||
})
|
||||
}, [path]);
|
||||
|
||||
const runCustomScript = React.useCallback(
|
||||
(e: React.MouseEvent<HTMLButtonElement>, script: CustomScript) => {
|
||||
e.stopPropagation();
|
||||
@@ -76,6 +93,10 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
[path]
|
||||
);
|
||||
|
||||
const isPinned = React.useMemo(() => {
|
||||
return pinnedItems.includes(relPath);
|
||||
}, [pinnedItems, relPath]);
|
||||
|
||||
const customScriptActions = React.useMemo(() => {
|
||||
return (scripts || [])
|
||||
.filter(
|
||||
@@ -89,7 +110,7 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
key={script.title}
|
||||
title={
|
||||
<div className="flex items-center">
|
||||
<TerminalIcon className="mr-2 h-5 w-5 flex-shrink-0" aria-hidden={true} />{' '}
|
||||
<CommandLineIcon className="mr-2 h-5 w-5 flex-shrink-0" aria-hidden={true} />{' '}
|
||||
<span>{script.title}</span>
|
||||
</div>
|
||||
}
|
||||
@@ -106,11 +127,7 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
>
|
||||
<div
|
||||
className={`flex items-center border border-transparent rounded-full ${listView ? '' : 'p-2 -mt-4'
|
||||
} ${getColors(
|
||||
'group-hover/card:bg-gray-200 dark:group-hover/card:bg-vulcan-200 group-hover/card:border-gray-100 dark:group-hover/card:border-vulcan-50',
|
||||
'group-hover/card:bg-[var(--vscode-sideBar-background)] group-hover/card:border-[var(--frontmatter-border)]'
|
||||
)
|
||||
}`}
|
||||
} group-hover/card:bg-[var(--vscode-sideBar-background)] group-hover/card:border-[var(--frontmatter-border)]`}
|
||||
>
|
||||
<Menu as="div" className={`relative flex text-left`}>
|
||||
{!listView && (
|
||||
@@ -122,7 +139,7 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
{
|
||||
settings?.websiteUrl && (
|
||||
<QuickAction title={l10n.t(LocalizationKey.commonOpenOnWebsite)} onClick={openOnWebsite}>
|
||||
<GlobeIcon className={`w-4 h-4`} aria-hidden="true" />
|
||||
<GlobeEuropeAfricaIcon className={`w-4 h-4`} aria-hidden="true" />
|
||||
</QuickAction>
|
||||
)
|
||||
}
|
||||
@@ -148,6 +165,15 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
widthClass="w-44"
|
||||
marginTopClass={listView ? '' : ''}
|
||||
>
|
||||
<MenuItem
|
||||
title={
|
||||
<div className="flex items-center">
|
||||
<PinIcon className={`mr-2 h-5 w-5 flex-shrink-0 ${isPinned ? "" : "-rotate-90"}`} aria-hidden={true} />{' '}
|
||||
<span>{isPinned ? l10n.t(LocalizationKey.commonUnpin) : l10n.t(LocalizationKey.commonPin)}</span>
|
||||
</div>
|
||||
}
|
||||
onClick={(_, e) => isPinned ? unpinItem(e) : pinItem(e)}
|
||||
/>
|
||||
<MenuItem
|
||||
title={
|
||||
<div className="flex items-center">
|
||||
@@ -163,7 +189,7 @@ export const ContentActions: React.FunctionComponent<IContentActionsProps> = ({
|
||||
<MenuItem
|
||||
title={
|
||||
<div className="flex items-center">
|
||||
<GlobeIcon className="mr-2 h-5 w-5 flex-shrink-0" aria-hidden={true} />{' '}
|
||||
<GlobeEuropeAfricaIcon className="mr-2 h-5 w-5 flex-shrink-0" aria-hidden={true} />{' '}
|
||||
<span>{l10n.t(LocalizationKey.commonOpenOnWebsite)}</span>
|
||||
</div>
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import * as React from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { Page } from '../../models';
|
||||
import { SettingsSelector } from '../../state';
|
||||
import { LoadingAtom, SettingsSelector } from '../../state';
|
||||
import { Overview } from './Overview';
|
||||
import { Spinner } from '../Common/Spinner';
|
||||
import { SponsorMsg } from '../Layout/SponsorMsg';
|
||||
@@ -14,13 +14,12 @@ import { PageLayout } from '../Layout/PageLayout';
|
||||
|
||||
export interface IContentsProps {
|
||||
pages: Page[];
|
||||
loading: boolean;
|
||||
}
|
||||
|
||||
export const Contents: React.FunctionComponent<IContentsProps> = ({
|
||||
pages,
|
||||
loading
|
||||
pages
|
||||
}: React.PropsWithChildren<IContentsProps>) => {
|
||||
const loading = useRecoilValue(LoadingAtom);
|
||||
const settings = useRecoilValue(SettingsSelector);
|
||||
const { pageItems } = usePages(pages);
|
||||
|
||||
@@ -34,8 +33,8 @@ export const Contents: React.FunctionComponent<IContentsProps> = ({
|
||||
|
||||
return (
|
||||
<PageLayout folders={pageFolders} totalPages={pageItems.length}>
|
||||
<div className="w-full flex-grow max-w-7xl mx-auto pb-6 px-4">
|
||||
{loading ? <Spinner /> : <Overview pages={pageItems} settings={settings} />}
|
||||
<div className="w-full flex-grow max-w-full mx-auto pb-6">
|
||||
{loading ? <Spinner type={loading} /> : <Overview pages={pageItems} settings={settings} />}
|
||||
</div>
|
||||
|
||||
<SponsorMsg
|
||||
|
||||