Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
3007047e30
commit
c95207aa83
137
js/ui/mxgraph/src/js/io/mxCodecRegistry.js
Normal file
137
js/ui/mxgraph/src/js/io/mxCodecRegistry.js
Normal file
|
@ -0,0 +1,137 @@
|
|||
/**
|
||||
* Copyright (c) 2006-2015, JGraph Ltd
|
||||
* Copyright (c) 2006-2015, Gaudenz Alder
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
};
|
Loading…
Reference in New Issue
Block a user