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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/tiddlywiki/1c32809f-3cb6-4a58-87f8-ce977451fdd2n%40googlegroups.com.