Hi everyone,
I have been thinking for a while about the popup system after trying to fix
a bug I reported, and I think the popup system could benefit from a little
overhaul. I hope I'm not overreaching here - I would just really
appreciate some feedback on these ideas!
What circumstances are the popup system used in?
To start, I looked through all references to "popup" in the TiddlyWiki
codebase (not including non-official plugins). I found the plugin system
is used for these four UI patterns:
- Dropdowns (ex. search results, edit toolbar popups) - this is probably
the most common
- Menus (a special case of dropdown - ex. the export menu)
- Accordion UI pattern (ex. *$:/Manager*, plugin info, tiddler info when
you click "more > info" in the view toolbar)
- Dialogs (ex. the confirmation prompt when you try to delete tiddlers
matching a filter in *$:/AdvancedSearch*)
So, bearing those four use cases in mind...
What are the requirements of the popup system?
We need popups to open when we activate the corresponding UI element
This mostly corresponds to* <$edit-text> *and *<$button>* - but I don't see
why we should limit ourselves to these. I like keeping the current
shorthand - it makes the common case easy to do, plus it's backwards
compatible.
We need popups to close under certain conditions
In my opinion, a popup should close under two conditions:
- If I click on a UI element that completes the workflow that the popup
was summoned to complete (applies to dropdowns, menus, and dialogs). For
example:
- Clicking on a tag in the tag dropdown
- Clicking on a button in a "confirm" dialog popup
- Clicking on a tiddler in the "create wikitext link" dropdown
- If I click on or *otherwise grant focus* to an element outside of the
popup
- Dialogs are kind of the exception here - clicking outside of a
dialog should probably not close it, but I don't think it's the end of
the
world if it does
- Another exception is the "popup handle" - an input element that's
bound to the popup. A prime example of this is the search query edit
field
- clicking in it shouldn't close the search results
Clicking within a popup shouldn't close it, I think - which is contrary to
the current default behavior. I think most people would expect a popup to
stick around until they interact with it meaningfully, dimiss it with the
button they summoned it with, or click outside of it.
What would a new popup system look like?
I rather like the idea of a new action widget - *<$action-popup>* - to be
the common interface between wikitext and the popup mechanism. It can be
the plumbing upon which the higher-level interfaces offered by
*<$edit-text>* and *<$button>* are built.
A widget can be bound to a popup (similar to how *focusPopup* works now) -
clicking on a widget will not close its own popup (but *will* close others).
The current popup system currently maintains state in JS; I would really
like for the state to be maintained entirely in the tiddler store for
consistency purposes.
The current system supports nesting of popups - as far as I can tell, this
is only really used for popups that behave like menus, so maybe the right
thing to do is to break out a distinct "menu" widget. Doing so might
simplify state management quite a bit! It might also make sense to break
out a distinct "dialog" widget.
I'm tempted to tie certain bits of extra state to a popup - eg. the search
text for "create wikitext link", so that it gets cleared as well when a
popup is closed, but maybe that's trying to do too much.
Thinking Ahead
(I have no idea why it just decided to go double-space) There are some
other things that users might want popups to do someday; for example,
Tobias' appear plugin augments the popup system with some additional
behavior, and users might want features like tearoff menus in the future.
We can't predict *everything* everyone might want, but it might be a good
time to incorporate augmentations like Tobias' and identify other possible
uses for the popup system.
Thanks for reading! Please let me know if you have any suggestions, or if
you find flaws in my ideas! I'd be happy to undertake this work, as long
as it's a solution everyone's happy with.
-Rob
--
You received this message because you are subscribed to the Google Groups
"TiddlyWikiDev" 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/tiddlywikidev.
To view this discussion on the web visit
https://groups.google.com/d/msgid/tiddlywikidev/6c257911-599d-4d04-b51d-172a14075737%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.