From 28d298aeb56d422ef6b8b121b22f74ac569b5d2c Mon Sep 17 00:00:00 2001 From: saqimtiaz Date: Tue, 20 Jan 2026 19:59:15 +0100 Subject: [PATCH 1/5] refactor: remove repetitive code and use ES2017 --- core/modules/utils/dom/dom.js | 84 +++++++++++++++++------------------ 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index 22bee6b39..35649f66c 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -256,66 +256,64 @@ exports.copyToClipboard = function(text,options) { Collect DOM variables */ exports.collectDOMVariables = function(selectedNode,domNode,event) { - var variables = {}, - selectedNodeRect, - domNodeRect; + const vars = {}; + + const addAttr = node => { + for(const { name,value } of node.attributes) { + vars[`dom-${name}`] = `${value}`; + } + }; + + const addRectVars = (prefix, { left, top, width, height }) => { + vars[`${prefix}-posx`] = `${left}`; + vars[`${prefix}-posy`] = `${top}`; + vars[`${prefix}-width`] = `${width}`; + vars[`${prefix}-height`] = `${height}`; + }; + if(selectedNode) { - $tw.utils.each(selectedNode.attributes,function(attribute) { - variables["dom-" + attribute.name] = attribute.value.toString(); - }); - + addAttr(selectedNode); + if("offsetLeft" in selectedNode) { - // Add variables with a (relative and absolute) popup coordinate string for the selected node - var nodeRect = { + const rect = { left: selectedNode.offsetLeft, top: selectedNode.offsetTop, width: selectedNode.offsetWidth, height: selectedNode.offsetHeight }; - variables["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,nodeRect); - - var absRect = $tw.utils.extend({}, nodeRect); - for(var currentNode = selectedNode.offsetParent; currentNode; currentNode = currentNode.offsetParent) { - absRect.left += currentNode.offsetLeft; - absRect.top += currentNode.offsetTop; - } - variables["tv-popup-abs-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,absRect); - - // Add variables for offset of selected node - variables["tv-selectednode-posx"] = selectedNode.offsetLeft.toString(); - variables["tv-selectednode-posy"] = selectedNode.offsetTop.toString(); - variables["tv-selectednode-width"] = selectedNode.offsetWidth.toString(); - variables["tv-selectednode-height"] = selectedNode.offsetHeight.toString(); + vars["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,rect); + vars["tv-popup-abs-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,$tw.utils.getBoundingPageRect(selectedNode)); + addRectVars("tv-selectednode",rect); } } - - if(domNode && ("offsetWidth" in domNode)) { - variables["tv-widgetnode-width"] = domNode.offsetWidth.toString(); - variables["tv-widgetnode-height"] = domNode.offsetHeight.toString(); + + if(domNode && "offsetWidth" in domNode) { + addRectVars("tv-widgetnode", { left: 0,top: 0,width: domNode.offsetWidth,height: domNode.offsetHeight }); } - if(event && ("clientX" in event) && ("clientY" in event)) { + if(event && "clientX" in event && "clientY" in event) { + const addEventVars = (prefix,node) => { + const { left, top } = node.getBoundingClientRect(); + vars[`${prefix}-posx`] = `${event.clientX - left}`; + vars[`${prefix}-posy`] = `${event.clientY - top}`; + }; + if(selectedNode) { - // Add variables for event X and Y position relative to selected node - selectedNodeRect = selectedNode.getBoundingClientRect(); - variables["event-fromselected-posx"] = (event.clientX - selectedNodeRect.left).toString(); - variables["event-fromselected-posy"] = (event.clientY - selectedNodeRect.top).toString(); - } - - if(domNode) { - // Add variables for event X and Y position relative to event catcher node - domNodeRect = domNode.getBoundingClientRect(); - variables["event-fromcatcher-posx"] = (event.clientX - domNodeRect.left).toString(); - variables["event-fromcatcher-posy"] = (event.clientY - domNodeRect.top).toString(); + addEventVars("event-fromselected",selectedNode); } - // Add variables for event X and Y position relative to the viewport - variables["event-fromviewport-posx"] = event.clientX.toString(); - variables["event-fromviewport-posy"] = event.clientY.toString(); + if(domNode) { + addEventVars("event-fromcatcher",domNode); + } + + vars["event-fromviewport-posx"] = `${event.clientX}`; + vars["event-fromviewport-posy"] = `${event.clientY}`; } - return variables; + + return vars; }; + /* Make sure the CSS selector is not invalid */ From 30b65474a18f6bfc4cddc6f073908c54d411b21e Mon Sep 17 00:00:00 2001 From: saqimtiaz Date: Tue, 20 Jan 2026 20:13:41 +0100 Subject: [PATCH 2/5] refactor: remove repetitive code and use ES2017 --- core/modules/utils/dom/dom.js | 47 +++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index 35649f66c..8b66ae56f 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -255,16 +255,16 @@ exports.copyToClipboard = function(text,options) { /* Collect DOM variables */ -exports.collectDOMVariables = function(selectedNode,domNode,event) { - const vars = {}; +exports.collectDOMVariables = function(selectedNode,domNode,event){ + const vars={}; const addAttr = node => { - for(const { name,value } of node.attributes) { - vars[`dom-${name}`] = `${value}`; + for(const{name,value}of node.attributes) { + vars[`dom-${name}`]=`${value}`; } }; - const addRectVars = (prefix, { left, top, width, height }) => { + const addRectVars=(prefix,{left,top,width,height}) => { vars[`${prefix}-posx`] = `${left}`; vars[`${prefix}-posy`] = `${top}`; vars[`${prefix}-width`] = `${width}`; @@ -274,38 +274,48 @@ exports.collectDOMVariables = function(selectedNode,domNode,event) { if(selectedNode) { addAttr(selectedNode); - if("offsetLeft" in selectedNode) { - const rect = { - left: selectedNode.offsetLeft, - top: selectedNode.offsetTop, - width: selectedNode.offsetWidth, - height: selectedNode.offsetHeight + if("offsetLeft"in selectedNode) { + // Add variables with a (relative and absolute) popup coordinate string for the selected node + const rect={ + left : selectedNode.offsetLeft, + top : selectedNode.offsetTop, + width : selectedNode.offsetWidth, + height : selectedNode.offsetHeight }; - vars["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,rect); - vars["tv-popup-abs-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,$tw.utils.getBoundingPageRect(selectedNode)); + vars["tv-popup-coords"]=Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,rect); + + vars["tv-popup-abs-coords"]=Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,$tw.utils.getBoundingPageRect(selectedNode)); + + // Add variables for offset of selected node addRectVars("tv-selectednode",rect); } } if(domNode && "offsetWidth" in domNode) { - addRectVars("tv-widgetnode", { left: 0,top: 0,width: domNode.offsetWidth,height: domNode.offsetHeight }); + // Add variables for widget node size + vars["tv-widgetnode-width"]=`${domNode.offsetWidth}`; + vars["tv-widgetnode-height"]=`${domNode.offsetHeight}`; } - if(event && "clientX" in event && "clientY" in event) { + if(event && ("clientX" in event) && ("clientY" in event)) { + // Helper to add event X/Y relative to a node const addEventVars = (prefix,node) => { - const { left, top } = node.getBoundingClientRect(); - vars[`${prefix}-posx`] = `${event.clientX - left}`; - vars[`${prefix}-posy`] = `${event.clientY - top}`; + const {left, top} = node.getBoundingClientRect(); + vars[`${prefix}-posx`] = `${event.clientX-left}`; + vars[`${prefix}-posy`] = `${event.clientY-top}`; }; if(selectedNode) { + // Add variables for event position relative to selected node addEventVars("event-fromselected",selectedNode); } if(domNode) { + // Add variables for event position relative to event catcher node addEventVars("event-fromcatcher",domNode); } + // Add variables for event position relative to the viewport vars["event-fromviewport-posx"] = `${event.clientX}`; vars["event-fromviewport-posy"] = `${event.clientY}`; } @@ -313,7 +323,6 @@ exports.collectDOMVariables = function(selectedNode,domNode,event) { return vars; }; - /* Make sure the CSS selector is not invalid */ From 218ba7e2f4ffd5f96ff0d70b3acb4d695fe09fbe Mon Sep 17 00:00:00 2001 From: saqimtiaz Date: Tue, 20 Jan 2026 20:20:27 +0100 Subject: [PATCH 3/5] refactor: further tweaks --- core/modules/utils/dom/dom.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index 8b66ae56f..d65e3f7e6 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -258,12 +258,6 @@ Collect DOM variables exports.collectDOMVariables = function(selectedNode,domNode,event){ const vars={}; - const addAttr = node => { - for(const{name,value}of node.attributes) { - vars[`dom-${name}`]=`${value}`; - } - }; - const addRectVars=(prefix,{left,top,width,height}) => { vars[`${prefix}-posx`] = `${left}`; vars[`${prefix}-posy`] = `${top}`; @@ -272,15 +266,17 @@ exports.collectDOMVariables = function(selectedNode,domNode,event){ }; if(selectedNode) { - addAttr(selectedNode); + for(const{name,value} of selectedNode.attributes) { + vars[`dom-${name}`]=`${value}`; + } if("offsetLeft"in selectedNode) { // Add variables with a (relative and absolute) popup coordinate string for the selected node const rect={ - left : selectedNode.offsetLeft, - top : selectedNode.offsetTop, - width : selectedNode.offsetWidth, - height : selectedNode.offsetHeight + left: selectedNode.offsetLeft, + top: selectedNode.offsetTop, + width: selectedNode.offsetWidth, + height: selectedNode.offsetHeight }; vars["tv-popup-coords"]=Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,rect); @@ -298,9 +294,8 @@ exports.collectDOMVariables = function(selectedNode,domNode,event){ } if(event && ("clientX" in event) && ("clientY" in event)) { - // Helper to add event X/Y relative to a node const addEventVars = (prefix,node) => { - const {left, top} = node.getBoundingClientRect(); + const{left, top} = node.getBoundingClientRect(); vars[`${prefix}-posx`] = `${event.clientX-left}`; vars[`${prefix}-posy`] = `${event.clientY-top}`; }; From e440f6cb8a1476c616f94079ecdd7b385a170109 Mon Sep 17 00:00:00 2001 From: saqimtiaz Date: Tue, 20 Jan 2026 20:26:44 +0100 Subject: [PATCH 4/5] refactor: further tweaks --- core/modules/utils/dom/dom.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index d65e3f7e6..ef7a325ea 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -271,26 +271,26 @@ exports.collectDOMVariables = function(selectedNode,domNode,event){ } if("offsetLeft"in selectedNode) { - // Add variables with a (relative and absolute) popup coordinate string for the selected node + // Relative and absolute popup coordinate string for the selected node const rect={ left: selectedNode.offsetLeft, top: selectedNode.offsetTop, width: selectedNode.offsetWidth, height: selectedNode.offsetHeight }; - vars["tv-popup-coords"]=Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,rect); + vars["tv-popup-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,rect); - vars["tv-popup-abs-coords"]=Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,$tw.utils.getBoundingPageRect(selectedNode)); + vars["tv-popup-abs-coords"] = Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,$tw.utils.getBoundingPageRect(selectedNode)); - // Add variables for offset of selected node + // Offset of selected node addRectVars("tv-selectednode",rect); } } if(domNode && "offsetWidth" in domNode) { - // Add variables for widget node size - vars["tv-widgetnode-width"]=`${domNode.offsetWidth}`; - vars["tv-widgetnode-height"]=`${domNode.offsetHeight}`; + // Eidget node size + vars["tv-widgetnode-width"] = `${domNode.offsetWidth}`; + vars["tv-widgetnode-height"] = `${domNode.offsetHeight}`; } if(event && ("clientX" in event) && ("clientY" in event)) { @@ -301,16 +301,16 @@ exports.collectDOMVariables = function(selectedNode,domNode,event){ }; if(selectedNode) { - // Add variables for event position relative to selected node + // Event position relative to selected node addEventVars("event-fromselected",selectedNode); } if(domNode) { - // Add variables for event position relative to event catcher node + // Event position relative to event catcher node addEventVars("event-fromcatcher",domNode); } - // Add variables for event position relative to the viewport + // Event position relative to the viewport vars["event-fromviewport-posx"] = `${event.clientX}`; vars["event-fromviewport-posy"] = `${event.clientY}`; } From 9d24a091e7828b86c05d94d425b199a031a3bbad Mon Sep 17 00:00:00 2001 From: saqimtiaz Date: Tue, 20 Jan 2026 20:28:31 +0100 Subject: [PATCH 5/5] refactor: further tweaks --- core/modules/utils/dom/dom.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/modules/utils/dom/dom.js b/core/modules/utils/dom/dom.js index ef7a325ea..a127a588d 100644 --- a/core/modules/utils/dom/dom.js +++ b/core/modules/utils/dom/dom.js @@ -258,7 +258,7 @@ Collect DOM variables exports.collectDOMVariables = function(selectedNode,domNode,event){ const vars={}; - const addRectVars=(prefix,{left,top,width,height}) => { + const addRectVars = (prefix,{left,top,width,height}) => { vars[`${prefix}-posx`] = `${left}`; vars[`${prefix}-posy`] = `${top}`; vars[`${prefix}-width`] = `${width}`; @@ -267,7 +267,7 @@ exports.collectDOMVariables = function(selectedNode,domNode,event){ if(selectedNode) { for(const{name,value} of selectedNode.attributes) { - vars[`dom-${name}`]=`${value}`; + vars[`dom-${name}`] = `${value}`; } if("offsetLeft"in selectedNode) { @@ -288,7 +288,7 @@ exports.collectDOMVariables = function(selectedNode,domNode,event){ } if(domNode && "offsetWidth" in domNode) { - // Eidget node size + // Widget node size vars["tv-widgetnode-width"] = `${domNode.offsetWidth}`; vars["tv-widgetnode-height"] = `${domNode.offsetHeight}`; }