From 352272905ed4bb91e86ca10e628c5a7856dc3166 Mon Sep 17 00:00:00 2001 From: Cameron Fischer Date: Thu, 6 Jun 2024 06:20:35 -0400 Subject: [PATCH] Fixed issue where $parameters did nothing with no $transclude (#8203) * Fixed issue where $parameters did nothing with no $transclude * Figured I should test \parameters too --- core/modules/widgets/parameters.js | 12 ++++++++++++ editions/test/tiddlers/tests/test-widget.js | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/core/modules/widgets/parameters.js b/core/modules/widgets/parameters.js index 69194cb9e..fdd2cb963 100644 --- a/core/modules/widgets/parameters.js +++ b/core/modules/widgets/parameters.js @@ -74,6 +74,18 @@ ParametersWidget.prototype.execute = function() { self.setVariable(variableName,getValue(name)); } }); + } else { + // There is no parent transclude. i.e. direct rendering. + // We use default values only. + $tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(self.parseTreeNode),function(attr,index) { + var name = attr.name; + // If the attribute name starts with $$ then reduce to a single dollar + if(name.substr(0,2) === "$$") { + name = name.substr(1); + } + var value = self.getAttribute(attr.name,""); + self.setVariable(name,value); + }); } // Construct the child widgets this.makeChildWidgets(); diff --git a/editions/test/tiddlers/tests/test-widget.js b/editions/test/tiddlers/tests/test-widget.js index 1c7665a53..637104c0b 100755 --- a/editions/test/tiddlers/tests/test-widget.js +++ b/editions/test/tiddlers/tests/test-widget.js @@ -816,6 +816,26 @@ describe("Widget module", function() { expect(wrapper.innerHTML).toBe("

Bval

"); }); + it("should use default $parameters if directly rendered", function() { + var wiki = new $tw.Wiki(); + var text = "<$parameters bee=default $$dollar=bill nothing empty=''>bee=<>, $dollar=<<$dollar>>, nothing=<>, empty=<>"; + var widgetNode = createWidgetNode(parseText(text,wiki),wiki); + // Render the widget node to the DOM + var wrapper = renderWidgetNode(widgetNode); + // nothing = true in this attribute form because valueless attributes always equal true. + expect(wrapper.innerHTML).toBe("

bee=default, $dollar=bill, nothing=true, empty=

"); + }); + + it("should use default \\parameters if directly rendered", function() { + var wiki = new $tw.Wiki(); + var text = "\\parameters(bee:default $$dollar:bill nothing)\nbee=<>, $$dollar=<<$$dollar>>, nothing=<>"; + var widgetNode = createWidgetNode(parseText(text,wiki),wiki); + // Render the widget node to the DOM + var wrapper = renderWidgetNode(widgetNode); + // nothing = true in this attribute form because valueless attributes always equal true. + expect(wrapper.innerHTML).toBe("

bee=default, $$dollar=bill, nothing=

"); + }); + it("can have more than one macroDef variable imported", function() { var wiki = new $tw.Wiki(); wiki.addTiddlers([