--- type: plug repo: https://github.com/silverbulletmd/silverbullet --- The directive plug is a built-in plug implementing various so-called βdirectiveβ that all take the form of `<!-- #directiveName ... -->` and close with `<!-- /directiveName -->`. Currently the following directives are supported: * `#query` to perform queries: [[π Directive/Query]] * `#include` to inline the content of another page verbatim: [[@include]] * `#use` to use the content of another as a [handlebars](https://handlebarsjs.com/) template: [[@use]] * `#eval` to evaluate an arbitrary JavaScript expression and inline the result: [[@eval]] ## Include $include The `#include` directive can be used to embed another page into your existing one. The syntax is as follows: <!-- #include [[page reference]] --> <!-- /include --> Whenever the directives are updated, the body of the directive will be replaced with the latest version of the reference page. ## Use $use The `#use` directive can be used to use a referenced page as a handbars template. Optionally, a JSON object can be passed as argument to the template: <!-- #use [[template/plug]] {"name": "π Directive", "repo": "https://google.com", "author": "Pete"} --> <!-- /use --> which renders as follows: <!-- #use [[template/plug]] {"name": "π Directive", "repo": "https://google.com", "author": "Pete"} --> * [[π Directive]] by **Pete** ([repo](https://google.com)) <!-- /use --> Note that a string is also a valid JSON value: * [ ] #test This is a test task So, a template can take, for instance a tag name as an argument: <!-- #use [[template/tagged-tasks]] "test" --> * [ ] [[π Directive@1537]] This is a test task #test <!-- /use --> ## Eval $eval The `#eval` directive can be used to evaluate arbitrary JavaScript expressions. Itβs also possible to invoke arbitrary plug functions this way. A simple example is multiplying numbers: <!-- #eval 10 * 10 --> 100 <!-- /eval --> However, you can also invoke arbitrary plug functions, e.g. the `titleUnfurlOptions` function in the `core` plug: <!-- #eval core.titleUnfurlOptions() --> |id |name | |------------|-------------| |title-unfurl|Extract title| <!-- /eval --> Optionally, you can use a `render` clause to render the result as a template, similar to [[π Directive/Query]]: <!-- #eval core.titleUnfurlOptions() render [[template/debug]] --> id: title-unfurl name: Extract title --- <!-- /eval -->