Hey, all —

Here's *Formula plugin* 0.1.1:  
http://evanbalster.com/tiddlywiki/formulas.html
Source and issue tracking on GitHub:  
https://github.com/EvanBalster/TiddlyWikiFormula

This version adds:

   - A $formula-vars macro
   - Preliminary date and time support
      - Date literals as datum values
      - Support for converting to/from TiddlyWiki timestamps
      - Offset and difference functions
      - Calendar functions
   - Workflow enhancements based on spreadsheet software
      - Datums (included values) beginning with "=" are treated as formulas
      - Can use names like "B3" as shorthand for individual DataTiddler 
      indexes
   - Fixed errors with rounding functions
   - Fixed an issue with error handing in datums
   - Various other small stuff

Please continue experimenting and reporting any issues you turn up.  I'll 
be interested to see if the date & time stuff suits the needs of the users 
who've chimed in about that.


On Sunday, 17 December 2017 02:22:36 UTC-6, Evan Balster wrote:
>
> Hey, Tony —
>
> I might have been a little terse in documenting the logical functions.
>
> The IF function chooses between its second and third arguments based on 
> the first.  For example,
>
> if({{!!x}}<1, "x is less than 1", "x is more than 1")
>
> The second and third argument can be whatever sort of date you like.  
> Instead of strings they could be transclusions, or other functions or 
> complicated bits of math.
>
> IFS basically works like "if (arg1) {return arg2} else if (arg3) {return 
> arg4} else if (arg5) {return arg6} else return undefined".  The 
> odd-numbered arguments should be booleans and the even-numbered arguments 
> can be whatever you like.  So this would be fine:
>
> ifs(and({{!!x}} > {{!!y}}, {{!!x}} > {{!!z}}), "x is biggest", ({{!!y}} > 
> {{!!z}}), "y is biggest", TRUE, "z is biggest");
>
> Though it would be the same as:
>
> if(and({{!!x}} > {{!!y}}, {{!!x}} > {{!!z}}), "x is biggest", if({{!!y}} > 
> {{!!z}}, "y is biggest", "z is biggest"));
>
> Anyway, all the logic functions are designed to work like their 
> (better-documented) analogs in Excel and Google Sheets.
>
> * (Notably, formula currently uses javascript rules when determining 
> whether to treat numbers and strings as "true" or "false".  So zero and 
> empty strings are falsy, while non-zero numbers and non-empty strings are 
> truthy.  I can't guarantee this behavior will continue to be the case, as 
> it might be different from how spreadsheet software does things.)
>
>
> On Saturday, 16 December 2017 20:02:28 UTC-6, TonyM wrote:
>>
>> Evan,
>>
>> Please forgive my Ignorance; What can a and b be equal to in Formulas' 
>> logical functions, like IF and IFS?
>>
>> I am thinking if something evaluates to true how do I use this to
>>
>>    - list
>>    - transclude
>>    - Use macro
>>    - Show some text etc...
>>    - Set a variable/field
>>
>>
>> I imagine there is a way to write a list filter if a formula it true to 
>> show when true (or False) etc...
>>
>> I expect knowing this may help the less sophisticated users (still me at 
>> this point) make use of formula.
>>
>> Thanks in Advance
>> Tony
>>
>> On Sunday, 17 December 2017 12:41:19 UTC+11, Evan Balster wrote:
>>>
>>> Hey, Tony —
>>>
>>> I'm not an impatient reader.  :)
>>>
>>> I've added a Date type in my working copy, based on JavaScript's 
>>> built-in Date (which is reasonably feature-rich).  TiddlyWiki has some 
>>> functions for date formatting in core, too.  Libraries like moment.js offer 
>>> a "kitchen sink" of features but I'm not sure if that's necessary at the 
>>> moment.
>>>
>>> Probably my next step will be to add a basic date parser and some 
>>> utility functions (convert timestamps, convert with string, construct and 
>>> decompose dates).
>>>
>>> *Is there value sharing what I find, or do you have it covered?*
>>>>
>>>
>>> If you find something interesting, sure, share it.  But given that 
>>> there's standardized support for basic date processing in JavaScript itself 
>>> I'm going to try to steer clear of libraries.
>>>
>>> *May I ask how you use the results TRUE and FALSE in wikitest once 
>>>> calculated?*
>>>>
>>>
>>> Right now, the best use of these is in Formulas' logical functions, like 
>>> IF and IFS.  In the future I might implement a $formula-if widget that 
>>> works a little like the reveal widget.
>>>
>>> Expect a new update tomorrow or so.
>>>
>>>
>>>
>>> On Saturday, 16 December 2017 19:17:24 UTC-6, TonyM wrote:
>>>>
>>>> Evan,
>>>>
>>>> Very exciting, date manipulation is timely for me, rather than wait I 
>>>> will look into some existing options. *Is there value sharing what I 
>>>> find, or do you have it covered?*
>>>>
>>>> On multidimensional, I am not so much looking for array manipulation. 
>>>> Tiddlywiki and your solution already meets my requirements. Imagin a large 
>>>> 2d spreadsheet with 3 columns containing unique keys (or missing keys) 
>>>> even 
>>>> including date/time. If you choose a key and sort on it before you 
>>>> manipulate a 2D array you are effectively looking at the data in another 
>>>> dimension. This is very easy for TiddlyWiki.
>>>>
>>>> *May I ask how you use the results TRUE and FALSE in wikitest once 
>>>> calculated?*
>>>>
>>>> Do you use it in filters etc?
>>>>
>>>> Regards
>>>> Tony
>>>>
>>>> On Sunday, 17 December 2017 03:20:17 UTC+11, Evan Balster wrote:
>>>>>
>>>>> Question: do you have or are you planning any rounding  or averaging 
>>>>>> functions?
>>>>>
>>>>>
>>>>> There are rounding functions in there now.  See "Functions" and 
>>>>> "FormulaWidget" in the doc wiki.  No averaging yet, but that's a popular 
>>>>> function I'll replicate at some point soon.  (My last round of functions 
>>>>> was ).
>>>>>
>>>>> I did find that the rounding functions fail when a second parameter is 
>>>>>> provided, so I submitted an issue on Github.
>>>>>
>>>>>
>>>>> Ah, I'll fix those then.  Good catch.
>>>>>
>>>>>
>>>>> I am very interested in "Multidimensional" arrays.
>>>>>
>>>>>  
>>>>> From what I can tell Excel and Sheets can do 1D and 2D arrays, and 
>>>>> these may be internally represented as selection sets.  Anyway, there's a 
>>>>> lot of flexibility in what "value" types could be added (especially with 
>>>>> extensions) but I'll probably imitate spreadsheet conventions and 
>>>>> functions 
>>>>> to begin with. 
>>>>>
>>>>>
>>>>> One question: Could this be made to work with date and time?
>>>>>
>>>>>  
>>>>> Yes, I'll be adding support for a date/time datatype.  There's a long 
>>>>> history of date/time functionality in Excel/Sheets and there are some 
>>>>> standard TiddlyWiki/javascript functions that can be built upon.
>>>>>
>>>>>
>>>>> Reverse polish notation https://tid.li/tw5/hacks.html
>>>>>
>>>>>  
>>>>> Useful reference.  Before I was driven to implement this plugin I 
>>>>> experimented various macro-based solutions (including some homemade 
>>>>> ones).  
>>>>> I even have an accounting wiki built around a sum macro.  It was my 
>>>>> conclusion that the $set/$vars/$macrocall boilerplate makes recursive JS 
>>>>> macros a bit too unwieldy compared to a dedicated formula syntax.  A 
>>>>> widget 
>>>>> also has more potential for caching/optimization/efficiency in the long 
>>>>> term.
>>>>>
>>>>>
>>>>>
>>>>> On Saturday, 16 December 2017 04:29:18 UTC-6, [email protected] wrote:
>>>>>>
>>>>>> This looks very good, especially since it is incredibly easy to set 
>>>>>> up and use! One question: Could this be made to work with date and time?
>>>>>>
>>>>>> Cheers,
>>>>>>
>>>>>> Stef
>>>>>>
>>>>>> On Friday, December 15, 2017 at 5:37:26 AM UTC+1, Evan Balster wrote:
>>>>>>>
>>>>>>>
>>>>>>> Introducing the *Formula plugin*:  
>>>>>>> http://evanbalster.com/tiddlywiki/formulas.html  (version 0.1.0 at 
>>>>>>> time of posting)
>>>>>>>
>>>>>>>
>>>>>>>

-- 
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 https://groups.google.com/group/tiddlywiki.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/271aa83c-0e2e-4d8f-934a-d719c5210d46%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to