mirror of
https://github.com/oen/liquid-template.git
synced 2026-07-22 05:40:24 +00:00
refactor the date filter in order to use the original date filter when a `%` is present inside the format string
136 lines
No EOL
5.3 KiB
Markdown
136 lines
No EOL
5.3 KiB
Markdown
## Liquid Templates
|
|
|
|
This is a plugin for Obsidian (https://obsidian.md).
|
|
|
|
With this plugin, you can write your templates using [LiquidJS](https://liquidjs.com/) tags
|
|
|
|
## Disclaimer
|
|
|
|
This plugin is still under heavy development, so it's not optimized yet and has basic features.
|
|
|
|
## Autocomplete
|
|
|
|
There is an aucomplete feature that by default is triggered by `;;` but can be customized in the options
|
|
|
|

|
|
|
|
## Examples
|
|
|
|
This means that you can create a template made from smaller ones, for example (assuming that your templates folder is `templates`):
|
|
|
|
*templates/header.md*
|
|
```
|
|
# Header
|
|
|
|
Insert a common header
|
|
```
|
|
|
|
*templates/footer.md*
|
|
```
|
|
---
|
|
I'm just a footer
|
|
```
|
|
|
|
*templates/awesome_template.md*
|
|
```
|
|
{% include "header" %}
|
|
|
|
This is the body of my note: {{title}}
|
|
link to today note [[{{date}}]]
|
|
|
|
{% include "footer" %}
|
|
```
|
|
|
|
When you create a note with the "Awesome template" template, you'll end up with:
|
|
|
|
*A cool title.md*
|
|
```
|
|
# Header
|
|
|
|
Insert a common header
|
|
|
|
This is the body of my note: A cool title
|
|
link to today note [[2021-05-21]
|
|
|
|
---
|
|
I'm just a footer
|
|
```
|
|
|
|
But other than that, you can use all the basic [tags](https://liquidjs.com/tags/overview.html) and [filters](https://liquidjs.com/filters/overview.html)
|
|
|
|
## Custom Filters
|
|
|
|
For now I'll keep the documentation of the filters here, when they become more I'll move it somewhere more convenient
|
|
|
|
### `date`
|
|
|
|
The LiquidJS [built-in `date` filter](https://liquidjs.com/filters/date.html) has been replaced with a custom one.
|
|
For now, if there is a `%` character in the date format the old filter is used, otherwise the new one will take place.
|
|
|
|
The new `date` filter uses [date-fns](https://date-fns.org/) as library to handle dates, and the format strings to use are showed here: [date-fns formats](https://date-fns.org/v2.21.3/docs/format)
|
|
|
|
There are also some special words that can be used with this filter:
|
|
|
|
| word | example | effect |
|
|
| ---- | ------- | ------ |
|
|
| "now" | {{ "now" | date: "yyyy-MM-dd" }} | Use the date from `new Date` and formatted with the given format |
|
|
| "today" | {{ "today" | date: "yyyy-MM-dd" }} | same as `now` |
|
|
| "yesterday" | {{ "yesterday" | date: "yyyy-MM-dd" }} | use the [`subDays`](https://date-fns.org/v2.21.3/docs/subDays) function to subtract `1` from `Date.now()` and formatted with the given format |
|
|
| "tomorrow" | {{ "tomorrow" | date: "yyyy-MM-dd" }} | use the [`addDays`](https://date-fns.org/v2.21.3/docs/addDays) function to add `1` to `Date.now()` and formatted with the given format |
|
|
|
|
#### Default format
|
|
|
|
Now you can use the "Date Format" you defined inside the plugin settings in a easier way:
|
|
|
|
**Before**: `{{ "now" | date: default_date_format }}`
|
|
|
|
**Now**: `{{ "now" | date }}` the format you specified in the settings is now used as default
|
|
|
|
### `days_ago`
|
|
|
|
A simple filter that uses the [`subDays`](https://date-fns.org/v2.21.3/docs/subDays) to subtract days from the current date (`Date.now()`)
|
|
|
|
Keep in mind that this filter returns a date that needs to be formatted, so needs to be used with the `date` filter, like this:
|
|
|
|
`{{ 1 | days_ago | date }}` same as `{{ "yesterday" | date }}`
|
|
|
|
`{{ 2 | days_ago | date }}` return the date from two days ago
|
|
|
|
This can be used for a "Weekly Review" template, something like:
|
|
|
|
- [[{{ 7 | days_ago | date }}]]
|
|
- [[{{ 6 | days_ago | date }}]]
|
|
- [[{{ 5 | days_ago | date }}]]
|
|
- [[{{ 4 | days_ago | date }}]]
|
|
- [[{{ 3 | days_ago | date }}]]
|
|
- [[{{ 2 | days_ago | date }}]]
|
|
- [[{{ 1 | days_ago | date }}]]
|
|
|
|
|
|
### `days_after`
|
|
|
|
A simple filter that uses the [`addDays`](https://date-fns.org/v2.21.3/docs/addDays) to add days to the current date (`Date.now()`)
|
|
|
|
Keep in mind that this filter returns a date that needs to be formatted, so needs to be used with the `date` filter, like this:
|
|
|
|
`{{ 1 | days_after | date }}` same as `{{ "tomorrow" | date }}`
|
|
|
|
`{{ 2 | days_after | date }}` return the date from two days from now
|
|
|
|
## Template context
|
|
|
|
Other than the classic, `date`, `time` and `title` variable you also have:
|
|
|
|
| Name | Description |
|
|
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| default_date_format | The date format that you have specified in the plugin settings and can be used like this: <code>{{ "now" | date: default_date_format }}</code> |
|
|
| default_time_format | The time format that you have specified in the plugin settings and can be used like this: <code>{{ "now" | date: default_time_format }}</code> |
|
|
|
|
## Roadmap
|
|
|
|
For now, this plugin just includes the basic version of LiquidJS, but I want to extend it to allow:
|
|
|
|
- [ ] Add autocomplete to the template folder, excluded folder settings
|
|
- [ ] Implement a fuzzy finder for the autocomplete
|
|
- [ ] Implement/install a filter that allows you to write `{{ 1 | days_ago | date: default_date_format }}`
|
|
- [ ] Parse a selected template string, something like you select `{{ "dQw4w9WgXcQ" | youtube_iframe }}` run a command and end up with the parsed result, in this case, the youtube iframe. (the `youtube_iframe` tag does not exist yet) |