forked from MindFusionComponents/JavaScript-Diagram-Samples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInheritance.js
More file actions
103 lines (88 loc) · 2.95 KB
/
Copy pathInheritance.js
File metadata and controls
103 lines (88 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/// <reference path="MindFusion.Diagramming-vsdoc.js" />
var Diagram = MindFusion.Diagramming.Diagram;
var DiagramItem = MindFusion.Diagramming.DiagramItem;
var DiagramLink = MindFusion.Diagramming.DiagramLink;
var DiagramNode = MindFusion.Diagramming.DiagramNode;
var ShapeNode = MindFusion.Diagramming.ShapeNode;
var TableNode = MindFusion.Diagramming.TableNode;
var ContainerNode = MindFusion.Diagramming.ContainerNode;
var FreeFormNode = MindFusion.Diagramming.FreeFormNode;
var SvgNode = MindFusion.Diagramming.SvgNode;
var Alignment = MindFusion.Diagramming.Alignment;
var ColumnStyle = MindFusion.Diagramming.ColumnStyle;
var ScrollBar = MindFusion.Diagramming.ScrollBar;
var Rect = MindFusion.Drawing.Rect;
var Font = MindFusion.Drawing.Font;
var TreeLayout = MindFusion.Graphs.TreeLayout;
$(document).ready(function ()
{
TableNode.prototype.useScrollBars = true;
ScrollBar.prototype.background = "Lavender";
ScrollBar.prototype.foreground = "DarkGray";
// create a Diagram component that wraps the "diagram" canvas
var diagram = Diagram.create($("#diagram")[0]);
createClassDiagram(diagram,
[
"DiagramItem",
"DiagramLink",
"DiagramNode",
"ShapeNode",
"TableNode",
"ContainerNode",
"FreeFormNode",
"SvgNode"
]);
});
function createClassDiagram(diagram, classes)
{
var classConstructors = [];
// create a table node for each class
for (var i = 0; i < classes.length; i++)
{
var className = classes[i];
var node = diagram.getFactory().createTableNode(20, 20, 42, 42);
node.redimTable(1, 0);
node.setText(className);
node.setBrush("white");
node.setCaptionBackBrush("lightgray");
node.setCaptionFont(
new Font("sans-serif", 3, true /*bold*/, true /*italic*/));
node.setScrollable(true);
var ctor = eval(className);
for (var property in ctor.prototype)
{
node.addRow();
node.getCell(0, node.rows.length - 1).setText(property);
}
classConstructors.push(ctor);
ctor.classNode = node;
}
// create a diagram link for each prototype inheritance
classConstructors.forEach(function(ctor)
{
var base = getBaseType(ctor);
if (base && base.classNode)
{
var link = diagram.factory.createDiagramLink(
base.classNode,
ctor.classNode);
link.setHeadShape(null);
link.setBaseShape("Triangle");
link.setBaseShapeSize(3);
}
});
// arrange as a tree
var treeLayout = new TreeLayout();
treeLayout.linkType = MindFusion.Graphs.TreeLayoutLinkType.Cascading;
diagram.arrange(treeLayout);
}
function getBaseType(ctor)
{
// if class registered using MindFusion.registerClass
if (ctor.__baseType)
return ctor.__baseType;
// if prototypical inheritance with Child.prototype = new Parent()
if (ctor.prototype && ctor.prototype.constructor != ctor)
return ctor.prototype.constructor;
return null;
}