mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-24 10:37:20 +00:00
80442b7f7f
* Fix Bug #7054: Reuse of $:/core/ui/EditTemplate/fields broken This fixes Bug #7054 by creating a new variable `safeNewFieldValueTiddlerPrefix` that is always set to a valid, temporary prefix. This variable is used within `$action-deletetiddler`. If the passed `newFieldValueTiddlerPrefix` variable is empty a new prefix will be generated by the same logic that creates the original `newFieldValueTiddlerPrefix` variable. To be even more defensive, the prefix-filter was prepended with another prefix filter that limits matches to `$:/temp/NewFieldValue`. This prevents a bogus but non empty value in `newFieldValueTiddlerPrefix` to delete arbitrary tiddlers. * Add a default for `newFieldValueTiddlerPrefix` This fixes a problem that was identified while fixing bug #7054. If the tiddler `$:/core/ui/EditTemplate/fields` is transcluded directly and `newFieldValueTiddlerPrefix` is not set, it will be generated. This makes sure that this value is defined. It can not be redefined unconditionally because if this tiddler is transcluded from `EditTemplate.tid` these two tiddlers must agree on the same prefix because the clean-up is duplicated between `EditTemplate.tid` and `fields.tid`. This would make `safeNewFieldValueTiddlerPrefix` obsolete, but I leave it in there to make the macros safe and prevent any problems if the `newFieldValueTiddlerPrefix` is unset by a later change.
58 lines
3.3 KiB
Plaintext
58 lines
3.3 KiB
Plaintext
title: $:/core/ui/EditTemplate
|
|
|
|
\define delete-edittemplate-state-tiddlers()
|
|
<$set name="safeNewFieldValueTiddlerPrefix" value=<<newFieldValueTiddlerPrefix>> emptyValue=<<qualify "$:/temp/NewFieldValue">> >
|
|
<$action-deletetiddler $filter="[<newFieldNameTiddler>] [prefix[$:/temp/NewFieldValue]prefix<safeNewFieldValueTiddlerPrefix>] [<newFieldNameInputTiddler>] [<newFieldNameSelectionTiddler>] [<newTagNameTiddler>] [<newTagNameInputTiddler>] [<newTagNameSelectionTiddler>] [<typeInputTiddler>] [<typeSelectionTiddler>]"/>
|
|
</$set>
|
|
\end
|
|
|
|
<!-- Beware this is duplicated from fields.tid. For details see bug #7054 -->
|
|
\define get-field-value-tiddler-filter() [subfilter<get-field-editor-filter>sha256[16]addprefix[/]addprefix<newFieldValueTiddlerPrefix>]
|
|
\define get-field-editor-filter() [<newFieldNameTiddler>get[text]else[]] :cascade[all[shadows+tiddlers]tag[$:/tags/FieldEditorFilter]!is[draft]get[text]] :and[!is[blank]else{$:/core/ui/EditTemplate/fieldEditor/default}]
|
|
|
|
\define save-tiddler-actions()
|
|
\whitespace trim
|
|
<$action-sendmessage $message="tm-add-tag" $param={{{ [<newTagNameTiddler>get[text]] }}}/>
|
|
<$action-sendmessage $message="tm-add-field" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldNameTiddler>get[text]] :map[subfilter<get-field-value-tiddler-filter>get[text]] }}}/>
|
|
<<delete-edittemplate-state-tiddlers>>
|
|
<$action-sendmessage $message="tm-save-tiddler"/>
|
|
\end
|
|
|
|
\define cancel-delete-tiddler-actions(message)
|
|
\whitespace trim
|
|
<<delete-edittemplate-state-tiddlers>>
|
|
<$action-sendmessage $message="tm-$message$-tiddler"/>
|
|
\end
|
|
|
|
\whitespace trim
|
|
<div
|
|
data-tiddler-title=<<currentTiddler>>
|
|
data-tags={{!!tags}}
|
|
class={{{ [all[shadows+tiddlers]tag[$:/tags/ClassFilters/TiddlerTemplate]!is[draft]] :map:flat[subfilter{!!text}] tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}
|
|
role="region"
|
|
aria-label={{$:/language/EditTemplate/Caption}}>
|
|
<$fieldmangler>
|
|
<$vars
|
|
storyTiddler=<<currentTiddler>>
|
|
newTagNameTiddler=<<qualify "$:/temp/NewTagName">>
|
|
newFieldNameTiddler=<<qualify "$:/temp/NewFieldName">>
|
|
newFieldValueTiddlerPrefix=<<qualify "$:/temp/NewFieldValue">>
|
|
newFieldNameInputTiddler=<<qualify "$:/temp/NewFieldName/input">>
|
|
newFieldNameSelectionTiddler=<<qualify "$:/temp/NewFieldName/selected-item">>
|
|
newTagNameInputTiddler=<<qualify "$:/temp/NewTagName/input">>
|
|
newTagNameSelectionTiddler=<<qualify "$:/temp/NewTagName/selected-item">>
|
|
typeInputTiddler=<<qualify "$:/temp/Type/input">>
|
|
typeSelectionTiddler=<<qualify "$:/temp/Type/selected-item">>>
|
|
<$keyboard key="((cancel-edit-tiddler))" actions=<<cancel-delete-tiddler-actions "cancel">> tag="div">
|
|
<$keyboard key="((save-tiddler))" actions=<<save-tiddler-actions>> tag="div">
|
|
<$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>
|
|
</$vars>
|
|
</$fieldmangler>
|
|
</div>
|