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/1c32809f-3cb6-4a58-87f8-ce977451fdd2n%40googlegroups.com.

Reply via email to