I have a Task list, consisting of all tiddlers tagged "Task".
As I create or modify a lengthy tiddler, I would like to extract new tasks automatically.
This is how I imagine it working
I have been consistently typing carriage return ;Task: Blah blah carriage return
I would like the new (tiddler tagged with "Task") to be titled with the following contents extracted from the lengthy tiddler:
Wherever <cr>;Task: "text to become a new task" <cr> is encountered
How would you do that? Should I use "splitbefore"? (but that is for titles...)
JWHoneycutt
/*\title: $:/core/modules/filters/get.jstype: application/javascriptmodule-type: filteroperator
Filter operator for replacing tiddler titles by the value of the field specified in the operand.
\*/(function(){
/*jslint node: true, browser: true *//*global $tw: false */"use strict";
/*Export our filter function*/exports.get = function(source,operator,options) { var results = []; source(function(tiddler,title) { if(tiddler) { var value = tiddler.getFieldString(operator.operand); if(value && operator.suffix !== "lines") { results.push(value); } else if(value && operator.suffix === "lines") { var lines = value.split('\n'); for(var i = 0; i < lines.length; i++) { results.push(lines[i]); } } } }); return results;};
})();
[[mytiddler]get:lines[text]][[mytiddler]get:lines[text]removeprefix[;Task:]]<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>><<extract-tasks-from-tiddler>><$action-sendmessage $message="tm-add-tag" $param={{$:/temp/NewTagName}}/><$action-deletetiddler $tiddler="$:/temp/NewTagName"/><$action-sendmessage $message="tm-add-field" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/><$action-deletetiddler $tiddler="$:/temp/newfieldname"/><$action-deletetiddler $tiddler="$:/temp/newfieldvalue"/><$action-sendmessage $message="tm-save-tiddler"/><$list filter="[<tv-config-toolbar-icons>prefix[yes]]">{{$:/core/images/done-button}}</$list><$list filter="[<tv-config-toolbar-text>prefix[yes]]"><span class="tc-btn-text"><$text text={{$:/language/Buttons/Save/Caption}}/></span></$list></$button></$fieldmangler>
\define actions()<<extract-tasks-from-tiddler>><$action-sendmessage $message="tm-add-tag" $param={{$:/temp/NewTagName}}/><$action-deletetiddler $tiddler="$:/temp/NewTagName"/><$action-sendmessage $message="tm-add-field" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/><$action-deletetiddler $tiddler="$:/temp/newfieldname"/><$action-deletetiddler $tiddler="$:/temp/newfieldvalue"/><$action-sendmessage $message="tm-save-tiddler"/>\end\define frame-classes()tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\end<div class=<<frame-classes>> data-tiddler-title=<<currentTiddler>>><$fieldmangler><$set name="storyTiddler" value=<<currentTiddler>>><$keyboard key="((cancel-edit-tiddler))" message="tm-cancel-tiddler"><$keyboard key="((save-tiddler))" actions=<<actions>>><$list filter="[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]" variable="listItem"><$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]"><$transclude tiddler=<<listItem>>/></$set></$list></$keyboard></$keyboard></$set></$fieldmangler></div>
\define extract-tasks-from-tiddler()<$list filter="[[$(storyTiddler)$]get:lines[text]removeprefix[;Task:]!prefix[ ]] [[$(storyTiddler)$]get:lines[text]removeprefix[;Task:]prefix[ ]removeprefix[ ]]" variable="taskLine"><$list filter="[<taskLine>is[missing]]"><$action-createtiddler $basetitle=<<taskLine>>/><$fieldmangler tiddler=<<taskLine>>><$action-sendmessage $message="tm-add-tag" $param="Task"/></$fieldmangler></$list></$list>\end\define extract-tasks-from-tiddler()<$list filter="[[$(storyTiddler)$]get:lines[text]removeprefix[;Task:]!prefix[ ]] [[$(storyTiddler)$]get:lines[text]removeprefix[;Task:]prefix[ ]removeprefix[ ]]" variable="taskLine"><$list filter="[<taskLine>is[missing]]"><$action-createtiddler $basetitle=<<taskLine>>/><$action-setfield $tiddler=<<taskLine>> tags="Task"/></$list></$list>\endThis thing could have been done with the regexps filter. https://github.com/Jermolene/TiddlyWiki5/pull/2963
Something like this would be useful in the core.
-- Mark