-
Notifications
You must be signed in to change notification settings - Fork 420
/
BaseRenderer.js
93 lines (82 loc) · 2.58 KB
/
BaseRenderer.js
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
var DEFAULT_RENDER_PRIORITY = 1000;
/**
* @typedef {import('../core/Types').ElementLike} Element
* @typedef {import('../core/Types').ConnectionLike} Connection
* @typedef {import('../core/Types').ShapeLike} Shape
*
* @typedef {import('../core/EventBus').default} EventBus
*/
/**
* The base implementation of shape and connection renderers.
*
* @param {EventBus} eventBus
* @param {number} [renderPriority=1000]
*/
export default function BaseRenderer(eventBus, renderPriority) {
var self = this;
renderPriority = renderPriority || DEFAULT_RENDER_PRIORITY;
eventBus.on([ 'render.shape', 'render.connection' ], renderPriority, function(evt, context) {
var type = evt.type,
element = context.element,
visuals = context.gfx,
attrs = context.attrs;
if (self.canRender(element)) {
if (type === 'render.shape') {
return self.drawShape(visuals, element, attrs);
} else {
return self.drawConnection(visuals, element, attrs);
}
}
});
eventBus.on([ 'render.getShapePath', 'render.getConnectionPath' ], renderPriority, function(evt, element) {
if (self.canRender(element)) {
if (evt.type === 'render.getShapePath') {
return self.getShapePath(element);
} else {
return self.getConnectionPath(element);
}
}
});
}
/**
* Checks whether an element can be rendered.
*
* @param {Element} element The element to be rendered.
*
* @return {boolean} Whether the element can be rendered.
*/
BaseRenderer.prototype.canRender = function(element) {};
/**
* Draws a shape.
*
* @param {SVGElement} visuals The SVG element to draw the shape into.
* @param {Shape} shape The shape to be drawn.
*
* @return {SVGElement} The SVG element of the shape drawn.
*/
BaseRenderer.prototype.drawShape = function(visuals, shape) {};
/**
* Draws a connection.
*
* @param {SVGElement} visuals The SVG element to draw the connection into.
* @param {Connection} connection The connection to be drawn.
*
* @return {SVGElement} The SVG element of the connection drawn.
*/
BaseRenderer.prototype.drawConnection = function(visuals, connection) {};
/**
* Gets the SVG path of the graphical representation of a shape.
*
* @param {Shape} shape The shape.
*
* @return {string} The SVG path of the shape.
*/
BaseRenderer.prototype.getShapePath = function(shape) {};
/**
* Gets the SVG path of the graphical representation of a connection.
*
* @param {Connection} connection The connection.
*
* @return {string} The SVG path of the connection.
*/
BaseRenderer.prototype.getConnectionPath = function(connection) {};