1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-02-17 03:20:02 +00:00

Fix problem with parsing main UI boot tiddlers

We were parsing the boot tiddlers, making them into a widget and then
refreshing the widget tree. The problem is that subsequent chances to
the boot tiddlers themselves wouldn’t be picked up as part of the
refresh.

Now we indirectly parse those UI boot tiddlers through a transclusion,
which does get refreshed in the desired way.
This commit is contained in:
Jermolene 2014-05-06 10:14:22 +01:00
parent 38c60bd7d4
commit 7c8c5cf745
4 changed files with 24 additions and 10 deletions

View File

@ -28,8 +28,7 @@ var DRAFT_TIDDLER_TIMEOUT = 400;
exports.startup = function() {
// Set up the title
var titleParser = $tw.wiki.parseTiddler(PAGE_TITLE_TITLE);
$tw.titleWidgetNode = $tw.wiki.makeWidget(titleParser,{document: $tw.fakeDocument});
$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});
$tw.titleContainer = $tw.fakeDocument.createElement("div");
$tw.titleWidgetNode.render($tw.titleContainer,null);
document.title = $tw.titleContainer.textContent;
@ -39,8 +38,7 @@ exports.startup = function() {
}
});
// Set up the styles
var styleParser = $tw.wiki.parseTiddler(PAGE_STYLESHEET_TITLE);
$tw.styleWidgetNode = $tw.wiki.makeWidget(styleParser,{document: $tw.fakeDocument});
$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});
$tw.styleContainer = $tw.fakeDocument.createElement("style");
$tw.styleWidgetNode.render($tw.styleContainer,null);
$tw.styleElement = document.createElement("style");
@ -52,9 +50,8 @@ exports.startup = function() {
}
}));
// Display the $:/core/ui/PageMacros tiddler to kick off the display
var parser = $tw.wiki.parseTiddler(PAGE_TEMPLATE_TITLE);
$tw.perf.report("mainRender",function() {
$tw.pageWidgetNode = $tw.wiki.makeWidget(parser,{document: document, parentWidget: $tw.rootWidget});
$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});
$tw.pageContainer = document.createElement("div");
$tw.utils.addClass($tw.pageContainer,"tw-page-container-wrapper");
document.body.insertBefore($tw.pageContainer,document.body.firstChild);

View File

@ -80,8 +80,7 @@ Modal.prototype.display = function(title,options) {
headerWidgetNode.refresh(changes,modalHeader,null);
});
// Render the body of the message
var bodyParser = this.wiki.parseTiddler(title),
bodyWidgetNode = this.wiki.makeWidget(bodyParser,{parentWidget: $tw.rootWidget, document: document});
var bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{parentWidget: $tw.rootWidget, document: document});
bodyWidgetNode.render(modalBody,null);
this.wiki.addEventListener("change",function(changes) {
bodyWidgetNode.refresh(changes,modalBody,null);

View File

@ -37,8 +37,7 @@ Notifier.prototype.display = function(title,options) {
// Add classes
$tw.utils.addClass(notification,"tw-notification");
// Render the body of the notification
var parser = this.wiki.parseTiddler(title),
widgetNode = this.wiki.makeWidget(parser,{parentWidget: $tw.rootWidget, document: document});
var widgetNode = this.wiki.makeTranscludeWidget(title,{parentWidget: $tw.rootWidget, document: document});
widgetNode.render(notification,null);
this.wiki.addEventListener("change",function(changes) {
widgetNode.refresh(changes,notification,null);

View File

@ -858,6 +858,25 @@ exports.makeWidget = function(parser,options) {
});
};
/*
Make a widget tree for transclusion
title: target tiddler title
options: as for wiki.makeWidget() (including parseAsInline)
*/
exports.makeTranscludeWidget = function(title,options) {
options = options || {};
var parseTree = {tree: [{
type: "transclude",
attributes: {
tiddler: {
name: "tiddler",
type: "string",
value: title}},
isBlock: !options.parseAsInline}
]};
return $tw.wiki.makeWidget(parseTree,options);
};
/*
Parse text in a specified format and render it into another format
outputType: content type for the output