Hi SS

Great stuff, thank you! I like the way that you’ve gathered input from others 
and incorporated it smoothly, managing to keep a consistent tone of voice 
suitable for beginners.

As background, it might be helpful for me to explain a little of *why* widgets 
exists…

Consider a simple wiki with two tiddlers, Foo and Bar:

“Foo” contains “I am Foo. {{Bar}}”
“Bar” contains “I am Bar”

The result of rendering “Foo” should be “I am Foo. I am Bar”. So, a naive 
algorithm for wikification would take the content of “Foo”,  look for any 
double braces, and then replace them with the content of the tiddler they refer 
to. The processing would go something like this:

1. Get “I am Foo. {{Bar}}” from “Foo”
2. Replace “{{Bar}}” with the content of “Bar” yielding “I am Foo. I am Bar”

Now imagine that the text of “Bar” is changed to “I was Bar”, and we want to 
update the rendering. We can rerun the algorithm above and get “I am Foo. I was 
Bar”, but we have to regenerate the entire rendering, even though only one 
tiddler has changed.

Using TiddlyWiki interactively in the browser depends on making the refresh 
cycle as fast as possible. For example, when a button is clicked to trigger a 
dropdown it actually just sets a tiddler value in the store that causes the 
dropdown to be rendered when the display is refreshed. Thus we want to make the 
refresh cycle as fast as possible.

In particular, the goal is that, given the example above, when “Bar” changes we 
don’t need to re-render the entire tiddler “Foo”.

This is accomplished by building a render tree. The render tree for the example 
above would be:

* Text: “I am Foo. “
* Transclusion: “Bar”
** Text: “I am Bar”

Given that render tree, we can efficiently extract the text of the result by 
scanning the nodes of the tree and accumulating any “Text” nodes that we find.

If the tiddler “Bar” changes, then we need to scan the tree looking for any 
transclusions that reference that particular tiddler. Those nodes will need to 
be reconstructed from the new value of the tiddler, but the surrounding nodes 
can be left untouched.

So, that gives you the basis for a technical, developers explanation of a 
widget: they are the units by which content is refreshed.

There are a couple of further important details that shape the current design.

First, what we call parsing: this is the basic scanning of a block of text to 
find bits of wikitext syntax (e.g. finding the “{{Bar}}” transclusion in “Foo” 
above). The result of parsing is a tree that we then use to construct the 
render tree. As a basic optimisation, we cache the parse tree for a tiddler, 
and only regenerate it when the tiddler changes.

Secondly, each node in the render tree may render one or more DOM nodes that 
are attached to it.

With those details, you’ve got a lightning overview of how widgets work. It’s 
not suitable for beginners but it might help give you some background.

Best wishes

Jeremy


> On 7 Feb 2019, at 08:16, S. S. <[email protected]> wrote:
> 
> 
> It's taken a month of on-and-off giving it some attention.
> 
> Here's the result!
> 
> Widgets for Beginners 
> <https://00ss.github.io/documentation/tiddlywiki.html#Widgets%20for%20Beginners>
> 
> Feel free to thrash it and make it better by leaving some critical comments.
> 
> -- 
> 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] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/tiddlywiki 
> <https://groups.google.com/group/tiddlywiki>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/tiddlywiki/b86ff0f5-f9fb-478c-bbd7-4cdda2124a07%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/tiddlywiki/b86ff0f5-f9fb-478c-bbd7-4cdda2124a07%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
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/8A45BF52-DF2F-4E99-ABCB-92D453D36DB6%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to