diff --git a/editor/js/ui/diff.js b/editor/js/ui/diff.js index aff000d06..96546617b 100644 --- a/editor/js/ui/diff.js +++ b/editor/js/ui/diff.js @@ -563,6 +563,7 @@ RED.diff = (function() { return div; } function createNodePropertiesTable(def,node,localNodeObj,remoteNodeObj) { + var propertyElements = {}; var localNode = localNodeObj.node; var remoteNode; if (remoteNodeObj) { @@ -589,7 +590,7 @@ RED.diff = (function() { localCell.addClass("node-diff-node-unchanged"); $('').appendTo(localCell); element = $('').appendTo(localCell); - RED.utils.createObjectElement(localNode.id).appendTo(element); + propertyElements['local.id'] = RED.utils.createObjectElement(localNode.id).appendTo(element); } else { localCell.addClass("node-diff-empty"); } @@ -599,7 +600,7 @@ RED.diff = (function() { if (remoteNode) { $('').appendTo(remoteCell); element = $('').appendTo(remoteCell); - RED.utils.createObjectElement(remoteNode.id).appendTo(element); + propertyElements['remote.id'] = RED.utils.createObjectElement(remoteNode.id).appendTo(element); } else { remoteCell.addClass("node-diff-empty"); } @@ -632,7 +633,17 @@ RED.diff = (function() { localCell.addClass("node-diff-node-"+(localChanged?"changed":"unchanged")); $(''+(localChanged?'':'')+'').appendTo(localCell); element = $('').appendTo(localCell); - RED.utils.createObjectElement({x:localNode.x,y:localNode.y}).appendTo(element); + propertyElements['local.position'] = RED.utils.createObjectElement({x:localNode.x,y:localNode.y}, + { + path: "position", + exposeApi: true, + ontoggle: function(path,state) { + if (propertyElements['remote.'+path]) { + propertyElements['remote.'+path].prop('expand')(path,state) + } + } + } + ).appendTo(element); } else { localCell.addClass("node-diff-empty"); } @@ -643,7 +654,17 @@ RED.diff = (function() { if (remoteNode) { $(''+(remoteChanged?'':'')+'').appendTo(remoteCell); element = $('').appendTo(remoteCell); - RED.utils.createObjectElement({x:remoteNode.x,y:remoteNode.y}).appendTo(element); + propertyElements['remote.position'] = RED.utils.createObjectElement({x:remoteNode.x,y:remoteNode.y}, + { + path: "position", + exposeApi: true, + ontoggle: function(path,state) { + if (propertyElements['local.'+path]) { + propertyElements['local.'+path].prop('expand')(path,state); + } + } + } + ).appendTo(element); } else { remoteCell.addClass("node-diff-empty"); } @@ -748,7 +769,17 @@ RED.diff = (function() { $('').appendTo(localCell); } element = $('').appendTo(localCell); - RED.utils.createObjectElement(localNode[d]).appendTo(element); + propertyElements['local.'+d] = RED.utils.createObjectElement(localNode[d], + { + path: d, + exposeApi: true, + ontoggle: function(path,state) { + if (propertyElements['remote.'+d]) { + propertyElements['remote.'+d].prop('expand')(path,state) + } + } + } + ).appendTo(element); } else { localCell.addClass("node-diff-empty"); } @@ -763,7 +794,17 @@ RED.diff = (function() { $('').appendTo(remoteCell); } element = $('').appendTo(remoteCell); - RED.utils.createObjectElement(remoteNode[d]).appendTo(element); + propertyElements['remote.'+d] = RED.utils.createObjectElement(remoteNode[d], + { + path: d, + exposeApi: true, + ontoggle: function(path,state) { + if (propertyElements['local.'+d]) { + propertyElements['local.'+d].prop('expand')(path,state) + } + } + } + ).appendTo(element); } else { remoteCell.addClass("node-diff-empty"); } @@ -1009,6 +1050,7 @@ RED.diff = (function() { // console.log(conflicted); return diff; } + function showDiff(diff) { var localDiff = diff.localDiff; var remoteDiff = diff.remoteDiff; @@ -1267,7 +1309,6 @@ RED.diff = (function() { RED.palette.refresh(); RED.workspaces.refresh(); RED.sidebar.config.refresh(); - } return { init: init, diff --git a/editor/js/ui/utils.js b/editor/js/ui/utils.js index 0a2053531..25d30fa15 100644 --- a/editor/js/ui/utils.js +++ b/editor/js/ui/utils.js @@ -50,24 +50,58 @@ RED.utils = (function() { } return result; } - function makeExpandable(el,onexpand,expand) { + function makeExpandable(el,onbuild,ontoggle,expand) { el.addClass("debug-message-expandable"); + el.prop('toggle',function() { + return function(state) { + var parent = el.parent(); + if (parent.hasClass('collapsed')) { + if (state) { + if (onbuild && !parent.hasClass('built')) { + onbuild(); + parent.addClass('built'); + } + parent.removeClass('collapsed'); + return true; + } + } else { + if (!state) { + parent.addClass('collapsed'); + return true; + } + } + return false; + } + }); el.click(function(e) { var parent = $(this).parent(); - if (parent.hasClass('collapsed')) { - if (onexpand && !parent.hasClass('built')) { - onexpand(); - parent.addClass('built'); + var currentState = !parent.hasClass('collapsed'); + if ($(this).prop('toggle')(!currentState)) { + if (ontoggle) { + ontoggle(!currentState); } - parent.removeClass('collapsed'); - } else { - parent.addClass('collapsed'); } + // if (parent.hasClass('collapsed')) { + // if (onbuild && !parent.hasClass('built')) { + // onbuild(); + // parent.addClass('built'); + // } + // if (ontoggle) { + // ontoggle(true); + // } + // parent.removeClass('collapsed'); + // } else { + // parent.addClass('collapsed'); + // if (ontoggle) { + // ontoggle(false); + // } + // } e.preventDefault(); }); if (expand) { el.click(); } + } var pinnedPaths = {}; @@ -189,10 +223,23 @@ RED.utils = (function() { } } - function buildMessageElement(obj,key,typeHint,hideKey,path,sourceId,rootPath,expandPaths) { + function buildMessageElement(obj,options) { + options = options || {}; + var key = options.key; + var typeHint = options.typeHint; + var hideKey = options.hideKey; + var path = options.path; + var sourceId = options.sourceId; + var rootPath = options.rootPath; + var expandPaths = options.expandPaths; + var ontoggle = options.ontoggle; + var exposeApi = options.exposeApi; + + var subElements = {}; var i; var e; var entryObj; + var expandableHeader; var header; var headerHead; var value; @@ -257,7 +304,7 @@ RED.utils = (function() { $('').html(typeHint||'string').appendTo(header); var row = $('').appendTo(element); $('
').text(obj).appendTo(row);
-                },checkExpanded(strippedKey,expandPaths));
+                },function(state) {if (ontoggle) { ontoggle(path,state);}}, checkExpanded(strippedKey,expandPaths));
             }
             e = $('').html('"'+formatString(sanitize(obj))+'"').appendTo(entryObj);
             if (/^#[0-9a-f]{6}$/i.test(obj)) {
@@ -356,7 +403,20 @@ RED.utils = (function() {
                     if (fullLength <= 10) {
                         for (i=0;i