From cc8fe8c269a7f8441375432b996792072fe3a9e7 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:39:54 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/ui/mxgraph/src/js/io/mxRootChangeCodec.js | 83 ++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 js/ui/mxgraph/src/js/io/mxRootChangeCodec.js diff --git a/js/ui/mxgraph/src/js/io/mxRootChangeCodec.js b/js/ui/mxgraph/src/js/io/mxRootChangeCodec.js new file mode 100644 index 0000000..bf8c47d --- /dev/null +++ b/js/ui/mxgraph/src/js/io/mxRootChangeCodec.js @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2006-2015, JGraph Ltd + * Copyright (c) 2006-2015, Gaudenz Alder + */ +mxCodecRegistry.register(function() +{ + /** + * Class: mxRootChangeCodec + * + * Codec for s. This class is created and registered + * dynamically at load time and used implicitely via and + * the . + * + * Transient Fields: + * + * - model + * - previous + * - root + */ + var codec = new mxObjectCodec(new mxRootChange(), + ['model', 'previous', 'root']); + + /** + * Function: onEncode + * + * Encodes the child recursively. + */ + codec.afterEncode = function(enc, obj, node) + { + enc.encodeCell(obj.root, node); + + return node; + }; + + /** + * Function: beforeDecode + * + * Decodes the optional children as cells + * using the respective decoder. + */ + codec.beforeDecode = function(dec, node, obj) + { + if (node.firstChild != null && + node.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) + { + // Makes sure the original node isn't modified + node = node.cloneNode(true); + + var tmp = node.firstChild; + obj.root = dec.decodeCell(tmp, false); + + var tmp2 = tmp.nextSibling; + tmp.parentNode.removeChild(tmp); + tmp = tmp2; + + while (tmp != null) + { + tmp2 = tmp.nextSibling; + dec.decodeCell(tmp); + tmp.parentNode.removeChild(tmp); + tmp = tmp2; + } + } + + return node; + }; + + /** + * Function: afterDecode + * + * Restores the state by assigning the previous value. + */ + codec.afterDecode = function(dec, node, obj) + { + obj.previous = obj.root; + + return obj; + }; + + // Returns the codec into the registry + return codec; + +}());