forked from NorthwoodsSoftware/GoJS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhtmlInteraction.html
200 lines (165 loc) · 6.78 KB
/
htmlInteraction.html
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML Interaction</title>
<meta name="description" content="Show a GoJS Palette in a floating window and use an Inspector for changing the appearance of the selected node." />
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Copyright 1998-2019 by Northwoods Software Corporation. -->
<link rel="stylesheet" href="../assets/css/jquery-ui.min.css" />
<script src="../assets/js/jquery.min.js"></script>
<script src="../assets/js/jquery-ui.min.js"></script>
<script src="../release/go.js"></script>
<script src="../extensions/Figures.js"></script>
<script src="../assets/js/goSamples.js"></script> <!-- this is only for the GoJS Samples framework -->
<link rel='stylesheet' href='../extensions/DataInspector.css' />
<script src="../extensions/DataInspector.js"></script>
<script id="code">
function init() {
if (window.goSamples) goSamples(); // init for these samples -- you don't need to call this
// Note that we do not use $ here as an alias for go.GraphObject.make because we are using $ for jQuery
var GO = go.GraphObject.make; // for conciseness in defining templates
myDiagram =
GO(go.Diagram, "myDiagramDiv",
{ "undoManager.isEnabled": true });
// define several shared Brushes
var fill1 = "rgb(105,210,231)"
var brush1 = "rgb(65,180,181)";
var fill2 = "rgb(167,219,216)"
var brush2 = "rgb(127,179,176)";
var fill3 = "rgb(224,228,204)"
var brush3 = "rgb(184,188,164)";
var fill4 = "rgb(243,134,48)"
var brush4 = "rgb(203,84,08)";
myDiagram.nodeTemplateMap.add("", // default category
GO(go.Node, "Auto",
{ locationSpot: go.Spot.Center },
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
GO(go.Shape, "Ellipse",
{ strokeWidth: 2, fill: fill1, name: "SHAPE" },
new go.Binding("figure", "figure"),
new go.Binding("fill", "fill"),
new go.Binding("stroke", "stroke")
),
GO(go.TextBlock,
{
margin: 5,
maxSize: new go.Size(200, NaN),
wrap: go.TextBlock.WrapFit,
textAlign: "center",
editable: true,
font: "bold 9pt Helvetica, Arial, sans-serif",
name: "TEXT"
},
new go.Binding("text", "text").makeTwoWay())));
// On selection changed, make sure infoDraggable will resize as necessary
myDiagram.addDiagramListener("ChangedSelection", function(diagramEvent) {
var idrag = document.getElementById("infoDraggable");
idrag.style.width = "";
idrag.style.height = "";
});
// initialize the Palette that is in a floating, draggable HTML container
myPalette = new go.Palette("myPaletteDiv"); // must name or refer to the DIV HTML element
myPalette.nodeTemplateMap = myDiagram.nodeTemplateMap;
myPalette.model = new go.GraphLinksModel([
{ text: "Lake", fill: fill1, stroke: brush1, figure: "Hexagon" },
{ text: "Ocean", fill: fill2, stroke: brush2, figure: "Rectangle" },
{ text: "Sand", fill: fill3, stroke: brush3, figure: "Diamond" },
{ text: "Goldfish", fill: fill4, stroke: brush4, figure: "Octagon" }
]);
myPalette.addDiagramListener("InitialLayoutCompleted", function(diagramEvent) {
var pdrag = document.getElementById("paletteDraggable");
var palette = diagramEvent.diagram;
pdrag.style.width = palette.documentBounds.width + 28 + "px"; // account for padding/borders
pdrag.style.height = palette.documentBounds.height + 38 + "px";
});
$(function() {
$("#paletteDraggable").draggable({ handle: "#paletteDraggableHandle" }).resizable({
// After resizing, perform another layout to fit everything in the palette's viewport
stop: function() { myPalette.layoutDiagram(true); }
});
$("#infoDraggable").draggable({ handle: "#infoDraggableHandle" });
var inspector = new Inspector('myInfo', myDiagram,
{
properties: {
// key would be automatically added for nodes, but we want to declare it read-only also:
"key": { readOnly: true, show: Inspector.showIfPresent },
// fill and stroke would be automatically added for nodes, but we want to declare it a color also:
"fill": { show: Inspector.showIfPresent, type: 'color' },
"stroke": { show: Inspector.showIfPresent, type: 'color' }
}
});
});
}
</script>
<style type="text/css">
.draggable {
display: inline-block;
vertical-align: top;
border: 4px solid #BBB;
border-radius: 4px;
background-color: #F5F5F5;
position: absolute;
top: 20px;
left: 20px;
z-index: 500;
}
.handle {
background-color: lightblue;
cursor: move;
text-align: center;
font: bold 12px sans-serif;
}
#infoDraggable {
font: 12px helvetica, sans-serif;
min-width: 213px;
}
#myInfo {
width: 100%;
overflow: hidden;
}
#myPaletteDiv {
background-color: #F5F5F5;
width: 100%;
height: 100%;
}
/*
One simple way of making a div fill its space,
with allowances for the title (top) and the resize handle (bottom)
*/
#paletteContainer {
position: absolute;
bottom: 14px;
left: 0px;
right: 0px;
top: 14px;
}
</style>
</head>
<body onload="init()">
<div id="sample">
<div id="paletteDraggable" class="draggable" style="height: 300px;">
<div id="paletteDraggableHandle" class="handle">Palette</div>
<div id="paletteContainer">
<div id="myPaletteDiv"></div>
</div>
</div>
<div id="infoDraggable" class="draggable" style="display: inline-block; vertical-align: top; padding: 5px; top: 20px; left: 380px;">
<div id="infoDraggableHandle" class="handle">Info</div>
<div>
<div id="myInfo"></div>
</div>
</div>
<div style="display: inline-block; vertical-align: top; width:400px">
<div id="myDiagramDiv" style="background-color: whitesmoke; border: solid 1px black; height: 400px"></div>
</div>
<p>
This sample contains a draggable HTML element (using jQuery UI), which houses a GoJS Palette.
</p>
<p>
A DIV to the right of the diagram houses the <a href="../extensions/DataInspector.html">GoJS Data inspector extension</a>,
which displays some editable information about each Node.
</p>
</div>
</body>
</html>