vis-rails 0.0.6 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/vis/rails/version.rb +1 -1
- data/vendor/assets/javascripts/vis.js +2 -9
- data/vendor/assets/vis/DataSet.js +17 -9
- data/vendor/assets/vis/graph/Edge.js +49 -24
- data/vendor/assets/vis/graph/Graph.js +268 -64
- data/vendor/assets/vis/graph/Groups.js +1 -1
- data/vendor/assets/vis/graph/Node.js +18 -67
- data/vendor/assets/vis/graph/Popup.js +40 -13
- data/vendor/assets/vis/graph/css/graph-navigation.css +18 -14
- data/vendor/assets/vis/graph/graphMixins/ClusterMixin.js +7 -5
- data/vendor/assets/vis/graph/graphMixins/HierarchicalLayoutMixin.js +20 -5
- data/vendor/assets/vis/graph/graphMixins/ManipulationMixin.js +33 -33
- data/vendor/assets/vis/graph/graphMixins/MixinLoader.js +30 -32
- data/vendor/assets/vis/graph/graphMixins/NavigationMixin.js +33 -1
- data/vendor/assets/vis/graph/graphMixins/SectorsMixin.js +2 -2
- data/vendor/assets/vis/graph/graphMixins/SelectionMixin.js +72 -60
- data/vendor/assets/vis/graph/graphMixins/physics/BarnesHut.js +43 -18
- data/vendor/assets/vis/graph/graphMixins/physics/HierarchialRepulsion.js +8 -8
- data/vendor/assets/vis/graph/graphMixins/physics/PhysicsMixin.js +309 -129
- data/vendor/assets/vis/graph/graphMixins/physics/Repulsion.js +10 -10
- data/vendor/assets/vis/module/exports.js +1 -2
- data/vendor/assets/vis/module/header.js +2 -2
- data/vendor/assets/vis/timeline/Range.js +53 -93
- data/vendor/assets/vis/timeline/Timeline.js +328 -224
- data/vendor/assets/vis/timeline/component/Component.js +17 -95
- data/vendor/assets/vis/timeline/component/CurrentTime.js +54 -59
- data/vendor/assets/vis/timeline/component/CustomTime.js +55 -83
- data/vendor/assets/vis/timeline/component/Group.js +398 -75
- data/vendor/assets/vis/timeline/component/ItemSet.js +662 -403
- data/vendor/assets/vis/timeline/component/Panel.js +118 -60
- data/vendor/assets/vis/timeline/component/RootPanel.js +80 -132
- data/vendor/assets/vis/timeline/component/TimeAxis.js +191 -277
- data/vendor/assets/vis/timeline/component/css/item.css +16 -23
- data/vendor/assets/vis/timeline/component/css/itemset.css +25 -4
- data/vendor/assets/vis/timeline/component/css/labelset.css +34 -0
- data/vendor/assets/vis/timeline/component/css/panel.css +15 -1
- data/vendor/assets/vis/timeline/component/css/timeaxis.css +8 -8
- data/vendor/assets/vis/timeline/component/item/Item.js +48 -26
- data/vendor/assets/vis/timeline/component/item/ItemBox.js +156 -230
- data/vendor/assets/vis/timeline/component/item/ItemPoint.js +118 -166
- data/vendor/assets/vis/timeline/component/item/ItemRange.js +135 -187
- data/vendor/assets/vis/timeline/component/item/ItemRangeOverflow.js +29 -92
- data/vendor/assets/vis/timeline/stack.js +112 -0
- data/vendor/assets/vis/util.js +136 -38
- metadata +4 -18
- data/vendor/assets/vis/.gitignore +0 -1
- data/vendor/assets/vis/EventBus.js +0 -89
- data/vendor/assets/vis/events.js +0 -116
- data/vendor/assets/vis/graph/ClusterMixin.js +0 -1019
- data/vendor/assets/vis/graph/NavigationMixin.js +0 -245
- data/vendor/assets/vis/graph/SectorsMixin.js +0 -547
- data/vendor/assets/vis/graph/SelectionMixin.js +0 -515
- data/vendor/assets/vis/graph/img/downarrow.png +0 -0
- data/vendor/assets/vis/graph/img/leftarrow.png +0 -0
- data/vendor/assets/vis/graph/img/rightarrow.png +0 -0
- data/vendor/assets/vis/graph/img/uparrow.png +0 -0
- data/vendor/assets/vis/timeline/Controller.js +0 -183
- data/vendor/assets/vis/timeline/Stack.js +0 -190
- data/vendor/assets/vis/timeline/component/ContentPanel.js +0 -113
- data/vendor/assets/vis/timeline/component/GroupSet.js +0 -580
- data/vendor/assets/vis/timeline/component/css/groupset.css +0 -59
@@ -1,8 +1,5 @@
|
|
1
1
|
/**
|
2
2
|
* A panel can contain components
|
3
|
-
* @param {Component} [parent]
|
4
|
-
* @param {Component[]} [depends] Components on which this components depends
|
5
|
-
* (except for the parent)
|
6
3
|
* @param {Object} [options] Available parameters:
|
7
4
|
* {String | Number | function} [left]
|
8
5
|
* {String | Number | function} [top]
|
@@ -12,12 +9,15 @@
|
|
12
9
|
* @constructor Panel
|
13
10
|
* @extends Component
|
14
11
|
*/
|
15
|
-
function Panel(
|
12
|
+
function Panel(options) {
|
16
13
|
this.id = util.randomUUID();
|
17
|
-
this.parent =
|
18
|
-
this.
|
14
|
+
this.parent = null;
|
15
|
+
this.childs = [];
|
19
16
|
|
20
17
|
this.options = options || {};
|
18
|
+
|
19
|
+
// create frame
|
20
|
+
this.frame = (typeof document !== 'undefined') ? document.createElement('div') : null;
|
21
21
|
}
|
22
22
|
|
23
23
|
Panel.prototype = new Component();
|
@@ -34,79 +34,137 @@ Panel.prototype = new Component();
|
|
34
34
|
Panel.prototype.setOptions = Component.prototype.setOptions;
|
35
35
|
|
36
36
|
/**
|
37
|
-
* Get the
|
38
|
-
*
|
39
|
-
* @returns {HTMLElement} container
|
37
|
+
* Get the outer frame of the panel
|
38
|
+
* @returns {HTMLElement} frame
|
40
39
|
*/
|
41
|
-
Panel.prototype.
|
40
|
+
Panel.prototype.getFrame = function () {
|
42
41
|
return this.frame;
|
43
42
|
};
|
44
43
|
|
45
44
|
/**
|
46
|
-
*
|
47
|
-
* @
|
45
|
+
* Append a child to the panel
|
46
|
+
* @param {Component} child
|
48
47
|
*/
|
49
|
-
Panel.prototype.
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
if (
|
56
|
-
frame
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
48
|
+
Panel.prototype.appendChild = function (child) {
|
49
|
+
this.childs.push(child);
|
50
|
+
child.parent = this;
|
51
|
+
|
52
|
+
// attach to the DOM
|
53
|
+
var frame = child.getFrame();
|
54
|
+
if (frame) {
|
55
|
+
if (frame.parentNode) {
|
56
|
+
frame.parentNode.removeChild(frame);
|
57
|
+
}
|
58
|
+
this.frame.appendChild(frame);
|
59
|
+
}
|
60
|
+
};
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Insert a child to the panel
|
64
|
+
* @param {Component} child
|
65
|
+
* @param {Component} beforeChild
|
66
|
+
*/
|
67
|
+
Panel.prototype.insertBefore = function (child, beforeChild) {
|
68
|
+
var index = this.childs.indexOf(beforeChild);
|
69
|
+
if (index != -1) {
|
70
|
+
this.childs.splice(index, 0, child);
|
71
|
+
child.parent = this;
|
72
|
+
|
73
|
+
// attach to the DOM
|
74
|
+
var frame = child.getFrame();
|
75
|
+
if (frame) {
|
76
|
+
if (frame.parentNode) {
|
77
|
+
frame.parentNode.removeChild(frame);
|
78
|
+
}
|
79
|
+
|
80
|
+
var beforeFrame = beforeChild.getFrame();
|
81
|
+
if (beforeFrame) {
|
82
|
+
this.frame.insertBefore(frame, beforeFrame);
|
63
83
|
}
|
64
84
|
else {
|
65
|
-
|
85
|
+
this.frame.appendChild(frame);
|
66
86
|
}
|
67
87
|
}
|
68
|
-
|
69
|
-
this.frame = frame;
|
70
|
-
changed += 1;
|
71
88
|
}
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
89
|
+
};
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Remove a child from the panel
|
93
|
+
* @param {Component} child
|
94
|
+
*/
|
95
|
+
Panel.prototype.removeChild = function (child) {
|
96
|
+
var index = this.childs.indexOf(child);
|
97
|
+
if (index != -1) {
|
98
|
+
this.childs.splice(index, 1);
|
99
|
+
child.parent = null;
|
100
|
+
|
101
|
+
// remove from the DOM
|
102
|
+
var frame = child.getFrame();
|
103
|
+
if (frame && frame.parentNode) {
|
104
|
+
this.frame.removeChild(frame);
|
79
105
|
}
|
80
|
-
parentContainer.appendChild(frame);
|
81
|
-
changed += 1;
|
82
106
|
}
|
107
|
+
};
|
83
108
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
109
|
+
/**
|
110
|
+
* Test whether the panel contains given child
|
111
|
+
* @param {Component} child
|
112
|
+
*/
|
113
|
+
Panel.prototype.hasChild = function (child) {
|
114
|
+
var index = this.childs.indexOf(child);
|
115
|
+
return (index != -1);
|
90
116
|
};
|
91
117
|
|
92
118
|
/**
|
93
|
-
*
|
94
|
-
* @return {
|
119
|
+
* Repaint the component
|
120
|
+
* @return {boolean} Returns true if the component was resized since previous repaint
|
95
121
|
*/
|
96
|
-
Panel.prototype.
|
97
|
-
var
|
98
|
-
|
99
|
-
frame = this.
|
122
|
+
Panel.prototype.repaint = function () {
|
123
|
+
var asString = util.option.asString,
|
124
|
+
options = this.options,
|
125
|
+
frame = this.getFrame();
|
100
126
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
127
|
+
// update className
|
128
|
+
frame.className = 'vpanel' + (options.className ? (' ' + asString(options.className)) : '');
|
129
|
+
|
130
|
+
// repaint the child components
|
131
|
+
var childsResized = this._repaintChilds();
|
132
|
+
|
133
|
+
// update frame size
|
134
|
+
this._updateSize();
|
135
|
+
|
136
|
+
return this._isResized() || childsResized;
|
137
|
+
};
|
138
|
+
|
139
|
+
/**
|
140
|
+
* Repaint all childs of the panel
|
141
|
+
* @return {boolean} Returns true if the component is resized
|
142
|
+
* @private
|
143
|
+
*/
|
144
|
+
Panel.prototype._repaintChilds = function () {
|
145
|
+
var resized = false;
|
146
|
+
for (var i = 0, ii = this.childs.length; i < ii; i++) {
|
147
|
+
resized = this.childs[i].repaint() || resized;
|
109
148
|
}
|
149
|
+
return resized;
|
150
|
+
};
|
151
|
+
|
152
|
+
/**
|
153
|
+
* Apply the size from options to the panel, and recalculate it's actual size.
|
154
|
+
* @private
|
155
|
+
*/
|
156
|
+
Panel.prototype._updateSize = function () {
|
157
|
+
// apply size
|
158
|
+
this.frame.style.top = util.option.asSize(this.options.top);
|
159
|
+
this.frame.style.bottom = util.option.asSize(this.options.bottom);
|
160
|
+
this.frame.style.left = util.option.asSize(this.options.left);
|
161
|
+
this.frame.style.right = util.option.asSize(this.options.right);
|
162
|
+
this.frame.style.width = util.option.asSize(this.options.width, '100%');
|
163
|
+
this.frame.style.height = util.option.asSize(this.options.height, '');
|
110
164
|
|
111
|
-
|
165
|
+
// get actual size
|
166
|
+
this.top = this.frame.offsetTop;
|
167
|
+
this.left = this.frame.offsetLeft;
|
168
|
+
this.width = this.frame.offsetWidth;
|
169
|
+
this.height = this.frame.offsetHeight;
|
112
170
|
};
|
@@ -10,32 +10,53 @@ function RootPanel(container, options) {
|
|
10
10
|
this.id = util.randomUUID();
|
11
11
|
this.container = container;
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
this.options = options || {};
|
14
|
+
this.defaultOptions = {
|
15
|
+
autoResize: true
|
16
|
+
};
|
17
|
+
|
18
|
+
// create the HTML DOM
|
19
|
+
this._create();
|
20
|
+
|
21
|
+
// attach the root panel to the provided container
|
22
|
+
if (!this.container) throw new Error('Cannot repaint root panel: no container attached');
|
23
|
+
this.container.appendChild(this.getFrame());
|
24
|
+
|
25
|
+
|
26
|
+
this._initWatch();
|
27
|
+
}
|
28
|
+
|
29
|
+
RootPanel.prototype = new Panel();
|
16
30
|
|
17
|
-
|
18
|
-
|
31
|
+
/**
|
32
|
+
* Create the HTML DOM for the root panel
|
33
|
+
*/
|
34
|
+
RootPanel.prototype._create = function _create() {
|
35
|
+
// create frame
|
36
|
+
this.frame = document.createElement('div');
|
37
|
+
|
38
|
+
// create event listeners for all interesting events, these events will be
|
39
|
+
// emitted via emitter
|
40
|
+
this.hammer = Hammer(this.frame, {
|
41
|
+
prevent_default: true
|
42
|
+
});
|
43
|
+
this.listeners = {};
|
44
|
+
|
45
|
+
var me = this;
|
19
46
|
var events = [
|
20
47
|
'touch', 'pinch', 'tap', 'doubletap', 'hold',
|
21
48
|
'dragstart', 'drag', 'dragend',
|
22
49
|
'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is for Firefox
|
23
50
|
];
|
24
|
-
this.listeners = {};
|
25
51
|
events.forEach(function (event) {
|
26
|
-
|
52
|
+
var listener = function () {
|
27
53
|
var args = [event].concat(Array.prototype.slice.call(arguments, 0));
|
28
|
-
me.
|
54
|
+
me.emit.apply(me, args);
|
29
55
|
};
|
56
|
+
me.hammer.on(event, listener);
|
57
|
+
me.listeners[event] = listener;
|
30
58
|
});
|
31
|
-
|
32
|
-
this.options = options || {};
|
33
|
-
this.defaultOptions = {
|
34
|
-
autoResize: true
|
35
|
-
};
|
36
|
-
}
|
37
|
-
|
38
|
-
RootPanel.prototype = new Panel();
|
59
|
+
};
|
39
60
|
|
40
61
|
/**
|
41
62
|
* Set options. Will extend the current options.
|
@@ -47,80 +68,54 @@ RootPanel.prototype = new Panel();
|
|
47
68
|
* {String | Number | function} [height]
|
48
69
|
* {Boolean | function} [autoResize]
|
49
70
|
*/
|
50
|
-
RootPanel.prototype.setOptions =
|
51
|
-
|
52
|
-
|
53
|
-
* Repaint the component
|
54
|
-
* @return {Boolean} changed
|
55
|
-
*/
|
56
|
-
RootPanel.prototype.repaint = function () {
|
57
|
-
var changed = 0,
|
58
|
-
update = util.updateProperty,
|
59
|
-
asSize = util.option.asSize,
|
60
|
-
options = this.options,
|
61
|
-
frame = this.frame;
|
71
|
+
RootPanel.prototype.setOptions = function setOptions(options) {
|
72
|
+
if (options) {
|
73
|
+
util.extend(this.options, options);
|
62
74
|
|
63
|
-
|
64
|
-
frame = document.createElement('div');
|
65
|
-
|
66
|
-
this.frame = frame;
|
67
|
-
|
68
|
-
this._registerListeners();
|
69
|
-
|
70
|
-
changed += 1;
|
71
|
-
}
|
72
|
-
if (!frame.parentNode) {
|
73
|
-
if (!this.container) {
|
74
|
-
throw new Error('Cannot repaint root panel: no container attached');
|
75
|
-
}
|
76
|
-
this.container.appendChild(frame);
|
77
|
-
changed += 1;
|
78
|
-
}
|
75
|
+
this.repaint();
|
79
76
|
|
80
|
-
|
81
|
-
(options.editable ? ' editable' : '');
|
82
|
-
var className = options.className;
|
83
|
-
if (className) {
|
84
|
-
util.addClassName(frame, util.option.asString(className));
|
77
|
+
this._initWatch();
|
85
78
|
}
|
79
|
+
};
|
86
80
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
this._updateWatch();
|
93
|
-
|
94
|
-
return (changed > 0);
|
81
|
+
/**
|
82
|
+
* Get the frame of the root panel
|
83
|
+
*/
|
84
|
+
RootPanel.prototype.getFrame = function getFrame() {
|
85
|
+
return this.frame;
|
95
86
|
};
|
96
87
|
|
97
88
|
/**
|
98
|
-
*
|
99
|
-
* @return {Boolean} resized
|
89
|
+
* Repaint the root panel
|
100
90
|
*/
|
101
|
-
RootPanel.prototype.
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
if (
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
91
|
+
RootPanel.prototype.repaint = function repaint() {
|
92
|
+
// update class name
|
93
|
+
var options = this.options;
|
94
|
+
var editable = options.editable.updateTime || options.editable.updateGroup;
|
95
|
+
var className = 'vis timeline rootpanel ' + options.orientation + (editable ? ' editable' : '');
|
96
|
+
if (options.className) className += ' ' + util.option.asString(className);
|
97
|
+
this.frame.className = className;
|
98
|
+
|
99
|
+
// repaint the child components
|
100
|
+
var childsResized = this._repaintChilds();
|
101
|
+
|
102
|
+
// update frame size
|
103
|
+
this.frame.style.maxHeight = util.option.asSize(this.options.maxHeight, '');
|
104
|
+
this._updateSize();
|
105
|
+
|
106
|
+
// if the root panel or any of its childs is resized, repaint again,
|
107
|
+
// as other components may need to be resized accordingly
|
108
|
+
var resized = this._isResized() || childsResized;
|
109
|
+
if (resized) {
|
110
|
+
setTimeout(this.repaint.bind(this), 0);
|
114
111
|
}
|
115
|
-
|
116
|
-
return (changed > 0);
|
117
112
|
};
|
118
113
|
|
119
114
|
/**
|
120
|
-
*
|
115
|
+
* Initialize watching when option autoResize is true
|
121
116
|
* @private
|
122
117
|
*/
|
123
|
-
RootPanel.prototype.
|
118
|
+
RootPanel.prototype._initWatch = function _initWatch() {
|
124
119
|
var autoResize = this.getOption('autoResize');
|
125
120
|
if (autoResize) {
|
126
121
|
this._watch();
|
@@ -135,12 +130,12 @@ RootPanel.prototype._updateWatch = function () {
|
|
135
130
|
* automatically redraw itself.
|
136
131
|
* @private
|
137
132
|
*/
|
138
|
-
RootPanel.prototype._watch = function () {
|
133
|
+
RootPanel.prototype._watch = function _watch() {
|
139
134
|
var me = this;
|
140
135
|
|
141
136
|
this._unwatch();
|
142
137
|
|
143
|
-
var checkSize = function () {
|
138
|
+
var checkSize = function checkSize() {
|
144
139
|
var autoResize = me.getOption('autoResize');
|
145
140
|
if (!autoResize) {
|
146
141
|
// stop watching when the option autoResize is changed to false
|
@@ -150,9 +145,12 @@ RootPanel.prototype._watch = function () {
|
|
150
145
|
|
151
146
|
if (me.frame) {
|
152
147
|
// check whether the frame is resized
|
153
|
-
if ((me.frame.clientWidth != me.
|
154
|
-
(me.frame.clientHeight != me.
|
155
|
-
me.
|
148
|
+
if ((me.frame.clientWidth != me.lastWidth) ||
|
149
|
+
(me.frame.clientHeight != me.lastHeight)) {
|
150
|
+
me.lastWidth = me.frame.clientWidth;
|
151
|
+
me.lastHeight = me.frame.clientHeight;
|
152
|
+
me.repaint();
|
153
|
+
// TODO: emit a resize event instead?
|
156
154
|
}
|
157
155
|
}
|
158
156
|
};
|
@@ -167,7 +165,7 @@ RootPanel.prototype._watch = function () {
|
|
167
165
|
* Stop watching for a resize of the frame.
|
168
166
|
* @private
|
169
167
|
*/
|
170
|
-
RootPanel.prototype._unwatch = function () {
|
168
|
+
RootPanel.prototype._unwatch = function _unwatch() {
|
171
169
|
if (this.watchTimer) {
|
172
170
|
clearInterval(this.watchTimer);
|
173
171
|
this.watchTimer = undefined;
|
@@ -175,53 +173,3 @@ RootPanel.prototype._unwatch = function () {
|
|
175
173
|
|
176
174
|
// TODO: remove event listener on window.resize
|
177
175
|
};
|
178
|
-
|
179
|
-
/**
|
180
|
-
* Set controller for this component, or remove current controller by passing
|
181
|
-
* null as parameter value.
|
182
|
-
* @param {Controller | null} controller
|
183
|
-
*/
|
184
|
-
RootPanel.prototype.setController = function setController (controller) {
|
185
|
-
this.controller = controller || null;
|
186
|
-
|
187
|
-
if (this.controller) {
|
188
|
-
this._registerListeners();
|
189
|
-
}
|
190
|
-
else {
|
191
|
-
this._unregisterListeners();
|
192
|
-
}
|
193
|
-
};
|
194
|
-
|
195
|
-
/**
|
196
|
-
* Register event emitters emitted by the rootpanel
|
197
|
-
* @private
|
198
|
-
*/
|
199
|
-
RootPanel.prototype._registerListeners = function () {
|
200
|
-
if (this.frame && this.controller && !this.hammer) {
|
201
|
-
this.hammer = Hammer(this.frame, {
|
202
|
-
prevent_default: true
|
203
|
-
});
|
204
|
-
|
205
|
-
for (var event in this.listeners) {
|
206
|
-
if (this.listeners.hasOwnProperty(event)) {
|
207
|
-
this.hammer.on(event, this.listeners[event]);
|
208
|
-
}
|
209
|
-
}
|
210
|
-
}
|
211
|
-
};
|
212
|
-
|
213
|
-
/**
|
214
|
-
* Unregister event emitters from the rootpanel
|
215
|
-
* @private
|
216
|
-
*/
|
217
|
-
RootPanel.prototype._unregisterListeners = function () {
|
218
|
-
if (this.hammer) {
|
219
|
-
for (var event in this.listeners) {
|
220
|
-
if (this.listeners.hasOwnProperty(event)) {
|
221
|
-
this.hammer.off(event, this.listeners[event]);
|
222
|
-
}
|
223
|
-
}
|
224
|
-
|
225
|
-
this.hammer = null;
|
226
|
-
}
|
227
|
-
};
|