Skip to content

Commit

Permalink
0.5.4
Browse files Browse the repository at this point in the history
  • Loading branch information
zefhemel committed Nov 11, 2023
1 parent c92502b commit 51e3dd7
Show file tree
Hide file tree
Showing 14 changed files with 101 additions and 41 deletions.
6 changes: 6 additions & 0 deletions plugs/index/builtins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ export const builtins: Record<string, Record<string, string>> = {
page: "string",
pos: "number",
},
template: {
ref: "string",
page: "string",
pos: "number",
trigger: "string",
},
};

export async function loadBuiltinsIntoIndex() {
Expand Down
2 changes: 1 addition & 1 deletion version.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const version = "0.5.3";
export const version = "0.5.4";
5 changes: 4 additions & 1 deletion website/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ An attempt at documenting the changes/new features introduced in each
release.

---
## Next
## 0.5.4
* We’re on a journey to rethink [[Templates]]:
* It is now _recommended_ you tag all your templates with a `#template` tag, this will exclude them from [[Objects]] indexing and may in the future be used to do better template name completion (but not yet).
* New feature: Introducing [[Slash Templates]], allowing you to create custom [[Slash Commands]]. This deprecates snippets and page templates, because [[Slash Templates]] are awesomer.
* Many styling fixes and improvements to [[Live Queries]] and [[Live Templates]]
* Added a “source” button to [[Live Queries]] and [[Live Templates]] for better debugging (showing you the markdown code rendered by the template so you can more easily detect issues)
* [[Live Queries]]:
Expand Down
9 changes: 9 additions & 0 deletions website/Objects.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,15 @@ And can be queried as follows:
taskstate where page = "{{@page.name}}"
```

## template
$template
Indexes all pages tagged with `#template`. Technically this is not a built-in, but we’ll list it here anyway. See [[Templates]] for more information on templates.

```query
template
```


## item
$item
List items (both bullet point and numbered items) are indexed by default with the `item` tag, and additional tags can be added using [[Tags]].
Expand Down
2 changes: 2 additions & 0 deletions website/Slash Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@ The [[🔌 Editor]] plug provides a few helpful ones:
* `/snippet` see [[🔌 Template@snippets]]
* `/today` to insert today’s date
* `/tomorrow` to insert tomorrow’s date

You can create custom slash commands using [[Slash Templates]].
42 changes: 42 additions & 0 deletions website/Slash Templates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
Slash templates allow you to define custom [[Slash Commands]] that expand “snippet style” templates inline. They’re like [[🔌 Template$snippets]], but appear immediately as slash commands.

## Definition
You can define a slash template by creating a [[Templates|template page]] with a template tag and `trigger` attribute.

Example:

---
tags: template
trigger: meeting-notes
---
## Meeting notes for {{today}}!

|^|

## Use
You can _trigger_ the slash template by typing `/meeting-notes` in any page. That’s it.

## Frontmatter
A template’s [[Frontmatter]] is interpreted by SilverBullet’s template engine and removed when instantiated. However, to still include frontmatter after instantiation, you can use the `frontmatter` attribute.

Example:

---
tags: template
trigger: meeting-notes
frontmatter: |
date: {{today}}
---
## Meeting notes for {{today}}!

|^|

Which will expand into e.g.

---
date: 2023-11-11
---
## Meeting notes for 2023-11-11

.

35 changes: 22 additions & 13 deletions website/Templates.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
For various use cases, SilverBullet uses [Handlebars templates](https://handlebarsjs.com/).

Generally templates are stored in your space as regular pages, which allows for reuse. Some examples include [[template/task]] and [[template/page]].
As a convention, we often name templates with a `template/` prefix, although this is purely a convention.

[[Live Templates]] allow templates to be defined inline, for instance:
```template
template: |
Hello, {{name}}! Today is _{{today}}_
value:
name: Pete
```
Templates are _reusable_ pieces of markdown content, usually with placeholders that are replaced once instantiated.

Templates are used in a few different contexts:

1. To render [[Live Queries]]
2. To render [[Live Templates]]
3. To be included using [[Slash Templates]]
4. Some legacy use cases described in [[🔌 Template]]

## Creating templates
Templates are defined as any other page. It’s convenient, although not required, to use a `template/` prefix when naming templates. It is also _recommended_ to tag templates with a `#template` tag. Note that this tag will be removed when the template is instantiated.

Tagging a page with a `#template` tag (either in the [[Frontmatter]] or using a [[Tags]] at the very beginning of the page content) does two things:

1. It excludes the page from being indexed for [[Objects]], that is: any tasks, items, paragraphs etc. will not appear in your space’s object database. Which is usually what you want.
2. It allows you to register your templates to be used as [[Slash Templates]].

Templates consist of markdown, but can also include [Handlebars syntax](https://handlebarsjs.com/), such as `{{today}}`, and `{{#each .}}`.

In addition the special `|^|` marker can be used to specify the desired cursor position after the template is included (relevant mostly to [[Slash Templates]]).

### Template helpers
There are a number of built-in handlebars helpers you can use
There are a number of built-in handlebars helpers you can use:

- `{{today}}`: Today’s date in the usual YYYY-MM-DD format
- `{{tomorrow}}`: Tomorrow’s date in the usual YYY-MM-DD format
Expand Down
1 change: 1 addition & 0 deletions website/template/debug.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#template
{{#each .}}
{{@key}}: {{.}}
{{/each}}
Expand Down
1 change: 1 addition & 0 deletions website/template/people.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#template
| Name | Age |
|----------|----------|
{{#each .}}
Expand Down
1 change: 1 addition & 0 deletions website/template/plug.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
#template
* [[{{name}}]] {{#if author}}by **{{author}}** ([repo]({{repo}})){{/if}}
11 changes: 4 additions & 7 deletions website/template/tagged-tasks.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
---
$disableDirectives: true
---

<!-- #query task where tags = "{{.}}" and done = false render [[template/task]] -->

<!-- /query -->
#template
```query
task where tags = "{{.}}" and done = false render [[template/task]]
```
1 change: 1 addition & 0 deletions website/template/task.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
#template
* [{{state}}] [[{{ref}}]] {{name}}
1 change: 0 additions & 1 deletion website/template/today.md

This file was deleted.

25 changes: 7 additions & 18 deletions website/🔌 Template.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
The [[🔌 Template]] plug implements a few templating mechanisms.

### Page Templates
> **Warning** Deprecated
> Use [[Slash Templates]] instead
The {[Template: Instantiate Page]} command enables you to create a new page based on a page template.

Page templates, by default, are looked for in the `template/page/` prefix. So creating e.g. a `template/page/Meeting Notes` page will create a “Meeting Notes” template. You can override this prefix by setting the `pageTemplatePrefix` in `SETTINGS`.
Expand Down Expand Up @@ -38,6 +41,9 @@ Will prompt you to pick a page name (defaulting to “📕 “), and then create

### Snippets
$snippets
> **Warning** Deprecated
> Use [[Slash Templates]] instead
Snippets are similar to page templates, except you insert them into an existing page with the `/snippet` slash command. The default prefix is `snippet/` which is configurable via the `snippetPrefix` setting in `SETTINGS`.

Snippet templates do not support the `$name` page meta, because it doesn’t apply.
Expand Down Expand Up @@ -65,7 +71,7 @@ with a 🗓️ emoji by default, but this is configurable via the `weeklyNotePre

The {[Quick Note]} command will navigate to an empty page named with the current date and time prefixed with a 📥 emoji, but this is configurable via the `quickNotePrefix` in `SETTINGS`. The use case is to take a quick note outside of your current context.

## Slash commands
## Built-in slash commands
* `/front-matter`: Insert [[Frontmatter]]
* `/h1` - `/h4`: turn the current line into a header
* `/code`: insert a fenced code block
Expand All @@ -74,20 +80,3 @@ The {[Quick Note]} command will navigate to an empty page named with the current
* `/page-template`: insert a page template
* `/today`: insert today’s date
* `/tomorrow`: insert tomorrow’s date

### Template helpers
$vars
Currently supported (hardcoded in the code):

- `{{today}}`: Today’s date in the usual YYYY-MM-DD format
- `{{tomorrow}}`: Tomorrow’s date in the usual YYY-MM-DD format
- `{{yesterday}}`: Yesterday’s date in the usual YYY-MM-DD format
- `{{lastWeek}}`: Current date - 7 days
- `{{nextWeek}}`: Current date + 7 days
- `{{escapeRegexp "hello/there"}}` to escape a regexp, useful when injecting e.g. a page name into a query — think `name =~ /{{escapeRegexp @page.name}}/
`* `{{replaceRegexp string regexp replacement}}`: replace a regular expression in a string, example use: `{{replaceRegexp name "#[^#\d\s\[\]]+\w+" ""}}` to remove hashtags from a task name
- `{{json @page}}` translate any (object) value to JSON, mostly useful for debugging
- `{{substring "my string" 0 3}}` performs a substring operation on the first argument, which in this example would result in `my `
- `{{prefixLines "my string\nanother" " "}}` prefixes each line (except the first) with the given prefix.
- `{{niceDate @page.lastModified}}` translates any timestamp into a “nice” format (e.g. `2023-06-20`).
- The `@page` variable contains all page meta data (`name`, `lastModified`, `contentType`, as well as any custom [[Frontmatter]] attributes). You can address it like so: `{{@page.name}}`

0 comments on commit 51e3dd7

Please sign in to comment.