diff options
Diffstat (limited to 'src/js/io/mxRootChangeCodec.js')
-rw-r--r-- | src/js/io/mxRootChangeCodec.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/js/io/mxRootChangeCodec.js b/src/js/io/mxRootChangeCodec.js new file mode 100644 index 0000000..fda613a --- /dev/null +++ b/src/js/io/mxRootChangeCodec.js @@ -0,0 +1,83 @@ +/** + * $Id: mxRootChangeCodec.js,v 1.6 2010-09-15 14:38:51 gaudenz Exp $ + * Copyright (c) 2006-2010, JGraph Ltd + */ +mxCodecRegistry.register(function() +{ + /** + * Class: mxRootChangeCodec + * + * Codec for <mxRootChange>s. This class is created and registered + * dynamically at load time and used implicitely via <mxCodec> and + * the <mxCodecRegistry>. + * + * 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; + +}()); |