mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-01-11 18:00:26 +00:00
Fix behaviour of new tiddler message
Resolves some inconsistencies over the behaviour of the new tiddler message under various circumstances. “new journal here” when a journal for today already exists now brings up the existing journal for editing, and adds the required tag. I’d be very grateful for any testing of the behaviour here: try using new tiddler, clone tiddler, new here, new journal here, and new journal in various combinations (eg with the draft not existing, already existing, open or closed etc), and let me know of any peculiarities.
This commit is contained in:
parent
1e02a9f0db
commit
a8d83096d3
@ -373,43 +373,57 @@ NavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {
|
|||||||
NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
|
NavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {
|
||||||
// Get the story details
|
// Get the story details
|
||||||
var storyList = this.getStoryList(),
|
var storyList = this.getStoryList(),
|
||||||
existingTiddler, templateTiddler,
|
templateTiddler, title, draftTitle, existingTiddler, mergedTags;
|
||||||
title;
|
// Work out the title of the target tiddler
|
||||||
// Get the template
|
|
||||||
if(typeof event.param === "object") {
|
if(typeof event.param === "object") {
|
||||||
// If we got a hashmap use it as the template
|
// If we got a hashmap use it as the template
|
||||||
templateTiddler = event.param;
|
templateTiddler = event.param;
|
||||||
if(templateTiddler.title) {
|
if(templateTiddler.title) {
|
||||||
// Pull in any existing tiddler
|
|
||||||
existingTiddler = this.wiki.getTiddler(templateTiddler.title);
|
|
||||||
if(existingTiddler && existingTiddler.fields.tags && templateTiddler.tags) {
|
|
||||||
// Merge tags
|
|
||||||
templateTiddler.tags = $tw.utils.pushTop($tw.utils.parseStringArray(templateTiddler.tags),existingTiddler.fields.tags);
|
|
||||||
}
|
|
||||||
// Use the provided title
|
// Use the provided title
|
||||||
title = templateTiddler.title
|
title = templateTiddler.title
|
||||||
|
} else {
|
||||||
|
// Generate a new unique title
|
||||||
|
title = this.wiki.generateNewTitle($tw.language.getString("DefaultNewTiddlerTitle"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
existingTiddler = this.wiki.getTiddler(event.param);
|
// If we got a string, use it as the template and generate a new title
|
||||||
title = this.wiki.generateNewTitle(event.param);
|
templateTiddler = this.wiki.getTiddler(event.param);
|
||||||
|
title = this.wiki.generateNewTitle(event.param || $tw.language.getString("DefaultNewTiddlerTitle"));
|
||||||
}
|
}
|
||||||
title = title || this.wiki.generateNewTitle($tw.language.getString("DefaultNewTiddlerTitle"));
|
// Find any existing draft for this tiddler
|
||||||
// Try to reuse any existing draft of the tiddler
|
draftTitle = this.wiki.findDraft(title);
|
||||||
var draftTitle = this.wiki.findDraft(title);
|
// Pull in any existing tiddler
|
||||||
if(!draftTitle) {
|
if(draftTitle) {
|
||||||
// Otherwise, create a new draft of the tiddler
|
existingTiddler = this.wiki.getTiddler(draftTitle);
|
||||||
|
} else {
|
||||||
draftTitle = this.generateDraftTitle(title);
|
draftTitle = this.generateDraftTitle(title);
|
||||||
var draftTiddler = new $tw.Tiddler({
|
existingTiddler = this.wiki.getTiddler(title);
|
||||||
text: ""
|
|
||||||
},existingTiddler,templateTiddler,
|
|
||||||
this.wiki.getCreationFields(),
|
|
||||||
{
|
|
||||||
title: draftTitle,
|
|
||||||
"draft.title": title,
|
|
||||||
"draft.of": title
|
|
||||||
},this.wiki.getModificationFields());
|
|
||||||
this.wiki.addTiddler(draftTiddler);
|
|
||||||
}
|
}
|
||||||
|
// Merge the tags
|
||||||
|
if(existingTiddler && existingTiddler.fields.tags && templateTiddler && templateTiddler.tags) {
|
||||||
|
// Merge tags
|
||||||
|
mergedTags = $tw.utils.pushTop($tw.utils.parseStringArray(templateTiddler.tags),existingTiddler.fields.tags);
|
||||||
|
} else if(existingTiddler && existingTiddler.fields.tags) {
|
||||||
|
mergedTags = existingTiddler.fields.tags;
|
||||||
|
} else if(templateTiddler.tags) {
|
||||||
|
mergedTags = templateTiddler.tags;
|
||||||
|
} else if(templateTiddler.fields.tags) {
|
||||||
|
mergedTags = templateTiddler.fields.tags;
|
||||||
|
}
|
||||||
|
// Save the draft tiddler
|
||||||
|
var draftTiddler = new $tw.Tiddler({
|
||||||
|
text: ""
|
||||||
|
},
|
||||||
|
templateTiddler,
|
||||||
|
existingTiddler,
|
||||||
|
this.wiki.getCreationFields(),
|
||||||
|
{
|
||||||
|
title: draftTitle,
|
||||||
|
"draft.title": title,
|
||||||
|
"draft.of": title,
|
||||||
|
tags: mergedTags
|
||||||
|
},this.wiki.getModificationFields());
|
||||||
|
this.wiki.addTiddler(draftTiddler);
|
||||||
// Update the story to insert the new draft at the top and remove any existing tiddler
|
// Update the story to insert the new draft at the top and remove any existing tiddler
|
||||||
if(storyList.indexOf(draftTitle) === -1) {
|
if(storyList.indexOf(draftTitle) === -1) {
|
||||||
var slot = storyList.indexOf(event.navigateFromTitle);
|
var slot = storyList.indexOf(event.navigateFromTitle);
|
||||||
|
Loading…
Reference in New Issue
Block a user