Hi everyone, I hereby release the new eval <http://tobibeer.github.io/tw5-plugins/#eval> plugin (or tobibeer/eval <http://tobibeer.github.io/tw5-plugins/#eval>) which provides an *eval* filter and an *eval* widget ...the latter working similar to the *calc* widget in mklauber/math.js <http://mklauber.github.io/tiddly-mathjs/>, however leveraging a "plug-and-play" library model (and then some).
The *eval* plugin was born out of my desire (and Jeremy's suggestion) to overcome the constraints of let filter <http://let.tiddlyspot.com/#GettingStarted>, (henceforth abandoned,) which started out with similar aspirations, allowing to compute and compare with tidbits, however, somewhat at the wrong end of the stick. If you prefer to learn by example, take a look at the examples <http://tobibeer.github.io/tw5-plugins/#eval-Examples>. The repo and the commented, non-minified source code is at: https://github.com/tobibeer/tw5-eval Although quite neatly designed, thoroughly tested and refactored, I have flagged this release as *BETA* so as to invite you to test it, and also to indicate that — architecturally speaking — things might nevertheless still change, perhaps. With or without further modifications, I intend to take it out of BETA in, say, a couple of weeks. Eval is capable of evaluating expressions leveraging different libraries, for now supporting: - *math.js* - you need to separately install tobibeer/math.js <http://tobibeer.github.io/tw5-plugins/#math.js> which contains nothing but math.js <http://mathjs.org/> itself - and avails it at *$:/lib/math.js* - should you already use mklauber/math.js <http://mklauber.github.io/tiddly-mathjs/>, *eval* will load the *math.js* version it ships with - so there's no need to install *tobibeer/math.js* - *js* - allows to evaluate native javascript - needs to be specifically enabled, see configuration <http://tobibeer.github.io/tw5-plugins/#eval-Configure> - in other words, you don't even need any *math.js* if... - you are confident to do your math in nothing but js - wish to trim those resource requirements The eval filter provides the following capabilities: - a *main* expression to be evaluated, obviously ...being the operand - you can specify more expressions, predefined or custom variables, and options, all in the operand - separate different operand declarations via backslash (*\*), defined as *name:value* e.g... - an *init* value — initializing the *value* before taking off to evaluate the main expression against each input title - a *final* expression — a final computation after the *main *expression had been evaluated against the last input title - the *value* and *title* run-time variables — automatically set for each input title, for use in the *main* or *final* expression - a *format* option — to have math.js nicely format your output value - a *lib* option — to specify for each filter instance which library to use in order to evaluate the given expression(s) - custom *variables — *any name that is not a predefined variable or option - to help make your *main* or *final* expression more readable - the suffix — to define what to return - *no suffix:* returns just the final *value* - *output mode* suffixes, prefixed *$*, use one at a time, returning... - *$* — those input titles where value is truthy - *$all* — all input titles if the value is truthy for any input title - *$val* — a list of values, one for each input title - *$expr* — a list of expressions, one for each input title - *$eq* — a list of equations, one for each input title => great for debugging Both *text references* as well as *wikitext-variables* can be used freely in the operand and are substituted in any expression or variable. (*Note*: custom variables are only evaluated on init, not during iterations. They shall also not reference each other). Ok, so... hope to see you give it a test-ride and let me know what you think, what things may not work (as expected) but also which work just about right. ;-) ~ For loading libraries, the *eval* plugin does some neat dependency resolving, the gist of which I hope will eventually find its way into the core, in one form or another. That way, we don't ship and install things like *vis* or *math.js* or any other library with any plugins that build on them. Nor does plugin A require plugin B, just to not duplicate a given library. For math.js, for example, there barely any needs for a plugin to depend on a given version of math.js. But even that can be catered for with some minor amends as to version handling / dedicated library versions resolved in just about the same way as *eval* does right now. Best wishes, Tobias. -- You received this message because you are subscribed to the Google Groups "TiddlyWiki" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/tiddlywiki. To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/3e46b014-527c-4b49-83dc-224c57bc852f%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

