Hey Baj,

If you're into scientific programming / software engineering, you may (for 
the giggles) interested in the attached code in my Coding Fun: Dice Rolling 
<https://groups.google.com/g/tiddlywiki/c/liQ9TBzZ0e0> post.

Yeah, my code is a little bit out there, but just to show how TiddlyWiki 
can be pushed to do some pretty wild things.

Sometimes, though, there is no choice but to use some javascript (in this 
case, pretty much the least bit of javascript needed for access to a random 
function.)
On Friday, October 29, 2021 at 12:46:45 AM UTC-3 baj...@gmail.com wrote:

> Hi all,
> I'm looking for a little help and feedback on a project. I feel like I'm 
> pretty close to getting my current approach to work, but I'm also wondering 
> if there is a better way.
>
> *Background:*
> I have a TW I made as a reference for running Pathfinder/D&D games. Across 
> a wide variety of fields and tiddlers I have text matching the 
> `(^|\s)\d+(d(2|4|6|8|10|12|20))?(\+\d+)?($|\s)` regex ie.  1d4+2, 5d6, 6. 
> Respectively,  the sum of a 4 sided die result and 2, the sum of the 
> results of five, 6 sided dice, and the value 6. 
>
> Ultimately, I would like to make it so that for any such string matching 
> the regex in my wiki, clicking on the text returns a new die/dice roll 
> matching that string. As an example, given the text "1d4+2". Clicking on 
> that text transforms it into something like "1d4+2 (5)". Clicking again 
> might give you "1d4+2 (3)". 
>
> *Current Status:*
> I have a javascript macro that accepts a string `<<dice_roll 
> roll_str:"1d4+2">>` and returns the appropriate random result, such as "2".
>
> I am using the button widget in a macro like this:
> `\define roller(input) <$button class="tc-btn-invisible" set=!!DieResult 
> setTo=<<dice_roll roll_str:$input$>> >''$input$'' 
> ({{!!DieResult}})</$button> \end`
>
> The resulting invocation looks like this: <<roller 1d8>>
>
> The pros:
>
>    - The invocation is short
>    - Once the invocation is substituted for the initial text, it works, 
>    kinda.
>
> The con:
>
>    - As I've currently implemented, "DieResult" is a field, and therefore 
>    global with respect to the tiddler. All of the rollers return the exact 
>    same result at the same time (see image).
>
> *What I'm looking for:*
>
>    - How can I make the rollers independent from each other? 
>    - It seems like having the button *set *a variable instead of a field 
>       would solve the issue but I can't figure out how to do that.
>       - I did try to use a set widget inside the button hoping that each 
>       set would only be evaluated on the click of that actual button, but 
>       apparently things don't work that way.
>       - If all else fails I can add a single "Die Result" box at the top 
>       of most of the pages, but that isn't my preferred result.
>       - Is there an established way to do something like the built in 
>    camelCase linking globally with strings matching this regex? 
>    - The vast majority of my tiddlers are bulk imported in JSON format 
>       from external sources. I could do a find replace on those files before 
>       importing, but that will have it's own issues (potential corruption and 
> not 
>       all the fields are evaluated again before rendering). I use a small 
> number 
>       of 'templates' and transclusion to render the information.
>       - Just in general, was there a smarter way to go about this? 
>    Professionally I do CLI scientific coding (C/C++/FORTRAN/Python/R), so 
>    while I can do some robust software engineering, but the 
>    Wikitext/HTML5/CSS/javascript interplay is pretty foreign. 
>    
> All the best,
> Baj
>

-- 
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 tiddlywiki+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/e60fe3c5-aac7-438c-adbf-df71accbe659n%40googlegroups.com.

Reply via email to