/** * 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 : * * 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 . * * (code) * mxCodecRegistry.register(codec); * (end) * * 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 - 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; } };