“Headless tag-drags”: default D&D behavior for tag pill leaves home tiddler behind. Should it?

Dear all,

I’ve gotten used to this behavior, but I think it’s worth checking in on as our practices evolve.

Dragging a tag pill from one wiki to another currently serves to copy over all the tiddlers under that tag. However, it does not copy over the tag tiddler itself — the “home base” node for the tag — even when that home node exists. I think of this as the “headless tag-drag” (with English-slang pun intended). I imagine the behavior is left over from when tags didn’t do much besides dress up as colorful pills below the subtitle of tiddlers so tagged. If they had content themselves, it was usually limited to housing a draggable list-order in the list field, which usually had little non-cosmetic function. Is that right?

But whenever there really is a tiddler there, shouldn’t the presumption now be that its content is integrally related, and hence of potential interest (by default) to someone dragging the tag pill?

Is there any advantage? Maybe there’s some convenience associated with the current “headless” drag behavior. For example, I could drag over the tag pill $:/tags/Stylesheet from someone else’s wiki, and get all the remote tiddlers so tagged, without overwriting the home tiddler I’ve set up for $:/tags/Stylesheet (with its list field, its tag color, whatever else I’ve set up already).

Disadvantage #1: Many of us have been developing systemic intensive uses for the “home base” node for all or most tags in a wiki. I’d like to be able to say: “Drag this tag pill over to your wiki, and you’ll have all the things.” But instead I need to say, “Drag this tag pill over to your wiki, and ALSO come back here and drag over this tag-home tiddler title itself, so that you have all the things.”

Disadvantage #2: Sometimes the list order details housed at the tag’s home tiddler are really crucial to making something work, in ways that a novice user may not realize. I’m thinking especially of how cascades work, and how easily they’re broken if someone ends up with the vertebrae, but not the spine that helps hold them in a well-ordered string.

Awkward workaround: Perhaps someone will suggest that I self-tag a tiddler whenever the content at the tag’s home-base tiddler is a helpful part of the package, so that it’s not left behind when the tag-pill is dragged. This solution makes me cringe on lots of levels. For one thing, a certain view template often make sense for every tiddler tagged a certain way, but not for the home tiddler of that tag. Also, self-tagging just seems ripe for setting up unwitting problems down the road.)

We already have an import dialog that allows something to be de-selected…

It seems more friendly to have the tag home tiddler included by default — and de-selectable in the import dialogue — than to simply leave it behind, by default.

Apart from the marginal cases where someone’s habits might need to be tweaked (to scan for the incoming tag-home tiddler if it exists, and de-select if necessary, which probably would matter only when it’s also a conflicting tiddler — and hence the kind of thing we scan for at import time anyway)… I don’t imagine there’d be any backward-compatibility reasons to stick with “headless tag-drags”… What do you all think?

Is it worth developing the “head-inclusive tag drag” (maybe not by that name!) as a plug-in, and playing with it for a while, see how it feels?

3 Likes

Right.

Right. The visually obvious downside is you lose any COLOR applied in the Mother wiki to the “Root Tag”.

Couple of points …

1 - how we language this behaviour is not so obvious yet. It took me YEARS to grasp there is such a thing as a root “tag definer”.

2 - on D&D the tag thing is VERY powerful and good. Maybe a “root”, if it exits, should go too?

Thoughts
TT

1 Like

That’s a helluva treatise. I’m in. :trophy:

Btw, I think tag-tiddlers first appeared with Monkey Tagging (or was it taggly tagging?) in TW classic… by one of the Baird bros, I think. (@simon?)

1 Like

He(s) of TiddlyHost? Genius! (at least @simon).

Hi, I think you should create a feature request at GitHub. I think it is a valid behaviour to add an existing “tag tiddler” to the list which is dragged.

IMO the request should be 1 or 2 paragraphs only. IMO the first 2 would do, if reworded a bit.

-m

3 Likes

@Springer although perhaps trivial I see this as a not backwardly compatible change. In such cases it is best to move forward. Here is my idea;

  • Leave he current behaviour in place and modify the tag macro as follows;
  • Include an option to add to the tag tiddler eg; payload-filter field in which one would add something like [<currentTag>] [tag<currentTag>] if you want to include the tag along with the tagged when dragging and dropping. Other wise it uses the default behaviour.
  • I would consider the option to add a condition field at the same time as POC’ed here https://conditional-elements.tiddlyhost.com/
  • The above are in keeping with the current model of setting a color on the tag tiddler.
  • I would also like to see a way to alter the default listing on the tag pill as well, for example on a todo tag, it would be nice to have a list-filter that if exists uses it rather than [tag<tagname>] use an alternative like [tag<tagname>!tag[done]] to only list still to do in the tag pill.

Of course all these will be easier to implement in my “filter pills solution”. I may have time to publish that soon.

I can see an argument these changes are changing the way tag pills work, but my view is we would be providing only “opt in changes”. In many ways it is the user designer who chooses what a tag represents anyway, so I think it fair for them to change the behaviour as well.

  • Perhaps with some indicators displayed, in the event these other options are applied.

As another fan of fully-loaded tag tiddlers, I believe this makes a great deal of sense.

I also would love a separate procedure to allow us to download the tiddlers for an arbitrary filter:

<<draggable-link
    filter:"[tag[Person]] [tag[Headshot]] Person $:/_/my/templates/Person"  
    text:"People"
>>

I’m not following. What root are you talking about?

I’m curious as to why. As an open-source project maintainer, I personally always prefer detailed feature requests. Is there a norm here that they should be short?

I think in the dynamic environment that is TW, we have to accept some some degree of backward incompatibility; else we’d be too constrained in practically any behavior we allow ourselves to add. I think this might apply here. However, I love your implementation idea. A payload filter field would make great sense. I would simply have the default value, if that field is not specified, include the current tiddler.

See https://tiddlywiki.com/#WidgetMessage%3A%20tm-download-file
which accepts undocumented exportFilter and filename parameters, like this:

<$let tidsFilter="...your filter here..." downloadFilename="mytids.json">
<$button dragFilter=<<tidsFilter>>
   tooltip="drag-and-drop for direct import, OR click to download JSON">
   import/download
<$action-sendmessage $message="tm-download-file"
   $param="$:/core/templates/exporters/JsonFile"
   exportFilter=<<tidsFilter>> filename=<<downloadFilename>> />
</$button>

enjoy,
-e

1 Like

Simples: In the archaeology and the structuration of TW it is clear that TAG COLOR, at least, needs a HOME to record it.

I call this at the “ROOT Tag Address” as all of her Tag children get her defined “color:” field value.

IMO we might benefit from a linguistic differentiation between …

  1. A Tag
  2. A Tag’s Root/Home (if she exists) [p.s. she is, normally, herself UNtagged. That is WHY she can’t be D&D in set.]

TT

erm. @EricShulman. Just wondering. Does this need a “$let” closure? [p.s. it seemed to work without it??]

Issues should be actionable. It’s OK to tell a story in the forum, but as a developer a link to this post with "More details can be found at: " should be good enough.

As a developer what I like, is:

  1. A description of the status quo
  2. A description what is expected
  3. A description why it may be important for everyone

Eg:

  1. If a tag-pill is dragged from a source wiki to a target wiki all the tiddlers will be imported to the target. But if the “tag tiddler” exists it is not imported.

  2. As a user I would expect that all relevant tiddlers are dragged and dropped if the tag-tiddler is a real tiddler.

  3. Tag tiddlers can contain some additional descriptions about the tag. The list-field contains the information how a “tag-list” should be sorted. So this information should not be lost.


For me this would be enough info, to know what’s expected.

It think a good start for feature requests and also for issues is: “As a user I …”, “As a content creator I …” or "As a plugin developer I … "

It expresses your personal opinion, which is always OK.

Since the example above only contains 3 major points, humans can keep them in mind. So they are not overwhelming. IMO it’s actionable

just some thoughts
-mario

actionable

Relating to or being information that allows a decision to be made or action to be taken.

4 Likes

Honestly, on this, the lack on D&D of Tags is only custom loss of color (because that is set in an untagged Tiddler).

Otherwise it is brilliant!

Answering my own thoughts …

I tagged the “Root Colorer” at $:/tags/tt/foobarista with $:/tags/tt/foobarista. It D&D’s fine. It moves and colors $:/tags/tt/foobarista tagged Tiddlers, as you’d expect.

SO? All of this is a NON-issue?

Rather more: It might be about about DUCUMENTING some of the more esoteric aspects of Taggery in TW?

The actual mechanism is brilliant!

The problem for tags, that are tagged with “itself” is, that they define a circular connection, which can cause all sorts of problems.

Especially the TOC-macros have to go a long way to avoid endless loops. So having a “clean” tagging structure can be an advantage. But as always it depends on personal preferences.

For strict syntax compliance, there should be a closing </$let>.

However… if the posted code occurs within a macro/procedure definition, then the opening $let is automatically “closed” when the end of the macro/procedure is reached. Similarly, if the posted code occurs within tiddler wikitext, the $let is automatically closed when the end of the tiddler is reached.

Note that this only works if the opening $let is not nested within some other containing widget body (i.e., it is at the “top level” of the macro/procedure/tiddler syntax).

For example, suppose you had code like:

<$list filter="[...some filter that acts as a conditional around the code...]">
   <$let somevar="some value here">
   ... more code ...
  </$let>
</$list>

Then you can safely omit BOTH the closing /$let and /$list. BUT… if you DO keep the closing /$list, then you MUST also keep the closing /$let. Otherwise, the syntax would contain an unterminated $let WITHIN the enclosing <$list>...</$list>.

Hope this makes sense…

-e

It does.

Very clear! Useful to know!


Tags: #Tips #EsotericBrilliance #Useful

Right. Endless loops are not good. I would want to avoid them.

The issue remains that, basically, COLOR, is an added dimension that IS semantic in receiving wiki that normally gets lost.

SO on D&D of a tag maybe it could include the untagged “root” with the color setting IF it exists?
OR is that too complicated?

TT

Its less complicated to call this “the tags tiddler” :nerd_face:

IMO it depends, if we categorize the issue as a bug or a feature request.

Thinking about it a bit more, I personally tend in the direction of a bug, that should be fixed.

I did have a similar problem with my bundler-plugin, where the TitleList also does not contain the bundler configuration tiddler itself. So I did add it to d&d and the export functions by default.

The import dialogue allows the user to disable elements if needed. So IMO importing 1 more tiddler does not hurt, even if it does not contain important info.

If the overwrite “warning” is active, users have to check the content of the incoming tiddlers anyway.

Broheim, does she always exist?

How will you explain tags that are “un-rooted”?