text: /**
   * Copyright (c) 2006-2015, JGraph Ltd
   * Copyright (c) 2006-2015, Gaudenz Alder
   */
  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;
    })()
  );
  