vis-rails 0.0.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -4,17 +4,18 @@
|
|
4
4
|
function Component () {
|
5
5
|
this.id = null;
|
6
6
|
this.parent = null;
|
7
|
-
this.
|
8
|
-
this.controller = null;
|
7
|
+
this.childs = null;
|
9
8
|
this.options = null;
|
10
9
|
|
11
|
-
this.frame = null; // main DOM element
|
12
10
|
this.top = 0;
|
13
11
|
this.left = 0;
|
14
12
|
this.width = 0;
|
15
13
|
this.height = 0;
|
16
14
|
}
|
17
15
|
|
16
|
+
// Turn the Component into an event emitter
|
17
|
+
Emitter(Component.prototype);
|
18
|
+
|
18
19
|
/**
|
19
20
|
* Set parameters for the frame. Parameters will be merged in current parameter
|
20
21
|
* set.
|
@@ -29,10 +30,7 @@ Component.prototype.setOptions = function setOptions(options) {
|
|
29
30
|
if (options) {
|
30
31
|
util.extend(this.options, options);
|
31
32
|
|
32
|
-
|
33
|
-
this.requestRepaint();
|
34
|
-
this.requestReflow();
|
35
|
-
}
|
33
|
+
this.repaint();
|
36
34
|
}
|
37
35
|
};
|
38
36
|
|
@@ -54,46 +52,18 @@ Component.prototype.getOption = function getOption(name) {
|
|
54
52
|
return value;
|
55
53
|
};
|
56
54
|
|
57
|
-
/**
|
58
|
-
* Set controller for this component, or remove current controller by passing
|
59
|
-
* null as parameter value.
|
60
|
-
* @param {Controller | null} controller
|
61
|
-
*/
|
62
|
-
Component.prototype.setController = function setController (controller) {
|
63
|
-
this.controller = controller || null;
|
64
|
-
};
|
65
|
-
|
66
|
-
/**
|
67
|
-
* Get controller of this component
|
68
|
-
* @return {Controller} controller
|
69
|
-
*/
|
70
|
-
Component.prototype.getController = function getController () {
|
71
|
-
return this.controller;
|
72
|
-
};
|
73
|
-
|
74
|
-
/**
|
75
|
-
* Get the container element of the component, which can be used by a child to
|
76
|
-
* add its own widgets. Not all components do have a container for childs, in
|
77
|
-
* that case null is returned.
|
78
|
-
* @returns {HTMLElement | null} container
|
79
|
-
*/
|
80
|
-
// TODO: get rid of the getContainer and getFrame methods, provide these via the options
|
81
|
-
Component.prototype.getContainer = function getContainer() {
|
82
|
-
// should be implemented by the component
|
83
|
-
return null;
|
84
|
-
};
|
85
|
-
|
86
55
|
/**
|
87
56
|
* Get the frame element of the component, the outer HTML DOM element.
|
88
57
|
* @returns {HTMLElement | null} frame
|
89
58
|
*/
|
90
59
|
Component.prototype.getFrame = function getFrame() {
|
91
|
-
|
60
|
+
// should be implemented by the component
|
61
|
+
return null;
|
92
62
|
};
|
93
63
|
|
94
64
|
/**
|
95
65
|
* Repaint the component
|
96
|
-
* @return {
|
66
|
+
* @return {boolean} Returns true if the component is resized
|
97
67
|
*/
|
98
68
|
Component.prototype.repaint = function repaint() {
|
99
69
|
// should be implemented by the component
|
@@ -101,64 +71,16 @@ Component.prototype.repaint = function repaint() {
|
|
101
71
|
};
|
102
72
|
|
103
73
|
/**
|
104
|
-
*
|
105
|
-
*
|
74
|
+
* Test whether the component is resized since the last time _isResized() was
|
75
|
+
* called.
|
76
|
+
* @return {Boolean} Returns true if the component is resized
|
77
|
+
* @protected
|
106
78
|
*/
|
107
|
-
Component.prototype.
|
108
|
-
|
109
|
-
return false;
|
110
|
-
};
|
79
|
+
Component.prototype._isResized = function _isResized() {
|
80
|
+
var resized = (this._previousWidth !== this.width || this._previousHeight !== this.height);
|
111
81
|
|
112
|
-
|
113
|
-
|
114
|
-
* @return {Boolean} changed
|
115
|
-
*/
|
116
|
-
Component.prototype.hide = function hide() {
|
117
|
-
if (this.frame && this.frame.parentNode) {
|
118
|
-
this.frame.parentNode.removeChild(this.frame);
|
119
|
-
return true;
|
120
|
-
}
|
121
|
-
else {
|
122
|
-
return false;
|
123
|
-
}
|
124
|
-
};
|
125
|
-
|
126
|
-
/**
|
127
|
-
* Show the component in the DOM (when not already visible).
|
128
|
-
* A repaint will be executed when the component is not visible
|
129
|
-
* @return {Boolean} changed
|
130
|
-
*/
|
131
|
-
Component.prototype.show = function show() {
|
132
|
-
if (!this.frame || !this.frame.parentNode) {
|
133
|
-
return this.repaint();
|
134
|
-
}
|
135
|
-
else {
|
136
|
-
return false;
|
137
|
-
}
|
138
|
-
};
|
82
|
+
this._previousWidth = this.width;
|
83
|
+
this._previousHeight = this.height;
|
139
84
|
|
140
|
-
|
141
|
-
* Request a repaint. The controller will schedule a repaint
|
142
|
-
*/
|
143
|
-
Component.prototype.requestRepaint = function requestRepaint() {
|
144
|
-
if (this.controller) {
|
145
|
-
this.controller.emit('request-repaint');
|
146
|
-
}
|
147
|
-
else {
|
148
|
-
throw new Error('Cannot request a repaint: no controller configured');
|
149
|
-
// TODO: just do a repaint when no parent is configured?
|
150
|
-
}
|
151
|
-
};
|
152
|
-
|
153
|
-
/**
|
154
|
-
* Request a reflow. The controller will schedule a reflow
|
155
|
-
*/
|
156
|
-
Component.prototype.requestReflow = function requestReflow() {
|
157
|
-
if (this.controller) {
|
158
|
-
this.controller.emit('request-reflow');
|
159
|
-
}
|
160
|
-
else {
|
161
|
-
throw new Error('Cannot request a reflow: no controller configured');
|
162
|
-
// TODO: just do a reflow when no parent is configured?
|
163
|
-
}
|
85
|
+
return resized;
|
164
86
|
};
|
@@ -1,23 +1,22 @@
|
|
1
1
|
/**
|
2
2
|
* A current time bar
|
3
|
-
* @param {
|
4
|
-
* @param {Component[]} [depends] Components on which this components depends
|
5
|
-
* (except for the parent)
|
3
|
+
* @param {Range} range
|
6
4
|
* @param {Object} [options] Available parameters:
|
7
5
|
* {Boolean} [showCurrentTime]
|
8
6
|
* @constructor CurrentTime
|
9
7
|
* @extends Component
|
10
8
|
*/
|
11
9
|
|
12
|
-
function CurrentTime (
|
10
|
+
function CurrentTime (range, options) {
|
13
11
|
this.id = util.randomUUID();
|
14
|
-
this.parent = parent;
|
15
|
-
this.depends = depends;
|
16
12
|
|
13
|
+
this.range = range;
|
17
14
|
this.options = options || {};
|
18
15
|
this.defaultOptions = {
|
19
16
|
showCurrentTime: false
|
20
17
|
};
|
18
|
+
|
19
|
+
this._create();
|
21
20
|
}
|
22
21
|
|
23
22
|
CurrentTime.prototype = new Component();
|
@@ -25,77 +24,73 @@ CurrentTime.prototype = new Component();
|
|
25
24
|
CurrentTime.prototype.setOptions = Component.prototype.setOptions;
|
26
25
|
|
27
26
|
/**
|
28
|
-
*
|
29
|
-
*
|
30
|
-
* @returns {HTMLElement} container
|
27
|
+
* Create the HTML DOM for the current time bar
|
28
|
+
* @private
|
31
29
|
*/
|
32
|
-
CurrentTime.prototype.
|
33
|
-
|
30
|
+
CurrentTime.prototype._create = function _create () {
|
31
|
+
var bar = document.createElement('div');
|
32
|
+
bar.className = 'currenttime';
|
33
|
+
bar.style.position = 'absolute';
|
34
|
+
bar.style.top = '0px';
|
35
|
+
bar.style.height = '100%';
|
36
|
+
|
37
|
+
this.bar = bar;
|
38
|
+
};
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Get the frame element of the current time bar
|
42
|
+
* @returns {HTMLElement} frame
|
43
|
+
*/
|
44
|
+
CurrentTime.prototype.getFrame = function getFrame() {
|
45
|
+
return this.bar;
|
34
46
|
};
|
35
47
|
|
36
48
|
/**
|
37
49
|
* Repaint the component
|
38
|
-
* @return {
|
50
|
+
* @return {boolean} Returns true if the component is resized
|
39
51
|
*/
|
40
|
-
CurrentTime.prototype.repaint = function () {
|
41
|
-
var
|
42
|
-
parent = this.parent,
|
43
|
-
parentContainer = parent.parent.getContainer();
|
52
|
+
CurrentTime.prototype.repaint = function repaint() {
|
53
|
+
var parent = this.parent;
|
44
54
|
|
45
|
-
|
46
|
-
|
47
|
-
}
|
55
|
+
var now = new Date();
|
56
|
+
var x = this.options.toScreen(now);
|
48
57
|
|
49
|
-
|
50
|
-
|
51
|
-
}
|
58
|
+
this.bar.style.left = x + 'px';
|
59
|
+
this.bar.title = 'Current time: ' + now;
|
52
60
|
|
53
|
-
|
54
|
-
|
55
|
-
parentContainer.removeChild(bar);
|
56
|
-
delete this.frame;
|
57
|
-
}
|
61
|
+
return false;
|
62
|
+
};
|
58
63
|
|
59
|
-
|
60
|
-
|
64
|
+
/**
|
65
|
+
* Start auto refreshing the current time bar
|
66
|
+
*/
|
67
|
+
CurrentTime.prototype.start = function start() {
|
68
|
+
var me = this;
|
61
69
|
|
62
|
-
|
63
|
-
|
64
|
-
bar.className = 'currenttime';
|
65
|
-
bar.style.position = 'absolute';
|
66
|
-
bar.style.top = '0px';
|
67
|
-
bar.style.height = '100%';
|
70
|
+
function update () {
|
71
|
+
me.stop();
|
68
72
|
|
69
|
-
|
70
|
-
|
71
|
-
|
73
|
+
// determine interval to refresh
|
74
|
+
var scale = me.range.conversion(me.parent.width).scale;
|
75
|
+
var interval = 1 / scale / 10;
|
76
|
+
if (interval < 30) interval = 30;
|
77
|
+
if (interval > 1000) interval = 1000;
|
72
78
|
|
73
|
-
|
74
|
-
parent._updateConversion();
|
75
|
-
}
|
79
|
+
me.repaint();
|
76
80
|
|
77
|
-
|
78
|
-
|
81
|
+
// start a timer to adjust for the new time
|
82
|
+
me.currentTimeTimer = setTimeout(update, interval);
|
83
|
+
}
|
79
84
|
|
80
|
-
|
81
|
-
|
85
|
+
update();
|
86
|
+
};
|
82
87
|
|
83
|
-
|
88
|
+
/**
|
89
|
+
* Stop auto refreshing the current time bar
|
90
|
+
*/
|
91
|
+
CurrentTime.prototype.stop = function stop() {
|
84
92
|
if (this.currentTimeTimer !== undefined) {
|
85
93
|
clearTimeout(this.currentTimeTimer);
|
86
94
|
delete this.currentTimeTimer;
|
87
95
|
}
|
88
|
-
|
89
|
-
var timeline = this;
|
90
|
-
var interval = 1 / parent.conversion.scale / 2;
|
91
|
-
|
92
|
-
if (interval < 30) {
|
93
|
-
interval = 30;
|
94
|
-
}
|
95
|
-
|
96
|
-
this.currentTimeTimer = setTimeout(function() {
|
97
|
-
timeline.repaint();
|
98
|
-
}, interval);
|
99
|
-
|
100
|
-
return false;
|
101
96
|
};
|
@@ -1,18 +1,13 @@
|
|
1
1
|
/**
|
2
2
|
* A custom time bar
|
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
|
* {Boolean} [showCustomTime]
|
8
5
|
* @constructor CustomTime
|
9
6
|
* @extends Component
|
10
7
|
*/
|
11
8
|
|
12
|
-
function CustomTime (
|
9
|
+
function CustomTime (options) {
|
13
10
|
this.id = util.randomUUID();
|
14
|
-
this.parent = parent;
|
15
|
-
this.depends = depends;
|
16
11
|
|
17
12
|
this.options = options || {};
|
18
13
|
this.defaultOptions = {
|
@@ -21,85 +16,61 @@ function CustomTime (parent, depends, options) {
|
|
21
16
|
|
22
17
|
this.customTime = new Date();
|
23
18
|
this.eventParams = {}; // stores state parameters while dragging the bar
|
19
|
+
|
20
|
+
// create the DOM
|
21
|
+
this._create();
|
24
22
|
}
|
25
23
|
|
26
24
|
CustomTime.prototype = new Component();
|
27
25
|
|
28
|
-
Emitter(CustomTime.prototype);
|
29
|
-
|
30
26
|
CustomTime.prototype.setOptions = Component.prototype.setOptions;
|
31
27
|
|
32
28
|
/**
|
33
|
-
*
|
34
|
-
*
|
35
|
-
|
29
|
+
* Create the DOM for the custom time
|
30
|
+
* @private
|
31
|
+
*/
|
32
|
+
CustomTime.prototype._create = function _create () {
|
33
|
+
var bar = document.createElement('div');
|
34
|
+
bar.className = 'customtime';
|
35
|
+
bar.style.position = 'absolute';
|
36
|
+
bar.style.top = '0px';
|
37
|
+
bar.style.height = '100%';
|
38
|
+
this.bar = bar;
|
39
|
+
|
40
|
+
var drag = document.createElement('div');
|
41
|
+
drag.style.position = 'relative';
|
42
|
+
drag.style.top = '0px';
|
43
|
+
drag.style.left = '-10px';
|
44
|
+
drag.style.height = '100%';
|
45
|
+
drag.style.width = '20px';
|
46
|
+
bar.appendChild(drag);
|
47
|
+
|
48
|
+
// attach event listeners
|
49
|
+
this.hammer = Hammer(bar, {
|
50
|
+
prevent_default: true
|
51
|
+
});
|
52
|
+
this.hammer.on('dragstart', this._onDragStart.bind(this));
|
53
|
+
this.hammer.on('drag', this._onDrag.bind(this));
|
54
|
+
this.hammer.on('dragend', this._onDragEnd.bind(this));
|
55
|
+
};
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Get the frame element of the custom time bar
|
59
|
+
* @returns {HTMLElement} frame
|
36
60
|
*/
|
37
|
-
CustomTime.prototype.
|
38
|
-
return this.
|
61
|
+
CustomTime.prototype.getFrame = function getFrame() {
|
62
|
+
return this.bar;
|
39
63
|
};
|
40
64
|
|
41
65
|
/**
|
42
66
|
* Repaint the component
|
43
|
-
* @return {
|
67
|
+
* @return {boolean} Returns true if the component is resized
|
44
68
|
*/
|
45
69
|
CustomTime.prototype.repaint = function () {
|
46
|
-
var
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
throw new Error('Cannot repaint bar: no parent attached');
|
51
|
-
}
|
52
|
-
|
53
|
-
var parentContainer = parent.parent.getContainer();
|
54
|
-
if (!parentContainer) {
|
55
|
-
throw new Error('Cannot repaint bar: parent has no container element');
|
56
|
-
}
|
57
|
-
|
58
|
-
if (!this.getOption('showCustomTime')) {
|
59
|
-
if (bar) {
|
60
|
-
parentContainer.removeChild(bar);
|
61
|
-
delete this.frame;
|
62
|
-
}
|
63
|
-
|
64
|
-
return false;
|
65
|
-
}
|
66
|
-
|
67
|
-
if (!bar) {
|
68
|
-
bar = document.createElement('div');
|
69
|
-
bar.className = 'customtime';
|
70
|
-
bar.style.position = 'absolute';
|
71
|
-
bar.style.top = '0px';
|
72
|
-
bar.style.height = '100%';
|
73
|
-
|
74
|
-
parentContainer.appendChild(bar);
|
75
|
-
|
76
|
-
var drag = document.createElement('div');
|
77
|
-
drag.style.position = 'relative';
|
78
|
-
drag.style.top = '0px';
|
79
|
-
drag.style.left = '-10px';
|
80
|
-
drag.style.height = '100%';
|
81
|
-
drag.style.width = '20px';
|
82
|
-
bar.appendChild(drag);
|
83
|
-
|
84
|
-
this.frame = bar;
|
85
|
-
|
86
|
-
// attach event listeners
|
87
|
-
this.hammer = Hammer(bar, {
|
88
|
-
prevent_default: true
|
89
|
-
});
|
90
|
-
this.hammer.on('dragstart', this._onDragStart.bind(this));
|
91
|
-
this.hammer.on('drag', this._onDrag.bind(this));
|
92
|
-
this.hammer.on('dragend', this._onDragEnd.bind(this));
|
93
|
-
}
|
94
|
-
|
95
|
-
if (!parent.conversion) {
|
96
|
-
parent._updateConversion();
|
97
|
-
}
|
98
|
-
|
99
|
-
var x = parent.toScreen(this.customTime);
|
100
|
-
|
101
|
-
bar.style.left = x + 'px';
|
102
|
-
bar.title = 'Time: ' + this.customTime;
|
70
|
+
var x = this.options.toScreen(this.customTime);
|
71
|
+
|
72
|
+
this.bar.style.left = x + 'px';
|
73
|
+
this.bar.title = 'Time: ' + this.customTime;
|
103
74
|
|
104
75
|
return false;
|
105
76
|
};
|
@@ -127,6 +98,7 @@ CustomTime.prototype.getCustomTime = function() {
|
|
127
98
|
* @private
|
128
99
|
*/
|
129
100
|
CustomTime.prototype._onDragStart = function(event) {
|
101
|
+
this.eventParams.dragging = true;
|
130
102
|
this.eventParams.customTime = this.customTime;
|
131
103
|
|
132
104
|
event.stopPropagation();
|
@@ -139,18 +111,18 @@ CustomTime.prototype._onDragStart = function(event) {
|
|
139
111
|
* @private
|
140
112
|
*/
|
141
113
|
CustomTime.prototype._onDrag = function (event) {
|
114
|
+
if (!this.eventParams.dragging) return;
|
115
|
+
|
142
116
|
var deltaX = event.gesture.deltaX,
|
143
|
-
x = this.
|
144
|
-
time = this.
|
117
|
+
x = this.options.toScreen(this.eventParams.customTime) + deltaX,
|
118
|
+
time = this.options.toTime(x);
|
145
119
|
|
146
120
|
this.setCustomTime(time);
|
147
121
|
|
148
122
|
// fire a timechange event
|
149
|
-
|
150
|
-
this.
|
151
|
-
|
152
|
-
})
|
153
|
-
}
|
123
|
+
this.emit('timechange', {
|
124
|
+
time: new Date(this.customTime.valueOf())
|
125
|
+
});
|
154
126
|
|
155
127
|
event.stopPropagation();
|
156
128
|
event.preventDefault();
|
@@ -162,12 +134,12 @@ CustomTime.prototype._onDrag = function (event) {
|
|
162
134
|
* @private
|
163
135
|
*/
|
164
136
|
CustomTime.prototype._onDragEnd = function (event) {
|
137
|
+
if (!this.eventParams.dragging) return;
|
138
|
+
|
165
139
|
// fire a timechanged event
|
166
|
-
|
167
|
-
this.
|
168
|
-
|
169
|
-
})
|
170
|
-
}
|
140
|
+
this.emit('timechanged', {
|
141
|
+
time: new Date(this.customTime.valueOf())
|
142
|
+
});
|
171
143
|
|
172
144
|
event.stopPropagation();
|
173
145
|
event.preventDefault();
|