1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-02-09 07:30:01 +00:00

Don't have data widget rendering its own JSON

Making the data widget render its raw JSON (introduced in 683ec3300490714da21ef0a1e1e50d348473d868) was a bad idea as it messes up the innerwiki use of the data widget. Instead we use the testcase widget with a special template to render the raw JSON of the payload of a testcase, thus giving us a way to test the data widget
This commit is contained in:
jeremy@jermolene.com 2023-05-04 08:57:43 +01:00
parent c6f15d8e8c
commit d9b6384884
8 changed files with 27 additions and 19 deletions

View File

@ -31,12 +31,7 @@ DataWidget.prototype.render = function(parent,nextSibling) {
this.parentDomNode = parent; this.parentDomNode = parent;
this.computeAttributes(); this.computeAttributes();
this.execute(); this.execute();
var domNode = this.document.createTextNode("");
parent.insertBefore(domNode,nextSibling);
this.renderChildren(parent,nextSibling); this.renderChildren(parent,nextSibling);
// Children must have been rendered before we can read the data values
domNode.textContent = JSON.stringify(this.readDataTiddlerValues());
this.domNodes.push(domNode);
}; };
/* /*

View File

@ -57,11 +57,14 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) {
} }
loadTiddler("$:/core"); loadTiddler("$:/core");
loadTiddler("$:/plugins/tiddlywiki/codemirror"); loadTiddler("$:/plugins/tiddlywiki/codemirror");
// Load the test case template
// loadTiddler(this.testcaseTemplate);
// Load tiddlers from child data widgets // Load tiddlers from child data widgets
var tiddlers = []; var tiddlers = [];
this.findChildrenDataWidgets(this.contentRoot.children,"data",function(widget) { this.findChildrenDataWidgets(this.contentRoot.children,"data",function(widget) {
Array.prototype.push.apply(tiddlers,widget.readDataTiddlerValues()); Array.prototype.push.apply(tiddlers,widget.readDataTiddlerValues());
}); });
var jsonPayload = JSON.stringify(tiddlers);
this.testcaseWiki.addTiddlers(tiddlers); this.testcaseWiki.addTiddlers(tiddlers);
// Unpack plugin tiddlers // Unpack plugin tiddlers
this.testcaseWiki.readPluginInfo(); this.testcaseWiki.readPluginInfo();
@ -69,15 +72,9 @@ TestCaseWidget.prototype.render = function(parent,nextSibling) {
this.testcaseWiki.unpackPluginTiddlers(); this.testcaseWiki.unpackPluginTiddlers();
this.testcaseWiki.addIndexersToWiki(); this.testcaseWiki.addIndexersToWiki();
// Generate a `transclusion` variable that depends on the values of the payload tiddlers so that the template can easily make unique state tiddlers // Generate a `transclusion` variable that depends on the values of the payload tiddlers so that the template can easily make unique state tiddlers
this.setVariable("transclusion",$tw.utils.hashString(this.testcaseWiki.getTiddlersAsJson("[all[tiddlers]]"))); this.setVariable("transclusion",$tw.utils.hashString(jsonPayload));
// Generate a `testcaseInfo` variable that contains information about the subwiki in JSON format // Generate a `payloadTiddlers` variable that contains the payload in JSON format
var testcaseInfoData = { this.setVariable("payloadTiddlers",jsonPayload);
tiddlers: {} // Hashmap of tiddler titles mapped to array of field names
};
this.testcaseWiki.each(function(tiddler,title) {
testcaseInfoData.tiddlers[title] = Object.keys(tiddler.fields);
});
this.setVariable("testcaseInfo",JSON.stringify(testcaseInfoData));
// Render the page root template of the subwiki // Render the page root template of the subwiki
var rootWidget = this.testcaseWiki.makeTranscludeWidget(this.testcaseTemplate,{document: this.document, parseAsInline: false, parentWidget: this}); var rootWidget = this.testcaseWiki.makeTranscludeWidget(this.testcaseTemplate,{document: this.document, parseAsInline: false, parentWidget: this});
rootWidget.render(parent,nextSibling); rootWidget.render(parent,nextSibling);

View File

@ -0,0 +1,4 @@
title: $:/core/ui/testcases/RawJSONTemplate
\whitespace trim
<$text text=<<payloadTiddlers>>/>

View File

@ -9,7 +9,9 @@ text: Importing a compound payload tiddler and adding custom fields
title: Output title: Output
\whitespace trim \whitespace trim
<$testcase template="$:/core/ui/testcases/RawJSONTemplate">
<$data $compound-tiddler="Compound" custom="Alpha"/> <$data $compound-tiddler="Compound" custom="Alpha"/>
</$testcase>
+ +
title: Compound title: Compound
type: text/vnd.tiddlywiki-multiple type: text/vnd.tiddlywiki-multiple
@ -22,4 +24,4 @@ This is a payload tiddler from a compound tiddler
+ +
title: ExpectedResult title: ExpectedResult
<p>[{"title":"Payload Tiddler","tags":"Alpha Beta Gamma","text":"This is a payload tiddler from a compound tiddler","custom":"Alpha"}]</p> <p><div>[{"title":"Payload Tiddler","tags":"Alpha Beta Gamma","text":"This is a payload tiddler from a compound tiddler","custom":"Alpha"}]</div></p>

View File

@ -9,7 +9,9 @@ text: Importing a payload filter and adding custom fields
title: Output title: Output
\whitespace trim \whitespace trim
<$testcase template="$:/core/ui/testcases/RawJSONTemplate">
<$data $filter="[tag[Definitions]]" custom="Alpha"/> <$data $filter="[tag[Definitions]]" custom="Alpha"/>
</$testcase>
+ +
title: HelloThere title: HelloThere
tags: Definitions tags: Definitions
@ -23,4 +25,4 @@ This is the tiddler AnotherDefinition
+ +
title: ExpectedResult title: ExpectedResult
<p>[{"title":"AnotherDefinition","tags":"Definitions","text":"This is the tiddler AnotherDefinition","custom":"Alpha"},{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</p> <p><div>[{"title":"AnotherDefinition","tags":"Definitions","text":"This is the tiddler AnotherDefinition","custom":"Alpha"},{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</div></p>

View File

@ -9,7 +9,9 @@ text: Importing a payload tiddler and adding custom fields
title: Output title: Output
\whitespace trim \whitespace trim
<$testcase template="$:/core/ui/testcases/RawJSONTemplate">
<$data $tiddler="HelloThere" custom="Alpha"/> <$data $tiddler="HelloThere" custom="Alpha"/>
</$testcase>
+ +
title: HelloThere title: HelloThere
tags: Definitions tags: Definitions
@ -18,4 +20,4 @@ This is the tiddler HelloThere
+ +
title: ExpectedResult title: ExpectedResult
<p>[{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</p> <p><div>[{"title":"HelloThere","tags":"Definitions","text":"This is the tiddler HelloThere","custom":"Alpha"}]</div></p>

View File

@ -9,8 +9,10 @@ text: Standalone data widget to create individual tiddlers
title: Output title: Output
\whitespace trim \whitespace trim
<$testcase template="$:/core/ui/testcases/RawJSONTemplate">
<$data title="Epsilon" text="Theta"/> <$data title="Epsilon" text="Theta"/>
</$testcase>
+ +
title: ExpectedResult title: ExpectedResult
<p>[{"title":"Epsilon","text":"Theta"}]</p> <p><div>[{"title":"Epsilon","text":"Theta"}]</div></p>

View File

@ -24,7 +24,11 @@ describe("Wiki-based tests", function() {
var tiddler = $tw.wiki.getTiddler(title); var tiddler = $tw.wiki.getTiddler(title);
it(tiddler.fields.title + ": " + tiddler.fields.description, function() { it(tiddler.fields.title + ": " + tiddler.fields.description, function() {
// Add our tiddlers // Add our tiddlers
var wiki = new $tw.Wiki(); var wiki = new $tw.Wiki(),
coreTiddler = $tw.wiki.getTiddler("$:/core");
if(coreTiddler) {
wiki.addTiddler(coreTiddler);
}
wiki.addTiddlers(readMultipleTiddlersTiddler(title)); wiki.addTiddlers(readMultipleTiddlersTiddler(title));
// Complain if we don't have the ouput and expected results // Complain if we don't have the ouput and expected results
if(!wiki.tiddlerExists("Output")) { if(!wiki.tiddlerExists("Output")) {