mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-01-13 19:00:27 +00:00
Fix problem with refreshing modal dialogues
Previously any refreshing of the content of a modal would cause a crash. The problem is the way that we steal the root widget for the render trees used in the modal. The root widget is tied to the container DOM node for the main content area, which isn’t actually a parent of the modal DOM nodes, hence the confusion for the refresh mechanism.
This commit is contained in:
parent
c9d4714e98
commit
465f4ac469
@ -67,20 +67,27 @@ Modal.prototype.display = function(title,options) {
|
|||||||
modalFooter.appendChild(modalFooterButtons);
|
modalFooter.appendChild(modalFooterButtons);
|
||||||
modalWrapper.appendChild(modalFooter);
|
modalWrapper.appendChild(modalFooter);
|
||||||
// Render the title of the message
|
// Render the title of the message
|
||||||
var titleText;
|
var headerWidgetNode = this.wiki.makeTranscludeWidget(title,{
|
||||||
if(tiddler && tiddler.fields && tiddler.fields.subtitle) {
|
field: "subtitle",
|
||||||
titleText = tiddler.fields.subtitle;
|
children: [{
|
||||||
} else {
|
type: "text",
|
||||||
titleText = title;
|
attributes: {
|
||||||
}
|
text: {
|
||||||
var headerParser = this.wiki.parseText("text/vnd.tiddlywiki",titleText,{parseAsInline: true}),
|
type: "string",
|
||||||
headerWidgetNode = this.wiki.makeWidget(headerParser,{parentWidget: $tw.rootWidget, document: document});
|
value: title
|
||||||
|
}}}],
|
||||||
|
parentWidget: $tw.rootWidget,
|
||||||
|
document: document
|
||||||
|
});
|
||||||
headerWidgetNode.render(headerTitle,null);
|
headerWidgetNode.render(headerTitle,null);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
headerWidgetNode.refresh(changes,modalHeader,null);
|
headerWidgetNode.refresh(changes,modalHeader,null);
|
||||||
});
|
});
|
||||||
// Render the body of the message
|
// Render the body of the message
|
||||||
var bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{parentWidget: $tw.rootWidget, document: document});
|
var bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{
|
||||||
|
parentWidget: $tw.rootWidget,
|
||||||
|
document: document
|
||||||
|
});
|
||||||
bodyWidgetNode.render(modalBody,null);
|
bodyWidgetNode.render(modalBody,null);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
bodyWidgetNode.refresh(changes,modalBody,null);
|
bodyWidgetNode.refresh(changes,modalBody,null);
|
||||||
@ -100,14 +107,31 @@ Modal.prototype.display = function(title,options) {
|
|||||||
modalFooterHelp.appendChild(link);
|
modalFooterHelp.appendChild(link);
|
||||||
modalFooterHelp.style.float = "left";
|
modalFooterHelp.style.float = "left";
|
||||||
}
|
}
|
||||||
var footerText;
|
var footerWidgetNode = this.wiki.makeTranscludeWidget(title,{
|
||||||
if(tiddler && tiddler.fields && tiddler.fields.footer) {
|
field: "footer",
|
||||||
footerText = tiddler.fields.footer;
|
children: [{
|
||||||
} else {
|
type: "button",
|
||||||
footerText = '<$button message="tw-close-tiddler" class="btn btn-primary">Close</$button>';
|
attributes: {
|
||||||
}
|
message: {
|
||||||
var footerParser = this.wiki.parseText("text/vnd.tiddlywiki",footerText,{parseAsInline: true}),
|
type: "string",
|
||||||
footerWidgetNode = this.wiki.makeWidget(footerParser,{parentWidget: $tw.rootWidget, document: document});
|
value: "tw-close-tiddler"
|
||||||
|
},
|
||||||
|
"class": {
|
||||||
|
type: "string",
|
||||||
|
value: "btn btn-primary"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
children: [{
|
||||||
|
type: "text",
|
||||||
|
attributes: {
|
||||||
|
text: {
|
||||||
|
type: "string",
|
||||||
|
value: "Close"
|
||||||
|
}}}
|
||||||
|
]}],
|
||||||
|
parentWidget: $tw.rootWidget,
|
||||||
|
document: document
|
||||||
|
});
|
||||||
footerWidgetNode.render(modalFooterButtons,null);
|
footerWidgetNode.render(modalFooterButtons,null);
|
||||||
this.wiki.addEventListener("change",function(changes) {
|
this.wiki.addEventListener("change",function(changes) {
|
||||||
footerWidgetNode.refresh(changes,modalFooterButtons,null);
|
footerWidgetNode.refresh(changes,modalFooterButtons,null);
|
||||||
|
Loading…
Reference in New Issue
Block a user