| /** |
| * 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; |
| } |
| |
| }; |