Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

thgraph

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

thgraph - npm Package Compare versions

Comparing version 0.0.3 to 0.0.4

graph/io/b.ts

1

graph/index.js

@@ -64,2 +64,3 @@ import {

} from './shape/index';
import {

@@ -66,0 +67,0 @@ mxAbstractCanvas2D,

60

graph/io/mxGraphCodec.ts

@@ -1,32 +0,32 @@

import { TGraph } from "..";
import { mxCodecRegistry } from "./mxCodecRegistry";
import { mxObjectCodec } from "./mxObjectCodec";
// import { TGraph } from "..";
// import { mxCodecRegistry } from "./mxCodecRegistry";
// import { mxObjectCodec } from "./mxObjectCodec";
/**
* Copyright (c) 2006-2015, JGraph Ltd
* Copyright (c) 2006-2015, Gaudenz Alder
*/
mxCodecRegistry.register(function()
{
/**
* Class: mxGraphCodec
*
* Codec for <mxGraph>s. This class is created and registered
* dynamically at load time and used implicitly via <mxCodec>
* and the <mxCodecRegistry>.
*
* Transient Fields:
*
* - graphListeners
* - eventListeners
* - view
* - container
* - cellRenderer
* - editor
* - selection
*/
return new mxObjectCodec(new TGraph(),
['graphListeners', 'eventListeners', 'view', 'container',
'cellRenderer', 'editor', 'selection']);
// /**
// * Copyright (c) 2006-2015, JGraph Ltd
// * Copyright (c) 2006-2015, Gaudenz Alder
// */
// mxCodecRegistry.register(function()
// {
// /**
// * Class: mxGraphCodec
// *
// * Codec for <mxGraph>s. This class is created and registered
// * dynamically at load time and used implicitly via <mxCodec>
// * and the <mxCodecRegistry>.
// *
// * Transient Fields:
// *
// * - graphListeners
// * - eventListeners
// * - view
// * - container
// * - cellRenderer
// * - editor
// * - selection
// */
// return new mxObjectCodec(new TGraph(),
// ['graphListeners', 'eventListeners', 'view', 'container',
// 'cellRenderer', 'editor', 'selection']);
}());
// }());

@@ -1,273 +0,273 @@

/**
* Copyright (c) 2006-2015, JGraph Ltd
* Copyright (c) 2006-2015, Gaudenz Alder
*/
// /**
// * Copyright (c) 2006-2015, JGraph Ltd
// * Copyright (c) 2006-2015, Gaudenz Alder
// */
import { mxGeometry } from "../model/mxGeometry";
import { mxConstants } from "../util/mxConstants";
import { mxLog } from "../util/mxLog";
import { mxObjectIdentity } from "../util/mxObjectIdentity";
import { mxPoint } from "../util/mxPoint";
import { mxUtils } from "../util/mxUtils";
// import { mxGeometry } from "../model/mxGeometry";
// import { mxConstants } from "../util/mxConstants";
// import { mxLog } from "../util/mxLog";
// import { mxObjectIdentity } from "../util/mxObjectIdentity";
// import { mxPoint } from "../util/mxPoint";
// import { mxUtils } from "../util/mxUtils";
/**
* 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.
*
* Expressions are only evaluated if <allowEval> is true.
*
* 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.
*/
export class mxObjectCodec {
[x: string]: (dec: any, root: any, model: any) => void;
// /**
// * 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.
// *
// * Expressions are only evaluated if <allowEval> is true.
// *
// * 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.
// */
// export class mxObjectCodec {
// [x: string]: (dec: any, root: any, model: any) => void;
/**
* Variable: template
*
* Holds the template object associated with this codec.
*/
template: any;
/**
* Variable: exclude
*
* Array containing the variable names that should be
* ignored by the codec.
*/
exclude: any[];
/**
* Variable: idrefs
*
* Array containing the variable names that should be
* turned into or converted from references. See
* <mxCodec.getId> and <mxCodec.getObject>.
*/
idrefs: any[];
// /**
// * Variable: template
// *
// * Holds the template object associated with this codec.
// */
// template: any;
// /**
// * Variable: exclude
// *
// * Array containing the variable names that should be
// * ignored by the codec.
// */
// exclude: any[];
// /**
// * Variable: idrefs
// *
// * Array containing the variable names that should be
// * turned into or converted from references. See
// * <mxCodec.getId> and <mxCodec.getObject>.
// */
// idrefs: any[];
/**
* Variable: mapping
*
* Maps from from fieldnames to XML attribute names.
*/
mapping: any[];
// /**
// * Variable: mapping
// *
// * Maps from from fieldnames to XML attribute names.
// */
// mapping: any[];
/**
* Variable: reverse
*
* Maps from from XML attribute names to fieldnames.
*/
reverse: any = {};
/**
* Variable: allowEval
*
* Static global switch that specifies if expressions in arrays are allowed.
* Default is false. NOTE: Enabling this carries a possible security risk.
*/
allowEval = false;
static allowEval: boolean;
// /**
// * Variable: reverse
// *
// * Maps from from XML attribute names to fieldnames.
// */
// reverse: any = {};
// /**
// * Variable: allowEval
// *
// * Static global switch that specifies if expressions in arrays are allowed.
// * Default is false. NOTE: Enabling this carries a possible security risk.
// */
// allowEval = false;
// static allowEval: boolean;
constructor(template: any, exclude: any[] = [], idrefs: any[] = [], mapping = []) {
this.template = template;
// constructor(template: any, exclude: any[] = [], idrefs: any[] = [], mapping = []) {
// this.template = template;
this.exclude = exclude;
this.idrefs = idrefs;
this.mapping = mapping;
// this.exclude = exclude;
// this.idrefs = idrefs;
// this.mapping = mapping;
this.reverse = new Object();
// this.reverse = new Object();
for (var i in this.mapping) {
this.reverse[this.mapping[i]] = i;
}
}
// for (var i in this.mapping) {
// this.reverse[this.mapping[i]] = i;
// }
// }
isCellCodec() {
return false;
}
// isCellCodec() {
// return false;
// }

@@ -278,762 +278,762 @@

/**
* 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.
*/
getName() {
return mxUtils.getFunctionName(this.template.constructor);
};
// /**
// * 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.
// */
// getName() {
// return mxUtils.getFunctionName(this.template.constructor);
// };
/**
* Function: cloneTemplate
*
* Returns a new instance of the template for this codec.
*/
cloneTemplate() {
return new this.template.constructor();
};
// /**
// * Function: cloneTemplate
// *
// * Returns a new instance of the template for this codec.
// */
// cloneTemplate() {
// 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.
*/
getFieldName(attributename: any) {
if (attributename != null) {
var mapped = this.reverse[attributename];
// /**
// * 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.
// */
// getFieldName(attributename: any) {
// if (attributename != null) {
// var mapped = this.reverse[attributename];
if (mapped != null) {
attributename = mapped;
}
}
// if (mapped != null) {
// attributename = mapped;
// }
// }
return attributename;
};
// 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.
*/
getAttributeName(fieldname: any) {
if (fieldname != null) {
var mapped = this.mapping[fieldname];
// /**
// * 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.
// */
// getAttributeName(fieldname: any) {
// if (fieldname != null) {
// var mapped = this.mapping[fieldname];
if (mapped != null) {
fieldname = mapped;
}
}
// if (mapped != null) {
// fieldname = mapped;
// }
// }
return fieldname;
};
// 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.
*/
isExcluded(obj: any, attr: any, value: any, write: any) {
return attr == mxObjectIdentity.FIELD_NAME ||
mxUtils.indexOf(this.exclude, attr) >= 0;
};
// /**
// * 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.
// */
// isExcluded(obj: any, attr: any, value: any, write: any) {
// 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.
*/
isReference(obj: any, attr: any, value: any, write: any) {
return mxUtils.indexOf(this.idrefs, 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.
// */
// isReference(obj: any, attr: any, value: any, write: any) {
// 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.
*/
encode(enc, obj) {
var node = enc.document.createElement(this.getName());
// /**
// * 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.
// */
// encode(enc, obj) {
// var node = enc.document.createElement(this.getName());
obj = this.beforeEncode(enc, obj, node);
this.encodeObject(enc, obj, node);
// obj = this.beforeEncode(enc, obj, node);
// this.encodeObject(enc, obj, node);
return this.afterEncode(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.
*/
encodeObject(enc: any, obj: any, node: any) {
enc.setAttribute(node, 'id', enc.getId(obj));
// /**
// * 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.
// */
// encodeObject(enc: any, obj: any, node: any) {
// enc.setAttribute(node, 'id', enc.getId(obj));
for (var i in obj) {
var name = i;
var value = obj[name];
// for (var i in obj) {
// var name = i;
// var value = obj[name];
if (value != null && !this.isExcluded(obj, name, value, true)) {
if (mxUtils.isInteger(name)) {
name = '';
}
// if (value != null && !this.isExcluded(obj, name, value, true)) {
// if (mxUtils.isInteger(name)) {
// name = '';
// }
this.encodeValue(enc, obj, name, value, node);
}
}
};
// 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.
* TODO:
*/
encodeValue(enc: any, obj: any, name: any, value: any, node: any) {
if (value != null) {
if (this.isReference(obj, name, value, true)) {
var tmp = enc.getId(value);
// /**
// * 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.
// * TODO:
// */
// encodeValue(enc: any, obj: any, name: any, value: any, node: any) {
// if (value != null) {
// if (this.isReference(obj, name, value, true)) {
// var tmp = enc.getId(value);
if (tmp == null) {
// TODO:
// mxLog.warn('mxObjectCodec.encode: No ID for ' +
// this.getName() + '.' + name + '=' + value);
return; // exit
}
// if (tmp == null) {
// // TODO:
// // mxLog.warn('mxObjectCodec.encode: No ID for ' +
// // this.getName() + '.' + name + '=' + value);
// return; // exit
// }
value = tmp;
}
// value = tmp;
// }
var defaultValue = this.template[name];
// 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);
}
}
};
// // 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.
*/
writeAttribute(enc, obj, name, value, node) {
if (typeof (value) != 'object' /* primitive type */) {
this.writePrimitiveAttribute(enc, obj, name, value, node);
}
else /* complex type */ {
this.writeComplexAttribute(enc, obj, name, value, node);
}
};
// /**
// * Function: writeAttribute
// *
// * Writes the given value into node using <writePrimitiveAttribute>
// * or <writeComplexAttribute> depending on the type of the value.
// */
// writeAttribute(enc, obj, name, value, node) {
// if (typeof (value) != 'object' /* primitive type */) {
// this.writePrimitiveAttribute(enc, obj, name, value, node);
// }
// else /* complex type */ {
// this.writeComplexAttribute(enc, obj, name, value, node);
// }
// };
/**
* Function: writePrimitiveAttribute
*
* Writes the given value as an attribute of the given node.
*/
writePrimitiveAttribute(enc, obj, name, value, node) {
value = this.convertAttributeToXml(enc, obj, name, value, node);
// /**
// * Function: writePrimitiveAttribute
// *
// * Writes the given value as an attribute of the given node.
// */
// writePrimitiveAttribute(enc, obj, name, value, node) {
// value = this.convertAttributeToXml(enc, obj, name, value, node);
if (name == null) {
var child = enc.document.createElement('add');
// if (name == null) {
// var child = enc.document.createElement('add');
if (typeof (value) == 'function') {
child.appendChild(enc.document.createTextNode(value));
}
else {
enc.setAttribute(child, 'value', value);
}
// 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, name, value);
}
};
// node.appendChild(child);
// }
// else if (typeof (value) != 'function') {
// enc.setAttribute(node, name, value);
// }
// };
/**
* Function: writeComplexAttribute
*
* Writes the given value as a child node of the given node.
*/
writeComplexAttribute(enc: any, obj: any, name: any, value: any, node: any) {
var child = enc.encode(value);
// /**
// * Function: writeComplexAttribute
// *
// * Writes the given value as a child node of the given node.
// */
// writeComplexAttribute(enc: any, obj: any, name: any, value: any, node: any) {
// var child = enc.encode(value);
if (child != null) {
if (name != null) {
child.setAttribute('as', name);
}
// if (child != null) {
// if (name != null) {
// child.setAttribute('as', name);
// }
node.appendChild(child);
}
else {
mxLog.warn('mxObjectCodec.encode: No node for ' + this.getName() + '.' + name + ': ' + value);
}
};
// node.appendChild(child);
// }
// else {
// mxLog.warn('mxObjectCodec.encode: No node for ' + this.getName() + '.' + name + ': ' + value);
// }
// };
/**
* Function: convertAttributeToXml
*
* Converts true to "1" and false to "0" is <isBooleanAttribute> returns true.
* All other values are not converted.
*
* Parameters:
*
* enc - <mxCodec> that controls the encoding process.
* obj - Objec to convert the attribute for.
* name - Name of the attribute to be converted.
* value - Value to be converted.
*/
convertAttributeToXml(enc, obj, name, value) {
// Makes sure to encode boolean values as numeric values
if (this.isBooleanAttribute(enc, obj, name, value)) {
// 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';
}
// /**
// * Function: convertAttributeToXml
// *
// * Converts true to "1" and false to "0" is <isBooleanAttribute> returns true.
// * All other values are not converted.
// *
// * Parameters:
// *
// * enc - <mxCodec> that controls the encoding process.
// * obj - Objec to convert the attribute for.
// * name - Name of the attribute to be converted.
// * value - Value to be converted.
// */
// convertAttributeToXml(enc, obj, name, value) {
// // Makes sure to encode boolean values as numeric values
// if (this.isBooleanAttribute(enc, obj, name, value)) {
// // 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;
};
// return value;
// };
/**
* Function: isBooleanAttribute
*
* Returns true if the given object attribute is a boolean value.
*
* Parameters:
*
* enc - <mxCodec> that controls the encoding process.
* obj - Objec to convert the attribute for.
* name - Name of the attribute to be converted.
* value - Value of the attribute to be converted.
*/
isBooleanAttribute(enc, obj, name, value) {
return (typeof (value.length) == 'undefined' && (value == true || value == false));
};
// /**
// * Function: isBooleanAttribute
// *
// * Returns true if the given object attribute is a boolean value.
// *
// * Parameters:
// *
// * enc - <mxCodec> that controls the encoding process.
// * obj - Objec to convert the attribute for.
// * name - Name of the attribute to be converted.
// * value - Value of the attribute to be converted.
// */
// isBooleanAttribute(enc, obj, name, value) {
// return (typeof (value.length) == 'undefined' && (value == true || value == false));
// };
/**
* Function: convertAttributeFromXml
*
* Converts booleans and numeric values to the respective types. Values are
* numeric if <isNumericAttribute> returns true.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* attr - XML attribute to be converted.
* obj - Objec to convert the attribute for.
*/
convertAttributeFromXml(dec, attr, obj) {
var value = attr.value;
// /**
// * Function: convertAttributeFromXml
// *
// * Converts booleans and numeric values to the respective types. Values are
// * numeric if <isNumericAttribute> returns true.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * attr - XML attribute to be converted.
// * obj - Objec to convert the attribute for.
// */
// convertAttributeFromXml(dec, attr, obj) {
// var value = attr.value;
if (this.isNumericAttribute(dec, attr, obj)) {
value = parseFloat(value);
// if (this.isNumericAttribute(dec, attr, obj)) {
// value = parseFloat(value);
if (isNaN(value) || !isFinite(value)) {
value = 0;
}
}
// if (isNaN(value) || !isFinite(value)) {
// value = 0;
// }
// }
return value;
};
// return value;
// };
/**
* Function: isNumericAttribute
*
* Returns true if the given XML attribute is or should be a numeric value.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* attr - XML attribute to be converted.
* obj - Objec to convert the attribute for.
*/
isNumericAttribute(dec, attr, obj) {
// Handles known numeric attributes for generic objects
var result = (obj.constructor == mxGeometry &&
(attr.name == 'x' || attr.name == 'y' ||
attr.name == 'width' || attr.name == 'height')) ||
(obj.constructor == mxPoint &&
(attr.name == 'x' || attr.name == 'y')) ||
mxUtils.isNumeric(attr.value);
// /**
// * Function: isNumericAttribute
// *
// * Returns true if the given XML attribute is or should be a numeric value.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * attr - XML attribute to be converted.
// * obj - Objec to convert the attribute for.
// */
// isNumericAttribute(dec, attr, obj) {
// // Handles known numeric attributes for generic objects
// var result = (obj.constructor == mxGeometry &&
// (attr.name == 'x' || attr.name == 'y' ||
// attr.name == 'width' || attr.name == 'height')) ||
// (obj.constructor == mxPoint &&
// (attr.name == 'x' || attr.name == 'y')) ||
// mxUtils.isNumeric(attr.value);
return result;
};
// return result;
// };
/**
* 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.
*/
beforeEncode(enc, obj, node) {
return obj;
};
// /**
// * 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.
// */
// beforeEncode(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.
*/
afterEncode(enc, obj, node) {
return node;
};
// /**
// * 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.
// */
// afterEncode(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.
*/
decode(dec, node, into) {
var id = node.getAttribute('id');
var obj = dec.objects[id];
// /**
// * 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.
// */
// decode(dec, node, into) {
// var id = node.getAttribute('id');
// var obj = dec.objects[id];
if (obj == null) {
obj = into || this.cloneTemplate();
// if (obj == null) {
// obj = into || this.cloneTemplate();
if (id != null) {
dec.putObject(id, obj);
}
}
// if (id != null) {
// dec.putObject(id, obj);
// }
// }
node = this.beforeDecode(dec, node, obj);
this.decodeNode(dec, node, obj);
// node = this.beforeDecode(dec, node, obj);
// this.decodeNode(dec, node, obj);
return this.afterDecode(dec, node, obj);
};
// return this.afterDecode(dec, node, obj);
// };
/**
* Function: decodeNode
*
* Calls <decodeAttributes> and <decodeChildren> for the given node.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* node - XML node to be decoded.
* obj - Objec to encode the node into.
*/
decodeNode(dec, node, obj) {
if (node != null) {
this.decodeAttributes(dec, node, obj);
this.decodeChildren(dec, node, obj);
}
};
// /**
// * Function: decodeNode
// *
// * Calls <decodeAttributes> and <decodeChildren> for the given node.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * node - XML node to be decoded.
// * obj - Objec to encode the node into.
// */
// decodeNode(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>.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* node - XML node to be decoded.
* obj - Objec to encode the node into.
*/
decodeAttributes(dec, node, obj) {
var attrs = node.attributes;
// /**
// * Function: decodeAttributes
// *
// * Decodes all attributes of the given node using <decodeAttribute>.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * node - XML node to be decoded.
// * obj - Objec to encode the node into.
// */
// decodeAttributes(dec, node, obj) {
// var attrs = node.attributes;
if (attrs != null) {
for (var i = 0; i < attrs.length; i++) {
this.decodeAttribute(dec, attrs[i], obj);
}
}
};
// if (attrs != null) {
// for (var i = 0; i < attrs.length; i++) {
// this.decodeAttribute(dec, attrs[i], obj);
// }
// }
// };
/**
* Function: isIgnoredAttribute
*
* Returns true if the given attribute should be ignored. This implementation
* returns true if the attribute name is "as" or "id".
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* attr - XML attribute to be decoded.
* obj - Objec to encode the attribute into.
*/
isIgnoredAttribute(dec, attr, obj) {
return attr.nodeName == 'as' || attr.nodeName == 'id';
};
// /**
// * Function: isIgnoredAttribute
// *
// * Returns true if the given attribute should be ignored. This implementation
// * returns true if the attribute name is "as" or "id".
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * attr - XML attribute to be decoded.
// * obj - Objec to encode the attribute into.
// */
// isIgnoredAttribute(dec, attr, obj) {
// return attr.nodeName == 'as' || attr.nodeName == 'id';
// };
/**
* Function: decodeAttribute
*
* Reads the given attribute into the specified object.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* attr - XML attribute to be decoded.
* obj - Objec to encode the attribute into.
*/
decodeAttribute(dec, attr, obj) {
if (!this.isIgnoredAttribute(dec, attr, obj)) {
var name = attr.nodeName;
// /**
// * Function: decodeAttribute
// *
// * Reads the given attribute into the specified object.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * attr - XML attribute to be decoded.
// * obj - Objec to encode the attribute into.
// */
// decodeAttribute(dec, attr, obj) {
// if (!this.isIgnoredAttribute(dec, attr, obj)) {
// var name = attr.nodeName;
// 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.convertAttributeFromXml(dec, attr, obj);
var fieldname = this.getFieldName(name);
// // 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.convertAttributeFromXml(dec, attr, obj);
// var fieldname = this.getFieldName(name);
if (this.isReference(obj, fieldname, value, false)) {
var tmp = dec.getObject(value);
// 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
}
// if (tmp == null) {
// mxLog.warn('mxObjectCodec.decode: No object for ' +
// this.getName() + '.' + name + '=' + value);
// return; // exit
// }
value = tmp;
}
// value = tmp;
// }
if (!this.isExcluded(obj, name, value, false)) {
//mxLog.debug(mxUtils.getFunctionName(obj.constructor)+'.'+name+'='+value);
obj[name] = value;
}
}
};
// if (!this.isExcluded(obj, name, value, false)) {
// //mxLog.debug(mxUtils.getFunctionName(obj.constructor)+'.'+name+'='+value);
// obj[name] = value;
// }
// }
// };
/**
* Function: decodeChildren
*
* Decodes all children of the given node using <decodeChild>.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* node - XML node to be decoded.
* obj - Objec to encode the node into.
*/
decodeChildren(dec, node, obj) {
var child = node.firstChild;
// /**
// * Function: decodeChildren
// *
// * Decodes all children of the given node using <decodeChild>.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * node - XML node to be decoded.
// * obj - Objec to encode the node into.
// */
// decodeChildren(dec, node, obj) {
// var child = node.firstChild;
while (child != null) {
var tmp = child.nextSibling;
// while (child != null) {
// var tmp = child.nextSibling;
if (child.nodeType == mxConstants.NODETYPE_ELEMENT &&
!this.processInclude(dec, child, obj)) {
this.decodeChild(dec, child, obj);
}
// if (child.nodeType == mxConstants.NODETYPE_ELEMENT &&
// !this.processInclude(dec, child, obj)) {
// this.decodeChild(dec, child, obj);
// }
child = tmp;
}
};
// child = tmp;
// }
// };
/**
* Function: decodeChild
*
* Reads the specified child into the given object.
*
* Parameters:
*
* dec - <mxCodec> that controls the decoding process.
* child - XML child element to be decoded.
* obj - Objec to encode the node into.
*/
decodeChild(dec, child, obj) {
var fieldname = this.getFieldName(child.getAttribute('as'));
// /**
// * Function: decodeChild
// *
// * Reads the specified child into the given object.
// *
// * Parameters:
// *
// * dec - <mxCodec> that controls the decoding process.
// * child - XML child element to be decoded.
// * obj - Objec to encode the node into.
// */
// decodeChild(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 (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 (child.nodeName == 'add') {
// value = child.getAttribute('value');
// if (value == null && mxObjectCodec.allowEval) {
// value = mxUtils.eval(mxUtils.getTextContent(child));
// }
}
else {
value = dec.decode(child, template);
}
// // if (value == null && mxObjectCodec.allowEval) {
// // value = mxUtils.eval(mxUtils.getTextContent(child));
// // }
// }
// else {
// value = dec.decode(child, template);
// }
try {
this.addObjectValue(obj, fieldname, value, template);
}
catch (e) {
throw new Error(e.message + ' for ' + child.nodeName);
}
}
};
// try {
// this.addObjectValue(obj, fieldname, value, template);
// }
// catch (e) {
// throw new Error(e.message + ' for ' + child.nodeName);
// }
// }
// };
/**
* 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.
*/
getFieldTemplate(obj, fieldname, child) {
var template = obj[fieldname];
// /**
// * 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.
// */
// getFieldTemplate(obj, fieldname, child) {
// var template = obj[fieldname];
// Non-empty arrays are replaced completely
if (template instanceof Array && template.length > 0) {
template = null;
}
// // Non-empty arrays are replaced completely
// if (template instanceof Array && template.length > 0) {
// template = null;
// }
return template;
};
// 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.
*/
addObjectValue(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: 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.
// */
// addObjectValue(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.
*/
processInclude(dec, node, into) {
if (node.nodeName == 'include') {
var name = node.getAttribute('name');
// /**
// * 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.
// */
// processInclude(dec, node, into) {
// if (node.nodeName == 'include') {
// var name = node.getAttribute('name');
if (name != null) {
try {
// var xml = mxUtils.load(name).getDocumentElement();
// if (name != null) {
// try {
// // var xml = mxUtils.load(name).getDocumentElement();
// if (xml != null) {
// dec.decode(xml, into);
// }
}
catch (e) {
// ignore
}
}
// // if (xml != null) {
// // dec.decode(xml, into);
// // }
// }
// catch (e) {
// // ignore
// }
// }
return true;
}
// return true;
// }
return false;
};
// 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.
*/
beforeDecode(dec, node, obj) {
return node;
};
// /**
// * 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.
// */
// beforeDecode(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.
*/
afterDecode(dec, node, obj) {
return obj;
};
};
// /**
// * 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.
// */
// afterDecode(dec, node, obj) {
// return obj;
// };
// };
import './mxCellCodec';
import './mxModelCodec';
import './mxRootChangeCodec';
import './mxChildChangeCodec';
import './mxTerminalChangeCodec';
import './mxGenericChangeCodec';
import './mxGraphCodec';
import './mxGraphViewCodec'
import './mxStylesheetCodec'
import './mxDefaultKeyHandlerCodec'
// import './mxCellCodec';
// import './mxModelCodec';
// import './mxRootChangeCodec';
// import './mxChildChangeCodecb';
// import './mxTerminalChangeCodec';
// import './mxGenericChangeCodecb';
// import './mxGraphCodec';
// import './mxGraphViewCodec'
// import './mxStylesheetCodec'
// import './mxDefaultKeyHandlerCodecb'
import './mxEditorCodec';
// import './mxEditorCodecb';
import { mxUtils } from './../util/mxUtils';
import { mxShape } from './../shape/mxShape';
import { mxShape } from './mxShape';
import { mxConstants } from "../util/mxConstants";

@@ -4,0 +4,0 @@

{
"name": "thgraph",
"version": "0.0.3",
"version": "0.0.4",
"description": "mxgraph graph svg editor",

@@ -5,0 +5,0 @@ "main": "graph/index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc