UNPKG

jointjs

Version:

JavaScript diagramming library

62 lines (56 loc) 2.57 kB
<pre class="docs-method-signature"><code>define(type [, defaultAttributes, prototypeProperties, staticProperties])</code></pre> <p>Helper to define a new Cell class or extend an existing one.</p> <p>The <code>type</code> must be a unique identifier of the class, which determines the location of the class definition in the <code>joint.shapes</code> namespace (<code>type</code> is the path to the class definition delimited by dots: <code>.</code>). When creating an instance of the cell, attributes will be set to the value from the <code>defaultAttributes</code>, unless overridden by subclass or instance attributes.</p> <pre><code>// Define a new Ellipse class in `joint.shapes.examples` namespace // Inherits from generic Element class var Ellipse = joint.dia.Element.define('examples.Ellipse', { // default attributes markup: [{ tagName: 'ellipse', selector: 'ellipse' // not necessary but faster ], attrs: { ellipse: { fill: 'white', stroke: 'black', strokeWidth: 4, refRx: .5, refRy: .5, refCx: .5, refCy: .5 } } }); // Instantiate an element var ellipse = (new Ellipse()).position(100, 100).size(120, 50).addTo(graph); // Define a new ColoredEllipse class // Inherits from Ellipse var ColoredEllipse = Ellipse.define('examples.ColoredEllipse', { // overridden Ellipse default attributes // other Ellipse attributes preserved attrs: { ellipse: { fill: 'lightgray' } } }, { // prototype properties // accessible on `this.(...)` - as well as, more precisely, `this.prototype.(...)` // useful for custom methods that need access to this instance // shared by all instances of the class randomizeStrokeColor: function() { var randomColor = '#' + ('000000' + Math.floor(Math.random() * 16777215).toString(16)).slice(-6); return this.attr('ellipse/stroke', randomColor); } }, { // static properties // accessible on `this.constructor.(...)` // useful for custom methods and constants that do not need an instance to operate // however, a new set of static properties is generated every time the constructor is called // (try to only use static properties if absolutely necessary) createRandom: function() { return (new ColoredEllipse()).randomizeStrokeColor(); } }); // Instantiate an element var coloredEllipse = ColoredEllipse.createRandom().position(300, 100).size(120, 50).addTo(graph);</code></pre>