diff --git a/core/modules/new_widgets/macrocall.js b/core/modules/new_widgets/macrocall.js index 36b0ed4e5..3d47a9969 100644 --- a/core/modules/new_widgets/macrocall.js +++ b/core/modules/new_widgets/macrocall.js @@ -37,8 +37,13 @@ MacroCallWidget.prototype.render = function(parent,nextSibling) { Compute the internal state of the widget */ MacroCallWidget.prototype.execute = function() { + // Merge together the parameters specified in the parse tree with the specified attributes + var params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : []; + $tw.utils.each(this.attributes,function(attribute,name) { + params.push({name: name, value: attribute}); + }); // Get the macro value - var text = this.getVariable(this.parseTreeNode.name,this.parseTreeNode.params); + var text = this.getVariable(this.parseTreeNode.name || this.getAttribute("$name"),params); // Parse the macro var parser = this.wiki.new_parseText("text/vnd.tiddlywiki",text, {parseAsInline: !this.parseTreeNode.isBlock}), @@ -51,7 +56,14 @@ MacroCallWidget.prototype.execute = function() { Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering */ MacroCallWidget.prototype.refresh = function(changedTiddlers) { - return this.refreshChildren(changedTiddlers); + var changedAttributes = this.computeAttributes(); + if($tw.utils.count(changedAttributes) > 0) { + // Rerender ourselves + this.refreshSelf(); + return true; + } else { + return this.refreshChildren(changedTiddlers); + } }; exports.macrocall = MacroCallWidget;