diff --git a/core/modules/widgets/action-createtiddler.js b/core/modules/widgets/action-createtiddler.js index 879f0d68d..d1d1786f7 100644 --- a/core/modules/widgets/action-createtiddler.js +++ b/core/modules/widgets/action-createtiddler.js @@ -9,7 +9,7 @@ Action widget to create a new tiddler with a unique name and specified fields. (function(){ /*jslint node: true, browser: true */ -/*global $tw: false */ +/*global $tw:false, require:false, exports:false */ "use strict"; var Widget = require("$:/core/modules/widgets/widget.js").widget; @@ -36,9 +36,15 @@ Compute the internal state of the widget */ CreateTiddlerWidget.prototype.execute = function() { this.actionBaseTitle = this.getAttribute("$basetitle"); + this.hasBase = !!this.actionBaseTitle; this.actionSaveTitle = this.getAttribute("$savetitle"); this.actionSaveDraftTitle = this.getAttribute("$savedrafttitle"); this.actionTimestamp = this.getAttribute("$timestamp","yes") === "yes"; + //Following params are new since 5.1.22 + this.actionTemplate = this.getAttribute("$template"); + this.useTemplate = !!this.actionTemplate; + this.actionOverwrite = this.getAttribute("$overwrite","no"); + }; /* @@ -57,7 +63,7 @@ CreateTiddlerWidget.prototype.refresh = function(changedTiddlers) { Invoke the action associated with this widget */ CreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) { - var title = this.wiki.generateNewTitle(this.actionBaseTitle), + var title = this.wiki.getTiddlerText("$:/language/DefaultNewTiddlerTitle"), // Get the initial new-tiddler title fields = {}, creationFields, modificationFields; @@ -70,7 +76,22 @@ CreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) { creationFields = this.wiki.getCreationFields(); modificationFields = this.wiki.getModificationFields(); } - var tiddler = this.wiki.addTiddler(new $tw.Tiddler(creationFields,fields,modificationFields,{title: title})); + if(this.hasBase && this.actionOverwrite === "no") { + title = this.wiki.generateNewTitle(this.actionBaseTitle); + } else if (this.hasBase && this.actionOverwrite === "yes") { + title = this.actionBaseTitle + } + // NO $basetitle BUT $template parameter is available + // the title MUST be unique, otherwise the template would be overwritten + if (!this.hasBase && this.useTemplate) { + title = this.wiki.generateNewTitle(this.actionTemplate); + } else if (!this.hasBase && !this.useTemplate) { + // If NO $basetitle AND NO $template use initial title + // DON'T overwrite any stuff + title = this.wiki.generateNewTitle(title); + } + var templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {}; + var tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title})); if(this.actionSaveTitle) { this.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable("currentTiddler")); } diff --git a/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 1.tid b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 1.tid new file mode 100644 index 000000000..5e4e84432 --- /dev/null +++ b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 1.tid @@ -0,0 +1,26 @@ +created: 20200131142401129 +modified: 20200131152023958 +tags: ActionCreateTiddlerWidget +title: ActionCreateTiddlerWidget Example 1 +type: text/vnd.tiddlywiki + +\define testCreate() +<$action-createtiddler /> +\end + +This example will create "New Tiddler", "New Tiddler 1", " New Tiddler 2" and so on + +``` +\define testCreate() +<$action-createtiddler /> +\end + +<$button actions=<> > +Create Tiddler + +``` + +<$button actions=<> > +<$action-setfield $tiddler="$:/state/tab/sidebar-1206596165" text="$:/core/ui/SideBar/Recent"/> +Create Tiddler + - Clicking this button, will also open the Right sidebar: Recent tab diff --git a/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 2.tid b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 2.tid new file mode 100644 index 000000000..089ab4763 --- /dev/null +++ b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 2.tid @@ -0,0 +1,28 @@ +created: 20200131144828713 +modified: 20200131152102232 +tags: ActionCreateTiddlerWidget +title: ActionCreateTiddlerWidget Example 2 +type: text/vnd.tiddlywiki + +\define testCreate() +<$action-createtiddler $basetitle={{$:/language/DefaultNewTiddlerTitle}} $overwrite="yes"/> +\end + +This example will use the base title defined in [[$:/language/DefaultNewTiddlerTitle]]. + +It will overwrite the tiddler, if the button is clicked several times. + +``` +\define testCreate() +<$action-createtiddler $basetitle={{$:/language/DefaultNewTiddlerTitle}} $overwrite="yes"/> +\end + +<$button actions=<> > +Create Tiddler + +``` + +<$button actions=<> > +<$action-setfield $tiddler="$:/state/tab/sidebar-1206596165" text="$:/core/ui/SideBar/Recent"/> +Create Tiddler + - Clicking this button, will also open the Right sidebar: Recent tab diff --git a/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 3.tid b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 3.tid new file mode 100644 index 000000000..325499fc0 --- /dev/null +++ b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 3.tid @@ -0,0 +1,28 @@ +created: 20200131145355658 +modified: 20200131152045990 +tags: ActionCreateTiddlerWidget +title: ActionCreateTiddlerWidget Example 3 +type: text/vnd.tiddlywiki + +\define testCreate() +<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"/> +\end + +This example will uses a base-title and a template: [[ActionCreateTiddlerWidget Template]] + +It will create: "base", "base 1", "base 2" and so on + +``` +\define testCreate() +<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template"/> +\end + +<$button actions=<> > +Create Tiddler + +``` + +<$button actions=<> > +<$action-setfield $tiddler="$:/state/tab/sidebar-1206596165" text="$:/core/ui/SideBar/Recent"/> +Create Tiddler + - Clicking this button, will also open the Right sidebar: Recent tab diff --git a/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 4.tid b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 4.tid new file mode 100644 index 000000000..b116ee5e7 --- /dev/null +++ b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Example 4.tid @@ -0,0 +1,28 @@ +created: 20200131150229551 +modified: 20200131152051626 +tags: ActionCreateTiddlerWidget +title: ActionCreateTiddlerWidget Example 4 +type: text/vnd.tiddlywiki + +\define testCreate() +<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template" aa="new field aa" bb="new field bb" /> +\end + +This example will uses a base-title: "base" and a template: [[ActionCreateTiddlerWidget Template]]. + +There will be new fields "aa" and "bb" which are added to the new tiddlers. + +``` +\define testCreate() +<$action-createtiddler $basetitle="base" $template="ActionCreateTiddlerWidget Template" aa="new field aa" bb="new field bb" /> +\end + +<$button actions=<> > +Create Tiddler + +``` + +<$button actions=<> > +<$action-setfield $tiddler="$:/state/tab/sidebar-1206596165" text="$:/core/ui/SideBar/Recent"/> +Create Tiddler + - Clicking this button, will also open the Right sidebar: Recent tab diff --git a/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Template.tid b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Template.tid new file mode 100644 index 000000000..d737f5677 --- /dev/null +++ b/editions/tw5.com/tiddlers/ActionCreateTiddlerWidget Template.tid @@ -0,0 +1,8 @@ +created: 20200131145608087 +modified: 20200131150801682 +tags: test +title: ActionCreateTiddlerWidget Template +type: text/vnd.tiddlywiki +x: x + +This is a tiddler used as a template in: [[ActionCreateTiddlerWidget Example 3]] \ No newline at end of file diff --git a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid index ed2ffbb90..ca02c2285 100644 --- a/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/ActionCreateTiddlerWidget.tid @@ -1,6 +1,6 @@ caption: action-createtiddler created: 20161020152745942 -modified: 20190604113017742 +modified: 20200131151847266 tags: Widgets ActionWidgets title: ActionCreateTiddlerWidget type: text/vnd.tiddlywiki @@ -23,9 +23,38 @@ The ''action-createtiddler'' widget is invisible. Any content within it is ignor |$savetitle |A text reference identifying a field or index into which the title of the newly created tiddler will be stored after it is created | |$savedrafttitle |<<.from-version "5.1.20">> A text reference identifying a field or index into which the draft title associated with the newly created tiddler will be stored after it is created. This is useful when using a sequence of action widgets to create a new tiddler, put it into edit mode, and position it within the list of its parent tag | |$timestamp |Specifies whether the timestamp(s) of the target tiddler will be updated (''modified'' and ''modifier'', plus ''created'' and ''creator'' for newly created tiddlers). Can be "yes" (the default) or "no" | +|$template |<<.from-version "5.1.22">> The title of a template tiddler, that will be used to create a new tiddler | +|$overwrite |<<.from-version "5.1.22">> If set to "yes", it will overwrite existing tiddlers. ''Be careful!'' | |//{any attributes not starting with $}// |Each attribute name specifies a field to be created in the new tiddler | ! Examples -<$macrocall $name='wikitext-example-without-html' -src={{ActionCreateTiddlerWidget Example}}/> +<<< +<$macrocall $name='wikitext-example-without-html' src={{ActionCreateTiddlerWidget Example}}/> +<<< + +--- + +<<< +<$transclude tiddler="ActionCreateTiddlerWidget Example 1" mode=block/> +<<< + +--- + +<<< +{{ActionCreateTiddlerWidget Example 2}} +<<< + +--- + +<<< +{{ActionCreateTiddlerWidget Example 3}} +<<< + +--- + +<<< +{{ActionCreateTiddlerWidget Example 4}} +<<< + +