Compare commits

...

60 Commits

Author SHA1 Message Date
Jani Eväkallio
080a19a522 Foam Janitor 2020-07-25 19:41:41 +01:00
Jani Eväkallio
b5e28768aa Turn on foam.edit.linkReferenceDefinitions: withExtensions 2020-07-25 19:41:18 +01:00
Jani Eväkallio
60efdaa864 Run Janitor on docs/ 2020-07-25 18:35:23 +01:00
Jani Eväkallio
5418ea8bb2 v0.3.0 2020-07-25 18:28:52 +01:00
Jani Eväkallio
50dd3685cd Prepare for 0.3.0 release 2020-07-25 18:27:08 +01:00
Jani Eväkallio
0ae0ab6c50 Remove unnecessary file 2020-07-25 18:23:05 +01:00
Jani Eväkallio
e1f5fb06c6 Add missing Janitor image 2020-07-25 18:22:46 +01:00
Jani Eväkallio
c04b342a76 Document janitor 2020-07-25 18:22:33 +01:00
Jani Eväkallio
0fc9397ed8 foam-vscode changelog 2020-07-25 18:09:11 +01:00
Jani Eväkallio
11fa878ed8 Document withExtensions 2020-07-25 18:06:55 +01:00
Jani Eväkallio
2e3f02c5bc Document daily note feature (#157)
* Document daily note feature

* Update docs/daily-notes.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/daily-notes.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/daily-notes.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/recipes.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/daily-notes.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

Co-authored-by: Joe Previte <jjprevite@gmail.com>
2020-07-25 17:52:04 +01:00
Jani Eväkallio
7c6874d528 Use shared Foam instance in janitor 2020-07-25 17:41:54 +01:00
Jani Eväkallio
fe9c6461c4 Remove hello commoand from CLI 2020-07-25 17:28:06 +01:00
Thomas Koppelaar
1047443677 Update images-from-your-clipboard.md (#150) 2020-07-25 17:17:33 +01:00
CHIRAG SINGHAL
0cf2295c2a Implement janitor command to extension (#155)
* Move applyTextEdit to core

* WIP: Add janitor command in foam-vscode

* basic janitor command done

* unsaved markdown janitor solved

* export bootstrap getConfig functions

* fixed multi unsaved files text edits

* Move applyTextEdit to core

* WIP: Add janitor command in foam-vscode

* basic janitor command done

* unsaved markdown janitor solved

* export bootstrap getConfig functions

* fixed multi unsaved files text edits

* Be less greedy about definitions, only include defs at end of file

* Use link reference definitions in janitor

* Add headers/footers to tests

* Ensure janitor doesn't touch unrelated reference definitions

* Format document, convert promise trampoline to async/await for readability

* Add error handling and friendly output

* Use workspace settings for extension

* Add flag to janitor

* Use note.eol

* Fix tests

Co-authored-by: Ankit Tiwari <ankitt255@gmail.com>
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-25 17:17:03 +01:00
vitaly-pevgonen
9e7c3ffed8 Recipe for publishing to Azure DevOps wiki. (#147)
* Recipe for publishing to Azure DevOps wiki.

* Small fix: Devops -> DevOps in link references.

* Update docs/azure-devops-wiki.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/azure-devops-wiki.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/azure-devops-wiki.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/azure-devops-wiki.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/azure-devops-wiki.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update azure-devops-wiki.md

Co-authored-by: Vitaly Pevgonen <vitaly.pevgonen@cgi.com>
Co-authored-by: Joe Previte <jjprevite@gmail.com>
2020-07-25 17:13:11 +01:00
nixsee
c69a2bb2b1 adding recipe for migrating from Onenote (#152)
* adding recipe for migrating from Onenote

* Update docs/roadmap.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

Co-authored-by: Joe Previte <jjprevite@gmail.com>
2020-07-25 17:10:58 +01:00
Jani Eväkallio
a3ab4f53a7 Update note graph and reference list when new notes are created (#156)
* Add notes to NoteGraph when they are created

* Add experimental events to foam-core to notify listeners about added/updated notes

* Update reference definitions in active editor when new note is added

* Update document in note graph before updating references
2020-07-25 16:50:44 +01:00
Mathieu Dutour
524ab15b12 add GH workflows (#145) 2020-07-25 12:19:15 +01:00
Ankit Tiwari
fd9fe12571 Move cursor to end of file when opening daily note (#137)
* Move cursor to end of file when opening daily note

* always move cursor to end of the file

* Only move cursor focus when file is newly created

Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-25 12:11:23 +01:00
Jani Eväkallio
8d41d02ef4 Add thomaskoppelaar to contributors 2020-07-23 14:43:00 +01:00
Jani Eväkallio
8b578c1a1c Log ideas into inbox 2020-07-23 14:39:59 +01:00
ingalless
1e757aa7c4 Fix small typo (#148) 2020-07-23 13:54:27 +02:00
Riccardo
c88c24f97e DX: repo-wide build tasks (#144) 2020-07-22 00:11:04 +01:00
allcontributors[bot]
0c95ea7ca1 docs: add synesthesia as a contributor (#143)
* docs: update docs/index.md [skip ci]

* docs: update readme.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-21 07:49:30 +01:00
Julian Elve
00d1bd3a23 Add recipe for capturing notes from Drafts app on iOS (#132)
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-20 20:42:28 +01:00
allcontributors[bot]
a2e511ec6f docs: add lostintangent as a contributor (#142)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-20 20:13:24 +01:00
allcontributors[bot]
639a1ea21c docs: add chirag-singhal as a contributor (#141)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-20 20:11:24 +01:00
Jonathan Carter
271017c663 Adding GistPad recipe (#138)
Co-authored-by: Joe Previte <jjprevite@gmail.com>
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-20 20:10:42 +01:00
Ankit Tiwari
c7277383dd Initialise note.title only if heading exists (#136)
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-20 20:00:39 +01:00
Ankit Tiwari
339274309f Implement foam-cli janitor command (#112)
* Add Note.definitions and Note.end

* Use stringifyMarkdownLinkReferenceDefinition in foam-vscode

This commit also applies prettier to previously badly formatted files, so the diff is larger than necessary

* Add Note.end and Note.definitions to foam-core tests

* Export stringifyMarkdownLinkReferenceDefinition from foam-core

* Implement first version of generateLinkReferenceDefinitions janitor method

* Add partial tests for generateLinkReferenceDefinitions

* Setup Jest

* Add remove link definitions test to generateLinkReferences janitor method

* Add update link definitions test to generateLinkReferences janitor method

* export TextEdit interface

* Implement first version of applyText method

* Add no change  in link definitions test to generateLinkReferences janitor method

* Add  partial tests for writeFileToDisk method

* Implement generateHeading janitor method

Co-authored-by: CHIRAG SINGHAL <csinghal208@gmail.com>

* Move noteGraph scaffolding to utils

* Implement basic foam-cli janitor command

* kebab case file names while running janitor

* added generate Heading function to janitor

* added tests for generateHeading in janitor

* PR changes

* Add ora spinner

* Store endOfLine inside Note

* Use note.eol to append line endings

* check if given path is valid directory

* minor fixes

* added glob as dependency

* ignore link refrences with no file

* added tests files for migration

* Solves issue with roam migration

* fixed core tests

* Replace dashify by github-slugger

* used github slagger instead of dashify

* Add foam-core as dependency

* added foam migrate command

* updated foam janitor command

* minor fixes

* removed extra test files

* removed excess white space

* Refactor (PR changes)

1.  Renamed initializeNoteGraph.ts to initialize-note-graph.ts to be consistent with naming

2.  Refactored code in janitor and migrate commands

* Mock fs for tests

* Use Promise.resolve(null)

* Make fs tests no blocking by using promises

* Refactor renameFile to use path module

* Propagate the error from writeFileToDisk method

* Remove posttest command

* Run prettier before merge to get a cleaner diff

* Fix typo in variable name

* yarn lint --fix

* Update markdown-provider tests to support new API

* Add missing includeExtension argument

Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
Co-authored-by: chirag-singhal <csinghal208@gmail.com>
2020-07-20 19:28:41 +01:00
Riccardo
dc1c237c05 Paths in link definition section now include file extension (#133)
* Add .md extension when generating link definition section

The change in the definition allows links to be navigated in github
The changes in the JS inside _layouts maintains the html navigation when publishing to github pages.

For more info see https://foambubble.github.io/foam/link-reference-definition-improvements

* Updated existing docs to new link definition section

* better md file detection and consolidated code in parent template

* added mdx extension to markdown file detection

* added note about shortcut taken

* added configuration to toggle extensions in wikilinks + tests

* Revert "Updated existing docs to new link definition section"

This reverts commit 50e4a527e0.

We'll do this change once the version has been released

Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-17 14:20:00 +01:00
allcontributors[bot]
2d51ce5893 docs: add digiguru as a contributor (#129)
* docs: update docs/index.md [skip ci]

* docs: update readme.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-15 23:34:59 +01:00
dependabot[bot]
adfef15404 Bump lodash from 4.17.15 to 4.17.19 in /packages/foam-core (#126)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-15 22:33:23 +01:00
dependabot[bot]
e92dd7a121 Bump lodash from 4.17.15 to 4.17.19 (#128)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-15 22:03:05 +01:00
allcontributors[bot]
950016dcc7 docs: add francishamel as a contributor (#127)
* docs: update docs/index.md [skip ci]

* docs: update readme.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-15 21:35:52 +01:00
Francis Hamel
6b99a8bd23 Add open daily note base feature (#79)
* Add dateformat package dependency

* Implement Open Daily Note feature

- Activate command
- Add default keybindings for the command
- Use settings to configure the filename format, the file extension,
the title format and the directory where the note should be created
2020-07-15 21:32:01 +01:00
allcontributors[bot]
cfc94ab693 docs: add nstafie as a contributor (#125)
* docs: update docs/index.md [skip ci]

* docs: update readme.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-15 21:29:10 +01:00
digiguru
5b471b32e6 GitLab recipe (#117)
* Typo

* Adds gitlab recipe

* Update docs/gitlab-pages.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/gitlab-pages.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/gitlab-pages.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/gitlab-pages.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

* Update docs/gitlab-pages.md

Co-authored-by: Joe Previte <jjprevite@gmail.com>

Co-authored-by: Joe Previte <jjprevite@gmail.com>
2020-07-15 21:28:29 +01:00
allcontributors[bot]
847f5ccf56 docs: add SanketDG as a contributor (#116)
* docs: update docs/index.md [skip ci]

* docs: update readme.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-15 21:26:48 +01:00
Nicholas Stafie
0342285a7b Clarify how the repository should be opened in VS Code (#123)
* Clarify how the repository should be opened in VS Code

* Change formatting and wording slightly

Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-15 21:24:38 +01:00
Jani Eväkallio
dd6569b264 Refine terminology descriptively 2020-07-15 16:26:19 +01:00
Mathieu Dutour
37359a021d Merge pull request #121 from aravindballa/patch-1
Typo in eleventy doc
2020-07-15 17:04:48 +02:00
Aravind Balla
6b97e5a066 fix: typo in eleventy doc 2020-07-15 18:09:28 +05:30
Sanket Dasgupta
10af405da5 Add recipe for pasting images from clipboard (#114) 2020-07-14 22:19:18 +01:00
Janne Ojanaho
4ebec70d50 link ref definition proposal (#82)
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-14 22:17:23 +01:00
Jani Eväkallio
5bd331edab Add mathjax support to math-support page 2020-07-14 20:50:17 +01:00
allcontributors[bot]
655ea856ce docs: add juanfrank77 as a contributor (#113)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-14 18:46:53 +01:00
Juan F Gonzalez
e977963e1a Add recipe for publishing with netlify (#95)
Co-authored-by: Juan Francisco Gonzalez <jf.gonzalez@globant.com>
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-14 17:50:19 +01:00
allcontributors[bot]
4a1a825e12 docs: add TaiChi-IO as a contributor (#111)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2020-07-14 17:43:58 +01:00
Jani Eväkallio
e35f29cee2 Jot down some raw notes 2020-07-14 15:55:11 +01:00
TaiChi-IO
4d33ad485b Math support recipe (#109) 2020-07-14 15:50:36 +01:00
Jani Eväkallio
d7b930ff1e Add NoteLink.position to keep track of link ranges (#108) 2020-07-14 08:04:25 +01:00
Riccardo
3c5a81e7d6 Merge pull request #102 from foambubble/config-and-bootstrap
factored features from bootstrap and introduced config
2020-07-13 13:02:52 +02:00
Jani Eväkallio
9a3e2a0b10 Random associations 2020-07-12 19:25:05 +01:00
Riccardo Ferretti
49c6da07f0 factored features from bootstrap and introduced config
extracted create references feature in own file
updated bootstrap sequence to include feature specific initialization
introduced config object
2020-07-12 18:26:30 +02:00
Jani Eväkallio
75431c89ba Add missing all-contributors 2020-07-12 16:54:33 +01:00
Ayush Baweja
9e064be3f0 Add custom CSS recipe for Markdown preview (#101)
Co-authored-by: Jani Eväkallio <jani.evakallio@gmail.com>
2020-07-12 16:49:03 +01:00
Ankit Tiwari
2b3f351330 Add VS Code Marketplace shield badges (#99) 2020-07-12 16:36:10 +01:00
Ankit Tiwari
1c01c266d9 Remove references to foam-workspace-manager (#100) 2020-07-12 16:35:11 +01:00
137 changed files with 4471 additions and 1002 deletions

View File

@@ -158,7 +158,129 @@
"contributions": [
"doc"
]
},
{
"login": "sauravkhdoolia",
"name": "Saurav Khdoolia",
"avatar_url": "https://avatars1.githubusercontent.com/u/34188267?v=4",
"profile": "https://github.com/sauravkhdoolia",
"contributions": [
"doc"
]
},
{
"login": "anku255",
"name": "Ankit Tiwari",
"avatar_url": "https://avatars1.githubusercontent.com/u/22813027?v=4",
"profile": "https://anku.netlify.com/",
"contributions": [
"doc",
"test"
]
},
{
"login": "ayushbaweja",
"name": "Ayush Baweja",
"avatar_url": "https://avatars1.githubusercontent.com/u/44344063?v=4",
"profile": "https://github.com/ayushbaweja",
"contributions": [
"doc"
]
},
{
"login": "TaiChi-IO",
"name": "TaiChi-IO",
"avatar_url": "https://avatars3.githubusercontent.com/u/65092992?v=4",
"profile": "https://github.com/TaiChi-IO",
"contributions": [
"doc"
]
},
{
"login": "juanfrank77",
"name": "Juan F Gonzalez ",
"avatar_url": "https://avatars1.githubusercontent.com/u/12146882?v=4",
"profile": "https://github.com/juanfrank77",
"contributions": [
"doc"
]
},
{
"login": "SanketDG",
"name": "Sanket Dasgupta",
"avatar_url": "https://avatars3.githubusercontent.com/u/8980971?v=4",
"profile": "https://sanketdg.github.io",
"contributions": [
"doc"
]
},
{
"login": "nstafie",
"name": "Nicholas Stafie",
"avatar_url": "https://avatars1.githubusercontent.com/u/10801854?v=4",
"profile": "https://github.com/nstafie",
"contributions": [
"doc"
]
},
{
"login": "francishamel",
"name": "Francis Hamel",
"avatar_url": "https://avatars3.githubusercontent.com/u/36383308?v=4",
"profile": "https://github.com/francishamel",
"contributions": [
"code"
]
},
{
"login": "digiguru",
"name": "digiguru",
"avatar_url": "https://avatars1.githubusercontent.com/u/619436?v=4",
"profile": "http://digiguru.co.uk",
"contributions": [
"code",
"doc"
]
},
{
"login": "chirag-singhal",
"name": "CHIRAG SINGHAL",
"avatar_url": "https://avatars3.githubusercontent.com/u/42653703?v=4",
"profile": "https://github.com/chirag-singhal",
"contributions": [
"code"
]
},
{
"login": "lostintangent",
"name": "Jonathan Carter",
"avatar_url": "https://avatars3.githubusercontent.com/u/116461?v=4",
"profile": "https://github.com/lostintangent",
"contributions": [
"doc"
]
},
{
"login": "synesthesia",
"name": "Julian Elve",
"avatar_url": "https://avatars3.githubusercontent.com/u/181399?v=4",
"profile": "https://www.synesthesia.co.uk",
"contributions": [
"doc"
]
},
{
"login": "thomaskoppelaar",
"name": "Thomas Koppelaar",
"avatar_url": "https://avatars3.githubusercontent.com/u/36331365?v=4",
"profile": "https://github.com/thomaskoppelaar",
"contributions": [
"question",
"code",
"userTesting"
]
}
],
"contributorsPerLine": 7
"contributorsPerLine": 7,
"skipCi": true
}

25
.github/workflows/foam-cli.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Test foam-cli
on:
pull_request:
paths:
- 'packages/foam-cli/**'
push:
paths:
- 'packages/foam-cli/**'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- name: Install dependencies
run: yarn
# - name: Lint foam-lint
# run: yarn workspace foam-cli lint
- name: Test foam-cli
run: yarn workspace foam-cli test

25
.github/workflows/foam-core.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Test foam-core
on:
pull_request:
paths:
- 'packages/foam-core/**'
push:
paths:
- 'packages/foam-core/**'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- name: Install dependencies
run: yarn
- name: Lint foam-core
run: yarn workspace foam-core lint
- name: Test foam-core
run: yarn workspace foam-core test

29
.github/workflows/foam-vscode.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Test foam-vscode
on:
pull_request:
paths:
- 'packages/foam-vscode/**'
push:
paths:
- 'packages/foam-vscode/**'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- name: Install dependencies
run: yarn
- name: Lint foam-vscode
run: yarn workspace foam-vscode lint
# - name: Test foam-vscode
# run: yarn workspace foam-vscode test
# - name: Publish foam-vscode
# if: github.ref == 'refs/heads/master'
# run: yarn workspace foam-vscode publish-extension
# with:
# vsce_token: ${{ secrets.VSCE_TOKEN }}

View File

@@ -5,6 +5,7 @@
"editor.overviewRulerBorder": false,
"editor.lineHeight": 24,
"workbench.colorTheme": "Gray Matter Light",
"foam.edit.linkReferenceDefinitions": "withExtensions",
"[markdown]": {
"editor.quickSuggestions": {
"other": true,

35
docs/_layouts/foam.html Normal file
View File

@@ -0,0 +1,35 @@
---
layout: default
---
<script type="text/javascript">
// NOTE: this should be in sync with the settings/usage in the vscode extension
// atm it's just a wide superset of md extensions to cover a wide range of cases
var MD_EXT = ['.md', '.markdown', '.mdx', '.mdown', '.mkdn', '.mkd', '.mdwn', '.mdtxt', '.mdtext', '.text', '.Rmd'];
function normalizeMdLink(link) {
var url = new URL(link);
var mdFileExt = MD_EXT.find(ext => url.pathname.endsWith(ext));
if (mdFileExt) {
url.pathname = url.pathname.slice(0, mdFileExt.length * -1);
}
return url.toString();
}
window.addEventListener('DOMContentLoaded', (event) => {
document
.querySelectorAll(".markdown-body a[title]:not([href^=http])")
.forEach((a) => {
// Hack: Replace page-link with "Page Title"...
a.innerText = a.title;
// ...and normalize the links to allow html pages navigation
a.href = normalizeMdLink(a.href);
});
document.querySelectorAll(".github-only").forEach((el) => {
el.remove();
});
});
</script>
{{ content }}

View File

@@ -1,25 +1,16 @@
---
layout: default
layout: foam
---
<script async defer src="https://buttons.github.io/buttons.js"></script>
{{ content }}
<script type="text/javascript">
// Hack: Replace page-link with "Page Title"
document
.querySelectorAll(".markdown-body a[title]:not([href^=http])")
.forEach((a) => {
a.innerText = a.title;
});
document.querySelectorAll(".github-only").forEach((el) => {
el.remove();
});
<script>
window.addEventListener('DOMContentLoaded', (event) => {
var duplicateHeading = document.querySelector("h1:not(#foam)");
if (duplicateHeading && duplicateHeading.remove) {
duplicateHeading.remove();
}
});
</script>

View File

@@ -0,0 +1,15 @@
---
layout: foam
---
{{ content }}
<script src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'],
inlineMath: [['$','$']]
}
});
</script>

View File

@@ -1,18 +1,5 @@
---
layout: default
layout: foam
---
{{ content }}
<script type="text/javascript">
// Hack: Replace page-link with "Page Title"
document
.querySelectorAll(".markdown-body a[title]:not([href^=http])")
.forEach((a) => {
a.innerText = a.title;
});
document.querySelectorAll(".github-only").forEach((el) => {
el.remove();
});
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -6,6 +6,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

34
docs/azure-devops-wiki.md Normal file
View File

@@ -0,0 +1,34 @@
# Azure DevOps Wiki
Publish your Foam workspace as an Azure DevOps wiki.
[Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) is Microsoft's collaboration software for software development teams, formerly known as Team Foundation Server (TFS) and Visual Studio Team Services. It is available as an on-premise or SaaS version. The following recipe was tested with the SaaS version, but should work the same way for the on-premise.
The following recipe is written with the assumption that you already have an [Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) project.
## Setup a Foam workspace
1. Generate a Foam workspace using the [foam-template project](https://github.com/foambubble/foam-template).
2. Change the remote to a git repository in Azure DevOps, or copy all the files into a new Azure DevOps git repository.
3. Define which document will be the wiki home page. To do that, create a file called `.order` in the Foam workspace root folder, with first line being the document filename without `.md` extension. For a project created from the Foam template, the file would look like this:
```
readme
```
4. Push the repository to remote in Azure DevOps.
## Publish repository to a wiki
1. Navigate to your Azure DevOps project in a web browser.
2. Choose **Overview** > **Wiki**. If you don't have wikis for your project, choose **Publish code as a wiki** on welcome page.
3. Choose repository with your Foam workspace, branch (usually `master` or `main`), folder (for workspace created from foam-template it is `/`), and wiki name, and press **Publish**.
A published workspace looks like this:
![Azure DevOps wiki](assets/images/azure-devops-wiki-demo.png)
There is default table of contents pane to the left of the wiki content. Here, you'll find a list of all directories that are present in your Foam workspace, and all wiki pages. Page names are derived from files names, and they are listed in alphabetical order. You may reorder pages by adding filenames without `.md` extension to `.order` file.
_Note that first entry in `.order` file defines wiki's home page._
For more information, read the [Azure DevOps documentation](https://docs.microsoft.com/en-us/azure/devops/project/wiki/publish-repo-to-wiki).

View File

@@ -8,7 +8,8 @@ When using [[wiki-links]], you can find all notes that link to a specific note i
- Finding backlinks in published Foam workspaces via [[materialized-backlinks]] is on the [[roadmap]] but not yet implemented.
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links "Wiki Links"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks (stub)"
[roadmap]: roadmap "Roadmap"
[wiki-links]: wiki-links.md "Wiki Links"
[make-backlinks-more-prominent]: make-backlinks-more-prominent.md "Make Backlinks More Prominent"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -14,5 +14,5 @@
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[todo]: todo.md "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -3,5 +3,5 @@
- [[2020-07-11-three-weeks-in]]
[//begin]: # "Autogenerated link references for markdown compatibility"
[2020-07-11-three-weeks-in]: blog/2020-07-11-three-weeks-in "Three Weeks In"
[2020-07-11-three-weeks-in]: blog/2020-07-11-three-weeks-in.md "Three Weeks In"
[//end]: # "Autogenerated link references"

View File

@@ -12,5 +12,5 @@ Overall, we should strive to build big things from small things. Focused, intero
However, there becomes a point where we may benefit from implementing a centralised solution, e.g. a syntax, an extension or perhaps a VSCode language server. As much as possible, we should allow users to operate in a decentralised manner.
[//begin]: # "Autogenerated link references for markdown compatibility"
[referencing-notes-by-title]: referencing-notes-by-title "Referencing notes by title"
[referencing-notes-by-title]: referencing-notes-by-title.md "Referencing notes by title"
[//end]: # "Autogenerated link references"

View File

@@ -0,0 +1,142 @@
# Capture Notes With Drafts Pro
## Context
* You use [Foam for VSCode](https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode) to manage your notes
* You wish to adopt a practice such as [A writing inbox for transient and incomplete notes](https://notes.andymatuschak.org/A%20writing%20inbox%20for%20transient%20and%20incomplete%20notes)
* You wish to use [Drafts Pro](https://docs.getdrafts.com/) to capture quick notes into your Foam notes from your iOS device
## Required Extensions
* [Foam for VSCode](https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode)
## Other tools
* We assume you are familiar with how to use GitHub (if you are using Foam this is implicit)
* You have an iOS device with [Drafts](https://getdrafts.com/)
* You have upgraded to [Drafts Pro](https://docs.getdrafts.com/draftspro) (needed to edit actions).
## Instructions
1. [Create a new action in Drafts](https://docs.getdrafts.com/docs/actions/editing-actions)
2. Add a single [step](https://docs.getdrafts.com/actions/steps/) of type Script
3. Edit the script adding the code from the block below
4. Edit settings at the top of the script to suit your preferences
5. Set other Action options in Drafts as you wish
6. Save the Action
7. In GitHub [create a Personal Access Token](https://github.com/settings/tokens) and give it `repo` scope - make a note of the token
8. In Drafts create a note
9. Select the action you created in steps 1-6
10. On the first run you will need to add the following information:
1. your GitHub username
2. the repository name of your Foam repo
3. the GitHub access token from step 7
4. An author name
11. Check your Github repo for a commit
12. If you are publishing your Foam to the web you may want to edit your publishing configuration to exclude inbox files - as publishing (and method) is a user choice that is beyond the scope of this recipe
## Code for Drafts Action
```javascript
// adapted from https://forums.getdrafts.com/t/script-step-post-to-github-without-working-copy/3594
// post to writing inbox in Foam digital garden
/*
* edit these lines to suit your preferences
*/
const inboxFolder = "inbox/"; // the folder in your Foam repo where notes are saved. MUST have trailing slash, except for root of repo use ''
const requiredTags = ['inbox']; // all documents will have these added in addition to tags from the Drafts app
const addLinkToInbox = true; // true = created note will have link to [[index]], false = no link
const addTimeStamp = true; // true = add a note of capture date/time at foot of note
/*
* stop editing
*/
const credential = Credential.create("GitHub garden repo", "The repo name, and its credentials, hosting your Foam notes");
credential.addTextField("username", "GitHub Username");
credential.addTextField('repo', 'Repo name');
credential.addPasswordField("key", "GitHub personal access token");
credential.addTextField('author', 'Author');
credential.authorize();
const githubKey = credential.getValue('key');
const githubUser = credential.getValue('username');
const repo = credential.getValue('repo');
const author = credential.getValue('author');
const http = HTTP.create(); // create HTTP object
const base = 'https://api.github.com';
const posttime = new Date();
const title = draft.title;
const txt = draft.processTemplate("[[line|3..]]");
const mergedTags = [...draft.tags, ...requiredTags];
const slugbase = title.toLowerCase().replace(/\s/g, "-");
const datestr = `${posttime.getFullYear()}-${pad(posttime.getMonth() + 1)}-${pad(posttime.getDate())}`;
const timestr = `${pad(posttime.getHours())}:${pad(posttime.getMinutes())}:00`;
const yr = `${posttime.getFullYear()}`;
const pdOffset = posttime.getTimezoneOffset();
const offsetChar = pdOffset >= 0 ? '-' : '+';
var pdHours = Math.floor(pdOffset/60);
console.log(pdHours);
pdHours = pdHours >= 0 ? pdHours : pdHours * -1;
console.log(pdHours);
const tzString = `${offsetChar}${pad(pdHours)}:00`;
const postdate = `${datestr}T${timestr}${tzString}`;
const slug = `${slugbase}`
const fn = `${slug}.md`;
let preamble = `# ${title} \n\n`;
mergedTags.forEach(function(item,index){
preamble += `#${item} `;
}
);
if (addLinkToInbox) {
preamble += "\n\n[[inbox]]\n";
}
preamble += "\n\n";
var doc = `${preamble}${txt}`;
if (addTimeStamp){
doc += `\n\nCaptured: ${postdate}\n`
}
const options = {
url: `https://api.github.com/repos/${githubUser}/${repo}/contents/${inboxFolder}${fn}`,
method: 'PUT',
data: {
message: `Inbox from Drafts ${datestr}`,
content: Base64.encode(doc)
},
headers: {
'Authorization': `token ${githubKey}`
}
};
var response = http.request(options);
if (response.success) {
// yay
} else {
console.log(response.statusCode);
console.log(response.error);
}
function pad(n) {
let str = String(n);
while (str.length < 2) {
str = `0${str}`;
}
return str;
}
```

View File

@@ -9,7 +9,5 @@ Create a CLI tool to allow running common Foam commands. These may include:
More commands to be added.
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[workspace-janitor]: workspace-janitor "Workspace Janitor (stub)"
[workspace-janitor]: workspace-janitor.md "Janitor"
[//end]: # "Autogenerated link references"

View File

@@ -129,6 +129,4 @@ For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -3,5 +3,5 @@
Head over to the [[contribution-guide]]. `CONTRIBUTING.md` file name is blocklisted on GitHub pages, and doesn't appear in the [rendered output](https://foambubble.github.io/foam).
[//begin]: # "Autogenerated link references for markdown compatibility"
[contribution-guide]: contribution-guide "Contribution Guide"
[contribution-guide]: contribution-guide.md "Contribution Guide"
[//end]: # "Autogenerated link references"

View File

@@ -12,7 +12,7 @@ Foam is open to contributions of any kind, including but not limited to code, do
- Foam code and documentation live in the monorepo at [foambubble/foam](https://github.com/foambubble/foam/)
- [/docs](https://github.com/foambubble/foam/docs): documentation and [[recipes]]
- [/packages/foam-vscode](https://github.com/foambubble/foam/tree/master/packages/foam-vscode): the core VSCode plugin
- [/packages/foam-workspace-manager](https://github.com/foambubble/foam/tree/master/packages/foam-workspace-manager): Foam workspace automations
- [/packages/foam-core](https://github.com/foambubble/foam/tree/master/packages/foam-core): powers the core functionality in Foam across all platforms
- Exceptions to the monorepo are:
- The starter template at [foambubble/foam-template](https://github.com/foambubble/)
- All other [[recommended-extensions]] live in their respective GitHub repos.
@@ -29,9 +29,9 @@ If you're interested in contributing to the VS Code extension (aka `foam-vscode`
`yarn install`
3. This project uses [Yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces/).`foam-vscode` relies on `foam-workspace-manager`. This means we need to compile it before we do any extension development. From the root, run the command:
3. This project uses [Yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces/).`foam-vscode` relies on `foam-core`. This means we need to compile it before we do any extension development. From the root, run the command:
`yarn workspace foam-workspace-manager build`
`yarn workspace foam-core build`
4. Now we'll use the launch configuration defined at [`.vscode/launch.json`](https://github.com/foambubble/foam/blob/master/.vscode/launch.json) to start a new extension host of VS Code. From the root, or the `foam-vscode` workspace, press f5.
5. In the new extension host of VS Code that launched, open a Foam workspace (e.g. your personal one, or a test-specific one created from foam-template). This is strictly not necessary, but the extension won't auto-run unless it's in a workspace with a `.vscode/foam.json` file.
@@ -42,12 +42,12 @@ For more resources related to the VS Code Extension, check out the links below:
- [[tutorial-adding-a-new-command-to-the-vs-code-extension]]
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[good-first-task]: good-first-task "Good First Task"
[roadmap]: roadmap "Roadmap"
[principles]: principles "Principles"
[code-of-conduct]: code-of-conduct "Code of Conduct"
[recipes]: recipes "Recipes"
[recommended-extensions]: recommended-extensions "Recommended Extensions"
[tutorial-adding-a-new-command-to-the-vs-code-extension]: tutorial-adding-a-new-command-to-the-vs-code-extension "Tutorial: Adding a New Command to the VS Code Extension"
[todo]: todo.md "Todo"
[good-first-task]: good-first-task.md "Good First Task"
[roadmap]: roadmap.md "Roadmap"
[principles]: principles.md "Principles"
[code-of-conduct]: code-of-conduct.md "Code of Conduct"
[recipes]: recipes.md "Recipes"
[recommended-extensions]: recommended-extensions.md "Recommended Extensions"
[tutorial-adding-a-new-command-to-the-vs-code-extension]: tutorial-adding-a-new-command-to-the-vs-code-extension.md "Tutorial: Adding a New Command to the VS Code Extension"
[//end]: # "Autogenerated link references"

View File

@@ -1,3 +1,5 @@
# Creating a New Language
## Creating a new language
What if we created a new language that made it more ergonomic to use VS Code as a Foam workspace

View File

@@ -6,6 +6,6 @@
- You shouldn't worry too much about categorising your notes. You can always [[search-for-notes]], and explore them using the [[graph-visualisation]].
[//begin]: # "Autogenerated link references for markdown compatibility"
[search-for-notes]: search-for-notes "Search for Notes"
[graph-visualisation]: graph-visualisation "Graph visualisation"
[search-for-notes]: search-for-notes.md "Search for Notes"
[graph-visualisation]: graph-visualisation.md "Graph visualisation"
[//end]: # "Autogenerated link references"

View File

@@ -0,0 +1,15 @@
# Custom Markdown Preview Styles
Visual Studio Code allows you to use your own CSS in the Markdown preview tab.
## Instructions
Custom CSS for the Markdown preview can be implemented by using the `"markdown.styles": []` setting in `settings.json`. The stylesheets can either be https URLs or relative paths to local files in the current workspace.
For example, to load a stylesheet called `Style.css`, we can update `settings.json` with the following line:
```
{
"markdown.styles": ["Style.css"]
}
```

View File

@@ -5,6 +5,6 @@ You can edit `assets/css/style.scss` to change how published pages look.
[[todo]] [[good-first-task]]
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[good-first-task]: good-first-task "Good First Task"
[todo]: todo.md "Todo"
[good-first-task]: good-first-task.md "Good First Task"
[//end]: # "Autogenerated link references"

View File

@@ -1,36 +1,46 @@
# Daily notes
The idea is to make it easier for people to be able to create Daily notes.
Automatically create a Daily Note by executing the "Foam: Open Daily Note" command. If a Daily Note for today's date already exists, the command opens the existing note.
This feature is open for discussion at [foambubble/foam#54](https://github.com/foambubble/foam/issues/54).
![Daily note feature in action](assets/images/daily-note.gif)
## Must have
## Keyboard shortcut
- Should exist as part of [foam-vscode](https://github.com/foambubble/foam/tree/master/packages/foam-vscode) extension
- A new command "Foam: Open Daily Note", which creates new file and focuses into it, or opens the existing file for today if it exists already.
- File should have a Level 1 `# Heading`
- Extension should define a hotkey for it (TBD? What do other apps do?)
The default keyboard shortcut for "Open Daily Note" is `alt`+`d`. This can be overridden using the [VS Code Keybindings editor](https://code.visualstudio.com/docs/getstarted/keybindings).
## Should have
## Configuration
- Settings to customise:
- Format of file name, default to `yyyy-mm-dd`
- Format of title
- Default to same as file name
- Allow override e.g. `MMMMM D, YYYY`, to July 8. 2020 (locale specific)
- Extension of file, default to `.md`
- Directory into which file should be created, default to `./` (workspace root)
- Should create directory if needed
By default, Daily Notes will be created in a file called `yyyy-mm-dd.md` in the workspace root, with a heading `yyyy-mm-dd`.
## Could have
- Automatically update a "daily notes" index file, newest first. Format TBD
- A custom note template .md file that could be stored in `.vscode/` directory (would supercede having to format the title)
- This could be useful for people who e.g. want there to be a format for every day's notes with fixed questions and stuff.
- Maybe we could do it with just back links or tags, by putting e.g. `[[daily]]` into the note template
- If files were named in alphabetic sortable order, and back links would display in reverse order, newest would always come on top
These settings can be overridden in your workspace or global `.vscode/settings.json` file, using the [**dateformat** date masking syntax](https://github.com/felixge/node-dateformat#mask-options):
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[//end]: # "Autogenerated link references"
```json
"foam.openDailyNote.directory": "journal",
"foam.openDailyNote.filenameFormat": "'daily-note'-yyyy-mm-dd",
"foam.openDailyNote.fileExtension": "mdx",
"foam.openDailyNote.titleFormat": "'Journal Entry, ' dddd, mmmm d",
```
The above configuration would create a file `journal/note-2020-07-25.mdx`, with the heading `Journal Entry, Sunday, July 25`.
## Daily Note Templates
In the future, Foam may provide a functionality for specifying a template for new Daily Notes and other types of documents.
In the meantime, you can use [VS Code Snippets](https://code.visualstudio.com/docs/editor/userdefinedsnippets) for defining your own Daily Note template.
## Roam-style Automatic Daily Notes
In the future, Foam may provide an option for automatically opening your Daily Note when you open your Foam workspace.
If you want this behaviour now, you can use the excellent [Auto Run Command](https://marketplace.visualstudio.com/items?itemName=gabrielgrinberg.auto-run-command#review-details) extension to run the "Open Daily Note" command upon entering a Foam workspace by specifying the following configuration in your `.vscode/settings.json`:
```json
"auto-run-command.rules": [
{
"condition": "hasFile: .vscode/foam.json",
"command": "foam-vscode.open-daily-note",
"message": "Have a nice day!"
}
],
```

View File

@@ -11,8 +11,7 @@ You can use VS Code plugins such as [Mermaid](https://marketplace.visualstudio.c
[[todo]] [[good-first-task]] Suggestions for alternative diagramming approaches welcome
[//begin]: # "Autogenerated link references for markdown compatibility"
[github-pages]: github-pages "Github Pages"
[good-first-task]: good-first-task "Good First Task"
[todo]: todo "Todo"
[contribution-guide]: contribution-guide "Contribution Guide"
[github-pages]: github-pages.md "Github Pages"
[todo]: todo.md "Todo"
[good-first-task]: good-first-task.md "Good First Task"
[//end]: # "Autogenerated link references"

View File

@@ -0,0 +1,19 @@
# Eleventy and Netlify
You can use [foam-eleventy-template](https://github.com/juanfrank77/foam-eleventy-template) to generate a static site with [Eleventy](https://www.11ty.dev/), and host it online on [Netlify](https://www.netlify.com/).
With this template you can
- Have control over what to publish and what to keep private
- Customize the styling of the site to your own liking
## Publishing your foam
When you're ready to publish, import the GitHub repository you created with **foam-eleventy-template** into your Netlify account. (Create one if you don't have it already.)
Once that's done, all you have to do is make changes to your workspace in VS Code and push them to the main branch on GitHub. Netlify will recognize the changes, deploy them automatically and give you a link where your Foam is published.
That's it!
You can now see it online and use that link to share it with your friends, so that they can see it too.

View File

@@ -20,7 +20,7 @@
- Can be either [[wiki-links]] or relative `[markdown](links.md)` style
- We need to know about the edges (connections) as well as nodes
- What link points to what other file, etc.
- Needs to have the exact link text, e.g. even if `[[some-page]]` or `[[some-page.md]]` or `[[Some Page]]` point to the same document (`./some-page.md`), we need to know which format was used, so link reference definitions can be generated correctly
- Needs to have the exact link text, e.g. even if `[[some-page]]` or `[[some-page.md]]` or `[[Some Page]]` point to the same document (`./some-page.md`), we need to know which format was used, so [[link-reference-definitions]] can be generated correctly
- Treat each file as semi-structured data
- Title, headings, lists, paragraphs, images, links, data, code
- Also, possible Foam-specific meta stuff, like "backlinks" or "block references".
@@ -61,7 +61,7 @@ Here are some example use cases that the core should support. They don't need to
- Adding and editing page content
- [[materialized-backlinks]]
- [[wiki-links]] reference definitions
- [[link-reference-definitions]] for [[wiki-links]]
- [Frontmatter](https://jekyllrb.com/docs/front-matter/)
- Finding all documents with `#tag`
- Finding all documents with instances of `[[link]]`
@@ -96,12 +96,13 @@ Useful for knowing what needs to be supported. See [[feature-comparison]].
- [[foam-core-2020-07-11]]
[//begin]: # "Autogenerated link references for markdown compatibility"
[workspace-janitor]: workspace-janitor "Workspace Janitor"
[cli]: cli "Command Line Interface"
[build-vs-assemble]: build-vs-assemble "Build vs Assemble"
[wiki-links]: wiki-links "Wiki Links"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks (stub)"
[todo]: todo "Todo"
[feature-comparison]: feature-comparison "Feature comparison"
[foam-core-2020-07-11]: meeting-notes/foam-core-2020-07-11 "Foam Core 2020-07-11"
[workspace-janitor]: workspace-janitor.md "Janitor"
[cli]: cli.md "Command Line Interface"
[build-vs-assemble]: build-vs-assemble.md "Build vs Assemble"
[wiki-links]: wiki-links.md "Wiki Links"
[link-reference-definitions]: link-reference-definitions.md "Link Reference Definitions"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[todo]: todo.md "Todo"
[feature-comparison]: feature-comparison.md "Feature comparison"
[foam-core-2020-07-11]: meeting-notes/foam-core-2020-07-11.md "Foam Core 2020-07-11"
[//end]: # "Autogenerated link references"

View File

@@ -14,29 +14,9 @@ Here are a few specific constraints, mainly because our tooling is a bit fragmen
- **File name should have extension `.md` or `.markdown`**
- This is a temporary limitation and will be lifted in future versions.
- At least `.mdx` will be supported, but ideally we'll support any file that you can map to `Markdown` language mode in VS Code
- **In addition to normal Markdown Links syntax you can use `[[media-wiki]]` links.**
- When you do, the [foam-vscode](https://github.com/foambubble/foam/tree/master/packages/foam-vscode) extension will automatically generate [Markdown Link Reference Definitions](https://spec.commonmark.org/0.29/#link-reference-definitions) at the bottom of the file.
- Here's an example:
- [[wiki-links]]
- [[github-pages]]
- This will generate the following references:
```md
[wiki-links]: wiki-links "Wiki Links"
[github-pages]: github-pages "Github Pages"
```
- The three components are `[link-label]: link-target "Link Title"
- **link label:** The link text to match in the surrounding markdown document. This matches the inner bracket of the double-bracketed `[[wiki-link]]` notation
- **link destination** The target of the matched link
- Right now we generate link destinations without file extension. This is a choice, see [discussion here](https://foambubble.github.io/foam/wiki-links#why-dont-wiki-links-work-on-github).
- **"Link Title"** Optional title for link (The Foam template has a snippet of JavaScript to replace this on the website at runtime)
- Open the [raw markdown](https://raw.githubusercontent.com/foambubble/foam/master/foam-file-format.md) to see them at the bottom of this file
- In the near future, these can be batch generated for all workspace files (WIP)
- For the time being, if you want to get [[wiki-links]] support across all files, you'll need to generate the link reference definitions yourself.
- If you end up writing a batch job for this, please share your solution, as this is something we'll need to implement soon!
- **In addition to normal Markdown Links syntax you can use `[[media-wiki]]` links.** See [[wiki-links]] for more details.
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links "Wiki Links"
[github-pages]: github-pages "Github Pages"
[decision-needed]: decision-needed "Decision Needed"
[daily-notes]: daily-notes "Daily notes"
[decision-needed]: decision-needed.md "Decision Needed"
[wiki-links]: wiki-links.md "Wiki Links"
[//end]: # "Autogenerated link references"

View File

@@ -6,6 +6,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

51
docs/gistpad.md Normal file
View File

@@ -0,0 +1,51 @@
# GistPad
[GistPad](https://aka.ms/gistpad) is a Visual Studio Code extension that allows you to edit your GitHub gists and repos, without needing to clone anything locally. It provides support for editing Foam workspaces, complete with `[[link]]` [completion/navigation](https://github.com/vsls-contrib/gistpad#links), [daily pages](https://github.com/vsls-contrib/gistpad#daily-pages), [pasting images](https://github.com/vsls-contrib/gistpad#pasting-images-1) and [backlinks](https://github.com/vsls-contrib/gistpad#backlinks). If you'd like to persist your notes in a GitHub repository, and automatically sync changes without needing to manually commit/push/pull, then GistPad might be an option worth exploring.
<img width="700px" src="https://user-images.githubusercontent.com/116461/87234714-96ba9400-c388-11ea-92c3-544d9a3bb633.png" />
## Getting started
To start using GistPad for your Foam-based knowledge base, simply perform the following steps:
1. Download the [GistPad extension](https://aka.ms/gistpad) and then re-start Visual Studio Code
1. Run the `GistPad: Sign In` command, and provide a [GitHub token](https://github.com/settings/tokens/new) that includes the `repo` scope (and optionally `gist` and `delete_repo` scope, if you'd like to use GistPad for managing your GitHub content more holistically)
1. Run the `GistPad: Manage Repository` command and select the `Create repo from template...` or `Create private repo from template...` depending on your preference
1. Select the `Foam-style wiki` template, and then specify a name for your Foam workspace (e.g. `my-foam-notes`, `johns-knowledge-base`)
Your new repo will be created in your GitHub account, and the `Foam` welcome page will be automatically opened. If you already have an existing Foam workspace in GitHub, then when you run step #3 above, simply select or specify the name of the GitHub repository instead.
> Note: If you have any and all feedback on how GistPad can be improved to support your Foam workflow, please don't hesitate to [let us know](https://github.com/vsls-contrib/gistpad)! 👍
<img width="700px" src="https://user-images.githubusercontent.com/116461/87863222-c1b76180-c90d-11ea-87d9-04bee1c58a0d.png" />
## Managing your workspace
Once you've opened/created the Foam repository, it will appear in the `Repositories` view of the `GistPad` tab (the one with the little notebook icon). From this tree view, you can add/edit/delete/rename new pages, upload local files, as well as view the backlinks for each page (they appear as child notes of a page).
<img width="250px" src="https://user-images.githubusercontent.com/116461/87234704-83a7c400-c388-11ea-90a8-2a660bef4dc5.png" />
## Editing your workspace
When you create or open a page, you can edit the markdown content as usual, as well as [paste images](https://github.com/vsls-contrib/gistpad#pasting-images-1), and create [`[[links]]` to other pages](https://github.com/vsls-contrib/gistpad#links). When you type `[[`, you'll recieve auto-completion for the existing pages in your workspace, and you can also automatically create new pages by simply creating a link to it.
Since you're using the Visual Studio Code markdown editor, you can benefit from all of the rich language services (e.g. syntax highlighting, header collapsing), as well as the extension ecosystem (e.g. [Emojisense](https://marketplace.visualstudio.com/items?itemName=bierner.emojisense)).
## Navigating your workspace
When editing a file, you can easily navigate `[[links]]` by hovering over them to see a preview of their contents and/or `cmd+clicking` on them in order to jump to the respective page. Furthermore, when you add a link to a page, a [backlink](https://github.com/vsls-contrib/gistpad#backlinks) is automatically added to it.
You can view a page's backlinks using either of the following techniques:
1. Expanding the file's node in the `Repositories` tree, since it's child nodes will represent backlinks. This makes it easy to browse your pages and their backlinks in a single hierachical view.
1. Opening a file, and then viewing it's backlinks list at the bottom of the editor view. This makes it easy to read a page and then see its backlinks in a contextually rich way.
## Daily Pages
In addition to create arbitrary pages, you can also use GistPad for journaling or capturing [daily notes](https://github.com/vsls-contrib/gistpad#daily-pages). Simply click the calendar icon in the `Repositories` tree, which will open up the page that represents today. If the page doesn't already exist, then it will be created in the workspace before being opened.
<img width="700px" src="https://user-images.githubusercontent.com/116461/87234721-b356cc00-c388-11ea-946a-e7f9c92258a6.png" />

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -13,6 +13,6 @@ The quick and easy way is to use the Git: Commit All command after editing files
This could be improved. [[todo]] [[good-first-task]]
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[good-first-task]: good-first-task "Good First Task"
[todo]: todo.md "Todo"
[good-first-task]: good-first-task.md "Good First Task"
[//end]: # "Autogenerated link references"

View File

@@ -7,6 +7,6 @@
[[todo]] [[good-first-task]] Improve this documentation
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[good-first-task]: good-first-task "Good First Task"
[todo]: todo.md "Todo"
[good-first-task]: good-first-task.md "Good First Task"
[//end]: # "Autogenerated link references"

51
docs/gitlab-pages.md Normal file
View File

@@ -0,0 +1,51 @@
# GitLab Pages
You don't have to use GitHub to serve Foam pages. You can also use GitLab.
## Setup a project
### Generate the directory from GitHub
Generate a solution using the [Foam template].
Change the remote to GitLab, or copy all the files into a new GitLab repo.
### Add a _config.yaml
Add another file to the root directory (the one with `readme.md` in it) called `_config.yaml` (no extension)
```yaml
title: My Awesome Foam Project
baseurl: "" # the subpath of your site, e.g. /blog
url: "/" # the base hostname & protocol for your site
theme: jekyll-theme-minimal
```
You can choose a theme if you want from places like [Jekyll Themes](https://jekyllthemes.io/)
### Add a Gemlock file
Add another file to the root directory (the one with `readme.md` in it) called `Gemfile` (no extension)
```ruby
source "https://rubygems.org"
gem "jekyll"
gem "jekyll-theme-minimal"
gem "jekyll-optional-front-matter"
```
Commit the file and push it to gitlab.
## Setup CI/CD
1. From the project home in GitLab click `Set up CI/CD`
2. Choose `Jekyll` as your template from the template dropdown
3. Click `commit`
4. Now when you go to CI / CD > Pipelines, you should see the code running
## Troubleshooting
- *Could not locate Gemfile* - You didn't follow the steps above to [#Add a Gemlock file]
- *Conversion error: Jekyll::Converters::Scss encountered an error while converting* You need to reference a theme.
- *Pages are running in CI/CD, but I only ever see `test`, and never deploy* - Perhaps you've renamed the main branch (from master) - check the settings in `.gitlab-ci.yml` and ensure the deploy command is running to the branch you expect it to.
- *I deployed, but my .msd files don't seem to be being converted into .html files* - You need a gem that GitHub installs by default - check `gem "jekyll-optional-front-matter"` appears in the `Gemfile`

View File

@@ -5,5 +5,5 @@ See the backlinks of this page for good first contribution opportunities.
[[materialized-backlinks]] would help here.
[//begin]: # "Autogenerated link references for markdown compatibility"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -6,7 +6,4 @@
![Demo of graph visualiser](assets/images/foam-navigation-demo.gif)
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links "Wiki Links"
[todo]: todo "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -36,7 +36,7 @@ You can add [[recipes]] by creating a pull request to [foambubble/foam](https://
Read more in our [[contribution-guide]].
[//begin]: # "Autogenerated link references for markdown compatibility"
[recommended-extensions]: recommended-extensions "Recommended Extensions"
[recipes]: recipes "Recipes"
[contribution-guide]: contribution-guide "Contribution Guide"
[recommended-extensions]: recommended-extensions.md "Recommended Extensions"
[recipes]: recipes.md "Recipes"
[contribution-guide]: contribution-guide.md "Contribution Guide"
[//end]: # "Autogenerated link references"

View File

@@ -0,0 +1,5 @@
# Images from your Clipboard
You can directly link and paste images that are copied to the clipboard using either the [Paste
Image](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image)
extension, or the [Markdown Image](https://marketplace.visualstudio.com/items?itemName=hancel.markdown-image) extension. The former does not have MDX support (yet), the latter does.

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -6,6 +6,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -10,6 +10,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -1,16 +1,27 @@
# Inbox
Uncategorised thoughts
Uncategorised thoughts, to be added
- Release notes
- Automatic updates
- Markdown Preview
- It's possible to customise the markdown preview styling. **Maybe make it use local foam workspace styles for live preview of the site??**
- See: https://marketplace.visualstudio.com/items?itemName=bierner.markdown-preview-github-styles
- Use VS Code [CodeTour](https://marketplace.visualstudio.com/items?itemName=vsls-contrib.codetour) for onboarding
- Investigate other similar extensions:
- [Unotes](https://marketplace.visualstudio.com/items?itemName=ryanmcalister.Unotes)
- [vscode-memo](https://github.com/svsool/vscode-memo)
- [gistpad wiki](https://github.com/jevakallio/gistpad/tree/master/src/repos/wiki)
- Open in Foam
- When you want to open a Foam published website in your own VS Code, we could have a "Open in Foam" link that opens the link in VS Code via a url binding (if possible), downloads the github repo locally, and opens it as a Foam workspace.
- Every Foam could have a different theme even in the editor, so you'll see it like they see it
- UI and layout design of your workspace can become a thing
- Developer documentation
- GistPad has a good vs code contrib primer: https://github.com/jevakallio/gistpad/blob/master/CONTRIBUTING.md
- VS Code Notebooks API
- https://code.visualstudio.com/api/extension-guides/notebook
- Snippets in template
- Foam as a (VS Code) language
- Syntax highlighting
- Autocompletion
- Get rid of mediawiki links in favor of write time tooling
- Snippets
- Future architecture
- Could we do publish-related settings as a pre-push git hook, e.g. generating footnote labels

View File

@@ -62,10 +62,12 @@ These instructions assume you have a GitHub account, and you have Visual Studio
<a class="github-button" href="https://github.com/foambubble/foam-template/generate" data-icon="octicon-repo-template" data-size="large" aria-label="Use this template foambubble/foam-template on GitHub">Use this template</a>
(If you want to keep your thoughts to yourself, remember to set the repository private, or if you don't want to use GitHub to host your workspace at all, choose **Download as ZIP** instead of **Use this template**.)
*If you want to keep your thoughts to yourself, remember to set the repository private, or if you don't want to use GitHub to host your workspace at all, choose **Download as ZIP** instead of **Use this template**.*
2. [Clone the repository locally](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository) and open it in VS Code.
*Open the repository as a folder using the `File > Open...` menu item. In VS Code, "open workspace" refers to [multi-root workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces).*
3. When prompted to install recommended extensions, click **Install all** (or **Show Recommendations** if you want to review and install them one by one)
After setting up the repository, open `.vscode/settings.json` and edit, add or remove any settings you'd like for your Foam workspace.
@@ -126,6 +128,23 @@ If that sounds like something you're interested in, I'd love to have you along o
<tr>
<td align="center"><a href="https://styfle.dev/"><img src="https://avatars1.githubusercontent.com/u/229881?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Steven</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=styfle" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/Georift"><img src="https://avatars2.githubusercontent.com/u/859430?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Tim</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=Georift" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/sauravkhdoolia"><img src="https://avatars1.githubusercontent.com/u/34188267?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Saurav Khdoolia</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=sauravkhdoolia" title="Documentation">📖</a></td>
<td align="center"><a href="https://anku.netlify.com/"><img src="https://avatars1.githubusercontent.com/u/22813027?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Ankit Tiwari</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=anku255" title="Documentation">📖</a> <a href="https://github.com/foambubble/foam/commits?author=anku255" title="Tests">⚠️</a></td>
<td align="center"><a href="https://github.com/ayushbaweja"><img src="https://avatars1.githubusercontent.com/u/44344063?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Ayush Baweja</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=ayushbaweja" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/TaiChi-IO"><img src="https://avatars3.githubusercontent.com/u/65092992?v=4?s=60" width="60px;" alt=""/><br /><sub><b>TaiChi-IO</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=TaiChi-IO" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/juanfrank77"><img src="https://avatars1.githubusercontent.com/u/12146882?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Juan F Gonzalez </b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=juanfrank77" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://sanketdg.github.io"><img src="https://avatars3.githubusercontent.com/u/8980971?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Sanket Dasgupta</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=SanketDG" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/nstafie"><img src="https://avatars1.githubusercontent.com/u/10801854?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Nicholas Stafie</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=nstafie" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/francishamel"><img src="https://avatars3.githubusercontent.com/u/36383308?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Francis Hamel</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=francishamel" title="Code">💻</a></td>
<td align="center"><a href="http://digiguru.co.uk"><img src="https://avatars1.githubusercontent.com/u/619436?v=4?s=60" width="60px;" alt=""/><br /><sub><b>digiguru</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=digiguru" title="Code">💻</a> <a href="https://github.com/foambubble/foam/commits?author=digiguru" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/chirag-singhal"><img src="https://avatars3.githubusercontent.com/u/42653703?v=4?s=60" width="60px;" alt=""/><br /><sub><b>CHIRAG SINGHAL</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=chirag-singhal" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/lostintangent"><img src="https://avatars3.githubusercontent.com/u/116461?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Jonathan Carter</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=lostintangent" title="Documentation">📖</a></td>
<td align="center"><a href="https://www.synesthesia.co.uk"><img src="https://avatars3.githubusercontent.com/u/181399?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Julian Elve</b></sub></a><br /><a href="https://github.com/foambubble/foam/commits?author=synesthesia" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/thomaskoppelaar"><img src="https://avatars3.githubusercontent.com/u/36331365?v=4?s=60" width="60px;" alt=""/><br /><sub><b>Thomas Koppelaar</b></sub></a><br /><a href="#question-thomaskoppelaar" title="Answering Questions">💬</a> <a href="https://github.com/foambubble/foam/commits?author=thomaskoppelaar" title="Code">💻</a> <a href="#userTesting-thomaskoppelaar" title="User Testing">📓</a></td>
</tr>
</table>
@@ -142,13 +161,12 @@ If that sounds like something you're interested in, I'd love to have you along o
Foam is licensed under the [MIT license](license).
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links "Wiki Links"
[graph-visualisation]: graph-visualisation "Graph visualisation"
[backlinking]: backlinking "Backlinking"
[recommended-extensions]: recommended-extensions "Recommended Extensions"
[recipes]: recipes "Recipes"
[known-issues]: known-issues "Known Issues"
[roadmap]: roadmap "Roadmap"
[principles]: principles "Principles"
[contribution-guide]: contribution-guide "Contribution Guide"
[graph-visualisation]: graph-visualisation.md "Graph visualisation"
[backlinking]: backlinking.md "Backlinking"
[recommended-extensions]: recommended-extensions.md "Recommended Extensions"
[recipes]: recipes.md "Recipes"
[known-issues]: known-issues.md "Known Issues"
[roadmap]: roadmap.md "Roadmap"
[principles]: principles.md "Principles"
[contribution-guide]: contribution-guide.md "Contribution Guide"
[//end]: # "Autogenerated link references"

View File

@@ -7,5 +7,5 @@
- [ ]
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[todo]: todo.md "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -11,5 +11,5 @@
- [x] ~~This is because the link styling hack in `assets/css/style.scss`~~
[//begin]: # "Autogenerated link references for markdown compatibility"
[graph-visualisation]: graph-visualisation "Graph visualisation"
[graph-visualisation]: graph-visualisation.md "Graph visualisation"
[//end]: # "Autogenerated link references"

View File

@@ -0,0 +1,141 @@
# Link Reference Definition Improvements
## Current Problems
### File-by-file Insertion
For the time being, if you want to get [[wiki-links]] into all files within the workspace, you'll need to generate the link reference definitions yourself file-by-file (with the assistance of Foam).
### Wikilinks don't work on GitHub
> **TL;DR;** [workaround](#workaround) in the end of the chapter.
If you click any of the wiki-links on GitHub web UI (such as the `README.md` of a project), you'll notice that the links break with a 404 error.
At the time of writing (June 28 2020) this is a known, but unsolved error. To understand why this is the case, we need to understand what we are trading off.
So, why don't they work on GitHub?
The three components of [[link-reference-definitions]] are link label, link destination and Link Title.
The issue is the middle **link destination** component. It's configured to point to the file name **without file extension**, i.e. "file-name" instead of "file-name.md". This is to make the GitHub Pages rendering work, because if we generated the links to `file-name.md`, the links would point to the raw markdown files instead of their generated HTML versions.
| Environment | `file-name` | `file-name.md` |
| ---------------- | ----------- | -------------- |
| **VS Code** | Works | Works |
| **GitHub pages** | Works | Breaks |
| **GitHub UI** | Breaks | Works |
So as you can see, we've prioritised GitHub Pages over GitHub Web UI for the time being.
Ideally, we'd like a solution that works with both, but it's not defined yet (see [[link-reference-definitions]] for more details)
#### Workaround
For the time being, you can use relative `[markdown links](markdown-link.md)` syntax.
**Pros:**
- This will work on all platforms.
**Cons:**
- It will break the Markdown Notes [[backlinking]] support
- Less convenient to write
### Finding certain words clutter the VS Code search results
Since link reference definitions have `[//begin]` and `[//end]` guards with explanatory text that use certain words, these words (like "generate") appear in VS Code search results if you happen to search matching strings from the workspace.
## Improvement Proposal
Problem space in essence:
- During edit-time (when modifying the markdown files in an editor)
- link reference definitions are needed if user uses editor extensions that don't understand wikilinks
- link reference definitions may be annoying since they
- add content to files that the user hasn't typed in by themselves
- get out of date if user uses a tool that doesn't autogenerate them
- may clutter the search results
- During build-time (when converting markdown to html for publishing purposes)
- link reference definitions are needed, if the files are published via such tools (or to such platforms) that don't understand wikilinks
- link reference definitions might have to be in different formats depending on the publish target (e.g. Github pages vs Github UI)
The potential solution:
- For edit-time
- Make edit-time link reference definition generation optional via user settings. They should be on by default, and generating valid markdown links with a relative path to a `.md` file.
- Make format of the link reference definition configurable (whether to include '.md' or not)
- Out of recommended extensions, currently only "markdown links" doesn't support them (?). However even its [code](https://github.com/tchayen/markdown-links/blob/master/src/parsing.ts#L25) seems to include wikilink parser, so it might just be a bug?
- For build-time
- To satisfy mutually incompatible constraints between GitHub UI, VSCode UI, and GitHub Pages, we should add a pre-processing/build step for pushing to GitHub Pages.
- This would be a GitHub action (or a local script, ran via foam-cli) that outputs publish-friendly markdown format for static site generators and other publishing tools
- This build step should be pluggable, so that other transformations could be ran during it
- Have publish targets defined in settings, that support both turning the link reference definitions on/off and defining their format (.md or not). Example draft (including also edit-time aspect):
```typescript
// settings json
// see enumerations below for explanations on values
{
"foam": {
"publish": [
{
"name": "Gitlab Mirror", // name of the publish target
"linkTranspilation": "Off",
"linkReferenceDefinitions": "withExtensions"
},
{
"name": "GitHub Pages",
"linkTranspilation": "Off",
"linkReferenceDefinitions": "withoutExtensions"
},
{
"name": "Blog",
"linkTranspilation": "Off",
"linkReferenceDefinitions": "Off"
},
{
"name": "My Amazing PDF book",
"linkTranspilation": "WikiLinksToMarkdown"
}
],
"edit": {
"linkReferenceDefinitions": "Off"
}
}
}
// Defines if and how links in markdown files are somehow converted (in-place) during build time
// Note that this enumeration is not valid edit-time, since we (probably) don't want to change text like this while user is editing it
enum LinkTranspilation {
Off, // links are not transpiled
WikiLinksToMarkdown, // links using wiki-format [[link]] are converted to normal md links: [link](./some/file.md)
// if this is set, not link reference definitions are generated (not needed)
}
// Defines if and how link reference definition section is generated
enum LinkReferenceDefinitions {
Off, // link reference definitions are not generated
WithExtensions, // link reference definitions contain .md (or similar) file extensions
WithoutExtensions // link reference definitions do not contain file extenions
}
```
- With Foam repo, just use edit-time link reference definitions with '.md' extension - this makes the links work in the Github UI
- Have publish target defined for Github pages, that doesn't use '.md' extension, but still has the link reference definitions. Generate the output into gh-pages branch (or separate repo) with automation.
- This naturally requires first removing the existing link reference definitions during the build
- Other
- To clean up the search results, remove link reference definition section guards (assuming that these are not defined by the markdown spec). Use unifiedjs parse trees to identify if there's missing (or surplus) definitions (check if they are identified properly by the library), and just add the needed definitions to the bottom of the file (without guards) AND remove them if they are not needed (anywhere from the file).
Note that the proposal above supports both (build-time) inline transpilation of wikilinks as well as creation reference definitions. Depending on the direction of Foam, also only one of them could be selected. In that case the other could be implemented at later point of time.
UI-wise, the publish targets could be picked in some similar fashion as the run/debug targets in vscode by implementing a separate panel, or maybe through command execution (CTRL+SHIFT+P) - not yet defined at this point.
## Links
- [tracking issue on GitHub](https://github.com/foambubble/foam/issues/16)
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links.md "Wiki Links"
[link-reference-definitions]: link-reference-definitions.md "Link Reference Definitions"
[backlinking]: backlinking.md "Backlinking"
[//end]: # "Autogenerated link references"

View File

@@ -0,0 +1,54 @@
# Link Reference Definitions
## Introduction
When you use `[[wiki-links]]`, the [foam-vscode](https://github.com/foambubble/foam/tree/master/packages/foam-vscode) extension will automatically generate [Markdown Link Reference Definitions](https://spec.commonmark.org/0.29/#link-reference-definitions) at the bottom of the file. This is done to make the content of the file compatible with various Markdown tools (e.g. parsers, static site generators, VS code plugins etc), which don't support `[[wiki-links]]`.
## Example
The following example:
```md
- [[wiki-links]]
- [[github-pages]]
```
...generates the following link reference definitions to the bottom of the file:
```md
[wiki-links]: wiki-links "Wiki Links"
[github-pages]: github-pages "Github Pages"
```
You can open the [raw markdown](https://raw.githubusercontent.com/foambubble/foam/master/foam-file-format.md) to see them at the bottom of this file
## Specification
The three components of a link reference definition are `[link-label]: link-target "Link Title"`
- **link label:** The link text to match in the surrounding markdown document. This matches the inner bracket of the double-bracketed `[[wiki-link]]` notation
- **link destination** The target of the matched link
- By default we generate links without extension. This can be overridden, see [Configuration](#configuration) below
- **"Link Title"** Optional title for link (The Foam template has a snippet of JavaScript to replace this on the website at runtime)
## Configuration
You can choose to generate link reference definitions with or without file extensions, depending on the target. As a rule of thumb:
- Links with file extensions work better with standard markdown-based tools, such as GitHub web UI.
- Links without file extensions work better with certain web publishing tools that treat links as literal urls and don't transform them automatically, such as the standard GitHub pages installation.
By default, Foam generates links without file extensions for legacy reasons, but this may change in future versions.
You can override this setting in your Foam workspace's `settings.json`:
- `"foam.edit.linkReferenceDefinitions": "withoutExtensions"` (default)
- `"foam.edit.linkReferenceDefinitions": "withExtensions"`
After changing the setting in your workspace, you can run the [[workspace-janitor]] command to convert all existing definitions.
## Future improvements
See [[link-reference-definition-improvements]] for further discussion on current problems and potential solutions.
[//begin]: # "Autogenerated link references for markdown compatibility"
[workspace-janitor]: workspace-janitor.md "Janitor"
[link-reference-definition-improvements]: link-reference-definition-improvements.md "Link Reference Definition Improvements"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -20,5 +20,5 @@ In the future we'll want to improve this feature by
[//begin]: # "Autogenerated link references for markdown compatibility"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks (stub)"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[//end]: # "Autogenerated link references"

View File

@@ -12,6 +12,6 @@ The idea would be to automatically generate lists of backlinks (and optionally,
- Make Foam notes more portable to different apps and long-term storage
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

36
docs/math-support.md Normal file
View File

@@ -0,0 +1,36 @@
---
layout: mathjax
---
# Math Support
The published pages don't support math formulas by default. To enable this feature, you can add the following code snippet to the end of `_layouts/page.html`:
```html
<script src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'],
inlineMath: [['$','$']]
}
});
</script>
```
Example of inline math: $e^{i \pi}+1=0$
Example of displayed math:
$$ f_{\mathbf{X}}\left(x_{1}, \ldots, x_{k}\right)=\frac{\exp \left(-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{\mathrm{T}} \mathbf{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu})\right)}{\sqrt{(2 \pi)^{k}|\mathbf{\Sigma}|}} $$
If you want the index page of your Foam site to render maths, you'll need to add that to `_layouts/home.html` as well, or change the layout of the index page to be "page" instead of "home" by putting this Front Matter on the top of your `readme.md/index.md`:
```
---
layout: page
---
# Your normal title here
```
Reference: [How to support latex in github-pages](https://stackoverflow.com/questions/26275645/how-to-support-latex-in-github-pages)

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -122,5 +122,6 @@ How others solve this:
- Unique ids -- could support optionally as part of file name or front matter metadata. Should not be required.
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: ../todo "Todo"
[todo]: ../todo.md "Todo"
[Index]: ../index.md "Foam"
[//end]: # "Autogenerated link references"

View File

@@ -6,6 +6,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -41,9 +41,7 @@ Given the effort vs reward ratio, it's a low priority for core team, but if some
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[build-vs-assemble]: build-vs-assemble "Build vs Assemble"
[wiki-links]: wiki-links "Wiki Links"
[workspace-janitor]: workspace-janitor "Workspace Janitor (stub)"
[build-vs-assemble]: build-vs-assemble.md "Build vs Assemble"
[wiki-links]: wiki-links.md "Wiki Links"
[workspace-janitor]: workspace-janitor.md "Janitor"
[//end]: # "Autogenerated link references"

View File

@@ -1,4 +0,0 @@
[//begin]: # "Autogenerated link references for markdown compatibility"
[unrelated]: unrelated "Unrelated"
[//end]: # "Autogenerated link references"

View File

@@ -8,6 +8,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -6,6 +6,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -49,9 +49,9 @@ While Foam uses tools popular among computer programmers, Foam should be inclusi
- **Foam is for everyone** As a foam user, you support everyone's quest for knowledge and self-improvement, not only your own, or folks' who look like you. All participants in Foam repositories, discussion forums, physical and virtual meeting spaces etc are expected to respect each other as described in our [[code-of-conduct]]. **Foam is not for toxic tech bros.**
[//begin]: # "Autogenerated link references for markdown compatibility"
[roadmap]: roadmap "Roadmap"
[recipes]: recipes "Recipes"
[recommended-extensions]: recommended-extensions "Recommended Extensions"
[contribution-guide]: contribution-guide "Contribution Guide"
[code-of-conduct]: code-of-conduct "Code of Conduct"
[roadmap]: roadmap.md "Roadmap"
[recipes]: recipes.md "Recipes"
[recommended-extensions]: recommended-extensions.md "Recommended Extensions"
[contribution-guide]: contribution-guide.md "Contribution Guide"
[code-of-conduct]: code-of-conduct.md "Code of Conduct"
[//end]: # "Autogenerated link references"

View File

@@ -23,5 +23,5 @@ Would be cool if Foam pages could be published. Some ideas here.
- [ ] More granular access control? Email someone a link with a hash? [Testing](testing.md)
[//begin]: # "Autogenerated link references for markdown compatibility"
[build-vs-assemble]: build-vs-assemble "Build vs Assemble"
[build-vs-assemble]: build-vs-assemble.md "Build vs Assemble"
[//end]: # "Autogenerated link references"

View File

@@ -10,6 +10,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
- Share specific page (with private hash)
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -6,3 +6,7 @@
- [Dark mode](https://css-tricks.com/dark-modes-with-css/)
[//begin]: # "Autogenerated link references for markdown compatibility"
[Todo]: todo.md "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -14,7 +14,7 @@ Guides, tips and strategies for getting the most out of your Foam workspace!
- [Workflow](#workflow)
- [Creative ideas](#creative-ideas)
- [Other](#other)
## Contribute
- Start by reading [[contribution-guide]]
@@ -23,7 +23,7 @@ Guides, tips and strategies for getting the most out of your Foam workspace!
## Take smart notes
- Introduction to Zettelkasten [[todo]]
## Discover
- Explore your notes using [[graph-visualisation]]
- Discover relationships with [[backlinking]]
@@ -31,14 +31,17 @@ Guides, tips and strategies for getting the most out of your Foam workspace!
## Organise
- Using [[backlinking]] for [[reference-lists]].
## Write
- Link documents with [[wiki-links]]
- Use shortcuts for [[creating-new-notes]]
- Instantly create and access your [[daily-notes]]
- Draw [[diagrams-in-markdown]]
- Prettify your links, [[automatically-expand-urls-to-well-titled-links]]
- Style your environment with [[custom-markdown-preview-styles]]
- Paste and link [[images-from-your-clipboard]]
- [Markdown All-in-One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) features [[todo]] [[good-first-task]]
- Manage checklists
- Manage checklists
- Automatic Table of Contents
- Live preview markdown
- _More..._
@@ -47,30 +50,32 @@ Guides, tips and strategies for getting the most out of your Foam workspace!
## Version control
- Quick commits with [[git-integration]]
- Quick commits with VS Code's built in [[git-integration]]
- Store your workspace in an auto-synced GitHub repo with [[gistpad]]
- Sync your GitHub repo automatically [[todo]].
## Publish
- Publish to [[github-pages]]
- Publish to [[gitlab-pages]]
- Publish your site with [[eleventy-and-netlify]]
- Publish to [[azure-devops-wiki]]
- Make the site your own by [[customising-styles]].
- Host your own website [[todo]]
- Math support [[math-support]]
## Collaborate
- Give your team push access to your GitHub repo [[todo]]
- Real-time collaboration via VS Code Live Share [[todo]]
- Accept patches via GitHub PRs [[todo]]
## Workflow
Workflow recipes wanted!
_See [[contribution-guide]] and [[how-to-write-recipes]]._
- Capture notes from Drafts app on iOS [[capture-notes-with-drafts-pro]]
## Creative ideas
Creative ideas welcome!
Creative ideas welcome!
- Support [Anki](https://apps.ankiweb.net/) cards from notes like [Remnote](https://www.remnote.io/) [[todo]]
@@ -78,24 +83,33 @@ _See [[contribution-guide]] and [[how-to-write-recipes]]._
## Other
Thought of a recipe but don't see a category for them? Add them here and we'll organise them once we detect a theme.
Thought of a recipe but don't see a category for them? Add them here and we'll organise them once we detect a theme.
_See [[contribution-guide]] and [[how-to-write-recipes]]._
[//begin]: # "Autogenerated link references for markdown compatibility"
[contribution-guide]: contribution-guide "Contribution Guide"
[how-to-write-recipes]: how-to-write-recipes "How to Write Recipes"
[todo]: todo "Todo"
[graph-visualisation]: graph-visualisation "Graph visualisation"
[backlinking]: backlinking "Backlinking"
[unlinked-references]: unlinked-references "Unlinked references (stub)"
[reference-lists]: reference-lists "Reference Lists"
[wiki-links]: wiki-links "Wiki Links"
[creating-new-notes]: creating-new-notes "Creating New Notes"
[diagrams-in-markdown]: diagrams-in-markdown "Diagrams in Markdown"
[good-first-task]: good-first-task "Good First Task"
[automatically-expand-urls-to-well-titled-links]: automatically-expand-urls-to-well-titled-links "Automatically Expand URLs to Well-Titled Links"
[git-integration]: git-integration "Git integration"
[github-pages]: github-pages "Github Pages"
[customising-styles]: customising-styles "Customising Styles"
[contribution-guide]: contribution-guide.md "Contribution Guide"
[how-to-write-recipes]: how-to-write-recipes.md "How to Write Recipes"
[todo]: todo.md "Todo"
[graph-visualisation]: graph-visualisation.md "Graph visualisation"
[backlinking]: backlinking.md "Backlinking"
[unlinked-references]: unlinked-references.md "Unlinked references (stub)"
[reference-lists]: reference-lists.md "Reference Lists"
[wiki-links]: wiki-links.md "Wiki Links"
[creating-new-notes]: creating-new-notes.md "Creating New Notes"
[daily-notes]: daily-notes.md "Daily notes"
[diagrams-in-markdown]: diagrams-in-markdown.md "Diagrams in Markdown"
[automatically-expand-urls-to-well-titled-links]: automatically-expand-urls-to-well-titled-links.md "Automatically Expand URLs to Well-Titled Links"
[custom-markdown-preview-styles]: custom-markdown-preview-styles.md "Custom Markdown Preview Styles"
[images-from-your-clipboard]: images-from-your-clipboard.md "Images from your Clipboard"
[good-first-task]: good-first-task.md "Good First Task"
[git-integration]: git-integration.md "Git integration"
[gistpad]: gistpad.md "GistPad"
[github-pages]: github-pages.md "Github Pages"
[gitlab-pages]: gitlab-pages.md "GitLab Pages"
[eleventy-and-netlify]: eleventy-and-netlify.md "Eleventy and Netlify"
[azure-devops-wiki]: azure-devops-wiki.md "Azure DevOps Wiki"
[customising-styles]: customising-styles.md "Customising Styles"
[math-support]: math-support.md "Math Support"
[capture-notes-with-drafts-pro]: capture-notes-with-drafts-pro.md "Capture Notes With Drafts Pro"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -10,7 +10,7 @@ Use [[backlinking]] for handy reference lists:
- [[todo]]: [[materialized-backlinks]] would be very useful here.
[//begin]: # "Autogenerated link references for markdown compatibility"
[backlinking]: backlinking "Backlinking"
[todo]: todo "Todo"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks"
[backlinking]: backlinking.md "Backlinking"
[todo]: todo.md "Todo"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[//end]: # "Autogenerated link references"

View File

@@ -29,6 +29,6 @@
- Can [MDX](https://github.com/mdx-js/mdx) help us here?
[//begin]: # "Autogenerated link references for markdown compatibility"
[unlinked-references]: unlinked-references "Unlinked references"
[renaming-files]: renaming-files "Renaming files"
[unlinked-references]: unlinked-references.md "Unlinked references (stub)"
[renaming-files]: renaming-files.md "Renaming files (stub)"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -35,13 +35,14 @@ If a roadmap item is a stub, **consider** opening a [GitHub issue](https://githu
- [[renaming-files]]
- [[unlinked-references]]
- [[daily-notes]]
- [[block-references]]
- [[improved-backlinking]]
- UX: [[make-backlinks-more-prominent]]
- [[materialized-backlinks]]
- [[automatic-git-syncing]]
- [[git-flows-for-teams]]
- [[user-settings]]
- [[link-reference-definitions]]
### Publishing
@@ -68,8 +69,9 @@ If a roadmap item is a stub, **consider** opening a [GitHub issue](https://githu
- Discussion: [foam#55](https://github.com/foambubble/foam/issues/55)
- [[migrating-from-obsidian]]
- Discussion: [foam#46](https://github.com/foambubble/foam/issues/46)
- [[Migrating from OneNote (stub)]]
- Discussion: [foam#151](https://github.com/foambubble/foam/issues/151)
- _Migration from other tools..._
### integration
- _Integrations to third party tools_...
@@ -79,36 +81,37 @@ If a roadmap item is a stub, **consider** opening a [GitHub issue](https://githu
- [[refactoring-via-language-server-protocol]]
[//begin]: # "Autogenerated link references for markdown compatibility"
[build-vs-assemble]: build-vs-assemble "Build vs Assemble"
[recipes]: recipes "Recipes"
[cli]: cli "Command Line Interface"
[workspace-janitor]: workspace-janitor "Workspace Janitor"
[contribution-guide]: contribution-guide "Contribution Guide"
[improve-default-workspace-settings]: improve-default-workspace-settings "Improve Default Workspace Settings (stub)"
[git-integration]: git-integration "Git integration"
[wiki-links]: wiki-links "Wiki Links"
[foam-file-format]: foam-file-format "Foam File Format"
[renaming-files]: renaming-files "Renaming files (stub)"
[unlinked-references]: unlinked-references "Unlinked references (stub)"
[daily-notes]: daily-notes "Daily notes"
[block-references]: block-references "Block References (stub)"
[improved-backlinking]: improved-backlinking "Improved Backlinking (stub)"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks (stub)"
[automatic-git-syncing]: automatic-git-syncing "Automatic Git Syncing (stub)"
[git-flows-for-teams]: git-flows-for-teams "Git Flows for Teams (stub)"
[officially-support-alternative-templates]: officially-support-alternative-templates "Officially Support Alternative Templates (stub)"
[improved-static-site-generation]: improved-static-site-generation "Improved Static Site Generation (stub)"
[mdx-by-default]: mdx-by-default "MDX by Default(stub)"
[search-in-published-workspace]: search-in-published-workspace "Search in Published Workspace (stub)"
[graph-in-published-workspace]: graph-in-published-workspace "Graph in Published Workspace (stub)"
[linking-between-published-workspaces]: linking-between-published-workspaces "Linking between Published Workspaces (stub)"
[publishing-permissions]: publishing-permissions "Publishing Permissions(stub)"
[mobile-apps]: mobile-apps "Mobile Apps"
[packaged-desktop-app]: packaged-desktop-app "Packaged Desktop App (stub)"
[web-editor]: web-editor "Web Editor (stub)"
[migrating-from-roam]: migrating-from-roam "Migrating from Roam (stub)"
[migrating-from-obsidian]: migrating-from-obsidian "Migrating from Obsidian (stub)"
[foam-linter]: foam-linter "Foam Linter (stub)"
[refactoring-via-language-server-protocol]: refactoring-via-language-server-protocol "Refactoring via Language Server Protocol (stub)"
[make-backlinks-more-prominent]: make-backlinks-more-prominent "Make Backlinks More Prominent"
[//end]: # "Autogenerated link references"
[build-vs-assemble]: build-vs-assemble.md "Build vs Assemble"
[recipes]: recipes.md "Recipes"
[cli]: cli.md "Command Line Interface"
[workspace-janitor]: workspace-janitor.md "Janitor"
[contribution-guide]: contribution-guide.md "Contribution Guide"
[improve-default-workspace-settings]: improve-default-workspace-settings.md "Improve Default Workspace Settings (stub)"
[git-integration]: git-integration.md "Git integration"
[wiki-links]: wiki-links.md "Wiki Links"
[foam-file-format]: foam-file-format.md "Foam File Format"
[renaming-files]: renaming-files.md "Renaming files (stub)"
[unlinked-references]: unlinked-references.md "Unlinked references (stub)"
[block-references]: block-references.md "Block References (stub)"
[improved-backlinking]: improved-backlinking.md "Improved Backlinking (stub)"
[make-backlinks-more-prominent]: make-backlinks-more-prominent.md "Make Backlinks More Prominent"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[automatic-git-syncing]: automatic-git-syncing.md "Automatic Git Syncing (stub)"
[git-flows-for-teams]: git-flows-for-teams.md "Git Flows for Teams (stub)"
[user-settings]: user-settings.md "User Settings (stub)"
[link-reference-definitions]: link-reference-definitions.md "Link Reference Definitions"
[officially-support-alternative-templates]: officially-support-alternative-templates.md "Officially Support Alternative Templates (stub)"
[improved-static-site-generation]: improved-static-site-generation.md "Improved Static Site Generation (stub)"
[mdx-by-default]: mdx-by-default.md "MDX by Default(stub)"
[search-in-published-workspace]: search-in-published-workspace.md "Search in Published Workspace (stub)"
[graph-in-published-workspace]: graph-in-published-workspace.md "Graph in Published Workspace (stub)"
[linking-between-published-workspaces]: linking-between-published-workspaces.md "Linking between Published Workspaces (stub)"
[publishing-permissions]: publishing-permissions.md "Publishing Permissions(stub)"
[mobile-apps]: mobile-apps.md "Mobile Apps"
[packaged-desktop-app]: packaged-desktop-app.md "Packaged Desktop App (stub)"
[web-editor]: web-editor.md "Web Editor (stub)"
[migrating-from-roam]: migrating-from-roam.md "Migrating from Roam (stub)"
[migrating-from-obsidian]: migrating-from-obsidian.md "Migrating from Obsidian (stub)"
[foam-linter]: foam-linter.md "Foam Linter (stub)"
[refactoring-via-language-server-protocol]: refactoring-via-language-server-protocol.md "Refactoring via Language Server Protocol (stub)"
[//end]: # "Autogenerated link references"

View File

@@ -7,5 +7,5 @@ Run `Cmd` + `P` ( `Ctrl` + `P` on Windows ) and type a name (like 'issues') to
Run `Cmd` + `Shift` + `F` ( `Ctrl` + `Shift` + `F` on Windows ) and type a word (like 'links') to find all the notes that contain that term.
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[todo]: todo.md "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -8,6 +8,6 @@ If you're interested in working on it, please start a conversation in [GitHub is
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -4,20 +4,17 @@ It would be good to have some shared terminology to talk about Foam concepts. So
Here's some ideas, these are open for discussion.
## Foam (project)
## Foam, the software project
The set of tools and ideas collected in this organisation.
## Foam workspace
## (Your) Foam
The directory/repository where you keep all your documents.
The directory/repository where you keep all your notes.
Also happens to sound quite a lot like Home. Funny, that.
## Bubble
Individual Foam document, written in Markdown.
Individual Foam note, written in Markdown.
## Foam blog
When you use Foam to publish content to an audience.
_Better ideas welcome._

View File

@@ -14,6 +14,6 @@ Features belong on the [[roadmap]].
For more things to do, check backlinks for Pages that annotate [[todo]].
[//begin]: # "Autogenerated link references for markdown compatibility"
[roadmap]: roadmap "Roadmap"
[todo]: todo "Todo"
[roadmap]: roadmap.md "Roadmap"
[todo]: todo.md "Todo"
[//end]: # "Autogenerated link references"

View File

@@ -15,6 +15,6 @@ Implementing this is on the [[roadmap]], but for the time being you can achieve
- Click any of the references to create a new note.
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

9
docs/user-settings.md Normal file
View File

@@ -0,0 +1,9 @@
# User Settings (stub)
**[[todo]] This [[roadmap]] item needs more specification work.**
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -5,6 +5,6 @@
If you're interested in working on it, please start a conversation in [GitHub issues](https://github.com/foambubble/foam/issues).
[//begin]: # "Autogenerated link references for markdown compatibility"
[todo]: todo "Todo"
[roadmap]: roadmap "Roadmap"
[todo]: todo.md "Todo"
[roadmap]: roadmap.md "Roadmap"
[//end]: # "Autogenerated link references"

View File

@@ -1,6 +1,6 @@
# Wiki Links
Foam enables you to Link pages together using `[[file-name]]` annotations.
Foam enables you to Link pages together using `[[file-name]]` annotations (i.e. `[[media-wiki]]` links).
- Both `[[file-name]]` and `[[file-name.md]]` work
- Type `[[` and start typing a file name for autocompletion.
@@ -16,72 +16,15 @@ Foam enables you to Link pages together using `[[file-name]]` annotations.
## Markdown compatibility
The [Foam for VSCode](https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode) extension automatically generates [markdown link reference definitions](https://spec.commonmark.org/0.29/#link-reference-definitions) at the bottom of the file to make wiki-links compatible with Markdown tools and parsers.
If you look at link references the bottom of any Foam workspace file that uses wiki-links, you should see an automatically generated list of references that look as follows:
```markdown
[wiki-links]: wiki-links "Wiki Links"
[other-page]: other-page "Other Page"
```
These exist to make `[[wiki-links]]` compatible with Markdown-consuming tools such as static site generators, VS Code plugins etc.
## Why don't `[[wiki-links]]` work on GitHub
> **TL;DR;** [workaround](#workaround) in the end.
If you click any of the wiki-links on GitHub web UI (such as the `README.md` of a project), you'll notice that the links break with a 404 error.
At the time of writing (June 28 2020) this is a known, but unsolved error. To understand why this is the case, we need to understand what we are trading off.
So, why don't they work on GitHub?
The three components of a [link reference definitions](https://spec.commonmark.org/0.29/#link-reference-definitions) are:
- **link label:** The link text to match in the surrounding markdown document. This matches the inner bracket of the double-bracketed `[[wiki-link]]` notation
- **link destination** The target of the matched link
- **"Link Title"** Optional title for link (The Foam template has a snippet of JavaScript to replace this on the website at runtime)
The issue is the middle **link destination** component. It's configured to point to the file name **without file extension**, i.e. "file-name" instead of "file-name.md". This is to make the GitHub Pages rendering work, because if we generated the links to `file-name.md`, the links would point to the raw markdown files instead of their generated HTML versions.
| Environment | `file-name` | `file-name.md` |
| ---------------- | ----------- | -------------- |
| **VS Code** | Works | Works |
| **GitHub pages** | Works | Breaks |
| **GitHub UI** | Breaks | Works |
So as you can see, we've prioritised GitHub Pages over GitHub Web U for the time being.
Ideally, we'd like a solution that works with both, but I haven't thought of it yet. Ideas include:
- **Writing a better static side generator that works with `file-name.md` link targets.** This is on the [[roadmap]], but for the time being GitHub Pages support is as must-have.
- **Adding a configuration setting to generate `file-name.md` link targets.** This is fine and I would accept this contribution to [foam-vscode](https://github.com/foambubble/foam/tree/master/packages/foam-vscode), but it doesn't solve the core problem.
An acceptable solution may include one where we don't generate link reference definitions at all, but if we do, ideally, we'd like to generate `file-name.md` links since those are more standards compatible for different markdown tools.
I'm sure there's an elegant-ish solution out there. Ideas and suggestions welcome that the [tracking issue on GitHub](https://github.com/foambubble/foam/issues/16)
### Workaround
For the time being, you can use relative `[markdown links](markdown-link.md)` syntax.
**Pros:**
- This will work on all platforms.
**Cons:**
- It will break the Markdown Notes [[backlinking]] support
- Less convenient to write
The [Foam for VSCode](https://marketplace.visualstudio.com/items?itemName=foam.foam-vscode) extension automatically generates [[link-reference-definitions]] at the bottom of the file to make wiki-links compatible with Markdown tools and parsers.
## Read more
- [[foam-file-format]]
- See [[link-reference-definition-improvements]] for further discussion on current problems and potential solutions.
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links "Wiki Links"
[roadmap]: roadmap "Roadmap"
[backlinking]: backlinking "Backlinking"
[foam-file-format]: foam-file-format "Foam File Format"
[link-reference-definitions]: link-reference-definitions.md "Link Reference Definitions"
[foam-file-format]: foam-file-format.md "Foam File Format"
[link-reference-definition-improvements]: link-reference-definition-improvements.md "Link Reference Definition Improvements"
[//end]: # "Autogenerated link references"

View File

@@ -1,69 +1,40 @@
# Workspace Janitor
# Janitor
## What is it?
To store your personal knowledge graph in markdown files instead of a database, we need some additional tooling to create and maintain relationships with notes.
To store your personal knowledge graph in markdown files instead of a database, we need some additional tooling to create and maintain:
**Foam Janitor** (inspired by Andy Matuschak's [note-link-janitor](https://github.com/andymatuschak/note-link-janitor)) helps you migrate existing notes to Foam, and maintain your Foam's health over time.
- Relationships between notes
- link references for [[wiki-links]]/markdown compatibility
- [[materialized-backlinks]]
- etc.
- Format and structure of each note (e.g. title)
- Renaming and refactoring files and directories
- Linting related functionality
- File names
- Note links
- Zettelkasten linking
- Visibility for orphaned notes
Currently, Foam's Janitor helps you to:
- Ensure your [[link-reference-definitions]] are up to date
- Ensure every document has a well-formatted title (required for Markdown Links, Markdown Notes, and Foam Gatsby Template compatibility)
This is necessary:
In the future, Janitor can help you with
- Updating [[materialized-backlinks]]
- Lint, format and structure notes
- Rename and move notes around while keeping their references up to date.
- When migrating to Foam
- To maintain your workspace health over long period of time
## Using Janitor from VS Code (Experimental)
## Problem
Execute the "Foam: Run Janitor" command from the command palette.
Currently, the VS Code extension is very naive, and only updates the currently active editor. This isn't sufficient, because:
![Foam Janitor demo](assets/images/foam-janitor-demo.gif)
- For e.g. [[materialized-backlinks]] to work, files need to update in the background.
- Separation of clean vs generated workspace for publishing?
- Support for standard markdown tools
- Output to a /build directory
- Would have to implement a custom previewer
- [[todo]] **Janne Ojanaho! Write a short proposal for this.**
- If VS Code extension bugs our or is not ran, the workspace can lead in an inconsistent state
- In collaboration scenarios, two people may change the same file, causing incomplete updates
- If someone pushes changes from outside VS Code (Obsidian, Git Journal, etc.) links aren't updated
## Using Janitor from command line (Experimental)
## Proposal
> ⚠️ Improvements to this documentation are welcome!
Implement a note janitor (working title, named after Andy Matuschak's [note-link-janitor](https://github.com/andymatuschak/note-link-janitor)), which ensures all files are correctly linked and updated, no matter how changes happen.
The Janitor can be installed from [NPM](https://www.npmjs.com/) and executed as a standalone CLI tool:
Janitor should be runnable:
```sh
> npm install -g foam-cli
> foam janitor path/to/workspace
```
- From VS Code
- Replaces the existing logic in extension.ts
- In theory, we could do this using the [VS Code Tasks](https://code.visualstudio.com/docs/editor/tasks), exposing it from foam-vscode with a [TaskProvider](https://code.visualstudio.com/api/extension-guides/task-provider)
- It's not clear to me whether modifying the file in the active VS Code buffer from a background task is problematic for e.g. focus/selection management. I think this is how e.g. Prettier works, but not sure if there's some special case for the active editor.
- VS Code provides its own workspace watching functionality. Not sure it would be beneficial to use this over just chokidar-style file watching in the background
- As a pre-push Git Hook (is this a good idea?) to ensure we send fully formed note graphs, even if you had to do some editing outside vs code
- As a GitHub Action (for incoming changes via PRs and other apps like GitJournal)
- Run the "build" and push back to master/gh-pages
- As a NPM script/dependency for any other purpose
You can run the Janitor as a git hook on every commit to ensure your workspace links are up to date. This can be especially helpful if you edit your markdown documents from other apps.
## Software architecture
- It's not really clear to me whether the workspace janitor should be its own package, or if the Janitor should just be the [[cli]] package, or the [[foam-core]] package.
- Ideally the janitor should be lightweight so installing it on CI is quick
- It would be cool if it didn't have many weird node-specific dependencies, maybe it could be even ran INSIDE a mobile application?
- We don't want to pollute foam-core, but janitor might actually get quite diverse in use cases.
Decoupling things like the core janitor API from the CLI API would help potentially with situations where we might want to have a separate file watcher strategy for CLI and active VS Code workspaces (see above).
You can also run the Janitor from a GitHub action to ensure that all changes coming to your workspace are up to date. This can be useful when editing your Foam notes from mobile (i.e. via [GitJournal](https://gitjournal.io)), or your Foam has multiple contributors and you want to ensure that all changes are correctly integrated.
[//begin]: # "Autogenerated link references for markdown compatibility"
[wiki-links]: wiki-links "Wiki Links"
[materialized-backlinks]: materialized-backlinks "Materialized Backlinks (stub)"
[cli]: cli "Command Line Interface"
[foam-core]: foam-core "Foam Core"
[todo]: todo "Todo"
[link-reference-definitions]: link-reference-definitions.md "Link Reference Definitions"
[materialized-backlinks]: materialized-backlinks.md "Materialized Backlinks (stub)"
[//end]: # "Autogenerated link references"

View File

@@ -4,5 +4,5 @@
],
"npmClient": "yarn",
"useWorkspaces": true,
"version": "0.2.0"
"version": "0.3.0"
}

View File

@@ -10,7 +10,15 @@
"packages/*"
],
"scripts": {
"watch": "yarn workspace foam-vscode watch"
"watch:vscode": "yarn workspace foam-vscode watch",
"build:core": "yarn workspace foam-core build",
"watch:core": "yarn workspace foam-core start",
"test:core": "yarn workspace foam-core test",
"clean": "lerna run clean",
"build": "lerna run build",
"test": "lerna run test",
"lint": "lerna run lint",
"watch": "lerna run watch --concurrency 20 --stream"
},
"devDependencies": {
"all-contributors-cli": "^6.16.1",

View File

@@ -19,7 +19,7 @@ $ npm install -g foam-cli
$ foam COMMAND
running command...
$ foam (-v|--version|version)
foam-cli/0.2.0 darwin-x64 node-v12.18.0
foam-cli/0.3.0 darwin-x64 node-v12.18.0
$ foam --help [COMMAND]
USAGE
$ foam COMMAND
@@ -28,28 +28,9 @@ USAGE
<!-- usagestop -->
# Commands
<!-- commands -->
* [`foam hello [FILE]`](#foam-hello-file)
* [`foam help [COMMAND]`](#foam-help-command)
## `foam hello [FILE]`
describe the command here
```
USAGE
$ foam hello [FILE]
OPTIONS
-f, --force
-h, --help show CLI help
-n, --name=name name to print
EXAMPLE
$ foam hello
hello world from ./src/hello.ts!
```
_See code: [src/commands/hello.ts](https://github.com/foambubble/foam/blob/v0.2.0/src/commands/hello.ts)_
* [`foam janitor [WORKSPACEPATH]`](#foam-janitor-workspacepath)
* [`foam migrate [WORKSPACEPATH]`](#foam-migrate-workspacepath)
## `foam help [COMMAND]`
@@ -67,6 +48,43 @@ OPTIONS
```
_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.1.0/src/commands/help.ts)_
## `foam janitor [WORKSPACEPATH]`
Updates link references and heading across all the markdown files in the given workspaces
```
USAGE
$ foam janitor [WORKSPACEPATH]
OPTIONS
-h, --help show CLI help
-w, --without-extensions generate link reference definitions without extensions (for legacy support)
EXAMPLE
$ foam-cli janitor path-to-foam-workspace
```
_See code: [src/commands/janitor.ts](https://github.com/foambubble/foam/blob/v0.3.0/src/commands/janitor.ts)_
## `foam migrate [WORKSPACEPATH]`
Updates file names, link references and heading across all the markdown files in the given workspaces
```
USAGE
$ foam migrate [WORKSPACEPATH]
OPTIONS
-h, --help show CLI help
-w, --without-extensions generate link reference definitions without extensions (for legacy support)
EXAMPLE
$ foam-cli migrate path-to-foam-workspace
Successfully generated link references and heading!
```
_See code: [src/commands/migrate.ts](https://github.com/foambubble/foam/blob/v0.3.0/src/commands/migrate.ts)_
<!-- commandsstop -->
## Development

View File

@@ -0,0 +1,6 @@
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};

View File

@@ -0,0 +1,188 @@
// For a detailed explanation regarding each configuration property, visit:
// https://jestjs.io/docs/en/configuration.html
module.exports = {
// All imported modules in your tests should be mocked automatically
// automock: false,
// Stop running tests after `n` failures
// bail: 0,
// The directory where Jest should store its cached dependency information
// cacheDirectory: "/private/var/folders/p6/5y5l8tbs1d32pq9b596lk48h0000gn/T/jest_dx",
// Automatically clear mock calls and instances between every test
clearMocks: true,
// Indicates whether the coverage information should be collected while executing the test
// collectCoverage: false,
// An array of glob patterns indicating a set of files for which coverage information should be collected
// collectCoverageFrom: undefined,
// The directory where Jest should output its coverage files
// coverageDirectory: undefined,
// An array of regexp pattern strings used to skip coverage collection
// coveragePathIgnorePatterns: [
// "/node_modules/"
// ],
// Indicates which provider should be used to instrument code for coverage
// coverageProvider: "babel",
// A list of reporter names that Jest uses when writing coverage reports
// coverageReporters: [
// "json",
// "text",
// "lcov",
// "clover"
// ],
// An object that configures minimum threshold enforcement for coverage results
// coverageThreshold: undefined,
// A path to a custom dependency extractor
// dependencyExtractor: undefined,
// Make calling deprecated APIs throw helpful error messages
// errorOnDeprecated: false,
// Force coverage collection from ignored files using an array of glob patterns
// forceCoverageMatch: [],
// A path to a module which exports an async function that is triggered once before all test suites
// globalSetup: undefined,
// A path to a module which exports an async function that is triggered once after all test suites
// globalTeardown: undefined,
// A set of global variables that need to be available in all test environments
// globals: {},
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
// maxWorkers: "50%",
// An array of directory names to be searched recursively up from the requiring module's location
// moduleDirectories: [
// "node_modules"
// ],
// An array of file extensions your modules use
// moduleFileExtensions: [
// "js",
// "json",
// "jsx",
// "ts",
// "tsx",
// "node"
// ],
// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
// moduleNameMapper: {},
// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
// modulePathIgnorePatterns: [],
// Activates notifications for test results
// notify: false,
// An enum that specifies notification mode. Requires { notify: true }
// notifyMode: "failure-change",
// A preset that is used as a base for Jest's configuration
// preset: undefined,
// Run tests from one or more projects
// projects: undefined,
// Use this configuration option to add custom reporters to Jest
// reporters: undefined,
// Automatically reset mock state between every test
// resetMocks: false,
// Reset the module registry before running each individual test
// resetModules: false,
// A path to a custom resolver
// resolver: undefined,
// Automatically restore mock state between every test
// restoreMocks: false,
// The root directory that Jest should scan for tests and modules within
// rootDir: undefined,
// A list of paths to directories that Jest should use to search for files in
// roots: [
// "<rootDir>"
// ],
// Allows you to use a custom runner instead of Jest's default test runner
// runner: "jest-runner",
// The paths to modules that run some code to configure or set up the testing environment before each test
// setupFiles: [],
// A list of paths to modules that run some code to configure or set up the testing framework before each test
// setupFilesAfterEnv: [],
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
// snapshotSerializers: [],
// The test environment that will be used for testing
testEnvironment: "node",
// Options that will be passed to the testEnvironment
// testEnvironmentOptions: {},
// Adds a location field to test results
// testLocationInResults: false,
// The glob patterns Jest uses to detect test files
// testMatch: [
// "**/__tests__/**/*.[jt]s?(x)",
// "**/?(*.)+(spec|test).[tj]s?(x)"
// ],
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
// testPathIgnorePatterns: [
// "/node_modules/"
// ],
// The regexp pattern or array of patterns that Jest uses to detect test files
// testRegex: [],
// This option allows the use of a custom results processor
// testResultsProcessor: undefined,
// This option allows use of a custom test runner
// testRunner: "jasmine2",
// This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
// testURL: "http://localhost",
// Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
// timers: "real",
// A map from regular expressions to paths to transformers
// transform: undefined,
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
// transformIgnorePatterns: [
// "/node_modules/"
// ],
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
// unmockedModulePathPatterns: undefined,
// Indicates whether each individual test should be reported during the run
// verbose: undefined,
// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
// watchPathIgnorePatterns: [],
// Whether to use watchman for file crawling
// watchman: true,
};

View File

@@ -1,7 +1,7 @@
{
"name": "foam-cli",
"description": "Foam CLI",
"version": "0.2.0",
"version": "0.3.0",
"author": "Jani Eväkallio @jevakallio",
"bin": {
"foam": "./bin/run"
@@ -11,17 +11,24 @@
"@oclif/command": "^1",
"@oclif/config": "^1",
"@oclif/plugin-help": "^3",
"foam-core": "^0.3.0",
"ora": "^4.0.4",
"tslib": "^1"
},
"devDependencies": {
"@babel/core": "^7.10.4",
"@babel/preset-env": "^7.10.4",
"@babel/preset-typescript": "^7.10.4",
"@oclif/dev-cli": "^1",
"@types/node": "^10",
"babel-jest": "^26.1.0",
"chai": "^4",
"eslint": "^5.13",
"eslint-config-oclif": "^3.1",
"eslint-config-oclif-typescript": "^0.1",
"foam-core": "^0.2.0",
"globby": "^10",
"jest": "^26.1.0",
"mock-fs": "^4.12.0",
"ts-node": "^8",
"typescript": "^3.3"
},
@@ -52,11 +59,13 @@
},
"repository": "foambubble/foam",
"scripts": {
"clean": "rimraf tmp",
"build": "tsc -b",
"test": "jest",
"lint": "echo Missing lint task in CLI package",
"cli": "./bin/run",
"postpack": "rm -f oclif.manifest.json",
"posttest": "eslint . --ext .ts --config .eslintrc",
"prepack": "rm -rf lib && tsc -b && oclif-dev manifest && oclif-dev readme",
"test": "nyc --extension .ts mocha --forbid-only \"test/**/*.test.ts\"",
"version": "oclif-dev readme && git add README.md"
},
"types": "lib/index.d.ts"

View File

@@ -1,44 +0,0 @@
import {Command, flags} from '@oclif/command'
import { NoteGraph } from 'foam-core';
export default class Hello extends Command {
static description = 'describe the command here'
static examples = [
`$ foam hello
hello world from ./src/hello.ts!
`,
]
static flags = {
help: flags.help({char: 'h'}),
// flag with a value (-n, --name=VALUE)
name: flags.string({char: 'n', description: 'name to print'}),
// flag with no value (-f, --force)
force: flags.boolean({char: 'f'}),
}
static args = [{name: 'file'}]
async run() {
const {args, flags} = this.parse(Hello)
const name = flags.name ?? 'world'
// const wm = new NoteGraph();
// wm.addNoteFromMarkdown('page-a.md', `
// # Page A
// ## Section
// - [[page-b]]
// - [[page-c]];
// `);
// wm.addNoteFromMarkdown('page-a.md', `
// # Page B
// This references [[page-a]]`);
// console.log(wm.getNoteWithLinks('page-a'));
}
}

View File

@@ -0,0 +1,79 @@
import { Command, flags } from '@oclif/command';
import * as ora from 'ora';
import {
initializeNoteGraph,
generateLinkReferences,
generateHeading,
applyTextEdit
} from 'foam-core';
import { writeFileToDisk } from '../utils/write-file-to-disk';
import { isValidDirectory } from '../utils';
export default class Janitor extends Command {
static description =
'Updates link references and heading across all the markdown files in the given workspaces';
static examples = [
`$ foam-cli janitor path-to-foam-workspace
`,
];
static flags = {
'without-extensions': flags.boolean({
char: 'w',
description: 'generate link reference definitions without extensions (for legacy support)'
}),
help: flags.help({ char: 'h' }),
};
static args = [{ name: 'workspacePath' }];
async run() {
const spinner = ora('Reading Files').start();
const { args, flags } = this.parse(Janitor);
const { workspacePath = './' } = args;
if (isValidDirectory(workspacePath)) {
const graph = await initializeNoteGraph(workspacePath);
const notes = graph.getNotes().filter(Boolean); // removes undefined notes
spinner.succeed();
spinner.text = `${notes.length} files found`;
spinner.succeed();
// exit early if no files found.
if (notes.length === 0) {
this.exit();
}
spinner.text = 'Generating link definitions';
const fileWritePromises = notes.map(note => {
// Get edits
const heading = generateHeading(note);
const definitions = generateLinkReferences(note, graph, !flags['without-extensions']);
// apply Edits
let file = note.source;
file = heading ? applyTextEdit(file, heading) : file;
file = definitions ? applyTextEdit(file, definitions) : file;
if (heading || definitions) {
return writeFileToDisk(note.path, file);
}
return Promise.resolve(null);
});
await Promise.all(fileWritePromises);
spinner.succeed();
spinner.succeed('Done!');
} else {
spinner.fail('Directory does not exist!');
}
}
}

View File

@@ -0,0 +1,106 @@
import { Command, flags } from '@oclif/command';
import * as ora from 'ora';
import {
initializeNoteGraph,
generateLinkReferences,
generateHeading,
getKebabCaseFileName,
applyTextEdit
} from 'foam-core';
import { writeFileToDisk } from '../utils/write-file-to-disk';
import { renameFile } from '../utils/rename-file';
import { isValidDirectory } from '../utils';
// @todo: Refactor 'migrate' and 'janitor' commands and avoid repeatition
export default class Migrate extends Command {
static description =
'Updates file names, link references and heading across all the markdown files in the given workspaces';
static examples = [
`$ foam-cli migrate path-to-foam-workspace
Successfully generated link references and heading!
`,
];
static flags = {
'without-extensions': flags.boolean({
char: 'w',
description: 'generate link reference definitions without extensions (for legacy support)'
}),
help: flags.help({ char: 'h' }),
};
static args = [{ name: 'workspacePath' }];
async run() {
const spinner = ora('Reading Files').start();
const { args, flags } = this.parse(Migrate);
const { workspacePath = './' } = args;
if (isValidDirectory(workspacePath)) {
let graph = await initializeNoteGraph(workspacePath);
let notes = graph.getNotes().filter(Boolean); // removes undefined notes
spinner.succeed();
spinner.text = `${notes.length} files found`;
spinner.succeed();
// exit early if no files found.
if (notes.length === 0) {
this.exit();
}
// Kebab case file names
const fileRename = notes.map(note => {
if (note.title != null) {
const kebabCasedFileName = getKebabCaseFileName(note.title);
if (kebabCasedFileName) {
return renameFile(note.path, kebabCasedFileName);
}
}
return Promise.resolve(null);
});
await Promise.all(fileRename);
spinner.text = 'Renaming files';
// Reinitialize the graph after renaming files
graph = await initializeNoteGraph(workspacePath);
notes = graph.getNotes().filter(Boolean); // remove undefined notes
spinner.succeed();
spinner.text = 'Generating link definitions';
const fileWritePromises = await Promise.all(
notes.map(note => {
// Get edits
const heading = generateHeading(note);
const definitions = generateLinkReferences(note, graph, !flags['without-extensions']);
// apply Edits
let file = note.source;
file = heading ? applyTextEdit(file, heading) : file;
file = definitions ? applyTextEdit(file, definitions) : file;
if (heading || definitions) {
return writeFileToDisk(note.path, file);
}
return Promise.resolve(null);
})
);
await Promise.all(fileWritePromises);
spinner.succeed();
spinner.succeed('Done!');
} else {
spinner.fail('Directory does not exist!');
}
}
}

View File

@@ -0,0 +1,4 @@
import * as fs from 'fs';
export const isValidDirectory = (path: string) =>
fs.existsSync(path) && fs.lstatSync(path).isDirectory();

View File

@@ -0,0 +1,15 @@
import * as fs from 'fs';
import * as path from 'path';
/**
*
* @param fileUri absolute path for the file that needs to renamed
* @param newFileName "new file name" without the extension
*/
export const renameFile = async (fileUri: string, newFileName: string) => {
const dirName = path.dirname(fileUri);
const extension = path.extname(fileUri);
const newFileUri = path.join(dirName, `${newFileName}${extension}`);
return fs.promises.rename(fileUri, newFileUri);
};

View File

@@ -0,0 +1,5 @@
import * as fs from 'fs';
export const writeFileToDisk = async (fileUri: string, data: string) => {
return fs.promises.writeFile(fileUri, data);
};

View File

@@ -0,0 +1,30 @@
import { renameFile } from '../src/utils/rename-file';
import * as fs from 'fs';
import mockFS from 'mock-fs';
const doesFileExist = path =>
fs.promises
.access(path)
.then(() => true)
.catch(() => false);
describe('renameFile', () => {
const fileUri = './test/oldFileName.md';
beforeAll(() => {
mockFS({ [fileUri]: '' });
});
afterAll(() => {
mockFS.restore();
});
it('should rename existing file', async () => {
expect(await doesFileExist(fileUri)).toBe(true);
renameFile(fileUri, 'new-file-name');
expect(await doesFileExist(fileUri)).toBe(false);
expect(await doesFileExist('./test/new-file-name.md')).toBe(true);
});
});

View File

@@ -0,0 +1,23 @@
import { writeFileToDisk } from '../src/utils/write-file-to-disk';
import * as fs from 'fs';
import mockFS from 'mock-fs';
describe('writeFileToDisk', () => {
const fileUri = './test-file.md';
beforeAll(() => {
mockFS({ [fileUri]: 'content in the existing file' });
});
afterAll(() => {
fs.unlinkSync(fileUri);
mockFS.restore();
});
it('should overrwrite existing file in the disk with the new data', async () => {
const expected = `content in the new file`;
await writeFileToDisk(fileUri, expected);
const actual = await fs.promises.readFile(fileUri, { encoding: 'utf8' });
expect(actual).toBe(expected);
});
});

View File

@@ -2,19 +2,21 @@
"name": "foam-core",
"author": "Jani Eväkallio",
"repository": "https://github.com/foambubble/foam",
"version": "0.2.0",
"version": "0.3.0",
"license": "MIT",
"files": [
"dist"
],
"scripts": {
"start": "tsdx watch",
"clean": "rimraf dist",
"build": "tsdx build",
"test": "tsdx test",
"lint": "tsdx lint",
"watch": "tsdx watch",
"prepare": "tsdx build"
},
"devDependencies": {
"@types/github-slugger": "^1.3.0",
"@types/graphlib": "^2.1.6",
"@types/lodash": "^4.14.157",
"husky": "^4.2.5",
@@ -23,10 +25,14 @@
"typescript": "^3.9.5"
},
"dependencies": {
"detect-newline": "^3.1.0",
"github-slugger": "^1.3.0",
"glob": "^7.1.6",
"graphlib": "^2.1.8",
"lodash": "^4.17.15",
"lodash": "^4.17.19",
"remark-parse": "^8.0.2",
"remark-wiki-link": "^0.0.4",
"title-case": "^3.0.2",
"unified": "^9.0.0",
"unist-util-visit": "^2.0.2"
},

Some files were not shown because too many files have changed in this diff Show More