diff --git a/core/language/en-GB/EditTemplate.multids b/core/language/en-GB/EditTemplate.multids index 8d8801af9..7c92d1895 100644 --- a/core/language/en-GB/EditTemplate.multids +++ b/core/language/en-GB/EditTemplate.multids @@ -18,6 +18,8 @@ Tags/Add/Placeholder: tag name Tags/Dropdown/Caption: tag list Tags/Dropdown/Hint: Show tag list Title/BadCharacterWarning: Warning: avoid using any of the characters <> in tiddler titles +Title/Exists/Prompt: Target tiddler already exists +Title/Relink/Prompt: Update ''<$text text=<>/>'' to ''<$text text=<>/>'' in the //tags// and //list// fields of other tiddlers Type/Dropdown/Caption: content type list Type/Dropdown/Hint: Show content type list Type/Delete/Caption: delete content type diff --git a/core/modules/widgets/navigator.js b/core/modules/widgets/navigator.js index fa54a80d3..669b22dad 100755 --- a/core/modules/widgets/navigator.js +++ b/core/modules/widgets/navigator.js @@ -349,6 +349,12 @@ NavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) { },this.wiki.getModificationFields()); newTiddler = $tw.hooks.invokeHook("th-saving-tiddler",newTiddler); this.wiki.addTiddler(newTiddler); + // If enabled, relink references to renamed tiddler + var shouldRelink = this.getAttribute("relinkOnRename","no").toLowerCase().trim() === "yes"; + if(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) { +console.log("Relinking '" + draftOf + "' to '" + draftTitle + "'"); + this.wiki.relinkTiddler(draftOf,draftTitle); + } // Remove the draft tiddler this.wiki.deleteTiddler(title); // Remove the original tiddler if we're renaming it diff --git a/core/modules/wiki-bulkops.js b/core/modules/wiki-bulkops.js index ce72f1c99..4708977e9 100644 --- a/core/modules/wiki-bulkops.js +++ b/core/modules/wiki-bulkops.js @@ -15,39 +15,66 @@ Bulk tiddler operations such as rename. /* Rename a tiddler, and relink any tags or lists that reference it. */ -exports.renameTiddler = function(fromTitle,toTitle) { +function renameTiddler(fromTitle,toTitle,options) { var self = this; fromTitle = (fromTitle || "").trim(); toTitle = (toTitle || "").trim(); + options = options || {}; if(fromTitle && toTitle && fromTitle !== toTitle) { // Rename the tiddler itself var tiddler = this.getTiddler(fromTitle); this.addTiddler(new $tw.Tiddler(tiddler,{title: toTitle},this.getModificationFields())); this.deleteTiddler(fromTitle); // Rename any tags or lists that reference it - this.each(function(tiddler,title) { - var tags = (tiddler.fields.tags || []).slice(0), - list = (tiddler.fields.list || []).slice(0), - isModified = false; - // Rename tags - $tw.utils.each(tags,function (title,index) { - if(title === fromTitle) { - tags[index] = toTitle; - isModified = true; - } - }); - // Rename lists - $tw.utils.each(list,function (title,index) { - if(title === fromTitle) { - list[index] = toTitle; - isModified = true; - } - }); - if(isModified) { - self.addTiddler(new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())); - } - }); + relinkTiddler(fromTitle,toTitle,options) } } +/* +Relink any tags or lists that reference a given tiddler +*/ +function relinkTiddler(fromTitle,toTitle,options) { + var self = this; + fromTitle = (fromTitle || "").trim(); + toTitle = (toTitle || "").trim(); + options = options || {}; + if(fromTitle && toTitle && fromTitle !== toTitle) { + this.each(function(tiddler,title) { + var type = tiddler.fields.type || ""; + // Don't touch plugins or JavaScript modules + if(!tiddler.fields["plugin-type"] && type !== "application/javascript") { + var tags = (tiddler.fields.tags || []).slice(0), + list = (tiddler.fields.list || []).slice(0), + isModified = false; + if(!options.dontRenameInTags) { + // Rename tags + $tw.utils.each(tags,function (title,index) { + if(title === fromTitle) { +console.log("Renaming tag '" + tags[index] + "' to '" + toTitle + "' of tiddler '" + tiddler.fields.title + "'"); + tags[index] = toTitle; + isModified = true; + } + }); + } + if(!options.dontRenameInLists) { + // Rename lists + $tw.utils.each(list,function (title,index) { + if(title === fromTitle) { +console.log("Renaming list item '" + list[index] + "' to '" + toTitle + "' of tiddler '" + tiddler.fields.title + "'"); + list[index] = toTitle; + isModified = true; + } + }); + } + if(isModified) { + self.addTiddler(new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())); + } + } + }); + } +}; + +exports.renameTiddler = renameTiddler; +exports.relinkTiddler = relinkTiddler; + })(); diff --git a/core/ui/EditTemplate/title.tid b/core/ui/EditTemplate/title.tid index 0eda4218d..f7963f2bb 100644 --- a/core/ui/EditTemplate/title.tid +++ b/core/ui/EditTemplate/title.tid @@ -1,13 +1,15 @@ title: $:/core/ui/EditTemplate/title tags: $:/tags/EditTemplate +<$edit-text field="draft.title" class="tc-titlebar tc-edit-texteditor" focus="true"/> + <$vars pattern="""[\|\[\]{}]""" bad-chars="""`| [ ] { }`"""> <$list filter="[is[current]regexp:draft.title]" variable="listItem">
-{{$:/language/EditTemplate/Title/BadCharacterWarning}} +{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}
@@ -15,4 +17,28 @@ tags: $:/tags/EditTemplate -<$edit-text field="draft.title" class="tc-titlebar tc-edit-texteditor" focus="true"/> +<$reveal state="!!draft.title" type="nomatch" text={{!!draft.of}} tag="div"> + +<$list filter="[{!!draft.title}!is[missing]]" variable="listItem"> + +
+ +{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}} + +
+ + + +<$list filter="[{!!draft.of}!is[missing]]" variable="listItem"> + +<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}> + +<$checkbox tiddler="$:/config/RelinkOnRename" field="text" checked="yes" unchecked="no" default="no"> {{$:/language/EditTemplate/Title/Relink/Prompt}} + + + + + + + + diff --git a/core/ui/PageTemplate.tid b/core/ui/PageTemplate.tid index acd70ee83..1a539f247 100644 --- a/core/ui/PageTemplate.tid +++ b/core/ui/PageTemplate.tid @@ -22,7 +22,7 @@ tc-page-container tc-page-view-$(themeTitle)$ tc-language-$(languageTitle)$
>> -<$navigator story="$:/StoryList" history="$:/HistoryList" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}}> +<$navigator story="$:/StoryList" history="$:/HistoryList" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}> <$dropzone> diff --git a/themes/tiddlywiki/vanilla/base.tid b/themes/tiddlywiki/vanilla/base.tid index 1b5f94348..dfbfb576f 100644 --- a/themes/tiddlywiki/vanilla/base.tid +++ b/themes/tiddlywiki/vanilla/base.tid @@ -1996,6 +1996,12 @@ a.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > s color: <>; } +.tc-message-box svg { + width: 1em; + height: 1em; + vertical-align: text-bottom; +} + /* ** Pictures */