summaryrefslogtreecommitdiff
path: root/src/js/io
diff options
context:
space:
mode:
authoradhitya2016-04-10 12:28:28 +0000
committeradhitya2016-04-10 12:28:28 +0000
commit0b1c069f88dab0288a01c6aed4d77f4e6d2f6474 (patch)
treeb5ae6b1f512a674f79674a12f675d22324cd268f /src/js/io
parent1993f1da86e293aaf9996b8d7a4f6d9a9224f270 (diff)
downloadxcos-on-web-0b1c069f88dab0288a01c6aed4d77f4e6d2f6474.tar.gz
xcos-on-web-0b1c069f88dab0288a01c6aed4d77f4e6d2f6474.tar.bz2
xcos-on-web-0b1c069f88dab0288a01c6aed4d77f4e6d2f6474.zip
Removed (un)necessary files
Diffstat (limited to 'src/js/io')
-rw-r--r--src/js/io/mxCellCodec.js170
-rw-r--r--src/js/io/mxChildChangeCodec.js149
-rw-r--r--src/js/io/mxCodec.js531
-rw-r--r--src/js/io/mxCodecRegistry.js137
-rw-r--r--src/js/io/mxDefaultKeyHandlerCodec.js88
-rw-r--r--src/js/io/mxDefaultPopupMenuCodec.js54
-rw-r--r--src/js/io/mxDefaultToolbarCodec.js301
-rw-r--r--src/js/io/mxEditorCodec.js246
-rw-r--r--src/js/io/mxGenericChangeCodec.js64
-rw-r--r--src/js/io/mxGraphCodec.js28
-rw-r--r--src/js/io/mxGraphViewCodec.js197
-rw-r--r--src/js/io/mxModelCodec.js80
-rw-r--r--src/js/io/mxObjectCodec.js983
-rw-r--r--src/js/io/mxRootChangeCodec.js83
-rw-r--r--src/js/io/mxStylesheetCodec.js210
-rw-r--r--src/js/io/mxTerminalChangeCodec.js42
16 files changed, 0 insertions, 3363 deletions
diff --git a/src/js/io/mxCellCodec.js b/src/js/io/mxCellCodec.js
deleted file mode 100644
index cbcd651..0000000
--- a/src/js/io/mxCellCodec.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- * $Id: mxCellCodec.js,v 1.22 2010-10-21 07:12:31 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxCellCodec
- *
- * Codec for <mxCell>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec>
- * and the <mxCodecRegistry>.
- *
- * Transient Fields:
- *
- * - children
- * - edges
- * - overlays
- * - mxTransient
- *
- * Reference Fields:
- *
- * - parent
- * - source
- * - target
- *
- * Transient fields can be added using the following code:
- *
- * mxCodecRegistry.getCodec(mxCell).exclude.push('name_of_field');
- */
- var codec = new mxObjectCodec(new mxCell(),
- ['children', 'edges', 'overlays', 'mxTransient'],
- ['parent', 'source', 'target']);
-
- /**
- * Function: isCellCodec
- *
- * Returns true since this is a cell codec.
- */
- codec.isCellCodec = function()
- {
- return true;
- };
-
- /**
- * Function: isExcluded
- *
- * Excludes user objects that are XML nodes.
- */
- codec.isExcluded = function(obj, attr, value, isWrite)
- {
- return mxObjectCodec.prototype.isExcluded.apply(this, arguments) ||
- (isWrite && attr == 'value' &&
- value.nodeType == mxConstants.NODETYPE_ELEMENT);
- };
-
- /**
- * Function: afterEncode
- *
- * Encodes an <mxCell> and wraps the XML up inside the
- * XML of the user object (inversion).
- */
- codec.afterEncode = function(enc, obj, node)
- {
- if (obj.value != null &&
- obj.value.nodeType == mxConstants.NODETYPE_ELEMENT)
- {
- // Wraps the graphical annotation up in the user object (inversion)
- // by putting the result of the default encoding into a clone of the
- // user object (node type 1) and returning this cloned user object.
- var tmp = node;
- node = (mxClient.IS_IE) ?
- obj.value.cloneNode(true) :
- enc.document.importNode(obj.value, true);
- node.appendChild(tmp);
-
- // Moves the id attribute to the outermost XML node, namely the
- // node which denotes the object boundaries in the file.
- var id = tmp.getAttribute('id');
- node.setAttribute('id', id);
- tmp.removeAttribute('id');
- }
-
- return node;
- };
-
- /**
- * Function: beforeDecode
- *
- * Decodes an <mxCell> and uses the enclosing XML node as
- * the user object for the cell (inversion).
- */
- codec.beforeDecode = function(dec, node, obj)
- {
- var inner = node;
- var classname = this.getName();
-
- if (node.nodeName != classname)
- {
- // Passes the inner graphical annotation node to the
- // object codec for further processing of the cell.
- var tmp = node.getElementsByTagName(classname)[0];
-
- if (tmp != null &&
- tmp.parentNode == node)
- {
- mxUtils.removeWhitespace(tmp, true);
- mxUtils.removeWhitespace(tmp, false);
- tmp.parentNode.removeChild(tmp);
- inner = tmp;
- }
- else
- {
- inner = null;
- }
-
- // Creates the user object out of the XML node
- obj.value = node.cloneNode(true);
- var id = obj.value.getAttribute('id');
-
- if (id != null)
- {
- obj.setId(id);
- obj.value.removeAttribute('id');
- }
- }
- else
- {
- // Uses ID from XML file as ID for cell in model
- obj.setId(node.getAttribute('id'));
- }
-
- // Preprocesses and removes all Id-references in order to use the
- // correct encoder (this) for the known references to cells (all).
- if (inner != null)
- {
- for (var i = 0; i < this.idrefs.length; i++)
- {
- var attr = this.idrefs[i];
- var ref = inner.getAttribute(attr);
-
- if (ref != null)
- {
- inner.removeAttribute(attr);
- var object = dec.objects[ref] || dec.lookup(ref);
-
- if (object == null)
- {
- // Needs to decode forward reference
- var element = dec.getElementById(ref);
-
- if (element != null)
- {
- var decoder = mxCodecRegistry.codecs[element.nodeName] || this;
- object = decoder.decode(dec, element);
- }
- }
-
- obj[attr] = object;
- }
- }
- }
-
- return inner;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxChildChangeCodec.js b/src/js/io/mxChildChangeCodec.js
deleted file mode 100644
index deeb57b..0000000
--- a/src/js/io/mxChildChangeCodec.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * $Id: mxChildChangeCodec.js,v 1.12 2010-09-15 14:38:52 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxChildChangeCodec
- *
- * Codec for <mxChildChange>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec> and
- * the <mxCodecRegistry>.
- *
- * Transient Fields:
- *
- * - model
- * - previous
- * - previousIndex
- * - child
- *
- * Reference Fields:
- *
- * - parent
- */
- var codec = new mxObjectCodec(new mxChildChange(),
- ['model', 'child', 'previousIndex'],
- ['parent', 'previous']);
-
- /**
- * Function: isReference
- *
- * Returns true for the child attribute if the child
- * cell had a previous parent or if we're reading the
- * child as an attribute rather than a child node, in
- * which case it's always a reference.
- */
- codec.isReference = function(obj, attr, value, isWrite)
- {
- if (attr == 'child' &&
- (obj.previous != null ||
- !isWrite))
- {
- return true;
- }
-
- return mxUtils.indexOf(this.idrefs, attr) >= 0;
- };
-
- /**
- * Function: afterEncode
- *
- * Encodes the child recusively and adds the result
- * to the given node.
- */
- codec.afterEncode = function(enc, obj, node)
- {
- if (this.isReference(obj, 'child', obj.child, true))
- {
- // Encodes as reference (id)
- node.setAttribute('child', enc.getId(obj.child));
- }
- else
- {
- // At this point, the encoder is no longer able to know which cells
- // are new, so we have to encode the complete cell hierarchy and
- // ignore the ones that are already there at decoding time. Note:
- // This can only be resolved by moving the notify event into the
- // execute of the edit.
- enc.encodeCell(obj.child, node);
- }
-
- return node;
- };
-
- /**
- * Function: beforeDecode
- *
- * Decodes the any child nodes as using the respective
- * codec from the registry.
- */
- 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.child = dec.decodeCell(tmp, false);
-
- var tmp2 = tmp.nextSibling;
- tmp.parentNode.removeChild(tmp);
- tmp = tmp2;
-
- while (tmp != null)
- {
- tmp2 = tmp.nextSibling;
-
- if (tmp.nodeType == mxConstants.NODETYPE_ELEMENT)
- {
- // Ignores all existing cells because those do not need to
- // be re-inserted into the model. Since the encoded version
- // of these cells contains the new parent, this would leave
- // to an inconsistent state on the model (ie. a parent
- // change without a call to parentForCellChanged).
- var id = tmp.getAttribute('id');
-
- if (dec.lookup(id) == null)
- {
- dec.decodeCell(tmp);
- }
- }
-
- tmp.parentNode.removeChild(tmp);
- tmp = tmp2;
- }
- }
- else
- {
- var childRef = node.getAttribute('child');
- obj.child = dec.getObject(childRef);
- }
-
- return node;
- };
-
- /**
- * Function: afterDecode
- *
- * Restores object state in the child change.
- */
- codec.afterDecode = function(dec, node, obj)
- {
- // Cells are encoded here after a complete transaction so the previous
- // parent must be restored on the cell for the case where the cell was
- // added. This is needed for the local model to identify the cell as a
- // new cell and register the ID.
- obj.child.parent = obj.previous;
- obj.previous = obj.parent;
- obj.previousIndex = obj.index;
-
- return obj;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxCodec.js b/src/js/io/mxCodec.js
deleted file mode 100644
index b8bfc6a..0000000
--- a/src/js/io/mxCodec.js
+++ /dev/null
@@ -1,531 +0,0 @@
-/**
- * $Id: mxCodec.js,v 1.48 2012-01-04 10:01:16 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-/**
- * Class: mxCodec
- *
- * XML codec for JavaScript object graphs. See <mxObjectCodec> for a
- * description of the general encoding/decoding scheme. This class uses the
- * codecs registered in <mxCodecRegistry> for encoding/decoding each object.
- *
- * References:
- *
- * In order to resolve references, especially forward references, the mxCodec
- * constructor must be given the document that contains the referenced
- * elements.
- *
- * Examples:
- *
- * The following code is used to encode a graph model.
- *
- * (code)
- * var encoder = new mxCodec();
- * var result = encoder.encode(graph.getModel());
- * var xml = mxUtils.getXml(result);
- * (end)
- *
- * Example:
- *
- * Using the following code, the selection cells of a graph are encoded and the
- * output is displayed in a dialog box.
- *
- * (code)
- * var enc = new mxCodec();
- * var cells = graph.getSelectionCells();
- * mxUtils.alert(mxUtils.getPrettyXml(enc.encode(cells)));
- * (end)
- *
- * Newlines in the XML can be coverted to <br>, in which case a '<br>' argument
- * must be passed to <mxUtils.getXml> as the second argument.
- *
- * Example:
- *
- * Using the code below, an XML document is decodec into an existing model. The
- * document may be obtained using one of the functions in mxUtils for loading
- * an XML file, eg. <mxUtils.get>, or using <mxUtils.parseXml> for parsing an
- * XML string.
- *
- * (code)
- * var decoder = new mxCodec(doc)
- * decoder.decode(doc.documentElement, graph.getModel());
- * (end)
- *
- * Debugging:
- *
- * For debugging i/o you can use the following code to get the sequence of
- * encoded objects:
- *
- * (code)
- * var oldEncode = mxCodec.prototype.encode;
- * mxCodec.prototype.encode = function(obj)
- * {
- * mxLog.show();
- * mxLog.debug('mxCodec.encode: obj='+mxUtils.getFunctionName(obj.constructor));
- *
- * return oldEncode.apply(this, arguments);
- * };
- * (end)
- *
- * Constructor: mxCodec
- *
- * Constructs an XML encoder/decoder for the specified
- * owner document.
- *
- * Parameters:
- *
- * document - Optional XML document that contains the data.
- * If no document is specified then a new document is created
- * using <mxUtils.createXmlDocument>.
- */
-function mxCodec(document)
-{
- this.document = document || mxUtils.createXmlDocument();
- this.objects = [];
-};
-
-/**
- * Variable: document
- *
- * The owner document of the codec.
- */
-mxCodec.prototype.document = null;
-
-/**
- * Variable: objects
- *
- * Maps from IDs to objects.
- */
-mxCodec.prototype.objects = null;
-
-/**
- * Variable: encodeDefaults
- *
- * Specifies if default values should be encoded. Default is false.
- */
-mxCodec.prototype.encodeDefaults = false;
-
-
-/**
- * Function: putObject
- *
- * Assoiates the given object with the given ID and returns the given object.
- *
- * Parameters
- *
- * id - ID for the object to be associated with.
- * obj - Object to be associated with the ID.
- */
-mxCodec.prototype.putObject = function(id, obj)
-{
- this.objects[id] = obj;
-
- return obj;
-};
-
-/**
- * Function: getObject
- *
- * Returns the decoded object for the element with the specified ID in
- * <document>. If the object is not known then <lookup> is used to find an
- * object. If no object is found, then the element with the respective ID
- * from the document is parsed using <decode>.
- */
-mxCodec.prototype.getObject = function(id)
-{
- var obj = null;
-
- if (id != null)
- {
- obj = this.objects[id];
-
- if (obj == null)
- {
- obj = this.lookup(id);
-
- if (obj == null)
- {
- var node = this.getElementById(id);
-
- if (node != null)
- {
- obj = this.decode(node);
- }
- }
- }
- }
-
- return obj;
-};
-
-/**
- * Function: lookup
- *
- * Hook for subclassers to implement a custom lookup mechanism for cell IDs.
- * This implementation always returns null.
- *
- * Example:
- *
- * (code)
- * var codec = new mxCodec();
- * codec.lookup = function(id)
- * {
- * return model.getCell(id);
- * };
- * (end)
- *
- * Parameters:
- *
- * id - ID of the object to be returned.
- */
-mxCodec.prototype.lookup = function(id)
-{
- return null;
-};
-
-/**
- * Function: getElementById
- *
- * Returns the element with the given ID from <document>. The optional attr
- * argument specifies the name of the ID attribute. Default is "id". The
- * XPath expression used to find the element is //*[@attr='arg'] where attr is
- * the name of the ID attribute and arg is the given id.
- *
- * Parameters:
- *
- * id - String that contains the ID.
- * attr - Optional string for the attributename. Default is "id".
- */
-mxCodec.prototype.getElementById = function(id, attr)
-{
- attr = (attr != null) ? attr : 'id';
-
- return mxUtils.findNodeByAttribute(this.document.documentElement, attr, id);
-};
-
-/**
- * Function: getId
- *
- * Returns the ID of the specified object. This implementation
- * calls <reference> first and if that returns null handles
- * the object as an <mxCell> by returning their IDs using
- * <mxCell.getId>. If no ID exists for the given cell, then
- * an on-the-fly ID is generated using <mxCellPath.create>.
- *
- * Parameters:
- *
- * obj - Object to return the ID for.
- */
-mxCodec.prototype.getId = function(obj)
-{
- var id = null;
-
- if (obj != null)
- {
- id = this.reference(obj);
-
- if (id == null && obj instanceof mxCell)
- {
- id = obj.getId();
-
- if (id == null)
- {
- // Uses an on-the-fly Id
- id = mxCellPath.create(obj);
-
- if (id.length == 0)
- {
- id = 'root';
- }
- }
- }
- }
-
- return id;
-};
-
-/**
- * Function: reference
- *
- * Hook for subclassers to implement a custom method
- * for retrieving IDs from objects. This implementation
- * always returns null.
- *
- * Example:
- *
- * (code)
- * var codec = new mxCodec();
- * codec.reference = function(obj)
- * {
- * return obj.getCustomId();
- * };
- * (end)
- *
- * Parameters:
- *
- * obj - Object whose ID should be returned.
- */
-mxCodec.prototype.reference = function(obj)
-{
- return null;
-};
-
-/**
- * Function: encode
- *
- * Encodes the specified object and returns the resulting
- * XML node.
- *
- * Parameters:
- *
- * obj - Object to be encoded.
- */
-mxCodec.prototype.encode = function(obj)
-{
- var node = null;
-
- if (obj != null && obj.constructor != null)
- {
- var enc = mxCodecRegistry.getCodec(obj.constructor);
-
- if (enc != null)
- {
- node = enc.encode(this, obj);
- }
- else
- {
- if (mxUtils.isNode(obj))
- {
- node = (mxClient.IS_IE) ? obj.cloneNode(true) :
- this.document.importNode(obj, true);
- }
- else
- {
- mxLog.warn('mxCodec.encode: No codec for '+
- mxUtils.getFunctionName(obj.constructor));
- }
- }
- }
-
- return node;
-};
-
-/**
- * Function: decode
- *
- * Decodes the given XML node. The optional "into"
- * argument specifies an existing object to be
- * used. If no object is given, then a new instance
- * is created using the constructor from the codec.
- *
- * The function returns the passed in object or
- * the new instance if no object was given.
- *
- * Parameters:
- *
- * node - XML node to be decoded.
- * into - Optional object to be decodec into.
- */
-mxCodec.prototype.decode = function(node, into)
-{
- var obj = null;
-
- if (node != null && node.nodeType == mxConstants.NODETYPE_ELEMENT)
- {
- var ctor = null;
-
- try
- {
- ctor = eval(node.nodeName);
- }
- catch (err)
- {
- // ignore
- }
-
- try
- {
- var dec = mxCodecRegistry.getCodec(ctor);
-
- if (dec != null)
- {
- obj = dec.decode(this, node, into);
- }
- else
- {
- obj = node.cloneNode(true);
- obj.removeAttribute('as');
- }
- }
- catch (err)
- {
- mxLog.debug('Cannot decode '+node.nodeName+': '+err.message);
- }
- }
-
- return obj;
-};
-
-/**
- * Function: encodeCell
- *
- * Encoding of cell hierarchies is built-into the core, but
- * is a higher-level function that needs to be explicitely
- * used by the respective object encoders (eg. <mxModelCodec>,
- * <mxChildChangeCodec> and <mxRootChangeCodec>). This
- * implementation writes the given cell and its children as a
- * (flat) sequence into the given node. The children are not
- * encoded if the optional includeChildren is false. The
- * function is in charge of adding the result into the
- * given node and has no return value.
- *
- * Parameters:
- *
- * cell - <mxCell> to be encoded.
- * node - Parent XML node to add the encoded cell into.
- * includeChildren - Optional boolean indicating if the
- * function should include all descendents. Default is true.
- */
-mxCodec.prototype.encodeCell = function(cell, node, includeChildren)
-{
- node.appendChild(this.encode(cell));
-
- if (includeChildren == null || includeChildren)
- {
- var childCount = cell.getChildCount();
-
- for (var i = 0; i < childCount; i++)
- {
- this.encodeCell(cell.getChildAt(i), node);
- }
- }
-};
-
-/**
- * Function: isCellCodec
- *
- * Returns true if the given codec is a cell codec. This uses
- * <mxCellCodec.isCellCodec> to check if the codec is of the
- * given type.
- */
-mxCodec.prototype.isCellCodec = function(codec)
-{
- if (codec != null && typeof(codec.isCellCodec) == 'function')
- {
- return codec.isCellCodec();
- }
-
- return false;
-};
-
-/**
- * Function: decodeCell
- *
- * Decodes cells that have been encoded using inversion, ie.
- * where the user object is the enclosing node in the XML,
- * and restores the group and graph structure in the cells.
- * Returns a new <mxCell> instance that represents the
- * given node.
- *
- * Parameters:
- *
- * node - XML node that contains the cell data.
- * restoreStructures - Optional boolean indicating whether
- * the graph structure should be restored by calling insert
- * and insertEdge on the parent and terminals, respectively.
- * Default is true.
- */
-mxCodec.prototype.decodeCell = function(node, restoreStructures)
-{
- restoreStructures = (restoreStructures != null) ? restoreStructures : true;
- var cell = null;
-
- if (node != null && node.nodeType == mxConstants.NODETYPE_ELEMENT)
- {
- // Tries to find a codec for the given node name. If that does
- // not return a codec then the node is the user object (an XML node
- // that contains the mxCell, aka inversion).
- var decoder = mxCodecRegistry.getCodec(node.nodeName);
-
- // Tries to find the codec for the cell inside the user object.
- // This assumes all node names inside the user object are either
- // not registered or they correspond to a class for cells.
- if (!this.isCellCodec(decoder))
- {
- var child = node.firstChild;
-
- while (child != null && !this.isCellCodec(decoder))
- {
- decoder = mxCodecRegistry.getCodec(child.nodeName);
- child = child.nextSibling;
- }
- }
-
- if (!this.isCellCodec(decoder))
- {
- decoder = mxCodecRegistry.getCodec(mxCell);
- }
-
- cell = decoder.decode(this, node);
-
- if (restoreStructures)
- {
- this.insertIntoGraph(cell);
- }
- }
-
- return cell;
-};
-
-/**
- * Function: insertIntoGraph
- *
- * Inserts the given cell into its parent and terminal cells.
- */
-mxCodec.prototype.insertIntoGraph = function(cell)
-{
- var parent = cell.parent;
- var source = cell.getTerminal(true);
- var target = cell.getTerminal(false);
-
- // Fixes possible inconsistencies during insert into graph
- cell.setTerminal(null, false);
- cell.setTerminal(null, true);
- cell.parent = null;
-
- if (parent != null)
- {
- parent.insert(cell);
- }
-
- if (source != null)
- {
- source.insertEdge(cell, true);
- }
-
- if (target != null)
- {
- target.insertEdge(cell, false);
- }
-};
-
-/**
- * Function: setAttribute
- *
- * Sets the attribute on the specified node to value. This is a
- * helper method that makes sure the attribute and value arguments
- * are not null.
- *
- * Parameters:
- *
- * node - XML node to set the attribute for.
- * attributes - Attributename to be set.
- * value - New value of the attribute.
- */
-mxCodec.prototype.setAttribute = function(node, attribute, value)
-{
- if (attribute != null && value != null)
- {
- node.setAttribute(attribute, value);
- }
-};
diff --git a/src/js/io/mxCodecRegistry.js b/src/js/io/mxCodecRegistry.js
deleted file mode 100644
index a0a0f20..0000000
--- a/src/js/io/mxCodecRegistry.js
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * $Id: mxCodecRegistry.js,v 1.12 2010-04-30 13:18:21 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-var mxCodecRegistry =
-{
- /**
- * Class: mxCodecRegistry
- *
- * Singleton class that acts as a global registry for codecs.
- *
- * Adding an <mxCodec>:
- *
- * 1. Define a default codec with a new instance of the
- * object to be handled.
- *
- * (code)
- * var codec = new mxObjectCodec(new mxGraphModel());
- * (end)
- *
- * 2. Define the functions required for encoding and decoding
- * objects.
- *
- * (code)
- * codec.encode = function(enc, obj) { ... }
- * codec.decode = function(dec, node, into) { ... }
- * (end)
- *
- * 3. Register the codec in the <mxCodecRegistry>.
- *
- * (code)
- * mxCodecRegistry.register(codec);
- * (end)
- *
- * <mxObjectCodec.decode> may be used to either create a new
- * instance of an object or to configure an existing instance,
- * in which case the into argument points to the existing
- * object. In this case, we say the codec "configures" the
- * object.
- *
- * Variable: codecs
- *
- * Maps from constructor names to codecs.
- */
- codecs: [],
-
- /**
- * Variable: aliases
- *
- * Maps from classnames to codecnames.
- */
- aliases: [],
-
- /**
- * Function: register
- *
- * Registers a new codec and associates the name of the template
- * constructor in the codec with the codec object.
- *
- * Parameters:
- *
- * codec - <mxObjectCodec> to be registered.
- */
- register: function(codec)
- {
- if (codec != null)
- {
- var name = codec.getName();
- mxCodecRegistry.codecs[name] = codec;
-
- var classname = mxUtils.getFunctionName(codec.template.constructor);
-
- if (classname != name)
- {
- mxCodecRegistry.addAlias(classname, name);
- }
- }
-
- return codec;
- },
-
- /**
- * Function: addAlias
- *
- * Adds an alias for mapping a classname to a codecname.
- */
- addAlias: function(classname, codecname)
- {
- mxCodecRegistry.aliases[classname] = codecname;
- },
-
- /**
- * Function: getCodec
- *
- * Returns a codec that handles objects that are constructed
- * using the given constructor.
- *
- * Parameters:
- *
- * ctor - JavaScript constructor function.
- */
- getCodec: function(ctor)
- {
- var codec = null;
-
- if (ctor != null)
- {
- var name = mxUtils.getFunctionName(ctor);
- var tmp = mxCodecRegistry.aliases[name];
-
- if (tmp != null)
- {
- name = tmp;
- }
-
- codec = mxCodecRegistry.codecs[name];
-
- // Registers a new default codec for the given constructor
- // if no codec has been previously defined.
- if (codec == null)
- {
- try
- {
- codec = new mxObjectCodec(new ctor());
- mxCodecRegistry.register(codec);
- }
- catch (e)
- {
- // ignore
- }
- }
- }
-
- return codec;
- }
-
-};
diff --git a/src/js/io/mxDefaultKeyHandlerCodec.js b/src/js/io/mxDefaultKeyHandlerCodec.js
deleted file mode 100644
index 628524a..0000000
--- a/src/js/io/mxDefaultKeyHandlerCodec.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * $Id: mxDefaultKeyHandlerCodec.js,v 1.5 2010-01-02 09:45:15 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxDefaultKeyHandlerCodec
- *
- * Custom codec for configuring <mxDefaultKeyHandler>s. This class is created
- * and registered dynamically at load time and used implicitely via
- * <mxCodec> and the <mxCodecRegistry>. This codec only reads configuration
- * data for existing key handlers, it does not encode or create key handlers.
- */
- var codec = new mxObjectCodec(new mxDefaultKeyHandler());
-
- /**
- * Function: encode
- *
- * Returns null.
- */
- codec.encode = function(enc, obj)
- {
- return null;
- };
-
- /**
- * Function: decode
- *
- * Reads a sequence of the following child nodes
- * and attributes:
- *
- * Child Nodes:
- *
- * add - Binds a keystroke to an actionname.
- *
- * Attributes:
- *
- * as - Keycode.
- * action - Actionname to execute in editor.
- * control - Optional boolean indicating if
- * the control key must be pressed.
- *
- * Example:
- *
- * (code)
- * <mxDefaultKeyHandler as="keyHandler">
- * <add as="88" control="true" action="cut"/>
- * <add as="67" control="true" action="copy"/>
- * <add as="86" control="true" action="paste"/>
- * </mxDefaultKeyHandler>
- * (end)
- *
- * The keycodes are for the x, c and v keys.
- *
- * See also: <mxDefaultKeyHandler.bindAction>,
- * http://www.js-examples.com/page/tutorials__key_codes.html
- */
- codec.decode = function(dec, node, into)
- {
- if (into != null)
- {
- var editor = into.editor;
- node = node.firstChild;
-
- while (node != null)
- {
- if (!this.processInclude(dec, node, into) &&
- node.nodeName == 'add')
- {
- var as = node.getAttribute('as');
- var action = node.getAttribute('action');
- var control = node.getAttribute('control');
-
- into.bindAction(as, action, control);
- }
-
- node = node.nextSibling;
- }
- }
-
- return into;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxDefaultPopupMenuCodec.js b/src/js/io/mxDefaultPopupMenuCodec.js
deleted file mode 100644
index 8d949ea..0000000
--- a/src/js/io/mxDefaultPopupMenuCodec.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * $Id: mxDefaultPopupMenuCodec.js,v 1.6 2010-01-02 09:45:15 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxDefaultPopupMenuCodec
- *
- * Custom codec for configuring <mxDefaultPopupMenu>s. This class is created
- * and registered dynamically at load time and used implicitely via
- * <mxCodec> and the <mxCodecRegistry>. This codec only reads configuration
- * data for existing popup menus, it does not encode or create menus. Note
- * that this codec only passes the configuration node to the popup menu,
- * which uses the config to dynamically create menus. See
- * <mxDefaultPopupMenu.createMenu>.
- */
- var codec = new mxObjectCodec(new mxDefaultPopupMenu());
-
- /**
- * Function: encode
- *
- * Returns null.
- */
- codec.encode = function(enc, obj)
- {
- return null;
- };
-
- /**
- * Function: decode
- *
- * Uses the given node as the config for <mxDefaultPopupMenu>.
- */
- codec.decode = function(dec, node, into)
- {
- var inc = node.getElementsByTagName('include')[0];
-
- if (inc != null)
- {
- this.processInclude(dec, inc, into);
- }
- else if (into != null)
- {
- into.config = node;
- }
-
- return into;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxDefaultToolbarCodec.js b/src/js/io/mxDefaultToolbarCodec.js
deleted file mode 100644
index 6698b9b..0000000
--- a/src/js/io/mxDefaultToolbarCodec.js
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * $Id: mxDefaultToolbarCodec.js,v 1.22 2012-04-11 07:00:52 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxDefaultToolbarCodec
- *
- * Custom codec for configuring <mxDefaultToolbar>s. This class is created
- * and registered dynamically at load time and used implicitely via
- * <mxCodec> and the <mxCodecRegistry>. This codec only reads configuration
- * data for existing toolbars handlers, it does not encode or create toolbars.
- */
- var codec = new mxObjectCodec(new mxDefaultToolbar());
-
- /**
- * Function: encode
- *
- * Returns null.
- */
- codec.encode = function(enc, obj)
- {
- return null;
- };
-
- /**
- * Function: decode
- *
- * Reads a sequence of the following child nodes
- * and attributes:
- *
- * Child Nodes:
- *
- * add - Adds a new item to the toolbar. See below for attributes.
- * separator - Adds a vertical separator. No attributes.
- * hr - Adds a horizontal separator. No attributes.
- * br - Adds a linefeed. No attributes.
- *
- * Attributes:
- *
- * as - Resource key for the label.
- * action - Name of the action to execute in enclosing editor.
- * mode - Modename (see below).
- * template - Template name for cell insertion.
- * style - Optional style to override the template style.
- * icon - Icon (relative/absolute URL).
- * pressedIcon - Optional icon for pressed state (relative/absolute URL).
- * id - Optional ID to be used for the created DOM element.
- * toggle - Optional 0 or 1 to disable toggling of the element. Default is
- * 1 (true).
- *
- * The action, mode and template attributes are mutually exclusive. The
- * style can only be used with the template attribute. The add node may
- * contain another sequence of add nodes with as and action attributes
- * to create a combo box in the toolbar. If the icon is specified then
- * a list of the child node is expected to have its template attribute
- * set and the action is ignored instead.
- *
- * Nodes with a specified template may define a function to be used for
- * inserting the cloned template into the graph. Here is an example of such
- * a node:
- *
- * (code)
- * <add as="Swimlane" template="swimlane" icon="images/swimlane.gif"><![CDATA[
- * function (editor, cell, evt, targetCell)
- * {
- * var pt = mxUtils.convertPoint(
- * editor.graph.container, mxEvent.getClientX(evt),
- * mxEvent.getClientY(evt));
- * return editor.addVertex(targetCell, cell, pt.x, pt.y);
- * }
- * ]]></add>
- * (end)
- *
- * In the above function, editor is the enclosing <mxEditor> instance, cell
- * is the clone of the template, evt is the mouse event that represents the
- * drop and targetCell is the cell under the mousepointer where the drop
- * occurred. The targetCell is retrieved using <mxGraph.getCellAt>.
- *
- * Futhermore, nodes with the mode attribute may define a function to
- * be executed upon selection of the respective toolbar icon. In the
- * example below, the default edge style is set when this specific
- * connect-mode is activated:
- *
- * (code)
- * <add as="connect" mode="connect"><![CDATA[
- * function (editor)
- * {
- * if (editor.defaultEdge != null)
- * {
- * editor.defaultEdge.style = 'straightEdge';
- * }
- * }
- * ]]></add>
- * (end)
- *
- * Modes:
- *
- * select - Left mouse button used for rubberband- & cell-selection.
- * connect - Allows connecting vertices by inserting new edges.
- * pan - Disables selection and switches to panning on the left button.
- *
- * Example:
- *
- * To add items to the toolbar:
- *
- * (code)
- * <mxDefaultToolbar as="toolbar">
- * <add as="save" action="save" icon="images/save.gif"/>
- * <br/><hr/>
- * <add as="select" mode="select" icon="images/select.gif"/>
- * <add as="connect" mode="connect" icon="images/connect.gif"/>
- * </mxDefaultToolbar>
- * (end)
- */
- codec.decode = function(dec, node, into)
- {
- if (into != null)
- {
- var editor = into.editor;
- node = node.firstChild;
-
- while (node != null)
- {
- if (node.nodeType == mxConstants.NODETYPE_ELEMENT)
- {
- if (!this.processInclude(dec, node, into))
- {
- if (node.nodeName == 'separator')
- {
- into.addSeparator();
- }
- else if (node.nodeName == 'br')
- {
- into.toolbar.addBreak();
- }
- else if (node.nodeName == 'hr')
- {
- into.toolbar.addLine();
- }
- else if (node.nodeName == 'add')
- {
- var as = node.getAttribute('as');
- as = mxResources.get(as) || as;
- var icon = node.getAttribute('icon');
- var pressedIcon = node.getAttribute('pressedIcon');
- var action = node.getAttribute('action');
- var mode = node.getAttribute('mode');
- var template = node.getAttribute('template');
- var toggle = node.getAttribute('toggle') != '0';
- var text = mxUtils.getTextContent(node);
- var elt = null;
-
- if (action != null)
- {
- elt = into.addItem(as, icon, action, pressedIcon);
- }
- else if (mode != null)
- {
- var funct = mxUtils.eval(text);
- elt = into.addMode(as, icon, mode, pressedIcon, funct);
- }
- else if (template != null || (text != null && text.length > 0))
- {
- var cell = editor.templates[template];
- var style = node.getAttribute('style');
-
- if (cell != null && style != null)
- {
- cell = cell.clone();
- cell.setStyle(style);
- }
-
- var insertFunction = null;
-
- if (text != null && text.length > 0)
- {
- insertFunction = mxUtils.eval(text);
- }
-
- elt = into.addPrototype(as, icon, cell, pressedIcon, insertFunction, toggle);
- }
- else
- {
- var children = mxUtils.getChildNodes(node);
-
- if (children.length > 0)
- {
- if (icon == null)
- {
- var combo = into.addActionCombo(as);
-
- for (var i=0; i<children.length; i++)
- {
- var child = children[i];
-
- if (child.nodeName == 'separator')
- {
- into.addOption(combo, '---');
- }
- else if (child.nodeName == 'add')
- {
- var lab = child.getAttribute('as');
- var act = child.getAttribute('action');
- into.addActionOption(combo, lab, act);
- }
- }
- }
- else
- {
- var select = null;
- var create = function()
- {
- var template = editor.templates[select.value];
-
- if (template != null)
- {
- var clone = template.clone();
- var style = select.options[select.selectedIndex].cellStyle;
-
- if (style != null)
- {
- clone.setStyle(style);
- }
-
- return clone;
- }
- else
- {
- mxLog.warn('Template '+template+' not found');
- }
-
- return null;
- };
-
- var img = into.addPrototype(as, icon, create, null, null, toggle);
- select = into.addCombo();
-
- // Selects the toolbar icon if a selection change
- // is made in the corresponding combobox.
- mxEvent.addListener(select, 'change', function()
- {
- into.toolbar.selectMode(img, function(evt)
- {
- var pt = mxUtils.convertPoint(editor.graph.container,
- mxEvent.getClientX(evt), mxEvent.getClientY(evt));
-
- return editor.addVertex(null, funct(), pt.x, pt.y);
- });
-
- into.toolbar.noReset = false;
- });
-
- // Adds the entries to the combobox
- for (var i=0; i<children.length; i++)
- {
- var child = children[i];
-
- if (child.nodeName == 'separator')
- {
- into.addOption(select, '---');
- }
- else if (child.nodeName == 'add')
- {
- var lab = child.getAttribute('as');
- var tmp = child.getAttribute('template');
- var option = into.addOption(select, lab, tmp || template);
- option.cellStyle = child.getAttribute('style');
- }
- }
-
- }
- }
- }
-
- // Assigns an ID to the created element to access it later.
- if (elt != null)
- {
- var id = node.getAttribute('id');
-
- if (id != null && id.length > 0)
- {
- elt.setAttribute('id', id);
- }
- }
- }
- }
- }
-
- node = node.nextSibling;
- }
- }
-
- return into;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxEditorCodec.js b/src/js/io/mxEditorCodec.js
deleted file mode 100644
index f61bd95..0000000
--- a/src/js/io/mxEditorCodec.js
+++ /dev/null
@@ -1,246 +0,0 @@
-/**
- * $Id: mxEditorCodec.js,v 1.11 2010-01-04 11:18:26 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxEditorCodec
- *
- * Codec for <mxEditor>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec>
- * and the <mxCodecRegistry>.
- *
- * Transient Fields:
- *
- * - modified
- * - lastSnapshot
- * - ignoredChanges
- * - undoManager
- * - graphContainer
- * - toolbarContainer
- */
- var codec = new mxObjectCodec(new mxEditor(),
- ['modified', 'lastSnapshot', 'ignoredChanges',
- 'undoManager', 'graphContainer', 'toolbarContainer']);
-
- /**
- * Function: beforeDecode
- *
- * Decodes the ui-part of the configuration node by reading
- * a sequence of the following child nodes and attributes
- * and passes the control to the default decoding mechanism:
- *
- * Child Nodes:
- *
- * stylesheet - Adds a CSS stylesheet to the document.
- * resource - Adds the basename of a resource bundle.
- * add - Creates or configures a known UI element.
- *
- * These elements may appear in any order given that the
- * graph UI element is added before the toolbar element
- * (see Known Keys).
- *
- * Attributes:
- *
- * as - Key for the UI element (see below).
- * element - ID for the element in the document.
- * style - CSS style to be used for the element or window.
- * x - X coordinate for the new window.
- * y - Y coordinate for the new window.
- * width - Width for the new window.
- * height - Optional height for the new window.
- * name - Name of the stylesheet (absolute/relative URL).
- * basename - Basename of the resource bundle (see <mxResources>).
- *
- * The x, y, width and height attributes are used to create a new
- * <mxWindow> if the element attribute is not specified in an add
- * node. The name and basename are only used in the stylesheet and
- * resource nodes, respectively.
- *
- * Known Keys:
- *
- * graph - Main graph element (see <mxEditor.setGraphContainer>).
- * title - Title element (see <mxEditor.setTitleContainer>).
- * toolbar - Toolbar element (see <mxEditor.setToolbarContainer>).
- * status - Status bar element (see <mxEditor.setStatusContainer>).
- *
- * Example:
- *
- * (code)
- * <ui>
- * <stylesheet name="css/process.css"/>
- * <resource basename="resources/mxApplication"/>
- * <add as="graph" element="graph"
- * style="left:70px;right:20px;top:20px;bottom:40px"/>
- * <add as="status" element="status"/>
- * <add as="toolbar" x="10" y="20" width="54"/>
- * </ui>
- * (end)
- */
- codec.afterDecode = function(dec, node, obj)
- {
- // Assigns the specified templates for edges
- var defaultEdge = node.getAttribute('defaultEdge');
-
- if (defaultEdge != null)
- {
- node.removeAttribute('defaultEdge');
- obj.defaultEdge = obj.templates[defaultEdge];
- }
-
- // Assigns the specified templates for groups
- var defaultGroup = node.getAttribute('defaultGroup');
-
- if (defaultGroup != null)
- {
- node.removeAttribute('defaultGroup');
- obj.defaultGroup = obj.templates[defaultGroup];
- }
-
- return obj;
- };
-
- /**
- * Function: decodeChild
- *
- * Overrides decode child to handle special child nodes.
- */
- codec.decodeChild = function(dec, child, obj)
- {
- if (child.nodeName == 'Array')
- {
- var role = child.getAttribute('as');
-
- if (role == 'templates')
- {
- this.decodeTemplates(dec, child, obj);
- return;
- }
- }
- else if (child.nodeName == 'ui')
- {
- this.decodeUi(dec, child, obj);
- return;
- }
-
- mxObjectCodec.prototype.decodeChild.apply(this, arguments);
- };
-
- /**
- * Function: decodeTemplates
- *
- * Decodes the cells from the given node as templates.
- */
- codec.decodeUi = function(dec, node, editor)
- {
- var tmp = node.firstChild;
- while (tmp != null)
- {
- if (tmp.nodeName == 'add')
- {
- var as = tmp.getAttribute('as');
- var elt = tmp.getAttribute('element');
- var style = tmp.getAttribute('style');
- var element = null;
-
- if (elt != null)
- {
- element = document.getElementById(elt);
-
- if (element != null &&
- style != null)
- {
- element.style.cssText += ';'+style;
- }
- }
- else
- {
- var x = parseInt(tmp.getAttribute('x'));
- var y = parseInt(tmp.getAttribute('y'));
- var width = tmp.getAttribute('width');
- var height = tmp.getAttribute('height');
-
- // Creates a new window around the element
- element = document.createElement('div');
- element.style.cssText = style;
-
- var wnd = new mxWindow(mxResources.get(as) || as,
- element, x, y, width, height, false, true);
- wnd.setVisible(true);
- }
-
- // TODO: Make more generic
- if (as == 'graph')
- {
- editor.setGraphContainer(element);
- }
- else if (as == 'toolbar')
- {
- editor.setToolbarContainer(element);
- }
- else if (as == 'title')
- {
- editor.setTitleContainer(element);
- }
- else if (as == 'status')
- {
- editor.setStatusContainer(element);
- }
- else if (as == 'map')
- {
- editor.setMapContainer(element);
- }
- }
- else if (tmp.nodeName == 'resource')
- {
- mxResources.add(tmp.getAttribute('basename'));
- }
- else if (tmp.nodeName == 'stylesheet')
- {
- mxClient.link('stylesheet', tmp.getAttribute('name'));
- }
-
- tmp = tmp.nextSibling;
- }
- };
-
- /**
- * Function: decodeTemplates
- *
- * Decodes the cells from the given node as templates.
- */
- codec.decodeTemplates = function(dec, node, editor)
- {
- if (editor.templates == null)
- {
- editor.templates = [];
- }
-
- var children = mxUtils.getChildNodes(node);
- for (var j=0; j<children.length; j++)
- {
- var name = children[j].getAttribute('as');
- var child = children[j].firstChild;
-
- while (child != null && child.nodeType != 1)
- {
- child = child.nextSibling;
- }
-
- if (child != null)
- {
- // LATER: Only single cells means you need
- // to group multiple cells within another
- // cell. This should be changed to support
- // arrays of cells, or the wrapper must
- // be automatically handled in this class.
- editor.templates[name] = dec.decodeCell(child);
- }
- }
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxGenericChangeCodec.js b/src/js/io/mxGenericChangeCodec.js
deleted file mode 100644
index 8da7789..0000000
--- a/src/js/io/mxGenericChangeCodec.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * $Id: mxGenericChangeCodec.js,v 1.11 2010-09-13 15:50:36 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-/**
- * Class: mxGenericChangeCodec
- *
- * Codec for <mxValueChange>s, <mxStyleChange>s, <mxGeometryChange>s,
- * <mxCollapseChange>s and <mxVisibleChange>s. This class is created
- * and registered dynamically at load time and used implicitely
- * via <mxCodec> and the <mxCodecRegistry>.
- *
- * Transient Fields:
- *
- * - model
- * - previous
- *
- * Reference Fields:
- *
- * - cell
- *
- * Constructor: mxGenericChangeCodec
- *
- * Factory function that creates a <mxObjectCodec> for
- * the specified change and fieldname.
- *
- * Parameters:
- *
- * obj - An instance of the change object.
- * variable - The fieldname for the change data.
- */
-var mxGenericChangeCodec = function(obj, variable)
-{
- var codec = new mxObjectCodec(obj, ['model', 'previous'], ['cell']);
-
- /**
- * Function: afterDecode
- *
- * Restores the state by assigning the previous value.
- */
- codec.afterDecode = function(dec, node, obj)
- {
- // Allows forward references in sessions. This is a workaround
- // for the sequence of edits in mxGraph.moveCells and cellsAdded.
- if (mxUtils.isNode(obj.cell))
- {
- obj.cell = dec.decodeCell(obj.cell, false);
- }
-
- obj.previous = obj[variable];
-
- return obj;
- };
-
- return codec;
-};
-
-// Registers the codecs
-mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange(), 'value'));
-mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange(), 'style'));
-mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange(), 'geometry'));
-mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange(), 'collapsed'));
-mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange(), 'visible'));
-mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange(), 'value'));
diff --git a/src/js/io/mxGraphCodec.js b/src/js/io/mxGraphCodec.js
deleted file mode 100644
index f052e13..0000000
--- a/src/js/io/mxGraphCodec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * $Id: mxGraphCodec.js,v 1.8 2010-06-10 06:54:18 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxGraphCodec
- *
- * Codec for <mxGraph>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec>
- * and the <mxCodecRegistry>.
- *
- * Transient Fields:
- *
- * - graphListeners
- * - eventListeners
- * - view
- * - container
- * - cellRenderer
- * - editor
- * - selection
- */
- return new mxObjectCodec(new mxGraph(),
- ['graphListeners', 'eventListeners', 'view', 'container',
- 'cellRenderer', 'editor', 'selection']);
-
-}());
diff --git a/src/js/io/mxGraphViewCodec.js b/src/js/io/mxGraphViewCodec.js
deleted file mode 100644
index 110b212..0000000
--- a/src/js/io/mxGraphViewCodec.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/**
- * $Id: mxGraphViewCodec.js,v 1.18 2010-12-03 11:05:52 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxGraphViewCodec
- *
- * Custom encoder for <mxGraphView>s. This class is created
- * and registered dynamically at load time and used implicitely via
- * <mxCodec> and the <mxCodecRegistry>. This codec only writes views
- * into a XML format that can be used to create an image for
- * the graph, that is, it contains absolute coordinates with
- * computed perimeters, edge styles and cell styles.
- */
- var codec = new mxObjectCodec(new mxGraphView());
-
- /**
- * Function: encode
- *
- * Encodes the given <mxGraphView> using <encodeCell>
- * starting at the model's root. This returns the
- * top-level graph node of the recursive encoding.
- */
- codec.encode = function(enc, view)
- {
- return this.encodeCell(enc, view,
- view.graph.getModel().getRoot());
- };
-
- /**
- * Function: encodeCell
- *
- * Recursively encodes the specifed cell. Uses layer
- * as the default nodename. If the cell's parent is
- * null, then graph is used for the nodename. If
- * <mxGraphModel.isEdge> returns true for the cell,
- * then edge is used for the nodename, else if
- * <mxGraphModel.isVertex> returns true for the cell,
- * then vertex is used for the nodename.
- *
- * <mxGraph.getLabel> is used to create the label
- * attribute for the cell. For graph nodes and vertices
- * the bounds are encoded into x, y, width and height.
- * For edges the points are encoded into a points
- * attribute as a space-separated list of comma-separated
- * coordinate pairs (eg. x0,y0 x1,y1 ... xn,yn). All
- * values from the cell style are added as attribute
- * values to the node.
- */
- codec.encodeCell = function(enc, view, cell)
- {
- var model = view.graph.getModel();
- var state = view.getState(cell);
- var parent = model.getParent(cell);
-
- if (parent == null || state != null)
- {
- var childCount = model.getChildCount(cell);
- var geo = view.graph.getCellGeometry(cell);
- var name = null;
-
- if (parent == model.getRoot())
- {
- name = 'layer';
- }
- else if (parent == null)
- {
- name = 'graph';
- }
- else if (model.isEdge(cell))
- {
- name = 'edge';
- }
- else if (childCount > 0 && geo != null)
- {
- name = 'group';
- }
- else if (model.isVertex(cell))
- {
- name = 'vertex';
- }
-
- if (name != null)
- {
- var node = enc.document.createElement(name);
- var lab = view.graph.getLabel(cell);
-
- if (lab != null)
- {
- node.setAttribute('label', view.graph.getLabel(cell));
-
- if (view.graph.isHtmlLabel(cell))
- {
- node.setAttribute('html', true);
- }
- }
-
- if (parent == null)
- {
- var bounds = view.getGraphBounds();
-
- if (bounds != null)
- {
- node.setAttribute('x', Math.round(bounds.x));
- node.setAttribute('y', Math.round(bounds.y));
- node.setAttribute('width', Math.round(bounds.width));
- node.setAttribute('height', Math.round(bounds.height));
- }
-
- node.setAttribute('scale', view.scale);
- }
- else if (state != null && geo != null)
- {
- // Writes each key, value in the style pair to an attribute
- for (var i in state.style)
- {
- var value = state.style[i];
-
- // Tries to turn objects and functions into strings
- if (typeof(value) == 'function' &&
- typeof(value) == 'object')
- {
- value = mxStyleRegistry.getName(value);
- }
-
- if (value != null &&
- typeof(value) != 'function' &&
- typeof(value) != 'object')
- {
- node.setAttribute(i, value);
- }
- }
-
- var abs = state.absolutePoints;
-
- // Writes the list of points into one attribute
- if (abs != null && abs.length > 0)
- {
- var pts = Math.round(abs[0].x) + ',' + Math.round(abs[0].y);
-
- for (var i=1; i<abs.length; i++)
- {
- pts += ' ' + Math.round(abs[i].x) + ',' +
- Math.round(abs[i].y);
- }
-
- node.setAttribute('points', pts);
- }
-
- // Writes the bounds into 4 attributes
- else
- {
- node.setAttribute('x', Math.round(state.x));
- node.setAttribute('y', Math.round(state.y));
- node.setAttribute('width', Math.round(state.width));
- node.setAttribute('height', Math.round(state.height));
- }
-
- var offset = state.absoluteOffset;
-
- // Writes the offset into 2 attributes
- if (offset != null)
- {
- if (offset.x != 0)
- {
- node.setAttribute('dx', Math.round(offset.x));
- }
-
- if (offset.y != 0)
- {
- node.setAttribute('dy', Math.round(offset.y));
- }
- }
- }
-
- for (var i=0; i<childCount; i++)
- {
- var childNode = this.encodeCell(enc,
- view, model.getChildAt(cell, i));
-
- if (childNode != null)
- {
- node.appendChild(childNode);
- }
- }
- }
- }
-
- return node;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxModelCodec.js b/src/js/io/mxModelCodec.js
deleted file mode 100644
index 760a2b1..0000000
--- a/src/js/io/mxModelCodec.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * $Id: mxModelCodec.js,v 1.11 2010-11-23 08:46:41 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxModelCodec
- *
- * Codec for <mxGraphModel>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec>
- * and the <mxCodecRegistry>.
- */
- var codec = new mxObjectCodec(new mxGraphModel());
-
- /**
- * Function: encodeObject
- *
- * Encodes the given <mxGraphModel> by writing a (flat) XML sequence of
- * cell nodes as produced by the <mxCellCodec>. The sequence is
- * wrapped-up in a node with the name root.
- */
- codec.encodeObject = function(enc, obj, node)
- {
- var rootNode = enc.document.createElement('root');
- enc.encodeCell(obj.getRoot(), rootNode);
- node.appendChild(rootNode);
- };
-
- /**
- * Function: decodeChild
- *
- * Overrides decode child to handle special child nodes.
- */
- codec.decodeChild = function(dec, child, obj)
- {
- if (child.nodeName == 'root')
- {
- this.decodeRoot(dec, child, obj);
- }
- else
- {
- mxObjectCodec.prototype.decodeChild.apply(this, arguments);
- }
- };
-
- /**
- * Function: decodeRoot
- *
- * Reads the cells into the graph model. All cells
- * are children of the root element in the node.
- */
- codec.decodeRoot = function(dec, root, model)
- {
- var rootCell = null;
- var tmp = root.firstChild;
-
- while (tmp != null)
- {
- var cell = dec.decodeCell(tmp);
-
- if (cell != null && cell.getParent() == null)
- {
- rootCell = cell;
- }
-
- tmp = tmp.nextSibling;
- }
-
- // Sets the root on the model if one has been decoded
- if (rootCell != null)
- {
- model.setRoot(rootCell);
- }
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxObjectCodec.js b/src/js/io/mxObjectCodec.js
deleted file mode 100644
index 9d2473a..0000000
--- a/src/js/io/mxObjectCodec.js
+++ /dev/null
@@ -1,983 +0,0 @@
-/**
- * $Id: mxObjectCodec.js,v 1.49 2010-12-01 09:19:58 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-/**
- * Class: mxObjectCodec
- *
- * Generic codec for JavaScript objects that implements a mapping between
- * JavaScript objects and XML nodes that maps each field or element to an
- * attribute or child node, and vice versa.
- *
- * Atomic Values:
- *
- * Consider the following example.
- *
- * (code)
- * var obj = new Object();
- * obj.foo = "Foo";
- * obj.bar = "Bar";
- * (end)
- *
- * This object is encoded into an XML node using the following.
- *
- * (code)
- * var enc = new mxCodec();
- * var node = enc.encode(obj);
- * (end)
- *
- * The output of the encoding may be viewed using <mxLog> as follows.
- *
- * (code)
- * mxLog.show();
- * mxLog.debug(mxUtils.getPrettyXml(node));
- * (end)
- *
- * Finally, the result of the encoding looks as follows.
- *
- * (code)
- * <Object foo="Foo" bar="Bar"/>
- * (end)
- *
- * In the above output, the foo and bar fields have been mapped to attributes
- * with the same names, and the name of the constructor was used for the
- * nodename.
- *
- * Booleans:
- *
- * Since booleans are numbers in JavaScript, all boolean values are encoded
- * into 1 for true and 0 for false. The decoder also accepts the string true
- * and false for boolean values.
- *
- * Objects:
- *
- * The above scheme is applied to all atomic fields, that is, to all non-object
- * fields of an object. For object fields, a child node is created with a
- * special attribute that contains the fieldname. This special attribute is
- * called "as" and hence, as is a reserved word that should not be used for a
- * fieldname.
- *
- * Consider the following example where foo is an object and bar is an atomic
- * property of foo.
- *
- * (code)
- * var obj = {foo: {bar: "Bar"}};
- * (end)
- *
- * This will be mapped to the following XML structure by mxObjectCodec.
- *
- * (code)
- * <Object>
- * <Object bar="Bar" as="foo"/>
- * </Object>
- * (end)
- *
- * In the above output, the inner Object node contains the as-attribute that
- * specifies the fieldname in the enclosing object. That is, the field foo was
- * mapped to a child node with an as-attribute that has the value foo.
- *
- * Arrays:
- *
- * Arrays are special objects that are either associative, in which case each
- * key, value pair is treated like a field where the key is the fieldname, or
- * they are a sequence of atomic values and objects, which is mapped to a
- * sequence of child nodes. For object elements, the above scheme is applied
- * without the use of the special as-attribute for creating each child. For
- * atomic elements, a special add-node is created with the value stored in the
- * value-attribute.
- *
- * For example, the following array contains one atomic value and one object
- * with a field called bar. Furthermore it contains two associative entries
- * called bar with an atomic value, and foo with an object value.
- *
- * (code)
- * var obj = ["Bar", {bar: "Bar"}];
- * obj["bar"] = "Bar";
- * obj["foo"] = {bar: "Bar"};
- * (end)
- *
- * This array is represented by the following XML nodes.
- *
- * (code)
- * <Array bar="Bar">
- * <add value="Bar"/>
- * <Object bar="Bar"/>
- * <Object bar="Bar" as="foo"/>
- * </Array>
- * (end)
- *
- * The Array node name is the name of the constructor. The additional
- * as-attribute in the last child contains the key of the associative entry,
- * whereas the second last child is part of the array sequence and does not
- * have an as-attribute.
- *
- * References:
- *
- * Objects may be represented as child nodes or attributes with ID values,
- * which are used to lookup the object in a table within <mxCodec>. The
- * <isReference> function is in charge of deciding if a specific field should
- * be encoded as a reference or not. Its default implementation returns true if
- * the fieldname is in <idrefs>, an array of strings that is used to configure
- * the <mxObjectCodec>.
- *
- * Using this approach, the mapping does not guarantee that the referenced
- * object itself exists in the document. The fields that are encoded as
- * references must be carefully chosen to make sure all referenced objects
- * exist in the document, or may be resolved by some other means if necessary.
- *
- * For example, in the case of the graph model all cells are stored in a tree
- * whose root is referenced by the model's root field. A tree is a structure
- * that is well suited for an XML representation, however, the additional edges
- * in the graph model have a reference to a source and target cell, which are
- * also contained in the tree. To handle this case, the source and target cell
- * of an edge are treated as references, whereas the children are treated as
- * objects. Since all cells are contained in the tree and no edge references a
- * source or target outside the tree, this setup makes sure all referenced
- * objects are contained in the document.
- *
- * In the case of a tree structure we must further avoid infinite recursion by
- * ignoring the parent reference of each child. This is done by returning true
- * in <isExcluded>, whose default implementation uses the array of excluded
- * fieldnames passed to the mxObjectCodec constructor.
- *
- * References are only used for cells in mxGraph. For defining other
- * referencable object types, the codec must be able to work out the ID of an
- * object. This is done by implementing <mxCodec.reference>. For decoding a
- * reference, the XML node with the respective id-attribute is fetched from the
- * document, decoded, and stored in a lookup table for later reference. For
- * looking up external objects, <mxCodec.lookup> may be implemented.
- *
- * Expressions:
- *
- * For decoding JavaScript expressions, the add-node may be used with a text
- * content that contains the JavaScript expression. For example, the following
- * creates a field called foo in the enclosing object and assigns it the value
- * of <mxConstants.ALIGN_LEFT>.
- *
- * (code)
- * <Object>
- * <add as="foo">mxConstants.ALIGN_LEFT</add>
- * </Object>
- * (end)
- *
- * The resulting object has a field called foo with the value "left". Its XML
- * representation looks as follows.
- *
- * (code)
- * <Object foo="left"/>
- * (end)
- *
- * This means the expression is evaluated at decoding time and the result of
- * the evaluation is stored in the respective field. Valid expressions are all
- * JavaScript expressions, including function definitions, which are mapped to
- * functions on the resulting object.
- *
- * Constructor: mxObjectCodec
- *
- * Constructs a new codec for the specified template object.
- * The variables in the optional exclude array are ignored by
- * the codec. Variables in the optional idrefs array are
- * turned into references in the XML. The optional mapping
- * may be used to map from variable names to XML attributes.
- * The argument is created as follows:
- *
- * (code)
- * var mapping = new Object();
- * mapping['variableName'] = 'attribute-name';
- * (end)
- *
- * Parameters:
- *
- * template - Prototypical instance of the object to be
- * encoded/decoded.
- * exclude - Optional array of fieldnames to be ignored.
- * idrefs - Optional array of fieldnames to be converted to/from
- * references.
- * mapping - Optional mapping from field- to attributenames.
- */
-function mxObjectCodec(template, exclude, idrefs, mapping)
-{
- this.template = template;
-
- this.exclude = (exclude != null) ? exclude : [];
- this.idrefs = (idrefs != null) ? idrefs : [];
- this.mapping = (mapping != null) ? mapping : [];
-
- this.reverse = new Object();
-
- for (var i in this.mapping)
- {
- this.reverse[this.mapping[i]] = i;
- }
-};
-
-/**
- * Variable: template
- *
- * Holds the template object associated with this codec.
- */
-mxObjectCodec.prototype.template = null;
-
-/**
- * Variable: exclude
- *
- * Array containing the variable names that should be
- * ignored by the codec.
- */
-mxObjectCodec.prototype.exclude = null;
-
-/**
- * Variable: idrefs
- *
- * Array containing the variable names that should be
- * turned into or converted from references. See
- * <mxCodec.getId> and <mxCodec.getObject>.
- */
-mxObjectCodec.prototype.idrefs = null;
-
-/**
- * Variable: mapping
- *
- * Maps from from fieldnames to XML attribute names.
- */
-mxObjectCodec.prototype.mapping = null;
-
-/**
- * Variable: reverse
- *
- * Maps from from XML attribute names to fieldnames.
- */
-mxObjectCodec.prototype.reverse = null;
-
-/**
- * Function: getName
- *
- * Returns the name used for the nodenames and lookup of the codec when
- * classes are encoded and nodes are decoded. For classes to work with
- * this the codec registry automatically adds an alias for the classname
- * if that is different than what this returns. The default implementation
- * returns the classname of the template class.
- */
-mxObjectCodec.prototype.getName = function()
-{
- return mxUtils.getFunctionName(this.template.constructor);
-};
-
-/**
- * Function: cloneTemplate
- *
- * Returns a new instance of the template for this codec.
- */
-mxObjectCodec.prototype.cloneTemplate = function()
-{
- return new this.template.constructor();
-};
-
-/**
- * Function: getFieldName
- *
- * Returns the fieldname for the given attributename.
- * Looks up the value in the <reverse> mapping or returns
- * the input if there is no reverse mapping for the
- * given name.
- */
-mxObjectCodec.prototype.getFieldName = function(attributename)
-{
- if (attributename != null)
- {
- var mapped = this.reverse[attributename];
-
- if (mapped != null)
- {
- attributename = mapped;
- }
- }
-
- return attributename;
-};
-
-/**
- * Function: getAttributeName
- *
- * Returns the attributename for the given fieldname.
- * Looks up the value in the <mapping> or returns
- * the input if there is no mapping for the
- * given name.
- */
-mxObjectCodec.prototype.getAttributeName = function(fieldname)
-{
- if (fieldname != null)
- {
- var mapped = this.mapping[fieldname];
-
- if (mapped != null)
- {
- fieldname = mapped;
- }
- }
-
- return fieldname;
-};
-
-/**
- * Function: isExcluded
- *
- * Returns true if the given attribute is to be ignored by the codec. This
- * implementation returns true if the given fieldname is in <exclude> or
- * if the fieldname equals <mxObjectIdentity.FIELD_NAME>.
- *
- * Parameters:
- *
- * obj - Object instance that contains the field.
- * attr - Fieldname of the field.
- * value - Value of the field.
- * write - Boolean indicating if the field is being encoded or decoded.
- * Write is true if the field is being encoded, else it is being decoded.
- */
-mxObjectCodec.prototype.isExcluded = function(obj, attr, value, write)
-{
- return attr == mxObjectIdentity.FIELD_NAME ||
- mxUtils.indexOf(this.exclude, attr) >= 0;
-};
-
-/**
- * Function: isReference
- *
- * Returns true if the given fieldname is to be treated
- * as a textual reference (ID). This implementation returns
- * true if the given fieldname is in <idrefs>.
- *
- * Parameters:
- *
- * obj - Object instance that contains the field.
- * attr - Fieldname of the field.
- * value - Value of the field.
- * write - Boolean indicating if the field is being encoded or decoded.
- * Write is true if the field is being encoded, else it is being decoded.
- */
-mxObjectCodec.prototype.isReference = function(obj, attr, value, write)
-{
- return mxUtils.indexOf(this.idrefs, attr) >= 0;
-};
-
-/**
- * Function: encode
- *
- * Encodes the specified object and returns a node
- * representing then given object. Calls <beforeEncode>
- * after creating the node and <afterEncode> with the
- * resulting node after processing.
- *
- * Enc is a reference to the calling encoder. It is used
- * to encode complex objects and create references.
- *
- * This implementation encodes all variables of an
- * object according to the following rules:
- *
- * - If the variable name is in <exclude> then it is ignored.
- * - If the variable name is in <idrefs> then <mxCodec.getId>
- * is used to replace the object with its ID.
- * - The variable name is mapped using <mapping>.
- * - If obj is an array and the variable name is numeric
- * (ie. an index) then it is not encoded.
- * - If the value is an object, then the codec is used to
- * create a child node with the variable name encoded into
- * the "as" attribute.
- * - Else, if <encodeDefaults> is true or the value differs
- * from the template value, then ...
- * - ... if obj is not an array, then the value is mapped to
- * an attribute.
- * - ... else if obj is an array, the value is mapped to an
- * add child with a value attribute or a text child node,
- * if the value is a function.
- *
- * If no ID exists for a variable in <idrefs> or if an object
- * cannot be encoded, a warning is issued using <mxLog.warn>.
- *
- * Returns the resulting XML node that represents the given
- * object.
- *
- * Parameters:
- *
- * enc - <mxCodec> that controls the encoding process.
- * obj - Object to be encoded.
- */
-mxObjectCodec.prototype.encode = function(enc, obj)
-{
- var node = enc.document.createElement(this.getName());
-
- obj = this.beforeEncode(enc, obj, node);
- this.encodeObject(enc, obj, node);
-
- return this.afterEncode(enc, obj, node);
-};
-
-/**
- * Function: encodeObject
- *
- * Encodes the value of each member in then given obj into the given node using
- * <encodeValue>.
- *
- * Parameters:
- *
- * enc - <mxCodec> that controls the encoding process.
- * obj - Object to be encoded.
- * node - XML node that contains the encoded object.
- */
-mxObjectCodec.prototype.encodeObject = function(enc, obj, node)
-{
- enc.setAttribute(node, 'id', enc.getId(obj));
-
- for (var i in obj)
- {
- var name = i;
- var value = obj[name];
-
- if (value != null && !this.isExcluded(obj, name, value, true))
- {
- if (mxUtils.isNumeric(name))
- {
- name = null;
- }
-
- this.encodeValue(enc, obj, name, value, node);
- }
- }
-};
-
-/**
- * Function: encodeValue
- *
- * Converts the given value according to the mappings
- * and id-refs in this codec and uses <writeAttribute>
- * to write the attribute into the given node.
- *
- * Parameters:
- *
- * enc - <mxCodec> that controls the encoding process.
- * obj - Object whose property is going to be encoded.
- * name - XML node that contains the encoded object.
- * value - Value of the property to be encoded.
- * node - XML node that contains the encoded object.
- */
-mxObjectCodec.prototype.encodeValue = function(enc, obj,
- name, value, node)
-{
- if (value != null)
- {
- if (this.isReference(obj, name, value, true))
- {
- var tmp = enc.getId(value);
-
- if (tmp == null)
- {
- mxLog.warn('mxObjectCodec.encode: No ID for ' +
- this.getName() + '.' + name + '=' + value);
- return; // exit
- }
-
- value = tmp;
- }
-
- var defaultValue = this.template[name];
-
- // Checks if the value is a default value and
- // the name is correct
- if (name == null || enc.encodeDefaults ||
- defaultValue != value)
- {
- name = this.getAttributeName(name);
- this.writeAttribute(enc, obj, name, value, node);
- }
- }
-};
-
-/**
- * Function: writeAttribute
- *
- * Writes the given value into node using <writePrimitiveAttribute>
- * or <writeComplexAttribute> depending on the type of the value.
- */
-mxObjectCodec.prototype.writeAttribute = function(enc, obj,
- attr, value, node)
-{
- if (typeof(value) != 'object' /* primitive type */)
- {
- this.writePrimitiveAttribute(enc, obj, attr, value, node);
- }
- else /* complex type */
- {
- this.writeComplexAttribute(enc, obj, attr, value, node);
- }
-};
-
-/**
- * Function: writePrimitiveAttribute
- *
- * Writes the given value as an attribute of the given node.
- */
-mxObjectCodec.prototype.writePrimitiveAttribute = function(enc, obj,
- attr, value, node)
-{
- value = this.convertValueToXml(value);
-
- if (attr == null)
- {
- var child = enc.document.createElement('add');
-
- if (typeof(value) == 'function')
- {
- child.appendChild(
- enc.document.createTextNode(value));
- }
- else
- {
- enc.setAttribute(child, 'value', value);
- }
-
- node.appendChild(child);
- }
- else if (typeof(value) != 'function')
- {
- enc.setAttribute(node, attr, value);
- }
-};
-
-/**
- * Function: writeComplexAttribute
- *
- * Writes the given value as a child node of the given node.
- */
-mxObjectCodec.prototype.writeComplexAttribute = function(enc, obj,
- attr, value, node)
-{
- var child = enc.encode(value);
-
- if (child != null)
- {
- if (attr != null)
- {
- child.setAttribute('as', attr);
- }
-
- node.appendChild(child);
- }
- else
- {
- mxLog.warn('mxObjectCodec.encode: No node for ' +
- this.getName() + '.' + attr + ': ' + value);
- }
-};
-
-/**
- * Function: convertValueToXml
- *
- * Converts true to "1" and false to "0". All other values are ignored.
- */
-mxObjectCodec.prototype.convertValueToXml = function(value)
-{
- // Makes sure to encode boolean values as numeric values
- if (typeof(value.length) == 'undefined' &&
- (value == true ||
- value == false))
- {
- // Checks if the value is true (do not use the
- // value as is, because this would check if the
- // value is not null, so 0 would be true!
- value = (value == true) ? '1' : '0';
- }
- return value;
-};
-
-/**
- * Function: convertValueFromXml
- *
- * Converts booleans and numeric values to the respective types.
- */
-mxObjectCodec.prototype.convertValueFromXml = function(value)
-{
- if (mxUtils.isNumeric(value))
- {
- value = parseFloat(value);
- }
-
- return value;
-};
-
-/**
- * Function: beforeEncode
- *
- * Hook for subclassers to pre-process the object before
- * encoding. This returns the input object. The return
- * value of this function is used in <encode> to perform
- * the default encoding into the given node.
- *
- * Parameters:
- *
- * enc - <mxCodec> that controls the encoding process.
- * obj - Object to be encoded.
- * node - XML node to encode the object into.
- */
-mxObjectCodec.prototype.beforeEncode = function(enc, obj, node)
-{
- return obj;
-};
-
-/**
- * Function: afterEncode
- *
- * Hook for subclassers to post-process the node
- * for the given object after encoding and return the
- * post-processed node. This implementation returns
- * the input node. The return value of this method
- * is returned to the encoder from <encode>.
- *
- * Parameters:
- *
- * enc - <mxCodec> that controls the encoding process.
- * obj - Object to be encoded.
- * node - XML node that represents the default encoding.
- */
-mxObjectCodec.prototype.afterEncode = function(enc, obj, node)
-{
- return node;
-};
-
-/**
- * Function: decode
- *
- * Parses the given node into the object or returns a new object
- * representing the given node.
- *
- * Dec is a reference to the calling decoder. It is used to decode
- * complex objects and resolve references.
- *
- * If a node has an id attribute then the object cache is checked for the
- * object. If the object is not yet in the cache then it is constructed
- * using the constructor of <template> and cached in <mxCodec.objects>.
- *
- * This implementation decodes all attributes and childs of a node
- * according to the following rules:
- *
- * - If the variable name is in <exclude> or if the attribute name is "id"
- * or "as" then it is ignored.
- * - If the variable name is in <idrefs> then <mxCodec.getObject> is used
- * to replace the reference with an object.
- * - The variable name is mapped using a reverse <mapping>.
- * - If the value has a child node, then the codec is used to create a
- * child object with the variable name taken from the "as" attribute.
- * - If the object is an array and the variable name is empty then the
- * value or child object is appended to the array.
- * - If an add child has no value or the object is not an array then
- * the child text content is evaluated using <mxUtils.eval>.
- *
- * For add nodes where the object is not an array and the variable name
- * is defined, the default mechanism is used, allowing to override/add
- * methods as follows:
- *
- * (code)
- * <Object>
- * <add as="hello"><![CDATA[
- * function(arg1) {
- * mxUtils.alert('Hello '+arg1);
- * }
- * ]]></add>
- * </Object>
- * (end)
- *
- * If no object exists for an ID in <idrefs> a warning is issued
- * using <mxLog.warn>.
- *
- * Returns the resulting object that represents the given XML node
- * or the object given to the method as the into parameter.
- *
- * Parameters:
- *
- * dec - <mxCodec> that controls the decoding process.
- * node - XML node to be decoded.
- * into - Optional objec to encode the node into.
- */
-mxObjectCodec.prototype.decode = function(dec, node, into)
-{
- var id = node.getAttribute('id');
- var obj = dec.objects[id];
-
- if (obj == null)
- {
- obj = into || this.cloneTemplate();
-
- if (id != null)
- {
- dec.putObject(id, obj);
- }
- }
-
- node = this.beforeDecode(dec, node, obj);
- this.decodeNode(dec, node, obj);
-
- return this.afterDecode(dec, node, obj);
-};
-
-/**
- * Function: decodeNode
- *
- * Calls <decodeAttributes> and <decodeChildren> for the given node.
- */
-mxObjectCodec.prototype.decodeNode = function(dec, node, obj)
-{
- if (node != null)
- {
- this.decodeAttributes(dec, node, obj);
- this.decodeChildren(dec, node, obj);
- }
-};
-
-/**
- * Function: decodeAttributes
- *
- * Decodes all attributes of the given node using <decodeAttribute>.
- */
-mxObjectCodec.prototype.decodeAttributes = function(dec, node, obj)
-{
- var attrs = node.attributes;
-
- if (attrs != null)
- {
- for (var i = 0; i < attrs.length; i++)
- {
- this.decodeAttribute(dec, attrs[i], obj);
- }
- }
-};
-
-/**
- * Function: decodeAttribute
- *
- * Reads the given attribute into the specified object.
- */
-mxObjectCodec.prototype.decodeAttribute = function(dec, attr, obj)
-{
- var name = attr.nodeName;
-
- if (name != 'as' && name != 'id')
- {
- // Converts the string true and false to their boolean values.
- // This may require an additional check on the obj to see if
- // the existing field is a boolean value or uninitialized, in
- // which case we may want to convert true and false to a string.
- var value = this.convertValueFromXml(attr.nodeValue);
- var fieldname = this.getFieldName(name);
-
- if (this.isReference(obj, fieldname, value, false))
- {
- var tmp = dec.getObject(value);
-
- if (tmp == null)
- {
- mxLog.warn('mxObjectCodec.decode: No object for ' +
- this.getName() + '.' + name + '=' + value);
- return; // exit
- }
-
- value = tmp;
- }
-
- if (!this.isExcluded(obj, name, value, false))
- {
- //mxLog.debug(mxUtils.getFunctionName(obj.constructor)+'.'+name+'='+value);
- obj[name] = value;
- }
- }
-};
-
-/**
- * Function: decodeChildren
- *
- * Decodec all children of the given node using <decodeChild>.
- */
-mxObjectCodec.prototype.decodeChildren = function(dec, node, obj)
-{
- var child = node.firstChild;
-
- while (child != null)
- {
- var tmp = child.nextSibling;
-
- if (child.nodeType == mxConstants.NODETYPE_ELEMENT &&
- !this.processInclude(dec, child, obj))
- {
- this.decodeChild(dec, child, obj);
- }
-
- child = tmp;
- }
-};
-
-/**
- * Function: decodeChild
- *
- * Reads the specified child into the given object.
- */
-mxObjectCodec.prototype.decodeChild = function(dec, child, obj)
-{
- var fieldname = this.getFieldName(child.getAttribute('as'));
-
- if (fieldname == null ||
- !this.isExcluded(obj, fieldname, child, false))
- {
- var template = this.getFieldTemplate(obj, fieldname, child);
- var value = null;
-
- if (child.nodeName == 'add')
- {
- value = child.getAttribute('value');
-
- if (value == null)
- {
- value = mxUtils.eval(mxUtils.getTextContent(child));
- //mxLog.debug('Decoded '+fieldname+' '+mxUtils.getTextContent(child));
- }
- }
- else
- {
- value = dec.decode(child, template);
- // mxLog.debug('Decoded '+node.nodeName+'.'+fieldname+'='+
- // ((tmp != null) ? tmp.constructor.name : 'null'));
- }
-
- this.addObjectValue(obj, fieldname, value, template);
- }
-};
-
-/**
- * Function: getFieldTemplate
- *
- * Returns the template instance for the given field. This returns the
- * value of the field, null if the value is an array or an empty collection
- * if the value is a collection. The value is then used to populate the
- * field for a new instance. For strongly typed languages it may be
- * required to override this to return the correct collection instance
- * based on the encoded child.
- */
-mxObjectCodec.prototype.getFieldTemplate = function(obj, fieldname, child)
-{
- var template = obj[fieldname];
-
- // Non-empty arrays are replaced completely
- if (template instanceof Array && template.length > 0)
- {
- template = null;
- }
-
- return template;
-};
-
-/**
- * Function: addObjectValue
- *
- * Sets the decoded child node as a value of the given object. If the
- * object is a map, then the value is added with the given fieldname as a
- * key. If the fieldname is not empty, then setFieldValue is called or
- * else, if the object is a collection, the value is added to the
- * collection. For strongly typed languages it may be required to
- * override this with the correct code to add an entry to an object.
- */
-mxObjectCodec.prototype.addObjectValue = function(obj, fieldname, value, template)
-{
- if (value != null && value != template)
- {
- if (fieldname != null && fieldname.length > 0)
- {
- obj[fieldname] = value;
- }
- else
- {
- obj.push(value);
- }
- //mxLog.debug('Decoded '+mxUtils.getFunctionName(obj.constructor)+'.'+fieldname+': '+value);
- }
-};
-
-/**
- * Function: processInclude
- *
- * Returns true if the given node is an include directive and
- * executes the include by decoding the XML document. Returns
- * false if the given node is not an include directive.
- *
- * Parameters:
- *
- * dec - <mxCodec> that controls the encoding/decoding process.
- * node - XML node to be checked.
- * into - Optional object to pass-thru to the codec.
- */
-mxObjectCodec.prototype.processInclude = function(dec, node, into)
-{
- if (node.nodeName == 'include')
- {
- var name = node.getAttribute('name');
-
- if (name != null)
- {
- try
- {
- var xml = mxUtils.load(name).getDocumentElement();
-
- if (xml != null)
- {
- dec.decode(xml, into);
- }
- }
- catch (e)
- {
- // ignore
- }
- }
-
- return true;
- }
-
- return false;
-};
-
-/**
- * Function: beforeDecode
- *
- * Hook for subclassers to pre-process the node for
- * the specified object and return the node to be
- * used for further processing by <decode>.
- * The object is created based on the template in the
- * calling method and is never null. This implementation
- * returns the input node. The return value of this
- * function is used in <decode> to perform
- * the default decoding into the given object.
- *
- * Parameters:
- *
- * dec - <mxCodec> that controls the decoding process.
- * node - XML node to be decoded.
- * obj - Object to encode the node into.
- */
-mxObjectCodec.prototype.beforeDecode = function(dec, node, obj)
-{
- return node;
-};
-
-/**
- * Function: afterDecode
- *
- * Hook for subclassers to post-process the object after
- * decoding. This implementation returns the given object
- * without any changes. The return value of this method
- * is returned to the decoder from <decode>.
- *
- * Parameters:
- *
- * enc - <mxCodec> that controls the encoding process.
- * node - XML node to be decoded.
- * obj - Object that represents the default decoding.
- */
-mxObjectCodec.prototype.afterDecode = function(dec, node, obj)
-{
- return obj;
-};
diff --git a/src/js/io/mxRootChangeCodec.js b/src/js/io/mxRootChangeCodec.js
deleted file mode 100644
index fda613a..0000000
--- a/src/js/io/mxRootChangeCodec.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * $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;
-
-}());
diff --git a/src/js/io/mxStylesheetCodec.js b/src/js/io/mxStylesheetCodec.js
deleted file mode 100644
index 7636eb1..0000000
--- a/src/js/io/mxStylesheetCodec.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/**
- * $Id: mxStylesheetCodec.js,v 1.19 2011-06-13 08:18:42 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxStylesheetCodec
- *
- * Codec for <mxStylesheet>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec>
- * and the <mxCodecRegistry>.
- */
- var codec = new mxObjectCodec(new mxStylesheet());
-
- /**
- * Function: encode
- *
- * Encodes a stylesheet. See <decode> for a description of the
- * format.
- */
- codec.encode = function(enc, obj)
- {
- var node = enc.document.createElement(this.getName());
-
- for (var i in obj.styles)
- {
- var style = obj.styles[i];
- var styleNode = enc.document.createElement('add');
-
- if (i != null)
- {
- styleNode.setAttribute('as', i);
-
- for (var j in style)
- {
- var value = this.getStringValue(j, style[j]);
-
- if (value != null)
- {
- var entry = enc.document.createElement('add');
- entry.setAttribute('value', value);
- entry.setAttribute('as', j);
- styleNode.appendChild(entry);
- }
- }
-
- if (styleNode.childNodes.length > 0)
- {
- node.appendChild(styleNode);
- }
- }
- }
-
- return node;
- };
-
- /**
- * Function: getStringValue
- *
- * Returns the string for encoding the given value.
- */
- codec.getStringValue = function(key, value)
- {
- var type = typeof(value);
-
- if (type == 'function')
- {
- value = mxStyleRegistry.getName(style[j]);
- }
- else if (type == 'object')
- {
- value = null;
- }
-
- return value;
- };
-
- /**
- * Function: decode
- *
- * Reads a sequence of the following child nodes
- * and attributes:
- *
- * Child Nodes:
- *
- * add - Adds a new style.
- *
- * Attributes:
- *
- * as - Name of the style.
- * extend - Name of the style to inherit from.
- *
- * Each node contains another sequence of add and remove nodes with the following
- * attributes:
- *
- * as - Name of the style (see <mxConstants>).
- * value - Value for the style.
- *
- * Instead of the value-attribute, one can put Javascript expressions into
- * the node as follows:
- * <add as="perimeter">mxPerimeter.RectanglePerimeter</add>
- *
- * A remove node will remove the entry with the name given in the as-attribute
- * from the style.
- *
- * Example:
- *
- * (code)
- * <mxStylesheet as="stylesheet">
- * <add as="text">
- * <add as="fontSize" value="12"/>
- * </add>
- * <add as="defaultVertex" extend="text">
- * <add as="shape" value="rectangle"/>
- * </add>
- * </mxStylesheet>
- * (end)
- */
- codec.decode = function(dec, node, into)
- {
- var obj = into || new this.template.constructor();
- var id = node.getAttribute('id');
-
- if (id != null)
- {
- dec.objects[id] = obj;
- }
-
- node = node.firstChild;
-
- while (node != null)
- {
- if (!this.processInclude(dec, node, obj) &&
- node.nodeName == 'add')
- {
- var as = node.getAttribute('as');
-
- if (as != null)
- {
- var extend = node.getAttribute('extend');
- var style = (extend != null) ? mxUtils.clone(obj.styles[extend]) : null;
-
- if (style == null)
- {
- if (extend != null)
- {
- mxLog.warn('mxStylesheetCodec.decode: stylesheet ' +
- extend + ' not found to extend');
- }
-
- style = new Object();
- }
-
- var entry = node.firstChild;
-
- while (entry != null)
- {
- if (entry.nodeType == mxConstants.NODETYPE_ELEMENT)
- {
- var key = entry.getAttribute('as');
-
- if (entry.nodeName == 'add')
- {
- var text = mxUtils.getTextContent(entry);
- var value = null;
-
- if (text != null &&
- text.length > 0)
- {
- value = mxUtils.eval(text);
- }
- else
- {
- value = entry.getAttribute('value');
-
- if (mxUtils.isNumeric(value))
- {
- value = parseFloat(value);
- }
- }
-
- if (value != null)
- {
- style[key] = value;
- }
- }
- else if (entry.nodeName == 'remove')
- {
- delete style[key];
- }
- }
-
- entry = entry.nextSibling;
- }
-
- obj.putCellStyle(as, style);
- }
- }
-
- node = node.nextSibling;
- }
-
- return obj;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());
diff --git a/src/js/io/mxTerminalChangeCodec.js b/src/js/io/mxTerminalChangeCodec.js
deleted file mode 100644
index a51d871..0000000
--- a/src/js/io/mxTerminalChangeCodec.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * $Id: mxTerminalChangeCodec.js,v 1.7 2010-09-13 15:58:36 gaudenz Exp $
- * Copyright (c) 2006-2010, JGraph Ltd
- */
-mxCodecRegistry.register(function()
-{
- /**
- * Class: mxTerminalChangeCodec
- *
- * Codec for <mxTerminalChange>s. This class is created and registered
- * dynamically at load time and used implicitely via <mxCodec> and
- * the <mxCodecRegistry>.
- *
- * Transient Fields:
- *
- * - model
- * - previous
- *
- * Reference Fields:
- *
- * - cell
- * - terminal
- */
- var codec = new mxObjectCodec(new mxTerminalChange(),
- ['model', 'previous'], ['cell', 'terminal']);
-
- /**
- * Function: afterDecode
- *
- * Restores the state by assigning the previous value.
- */
- codec.afterDecode = function(dec, node, obj)
- {
- obj.previous = obj.terminal;
-
- return obj;
- };
-
- // Returns the codec into the registry
- return codec;
-
-}());