@checksub_team/peaks_timeline 1.4.18 → 1.4.21
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 +56 -11
- package/src/main.js +6 -0
- package/src/segment-shape.js +8 -0
- package/src/segment.js +5 -9
- package/src/segments-group.js +66 -10
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);
|
|
@@ -16560,6 +16563,7 @@ module.exports = function (Konva, SegmentMarker) {
|
|
|
16560
16563
|
};
|
|
16561
16564
|
SegmentShape.prototype._onSegmentDragStart = function () {
|
|
16562
16565
|
this._view.setCursor('grab');
|
|
16566
|
+
this._group.checkOverlapping(this._segment, 'overlapping before dragging');
|
|
16563
16567
|
this._mouseDownX = this._view.getPointerPosition().x;
|
|
16564
16568
|
this._initialStartTime = this._segment.startTime;
|
|
16565
16569
|
this._initialStartPixel = this._view.timeToPixels(this._initialStartTime);
|
|
@@ -16569,6 +16573,7 @@ module.exports = function (Konva, SegmentMarker) {
|
|
|
16569
16573
|
};
|
|
16570
16574
|
SegmentShape.prototype._onSegmentDragEnd = function () {
|
|
16571
16575
|
this._view.setCursor('pointer');
|
|
16576
|
+
this._group.checkOverlapping(this._segment, 'overlapping after dragging');
|
|
16572
16577
|
this._peaks.emit('segments.dragend', this._segment);
|
|
16573
16578
|
};
|
|
16574
16579
|
SegmentShape.prototype._onSegmentHandleDrag = function () {
|
|
@@ -16576,10 +16581,12 @@ module.exports = function (Konva, SegmentMarker) {
|
|
|
16576
16581
|
};
|
|
16577
16582
|
SegmentShape.prototype._onSegmentHandleDragStart = function (segmentMarker) {
|
|
16578
16583
|
var startMarker = segmentMarker.isStartMarker();
|
|
16584
|
+
this._group.checkOverlapping(this._segment, 'overlapping before dragging');
|
|
16579
16585
|
this._peaks.emit('segments.dragstart', this._segment, startMarker);
|
|
16580
16586
|
};
|
|
16581
16587
|
SegmentShape.prototype._onSegmentHandleDragEnd = function (segmentMarker) {
|
|
16582
16588
|
var startMarker = segmentMarker.isStartMarker();
|
|
16589
|
+
this._group.checkOverlapping(this._segment, 'overlapping after dragging');
|
|
16583
16590
|
this._peaks.emit('segments.dragend', this._segment, startMarker);
|
|
16584
16591
|
};
|
|
16585
16592
|
SegmentShape.prototype.fitToView = function () {
|
|
@@ -16621,7 +16628,7 @@ module.exports = function (Utils) {
|
|
|
16621
16628
|
}
|
|
16622
16629
|
if (options.endTime < 0) {
|
|
16623
16630
|
options.endTime = 0;
|
|
16624
|
-
} else if (options.endTime
|
|
16631
|
+
} else if (options.endTime - options.startTime < peaks.options.minSegmentSize) {
|
|
16625
16632
|
options.endTime = options.startTime + peaks.options.minSegmentSize;
|
|
16626
16633
|
}
|
|
16627
16634
|
options.startTime = Utils.roundTime(options.startTime);
|
|
@@ -16747,6 +16754,7 @@ module.exports = function (Utils) {
|
|
|
16747
16754
|
};
|
|
16748
16755
|
Utils.extend(opts, options);
|
|
16749
16756
|
validateSegment(this._peaks, opts, 'update()');
|
|
16757
|
+
this._peaks.checkOverlapping(this, 'overlapping before manual update');
|
|
16750
16758
|
this._startTime = opts.startTime;
|
|
16751
16759
|
this._endTime = opts.endTime;
|
|
16752
16760
|
this._labelText = opts.labelText;
|
|
@@ -16755,6 +16763,7 @@ module.exports = function (Utils) {
|
|
|
16755
16763
|
this._handleTextColor = opts.handleTextColor;
|
|
16756
16764
|
this._opacity = opts.opacity;
|
|
16757
16765
|
this._editable = opts.editable;
|
|
16766
|
+
this._peaks.checkOverlapping(this, 'overlapping after manual update');
|
|
16758
16767
|
this._peaks.emit('segment.updated', this);
|
|
16759
16768
|
};
|
|
16760
16769
|
Segment.prototype.isVisible = function (startTime, endTime) {
|
|
@@ -16775,6 +16784,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
16775
16784
|
this._segmentShapes = {};
|
|
16776
16785
|
this._group = new Konva.Group();
|
|
16777
16786
|
this._updatedSegments = [];
|
|
16787
|
+
this._overlappingSegments = [];
|
|
16778
16788
|
this._isMagnetized = false;
|
|
16779
16789
|
this._peaks.on('segment.updated', this._onSegmentsUpdate.bind(this));
|
|
16780
16790
|
this._peaks.on('segments.add', this._onSegmentsAdd.bind(this));
|
|
@@ -16824,6 +16834,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
16824
16834
|
return activeSegment;
|
|
16825
16835
|
};
|
|
16826
16836
|
SegmentsGroup.prototype._onSegmentsUpdate = function (segment) {
|
|
16837
|
+
this._overlappingSegments = [];
|
|
16827
16838
|
if (this._segments[segment.id]) {
|
|
16828
16839
|
var redraw = false;
|
|
16829
16840
|
var segmentShape = this._segmentShapes[segment.id];
|
|
@@ -16849,6 +16860,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
16849
16860
|
SegmentsGroup.prototype._onSegmentUpdated = function () {
|
|
16850
16861
|
this._peaks.emit('segments.updated', this._updatedSegments);
|
|
16851
16862
|
this._updatedSegments = [];
|
|
16863
|
+
this._overlappingSegments = [];
|
|
16852
16864
|
};
|
|
16853
16865
|
SegmentsGroup.prototype._onSegmentsAdd = function (segments) {
|
|
16854
16866
|
var self = this;
|
|
@@ -17046,12 +17058,25 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17046
17058
|
this._draw();
|
|
17047
17059
|
}
|
|
17048
17060
|
};
|
|
17061
|
+
SegmentsGroup.prototype.checkOverlapping = function (segment, message) {
|
|
17062
|
+
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) {
|
|
17063
|
+
if (!this._overlappingSegments.includes(segment.id)) {
|
|
17064
|
+
this._peaks.emit('segments.overlap', {
|
|
17065
|
+
message: message,
|
|
17066
|
+
segment: segment,
|
|
17067
|
+
prevSegment: this._segments[segment.id].prevSegmentId ? this._segments[this._segments[segment.id].prevSegmentId].segment : null,
|
|
17068
|
+
nextSegment: this._segments[segment.id].nextSegmentId ? this._segments[this._segments[segment.id].nextSegmentId].segment : null
|
|
17069
|
+
});
|
|
17070
|
+
this._overlappingSegments.push(segment.id);
|
|
17071
|
+
}
|
|
17072
|
+
}
|
|
17073
|
+
};
|
|
17049
17074
|
SegmentsGroup.prototype.manageCollision = function (segment, newStartX, newEndX) {
|
|
17050
17075
|
var newStartTime = null;
|
|
17051
17076
|
var newEndTime = null;
|
|
17052
17077
|
var startLimited = false;
|
|
17053
17078
|
var endLimited = false;
|
|
17054
|
-
var segmentMagnetThreshold, width;
|
|
17079
|
+
var segmentMagnetThreshold, width, previousSegment, nextSegment, newXs;
|
|
17055
17080
|
if (this._isMagnetized) {
|
|
17056
17081
|
segmentMagnetThreshold = this._view.pixelsToTime(this._peaks.options.segmentMagnetThreshold);
|
|
17057
17082
|
if (newStartX !== null && newEndX !== null) {
|
|
@@ -17061,7 +17086,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17061
17086
|
if (newStartX !== null) {
|
|
17062
17087
|
newStartTime = this._view.pixelsToTime(newStartX);
|
|
17063
17088
|
if (this._segments[segment.id].prevSegmentId) {
|
|
17064
|
-
|
|
17089
|
+
previousSegment = this._segments[this._segments[segment.id].prevSegmentId].segment;
|
|
17065
17090
|
if (this._isMagnetized) {
|
|
17066
17091
|
if (newStartTime < previousSegment.endTime + segmentMagnetThreshold) {
|
|
17067
17092
|
newStartX = this._view.timeToPixels(previousSegment.endTime);
|
|
@@ -17073,14 +17098,20 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17073
17098
|
endX: newEndX
|
|
17074
17099
|
};
|
|
17075
17100
|
}
|
|
17076
|
-
} else if (segment.startTime
|
|
17101
|
+
} else if (segment.startTime >= newStartTime) {
|
|
17077
17102
|
if (newStartTime < previousSegment.endTime) {
|
|
17078
17103
|
if (previousSegment.startTime + previousSegment.minSize > newStartTime) {
|
|
17079
17104
|
newStartTime = previousSegment.startTime + previousSegment.minSize;
|
|
17080
17105
|
startLimited = true;
|
|
17081
17106
|
}
|
|
17082
17107
|
if (previousSegment.endTime !== newStartTime) {
|
|
17083
|
-
previousSegment.
|
|
17108
|
+
newXs = this.manageCollision(previousSegment, this._view.timeToPixels(previousSegment.startTime), this._view.timeToPixels(newStartTime));
|
|
17109
|
+
if (newXs.startX !== null) {
|
|
17110
|
+
previousSegment.startTime = this._view.pixelsToTime(newXs.startX);
|
|
17111
|
+
}
|
|
17112
|
+
if (newXs.endX !== null) {
|
|
17113
|
+
previousSegment.endTime = this._view.pixelsToTime(newXs.endX);
|
|
17114
|
+
}
|
|
17084
17115
|
this._updateSegment(previousSegment);
|
|
17085
17116
|
this.addToUpdatedSegments(previousSegment);
|
|
17086
17117
|
}
|
|
@@ -17096,7 +17127,7 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17096
17127
|
if (newEndX !== null) {
|
|
17097
17128
|
newEndTime = this._view.pixelsToTime(newEndX);
|
|
17098
17129
|
if (this._segments[segment.id].nextSegmentId) {
|
|
17099
|
-
|
|
17130
|
+
nextSegment = this._segments[this._segments[segment.id].nextSegmentId].segment;
|
|
17100
17131
|
if (this._isMagnetized) {
|
|
17101
17132
|
if (newEndTime > nextSegment.startTime - segmentMagnetThreshold) {
|
|
17102
17133
|
newEndX = this._view.timeToPixels(nextSegment.startTime);
|
|
@@ -17108,14 +17139,20 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17108
17139
|
endX: newEndX
|
|
17109
17140
|
};
|
|
17110
17141
|
}
|
|
17111
|
-
} else if (segment.endTime
|
|
17142
|
+
} else if (segment.endTime <= newEndTime) {
|
|
17112
17143
|
if (newEndTime > nextSegment.startTime) {
|
|
17113
17144
|
if (nextSegment.endTime - nextSegment.minSize < newEndTime) {
|
|
17114
17145
|
newEndTime = nextSegment.endTime - nextSegment.minSize;
|
|
17115
17146
|
endLimited = true;
|
|
17116
17147
|
}
|
|
17117
17148
|
if (nextSegment.startTime !== newEndTime) {
|
|
17118
|
-
|
|
17149
|
+
newXs = this.manageCollision(nextSegment, this._view.timeToPixels(newEndTime), this._view.timeToPixels(nextSegment.endTime));
|
|
17150
|
+
if (newXs.startX !== null) {
|
|
17151
|
+
nextSegment.startTime = this._view.pixelsToTime(newXs.startX);
|
|
17152
|
+
}
|
|
17153
|
+
if (newXs.endX !== null) {
|
|
17154
|
+
nextSegment.endTime = this._view.pixelsToTime(newXs.endX);
|
|
17155
|
+
}
|
|
17119
17156
|
this._updateSegment(nextSegment);
|
|
17120
17157
|
this.addToUpdatedSegments(nextSegment);
|
|
17121
17158
|
}
|
|
@@ -17125,7 +17162,15 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17125
17162
|
}
|
|
17126
17163
|
}
|
|
17127
17164
|
if (newStartTime !== null && newEndTime !== null) {
|
|
17128
|
-
if (newEndTime - newStartTime < segment.minSize) {
|
|
17165
|
+
if (Utils.roundTime(newEndTime - newStartTime) < segment.minSize) {
|
|
17166
|
+
if (previousSegment && nextSegment) {
|
|
17167
|
+
if (Utils.roundTime(nextSegment.startTime - previousSegment.endTime) < segment.minSize) {
|
|
17168
|
+
return {
|
|
17169
|
+
startX: null,
|
|
17170
|
+
endX: null
|
|
17171
|
+
};
|
|
17172
|
+
}
|
|
17173
|
+
}
|
|
17129
17174
|
if (startLimited) {
|
|
17130
17175
|
newEndTime = newStartTime + segment.minSize;
|
|
17131
17176
|
} else if (endLimited) {
|
|
@@ -17133,11 +17178,11 @@ module.exports = function (SegmentShape, Utils, Konva) {
|
|
|
17133
17178
|
}
|
|
17134
17179
|
}
|
|
17135
17180
|
} else if (newStartTime !== null) {
|
|
17136
|
-
if (segment.endTime - newStartTime < segment.minSize) {
|
|
17181
|
+
if (Utils.roundTime(segment.endTime - newStartTime) < segment.minSize) {
|
|
17137
17182
|
newStartTime = segment.endTime - segment.minSize;
|
|
17138
17183
|
}
|
|
17139
17184
|
} else if (newEndTime !== null) {
|
|
17140
|
-
if (newEndTime - segment.startTime < segment.minSize) {
|
|
17185
|
+
if (Utils.roundTime(newEndTime - segment.startTime) < segment.minSize) {
|
|
17141
17186
|
newEndTime = segment.startTime + segment.minSize;
|
|
17142
17187
|
}
|
|
17143
17188
|
}
|
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-shape.js
CHANGED
|
@@ -272,6 +272,8 @@ define([
|
|
|
272
272
|
SegmentShape.prototype._onSegmentDragStart = function() {
|
|
273
273
|
this._view.setCursor('grab');
|
|
274
274
|
|
|
275
|
+
this._group.checkOverlapping(this._segment, 'overlapping before dragging');
|
|
276
|
+
|
|
275
277
|
this._mouseDownX = this._view.getPointerPosition().x;
|
|
276
278
|
this._initialStartTime = this._segment.startTime;
|
|
277
279
|
this._initialStartPixel = this._view.timeToPixels(this._initialStartTime);
|
|
@@ -284,6 +286,8 @@ define([
|
|
|
284
286
|
SegmentShape.prototype._onSegmentDragEnd = function() {
|
|
285
287
|
this._view.setCursor('pointer');
|
|
286
288
|
|
|
289
|
+
this._group.checkOverlapping(this._segment, 'overlapping after dragging');
|
|
290
|
+
|
|
287
291
|
this._peaks.emit('segments.dragend', this._segment);
|
|
288
292
|
};
|
|
289
293
|
|
|
@@ -302,6 +306,8 @@ define([
|
|
|
302
306
|
SegmentShape.prototype._onSegmentHandleDragStart = function(segmentMarker) {
|
|
303
307
|
var startMarker = segmentMarker.isStartMarker();
|
|
304
308
|
|
|
309
|
+
this._group.checkOverlapping(this._segment, 'overlapping before dragging');
|
|
310
|
+
|
|
305
311
|
this._peaks.emit('segments.dragstart', this._segment, startMarker);
|
|
306
312
|
};
|
|
307
313
|
|
|
@@ -312,6 +318,8 @@ define([
|
|
|
312
318
|
SegmentShape.prototype._onSegmentHandleDragEnd = function(segmentMarker) {
|
|
313
319
|
var startMarker = segmentMarker.isStartMarker();
|
|
314
320
|
|
|
321
|
+
this._group.checkOverlapping(this._segment, 'overlapping after dragging');
|
|
322
|
+
|
|
315
323
|
this._peaks.emit('segments.dragend', this._segment, startMarker);
|
|
316
324
|
};
|
|
317
325
|
|
package/src/segment.js
CHANGED
|
@@ -24,7 +24,6 @@ define([
|
|
|
24
24
|
|
|
25
25
|
options.startTime = Utils.roundTime(options.startTime);
|
|
26
26
|
options.endTime = Utils.roundTime(options.endTime);
|
|
27
|
-
|
|
28
27
|
if (options.startTime < 0) {
|
|
29
28
|
options.startTime = 0;
|
|
30
29
|
}
|
|
@@ -32,20 +31,13 @@ define([
|
|
|
32
31
|
if (options.endTime < 0) {
|
|
33
32
|
options.endTime = 0;
|
|
34
33
|
}
|
|
35
|
-
else if (options.endTime
|
|
34
|
+
else if (options.endTime - options.startTime < peaks.options.minSegmentSize) {
|
|
36
35
|
options.endTime = options.startTime + peaks.options.minSegmentSize;
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
options.startTime = Utils.roundTime(options.startTime);
|
|
40
39
|
options.endTime = Utils.roundTime(options.endTime);
|
|
41
40
|
|
|
42
|
-
// if (options.endTime <= options.startTime) {
|
|
43
|
-
// // eslint-disable-next-line max-len
|
|
44
|
-
// throw new RangeError(
|
|
45
|
-
// 'peaks.segments.' + context + ': endTime should be greater than startTime'
|
|
46
|
-
// );
|
|
47
|
-
// }
|
|
48
|
-
|
|
49
41
|
if (options.opacity < 0 || options.opacity > 1) {
|
|
50
42
|
// eslint-disable-next-line max-len
|
|
51
43
|
throw new RangeError('peaks.segments.' + context + ': opacity should be between 0 and 1');
|
|
@@ -199,6 +191,8 @@ define([
|
|
|
199
191
|
|
|
200
192
|
validateSegment(this._peaks, opts, 'update()');
|
|
201
193
|
|
|
194
|
+
this._peaks.checkOverlapping(this, 'overlapping before manual update');
|
|
195
|
+
|
|
202
196
|
this._startTime = opts.startTime;
|
|
203
197
|
this._endTime = opts.endTime;
|
|
204
198
|
this._labelText = opts.labelText;
|
|
@@ -208,6 +202,8 @@ define([
|
|
|
208
202
|
this._opacity = opts.opacity;
|
|
209
203
|
this._editable = opts.editable;
|
|
210
204
|
|
|
205
|
+
this._peaks.checkOverlapping(this, 'overlapping after manual update');
|
|
206
|
+
|
|
211
207
|
this._peaks.emit('segment.updated', this);
|
|
212
208
|
};
|
|
213
209
|
|
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) {
|
|
@@ -460,12 +464,31 @@ define([
|
|
|
460
464
|
}
|
|
461
465
|
};
|
|
462
466
|
|
|
467
|
+
SegmentsGroup.prototype.checkOverlapping = function(segment, message) {
|
|
468
|
+
/* eslint-disable max-len */
|
|
469
|
+
if ((this._segments[segment.id].prevSegmentId
|
|
470
|
+
&& this._segments[this._segments[segment.id].prevSegmentId].segment.endTime > segment.startTime)
|
|
471
|
+
|| (this._segments[segment.id].nextSegmentId
|
|
472
|
+
&& this._segments[this._segments[segment.id].nextSegmentId].segment.startTime < segment.endTime)) {
|
|
473
|
+
if (!this._overlappingSegments.includes(segment.id)) {
|
|
474
|
+
this._peaks.emit('segments.overlap', {
|
|
475
|
+
message: message,
|
|
476
|
+
segment: segment,
|
|
477
|
+
prevSegment: this._segments[segment.id].prevSegmentId ? this._segments[this._segments[segment.id].prevSegmentId].segment : null,
|
|
478
|
+
nextSegment: this._segments[segment.id].nextSegmentId ? this._segments[this._segments[segment.id].nextSegmentId].segment : null
|
|
479
|
+
});
|
|
480
|
+
this._overlappingSegments.push(segment.id);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
/* eslint-enable max-len */
|
|
484
|
+
};
|
|
485
|
+
|
|
463
486
|
SegmentsGroup.prototype.manageCollision = function(segment, newStartX, newEndX) {
|
|
464
487
|
var newStartTime = null;
|
|
465
488
|
var newEndTime = null;
|
|
466
489
|
var startLimited = false;
|
|
467
490
|
var endLimited = false;
|
|
468
|
-
var segmentMagnetThreshold, width;
|
|
491
|
+
var segmentMagnetThreshold, width, previousSegment, nextSegment, newXs;
|
|
469
492
|
|
|
470
493
|
if (this._isMagnetized) {
|
|
471
494
|
segmentMagnetThreshold = this._view.pixelsToTime(
|
|
@@ -483,7 +506,7 @@ define([
|
|
|
483
506
|
|
|
484
507
|
if (this._segments[segment.id].prevSegmentId) {
|
|
485
508
|
// there is another segment to the left
|
|
486
|
-
|
|
509
|
+
previousSegment = this._segments[this._segments[segment.id].prevSegmentId].segment;
|
|
487
510
|
|
|
488
511
|
if (this._isMagnetized) {
|
|
489
512
|
if (newStartTime < previousSegment.endTime + segmentMagnetThreshold) {
|
|
@@ -498,7 +521,7 @@ define([
|
|
|
498
521
|
};
|
|
499
522
|
}
|
|
500
523
|
}
|
|
501
|
-
else if (segment.startTime
|
|
524
|
+
else if (segment.startTime >= newStartTime) {
|
|
502
525
|
// startMarker moved to the left
|
|
503
526
|
if (newStartTime < previousSegment.endTime) {
|
|
504
527
|
// there is collision
|
|
@@ -508,7 +531,19 @@ define([
|
|
|
508
531
|
}
|
|
509
532
|
|
|
510
533
|
if (previousSegment.endTime !== newStartTime) {
|
|
511
|
-
|
|
534
|
+
newXs = this.manageCollision(
|
|
535
|
+
previousSegment,
|
|
536
|
+
this._view.timeToPixels(previousSegment.startTime),
|
|
537
|
+
this._view.timeToPixels(newStartTime)
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
if (newXs.startX !== null) {
|
|
541
|
+
previousSegment.startTime = this._view.pixelsToTime(newXs.startX);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
if (newXs.endX !== null) {
|
|
545
|
+
previousSegment.endTime = this._view.pixelsToTime(newXs.endX);
|
|
546
|
+
}
|
|
512
547
|
this._updateSegment(previousSegment);
|
|
513
548
|
this.addToUpdatedSegments(previousSegment);
|
|
514
549
|
}
|
|
@@ -529,7 +564,7 @@ define([
|
|
|
529
564
|
|
|
530
565
|
if (this._segments[segment.id].nextSegmentId) {
|
|
531
566
|
// there is another segment to the right
|
|
532
|
-
|
|
567
|
+
nextSegment = this._segments[this._segments[segment.id].nextSegmentId].segment;
|
|
533
568
|
|
|
534
569
|
if (this._isMagnetized) {
|
|
535
570
|
if (newEndTime > nextSegment.startTime - segmentMagnetThreshold) {
|
|
@@ -544,7 +579,7 @@ define([
|
|
|
544
579
|
};
|
|
545
580
|
}
|
|
546
581
|
}
|
|
547
|
-
else if (segment.endTime
|
|
582
|
+
else if (segment.endTime <= newEndTime) {
|
|
548
583
|
// endMarker moved to the right
|
|
549
584
|
if (newEndTime > nextSegment.startTime) {
|
|
550
585
|
// there is collision
|
|
@@ -554,7 +589,19 @@ define([
|
|
|
554
589
|
}
|
|
555
590
|
|
|
556
591
|
if (nextSegment.startTime !== newEndTime) {
|
|
557
|
-
|
|
592
|
+
newXs = this.manageCollision(
|
|
593
|
+
nextSegment,
|
|
594
|
+
this._view.timeToPixels(newEndTime),
|
|
595
|
+
this._view.timeToPixels(nextSegment.endTime)
|
|
596
|
+
);
|
|
597
|
+
|
|
598
|
+
if (newXs.startX !== null) {
|
|
599
|
+
nextSegment.startTime = this._view.pixelsToTime(newXs.startX);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
if (newXs.endX !== null) {
|
|
603
|
+
nextSegment.endTime = this._view.pixelsToTime(newXs.endX);
|
|
604
|
+
}
|
|
558
605
|
this._updateSegment(nextSegment);
|
|
559
606
|
this.addToUpdatedSegments(nextSegment);
|
|
560
607
|
}
|
|
@@ -568,7 +615,16 @@ define([
|
|
|
568
615
|
|
|
569
616
|
// Check for minimal size of segment
|
|
570
617
|
if (newStartTime !== null && newEndTime !== null) {
|
|
571
|
-
if (newEndTime - newStartTime < segment.minSize) {
|
|
618
|
+
if (Utils.roundTime(newEndTime - newStartTime) < segment.minSize) {
|
|
619
|
+
if (previousSegment && nextSegment) {
|
|
620
|
+
if (Utils.roundTime(nextSegment.startTime - previousSegment.endTime) < segment.minSize) {
|
|
621
|
+
return {
|
|
622
|
+
startX: null,
|
|
623
|
+
endX: null
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
|
|
572
628
|
if (startLimited) {
|
|
573
629
|
newEndTime = newStartTime + segment.minSize;
|
|
574
630
|
}
|
|
@@ -578,12 +634,12 @@ define([
|
|
|
578
634
|
}
|
|
579
635
|
}
|
|
580
636
|
else if (newStartTime !== null) {
|
|
581
|
-
if (segment.endTime - newStartTime < segment.minSize) {
|
|
637
|
+
if (Utils.roundTime(segment.endTime - newStartTime) < segment.minSize) {
|
|
582
638
|
newStartTime = segment.endTime - segment.minSize;
|
|
583
639
|
}
|
|
584
640
|
}
|
|
585
641
|
else if (newEndTime !== null) {
|
|
586
|
-
if (newEndTime - segment.startTime < segment.minSize) {
|
|
642
|
+
if (Utils.roundTime(newEndTime - segment.startTime) < segment.minSize) {
|
|
587
643
|
newEndTime = segment.startTime + segment.minSize;
|
|
588
644
|
}
|
|
589
645
|
}
|