JackGruber / joplin-plugin-note-overview

A note overview is created based on the search and the specified fields.
MIT License
77 stars 13 forks source link
desktop-app joplin joplin-plugin plugin

Joplin Plugin: Note overview

A note overview is created based on the defined search and the specified fields.

Installation

Automatic

Manual

Manual via file system

Manual via file via GUI

Usage

Create one or more notes with the following content:

<!-- note-overview-plugin
search: -tag:*
fields: updated_time, title
alias: updated_time AS Last edit, title AS Title
sort: title DESC
-->

Several of these blocks can be included in one note, also between text.

The note content is updated every x minutes (depending on your setting) or manualy by Tools > Create Note overview.

Limitations

⚠ Adding and editing the code block does not work in the Rich Text (WYSIWYG) editor!

⚠ When the note is edited in Rich Text (WYSIWYG) editor, the note code block is not preserved!

⚠ The manual refresh of the note ist not working in the Rich Text (WYSIWYG) editor, to update the note chnage to markdown editor, viewer or a other note and trigger the note overview update again.

With an automatic update, the currently displayed note opened in the markdown or Rich Text (WYSIWYG) editor is not updated to prevent data loss during editing!

Codeblock options

Options that can be specified in the in the code block using YAML syntax.

search

The search filter which will be used to create the overview. Documentation of search filters.

search: type:todo

search variable date

To search for date texts the variable {{moments:<FORMAT>}} is available, replace the <FORMAT> with the moments formatting

search: Logbook {{moments:YYYY}}

The date can be manipulated with modify:<MANIPULATION>, for <MANIPULATION> the syntax is <+ or -><amount><Key> and the following key. This syntax can be repeated comma separated.

Modification Key
years y
quarters Q
months M
weeks w
days d
hours h
minutes m
search: Logbook {{moments:DD-MM-YYYY modify:+1m,-1d}}

fields

Which fields should be output in the table.
All fields of the note are available, a complete list of all field can be found here.

In addition to the Joplin fields, there are the following virtual fields:

fields: todo_due, title, tags, notebook

sort

By which field the output should be sorted. It can be only sorted by one field and it's not possible to sort by a virtual field!

sort: todo_due ASC

limit

Displayes only the first x hits of the search. Without the limit option all results are displayed.

limit: 5

alias

This allows renaming the fields in the output.

Syntax: <field> AS <new field name>, multiple fields comma seperated.

alias: todo_due AS Due Date, notebook AS Folder

datetime

Customize datetime format for a single overview.

datetime:
  date: "YYYY-MM-DD"
  time: "HH:mm"

Complete list of format can be found here.

You can also set datetime to humanize format, to display a length of time. You can do that by adding humanize settings.

datetime:
  date: "YYYY-MM-DD"
  time: "HH:mm"
  humanize:
    enabled: [true | false]
    withSuffix: [true | false]

image

This allows you to control the image displayed in the image field.

image:
  nr: 1
  exactnr: true
  width: 200
  height: 200

excerpt

Displays an excerpt of the note body, the length of the excerpt can be configured using maxlength or you can use a RegEx to select data for the excerpt.

excerpt:
  maxlength: 200
  removenewline: [true | false]
  removemd: [true | false]
  regex: ^.*Joplin.*$
  regexflags: gmi

details

Add the overview into a details section that can open and close on demand. In the summary the variable {{count}} can be used, to display the number of matched notes.

details:
  open: [true | false]
  summary: {{count}} notes without a Tag

count

Customize note count field for a single overview.

count:
  enable: [true | false]
  position: [above | below]
  text: Note count: {{count}}

listview

Option to display the overview as list instead of a table. For the field text all fields can be used, all used Joplin fields must be specified in the fields!

fields: title
listview:
  text: "{{title}} in {{notebook}}"
  linebreak: [true | false]
  separator: " | "
  prefix: ==
  suffix: ==

link

This allows you to control the output displayed in the link field.

link:
  caption: "Jump to"
  html: true

status

Customize note status field for a single overview.

status:
  note: ""
  todo:
    open: ☐
    done: 🗹
    overdue: ⚠

Examples

ToDo Overview

<!-- note-overview-plugin
search: type:todo iscompleted:0
fields: todo_due, title, tags, notebook
sort: todo_due ASC
-->

Show all ToDos with status

<!-- note-overview-plugin
search: type:todo
fields: status, todo_due, title
sort: todo_completed ASC
-->

Open ToDos for the next 7 days and overdue ToDos

<!-- note-overview-plugin
search: -due:day+7 iscompleted:0
fields: todo_due, title
sort: todo_due ASC
-->

Exclude ToDos with no due date

<!-- note-overview-plugin
search: due:19700201 iscompleted:0
fields: todo_due, title
sort: todo_due ASC
-->

Show all ToDos with no due date

<!-- note-overview-plugin
search: -due:19700201 iscompleted:0
fields: todo_due, title
sort: todo_due ASC
-->

Rename fields

<!-- note-overview-plugin
search: "*"
fields: updated_time, title
alias: updated_time AS Modified
-->

Notes without a tag

<!-- note-overview-plugin
search: -tag:*
fields: updated_time, title
-->

Notes created last 7 days

<!-- note-overview-plugin
search: created:day-7
fields: title, updated_time
sort: title DESC
-->

Cooking recipes overview

<!-- note-overview-plugin
search: notebook:Cooking
fields: title, image, tags
image:
  width: 200
  height: 200
-->

Details option

<!-- note-overview-plugin
search: -tag:*
fields: title
details:
  open: false
  summary: All notes without a Tag
-->

Change count for single overview

<!-- note-overview-plugin
search: -tag:*
fields: title
count:
  enable: true
  position: above
  text: For the query {{count}} notes where found
-->

Change to listview (no linbreak)

<!-- note-overview-plugin
search: -tag:*
fields: title, updated_time
listview:
  text: "{{title}}"
  linebreak: false
  separator: " | "
  prefix: ==
  suffix: ==
-->

Combine notes dynamically

<!-- note-overview-plugin
search: notebook:"Welcome! (Desktop)"
fields: body
listview:
  text: "{{body}}"
  separator: ---
-->

Show all uncompleted checkboxes (ToDos)

<!-- note-overview-plugin
search: tag:todo
fields: title, excerpt
listview:
  text: |-

    {{title}}
    {{excerpt}}
excerpt:
  regex: ^.*- \[( )\].*$
  regexflags: gmi
  removenewline: false
  removemd: false
-->

Disable automatic note overview update for one note overview

When you set the update option to manual, then note overview is only updated when you select the note and trigger a update.

<!-- note-overview-plugin
search: tag:todo
fields: title, excerpt
update: manual
-->

Show the last 5 edited notes

<!-- note-overview-plugin
search: /*
fields: title, updated_time
sort: updated_time DESC
limit: 5
-->

Plugin options

Settings for the plugin, accessible at Tools > Options > Note overview.

Keyboard Shortcuts

Under Options > Keyboard Shortcuts you can assign a keyboard shortcut for the following commands:

FAQ

The note overview is not updated

See the limitations section.

Error: Nested mappings are not allowed in compact mappings

This error message occurs when a colon is used in the option value and an space character follows the colon. Just enclose the value of the option in quotes like alias: "title AS : Title :".

Error: Implicit map keys need to be followed by map values

There is a space missing between the <option>: and the value. The option should looks like <option>: <value>.

Error: All collection items must start at the same column

If an option value starts with a {, the text must be enclosed by quotes. For example change text: {{title}} match to text: "{{title}} match"

Error: e.slice is not a function

If an option value starts with a { and and ends with a } the text is interpreted as object. Enclose the value with quotes. For example change text: {{title}} to text: "{{title}}"

Develop

Build

To build your one version of the plugin, install node.js and run the following command npm run dist

Updating the plugin framework

To update the plugin framework, run npm run update

Changelog

See Changelog

Links