mirror of
https://github.com/heyman/heynote.git
synced 2024-12-31 19:20:21 +01:00
Add prev variable to Math blocks that holds the previous value (#156)
Moved documentation on Math blocks from the FAQ into it's own section in the Readme.
This commit is contained in:
parent
66e7082786
commit
5adbbc72ec
41
README.md
41
README.md
@ -70,6 +70,31 @@ To run the tests in the Playwright UI:
|
|||||||
|
|
||||||
I'm happy to merge contributions that fit my vision for the app. Bug fixes are always welcome.
|
I'm happy to merge contributions that fit my vision for the app. Bug fixes are always welcome.
|
||||||
|
|
||||||
|
## Math Blocks
|
||||||
|
|
||||||
|
Heynote's Math blocks are powered by [Math.js expressions](https://mathjs.org/docs/expressions). Checkout their [documentation](https://mathjs.org/docs/) to see what [syntax](https://mathjs.org/docs/expressions/syntax.html), [functions](https://mathjs.org/docs/reference/functions.html), and [constants](https://mathjs.org/docs/reference/constants.html) are available.
|
||||||
|
|
||||||
|
### Accessing the previous result
|
||||||
|
|
||||||
|
The variable `prev` can be used to access the previous result. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
128
|
||||||
|
prev * 2 # 256
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changing how the results of Math blocks are formatted?
|
||||||
|
|
||||||
|
You can define a custom `format` function within the Math block like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
_format = format # store reference to the built in format
|
||||||
|
format(x) = _format(x, {notation:"exponential"})
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [Math.js format()](https://mathjs.org/docs/reference/functions/format.html) function for more info on what's supported.
|
||||||
|
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
### Where is the buffer data stored?
|
### Where is the buffer data stored?
|
||||||
@ -127,22 +152,6 @@ Alt + Shift + F Format block content (works for JSON, JavaScript, HTML, C
|
|||||||
Alt Show menu
|
Alt Show menu
|
||||||
```
|
```
|
||||||
|
|
||||||
### Can Math blocks do X?
|
|
||||||
|
|
||||||
Heynote's Math blocks are powered by [Math.js expressions](https://mathjs.org/docs/expressions). Checkout their [documentation](https://mathjs.org/docs/) to see what [syntax](https://mathjs.org/docs/expressions/syntax.html), [functions](https://mathjs.org/docs/reference/functions.html), and [constants](https://mathjs.org/docs/reference/constants.html) are available.
|
|
||||||
|
|
||||||
## Can I change how the results of Math blocks are formatted?
|
|
||||||
|
|
||||||
Yes! You can define a custom `format` function within the Math block like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
_format = format # store reference to the built in format
|
|
||||||
format(x) = _format(x, {notation:"exponential"})
|
|
||||||
```
|
|
||||||
|
|
||||||
See the [Math.js format()](https://mathjs.org/docs/reference/functions/format.html) function for more info on what's supported.
|
|
||||||
|
|
||||||
|
|
||||||
## Thanks!
|
## Thanks!
|
||||||
|
|
||||||
Heynote is built upon [CodeMirror](https://codemirror.net/), [Vue](https://vuejs.org/), [Electron](https://www.electronjs.org/), [Math.js](https://mathjs.org/), [Prettier](https://prettier.io/) and other great open-source projects.
|
Heynote is built upon [CodeMirror](https://codemirror.net/), [Vue](https://vuejs.org/), [Electron](https://www.electronjs.org/), [Math.js](https://mathjs.org/), [Prettier](https://prettier.io/) and other great open-source projects.
|
||||||
|
@ -51,16 +51,20 @@ function mathDeco(view) {
|
|||||||
|
|
||||||
if (block && block.language.name == "math") {
|
if (block && block.language.name == "math") {
|
||||||
// get math.js parser and cache it for this block
|
// get math.js parser and cache it for this block
|
||||||
let parser = mathParsers.get(block)
|
let {parser, prev} = mathParsers.get(block) || {}
|
||||||
if (!parser) {
|
if (!parser) {
|
||||||
parser = window.math.parser()
|
parser = window.math.parser()
|
||||||
mathParsers.set(block, parser)
|
mathParsers.set(block, {parser, prev})
|
||||||
}
|
}
|
||||||
|
|
||||||
// evaluate math line
|
// evaluate math line
|
||||||
let result
|
let result
|
||||||
try {
|
try {
|
||||||
|
parser.set("prev", prev)
|
||||||
result = parser.evaluate(line.text)
|
result = parser.evaluate(line.text)
|
||||||
|
if (result !== undefined) {
|
||||||
|
mathParsers.set(block, {parser, prev:result})
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// suppress any errors
|
// suppress any errors
|
||||||
}
|
}
|
||||||
|
@ -33,3 +33,26 @@ format(x) = _format(x, {notation:"exponential"})
|
|||||||
`)
|
`)
|
||||||
await expect(page.locator("css=.heynote-math-result").last()).toHaveText("4.2e+1")
|
await expect(page.locator("css=.heynote-math-result").last()).toHaveText("4.2e+1")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("previous result in prev variable", async ({ page }) => {
|
||||||
|
await heynotePage.setContent(`
|
||||||
|
∞∞∞math
|
||||||
|
128
|
||||||
|
prev * 2 # 256
|
||||||
|
`)
|
||||||
|
await expect(page.locator("css=.heynote-math-result").last()).toHaveText("256")
|
||||||
|
})
|
||||||
|
|
||||||
|
test("previous result in prev variable rows with invalid values", async ({ page }) => {
|
||||||
|
await heynotePage.setContent(`
|
||||||
|
∞∞∞math
|
||||||
|
1336
|
||||||
|
23 /
|
||||||
|
# comment
|
||||||
|
test
|
||||||
|
prev+1#comment
|
||||||
|
prev
|
||||||
|
`)
|
||||||
|
await expect(page.locator("css=.heynote-math-result").last()).toHaveText("1337")
|
||||||
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user