Passing macro output to another macro?

176 views
Skip to first unread message

Petri M.

unread,
Nov 23, 2020, 6:51:59 AM11/23/20
to TiddlyWiki
I can't figure this one out. I have a simple task list which I populate via <<list-tagged-draggable>> macro with a template:

<$checkbox tag="Task done"></$checkbox>
<$link to=<<currentTiddler>>>
<$view field="title"/>
</$link>

and this works fine. However, I would like to add to this template a part which adds another checkbox list for subtasks, so tasks with the same title as the task in question. Something like this works:

<$list filter="[tag<currentTiddler>]">
<br>
@@margin-left:10px;
<$checkbox tag="Task done"></$checkbox>
<$link to=<<currentTiddler>>>
<$view field="title"/>
</$link>
@@
</$list>

But I would like to have the sublist be draggable just like my parent list, hence it should be populated via the <<list-tagged-draggable>> macro. However, apparently I cant use <$list-tagged-draggable> </$list-tagged-draggable> because it does nothing, so I can't use the same format as in the example. Then I tried to use the macro itself with something like <<list-tagged-draggable tag:<<currentTiddler>>>> but this does not work. I tried to put the macro in a helper macro:

\define childlist(tag:"asd")
<<list-tagged-draggable tag:$tag$>>
\end

but I could not figure out on how the hell do I pass the output of the <<currentTiddler>> to this macro. I tried using $tag$, $(tag)$ and calling with <<currentTiddler>> and with $(currentTiddler)$ but nothing seem to work.

Can someone shine some light on this issue?

TW Tones

unread,
Nov 23, 2020, 5:03:46 PM11/23/20
to TiddlyWiki
Petrie,

If the list you wish to make draggable is the list of items tagging the parent, then you need to name the parent. In your example the currentTiddler changes, you could use the variable=varname on your $list so you can reference both the "sub tiddlers" and parent.

Another option is to use <<$macrocall $name=tag tag=<<tagname>> /> because the tag pill list is draggable. or  {{||$:/core/ui/EditTemplate/tags}}  to act on currentTiddler.

  • This will permit spaces ion tags <<list-tagged-draggable tag:"$tag$">>
  • <$link /> is the same as
    • <$link to=<<currentTiddler>>>
      <$view field="title"/>
      </$link>  

Tones

Petri M.

unread,
Nov 25, 2020, 8:53:59 AM11/25/20
to TiddlyWiki
Hi Tones,

Ohh thank you so much! I looked into the <$macrocall/> and tried to use it directly with the <<list-tagged-draggable>> macro and it worked perfectly. Well almost perfectly.

There is one issue. If I use <$macrocall $name="list-tagged-draggable" tag=<<currentTiddler>>/> then everything works fine and I am able to make subtasks of subtasks by just dragging them, which is exactly what I want. However, I cannot figure out on how to do the indentation. Inline css with @@margin-left:10px ... @@ does absolutely nothing. I can fix this by using something like
<$macrocall $name="list-tagged-draggable" itemTemplate="TODO task list template" tag=<<currentTiddler>>/> where I add the inline css in the template file itself. But now I lose the ability to make subtasks of subtasks. I would like to have the indentation so that each subtask is slightly indented so it is easier to see.

ps. though I do have to say that I did not undertand much about the rest of your comment. Did you mean that I could use <<$macrocall $name=tag tag=<<tagname>> /> or {{||$:/core/ui/EditTemplate/tags}} in my example code that I said works? What did you mean by all the bullet points? 

BR,
Petri M

Petri M.

unread,
Nov 25, 2020, 9:29:17 AM11/25/20
to TiddlyWiki
Oh and apparently using <$macrocall $name="list-tagged-draggable" itemTemplate="TODO task list template children" tag=<<currentTiddler>>/> will break the tags if the currentTiddler has spaces in its name. Putting quotes around the macro <<currentTiddler>> will just tag it with "<<currentTiddler>>" and not with "this is my current tag".

BR,
Petri M

TW Tones

unread,
Nov 25, 2020, 5:15:51 PM11/25/20
to TiddlyWiki
Petri,

I am only starting to make use of the drag and drop features myself. In this case you are using the macro  list-tagged-draggable but you can build your own. Its is defined in $:/core/macros/list

I suspect the inability to use a tiddler title with spaces may be a design weakness of the macro.

A quick solution to current tiddler with spaces may be tag={{{ [<currentTiddler>] }}}

Tones

P M

unread,
Nov 26, 2020, 7:08:42 AM11/26/20
to tiddl...@googlegroups.com
Hello Tones,

Thank you for the input. I did notice that the issue with spaces in tags was of my own doing, apparently I messed something up when I was trying to make drag-and-dropping from list to list to remove the tag of the old list and replace it with the tag of the new list.

Everything is working now in an empty tiddlywiki!

I was thinking of not messing with the drag-and-drop macro and just figure out how to make a filter which only gives me the tiddlers I want. I have been trying to figure out how I can make a filter which returns tiddlers with tag "Task", but only if there are no other tags. So if I have a tiddler "Parent" with a tag "Task" and a tiddler "Child" with tags "Parent" and "Task", then the filter would only give me the "Parent" tiddler. Seems like a very simple thing but I can't figure it out. I was hoping I could've just made a filter that finds all the tiddlers with the tag "Task" and then removes everything that has any tags in addition to "Task".

Any ideas? :)

-Petri

--
You received this message because you are subscribed to a topic in the Google Groups "TiddlyWiki" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/tiddlywiki/d0iwy82Uy5c/unsubscribe.
To unsubscribe from this group and all its topics, send an email to tiddlywiki+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/edcc979a-db9d-4611-a836-3913ef39af65n%40googlegroups.com.

TW Tones

unread,
Nov 26, 2020, 5:37:20 PM11/26/20
to TiddlyWiki
Petri,

Nice code pattern you are suggesting to test if there is one tag, however this will not work if you decide to organise the same tiddlers with additional tags. 

However if you want to go ahead remember, tags have special handling in tiddlywiki, but at the very same time the tags field is a field like any other. Thus if all tags (the 'tags' field) match's all tags.
I have not yet reproduced this today. I will provide the exact filter if I find it.

The TOCP plugin allows you to instead use the parent field to store the parent rather than tags, this would be better in your case.

Regards
Tones

P M

unread,
Nov 27, 2020, 10:05:46 AM11/27/20
to tiddl...@googlegroups.com
Hi Tones,

I am now trying to do this with <<list-links-draggable>> instead of using tags. I was thinking that maybe it would be easier to just use fields for this but now I am not that sure...

Do you know if there is a variable which stores the name of the tiddler from which an item is being dragged from? Like actionTiddler has the name of the tiddler being dragged, and targetTiddler (I think?) has the name of where I am dragging it. I would like to remove an item from a list when it is being dragged away from the dropzone. So if I have a tiddler "Parent" and a tiddler "Child", where the tiddler "Parent" has a field "list" with "Child" in it. So it would be

* Parent
    * Child

And now if I drag the "Child" away from the "Parent", I would like to automatically change the "list" field of Parent to reflect that "Child" is no longer its child.

-Petri

clutterstack

unread,
Nov 28, 2020, 11:59:00 PM11/28/20
to TiddlyWiki
Hi Petri,

I wonder if you could use list-links-draggable with a template that has an explicit draggable widget in it. The draggable widget has an attribute "startactions" that I have used in macros to store a "parent" tiddler title into a field, so that I can shift-drag a tiddler to move it from one list to another. I haven't tried it in conjunction with list-links-draggable, though.

Best,
Chris
Reply all
Reply to author
Forward
0 new messages