From 02da857384cbd8e0e1e938c2dd5d9f6d7625c194 Mon Sep 17 00:00:00 2001 From: JK Date: Sun, 18 Jan 2026 19:15:45 +0100 Subject: [PATCH] Docs updating --- docs/clever-referencing.html | 1 - docs/commands.html | 1 - docs/credits.html | 1 - docs/equations.html | 79 ------------------ ...e-equation-support-inside-blockquotes.html | 7 -- .../rendering-equations-inside-callouts.html | 1 - docs/index.html | 2 - docs/lib/scripts/generated.js | 1 - docs/lib/scripts/graph-render-worker.js | 1 - docs/lib/scripts/graph_view.js | 1 - docs/lib/scripts/graph_wasm.js | 1 - docs/lib/scripts/graph_wasm.wasm | Bin 23377 -> 0 bytes docs/lib/scripts/tinycolor.js | 1 - docs/lib/scripts/webpage.js | 1 - ...migration-from-math-booster-version-1.html | 1 - docs/proof-environment.html | 12 --- ...n-link-autocomplete-20231130210116619.webp | Bin 8664 -> 0 bytes .../auto-completion.html | 4 - .../custom-link-autocomplete.html | 1 - .../custom-link-completion.html | 1 - .../editor-auto-completion.html | 1 - ...obsidian's-built-in-link-autocomplete.html | 1 - ...g-obsidian's-built-in-link-completion.html | 1 - .../search-&-link-auto-completion.html | 1 - .../search-&-link-autocomplete.html | 1 - .../search-modal.html | 4 - ...n-link-autocomplete-20231130210116619.webp | Bin 8664 -> 0 bytes .../custom-link-autocomplete.html | 1 - ...obsidian's-built-in-link-autocomplete.html | 1 - .../search-&-link-autocomplete.html | 1 - .../search-modal.html | 4 - docs/settings/local-settings.html | 13 --- .../prefix-inference/5.6-sample-note.html | 4 - .../prefix-inference/a-sample-note.html | 4 - .../prefix-inference/prefix-inference.html | 1 - docs/settings/profiles.html | 11 --- docs/settings/settings.html | 1 - docs/theorem-callouts/prefix-inference.html | 1 - .../theorem-callouts/style-your-theorems.html | 1 - docs/theorem-callouts/styling.html | 1 - docs/theorem-callouts/theorem-callouts.html | 55 ------------ 41 files changed, 225 deletions(-) delete mode 100644 docs/clever-referencing.html delete mode 100644 docs/commands.html delete mode 100644 docs/credits.html delete mode 100644 docs/equations.html delete mode 100644 docs/extending-obsidian's-math-rendering-functionalities/multi-line-equation-support-inside-blockquotes.html delete mode 100644 docs/extending-obsidian's-math-rendering-functionalities/rendering-equations-inside-callouts.html delete mode 100644 docs/index.html delete mode 100644 docs/lib/scripts/generated.js delete mode 100644 docs/lib/scripts/graph-render-worker.js delete mode 100644 docs/lib/scripts/graph_view.js delete mode 100644 docs/lib/scripts/graph_wasm.js delete mode 100644 docs/lib/scripts/graph_wasm.wasm delete mode 100644 docs/lib/scripts/tinycolor.js delete mode 100644 docs/lib/scripts/webpage.js delete mode 100644 docs/migration-from-math-booster-version-1.html delete mode 100644 docs/proof-environment.html delete mode 100644 docs/search-&-link-auto-completion/assets/enhancing-obsidian's-built-in-link-autocomplete-20231130210116619.webp delete mode 100644 docs/search-&-link-auto-completion/auto-completion.html delete mode 100644 docs/search-&-link-auto-completion/custom-link-autocomplete.html delete mode 100644 docs/search-&-link-auto-completion/custom-link-completion.html delete mode 100644 docs/search-&-link-auto-completion/editor-auto-completion.html delete mode 100644 docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-autocomplete.html delete mode 100644 docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-completion.html delete mode 100644 docs/search-&-link-auto-completion/search-&-link-auto-completion.html delete mode 100644 docs/search-&-link-auto-completion/search-&-link-autocomplete.html delete mode 100644 docs/search-&-link-auto-completion/search-modal.html delete mode 100644 docs/search-&-link-autocomplete/assets/enhancing-obsidian's-built-in-link-autocomplete-20231130210116619.webp delete mode 100644 docs/search-&-link-autocomplete/custom-link-autocomplete.html delete mode 100644 docs/search-&-link-autocomplete/enhancing-obsidian's-built-in-link-autocomplete.html delete mode 100644 docs/search-&-link-autocomplete/search-&-link-autocomplete.html delete mode 100644 docs/search-&-link-autocomplete/search-modal.html delete mode 100644 docs/settings/local-settings.html delete mode 100644 docs/settings/prefix-inference/5.6-sample-note.html delete mode 100644 docs/settings/prefix-inference/a-sample-note.html delete mode 100644 docs/settings/prefix-inference/prefix-inference.html delete mode 100644 docs/settings/profiles.html delete mode 100644 docs/settings/settings.html delete mode 100644 docs/theorem-callouts/prefix-inference.html delete mode 100644 docs/theorem-callouts/style-your-theorems.html delete mode 100644 docs/theorem-callouts/styling.html delete mode 100644 docs/theorem-callouts/theorem-callouts.html diff --git a/docs/clever-referencing.html b/docs/clever-referencing.html deleted file mode 100644 index beba3c0..0000000 --- a/docs/clever-referencing.html +++ /dev/null @@ -1 +0,0 @@ -Clever referencing

Clever referencing
...

When you insert a internal link to theorem callouts or equation blocks,
the link will be displayed with the corresponding theorem's title or equation number.

See also:

Remark 1.

This feature only works for wikilinks ([[]]), and markdown links ([]()) are not supported. Even if you are turning off Use [[Wikilinks]] in the app settings, you can still insert wikilinks using this plugin's Search & link autocomplete feature.

Remark 2 (MathLinks API).

This functionality is implemented using the MathLinks API. I wrote a sample plugin to demonstrate its usage; it can be found here.

\ No newline at end of file diff --git a/docs/commands.html b/docs/commands.html deleted file mode 100644 index c7980bd..0000000 --- a/docs/commands.html +++ /dev/null @@ -1 +0,0 @@ -Commands

Commands
...

This plugin provides the following commands (sorted in the order that I find them useful subjectively) that are available from the Command palette, Slash commands, or your custom hotkeys.

\ No newline at end of file diff --git a/docs/credits.html b/docs/credits.html deleted file mode 100644 index 6553222..0000000 --- a/docs/credits.html +++ /dev/null @@ -1 +0,0 @@ -Credits

Credits
...

I could not have created this plugin without the following works by the community (sorted in alphabetical order). I appreciate their hard work and a lot of inspirations.

Community plugins
...

Datacore by Michael "Tres" Brenan (blacksmithgu)
...

This plugin's indexing mechanism is totally based on Datacore.

Dataview by Michael "Tres" Brenan (blacksmithgu)
...

In version 1, Math Booster had relied on Dataview to efficiently obtain backlinks for a specific equation.

In version 2, the backlink acquisition part was implemented by this plugin itself (but the code was basically taken from his new plugin Datacore). But now Dataview provides a significant enhancement in this plugin's Search modal.

Latex Suite by artisticat
...

The simple & beautiful indicator at the right of the dependency alert modal was taken from this plugin.

MathLinks by Zhaoshen Zhai
...

This plugin's cleveref support (i.e. displaying links with theorem titles or equation numbers) is powered by MathLinks and its API.

Public vault
...

MathWiki by Zhaoshen Zhai
...

The aesthetic preset style "MathWiki" was taken from here.

And of course...
...

A big thank you to the Obsidian team for prividing the foundation for the entire great ecosystem.

\ No newline at end of file diff --git a/docs/equations.html b/docs/equations.html deleted file mode 100644 index 3a3349c..0000000 --- a/docs/equations.html +++ /dev/null @@ -1,79 +0,0 @@ -Equations

Equations
...

With this plugin, you can get your equations automatically numbered and reference them by their equation numbers,[1] just as in .

By default, this plugin only numbers equations with backlinks (i.e. the ones that are referenced elsewhere). Alternatively, you can number all equations by turning off the option Equations - numbering > Number only referenced equations.

Remark 1 (Back-embeds).

An equation is not numbered when it has backlinks but all of them are embeds. This is intentional, but you can send a feature request if you want embeds to be counted as backlinks too.

Examples
...

Suppose you have these three equations:

Source:

$$
-f(x)
-$$
-
-$$
-g(x) \tag{$\ast$}
-$$
-
-$$
-h(x)
-$$
-

Rendered:

Equations-20231118084238497.webp

Now, insert a link to the last equation . Then, you will see the equation number (1) is xautomatically added to the equation and the inserted link is displayed with the corresponding equation number.

Source:

$$
-f(x)
-$$
-
-$$
-g(x) \tag{$\ast$}
-$$
-
-$$
-h(x)
-$$
-
-Link to $h(x)$: [[#^934f5c]]
-

Rendered:

Equation numbers-20231117195856635.webp

But we can do this without any plugins, right? All we have to do is just adding a display text manually, like so: [[#^934f5c|(1)]].

The problem of this naive approach is that the display text (1) will be never updated. What if we add a link to the first equation ?

...Well, this plugin does it right!

Source:

$$
-f(x)
-$$
-
-^05ce41
-
-$$
-g(x) \tag{$\ast$}
-$$
-
-$$
-h(x)
-$$
-
-^934f5c
-
-Link to $h(x)$: [[#^934f5c]] 
-Link to $f(x)$: [[#^05ce41]] 
-

Rendered:

Equation numbers-20231117195938005.webp

Note that linking to the second equation doesn't affect the numbers of other equations, because it has manually specified \tag{...} and this plugin respects it.

Source:

$$
-f(x)
-$$
-
-^05ce41
-
-$$
-g(x) \tag{$\ast$}
-$$
-
-^f16880
-
-$$
-h(x)
-$$
-
-^934f5c
-
-Link to $h(x)$: [[#^934f5c]] 
-Link to $f(x)$: [[#^05ce41]] 
-Link to $g(x)$: [[#^f16880]]
-

Rendered:

Equation numbers-20231117200012405.webp

Also observe that deleting these links remove the equation numbers.

Adding metadata with comments
...

Just like for theorem callouts, you can attach some metadata to each equation via comments (% ...) with a yaml-like key-value pair syntax (key: value).

The currently available keys are label and display. They are also available for theorems, and their functionalities are also the same as the theorem counterparts.

label
...

Has no effect for now. It might be used when exporting to Pandoc markdown or is supported in the future.

display
...

When set, all links to this equation are displayed with this text instead of its equation number (see also: Clever referencing).

Remarks
...

If you are turning off Use [[Wikilinks]] in the app settings, you will have to the live suggestion feature provided by this plugin instead of Obsidian's built-in [[ suggestion. This is because the built-in suggestion generates markdown links (i.e. []()) in this case, but they are not suitable for dynamically updating the displayed text.

Spacing
...

You must include at least one line break between $$ ... $$ if you want the equation to be numbered.
Otherwise, Obsidian will not recognize it as a math block.

In other words:

Good
-$$
-f(x)
-$$
-
-Good
-$$f(x)
-$$
-
-Good
-$$
-f(x)$$
-
-Bad
-$$f(x)$$
-

Also, make sure there is an empty line under the block ID of the equation. Again, this is needed due to how Obsidian works. You can enforce this using the Linter plugin's rule "Empty Line Around Math Blocks."

Equations in callouts/blocks
...

You cannot insert a link to equations in callouts or blockquotes.
This is an inherent limitation of Obsidian rather than this plugin.

PDF export
...

In version 2, equation numbers are expected to be successfully printed in PDF exports. Being a new feature, however, there might be some corner cases where it doesn't work perfectly.

If equation number printing is not successful, this plugin will show you a notification. In that case, you can run the command Convert equation numbers in the current note to static \tag{} to explicitly insert the equation numbers as static LaTeX tags (\tag{...}) as a quick fix.

Make sure you make a backup before running this command and undo the tag insertion after exporting finishes so that your equations can be dynamically numbered again.

The align Environment
...

You can choose whether multi-line equations in an align environment are numbered collectively as a group:

Equations-20231119011206241.webp

or individually.

Equations-20231119011124511.webp

Go to the Number line by line in align section in the plugin preferences to change the current setting.

When Number line by line in align is turned on, you can exclude a line from numbering by inserting \nonumber, just like in .


  1. It was one of Obsidian's long-standing problems.↩︎
\ No newline at end of file diff --git a/docs/extending-obsidian's-math-rendering-functionalities/multi-line-equation-support-inside-blockquotes.html b/docs/extending-obsidian's-math-rendering-functionalities/multi-line-equation-support-inside-blockquotes.html deleted file mode 100644 index 3adf54b..0000000 --- a/docs/extending-obsidian's-math-rendering-functionalities/multi-line-equation-support-inside-blockquotes.html +++ /dev/null @@ -1,7 +0,0 @@ -Multi-line equation support inside blockquotes

Multi-line equation support inside blockquotes
...

Important

This feature is planned to be removed from this plugin, and instead, it will be available as a separate plugin Better Math in Callouts & Blockquotes, featuring a bunch of improvements. Currently awaiting for approval by the Obsidian team.

Obsidian natively renders inside blockquotes, but it breaks when you use line breaks inside a math like this:

> $$
-> \begin{align}
-> a &= b \\
->   &= c
-> \end{align}
-> $$
-

With this plugin, you will no longer have this nightmare!

\ No newline at end of file diff --git a/docs/extending-obsidian's-math-rendering-functionalities/rendering-equations-inside-callouts.html b/docs/extending-obsidian's-math-rendering-functionalities/rendering-equations-inside-callouts.html deleted file mode 100644 index a98f18f..0000000 --- a/docs/extending-obsidian's-math-rendering-functionalities/rendering-equations-inside-callouts.html +++ /dev/null @@ -1 +0,0 @@ -Rendering equations inside callouts

Rendering equations inside callouts
...

Important

This feature is planned to be removed from this plugin, and instead, it will be available as a separate plugin Better Math in Callouts & Blockquotes, featuring a bunch of improvements. Currently awaiting for approval by the Obsidian team.

Obsidian doesn't render MathJax equations in callouts while editing them. This plugin gets this job done and makes your math note taking much more seamless.

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index ed11a14..0000000 --- a/docs/index.html +++ /dev/null @@ -1,2 +0,0 @@ -LaTeX-like Theorem & Equation Referencer Docs

LaTeX-like Theorem & Equation Referencer
...

LaTeX-like Theorem & Equation Referencer is an Obsidian plugin that provides a powerful indexing & referencing system for theorems & equations in your vault, bringing -like workflow into Obsidian.

Remark 1 (Math Booster).

This plugin had been called Math Booster until before 2.2.0, but has been renamed for better clarity and discoverability.

Remark 2 (Major version update).

Using this plugin since Math Booster version 1? See Migration from Math Booster version 1.

Installation
...

You can install this plugin via Obsidian's community plugin browser (see here for instructions).

Also, you can test the latest beta release using BRAT:

  1. Install BRAT and enable it.
  2. Go to Options. In the Beta Plugin List section, click on the Add Beta plugin button.
  3. Copy and paste RyotaUshio/obsidian-latex-theorem-equation-referencer in the pop-up prompt and click on Add Plugin.
  4. (Optional but highly recommended) Turn on Auto-update plugins at startup at the top of the page.
  5. Go to Community plugins > Installed plugins. You will find “LaTeX-like Theorem & Equation Referencer” in the list. Click on the toggle button to enable it.

Dependencies
...

Obsidian plugins
...

This plugin requires MathLinks version 0.5.3 or higher installed to work properly (Clever referencing).

In version 2, Dataview is no longer required. But I strongly recommend installing it because it enhances this plugin's search functionality significantly.

Fonts
...

You have to install CMU Serif (which this documentation uses) to get some of the preset styles for theorem callouts displayed properly.

Additionally, Noto Sans JP is required for render the preset styles properly in Japanese.

Contributing to this docs
...

This documentation is generated from an Obsidian vault located under the LaTeX-like Theorem & Equation Referencer Docs folder of this GitHub repository. To contribute:

  1. Fork the repository and clone the fork.
     git clone https://github.com/<YOUR NAME>/obsidian-latex-theorem-equation-referencer-docs.git
    -
  2. Open the LaTeX-like Theorem & Equation Referencer Docs folder under the cloned repository as an Obsidian vault (Obsidian Help).
  3. Make changes in Obsidian so that links are properly updated.
  4. Commit & push your changes to the fork and make a pull request to the original repository.
Remark 3 (Webpage HTML Export).

This documentation website is generated using the awesome Webpage HTML Export plugin.

Credits
...

This plugin has been inspired a lot by the great Obsidian community; see Credits.

Say thank you
...

If you find this plugin useful, please consider supporting my work by buying me a coffee!

Buy Me A Coffee

\ No newline at end of file diff --git a/docs/lib/scripts/generated.js b/docs/lib/scripts/generated.js deleted file mode 100644 index 5390361..0000000 --- a/docs/lib/scripts/generated.js +++ /dev/null @@ -1 +0,0 @@ -let nodes={paths:["extending-obsidian's-math-rendering-functionalities/multi-line-equation-support-inside-blockquotes.html","extending-obsidian's-math-rendering-functionalities/rendering-equations-inside-callouts.html","search-&-link-autocomplete/custom-link-autocomplete.html","search-&-link-autocomplete/enhancing-obsidian's-built-in-link-autocomplete.html","search-&-link-autocomplete/search-&-link-autocomplete.html","search-&-link-autocomplete/search-modal.html","settings/prefix-inference/5.6-sample-note.html","settings/prefix-inference/prefix-inference.html","settings/local-settings.html","settings/profiles.html","settings/settings.html","theorem-callouts/styling.html","theorem-callouts/theorem-callouts.html","clever-referencing.html","commands.html","credits.html","equations.html","index.html","migration-from-math-booster-version-1.html","proof-environment.html"],nodeCount:20,linkSources:[4,4,4,5,7,9,9,9,10,10,11,12,12,12,12,13,13,13,14,14,14,14,14,14,15,15,16,16,17,17,17,17,17,17,17,17,17,17,18,18,18,18,18,19,19],linkTargets:[3,2,5,2,6,8,12,19,8,9,9,13,9,16,11,12,16,4,5,19,8,12,18,16,5,11,12,13,18,12,16,13,4,3,2,5,19,15,12,3,2,5,16,12,9],labels:["Multi-line equation support inside blockquotes","Rendering equations inside callouts","Custom link autocomplete","Enhancing Obsidian's built-in link autocomplete","Search & link autocomplete","Search modal","5.6. Sample note","Prefix inference","Local settings","Profiles","Settings","Styling","Theorem callouts","Clever referencing","Commands","Credits","Equations","index","Migration from Math Booster version 1","Proof environment"],radii:[3,3,5.809917355371901,5.2623966942148765,6.2541322314049586,6.595041322314049,3.857438016528926,3.857438016528926,5.2623966942148765,6.832644628099173,4.6115702479338845,5.2623966942148765,7,6.595041322314049,6.595041322314049,5.2623966942148765,6.832644628099173,7,6.832644628099173,6.2541322314049586],linkCount:45},attractionForce=1,linkLength=10,repulsionForce=150,centralForce=3,edgePruning=100 \ No newline at end of file diff --git a/docs/lib/scripts/graph-render-worker.js b/docs/lib/scripts/graph-render-worker.js deleted file mode 100644 index 495e979..0000000 --- a/docs/lib/scripts/graph-render-worker.js +++ /dev/null @@ -1 +0,0 @@ -if("function"==typeof importScripts){let e,t,o;importScripts("https://d157l7jdn8e5sf.cloudfront.net/v7.2.0/webworker.js","./tinycolor.js"),addEventListener("message",onMessage),isDrawing=!1;let n=0,a=[],r=[],i=0,l=[],c=[],d=[],s=[],u=[],g={x:0,y:0},p=new Float32Array(0),h=0,f=0,y={background:2302755,link:11184810,node:13421772,outline:11184810,text:16777215,accent:4203434},S=-1,x=-1,v=-1,m=!1,w=[],b=-1,C=1,k=1;function toScreenSpace(e,t,o=!0){return o?{x:Math.floor(e*C+g.x),y:Math.floor(t*C+g.y)}:{x:e*C+g.x,y:t*C+g.y}}function vecToScreenSpace({x:e,y:t},o=!0){return toScreenSpace(e,t,o)}function toWorldspace(e,t){return{x:(e-g.x)/C,y:(t-g.y)/C}}function vecToWorldspace({x:e,y:t}){return toWorldspace(e,t)}function setCameraCenterWorldspace({x:e,y:t}){g.x=canvas.width/2-e*C,g.y=canvas.height/2-t*C}function getCameraCenterWorldspace(){return toWorldspace(canvas.width/2,canvas.height/2)}function getNodeScreenRadius(e){return e*k}function getNodeWorldspaceRadius(e){return e/k}function getPosition(e){return{x:p[2*e],y:p[2*e+1]}}function mixColors(e,t,o){return tinycolor.mix(tinycolor(e.toString(16)),tinycolor(t.toString(16)),o).toHexNumber()}function darkenColor(e,t){return tinycolor(e.toString(16)).darken(t).toHexNumber()}function lightenColor(e,t){return tinycolor(e.toString(16)).lighten(t).toHexNumber()}function invertColor(e,t){if(0===(e=e.toString(16)).indexOf("#")&&(e=e.slice(1)),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),6!==e.length)throw new Error("Invalid HEX color.");var o=parseInt(e.slice(0,2),16),n=parseInt(e.slice(2,4),16),a=parseInt(e.slice(4,6),16);return t?.299*o+.587*n+.114*a>186?"#000000":"#FFFFFF":(o=(255-o).toString(16),n=(255-n).toString(16),a=(255-a).toString(16),"#"+padZero(o)+padZero(n)+padZero(a))}function clamp(e,t,o){return Math.min(Math.max(e,t),o)}function lerp(e,t,o){return e+(t-e)*o}let N=0,T=.2,F=15,M=12,P=F/M;function showLabel(e,t,o=!1){let n=u[e];if(d[e]=t,!(t>.01))return void hideLabel(e);n.visible=!0,n.style.fontSize=o?F:M;let a=vecToScreenSpace(getPosition(e)),r=s[e]*(o?P:1)/2;n.x=a.x-r,n.y=a.y+getNodeScreenRadius(l[e])+9,n.alpha=t}function hideLabel(e){u[e].visible=!1}function draw(){o.clear();let e=[];m&&(w=[]),N=-1!=S||-1!=v?Math.min(1,N+T):Math.max(0,N-T),o.lineStyle(1,mixColors(y.link,y.background,50*N),.7);for(let t=0;t2){showLabel(e,lerp(0,(t-4)/10-1/k/6*.9,Math.max(1-N,.2)))}else hideLabel(e);if(S==e||x==e&&0!=N||-1!=S&&w.includes(e))continue;let n=vecToScreenSpace(getPosition(e));o.drawCircle(n.x,n.y,t)}o.endFill(),t=.7*N,o.lineStyle(1,mixColors(mixColors(y.link,y.accent,100*N),y.background,20),t);for(let t=0;tMath.max(e,r))),GraphAssembly.averageRadius=GraphAssembly.radii.reduce(((e,r)=>e+r))/GraphAssembly.radii.length,GraphAssembly.minRadius=GraphAssembly.radii.reduce(((e,r)=>Math.min(e,r))),r=this.loadState(),Module.HEAP32.set(new Int32Array(r.buffer),GraphAssembly.#e/r.BYTES_PER_ELEMENT),Module.HEAP32.set(new Int32Array(GraphAssembly.radii.buffer),GraphAssembly.#t/GraphAssembly.radii.BYTES_PER_ELEMENT),Module.HEAP32.set(new Int32Array(GraphAssembly.linkSources.buffer),GraphAssembly.#a/GraphAssembly.linkSources.BYTES_PER_ELEMENT),Module.HEAP32.set(new Int32Array(GraphAssembly.linkTargets.buffer),GraphAssembly.#s/GraphAssembly.linkTargets.BYTES_PER_ELEMENT),Module._Init(GraphAssembly.#e,GraphAssembly.#t,GraphAssembly.#a,GraphAssembly.#s,GraphAssembly.nodeCount,GraphAssembly.linkCount,batchFraction,dt,attractionForce,linkLength,repulsionForce,centralForce)}static get positions(){return Module.HEAP32.buffer.slice(GraphAssembly.#e,GraphAssembly.#e+GraphAssembly.#r)}static saveState(e){localStorage.setItem("positions",JSON.stringify(new Float32Array(GraphAssembly.positions).map((e=>Math.round(e)))))}static loadState(){let e=localStorage.getItem("positions"),r=null;if(e&&(r=new Float32Array(Object.values(JSON.parse(e)))),!r||!e||r.length!=2*GraphAssembly.nodeCount){r=new Float32Array(2*GraphAssembly.nodeCount);let e=GraphAssembly.averageRadius*Math.sqrt(GraphAssembly.nodeCount)*2;for(let t=0;t{try{var e=renderWorker.canvasSidebar.classList.contains("is-collapsed")}catch(e){return}running&&e?running=!1:running||e||(running=!0,renderWorker.autoResizeCanvas(),renderWorker.centerCamera())}),1e3))}function updateGraph(){if(running&&!renderWorker.canvasSidebar.classList.contains("is-collapsed")&&(GraphAssembly.update(mouseWorldPos,renderWorker.grabbedNode,renderWorker.cameraScale),GraphAssembly.hoveredNode!=renderWorker.hoveredNode&&(renderWorker.hoveredNode=GraphAssembly.hoveredNode,renderWorker.canvas.style.cursor=-1==GraphAssembly.hoveredNode?"default":"pointer"),renderWorker.draw(GraphAssembly.positions),averageFPS=.95*averageFPS+.05*pixiApp.ticker.FPS,averageFPS<.9*targetFPS&&batchFraction>minBatchFraction&&(batchFraction=Math.max(batchFraction-.5/targetFPS,minBatchFraction),GraphAssembly.batchFraction=batchFraction,GraphAssembly.repulsionForce=repulsionForce/batchFraction),0!=scrollVelocity)){renderWorker.getCameraCenterWorldspace();Math.abs(scrollVelocity)<.001&&(scrollVelocity=0),zoomGraphViewAroundPoint(mouseWorldPos,scrollVelocity),scrollVelocity*=.65}}function zoomGraphViewAroundPoint(e,r,t=.15,a=15){let s=renderWorker.getCameraCenterWorldspace();if(renderWorker.cameraScale=Math.max(Math.min(renderWorker.cameraScale+r*renderWorker.cameraScale,a),t),renderWorker.cameraScale!=t&&renderWorker.cameraScale!=a&&scrollVelocity>0&&null!=mouseWorldPos.x&&null!=mouseWorldPos.y){let t={x:e.x-s.x,y:e.y-s.y},a={x:s.x+t.x*r,y:s.y+t.y*r};renderWorker.setCameraCenterWorldspace(a)}else renderWorker.setCameraCenterWorldspace(s)}function scaleGraphViewAroundPoint(e,r,t=.15,a=15){let s=renderWorker.getCameraCenterWorldspace(),o=renderWorker.cameraScale;renderWorker.cameraScale=Math.max(Math.min(r*renderWorker.cameraScale,a),t);let i=(o-renderWorker.cameraScale)/o;if(renderWorker.cameraScale!=t&&renderWorker.cameraScale!=a&&0!=r){let r={x:e.x-s.x,y:e.y-s.y},t={x:s.x-r.x*i,y:s.y-r.y*i};renderWorker.setCameraCenterWorldspace(t)}else renderWorker.setCameraCenterWorldspace(s)}function initializeGraphEvents(){window.addEventListener("beforeunload",(()=>{running=!1,GraphAssembly.free()}));let e=!1,r=renderWorker.canvas.width;window.addEventListener("resize",(()=>{(e||renderWorker.canvas.width!=r)&&(renderWorker.autoResizeCanvas(),renderWorker.centerCamera())}));let t=document.querySelector(".graph-view-container");function a(e){e.composedPath().includes(t)||s()}function s(){let r=t.clientWidth,s=t.clientHeight;t.classList.add("scale-down"),t.animate({opacity:0},{duration:100,easing:"ease-in",fill:"forwards"}).addEventListener("finish",(function(){t.classList.toggle("expanded"),renderWorker.autoResizeCanvas(),renderWorker.centerCamera();let e=t.clientWidth,a=t.clientHeight;renderWorker.cameraScale*=(e/r+a/s)/2,t.classList.remove("scale-down"),t.classList.add("scale-up"),updateGraph(),t.animate({opacity:1},{duration:200,easing:"ease-out",fill:"forwards"}).addEventListener("finish",(function(){t.classList.remove("scale-up")}))})),e=!e,e?document.addEventListener("pointerdown",a):document.removeEventListener("pointerdown",a)}function o(e){var r=renderWorker.canvas.getBoundingClientRect();let t=getPointerPosition(e);return{x:t.x-r.left,y:t.y-r.top}}let i={x:0,y:0},n={x:0,y:0},d={x:0,y:0},l={x:0,y:0},c={x:0,y:0},h=0,m=!1,p=!1,u=!1,y=document.querySelector(".graph-view-container"),g=-1;y.addEventListener("pointerenter",(function(r){let t=0,a=!1;function b(e){n=o(e),mouseWorldPos=renderWorker.vecToWorldspace(n),l={x:n.x-d.x,y:n.y-d.y},d=n,-1!=renderWorker.grabbedNode&&(c={x:n.x-i.x,y:n.y-i.y}),m&&-1!=renderWorker.hoveredNode&&-1==renderWorker.grabbedNode&&renderWorker.hoveredNode!=renderWorker.grabbedNode&&(renderWorker.grabbedNode=renderWorker.hoveredNode),m&&-1==renderWorker.hoveredNode&&-1==renderWorker.grabbedNode||p?renderWorker.cameraOffset={x:renderWorker.cameraOffset.x+l.x,y:renderWorker.cameraOffset.y+l.y}:-1!=renderWorker.hoveredNode?renderWorker.canvas.style.cursor="pointer":renderWorker.canvas.style.cursor="default"}function v(e){if(1==e.touches?.length)return a&&(d=o(e),a=!1),void b(e);if(2==e.touches?.length){let r=getTouchPosition(e.touches[0]),s=getTouchPosition(e.touches[1]);n=o(e),l={x:n.x-d.x,y:n.y-d.y},d=n;let i=Math.sqrt(Math.pow(r.x-s.x,2)+Math.pow(r.y-s.y,2));a||(a=!0,t=i,l={x:0,y:0},mouseWorldPos={x:void 0,y:void 0},renderWorker.grabbedNode=-1,renderWorker.hoveredNode=-1);let c=(i-t)/t;scaleGraphViewAroundPoint(renderWorker.vecToWorldspace(n),1+c,.15,15),renderWorker.cameraOffset={x:renderWorker.cameraOffset.x+l.x,y:renderWorker.cameraOffset.y+l.y},t=i}}function k(r){document.removeEventListener("pointerup",k);let t=Date.now();setTimeout((()=>{m&&-1!=renderWorker.hoveredNode&&Math.abs(c.x)<=4&&Math.abs(c.y)<=4&&t-h<300&&async function(r){e?s():GraphAssembly.saveState(renderWorker);let t=nodes.paths[r];window.location.pathname.endsWith(nodes.paths[r])||await loadDocument(t)}(renderWorker.hoveredNode),m&&-1!=renderWorker.grabbedNode&&(renderWorker.grabbedNode=-1),0==r.button&&(m=!1),"touch"==r.pointerType&&g==r.pointerId&&(g=-1,m=!1),1==r.button&&(p=!1),u||(document.removeEventListener("mousemove",b),document.removeEventListener("touchmove",v))}),0)}function f(e){document.addEventListener("pointerup",k),mouseWorldPos=renderWorker.vecToWorldspace(n),c={x:0,y:0},0==e.button&&(m=!0),"touch"==e.pointerType&&-1==g&&(g=e.pointerId,m=!0),1==e.button&&(p=!0),i=n,h=Date.now(),m&&-1!=renderWorker.hoveredNode&&(renderWorker.grabbedNode=renderWorker.hoveredNode)}n=o(r),mouseWorldPos=renderWorker.vecToWorldspace(n),d=o(r),u=!0,document.addEventListener("mousemove",b),document.addEventListener("touchmove",v),y.addEventListener("pointerdown",f),y.addEventListener("pointerleave",(function e(r){setTimeout((()=>{u=!1,m||(document.removeEventListener("mousemove",b),document.removeEventListener("touchmove",v),mouseWorldPos={x:void 0,y:void 0}),y.removeEventListener("pointerdown",f),y.removeEventListener("pointerleave",e)}),1)}))})),document.querySelector(".graph-expand.graph-icon")?.addEventListener("click",(e=>{e.stopPropagation(),s()})),y.addEventListener("wheel",(function(e){let r=.09;e.deltaY>0?(scrollVelocity>=-.09&&(scrollVelocity=-.09),scrollVelocity*=1.4):(scrollVelocity<=r&&(scrollVelocity=r),scrollVelocity*=1.4)})),document.querySelector(".theme-toggle-input")?.addEventListener("change",(e=>{setTimeout((()=>renderWorker.resampleColors()),0)}))}Module.onRuntimeInitialized=initializeGraphView,setTimeout((()=>Module.onRuntimeInitialized()),300) \ No newline at end of file diff --git a/docs/lib/scripts/graph_wasm.js b/docs/lib/scripts/graph_wasm.js deleted file mode 100644 index 816023d..0000000 --- a/docs/lib/scripts/graph_wasm.js +++ /dev/null @@ -1 +0,0 @@ -var read_,readAsync,readBinary,setWindowTitle,Module=void 0!==Module?Module:{},moduleOverrides=Object.assign({},Module),arguments_=[],thisProgram="./this.program",quit_=(e,n)=>{throw n},ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,scriptDirectory="";function locateFile(e){return Module.locateFile?Module.locateFile(e,scriptDirectory):scriptDirectory+e}if(ENVIRONMENT_IS_NODE){var fs=require("fs"),nodePath=require("path");scriptDirectory=ENVIRONMENT_IS_WORKER?nodePath.dirname(scriptDirectory)+"/":__dirname+"/",read_=(e,n)=>(e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFileSync(e,n?void 0:"utf8")),readBinary=e=>{var n=read_(e,!0);return n.buffer||(n=new Uint8Array(n)),n},readAsync=(e,n,t)=>{e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFile(e,(function(e,r){e?t(e):n(r.buffer)}))},!Module.thisProgram&&process.argv.length>1&&(thisProgram=process.argv[1].replace(/\\/g,"/")),arguments_=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",(function(e){if(!("unwind"===e||e instanceof ExitStatus||e.context instanceof ExitStatus))throw e}));var nodeMajor=process.versions.node.split(".")[0];nodeMajor<15&&process.on("unhandledRejection",(function(e){throw e})),quit_=(e,n)=>{throw process.exitCode=e,n},Module.inspect=function(){return"[Emscripten Module object]"}}else(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:"undefined"!=typeof document&&document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf("blob:")?scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1):"",read_=e=>{var n=new XMLHttpRequest;return n.open("GET",e,!1),n.send(null),n.responseText},ENVIRONMENT_IS_WORKER&&(readBinary=e=>{var n=new XMLHttpRequest;return n.open("GET",e,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)}),readAsync=(e,n,t)=>{var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?n(r.response):t()},r.onerror=t,r.send(null)},setWindowTitle=e=>document.title=e);var wasmBinary,out=Module.print||console.log.bind(console),err=Module.printErr||console.warn.bind(console);Object.assign(Module,moduleOverrides),moduleOverrides=null,Module.arguments&&(arguments_=Module.arguments),Module.thisProgram&&(thisProgram=Module.thisProgram),Module.quit&&(quit_=Module.quit),Module.wasmBinary&&(wasmBinary=Module.wasmBinary);var wasmMemory,noExitRuntime=Module.noExitRuntime||!0;"object"!=typeof WebAssembly&&abort("no native wasm support detected");var EXITSTATUS,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,wasmTable,ABORT=!1;function updateMemoryViews(){var e=wasmMemory.buffer;Module.HEAP8=HEAP8=new Int8Array(e),Module.HEAP16=HEAP16=new Int16Array(e),Module.HEAP32=HEAP32=new Int32Array(e),Module.HEAPU8=HEAPU8=new Uint8Array(e),Module.HEAPU16=HEAPU16=new Uint16Array(e),Module.HEAPU32=HEAPU32=new Uint32Array(e),Module.HEAPF32=HEAPF32=new Float32Array(e),Module.HEAPF64=HEAPF64=new Float64Array(e)}var __ATPRERUN__=[],__ATINIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1;function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}var runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var n=dependenciesFulfilled;dependenciesFulfilled=null,n()}}function abort(e){throw Module.onAbort&&Module.onAbort(e),err(e="Aborted("+e+")"),ABORT=!0,EXITSTATUS=1,e+=". Build with -sASSERTIONS for more info.",new WebAssembly.RuntimeError(e)}var wasmBinaryFile,tempDouble,tempI64,dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(e){return e.startsWith(dataURIPrefix)}function isFileURI(e){return e.startsWith("file://")}function getBinary(e){try{if(e==wasmBinaryFile&&wasmBinary)return new Uint8Array(wasmBinary);if(readBinary)return readBinary(e);throw"both async and sync fetching of the wasm failed"}catch(e){abort(e)}}function getBinaryPromise(e){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if("function"==typeof fetch&&!isFileURI(e))return fetch(e,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+e+"'";return n.arrayBuffer()})).catch((function(){return getBinary(e)}));if(readAsync)return new Promise((function(n,t){readAsync(e,(function(e){n(new Uint8Array(e))}),t)}))}return Promise.resolve().then((function(){return getBinary(e)}))}function instantiateArrayBuffer(e,n,t){return getBinaryPromise(e).then((function(e){return WebAssembly.instantiate(e,n)})).then((function(e){return e})).then(t,(function(e){err("failed to asynchronously prepare wasm: "+e),abort(e)}))}function instantiateAsync(e,n,t,r){return e||"function"!=typeof WebAssembly.instantiateStreaming||isDataURI(n)||isFileURI(n)||ENVIRONMENT_IS_NODE||"function"!=typeof fetch?instantiateArrayBuffer(n,t,r):fetch(n,{credentials:"same-origin"}).then((function(e){return WebAssembly.instantiateStreaming(e,t).then(r,(function(e){return err("wasm streaming compile failed: "+e),err("falling back to ArrayBuffer instantiation"),instantiateArrayBuffer(n,t,r)}))}))}function createWasm(){var e={a:wasmImports};function n(e,n){var t=e.exports;return Module.asm=t,wasmMemory=Module.asm.f,updateMemoryViews(),wasmTable=Module.asm.r,addOnInit(Module.asm.g),removeRunDependency("wasm-instantiate"),t}if(addRunDependency("wasm-instantiate"),Module.instantiateWasm)try{return Module.instantiateWasm(e,n)}catch(e){return err("Module.instantiateWasm callback failed with error: "+e),!1}return instantiateAsync(wasmBinary,wasmBinaryFile,e,(function(e){n(e.instance)})),{}}isDataURI(wasmBinaryFile="graph_wasm.wasm")||(wasmBinaryFile=locateFile(wasmBinaryFile));var ASM_CONSTS={2304:e=>{console.log(UTF8ToString(e))}};function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function callRuntimeCallbacks(e){for(;e.length>0;)e.shift()(Module)}function getValue(e,n="i8"){switch(n.endsWith("*")&&(n="*"),n){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];case"*":return HEAPU32[e>>2];default:abort("invalid type for getValue: "+n)}}function setValue(e,n,t="i8"){switch(t.endsWith("*")&&(t="*"),t){case"i1":case"i8":HEAP8[e>>0]=n;break;case"i16":HEAP16[e>>1]=n;break;case"i32":HEAP32[e>>2]=n;break;case"i64":tempI64=[n>>>0,(tempDouble=n,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=n;break;case"double":HEAPF64[e>>3]=n;break;case"*":HEAPU32[e>>2]=n;break;default:abort("invalid type for setValue: "+t)}}function _abort(){abort("")}var readEmAsmArgsArray=[];function readEmAsmArgs(e,n){var t;for(readEmAsmArgsArray.length=0,n>>=2;t=HEAPU8[e++];)n+=105!=t&n,readEmAsmArgsArray.push(105==t?HEAP32[n]:HEAPF64[n++>>1]),++n;return readEmAsmArgsArray}function runEmAsmFunction(e,n,t){var r=readEmAsmArgs(n,t);return ASM_CONSTS[e].apply(null,r)}function _emscripten_asm_const_int(e,n,t){return runEmAsmFunction(e,n,t)}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(e,n,t){HEAPU8.copyWithin(e,n,n+t)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(e){var n=wasmMemory.buffer;try{return wasmMemory.grow(e-n.byteLength+65535>>>16),updateMemoryViews(),1}catch(e){}}function _emscripten_resize_heap(e){var n=HEAPU8.length;e>>>=0;var t=getHeapMax();if(e>t)return!1;for(var r=1;r<=4;r*=2){var o=n*(1+.2/r);if(o=Math.min(o,e+100663296),emscripten_realloc_buffer(Math.min(t,(a=Math.max(e,o))+((i=65536)-a%i)%i)))return!0}var a,i;return!1}function getCFunc(e){return Module["_"+e]}function writeArrayToMemory(e,n){HEAP8.set(e,n)}function lengthBytesUTF8(e){for(var n=0,t=0;t=55296&&r<=57343?(n+=4,++t):n+=3}return n}function stringToUTF8Array(e,n,t,r){if(!(r>0))return 0;for(var o=t,a=t+r-1,i=0;i=55296&&u<=57343)u=65536+((1023&u)<<10)|1023&e.charCodeAt(++i);if(u<=127){if(t>=a)break;n[t++]=u}else if(u<=2047){if(t+1>=a)break;n[t++]=192|u>>6,n[t++]=128|63&u}else if(u<=65535){if(t+2>=a)break;n[t++]=224|u>>12,n[t++]=128|u>>6&63,n[t++]=128|63&u}else{if(t+3>=a)break;n[t++]=240|u>>18,n[t++]=128|u>>12&63,n[t++]=128|u>>6&63,n[t++]=128|63&u}}return n[t]=0,t-o}function stringToUTF8(e,n,t){return stringToUTF8Array(e,HEAPU8,n,t)}function stringToUTF8OnStack(e){var n=lengthBytesUTF8(e)+1,t=stackAlloc(n);return stringToUTF8(e,t,n),t}var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(e,n,t){for(var r=n+t,o=n;e[o]&&!(o>=r);)++o;if(o-n>16&&e.buffer&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(n,o));for(var a="";n>10,56320|1023&s)}}else a+=String.fromCharCode((31&i)<<6|u)}else a+=String.fromCharCode(i)}return a}function UTF8ToString(e,n){return e?UTF8ArrayToString(HEAPU8,e,n):""}function ccall(e,n,t,r,o){var a={string:e=>{var n=0;return null!=e&&0!==e&&(n=stringToUTF8OnStack(e)),n},array:e=>{var n=stackAlloc(e.length);return writeArrayToMemory(e,n),n}};var i=getCFunc(e),u=[],l=0;if(r)for(var s=0;s"number"===e||"boolean"===e));return"string"!==n&&o&&!r?getCFunc(e):function(){return ccall(e,n,t,arguments,r)}}var calledRun,wasmImports={b:_abort,e:_emscripten_asm_const_int,d:_emscripten_date_now,c:_emscripten_memcpy_big,a:_emscripten_resize_heap},asm=createWasm(),___wasm_call_ctors=function(){return(___wasm_call_ctors=Module.asm.g).apply(null,arguments)},_SetBatchFractionSize=Module._SetBatchFractionSize=function(){return(_SetBatchFractionSize=Module._SetBatchFractionSize=Module.asm.h).apply(null,arguments)},_SetAttractionForce=Module._SetAttractionForce=function(){return(_SetAttractionForce=Module._SetAttractionForce=Module.asm.i).apply(null,arguments)},_SetLinkLength=Module._SetLinkLength=function(){return(_SetLinkLength=Module._SetLinkLength=Module.asm.j).apply(null,arguments)},_SetRepulsionForce=Module._SetRepulsionForce=function(){return(_SetRepulsionForce=Module._SetRepulsionForce=Module.asm.k).apply(null,arguments)},_SetCentralForce=Module._SetCentralForce=function(){return(_SetCentralForce=Module._SetCentralForce=Module.asm.l).apply(null,arguments)},_SetDt=Module._SetDt=function(){return(_SetDt=Module._SetDt=Module.asm.m).apply(null,arguments)},_Init=Module._Init=function(){return(_Init=Module._Init=Module.asm.n).apply(null,arguments)},_Update=Module._Update=function(){return(_Update=Module._Update=Module.asm.o).apply(null,arguments)},_SetPosition=Module._SetPosition=function(){return(_SetPosition=Module._SetPosition=Module.asm.p).apply(null,arguments)},_FreeMemory=Module._FreeMemory=function(){return(_FreeMemory=Module._FreeMemory=Module.asm.q).apply(null,arguments)},___errno_location=function(){return(___errno_location=Module.asm.__errno_location).apply(null,arguments)},_malloc=Module._malloc=function(){return(_malloc=Module._malloc=Module.asm.s).apply(null,arguments)},_free=Module._free=function(){return(_free=Module._free=Module.asm.t).apply(null,arguments)},stackSave=function(){return(stackSave=Module.asm.u).apply(null,arguments)},stackRestore=function(){return(stackRestore=Module.asm.v).apply(null,arguments)},stackAlloc=function(){return(stackAlloc=Module.asm.w).apply(null,arguments)},___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module.asm.__cxa_is_pointer_type).apply(null,arguments)};function run(){function e(){calledRun||(calledRun=!0,Module.calledRun=!0,ABORT||(initRuntime(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),postRun()))}runDependencies>0||(preRun(),runDependencies>0||(Module.setStatus?(Module.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Module.setStatus("")}),1),e()}),1)):e()))}if(Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue,dependenciesFulfilled=function e(){calledRun||run(),calledRun||(dependenciesFulfilled=e)},Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();run() \ No newline at end of file diff --git a/docs/lib/scripts/graph_wasm.wasm b/docs/lib/scripts/graph_wasm.wasm deleted file mode 100644 index e94bee22df7e2e277d34b3887496c68fdf3827ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23377 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 diff --git a/docs/lib/scripts/tinycolor.js b/docs/lib/scripts/tinycolor.js deleted file mode 100644 index 3c4a921..0000000 --- a/docs/lib/scripts/tinycolor.js +++ /dev/null @@ -1 +0,0 @@ -function w3color(t,e){return this instanceof w3color?"object"==typeof t?t:(this.attachValues(toColorObject(t)),void(e&&(e.style.backgroundColor=this.toRgbString()))):new w3color(t,e)}function toColorObject(t){var e,r,a,n,i,s,o,h,f,u,l,c=[],b=[],d=[];if(e=(t=w3trim(t.toLowerCase())).substr(0,1).toUpperCase(),r=t.substr(1),h=1,"R"!=e&&"Y"!=e&&"G"!=e&&"C"!=e&&"B"!=e&&"M"!=e&&"W"!=e||isNaN(r)||(6!=t.length||-1!=t.indexOf(","))&&(t="ncol("+t+")"),3==t.length||6==t.length||isNaN(t)||(t="ncol("+t+")"),t.indexOf(",")>0&&-1==t.indexOf("(")&&(t="ncol("+t+")"),"rgb"==t.substr(0,3)||"hsl"==t.substr(0,3)||"hwb"==t.substr(0,3)||"ncol"==t.substr(0,4)||"cmyk"==t.substr(0,4)){if("ncol"==t.substr(0,4)?(4==t.split(",").length&&-1==t.indexOf("ncola")&&(t=t.replace("ncol","ncola")),a="ncol",t=t.substr(4)):"cmyk"==t.substr(0,4)?(a="cmyk",t=t.substr(4)):(a=t.substr(0,3),t=t.substr(3)),n=3,s=!1,"a"==t.substr(0,1).toLowerCase()?(n=4,s=!0,t=t.substr(1)):"cmyk"==a&&(n=4,5==t.split(",").length&&(n=5,s=!0)),c=(t=(t=t.replace("(","")).replace(")","")).split(","),"rgb"==a){if(c.length!=n)return emptyObject();for(i=0;i-1&&(c[i]=c[i].replace("%",""),c[i]=Number(c[i]/100),i<3&&(c[i]=Math.round(255*c[i]))),isNaN(c[i]))return emptyObject();parseInt(c[i])>255&&(c[i]=255),i<3&&(c[i]=parseInt(c[i])),3==i&&Number(c[i])>1&&(c[i]=1)}l={r:c[0],g:c[1],b:c[2]},1==s&&(h=Number(c[3]))}if("hsl"==a||"hwb"==a||"ncol"==a){for(;c.length=360&&(c[0]=0),i=1;i-1){if(c[i]=c[i].replace("%",""),c[i]=Number(c[i]),isNaN(c[i]))return emptyObject();c[i]=c[i]/100}else c[i]=Number(c[i]);Number(c[i])>1&&(c[i]=1),0>Number(c[i])&&(c[i]=0)}"hsl"==a&&(l=hslToRgb(c[0],c[1],c[2]),f=Number(c[0]),u=Number(c[1])),"hwb"==a&&(l=hwbToRgb(c[0],c[1],c[2])),"ncol"==a&&(l=ncolToRgb(c[0],c[1],c[2])),1==s&&(h=Number(c[3]))}if("cmyk"==a){for(;c.length-1){if(c[i]=c[i].replace("%",""),c[i]=Number(c[i]),isNaN(c[i]))return emptyObject();c[i]=c[i]/100}else c[i]=Number(c[i]);Number(c[i])>1&&(c[i]=1),0>Number(c[i])&&(c[i]=0)}l=cmykToRgb(c[0],c[1],c[2],c[3]),1==s&&(h=Number(c[4]))}}else if("ncs"==t.substr(0,3))l=ncsToRgb(t);else{for(i=0,o=!1,b=getColorArr("names");i=6&&(r-=6),r<1?(e-t)*r+t:r<3?e:r<4?(e-t)*(4-r)+t:t}function hwbToRgb(t,e,r){var a,n,i,s=[];for(n=hslToRgb(t,1,.5),s[0]=n.r/255,s[1]=n.g/255,s[2]=n.b/255,(i=e+r)>1&&(e=Number((e/i).toFixed(2)),r=Number((r/i).toFixed(2))),a=0;a<3;a++)s[a]*=1-e-r,s[a]+=e,s[a]=Number(255*s[a]);return{r:s[0],g:s[1],b:s[2]}}function cmykToRgb(t,e,r,a){return{r:255-255*Math.min(1,t*(1-a)+a),g:255-255*Math.min(1,e*(1-a)+a),b:255-255*Math.min(1,r*(1-a)+a)}}function ncolToRgb(t,e,r){var a,n,i;if(i=t,isNaN(t.substr(0,1))){if(a=t.substr(0,1).toUpperCase(),""==(n=t.substr(1))&&(n=0),isNaN(n=Number(n)))return!1;"R"==a&&(i=0+.6*n),"Y"==a&&(i=60+.6*n),"G"==a&&(i=120+.6*n),"C"==a&&(i=180+.6*n),"B"==a&&(i=240+.6*n),"M"==a&&(i=300+.6*n),"W"==a&&(i=0,e=1-n/100,r=n/100)}return hwbToRgb(i,e,r)}function hueToNcol(t){for(;t>=360;)t-=360;return t<60?"R"+t/.6:t<120?"Y"+(t-60)/.6:t<180?"G"+(t-120)/.6:t<240?"C"+(t-180)/.6:t<300?"B"+(t-240)/.6:t<360?"M"+(t-300)/.6:void 0}function ncsToRgb(t){var e,r,a,n,i,s,o,h,f,u,l,c,b,d,g,m,p;return-1==(t=(t=(t=(t=(t=w3trim(t).toUpperCase()).replace("(","")).replace(")","")).replace("NCS","NCS ")).replace(/ /g," ")).indexOf("NCS")&&(t="NCS "+t),null!==(t=t.match(/^(?:NCS|NCS\sS)\s(\d{2})(\d{2})-(N|[A-Z])(\d{2})?([A-Z])?$/))&&(e=parseInt(t[1],10),r=parseInt(t[2],10),("N"==(a=t[3])||"Y"==a||"R"==a||"B"==a||"G"==a)&&(n=parseInt(t[4],10)||0,"N"!==a?(i=1.05*e-5.25,s=r,"Y"===a&&n<=60?o=1:"Y"===a&&n>60||"R"===a&&n<=80?o=(Math.sqrt(14884-Math.pow(h="Y"===a?n-60:n+40,2))-22)/100:"R"===a&&n>80||"B"===a?o=0:"G"===a&&(o=(Math.sqrt(33800-Math.pow(h=n-170,2))-70)/100),"Y"===a&&n<=80?f=0:"Y"===a&&n>80||"R"===a&&n<=60?f=(104-Math.sqrt(11236-Math.pow(h="Y"===a?n-80+20.5:n+20+20.5,2)))/100:"R"===a&&n>60||"B"===a&&n<=80?f=(Math.sqrt(1e4-Math.pow(h="R"===a?n-60-60:n+40-60,2))-10)/100:"B"===a&&n>80||"G"===a&&n<=40?f=(122-Math.sqrt(19881-Math.pow(h="B"===a?n-80-131:n+20-131,2)))/100:"G"===a&&n>40&&(f=0),"Y"===a?green1=(85-.85*n)/100:"R"===a&&n<=60?green1=0:"R"===a&&n>60?green1=(67.5-Math.sqrt(5776-Math.pow(h=n-60+35,2)))/100:"B"===a&&n<=60?green1=(6.5+Math.sqrt(7044.5-Math.pow(h=1*n-68.5,2)))/100:"B"===a&&n>60||"G"===a&&n<=60?green1=.9:"G"===a&&n>60&&(green1=(90-1/8*(h=n-60))/100),u=((h=(o+green1+f)/3)-o)*(100-s)/100+o,c=(h-f)*(100-s)/100+f,b=1/(u>(l=(h-green1)*(100-s)/100+green1)&&u>c?u:l>u&&l>c?l:c>u&&c>l?c:(u+l+c)/3),(g=parseInt(u*b*(100-i)/100*255,10))>255&&(g=255),(m=parseInt(l*b*(100-i)/100*255,10))>255&&(m=255),(p=parseInt(c*b*(100-i)/100*255,10))>255&&(p=255),g<0&&(g=0),m<0&&(m=0),p<0&&(p=0)):((d=parseInt(255*(1-e/100),10))>255&&(d=255),d<0&&(d=0),g=d,m=d,p=d),{r:g,g:m,b:p}))}function rgbToHsl(t,e,r){var a,n,i,s,o,h,f=[];for(i=0,f[0]=t/255,f[1]=e/255,f[2]=r/255,a=f[0],n=f[0],o=0;i=n&&(n=f[i+1],o=i+1);return 0==o&&(h=(f[1]-f[2])/(n-a)),1==o&&(h=2+(f[2]-f[0])/(n-a)),2==o&&(h=4+(f[0]-f[1])/(n-a)),isNaN(h)&&(h=0),(h*=60)<0&&(h+=360),s=(a+n)/2,{h:h,s:a==n?0:s<.5?(n-a)/(n+a):(n-a)/(2-n-a),l:s}}function rgbToHwb(t,e,r){return t/=255,e/=255,r/=255,{h:0==(chroma=(max=Math.max(t,e,r))-(min=Math.min(t,e,r)))?0:t==max?(e-r)/chroma%6*360:e==max?((r-t)/chroma+2)%6*360:((t-e)/chroma+4)%6*360,w:min,b:1-max}}function rgbToCmyk(t,e,r){var a,n,i,s;return t/=255,e/=255,r/=255,1==(s=1-(max=Math.max(t,e,r)))?(a=0,n=0,i=0):(a=(1-t-s)/(1-s),n=(1-e-s)/(1-s),i=(1-r-s)/(1-s)),{c:a,m:n,y:i,k:s}}function toHex(t){for(var e=t.toString(16);e.length<2;)e="0"+e;return e}function cl(t){console.log(t)}function w3trim(t){return t.replace(/^\s+|\s+$/g,"")}function isHex(t){return"0123456789ABCDEFabcdef".indexOf(t)>-1}function w3SetColorsByAttribute(){var t,e,r;for(e=0,t=document.getElementsByTagName("*");e1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=w(t,360),e=w(e,100),r=w(r,100),0===e)a=n=i=r;else{var o=r<.5?r*(1+e):r+e-r*e,h=2*r-o;a=s(h,o,t+1/3),n=s(h,o,t),i=s(h,o,t-1/3)}return{r:255*a,g:255*n,b:255*i}}(s.h,f,u),l=!0,c="hsl"),s.hasOwnProperty("a")&&(h=s.a)),h=_(h),{ok:l,format:s.format||c,r:Math.min(255,Math.max(o.r,0)),g:Math.min(255,Math.max(o.g,0)),b:Math.min(255,Math.max(o.b,0)),a:h});this._originalInput=n,this._r=G.r,this._g=G.g,this._b=G.b,this._a=G.a,this._roundA=Math.round(100*this._a)/100,this._format=i.format||G.format,this._gradientType=i.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=G.ok}function n(t,e,r){t=w(t,255),e=w(e,255),r=w(r,255);var a,n,i=Math.max(t,e,r),s=Math.min(t,e,r),o=(i+s)/2;if(i==s)a=n=0;else{var h=i-s;switch(n=o>.5?h/(2-i-s):h/(i+s),i){case t:a=(e-r)/h+(e>1)+720)%360;--e;)n.h=(n.h+i)%360,s.push(a(n));return s}function M(t,e){e=e||6;for(var r=a(t).toHsv(),n=r.h,i=r.s,s=r.v,o=[],h=1/e;e--;)o.push(a({h:n,s:i,v:s})),s=(s+h)%1;return o}a.prototype={isDark:function(){return 128>this.getBrightness()},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,e,r,a=this.toRgb();return t=a.r/255,e=a.g/255,r=a.b/255,.2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},setAlpha:function(t){return this._a=_(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=i(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=i(this._r,this._g,this._b),e=Math.round(360*t.h),r=Math.round(100*t.s),a=Math.round(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+a+"%)":"hsva("+e+", "+r+"%, "+a+"%, "+this._roundA+")"},toHsl:function(){var t=n(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=n(this._r,this._g,this._b),e=Math.round(360*t.h),r=Math.round(100*t.s),a=Math.round(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+a+"%)":"hsla("+e+", "+r+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return s(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHexNumber:function(){return Number("0x"+this.toHex())},toHex8:function(t){var e,r,a,n,i,s;return e=this._r,r=this._g,a=this._b,n=this._a,i=t,s=[A(Math.round(e).toString(16)),A(Math.round(r).toString(16)),A(Math.round(a).toString(16)),A(R(n))],i&&s[0].charAt(0)==s[0].charAt(1)&&s[1].charAt(0)==s[1].charAt(1)&&s[2].charAt(0)==s[2].charAt(1)&&s[3].charAt(0)==s[3].charAt(1)?s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0)+s[3].charAt(0):s.join("")},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(100*w(this._r,255))+"%",g:Math.round(100*w(this._g,255))+"%",b:Math.round(100*w(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+Math.round(100*w(this._r,255))+"%, "+Math.round(100*w(this._g,255))+"%, "+Math.round(100*w(this._b,255))+"%)":"rgba("+Math.round(100*w(this._r,255))+"%, "+Math.round(100*w(this._g,255))+"%, "+Math.round(100*w(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1||!v[s(this._r,this._g,this._b,!0)])},toFilter:function(t){var e="#"+o(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var i=a(t);r="#"+o(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,a=this._a<1&&this._a>=0;return e||!a||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),("hex"===t||"hex6"===t)&&(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return a(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(l,arguments)},brighten:function(){return this._applyModification(c,arguments)},darken:function(){return this._applyModification(b,arguments)},desaturate:function(){return this._applyModification(h,arguments)},saturate:function(){return this._applyModification(f,arguments)},greyscale:function(){return this._applyModification(u,arguments)},spin:function(){return this._applyModification(d,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(y,arguments)},complement:function(){return this._applyCombination(g,arguments)},monochromatic:function(){return this._applyCombination(M,arguments)},splitcomplement:function(){return this._applyCombination(p,arguments)},triad:function(){return this._applyCombination(m,[3])},tetrad:function(){return this._applyCombination(m,[4])}},a.fromRatio=function(e,r){if("object"==t(e)){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]="a"===i?e[i]:N(e[i]));e=n}return a(e,r)},a.equals=function(t,e){return!!t&&!!e&&a(t).toRgbString()==a(e).toRgbString()},a.random=function(){return a.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})},a.mix=function(t,e,r){r=0===r?0:r||50;var n=a(t).toRgb(),i=a(e).toRgb(),s=r/100;return a({r:(i.r-n.r)*s+n.r,g:(i.g-n.g)*s+n.g,b:(i.b-n.b)*s+n.b,a:(i.a-n.a)*s+n.a})},a.readability=function(t,e){var r=a(t),n=a(e);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)},a.isReadable=function(t,e,r){var n,i,s,o,h,f=a.readability(t,e);switch(i=!1,(s=r,o=((s=s||{level:"AA",size:"small"}).level||"AA").toUpperCase(),h=(s.size||"small").toLowerCase(),"AA"!==o&&"AAA"!==o&&(o="AA"),"small"!==h&&"large"!==h&&(h="small"),n={level:o,size:h}).level+n.size){case"AAsmall":case"AAAlarge":i=f>=4.5;break;case"AAlarge":i=f>=3;break;case"AAAsmall":i=f>=7}return i},a.mostReadable=function(t,e,r){var n,i,s,o,h=null,f=0;i=(r=r||{}).includeFallbackColors,s=r.level,o=r.size;for(var u=0;uf&&(f=n,h=a(e[u]));return a.isReadable(t,h,{level:s,size:o})||!i?h:(r.includeFallbackColors=!1,a.mostReadable(t,["#fff","#000"],r))};var k=a.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},v=a.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(k);function _(t){return(isNaN(t=parseFloat(t))||t<0||t>1)&&(t=1),t}function w(t,e){"string"==typeof(r=t)&&-1!=r.indexOf(".")&&1===parseFloat(r)&&(t="100%");var r,a,n="string"==typeof(a=t)&&-1!=a.indexOf("%");return t=Math.min(e,Math.max(0,parseFloat(t))),n&&(t=parseInt(t*e,10)/100),1e-6>Math.abs(t-e)?1:t%e/parseFloat(e)}function x(t){return Math.min(1,Math.max(0,t))}function S(t){return parseInt(t,16)}function A(t){return 1==t.length?"0"+t:""+t}function N(t){return t<=1&&(t=100*t+"%"),t}function R(t){return Math.round(255*parseFloat(t)).toString(16)}function C(t){return S(t)/255}var H,G,B,T=(G="[\\s|\\(]+("+(H="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+H+")[,|\\s]+("+H+")\\s*\\)?",B="[\\s|\\(]+("+H+")[,|\\s]+("+H+")[,|\\s]+("+H+")[,|\\s]+("+H+")\\s*\\)?",{CSS_UNIT:RegExp(H),rgb:RegExp("rgb"+G),rgba:RegExp("rgba"+B),hsl:RegExp("hsl"+G),hsla:RegExp("hsla"+B),hsv:RegExp("hsv"+G),hsva:RegExp("hsva"+B),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function F(t){return!!T.CSS_UNIT.exec(t)}return a})),w3color.prototype={toRgbString:function(){return"rgb("+this.red+", "+this.green+", "+this.blue+")"},toRgbaString:function(){return"rgba("+this.red+", "+this.green+", "+this.blue+", "+this.opacity+")"},toHwbString:function(){return"hwb("+this.hue+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%)"},toHwbStringDecimal:function(){return"hwb("+this.hue+", "+this.whiteness+", "+this.blackness+")"},toHwbaString:function(){return"hwba("+this.hue+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%, "+this.opacity+")"},toHslString:function(){return"hsl("+this.hue+", "+Math.round(100*this.sat)+"%, "+Math.round(100*this.lightness)+"%)"},toHslStringDecimal:function(){return"hsl("+this.hue+", "+this.sat+", "+this.lightness+")"},toHslaString:function(){return"hsla("+this.hue+", "+Math.round(100*this.sat)+"%, "+Math.round(100*this.lightness)+"%, "+this.opacity+")"},toCmykString:function(){return"cmyk("+Math.round(100*this.cyan)+"%, "+Math.round(100*this.magenta)+"%, "+Math.round(100*this.yellow)+"%, "+Math.round(100*this.black)+"%)"},toCmykStringDecimal:function(){return"cmyk("+this.cyan+", "+this.magenta+", "+this.yellow+", "+this.black+")"},toNcolString:function(){return this.ncol+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%"},toNcolStringDecimal:function(){return this.ncol+", "+this.whiteness+", "+this.blackness},toNcolaString:function(){return this.ncol+", "+Math.round(100*this.whiteness)+"%, "+Math.round(100*this.blackness)+"%, "+this.opacity},toName:function(){var t,e,r,a=getColorArr("hexs");for(i=0;i1&&(this.sat=1),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},desaturate:function(t){var e,r;e=t/100||.1,this.sat-=e,this.sat<0&&(this.sat=0),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},lighter:function(t){var e,r;e=t/100||.1,this.lightness+=e,this.lightness>1&&(this.lightness=1),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},darker:function(t){var e,r;e=t/100||.1,this.lightness-=e,this.lightness<0&&(this.lightness=0),r=colorObject(hslToRgb(this.hue,this.sat,this.lightness),this.opacity,this.hue,this.sat),this.attachValues(r)},attachValues:function(t){this.red=t.red,this.green=t.green,this.blue=t.blue,this.hue=t.hue,this.sat=t.sat,this.lightness=t.lightness,this.whiteness=t.whiteness,this.blackness=t.blackness,this.cyan=t.cyan,this.magenta=t.magenta,this.yellow=t.yellow,this.black=t.black,this.ncol=t.ncol,this.opacity=t.opacity,this.valid=t.valid}} \ No newline at end of file diff --git a/docs/lib/scripts/webpage.js b/docs/lib/scripts/webpage.js deleted file mode 100644 index 52366e3..0000000 --- a/docs/lib/scripts/webpage.js +++ /dev/null @@ -1 +0,0 @@ -let webpageContainer,documentContainer,viewContent,leftSidebar,rightSidebar,sidebarCollapseIcons,sidebarGutters,sidebars,sidebarTargetWidth,contentTargetWidth,canvasWrapper,canvas,canvasNodes,canvasBackground,canvasBackgroundPattern,focusedCanvasNode,loadingIcon,documentType,embedType,customType,deviceSize,lastScreenWidth,isOffline=!1,collapseIconUp=["m7 15 5 5 5-5","m7 9 5-5 5 5"],collapseIconDown=["m7 20 5-5 5 5","m7 4 5 5 5-5"],isTouchDevice=isTouchCapable(),fullyInitialized=!1;function initGlobalObjects(){loadingIcon=document.createElement("div"),loadingIcon.classList.add("loading-icon"),document.body.appendChild(loadingIcon),loadingIcon.innerHTML="
",webpageContainer=document.querySelector(".webpage-container"),documentContainer=document.querySelector(".document-container"),leftSidebar=document.querySelector(".sidebar-left"),rightSidebar=document.querySelector(".sidebar-right"),sidebarCollapseIcons=Array.from(document.querySelectorAll(".sidebar-collapse-icon")),sidebarGutters=[sidebarCollapseIcons[0].parentElement,sidebarCollapseIcons[1].parentElement],sidebars=[sidebarGutters[0].parentElement,sidebarGutters[1].parentElement]}async function initializePage(){focusedCanvasNode=null,canvasWrapper=document.querySelector(".canvas-wrapper")??canvasWrapper,canvas=document.querySelector(".canvas")??canvas;let e=document.querySelectorAll(".canvas-node");canvasNodes=e.length>0?e:canvasNodes,canvasBackground=document.querySelector(".canvas-background")??canvasBackground,canvasBackgroundPattern=document.querySelector(".canvas-background pattern")??canvasBackgroundPattern,viewContent=document.querySelector(".document-container > .view-content")??document.querySelector(".document-container > .markdown-preview-view")??viewContent,fullyInitialized||(initGlobalObjects(),initializeDocumentTypes(),setupSidebars(),setupThemeToggle(),sidebarTargetWidth=await getComputedPixelValue("--sidebar-width"),contentTargetWidth=.9*await getComputedPixelValue("--line-width"),window.addEventListener("resize",(()=>onResize())),onResize(),document.body.classList.toggle("post-load",!0),document.body.classList.toggle("loading",!1),setTimeout((function(){document.body.classList.toggle("loaded",!0),document.body.classList.toggle("post-load",!1)}),2e3),fullyInitialized=!0),"video"==embedType||"embed"==embedType||"excalidraw"==customType||"kanban"==customType||"canvas"==documentType?rightSidebar.collapsed||rightSidebar.temporaryCollapse():rightSidebar.temporarilyCollapsed&&rightSidebar.collapsed&&(rightSidebar.collapse(!1),rightSidebar.temporarilyCollapsed=!1)}function initializePageEvents(e){setupHeaders(e),setupTrees(e),setupCallouts(e),setupCheckboxes(e),setupCanvas(e),setupCodeblocks(e),setupLinks(e),setupScroll(e)}function initializeDocumentTypes(){document.querySelector(".document-container > .markdown-preview-view")?documentType="markdown":document.querySelector(".canvas-wrapper")?documentType="canvas":(documentType="custom",document.querySelector(".kanban-plugin")?customType="kanban":document.querySelector(".excalidraw-plugin")&&(customType="excalidraw"))}function initializeForFileProtocol(){let e=document.querySelector(".graph-view-placeholder");e&&(console.log("Running locally, skipping graph view initialization and hiding graph."),e.style.display="none",e.previousElementSibling.style.display="none")}function onOffline(e){e.preventDefault(),e.stopPropagation(),console.log("Offline"),isOffline=!0}function onEndResize(){document.body.classList.toggle("resizing",!1)}function onStartResize(){document.body.classList.toggle("resizing",!0)}window.onload=async function(){"file:"==window.location.protocol&&initializeForFileProtocol(),await initializePage(),initializePageEvents(document)},window.addEventListener("offline",onOffline),window.onpopstate=function(e){if(e.preventDefault(),e.stopPropagation(),document.body.classList.contains("floating-sidebars")&&(!leftSidebar.collapsed||!rightSidebar.collapsed))return leftSidebar.collapse(!0),void rightSidebar.collapse(!0);loadDocument(getURLPath(),!1)};let checkStillResizingTimeout,isResizing=!1;function onResize(e=!1){function t(e,t){let o=window.innerWidth;return o>e&&oe&&o=t)}isResizing||(onStartResize(),isResizing=!0),!function(e){let t=window.innerWidth;return t>e&&null==lastScreenWidth||t>e&&lastScreenWidthe}(1.5*sidebarTargetWidth)&&(deviceSize="phone",document.body.classList.toggle("floating-sidebars",!0),document.body.classList.toggle("is-large-screen",!1),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!0),sidebars.forEach((function(e){e.collapse(!0)})),sidebarGutters.forEach((function(e){e.collapse(!1)}))):(deviceSize="large-screen",document.body.classList.toggle("floating-sidebars",!1),document.body.classList.toggle("is-large-screen",!0),document.body.classList.toggle("is-small-screen",!1),document.body.classList.toggle("is-tablet",!1),document.body.classList.toggle("is-phone",!1),sidebars.forEach((function(e){e.collapse(!1)})),document.body.classList.contains("sidebars-always-collapsible")?sidebarGutters.forEach((function(e){e.collapse(!1)})):sidebarGutters.forEach((function(e){e.collapse(!0)}))),lastScreenWidth=window.innerWidth,null!=checkStillResizingTimeout&&clearTimeout(checkStillResizingTimeout);let o=window.innerWidth;checkStillResizingTimeout=setTimeout((function(){window.innerWidth==o&&(checkStillResizingTimeout=void 0,isResizing=!1,onEndResize())}),200)}function clamp(e,t,o){return Math.min(Math.max(e,t),o)}function getElBounds(e){let t=e.getBoundingClientRect(),o=t.x,n=t.y,i=t.width,s=t.height;return{x:o,y:n,width:i,height:s,minX:o,minY:n,maxX:o+i,maxY:n+s,centerX:t.x+t.width/2,centerY:t.y+t.height/2}}async function getComputedPixelValue(e){const t=document.createElement("div");document.body.appendChild(t),t.style.position="absolute",t.style.width=`var(${e})`,await new Promise((e=>setTimeout(e,10)));const o=window.getComputedStyle(t).width;return t.remove(),parseFloat(o)}function getPointerPosition(e){let t=e.touches?Array.from(e.touches):[];return{x:t.length>0?t.reduce(((e,t)=>e+t.clientX),0)/e.touches.length:e.clientX,y:t.length>0?t.reduce(((e,t)=>e+t.clientY),0)/e.touches.length:e.clientY}}function getTouchPosition(e){return{x:e.clientX,y:e.clientY}}function getAllChildrenRecursive(e){let t=[];for(let o=0;o0||navigator.msMaxTouchPoints>0}function downloadBlob(e,t="file.txt"){if(window.navigator&&window.navigator.msSaveOrOpenBlob)return window.navigator.msSaveOrOpenBlob(e);const o=window.URL.createObjectURL(e),n=document.createElement("a");n.href=o,n.download=t,n.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})),setTimeout((()=>{window.URL.revokeObjectURL(o),n.remove()}),100)}function extentionToTag(e){return["png","jpg","jpeg","svg","gif","bmp","ico"].includes(e)?"img":["mp4","mov","avi","webm","mpeg"].includes(e)?"video":["mp3","wav","ogg","aac"].includes(e)?"audio":["pdf"].includes(e)?"embed":void 0}let slideUp=(e,t=500)=>{e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,window.setTimeout((async()=>{e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}),t)},slideUpAll=(e,t=500)=>{e.forEach((async e=>{e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0})),window.setTimeout((async()=>{e.forEach((async e=>{e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}))}),t)},slideDown=(e,t=500)=>{e.style.removeProperty("display");let o=window.getComputedStyle(e).display;"none"===o&&(o="block"),e.style.display=o;let n=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.offsetHeight,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=n+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),window.setTimeout((async()=>{e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}),t)},slideDownAll=(e,t=500)=>{e.forEach((async e=>{e.style.removeProperty("display");let o=window.getComputedStyle(e).display;"none"===o&&(o="block"),e.style.display=o;let n=e.offsetHeight;e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.offsetHeight,e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=t+"ms",e.style.height=n+"px",e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom")})),window.setTimeout((async()=>{e.forEach((async e=>{e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")}))}),t)};var slideToggle=(e,t=500)=>"none"===window.getComputedStyle(e).display?slideDown(e,t):slideUp(e,t),slideToggleAll=(e,t=500)=>"none"===window.getComputedStyle(e[0]).display?slideDownAll(e,t):slideUpAll(e,t);let transferDocument=document.implementation.createHTMLDocument();async function loadDocument(e,t=!0,o=!0){let n=e.split("#"),i=n[0]??e;console.log("Loading document: "+i),loadingIcon.classList.toggle("shown",!0);let s,a=getViewBounds();if(loadingIcon.style.left=a.centerX-loadingIcon.offsetWidth/2+"px",loadingIcon.style.top=a.centerY-loadingIcon.offsetHeight/2+"px",documentContainer.classList.toggle("hide",!0),documentContainer.classList.toggle("show",!1),"phone"==deviceSize&&leftSidebar.collapse(!0),!isOffline){try{s=await fetch(i)}catch(e){return console.log("Cannot use fetch API (likely due to CORS), just loading the page normally."),void window.location.assign(i)}if(s.ok){setActiveDocument(i,o,t);let a=e.split(".").pop().split("?")[0].split("#")[0].toLowerCase().trim();if(documentType="none",embedType="none",customType="none","html"==a){let e=(await s.text()).replaceAll("","").replaceAll("","").replaceAll("","");transferDocument.write(e);let t=document.importNode(transferDocument.querySelector(".document-container"),!0);documentContainer.remove(),documentContainer=t,webpageContainer.insertBefore(documentContainer,webpageContainer.children[1]),document.querySelector(".outline-tree").innerHTML=transferDocument.querySelector(".outline-tree").innerHTML;let o=n.length>1?n[1]:null;o&&document.getElementById(o).scrollIntoView(),setupRootPath(transferDocument),initializeDocumentTypes(),setTimeout((function(){initializePageEvents(documentContainer),initializePageEvents(document.querySelector(".outline-tree"))}),0),document.title=transferDocument.title,transferDocument.close()}else if(documentType="embed",embedType=extentionToTag(a),null!=embedType){let t=document.createElement(embedType);t.controls=!0,t.src=e,t.style.maxWidth="100%","embed"==embedType&&(t.style.width="100%",t.style.height="100%"),t.style.objectFit="contain",viewContent.innerHTML="",viewContent.setAttribute("class","view-content embed"),viewContent.appendChild(t),document.querySelector(".outline-tree").innerHTML="",document.title=e.split("/").pop()}else{downloadBlob(await s.blob(),e.split("/").pop())}await initializePage()}else setTimeout((function(){viewContent.innerHTML="\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

Page Not Found

\n\t\t\t\t
\n\t\t\t
\n\t\t\t",document.querySelector(".outline-tree").innerHTML="",console.log("Page not found: "+getAbsoluteRootPath()+e);let t=getURLRootPath(getAbsoluteRootPath()+e);rootPath=t,document.querySelector("base").href=t,document.title="Page Not Found"}),1e3);return loadingIcon.classList.toggle("shown",!1),documentContainer.style.transitionDuration="",documentContainer.classList.toggle("hide",!1),documentContainer.classList.toggle("show",!0),transferDocument}setTimeout((function(){viewContent.innerHTML="\n
\n\t

You appear to be offline. Check your internet connection and then try reloading the page.

\n
",document.querySelector(".outline-tree").innerHTML="",console.log("Page offline: "+getAbsoluteRootPath()+e);let t=getURLRootPath(getAbsoluteRootPath()+e);rootPath=t,document.querySelector("base").href=t,document.title="Page Offline",documentContainer.classList.toggle("hide",!1),documentContainer.classList.toggle("show",!0),loadingIcon.classList.toggle("shown",!1)}),1e3)}function setActiveDocument(e,t=!0,o=!0){let n=e.split("#")[0]??e;document.querySelector(".tree-item.mod-active")?.classList.remove("mod-active");let i,s=Array.from(document.querySelectorAll(".tree-item > .tree-item-contents > .tree-item-link"));for(let t of s)if(t.getAttribute("href")==decodeURI(e)){let e=t.parentElement.parentElement;for(e.classList.add("mod-active"),i=e;e.hasAttribute("data-depth");)setTreeCollapsed(e,!1,!1),e=e.parentElement.parentElement;break}if(t&&i?.scrollIntoView({block:"center",inline:"nearest"}),"undefined"!=typeof nodes&&window.renderWorker){let e=nodes?.paths.findIndex((function(e){return e.endsWith(n)}))??-1;e>=0&&(window.renderWorker.activeNode=e)}o&&"file:"!=window.location.protocol&&window.history.pushState({path:n},"",n)}function setupRootPath(e){let t=e.querySelector("#root-path").getAttribute("root-path");document.querySelector("base").href=t,document.querySelector("#root-path").setAttribute("root-path",t),rootPath=t}function getAbsoluteRootPath(){return"undefined"==typeof rootPath&&setupRootPath(document),new URL(window.location.href+"/../"+rootPath).pathname}function getURLPath(e=window.location.pathname){let t=getAbsoluteRootPath();return e.substring(t.length)}function getURLRootPath(e=window.location.pathname){let t=getURLPath(e).split("/"),o="";for(let e=0;ee+t.offsetHeight),0);return void(e.markdownPreviewSizer.style.minHeight=o+"px")}let a=getComputedStyle(i).transitionDuration;a=a.endsWith("s")?parseFloat(a):a.endsWith("ms")?parseFloat(a)/1e3:0;let l=Math.min(a*Math.sqrt(s)/16,.5);i.style.transitionDuration=`${l}s`,i.style.height=t?"0px":s+"px",e.classList.toggle("is-animating",!0),e.classList.toggle("is-collapsed",t),setTimeout((function(){i.style.transitionDuration="",t||(i.style.height=""),e.classList.toggle("is-animating",!1);let o=Array.from(e.markdownPreviewSizer.children).reduce(((e,t)=>e+t.offsetHeight),0);e.markdownPreviewSizer.style.minHeight=o+"px"}),1e3*l)}function toggleTreeHeaderOpen(e,t=!0){e.collapse(!e.collapsed,t)}function hideHeader(e){if(e.forceShown)return;if(e.classList.contains("is-hidden")||e.classList.contains("is-collapsed"))return;if("none"==getComputedStyle(e).display)return;let t=e.offsetHeight;e.classList.toggle("is-hidden",!0),0!=t&&(e.style.height=t+"px"),e.style.visibility="hidden"}function showHeader(e,t=!0,o=!1,n=!1){if(n&&(e.forceShown=!0),t){let t=e.parentHeader;isHeadingWrapper(t)&&t.show(!0,!1,n)}if(o){e.querySelectorAll(".heading-wrapper").forEach((function(e){e.show(!1,!0,n)}))}e.classList.contains("is-hidden")&&!e.classList.contains("is-collapsed")&&(e.classList.toggle("is-hidden",!1),e.style.height="",e.style.visibility="")}function setupTrees(e){const t=Array.from(e.querySelectorAll(".tree-container.file-tree .tree-item")),o=Array.from(e.querySelectorAll(".tree-container.outline-tree .tree-item"));e.querySelectorAll(".tree-item-link > .collapse-icon").forEach((function(e){e.addEventListener("click",(function(t){return t.preventDefault(),t.stopPropagation(),toggleTreeCollapsed(e.parentElement.parentElement.parentElement),!1}))})),e.querySelectorAll(".collapse-tree-button").forEach((function(e){e.treeRoot=e.parentElement.parentElement,e.icon=e.firstChild,e.icon.innerHTML="";let n=e.treeRoot.classList.contains("file-tree")?t:o;e.setIcon=function(t){e.icon.children[0].setAttribute("d",t?collapseIconUp[0]:collapseIconDown[0]),e.icon.children[1].setAttribute("d",t?collapseIconUp[1]:collapseIconDown[1])},e.collapse=function(t){setTreeCollapsedAll(n,t),e.setIcon(t),e.collapsed=t},e.toggleCollapse=function(){e.collapse(!e.collapsed)},e.collapsed=0!=e.treeRoot.querySelectorAll(".tree-scroll-area + .tree-item.mod-collapsible.is-collapsed"),e.setIcon(e.collapsed),e.addEventListener("click",(function(t){return t.preventDefault(),t.stopPropagation(),e.toggleCollapse(),!1}))})),t.forEach((function(e){let t=e.querySelector(".tree-item-link");if(e.querySelector(".collapse-icon"))t?.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation();let t=this.parentElement?.parentElement;t&&toggleTreeCollapsed(t)}));else{let o=t.getAttribute("href").split(".").pop();if(!o.includes(" ")&&"html"!=o){let t=document.createElement("div");t.classList.add("nav-file-tag"),t.textContent=o.toUpperCase(),e.querySelector(".tree-item-contents").appendChild(t)}}}))}async function setTreeCollapsed(e,t,o=!0){if(!e||!e.classList.contains("mod-collapsible"))return;let n=e.querySelector(".tree-item-children");t?(e.classList.add("is-collapsed"),o?slideUp(n,100):n.style.display="none"):(e.classList.remove("is-collapsed"),o?slideDown(n,100):n.style.removeProperty("display"))}async function setTreeCollapsedAll(e,t,o=!0){let n=[];e.forEach((async e=>{if(!e||!e.classList.contains("mod-collapsible"))return;let o=e.querySelector(".tree-item-children");t?e.classList.add("is-collapsed"):e.classList.remove("is-collapsed"),n.push(o)})),t?o?slideUpAll(n,100):n.forEach((async e=>e.style.display="none")):o?slideDownAll(n,100):n.forEach((async e=>e.style.removeProperty("display")))}function toggleTreeCollapsed(e){e&&setTreeCollapsed(e,!e.classList.contains("is-collapsed"))}function toggleTreeCollapsedAll(e){e&&setTreeCollapsedAll(e,!e[0].classList.contains("is-collapsed"))}function setupCanvas(e){if("canvas"!=documentType||!e.querySelector(".canvas-wrapper"))return;e.querySelector(".canvas")?.setAttribute("style","translate: 0px 1px; scale: 1;");let t=getNodesBounds();function o(e){let t=e.touches??[];if(!(t.length>1)&&(1==e.button||0==e.button||t.length>0)){let o=getPointerPosition(e),n=!1,i=0,s=t.length,a=function(t){let a=t.touches??[],l=getPointerPosition(t);s!=a.length&&(o=l,s=a.length);let r=l.x-o.x,c=l.y-o.y,d=!1;if((1==e.button||1==a.length)&&focusedCanvasNode){let e=Math.abs(r)>Math.abs(1.5*c),t=Math.abs(c)>Math.abs(1.5*r),o=focusedCanvasNode.querySelector(".markdown-preview-sizer");if(o){let n=o.scrollHeight>o.parentElement.clientHeight+1,i=o.scrollWidth>o.parentElement.clientWidth+1;(e&&i||t&&n)&&(d=!0)}}if(d||(translateCanvas(r,c),o=l),2==a.length){let e=getPointerPosition(t,!1),o=getTouchPosition(t.touches[0]),s=getTouchPosition(t.touches[1]),a=Math.sqrt(Math.pow(o.x-s.x,2)+Math.pow(o.y-s.y,2));n||(n=!0,i=a),scaleCanvasAroundPoint(1+(a-i)/i,e.x,e.y),i=a}},l=function(e){document.body.removeEventListener("mousemove",a),document.body.removeEventListener("mouseup",l),document.body.removeEventListener("mouseenter",r),document.body.removeEventListener("touchmove",a),document.body.removeEventListener("touchend",l),document.body.removeEventListener("touchcancel",l)},r=function(e){1!=e.buttons&&4!=e.buttons&&l(e)};document.body.addEventListener("mousemove",a),document.body.addEventListener("mouseup",l),document.body.addEventListener("mouseenter",r),document.body.addEventListener("touchmove",a),document.body.addEventListener("touchend",l),document.body.addEventListener("touchcancel",l)}}setViewCenter(t.centerX,t.centerY),e.querySelectorAll(".canvas-node-container").forEach((function(e){var t=e.parentElement;function o(e){t.classList.toggle("is-focused"),null!=focusedCanvasNode&&focusedCanvasNode!=t&&(focusedCanvasNode.classList.remove("is-focused"),focusedCanvasNode.querySelector(".canvas-node-container").style.display=""),focusedCanvasNode=t,t.addEventListener("mouseleave",n),t.addEventListener("touchend",n)}function n(e){focusedCanvasNode&&(focusedCanvasNode.classList.remove("is-focused"),focusedCanvasNode=null),t.removeEventListener("mouseleave",n),t.removeEventListener("touchend",n)}e.addEventListener("mouseenter",o),e.addEventListener("touchstart",o)})),e.querySelectorAll(".canvas-node").forEach((function(e){e.addEventListener("dblclick",(function(t){fitViewToNode(e)}))})),e.querySelectorAll(".canvas-background").forEach((function(e){e.addEventListener("dblclick",(function(e){fitViewToCanvas()}))})),canvasWrapper.addEventListener("mousedown",o),canvasWrapper.addEventListener("touchstart",o);let n=0,i=0;canvasWrapper.addEventListener("mousemove",(function(e){let t=getPointerPosition(e);n=t.x,i=t.y}));let s=1,a=0,l=!1;canvasWrapper.addEventListener("wheel",(function(e){if(focusedCanvasNode){let e=focusedCanvasNode.querySelector(".markdown-preview-sizer");if(e&&e.scrollHeight>e.parentElement.clientHeight)return}if(e.preventDefault(),e.stopPropagation(),l){let t=1;t-=e.deltaY/700*t,t=clamp(t,.1,10);let o=getViewBounds();scaleCanvasAroundPoint(t,o.centerX,o.centerY)}else{let t=0==a;a-=e.deltaY/200;const o=.14*s;a=clamp(a,-o,o),t&&requestAnimationFrame(u)}}));let r=0,c=0,d=0;function u(e){if(r=e-c,0==c&&(r=30),c=e,d=.05*r+.95*d,d>50)return console.log("Scrolling too slow, turning on instant scroll"),void(l=!0);let t=s;s+=a*(r/1e3)*30,s=clamp(s,.1,10);getViewBounds();scaleCanvasAroundPoint(s/t,n,i),a*=.4,Math.abs(a)<.01?(a=0,c=0):requestAnimationFrame(u)}fitViewToCanvas()}function getViewBounds(){let e=viewContent.getBoundingClientRect(),t=e.x,o=e.y,n=e.x+e.width,i=e.y+e.height;return{x:t,y:o,width:n-t,height:i-o,minX:t,minY:o,maxX:n,maxY:i,centerX:e.x+e.width/2,centerY:e.y+e.height/2}}function getNodesBounds(){let e=1/0,t=1/0,o=-1/0,n=-1/0;canvasNodes.forEach((function(i){let s=i.getBoundingClientRect();s.xo&&(o=s.x+s.width),s.y+s.height>n&&(n=s.y+s.height)}));let i=o-e,s=n-t;return{x:e,y:t,width:i,height:s,minX:e,minY:t,maxX:o,maxY:n,centerX:e+i/2,centerY:t+s/2}}function getCanvasBounds(){let e=canvas.getBoundingClientRect(),t=e.x,o=e.y,n=e.width,i=e.height;return{x:t,y:o,width:n,height:i,minX:t,minY:o,maxX:t+n,maxY:o+i,centerX:e.x+e.width/2,centerY:e.y+e.height/2}}function scaleCanvasAroundPoint(e,t,o){let n=getCanvasBounds(),i=t-n.x,s=o-n.y,a=t-(n.x+i*e),l=o-(n.y+s*e);return scaleCanvas(e),translateCanvas(a,l),{x:a,y:l}}function scaleCanvas(e){let t=Math.max(e*canvas.style.scale,.001);canvas.style.scale=t,canvasWrapper.style.setProperty("--zoom-multiplier",1/Math.sqrt(t))}function translateCanvas(e,t){let o=canvas.style.translate,n=o.split(" "),i=n.length>0?parseFloat(o.split(" ")[0].trim()):0,s=n.length>1?parseFloat(o.split(" ")[1].trim()):i;canvas.style.translate=`${i+e}px ${s+t}px`}function setViewCenter(e,t){let o=getViewBounds();translateCanvas(o.centerX-e,o.centerY-t)}function getCanvasTranslation(){let e=canvas.style.translate,t=e.split(" "),o=t.length>0?parseFloat(e.split(" ")[0].trim()):0;return{x:o,y:t.length>1?parseFloat(e.split(" ")[1].trim()):o}}function scaleCanvasBackground(e){let t=e*canvasBackgroundPattern.getAttribute("width"),o=e*canvasBackgroundPattern.getAttribute("height");canvasBackgroundPattern.setAttribute("width",t),canvasBackgroundPattern.setAttribute("height",o)}function translateCanvasBackground(e,t){canvasBackgroundPattern.setAttribute("x",e+canvasBackgroundPattern.getAttribute("x")),canvasBackgroundPattern.setAttribute("y",t+canvasBackgroundPattern.getAttribute("y"))}function fitViewToNode(e){let t=getElBounds(e),o=getViewBounds(),n=getCanvasBounds(),i=.8*Math.min(o.width/t.width,o.height/t.height),s=n.x,a=n.y,l=s+(t.centerX-s)*i,r=a+(t.centerY-a)*i,c=o.centerX-l,d=o.centerY-r;t=getElBounds(e),canvas.style.transition="scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)",scaleCanvas(i),translateCanvas(c,d),setTimeout((function(){canvas.style.transition=""}),550)}function fitViewToCanvas(){let e=getNodesBounds(),t=getViewBounds(),o=getCanvasBounds(),n=.8*Math.min(t.width/e.width,t.height/e.height),i=o.x,s=o.y,a=i+(e.centerX-i)*n,l=s+(e.centerY-s)*n,r=t.centerX-a,c=t.centerY-l;canvas.style.transition="scale 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1), translate 0.5s cubic-bezier(0.5, -0.1, 0.5, 1.1)",scaleCanvas(n),translateCanvas(r,c),setTimeout((function(){canvas.style.transition=""}),550)}function setupCallouts(e){e.querySelectorAll(".callout.is-collapsible .callout-title").forEach((function(e){e.addEventListener("click",(function(){var t=this.parentElement;t.classList.toggle("is-collapsed"),e.querySelector(".callout-fold").classList.toggle("is-collapsed"),slideToggle(t.querySelector(".callout-content"),100)}))}))}function setupCheckboxes(e){e.querySelectorAll(".task-list-item-checkbox").forEach((function(e){e.addEventListener("click",(function(){var e=this.parentElement;e.classList.toggle("is-checked"),e.setAttribute("data-task",e.classList.contains("is-checked")?"x":" ")}))})),e.querySelectorAll('.plugin-tasks-list-item input[type="checkbox"]').forEach((function(e){e.checked=e.parentElement.classList.contains("is-checked")})),e.querySelectorAll(".kanban-plugin__item.is-complete").forEach((function(e){e.querySelector('input[type="checkbox"]').checked=!0}))}function setupCodeblocks(e){e.querySelectorAll(".copy-code-button").forEach((function(t){t.addEventListener("click",(function(){var t=this.parentElement.querySelector("code").textContent;navigator.clipboard.writeText(t),this.textContent="Copied!",setTimeout((function(){e.querySelectorAll(".copy-code-button").forEach((function(e){e.textContent="Copy"}))}),2e3)}))}))}function setupLinks(e){e.querySelectorAll(".internal-link, .footnote-link, .tree-item:not(.mod-tree-folder) > .tree-item-contents > .tree-item-link").forEach((function(e){e.addEventListener("click",(function(t){let o=e.getAttribute("href");if(t.preventDefault(),o)if(o.startsWith("#")){let e=document.getElementById(o.substring(1));e?(e.headingWrapper?.collapse(!1,!0,!0),setTimeout((function(){e.classList.contains(".heading")?e.headingWrapper?.scrollIntoView({behavior:"smooth",block:"start"}):e.scrollIntoView({behavior:"smooth",block:"start"}),"phone"==deviceSize&&rightSidebar.collapse(!0)}),0)):console.log("No element found with id: "+o.substring(1))}else loadDocument(o,!0,!e.classList.contains("tree-item-link"))}))}))}function setupSidebars(){sidebarCollapseIcons[0].otherIcon=sidebarCollapseIcons[1],sidebarCollapseIcons[1].otherIcon=sidebarCollapseIcons[0],sidebarCollapseIcons[0].gutter=sidebarGutters[0],sidebarCollapseIcons[1].gutter=sidebarGutters[1],sidebarCollapseIcons[0].sidebar=sidebars[0],sidebarCollapseIcons[1].sidebar=sidebars[1],sidebarGutters[0].otherGutter=sidebarGutters[1],sidebarGutters[1].otherGutter=sidebarGutters[0],sidebarGutters[0].collapseIcon=sidebarCollapseIcons[0],sidebarGutters[1].collapseIcon=sidebarCollapseIcons[1],sidebars[0].otherSidebar=sidebars[1],sidebars[1].otherSidebar=sidebars[0],sidebars[0].gutter=sidebarGutters[0],sidebars[1].gutter=sidebarGutters[1],sidebars.forEach((function(e){e.collapsed=e.classList.contains("is-collapsed"),e.collapse=function(t=!0){if(!t&&this.temporarilyCollapsed&&"large-screen"==deviceSize&&this.gutter.collapse(!0),!t&&document.body.classList.contains("floating-sidebars")){document.body.addEventListener("click",(function t(o){e.collapse(!0),document.body.removeEventListener("click",t)}))}"phone"==deviceSize&&(t||e.otherSidebar.fullCollapse(!0,!0),t&&e.gutter.otherGutter.collapse(!1,!0)),"tablet"==deviceSize&&(t||e.otherSidebar.collapse(!0)),this.classList.toggle("is-collapsed",t),this.collapsed=t},e.temporaryCollapse=function(e=!0){this.temporarilyCollapsed=!0,this.collapse(!0),this.gutter.collapse(!1),this.collapsed=e},e.fullCollapse=function(e=!0,t=!1){this.collapse(e),this.gutter.collapse(!0,t),this.collapsed=e},e.toggleCollapse=function(){this.collapse(!this.collapsed)},e.toggleFullCollapse=function(){this.fullCollapse(!this.collapsed)}})),sidebarGutters.forEach((function(e){e.collapsed=e.classList.contains("is-collapsed"),e.collapse=function(e,t=!1){!t&&document.body.classList.contains("sidebars-always-collapsible")||(this.classList.toggle("is-collapsed",e),this.collapsed=e)},e.toggleCollapse=function(){this.collapse(!this.collapsed)}})),sidebarCollapseIcons.forEach((function(e){e.addEventListener("click",(function(t){t.stopPropagation(),e.sidebar.toggleCollapse()}))})),document.querySelectorAll(".sidebar-container").forEach((function(e){e.addEventListener("click",(function(e){e.stopPropagation()}))}))}function getSidebarWidthProp(){return getComputedPixelValue("--sidebar-width")}function setupThemeToggle(){function e(e,t=!1){let o=document.querySelector(".theme-toggle-input");if(o.checked=e,t){var n=document.body.style.transition;document.body.style.transition="none"}!o.classList.contains("is-checked")&&e?o.classList.add("is-checked"):o.classList.contains("is-checked")&&!e&&o.classList.remove("is-checked"),e?(document.body.classList.contains("theme-dark")&&document.body.classList.remove("theme-dark"),document.body.classList.contains("theme-light")||document.body.classList.add("theme-light")):(document.body.classList.contains("theme-light")&&document.body.classList.remove("theme-light"),document.body.classList.contains("theme-dark")||document.body.classList.add("theme-dark")),t&&setTimeout((function(){document.body.style.transition=n}),100),localStorage.setItem("theme_toggle",e?"true":"false")}null!=localStorage.getItem("theme_toggle")&&e("true"==localStorage.getItem("theme_toggle")),document.body.classList.contains("theme-light")?e(!0):e(!1),document.querySelector(".theme-toggle-input")?.addEventListener("change",(t=>{console.log("Theme toggle changed to: "+!("true"==localStorage.getItem("theme_toggle"))),e(!("true"==localStorage.getItem("theme_toggle")))}))}function setupScroll(e){if("canvas"!=documentType)return;let t=Array.from(e.querySelectorAll(".markdown-preview-view")),o=0,n=0;t.forEach((async function(e){console.log("Setting up markdown view");let t=Array.from(e.querySelectorAll(".heading-wrapper"));e.updateVisibleWindowMarkdown=function(o=!0,i=!0){let s=e.getBoundingClientRect();n=Math.min(.1*s.height,150);let a=s.top-n,l=s.bottom+n;async function r(e){let t=e?.getBoundingClientRect();if(!t)return;let n=t.topl&&t.bottom>l;n&&o?e.hide():!n&&i&&e.show()}for(let e=0;en/3&&e.updateVisibleWindowMarkdown(!1,!0),o=e.scrollTop}))})),setInterval((async function(){t.length>0&&(t[o].updateVisibleWindowMarkdown(),o=(o+1)%t.length)}),200)}function setupExcalidraw(e){e.querySelectorAll(".excalidraw-svg svg").forEach((function(e){let t=e.querySelector("rect").getAttribute("fill")>"#7F7F7F";e.classList.add(t?"light":"dark")}))} \ No newline at end of file diff --git a/docs/migration-from-math-booster-version-1.html b/docs/migration-from-math-booster-version-1.html deleted file mode 100644 index 0774e5e..0000000 --- a/docs/migration-from-math-booster-version-1.html +++ /dev/null @@ -1 +0,0 @@ -Migration from Math Booster version 1

Migration from Math Booster version 1
...

Among many improvements that LaTeX-like Theorem & Equation Referencer/Math Booster version 2 introduces is a new format for theorem callouts, which is much cleaner, more intuitive, more keyboard-friendly, and less plugin-dependent than the old format used in version 1.

To fully enjoy version 2, run the command Migrate from version 1 to convert the old format to the new one.

Warning

MAKE SURE YOU HAVE A BACKUP OF YOUR VAULT BEFORE CONVERSION. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY ARISING FROM THIS OPERATION.

What's new in version 2
...

No longer supported
...

\ No newline at end of file diff --git a/docs/proof-environment.html b/docs/proof-environment.html deleted file mode 100644 index e26886a..0000000 --- a/docs/proof-environment.html +++ /dev/null @@ -1,12 +0,0 @@ -Proof environment

Proof environment
...

Remark 1.
  • This is still an experimental feature.
  • See also this post on the forum for more information.

This plugin supports -like proof environments.

`\begin{proof}`
-Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...
-`\end{proof}`
-

Proof.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...

Custom texts
...

Use the following syntax to print custom text.
Any inline markdown syntax can be used, but inline formulas will render with flickering in the live preview.

`\begin{proof}[Solution.]`
-Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...
-`\end{proof}`
-

Solution.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...

Linked proofs
...

Suppose that you have a theorem like below and it has a block ID 123456.

Theorem 2 (Title).

Content

The following will be printed as "Proof of Theorem 2 (Title)." by default.

`\begin{proof}`@[[#^123456]]
-Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...
-`\end{proof}`
-

Proof of Theorem callouts > Theorem 1 (Title).
Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...

Remark 3.

Alternatively, you can just write:

\begin{proof}[Proof of [[#^123456]].]
-

For now, I prefer this due to its potentially higher potability.
The strength of the @ syntax is it's rendered dynamically depending on the current profile.

Settings & styling
...

Don't like \begin{proof}? You can use any string you like instead. Go to the plugin setting tab, and modify the Beginning of proof and Ending of proof fields. Also take a look at the Proofs section in the Profiles editing menu.

Beginning/ending of proofs are given the following CSS classes.

  • .math-booster-begin-proof/.math-booster-end-proof
  • .math-booster-begin-proof-{tag}/.math-booster-end-proof-{tag}: {tag} is each tag associated with the profile applying to the note.

Latex Suite snippet
...

Using the following Latex Suite snippet, you can quickly insert a proof by just typing proof+Tab.

    { trigger: "proof", replacement: "`\\begin{proof}`\n$0\n`\\end{proof}`", options: "t" }
-
\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/assets/enhancing-obsidian's-built-in-link-autocomplete-20231130210116619.webp b/docs/search-&-link-auto-completion/assets/enhancing-obsidian's-built-in-link-autocomplete-20231130210116619.webp deleted file mode 100644 index 64319f0a18c5696c8dca1aaed828a873bfa02d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8664 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

Editor auto-completion
...

Math Booster lets you insert links to theorems or equations with ease.

In the editor, type \ref (by default; you can change it as you like in the plugin settings). Then, live suggestions for all theorem callouts & equation blocks in the entire vault show up.

Suggestions show up

Press Enter to insert a link to the selected item.

Suggestion inserted

Or you can jump to the selected item by pressing Cmd + Enter on Mac / Ctrl + Enter on Windows.

Jump to suggestion

Use \tref or \eqref (by default) instead of \ref to suggest only theorems or only equations.

Suggest only theorems

Suggest only equations

Available search keys
...

Theorem suggestion
...

KeyExample
Environment typedefinition, theorem, ...
Formatted titleDefinition 1.1 (Continuity)
Formatted label[1]def:continuity
Note pathfolder/note.md

Theorem suggestion example

Equation suggestion
...

KeyExample
Equation number (if any)(1)
LaTeX source code\lim_{n \to \infty} \int f_n \, d\mu = \int f \, d\mu
Note pathfolder/note.md

Equation suggestion example

Remark
...

This feature inserts wikilinks (i.e. [[]]) even if you are turning off Use \[\[Wikilinks\]\] in the app settings because markdown links are not suitable for dynamically updating the displayed text.

Search modal
...

Query type
...

Choose among:

  • search both theorems & equations
  • search theorem callouts only
  • search equations only

Search range
...

Specify the range of files to be searched. Available options are:

  • Vault: the entire vault
  • Recent notes: recently opened notes
  • Active note: the note currently edited
  • Dataview query: filter notes by powerful Dataview queries. Only available if Dataview is enabled.

Dataview queries
...

Although most parts of Math Booster don't require Dataview, I recommend installing it together with Math Booster because it brings a tremendous filtering capability to this theorem & equation searching functionality.

Note that only LIST queries without GROUP BY are supported.

Example
  • Filtering by a folder
    LIST FROM "Papers"
    -
  • Filtering by a tag
    LIST FROM #statistics
    -
  • Filtering by dates
    LIST WHERE file.cday >= date("2023-11-01")
    -

  1. Requires the Include theorem callout label for search target option to be turned on.↩︎
\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/custom-link-autocomplete.html b/docs/search-&-link-auto-completion/custom-link-autocomplete.html deleted file mode 100644 index 9819c9f..0000000 --- a/docs/search-&-link-auto-completion/custom-link-autocomplete.html +++ /dev/null @@ -1 +0,0 @@ -Custom link autocomplete

Custom link autocomplete
...

In the editor, type \ref (by default). Then, live suggestions for all theorem callouts & equation blocks in the entire vault show up.

  • Enter: insert a link to the selected item.
  • Shift+Enter: insert a link to the note containing the selected item.
  • Cmd+Enter on Mac/Ctrl+Enter on Windows: jump to the selected item by pressing.

Use \tref or \eqref (by default) instead of \ref to suggest only theorems or only equations.

Remark 1 (the Better Link Autocompletion plugin).

I also wrote another plugin that renders equation inside Obsidian's built-in link autocompletion.
Check it out here: https://github.com/RyotaUshio/obsidian-better-link-autocompletion

Filter files to be searched
...

  • \rer/\trer/\eqrer (by default): search only within recently opened notes
  • \rea/\trea/\eqrea (by default): search only within active note
Remark 2.

You can change the trigger strings (e.g. \ref) to whatever you like in the plugin settings.

Remark 3.

There are variants of custom autocomplete. It is recommended to turn off unnecessary ones in the plugin setting to improve performance.

Available search keys
...

Theorem suggestion
...

KeyExample
Environment typedefinition, theorem, ...
Formatted titleDefinition 1.1 (Continuity)
Formatted label[1]def:continuity
Note pathfolder/note.md

Equation suggestion
...

KeyExample
Equation number (if any)(1)
LaTeX source code\lim_{n \to \infty} \int f_n \, d\mu = \int f \, d\mu
Note pathfolder/note.md
Remark 4 (Wikilinks vs. markdown links).

This feature inserts wikilinks (i.e. [[]]) even if you are turning off Use [[Wikilinks]] in the app settings because markdown links are not suitable for dynamically updating the displayed text.


  1. Requires the Include theorem callout label for search target option to be turned on.↩︎
\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/custom-link-completion.html b/docs/search-&-link-auto-completion/custom-link-completion.html deleted file mode 100644 index b3aabc9..0000000 --- a/docs/search-&-link-auto-completion/custom-link-completion.html +++ /dev/null @@ -1 +0,0 @@ -Custom link completion

Custom link completion
...

Math Booster lets you insert links to theorems or equations with ease.

In the editor, type \ref (by default). Then, live suggestions for all theorem callouts & equation blocks in the entire vault show up.

  • Enter: insert a link to the selected item.
  • Shift+Enter: insert a link to the note containing the selected item.
  • Cmd+Enter on Mac/Ctrl+Enter on Windows: jump to the selected item by pressing.

Use \tref or \eqref (by default) instead of \ref to suggest only theorems or only equations.

Remark 1 (the Better Link Autocompletion plugin).

I also wrote another plugin that renders equation inside Obsidian's built-in link autocompletion.
Check it out here: https://github.com/RyotaUshio/obsidian-better-link-autocompletion

Filter files to be searched
...

  • \rer/\trer/\eqrer (by default): search only within recently opened notes
  • \rea/\trea/\eqrea (by default): search only within active note
Remark 2.

You can change the trigger strings (e.g. \ref) to whatever you like in the plugin settings.

Remark 3.

There are variants of link auto-completion. It is recommended to turn off unnecessary ones in the plugin setting to improve performance.

Available search keys
...

Theorem suggestion
...

KeyExample
Environment typedefinition, theorem, ...
Formatted titleDefinition 1.1 (Continuity)
Formatted label[1]def:continuity
Note pathfolder/note.md

Equation suggestion
...

KeyExample
Equation number (if any)(1)
LaTeX source code\lim_{n \to \infty} \int f_n \, d\mu = \int f \, d\mu
Note pathfolder/note.md
Remark 4 (Wikilinks vs. markdown links).

This feature inserts wikilinks (i.e. [[]]) even if you are turning off Use [[Wikilinks]] in the app settings because markdown links are not suitable for dynamically updating the displayed text.


  1. Requires the Include theorem callout label for search target option to be turned on.↩︎
\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/editor-auto-completion.html b/docs/search-&-link-auto-completion/editor-auto-completion.html deleted file mode 100644 index c3f5c74..0000000 --- a/docs/search-&-link-auto-completion/editor-auto-completion.html +++ /dev/null @@ -1 +0,0 @@ -Editor auto-completion

Editor auto-completion
...

Math Booster lets you insert links to theorems or equations with ease.

In the editor, type \ref (by default). Then, live suggestions for all theorem callouts & equation blocks in the entire vault show up.

  • Enter: insert a link to the selected item.
  • Shift+Enter: insert a link to the note containing the selected item.
  • Cmd+Enter on Mac/Ctrl+Enter on Windows: jump to the selected item by pressing.

Use \tref or \eqref (by default) instead of \ref to suggest only theorems or only equations.

Remark 1 (the Better Link Autocompletion plugin).

I also wrote another plugin that renders equation inside Obsidian's built-in link autocompletion.
Check it out here: https://github.com/RyotaUshio/obsidian-better-link-autocompletion

Filter files to be searched
...

  • \rer/\trer/\eqrer (by default): search only within recently opened notes
  • \rea/\trea/\eqrea (by default): search only within active note
Remark 2.

You can change the trigger strings (e.g. \ref) to whatever you like in the plugin settings.

Remark 3.

There are variants of link auto-completion. It is recommended to turn off unnecessary ones in the plugin setting to improve performance.

Available search keys
...

Theorem suggestion
...

KeyExample
Environment typedefinition, theorem, ...
Formatted titleDefinition 1.1 (Continuity)
Formatted label[1]def:continuity
Note pathfolder/note.md

Equation suggestion
...

KeyExample
Equation number (if any)(1)
LaTeX source code\lim_{n \to \infty} \int f_n \, d\mu = \int f \, d\mu
Note pathfolder/note.md
Remark 4 (Wikilinks vs. markdown links).

This feature inserts wikilinks (i.e. [[]]) even if you are turning off Use [[Wikilinks]] in the app settings because markdown links are not suitable for dynamically updating the displayed text.


  1. Requires the Include theorem callout label for search target option to be turned on.↩︎
\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-autocomplete.html b/docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-autocomplete.html deleted file mode 100644 index 7f367f4..0000000 --- a/docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-autocomplete.html +++ /dev/null @@ -1 +0,0 @@ -Enhancing Obsidian's built-in link autocomplete

Enhancing Obsidian's built-in link autocomplete
...

Math Booster enhances Obsidian's built-in link autocomplete (the one that is triggered when you type [[ in the editor) by displaying formatted theorem titles and rendered equations.

Enhancing Obsidian's built-in link autocomplete-20231130210116619.webp

\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-completion.html b/docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-completion.html deleted file mode 100644 index 49d1046..0000000 --- a/docs/search-&-link-auto-completion/enhancing-obsidian's-built-in-link-completion.html +++ /dev/null @@ -1 +0,0 @@ -Enhancing Obsidian's built-in link completion

Enhancing Obsidian's built-in link completion
...

Math Booster enhances Obsidian's built-in link completion (the one that is triggered when you type [[ in the editor) by displaying formatted theorem titles and rendered equations.

This built-in link completion works in a top-down manner: you select a note first, and then choose a theorem or an equation contained in it.
This is useful when you know exactly which note the theorem/equation that you want to reference lives in.

However, it might be also the case you're not very sure where the target theorem/equation is. In that case, you can use either of the following features Math Booster offers:

Both of them work in a bottom-up manner as opposed to the built-in completion. Now you have different tools that you can use for different situations.

\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/search-&-link-auto-completion.html b/docs/search-&-link-auto-completion/search-&-link-auto-completion.html deleted file mode 100644 index 8f40ca4..0000000 --- a/docs/search-&-link-auto-completion/search-&-link-auto-completion.html +++ /dev/null @@ -1 +0,0 @@ -Search & link auto-completion

Search & link auto-completion
...

Math Booster provides three different tools for quickly search or insert links to your theorems and equations:

\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/search-&-link-autocomplete.html b/docs/search-&-link-auto-completion/search-&-link-autocomplete.html deleted file mode 100644 index 120edf6..0000000 --- a/docs/search-&-link-auto-completion/search-&-link-autocomplete.html +++ /dev/null @@ -1 +0,0 @@ -Search & link autocomplete

Search & link autocomplete
...

Math Booster provides three different tools for quickly search or insert links to your theorems and equations:

Overview
...

Math Booster enhances Obsidian's built-in link autocomplete (the one that is triggered when you type [[ in the editor) by displaying formatted theorem titles and rendered equations.

This built-in autocomplete works in a top-down manner: you select a note first, and then choose a theorem or an equation contained in it.
This is useful when you know exactly which note the theorem/equation that you want to reference lives in.

However, it might be also the case you're not very sure where the target theorem/equation is. In that case, you can use either of the following features Math Booster offers:

Both of them work in a bottom-up manner as opposed to the built-in completion. Now you have different tools that you can use for different situations.

\ No newline at end of file diff --git a/docs/search-&-link-auto-completion/search-modal.html b/docs/search-&-link-auto-completion/search-modal.html deleted file mode 100644 index 20f324c..0000000 --- a/docs/search-&-link-auto-completion/search-modal.html +++ /dev/null @@ -1,4 +0,0 @@ -Search modal

Search modal
...

Run the Search command to open a search modal.

This is similar to Custom link autocomplete, but available as a search modal like Quick Switcher along with further search control functionalities.

Search modal can be controled by keyboard alone without mouse

Use the Tab/Shift+Tab to move back and forth between the search window and two drop-down menus (Query type & Search range).

Also, you can use Shift+ArrowUp/Shift+ArrowDown to move around in each dropdown menu.

Query type
...

Choose among:

  • search both theorems & equations
  • search theorem callouts only
  • search equations only

Search range
...

Specify the range of files to be searched. Available options are:

  • Vault: the entire vault
  • Recent notes: recently opened notes
  • Active note: the note currently edited
  • Dataview query: filter notes by powerful Dataview queries. Only available if Dataview is enabled.

Dataview queries
...

Although most parts of Math Booster don't require Dataview, I recommend installing it together with Math Booster because it brings a tremendous filtering capability to this theorem & equation searching functionality.

Note that only LIST queries without GROUP BY are supported.

Example
  • Filtering by a folder
    LIST FROM "Papers"
    -
  • Filtering by a tag
    LIST FROM #statistics
    -
  • Filtering by dates
    LIST WHERE file.cday >= date("2023-11-01")
    -
\ No newline at end of file diff --git a/docs/search-&-link-autocomplete/assets/enhancing-obsidian's-built-in-link-autocomplete-20231130210116619.webp b/docs/search-&-link-autocomplete/assets/enhancing-obsidian's-built-in-link-autocomplete-20231130210116619.webp deleted file mode 100644 index 64319f0a18c5696c8dca1aaed828a873bfa02d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8664 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 link autocomplete

Custom link autocomplete
...

New in version 2.2.0

If you have the Quick Preview plugin installed, holding down Alt/Option (by default) will trigger a quick preview of the selected suggestion with the context around it.

In the editor, type \ref (by default). Then, live suggestions for all theorem callouts & equation blocks in the entire vault show up.

  • Enter: insert a link to the selected item.
  • Shift+Enter: insert a link to the note containing the selected item.
  • Cmd+Enter on Mac/Ctrl+Enter on Windows: jump to the selected item by pressing.

Use \tref or \eqref (by default) instead of \ref to suggest only theorems or only equations.

Filter files to be searched
...

  • \ref:r/\tref:r/\eqref:r (by default): search only within recently opened notes
  • \ref:a/\tref:a/\eqref:a (by default): search only within active note
Remark 1.

You can change the trigger strings (e.g. \ref) to whatever you like in the plugin settings.

Remark 2.

There are variants of custom autocomplete. It is recommended to turn off unnecessary ones in the plugin setting to improve performance.

Available search keys
...

Theorem suggestion
...

KeyExample
Environment typedefinition, theorem, ...
Formatted titleDefinition 1.1 (Continuity)
Formatted label[1]def:continuity
Note pathfolder/note.md

Equation suggestion
...

KeyExample
Equation number (if any)(1)
LaTeX source code\lim_{n \to \infty} \int f_n \, d\mu = \int f \, d\mu
Note pathfolder/note.md
Remark 3 (Wikilinks vs. markdown links).

This feature inserts wikilinks (i.e. [[]]) even if you are turning off Use [[Wikilinks]] in the app settings because markdown links are not suitable for dynamically updating the displayed text.


  1. Requires the Include theorem callout label for search target option to be turned on.↩︎
\ No newline at end of file diff --git a/docs/search-&-link-autocomplete/enhancing-obsidian's-built-in-link-autocomplete.html b/docs/search-&-link-autocomplete/enhancing-obsidian's-built-in-link-autocomplete.html deleted file mode 100644 index 73cb261..0000000 --- a/docs/search-&-link-autocomplete/enhancing-obsidian's-built-in-link-autocomplete.html +++ /dev/null @@ -1 +0,0 @@ -Enhancing Obsidian's built-in link autocomplete

Enhancing Obsidian's built-in link autocomplete
...

Important

This feature is planned to be removed from this plugin in the near future, and instead, it will be available as a separate plugin Rendered Block Link Suggestions, which supports all types of blocks not limited to display math. Currently awaiting for approval by the Obsidian team.

This plugin enhances Obsidian's built-in link autocomplete (the one that is triggered when you type [[ in the editor) by displaying formatted theorem titles and rendered equations.

Enhancing Obsidian's built-in link autocomplete-20231130210116619.webp

\ No newline at end of file diff --git a/docs/search-&-link-autocomplete/search-&-link-autocomplete.html b/docs/search-&-link-autocomplete/search-&-link-autocomplete.html deleted file mode 100644 index 5e66e78..0000000 --- a/docs/search-&-link-autocomplete/search-&-link-autocomplete.html +++ /dev/null @@ -1 +0,0 @@ -Search & link autocomplete

Search & link autocomplete
...

This plugin provides three different tools for quickly search or insert links to your theorems and equations:

Overview
...

This plugin enhances Obsidian's built-in link autocomplete (the one that is triggered when you type [[ in the editor) by displaying formatted theorem titles and rendered equations.

This built-in autocomplete works in a top-down manner: you select a note first, and then choose a theorem or an equation contained in it.
This is useful when you know exactly which note the theorem/equation that you want to reference lives in.

However, it might be also the case you're not very sure where the target theorem/equation is. In that case, you can use either of the following features this plugin offers:

Both of them work in a bottom-up manner as opposed to the built-in completion. Now you have different tools that you can use for different situations.

\ No newline at end of file diff --git a/docs/search-&-link-autocomplete/search-modal.html b/docs/search-&-link-autocomplete/search-modal.html deleted file mode 100644 index c28f5fe..0000000 --- a/docs/search-&-link-autocomplete/search-modal.html +++ /dev/null @@ -1,4 +0,0 @@ -Search modal

Search modal
...

New in version 2.2.0

If you have the Quick Preview plugin installed, holding down Alt/Option (by default) will trigger a quick preview of the selected suggestion with the context around it.

Run the Search command to open a search modal.

This is similar to Custom link autocomplete, but available as a search modal like Quick Switcher along with further search control functionalities.

Search modal can be controled by keyboard alone without mouse

Use the Tab/Shift+Tab to move back and forth between the search window and two drop-down menus (Query type & Search range).

Also, you can use Shift+ArrowUp/Shift+ArrowDown to move around in each dropdown menu.

Query type
...

Choose among:

  • search both theorems & equations
  • search theorem callouts only
  • search equations only

Search range
...

Specify the range of files to be searched. Available options are:

  • Vault: the entire vault
  • Recent notes: recently opened notes
  • Active note: the note currently edited
  • Dataview query: filter notes by powerful Dataview queries. Only available if Dataview is enabled.

Dataview queries
...

Although most parts of this plugin don't require Dataview, I recommend installing it together with this plugin because it brings a tremendous filtering capability to this theorem & equation searching functionality.

Note that only LIST queries without GROUP BY are supported.

Example
  • Filtering by a folder
    LIST FROM "Papers"
    -
  • Filtering by a tag
    LIST FROM #statistics
    -
  • Filtering by dates
    LIST WHERE file.cday >= date("2023-11-01")
    -
\ No newline at end of file diff --git a/docs/settings/local-settings.html b/docs/settings/local-settings.html deleted file mode 100644 index d3dc142..0000000 --- a/docs/settings/local-settings.html +++ /dev/null @@ -1,13 +0,0 @@ -Local settings

Local settings
...

Many of this plugin's settings can be applied specifically to a certain folder or file, and they are called local settings.

In the plugin setting tab, you can set up the local settings for the vault root (which we usually call global).
They apply all the files in the vault unless overwritten by another local settings for a lower-level folder/file.

You can make use of this cascaded structure for customizing the settings specific to each textbook or paper, for example:

Folder structure                    Local settings
-───────────────────────────────────────────────────────────────
-vault root
-├── Textbook written in Japanese    <--- Profile = "Japanese"
-│   ├── Chapter 1
-│   │   ├── 1-1.md                  <--- Number prefix = "1.1."
-│   │   └── 1-2.md                  <--- Number prefix = "1.2."
-│   ├── Chapter 2
-│   │   ├── 2-1.md                  <--- Number prefix = "2.1."
-│   │   └── 2-2.md                  <--- Number prefix = "2.2."
-├── Paper written in English.md     <--- Profile = "English"
-├── ...
-

How to set up local settings
...

There are several ways to set up the local settings.

  • File explorer: Right-click on a file/folder, and then click LaTeX-like Theorem & Equation Referencer: Open local settings.
  • Plugin setting tab (Global for the vault root, Local for other files/folders)
  • Open local settings for the current note command
  • Open local settings for the current note button in theorem callout settings
\ No newline at end of file diff --git a/docs/settings/prefix-inference/5.6-sample-note.html b/docs/settings/prefix-inference/5.6-sample-note.html deleted file mode 100644 index da7f071..0000000 --- a/docs/settings/prefix-inference/5.6-sample-note.html +++ /dev/null @@ -1,4 +0,0 @@ -5.6. Sample note

This is a sample note to demonstrate how prefix inference works.

This note has a front matter (properties) like this:

---
-section: 1.2
----
-

Theorem callouts
...

In this sample note, theorem callouts are configured to use this section property (set to 1.2 for example) to infer a prefix.

Theorem 1.2.1 (Title).

Equations
...

In this sample note, equations are set to use the note title 5.6. Sample note instead:

\ No newline at end of file diff --git a/docs/settings/prefix-inference/a-sample-note.html b/docs/settings/prefix-inference/a-sample-note.html deleted file mode 100644 index 2e63d52..0000000 --- a/docs/settings/prefix-inference/a-sample-note.html +++ /dev/null @@ -1,4 +0,0 @@ -A. Sample note

This is a sample note to demonstrate how prefix inference works.

This note has a front matter (properties) like this:

---
-section: 1.2
----
-

Theorem callouts
...

In this sample note, theorem callouts are configured to use this section property (set to 1.2 for example) to infer a prefix.

Theorem 1.2.1 (Title).

Equations
...

In this sample note, equations are set to use the note title A. Sample note instead:

\ No newline at end of file diff --git a/docs/settings/prefix-inference/prefix-inference.html b/docs/settings/prefix-inference/prefix-inference.html deleted file mode 100644 index cab0bb5..0000000 --- a/docs/settings/prefix-inference/prefix-inference.html +++ /dev/null @@ -1 +0,0 @@ -Prefix inference

Prefix inference
...

Automatically infer a prefix from the note title or properties. If the inference source (title or property) contains whitespaces, the substring before the first whitespace will be parsed for generating a prefix.

See here for an example note.


\ No newline at end of file diff --git a/docs/settings/profiles.html b/docs/settings/profiles.html deleted file mode 100644 index 393ea22..0000000 --- a/docs/settings/profiles.html +++ /dev/null @@ -1,11 +0,0 @@ -Profiles

Profiles
...

Profiles define the displayed name of each theorem environment (theorem/definition/lemma/...) and proofs.
Click on the Manage profiles button in a local settings pop-up to open the profile manager.
Here, you can edit an existing profile, create a new one from scratch, copy an existing one, or delete one.

For example, the default "English" profile displays exercise as "Exercise."
If you want to change it to "Problem" inside a specific folder, define a new profile:

  1. Create a new profile by copying the "English" profile.
  2. Modify the "exercise" field of the new profile to "Problem."
  3. Apply the profile to the folder.

Tags
...

Each profile has tags. Tags are used to generate CSS classes.

For example, the preset profiles "English" and "Japanese" have "en" and "ja" as their tags, respectively.
In these cases, tags indicate the language used for the note, making it possible to use different styles depending on it. I recommend defining language tags for your custom profiles, too.

Here's a list of the CSS classes generated from tags:

  • .math-booster-{tag}: (New in 0.6.9) Applies to an entire note. This is very powerful... It acts just like Obsidian's built-in cssclasses property (see here), but you don't need to type in the YAML frontmatter manually. Also, remember that profiles have a cascaded structure determined by the folder hierarchy, just like other local settings.
  • .theorem-callout-{tag}: Applies to theorem callouts.
  • .math-booster-begin-proof-{tag}/.math-booster-end-proof-{tag}: Applies to proofs.

Now that we have .math-booster-{tag}, the last two might be unnecessary, but I will keep them to ensure backward compatibility and also let users use, for example, .theorem-callout-en as a handy alias for .math-booster-en .theorem-callout.

Here's a demonstration of how .math-booster-{tag} works (in the right pane, I'm using the CSS editor plugin).

tag.gif

Use case
...

You can use this note-level CSS class, for example, to switch font families depending on whether each note is mathematical.
I prefer the default font for non-mathematical notes in my use case, but I would like more stylish fonts such as CMU Serif and Noto Serif JP for mathematical ones. The following CSS snippet does exactly what I want (it includes additional lines for different line spacing between mathematical/non-mathematical notes).

/* Mathematical notes in Japanese */
-.math-booster-ja:not(.math-booster-nonmath) {
-  --font-text: CMU Serif, Noto Serif JP;
-  --line-height-normal: 1.8;
-}
-
-/* Non-mathematical notes in Japanese */
-.math-booster-ja.math-booster-nonmath {
-  --line-height-normal: 1.6;
-}
-
\ No newline at end of file diff --git a/docs/settings/settings.html b/docs/settings/settings.html deleted file mode 100644 index 482af20..0000000 --- a/docs/settings/settings.html +++ /dev/null @@ -1 +0,0 @@ -Settings

Settings
...

This plugin offers a high customizability through a lot of configurable options.

\ No newline at end of file diff --git a/docs/theorem-callouts/prefix-inference.html b/docs/theorem-callouts/prefix-inference.html deleted file mode 100644 index 0febd41..0000000 --- a/docs/theorem-callouts/prefix-inference.html +++ /dev/null @@ -1 +0,0 @@ -Prefix inference

Prefix inference
...

Automatically infer a prefix from the note title or properties. If the inference source (title or property) contains whitespaces, the substring before the first whitespace will be parsed for generating a prefix.

\ No newline at end of file diff --git a/docs/theorem-callouts/style-your-theorems.html b/docs/theorem-callouts/style-your-theorems.html deleted file mode 100644 index a160b5d..0000000 --- a/docs/theorem-callouts/style-your-theorems.html +++ /dev/null @@ -1 +0,0 @@ -Style your theorems

Style your theorems
...

You can customize the appearance of theorem callouts either by your own custom CSS snippets or by preset sample styles.

In the plugin settings, set Theorem callouts > Style to be Custom if you want to use your custom CSS snippets.
Math Booster defines several custom CSS classes, allowing you to change the styles depending on specific languages or environments (theorem/definition/...).

Otherwise, the selected preset style will be applied. You need to reopen the note to see the style change.
When Don't override the app's font setting when using sample styles is turned on, the preset style will not change the default font family defined in the app's Settings > Appearance > Font > Text font.

Note

"Custom" is highly recommended, since it will give you the most control.

The preset styles are only for a trial purpose, and they might not work well with some non-default themes. You can view the CSS snippets for all the preset styles in the documentation or at the GitHub repository, which you can use as a starting point.

CSS classes
...

Obsidian built-in classes
...

  • .callout
    • .callout > .callout-title
      • .callout > .callout-title > .callout-icon
      • .callout > .callout-title > .callout-title-inner
    • .callout > .callout-content

Math Booster's custom classes
...

  • .theorem-callout: Assigned to all theorem callouts.
  • .theorem-callout-{type}: Indicates the environment type. For example, a theorem callout whose type is "theorem" will be given the .theorem-callout-theorem class.
  • .theorem-callout-{tag}: A profile has tags, each of which is converted to this .theorem-callout-{tag} class. As for the default profiles "English" and "Japanese", the tags are "en" and "ja", respectively. They are used to generate CSS classes .theorem-callout-en and .theorem-callout-ja indicating the language used for the theorem callout, making it possible to use different styles depending on it. I recommend defining language tags for your custom profiles.
  • .theorem-callout-main-title: Lives under .callout-title-inner. For example, the "Theorem 1.1" part for Theorem 1.1 (Cauchy-Schwarz)
  • .theorem-callout-subtitle: Lives under .callout-title-inner. For example, the "(Cauchy-Schwarz)" part for Theorem 1.1 (Cauchy-Schwarz)

Here are the list of preset sample styles. You can also view the CSS snippet generating each style.

MathWiki style
...

This beautiful style is taken from MathWiki. A big thank you to Zhaoshen Zhai, the owner of MathWiki and the MathLinks plugin, for readily consenting to including it in this documentation.

MathWiki style

\ No newline at end of file diff --git a/docs/theorem-callouts/styling.html b/docs/theorem-callouts/styling.html deleted file mode 100644 index a8a7f1a..0000000 --- a/docs/theorem-callouts/styling.html +++ /dev/null @@ -1 +0,0 @@ -Styling

Styling
...

You can customize the appearance of theorem callouts either by your own custom CSS snippets or by preset sample styles.

In the plugin settings, set Theorem callouts > Style to be Custom if you want to use your custom CSS snippets.
This plugin defines several custom CSS classes, allowing you to change the styles depending on specific languages or environments (theorem/definition/...).

Otherwise, the selected preset style will be applied. You need to reopen the note to see the style change.
When Don't override the app's font setting when using sample styles is turned on, the preset style will not change the default font family defined in the app's Settings > Appearance > Font > Text font.

Remark.

"Custom" is highly recommended, since it will give you the most control.

The preset styles are only for a trial purpose, and they might not work well with some non-default themes. You can view the CSS snippets for all the preset styles in the documentation or at the GitHub repository, which you can use as a starting point.

CSS classes
...

Obsidian built-in classes
...

  • .callout
    • .callout > .callout-title
      • .callout > .callout-title > .callout-icon
      • .callout > .callout-title > .callout-title-inner
    • .callout > .callout-content

Custom classes defined by this plugin
...

  • .theorem-callout: Assigned to all theorem callouts.
  • .theorem-callout-{type}: Indicates the environment type. For example, a theorem callout whose type is "theorem" will be given the .theorem-callout-theorem class.
  • .theorem-callout-{tag}: A profile has tags, each of which is converted to this .theorem-callout-{tag} class. As for the default profiles "English" and "Japanese", the tags are "en" and "ja", respectively. They are used to generate CSS classes .theorem-callout-en and .theorem-callout-ja indicating the language used for the theorem callout, making it possible to use different styles depending on it. I recommend defining language tags for your custom profiles.
  • .theorem-callout-main-title: Lives under .callout-title-inner. For example, the "Theorem 1.1" part for Theorem 1.1 (Cauchy-Schwarz)
  • .theorem-callout-subtitle: Lives under .callout-title-inner. For example, the "(Cauchy-Schwarz)" part for Theorem 1.1 (Cauchy-Schwarz)

Here are the list of preset sample styles. You can also view the CSS snippet generating each style.

MathWiki style
...

This beautiful style is taken from MathWiki. A big thank you to Zhaoshen Zhai, the owner of MathWiki and the MathLinks plugin, for readily consenting to including it in this documentation.

MathWiki style

\ No newline at end of file diff --git a/docs/theorem-callouts/theorem-callouts.html b/docs/theorem-callouts/theorem-callouts.html deleted file mode 100644 index 97e2fad..0000000 --- a/docs/theorem-callouts/theorem-callouts.html +++ /dev/null @@ -1,55 +0,0 @@ -Theorem callouts

Theorem callouts
...

This plugin offers theorem callouts, a special version of Obsidian's built-in callouts. They are designed for creating theorem environments (theorem, definition, lemma, ...) in Obsidian as -like as possible.

Basics
...

The syntax is:

> [!theorem] Title
-> Content
-
-> [!corollary]
-> Content
-

It will be rendered as below.[1] As you can see, theorem callouts are automatically numbered by default. The numbering style can be configured in the settings.

Theorem 1 (Title).

Content

Corollary 2.

Content

One more important thing about theorem callouts is that they can be referenced as if using the cleveref package for . See Clever referencing for the details.

Using aliases
...

Alternatively, you can use a shorer alias thm instead of theorem. It will be rendered the exactly same as above.

> [!thm] Title
-> Content
-
-> [!cor]
-> Content
-
Theorem 3 (Title).

Content

Corollary 4.

Content

Here's the complete list of available envionments and aliases.

Environment nameAlias
axiomaxm
definitiondef
lemmalem
propositionprp
theoremthm
corollarycor
claimclm
assumptionasm
example[2]exm
exerciseexr
conjecturecnj
hypothesishyp
remarkrmk
Note

The aliases are based on Bookdown, but some of the environments are not supported by it.

Unnumbered theorem callouts
...

Similarly to the syntax (e.g. \begin{theorem*}), the following will create an unnumbered theorem callout.

> [!lemma|*] Title
-> Content
-
Lemma (Title).

Content

Manually numbered theorem callouts
...

It is also possible to explicitly specify the theorem number by yourself. It's useful, for example, when making a side note about a textbook or a paper.

> [!def|A.1] Title
-> Content
-
Definition A.1 (Title).

Content

Latex Suite snippets
...

You can insert theorem callouts via the following Latex Suite snippets.

For example, type def+Tab or definition+Tab to insert a definition callout with tabstops.

    { trigger: "axm", replacement: "> [!axiom] $0\n> $1", options: "t" },
-    { trigger: "def", replacement: "> [!definition] $0\n> $1", options: "t" },
-    { trigger: "lem", replacement: "> [!lemma] $0\n> $1", options: "t" },
-    { trigger: "prp", replacement: "> [!proposition] $0\n> $1", options: "t" },
-    { trigger: "thm", replacement: "> [!theorem] $0\n> $1", options: "t" },
-    { trigger: "cor", replacement: "> [!corollary] $0\n> $1", options: "t" },
-    { trigger: "clm", replacement: "> [!claim] $0\n> $1", options: "t" },
-    { trigger: "asm", replacement: "> [!assumption] $0\n> $1", options: "t" },
-    { trigger: "exm", replacement: "> [!example] $0\n> $1", options: "t" },
-    { trigger: "exr", replacement: "> [!exercise] $0\n> $1", options: "t" },
-    { trigger: "cnj", replacement: "> [!conjecture] $0\n> $1", options: "t" },
-    { trigger: "hyp", replacement: "> [!hypothesis] $0\n> $1", options: "t" },
-    { trigger: "rmk", replacement: "> [!remark] $0\n> $1", options: "t" },
-    { trigger: "axiom", replacement: "> [!axiom] $0\n> $1", options: "t" },
-    { trigger: "definition", replacement: "> [!definition] $0\n> $1", options: "t" },
-    { trigger: "lemma", replacement: "> [!lemma] $0\n> $1", options: "t" },
-    { trigger: "proposition", replacement: "> [!proposition] $0\n> $1", options: "t" },
-    { trigger: "theorem", replacement: "> [!theorem] $0\n> $1", options: "t" },
-    { trigger: "corollary", replacement: "> [!corollary] $0\n> $1", options: "t" },
-    { trigger: "claim", replacement: "> [!claim] $0\n> $1", options: "t" },
-    { trigger: "assumption", replacement: "> [!assumption] $0\n> $1", options: "t" },
-    { trigger: "example", replacement: "> [!example] $0\n> $1", options: "t" },
-    { trigger: "exercise", replacement: "> [!exercise] $0\n> $1", options: "t" },
-    { trigger: "conjecture", replacement: "> [!conjecture] $0\n> $1", options: "t" },
-    { trigger: "hypothesis", replacement: "> [!hypothesis] $0\n> $1", options: "t" },
-    { trigger: "remark", replacement: "> [!remark] $0\n> $1", options: "t" },
-

Insert a theorem callout via GUI
...

If you prefer, you can run the Insert theorem callout command to insert a theorem callout via a popout like this.

Theorem callouts-20231117082725480.webp

Customizing the display names of theorem environments
...

See Profiles for the details.

Adding metadata with comments
...

You can add some metadata or options with markdown comments (%% ... %%).

Note

Equations also can be given metadata with comments; see here.

Currently, label, display, and main are available. The followings are all appropriate syntaxes.

> [!theorem]
-> %% label: my-theorem %%
-> %% display: My Awesome Theorem %%
-> %% main %%
-
-> [!theorem]
-> %% label: my-theorem %% %% display: My Awesome Theorem %% %% main %%
-
-> [!theorem]
-> %% 
-> label: my-theorem
-> display: My Awesome Theorem
-> main: true
-> %%
-

They are provided as key-value pairs with a yaml-like key: value format. But as an exception, you can write main instead of main: true.

label
...

Has no effect for now. It might be used when exporting to Pandoc markdown or is supported in the future.

display
...

When set, all links to this theorem callout are displayed with this text instead of the usual formatted theorem title (see also: Clever referencing).

main
...

When set, this theorem is marked as the "main" one of the note containing it. This means all links to this note are displayed with a formatted title of this theorem instead of the note title (see also: Clever referencing).

Styling theorem callouts
...

Although theorem callouts are styled by the preset style by default, you have the full control over their styling through CSS snippets.

See here for more details.

Note

I strongly recommend using your custom styling instead of the presets because the presets are only tested for the default theme and might not work well with other community themes.

To use your custom CSS snippets, go to Settings > Community plugins > LaTeX-like Theorem & Equation Referencer > Global > Theorem callouts > Style and set it to Custom.

As examples, the snippets used for the presets can be found on the GitHub repository of this plugin.

Remarks
...

Theorem callouts will not work perfectly if they are nested inside another callout. Always use them as top-level blocks of your note.


  1. Appearance of theorem callouts depends on how you style them. See Styling for details. ↩︎
  2. > [!example] conflicts with Obsidian's built-in callout type. There is a setting called Don't treat "> [!example]" as a theorem callout, and if it's turned on, an "example" theorem callout can be inserted only with the alias syntax > [!exm].↩︎

\ No newline at end of file