allow unusedtitle macro to use the prefix parameter and fix wiki.generateNewTitle() (#5361)

new-json-store-area
Mario Pietsch 2021-05-02 20:26:50 +02:00 zatwierdzone przez GitHub
rodzic 3f98686153
commit cf56a17f28
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
6 zmienionych plików z 154 dodań i 18 usunięć

Wyświetl plik

@ -2,6 +2,7 @@
title: $:/core/modules/macros/unusedtitle.js
type: application/javascript
module-type: macro
Macro to return a new title that is unused in the wiki. It can be given a name as a base.
\*/
(function(){
@ -10,25 +11,25 @@ Macro to return a new title that is unused in the wiki. It can be given a name a
/*global $tw: false */
"use strict";
/*
Information about this macro
*/
exports.name = "unusedtitle";
exports.params = [
{name: "baseName"},
{name: "options"}
{name: "separator"},
{name: "template"}
];
/*
Run the macro
*/
exports.run = function(baseName, options) {
exports.run = function(baseName,separator,template) {
separator = separator || " ";
if(!baseName) {
baseName = $tw.language.getString("DefaultNewTiddlerTitle");
}
return this.wiki.generateNewTitle(baseName, options);
// $tw.wiki.generateNewTitle = function(baseTitle,options)
// options.prefix must be a string!
return this.wiki.generateNewTitle(baseName, {"prefix": separator, "template": template});
};
})();

Wyświetl plik

@ -294,6 +294,47 @@ exports.slowInSlowOut = function(t) {
return (1 - ((Math.cos(t * Math.PI) + 1) / 2));
};
exports.formatTitleString = function(template,options) {
var base = options.base || "",
separator = options.separator || "",
counter = options.counter || "";
var result = "",
t = template,
matches = [
[/^\$basename\$/i, function() {
return base;
}],
[/^\$count:(\d+)\$/i, function(match) {
return $tw.utils.pad(counter,match[1]);
}],
[/^\$separator\$/i, function() {
return separator;
}],
[/^\$count\$/i, function() {
return counter + "";
}]
];
while(t.length){
var matchString = "";
$tw.utils.each(matches, function(m) {
var match = m[0].exec(t);
if(match) {
matchString = m[1].call(null,match);
t = t.substr(match[0].length);
return false;
}
});
if(matchString) {
result += matchString;
} else {
result += t.charAt(0);
t = t.substr(1);
}
}
result = result.replace(/\\(.)/g,"$1");
return result;
};
exports.formatDateString = function(date,template) {
var result = "",
t = template,

Wyświetl plik

@ -190,15 +190,25 @@ exports.getChangeCount = function(title) {
/*
Generate an unused title from the specified base
options.prefix must be a string
*/
exports.generateNewTitle = function(baseTitle,options) {
options = options || {};
var c = 0,
title = baseTitle;
while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {
title = baseTitle +
(options.prefix || " ") +
(++c);
title = baseTitle,
template = options.template,
prefix = (typeof(options.prefix) === "string") ? options.prefix : " ";
if (template) {
// "count" is important to avoid an endless loop in while(...)!!
template = (/\$count:?(\d+)?\$/i.test(template)) ? template : template + "$count$";
title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":c});
while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {
title = $tw.utils.formatTitleString(template,{"base":baseTitle,"separator":prefix,"counter":(++c)});
}
} else {
while(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {
title = baseTitle + prefix + (++c);
}
}
return title;
};

Wyświetl plik

@ -1,5 +1,6 @@
caption: unusedtitle
created: 20210104143546885
modified: 20210427184035684
tags: Macros [[Core Macros]]
title: unusedtitle Macro
type: text/vnd.tiddlywiki
@ -10,7 +11,30 @@ It uses the same method as the create new tiddler button, a number is appended t
!! Parameters
;baseName
: A string specifying the desired base name, defaulting to `New Tiddler`
; baseName
: A string specifying the desired base name, defaulting to `New Tiddler`. <br>The default setting can be adjusted in the $:/ControlPanel '': Info : Basics - tab.''
<<.macro-examples "unusedtitle">>
; separator
: <<.from-version "5.1.24">> An ''optional'' string specifying the separator between baseName and the unique number. eg: `separator:"-"`. Defaults to a space: `" "`. If you need an empty separator use the ''template''!
; template
: <<.from-version "5.1.24">> A ''optional'' template string can be used to allow you maximum flexibility. If the template string is used, there will always be a counter value.
!! Template String
; `$basename$`
: This variable will be replaced by the content of the ''baseName'' parameter
; `$separator$`
: This variable will be replaced by the ''separator'' parameter
;`$count$`
: This variable will be createad automatically and is a counter starting with 0
;`$count:4$`
: This variable will be createad automatically and starts at 0000
: `:4` represents the number of digits
!! Examples
<<list-links "[prefix[unusedtitle Macro (E]!sort[]]">>

Wyświetl plik

@ -0,0 +1,51 @@
created: 20210227212730299
modified: 20210427184057456
tags:
title: unusedtitle Macro (Examples 1)
type: text/vnd.tiddlywiki
\define testCreate()
<$action-createtiddler $basetitle=<<unusedtitle template:"$count:2$-new">>/>
\end
\define testCreate1()
<$action-createtiddler $basetitle=<<unusedtitle baseName:"new" separator:"-" template:"$count:2$$separator$$basename$">>/>
\end
\define testNew()
<$action-sendmessage $message="tm-new-tiddler" title=<<unusedtitle baseName:"new" template:"$count:2$-$basename$">> />
\end
```
<<unusedtitle template:"$count:2$-new">>
```
<$button actions=<<testCreate>> >
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
Create Tiddler
</$button>
```
<<unusedtitle baseName:"new" template:"$count:2$-$basename$">>
```
<$button actions=<<testNew>>>
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
New Tiddler
</$button>
```
<<unusedtitle baseName:"new" separator:"-" template:"$count:2$$separator$$basename$">>
```
<$button actions=<<testCreate1>>>
<$action-setfield $tiddler="$:/state/tab/sidebar--595412856" text="$:/core/ui/SideBar/Recent"/>
Create Tiddler
</$button>
---
<details>
<summary>Show the code</summary>
<pre><code><$view><pre><code>
</details>

Wyświetl plik

@ -1,7 +1,16 @@
created: 20210104143940715
modified: 20210228141241657
tags: [[unusedtitle Macro]] [[Macro Examples]]
title: unusedtitle Macro (Examples)
type: text/vnd.tiddlywiki
<$macrocall $name=".example" n="1" eg="""<<unusedtitle>>"""/>
<$macrocall $name=".example" n="2" eg="""<<unusedtitle AnotherBase>>"""/>
<$macrocall $name=".example" n="3" eg="""<<unusedtitle TiddlyWiki>>"""/>
''The following example works best if there is an open tiddler in draft mode, or there is a tiddler named "New Tiddler".'' So you can see the automatic numbering.
<$macrocall $name=".example" n="2" eg="""<<unusedtitle separator:"-">>"""/>
<$macrocall $name=".example" n="3" eg="""<<unusedtitle baseName:"anotherBase">>"""/>
<$macrocall $name=".example" n="4" eg="""<<unusedtitle baseName:"About" separator:"-">>"""/>
<$macrocall $name=".example" n="5" eg="""<<unusedtitle template:"$count:2$-test">>"""/>
---
Working buttons can be found at: [[unusedtitle Macro (Examples 1)]]. You'll have to examine the code to see, what's going on.