The dev documentation states “Macros are just used to return a chunk of wikitext for further processing. They should not make modifications to tiddlers in the wiki store.”
The main reason, why macros shouldn’t have side effects is, that they don’t have a .refresh() function of their own. They are refreshed by “parent” widgets.
So if you want to implement your own functionality, that survives a page refresh you need to create widgets.
Is there a hook point where I can have my own js code that can modify tiddlers?
Widgets.
Basically I want to be able to set field values from js. As I’d much rather use js than the conglomerate that is wikitext, widgets, filters, and macros.
It depends on what you really want to do. If you just want to change some fields you are probably a 100 times faster to get stuff done if you use the existing wikitext functionality.
If you just want to see how the TW internals work you could have a closer look how widgets work.
In TW everything is driven by the “refresh” mechanism, which is automatically triggered as soon as you change a tiddler content in the store.
Changes to the tiddler store are usually driven by user interaction with “buttons” and “action widgets”. … So user actions change the tiddler content, which in turn automatically updates the UI. …
The internal tiddler store is immutable. So changing tiddlers is only possible writing a completely new tiddler. Overwriting a tiddler is done in the following way. – read tiddler content – modify the content – write tiddler with the same or a new title. Once the store is updated a “change” event is fired by the core. All widgets that depend on the tiddler content that has been changed, trigger their .refresh() function, which may write new HTML output to the DOM.
… So it really depends, what you want to do. … If you could be more specific about your usecase, I could probably point you in the right direction in the core code.
-mario