@checksub_team/peaks_timeline 1.4.19 → 1.4.20
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.
- package/package.json +1 -1
- package/peaks.js +23 -0
- package/src/main.js +6 -0
- package/src/segment.js +4 -0
- package/src/segments-group.js +29 -0
package/package.json
CHANGED
package/peaks.js
CHANGED
|
@@ -15561,6 +15561,9 @@ module.exports = function (Colors, EventEmitter, TimelineSegments, TimelineSourc
|
|
|
15561
15561
|
Peaks.prototype.allowInteractions = function (forSources, forSegments) {
|
|
15562
15562
|
return this.view.allowInteractions(forSources, forSegments);
|
|
15563
15563
|
};
|
|
15564
|
+
Peaks.prototype.checkOverlapping = function (segment, message) {
|
|
15565
|
+
return this.view.getSegmentsGroup().checkOverlapping(segment, message);
|
|
15566
|
+
};
|
|
15564
15567
|
Peaks.prototype._addWindowResizeHandler = function () {
|
|
15565
15568
|
this._onResize = this._onResize.bind(this);
|
|
15566
15569
|
window.addEventListener('resize', this._onResize);
|
|
@@ -16747,6 +16750,7 @@ module.exports = function (Utils) {
|
|
|
16747
16750
|
};
|
|
16748
16751
|
Utils.extend(opts, options);
|
|
16749
16752
|
validateSegment(this._peaks, opts, 'update()');
|
|
16753
|
+
this._peaks.checkOverlapping(this, 'overlapping before manual update');
|
|
16750
16754
|
this._startTime = opts.startTime;
|
|
16751
16755
|
this._endTime = opts.endTime;
|
|
16752
16756
|
this._labelText = opts.labelText;
|
|
@@ -16755,6 +16759,7 @@ module.exports = function (Utils) {
|
|
|
16755
16759
|
this._handleTextColor = opts.handleTextColor;
|
|
16756
16760
|
this._opacity = opts.opacity;
|
|
16757
16761
|
this._editable = opts.editable;
|
|
16762
|
+
this._peaks.checkOverlapping(this, 'overlapping after manual update');
|
|
16758
16763
|
this._peaks.emit('segment.updated', this);
|
|
16759
16764
|
};
|
|
16760
16765
|
Segment.prototype.isVisible = function (startTime, endTime) {
|
|
@@ -16775,6 +16780,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
16775
16780
|
this._segmentShapes = {};
|
|
16776
16781
|
this._group = new Konva.Group();
|
|
16777
16782
|
this._updatedSegments = [];
|
|
16783
|
+
this._overlappingSegments = [];
|
|
16778
16784
|
this._isMagnetized = false;
|
|
16779
16785
|
this._peaks.on('segment.updated', this._onSegmentsUpdate.bind(this));
|
|
16780
16786
|
this._peaks.on('segments.add', this._onSegmentsAdd.bind(this));
|
|
@@ -16824,6 +16830,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
16824
16830
|
return activeSegment;
|
|
16825
16831
|
};
|
|
16826
16832
|
SegmentsGroup.prototype._onSegmentsUpdate = function (segment) {
|
|
16833
|
+
this._overlappingSegments = [];
|
|
16827
16834
|
if (this._segments[segment.id]) {
|
|
16828
16835
|
var redraw = false;
|
|
16829
16836
|
var segmentShape = this._segmentShapes[segment.id];
|
|
@@ -16849,6 +16856,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
16849
16856
|
SegmentsGroup.prototype._onSegmentUpdated = function () {
|
|
16850
16857
|
this._peaks.emit('segments.updated', this._updatedSegments);
|
|
16851
16858
|
this._updatedSegments = [];
|
|
16859
|
+
this._overlappingSegments = [];
|
|
16852
16860
|
};
|
|
16853
16861
|
SegmentsGroup.prototype._onSegmentsAdd = function (segments) {
|
|
16854
16862
|
var self = this;
|
|
@@ -17033,6 +17041,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17033
17041
|
}
|
|
17034
17042
|
};
|
|
17035
17043
|
SegmentsGroup.prototype.updateSegment = function (segment, newStartX, newEndX) {
|
|
17044
|
+
this.checkOverlapping(segment, 'overlapping before dragging');
|
|
17036
17045
|
var newXs = this.manageCollision(segment, newStartX, newEndX);
|
|
17037
17046
|
if (newXs.startX !== null) {
|
|
17038
17047
|
segment.startTime = this._view.pixelsToTime(newXs.startX);
|
|
@@ -17041,11 +17050,25 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17041
17050
|
segment.endTime = this._view.pixelsToTime(newXs.endX);
|
|
17042
17051
|
}
|
|
17043
17052
|
if (newXs) {
|
|
17053
|
+
this.checkOverlapping(segment, 'overlapping after dragging');
|
|
17044
17054
|
this._updateSegment(segment);
|
|
17045
17055
|
this.addToUpdatedSegments(segment);
|
|
17046
17056
|
this._draw();
|
|
17047
17057
|
}
|
|
17048
17058
|
};
|
|
17059
|
+
SegmentsGroup.prototype.checkOverlapping = function (segment, message) {
|
|
17060
|
+
if (this._segments[segment.id].prevSegmentId && this._segments[this._segments[segment.id].prevSegmentId].segment.endTime > segment.startTime || this._segments[segment.id].nextSegmentId && this._segments[this._segments[segment.id].nextSegmentId].segment.startTime < segment.endTime) {
|
|
17061
|
+
if (!this._overlappingSegments.includes(segment.id)) {
|
|
17062
|
+
this._peaks.emit('segments.overlap', {
|
|
17063
|
+
message: message,
|
|
17064
|
+
segment: segment,
|
|
17065
|
+
prevSegment: this._segments[segment.id].prevSegmentId ? this._segments[this._segments[segment.id].prevSegmentId].segment : null,
|
|
17066
|
+
nextSegment: this._segments[segment.id].nextSegmentId ? this._segments[this._segments[segment.id].nextSegmentId].segment : null
|
|
17067
|
+
});
|
|
17068
|
+
this._overlappingSegments.push(segment.id);
|
|
17069
|
+
}
|
|
17070
|
+
}
|
|
17071
|
+
};
|
|
17049
17072
|
SegmentsGroup.prototype.manageCollision = function (segment, newStartX, newEndX) {
|
|
17050
17073
|
var newStartTime = null;
|
|
17051
17074
|
var newEndTime = null;
|
package/src/main.js
CHANGED
|
@@ -622,6 +622,12 @@ define([
|
|
|
622
622
|
.allowInteractions(forSources, forSegments);
|
|
623
623
|
};
|
|
624
624
|
|
|
625
|
+
Peaks.prototype.checkOverlapping = function(segment, message) {
|
|
626
|
+
return this.view
|
|
627
|
+
.getSegmentsGroup()
|
|
628
|
+
.checkOverlapping(segment, message);
|
|
629
|
+
};
|
|
630
|
+
|
|
625
631
|
Peaks.prototype._addWindowResizeHandler = function() {
|
|
626
632
|
this._onResize = this._onResize.bind(this);
|
|
627
633
|
window.addEventListener('resize', this._onResize);
|
package/src/segment.js
CHANGED
|
@@ -199,6 +199,8 @@ define([
|
|
|
199
199
|
|
|
200
200
|
validateSegment(this._peaks, opts, 'update()');
|
|
201
201
|
|
|
202
|
+
this._peaks.checkOverlapping(this, 'overlapping before manual update');
|
|
203
|
+
|
|
202
204
|
this._startTime = opts.startTime;
|
|
203
205
|
this._endTime = opts.endTime;
|
|
204
206
|
this._labelText = opts.labelText;
|
|
@@ -208,6 +210,8 @@ define([
|
|
|
208
210
|
this._opacity = opts.opacity;
|
|
209
211
|
this._editable = opts.editable;
|
|
210
212
|
|
|
213
|
+
this._peaks.checkOverlapping(this, 'overlapping after manual update');
|
|
214
|
+
|
|
211
215
|
this._peaks.emit('segment.updated', this);
|
|
212
216
|
};
|
|
213
217
|
|
package/src/segments-group.js
CHANGED
|
@@ -41,6 +41,7 @@ define([
|
|
|
41
41
|
this._group = new Konva.Group();
|
|
42
42
|
|
|
43
43
|
this._updatedSegments = [];
|
|
44
|
+
this._overlappingSegments = [];
|
|
44
45
|
|
|
45
46
|
this._isMagnetized = false;
|
|
46
47
|
|
|
@@ -113,6 +114,8 @@ define([
|
|
|
113
114
|
};
|
|
114
115
|
|
|
115
116
|
SegmentsGroup.prototype._onSegmentsUpdate = function(segment) {
|
|
117
|
+
this._overlappingSegments = [];
|
|
118
|
+
|
|
116
119
|
if (this._segments[segment.id]) {
|
|
117
120
|
var redraw = false;
|
|
118
121
|
var segmentShape = this._segmentShapes[segment.id];
|
|
@@ -143,6 +146,7 @@ define([
|
|
|
143
146
|
SegmentsGroup.prototype._onSegmentUpdated = function() {
|
|
144
147
|
this._peaks.emit('segments.updated', this._updatedSegments);
|
|
145
148
|
this._updatedSegments = [];
|
|
149
|
+
this._overlappingSegments = [];
|
|
146
150
|
};
|
|
147
151
|
|
|
148
152
|
SegmentsGroup.prototype._onSegmentsAdd = function(segments) {
|
|
@@ -441,6 +445,8 @@ define([
|
|
|
441
445
|
};
|
|
442
446
|
|
|
443
447
|
SegmentsGroup.prototype.updateSegment = function(segment, newStartX, newEndX) {
|
|
448
|
+
this.checkOverlapping(segment, 'overlapping before dragging');
|
|
449
|
+
|
|
444
450
|
var newXs = this.manageCollision(segment, newStartX, newEndX);
|
|
445
451
|
|
|
446
452
|
if (newXs.startX !== null) {
|
|
@@ -452,6 +458,8 @@ define([
|
|
|
452
458
|
}
|
|
453
459
|
|
|
454
460
|
if (newXs) {
|
|
461
|
+
this.checkOverlapping(segment, 'overlapping after dragging');
|
|
462
|
+
|
|
455
463
|
this._updateSegment(segment);
|
|
456
464
|
|
|
457
465
|
this.addToUpdatedSegments(segment);
|
|
@@ -460,6 +468,27 @@ define([
|
|
|
460
468
|
}
|
|
461
469
|
};
|
|
462
470
|
|
|
471
|
+
SegmentsGroup.prototype.checkOverlapping = function(segment, message) {
|
|
472
|
+
/* eslint-disable max-len */
|
|
473
|
+
if ((this._segments[segment.id].prevSegmentId
|
|
474
|
+
&& this._segments[this._segments[segment.id].prevSegmentId].segment.endTime > segment.startTime)
|
|
475
|
+
|| (this._segments[segment.id].nextSegmentId
|
|
476
|
+
&& this._segments[this._segments[segment.id].nextSegmentId].segment.startTime < segment.endTime)) {
|
|
477
|
+
|
|
478
|
+
if (!this._overlappingSegments.includes(segment.id)) {
|
|
479
|
+
this._peaks.emit('segments.overlap', {
|
|
480
|
+
message: message,
|
|
481
|
+
segment: segment,
|
|
482
|
+
prevSegment: this._segments[segment.id].prevSegmentId ? this._segments[this._segments[segment.id].prevSegmentId].segment : null,
|
|
483
|
+
nextSegment: this._segments[segment.id].nextSegmentId ? this._segments[this._segments[segment.id].nextSegmentId].segment : null
|
|
484
|
+
});
|
|
485
|
+
this._overlappingSegments.push(segment.id);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
/* eslint-enable max-len */
|
|
490
|
+
};
|
|
491
|
+
|
|
463
492
|
SegmentsGroup.prototype.manageCollision = function(segment, newStartX, newEndX) {
|
|
464
493
|
var newStartTime = null;
|
|
465
494
|
var newEndTime = null;
|