From 1aba8a1f65351a1ce06d5b97bde16fe97e67a69a Mon Sep 17 00:00:00 2001 From: "jeremy@jermolene.com" Date: Sat, 24 Sep 2022 12:41:28 +0100 Subject: [PATCH] Slight optimisation to user defined widgets --- core/modules/widgets/widget.js | 42 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/core/modules/widgets/widget.js b/core/modules/widgets/widget.js index 113db16f6..966d6be3e 100755 --- a/core/modules/widgets/widget.js +++ b/core/modules/widgets/widget.js @@ -501,25 +501,29 @@ Widget.prototype.makeChildWidget = function(parseTreeNode,options) { var self = this; options = options || {}; // Check whether this node type is defined by a custom widget definition - var variableDefinitionName = "$" + parseTreeNode.type, - variableInfo = this.getVariableInfo(variableDefinitionName,{allowSelfAssigned: true}), - isOverrideable = function() { - // Widget is overrideable if it has a double dollar user defined name, or if it is an existing JS widget and we're not in safe mode - return parseTreeNode.type.charAt(0) === "$" || (!!self.widgetClasses[parseTreeNode.type] && !$tw.safeMode); - }; - if(!parseTreeNode.isNotRemappable && isOverrideable() && variableInfo && variableInfo.srcVariable && variableInfo.srcVariable.value && variableInfo.srcVariable.isWidgetDefinition) { - var newParseTreeNode = { - type: "transclude", - children: parseTreeNode.children, - isBlock: parseTreeNode.isBlock - }; - $tw.utils.addAttributeToParseTreeNode(newParseTreeNode,"$variable",variableDefinitionName); - $tw.utils.each(parseTreeNode.attributes,function(attr,name) { - // If the attribute starts with a dollar then add an extra dollar so that it doesn't clash with the $xxx attributes of transclude - name = name.charAt(0) === "$" ? "$" + name : name; - $tw.utils.addAttributeToParseTreeNode(newParseTreeNode,$tw.utils.extend({},attr,{name: name})); - }); - parseTreeNode = newParseTreeNode; + var variableDefinitionName = "$" + parseTreeNode.type; + if(this.variables[variableDefinitionName]) { + var isOverrideable = function() { + // Widget is overrideable if it has a double dollar user defined name, or if it is an existing JS widget and we're not in safe mode + return parseTreeNode.type.charAt(0) === "$" || (!!self.widgetClasses[parseTreeNode.type] && !$tw.safeMode); + }; + if(!parseTreeNode.isNotRemappable && isOverrideable()) { + var variableInfo = this.getVariableInfo(variableDefinitionName,{allowSelfAssigned: true}); + if(variableInfo && variableInfo.srcVariable && variableInfo.srcVariable.value && variableInfo.srcVariable.isWidgetDefinition) { + var newParseTreeNode = { + type: "transclude", + children: parseTreeNode.children, + isBlock: parseTreeNode.isBlock + }; + $tw.utils.addAttributeToParseTreeNode(newParseTreeNode,"$variable",variableDefinitionName); + $tw.utils.each(parseTreeNode.attributes,function(attr,name) { + // If the attribute starts with a dollar then add an extra dollar so that it doesn't clash with the $xxx attributes of transclude + name = name.charAt(0) === "$" ? "$" + name : name; + $tw.utils.addAttributeToParseTreeNode(newParseTreeNode,$tw.utils.extend({},attr,{name: name})); + }); + parseTreeNode = newParseTreeNode; + } + } } // Get the widget class for this node type var WidgetClass = this.widgetClasses[parseTreeNode.type];