@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@checksub_team/peaks_timeline",
3
- "version": "1.4.19",
3
+ "version": "1.4.20",
4
4
  "description": "JavaScript UI component for displaying audio waveforms",
5
5
  "main": "./peaks.js",
6
6
  "types": "./peaks.js.d.ts",
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
 
@@ -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;