@checksub_team/peaks_timeline
Version:
JavaScript UI component for displaying audio waveforms
95 lines (85 loc) • 2.37 kB
JavaScript
/**
* @file
*
* Factory functions for creating point and segment marker handles.
*
* @module marker-factories
*/
define([
'./default-segment-marker',
'../utils',
'konva'
], function(
DefaultSegmentMarker,
Utils,
Konva) {
'use strict';
/**
* Parameters for the {@link createSegmentMarker} function.
*
* @typedef {Object} CreateSegmentMarkerOptions
* @global
* @property {Object} peaks
* @property {Segment} segment
* @property {Boolean} draggable If true, marker is draggable.
* @property {Boolean} startMarker
* @property {String} color
* @property {Group} group
* @property {String} view
*/
/**
* Creates a left or right side segment marker handle.
*
* @param {CreateSegmentMarkerOptions} options
* @returns {Marker}
*/
function createSegmentMarker(options) {
if (options.view.getName() === 'zoomview') {
return new DefaultSegmentMarker(options);
}
return null;
}
/**
* Parameters for the {@link createSegmentLabel} function.
*
* @typedef {Object} SegmentLabelOptions
* @global
* @property {Segment} segment The {@link Segment} object associated with this
* label.
* @property {String} view The name of the view that the label is being
* created in, either <code>zoomview</code> or <code>overview</code>.
* @property {SegmentsLayer} layer
*/
/**
* Creates a Konva object that renders information about a segment, such as
* its label text.
*
* @param {SegmentLabelOptions} options
* @returns {Konva.Text}
*/
function createSegmentLabel(options) {
return new Konva.Text({
x: options.x,
y: options.y,
width: options.width,
height: options.height,
text: '#'
+ options.segment.relativeId
+ ' '
+ Utils.removeLineBreaks(options.segment.labelText),
textAlign: 'left',
verticalAlign: 'middle',
wrap: 'none',
ellipsis: true,
padding: 5,
fontSize: options.fontSize,
fontFamily: 'Open Sans',
fill: options.segment.textColor,
listening: false
});
}
return {
createSegmentMarker: createSegmentMarker,
createSegmentLabel: createSegmentLabel
};
});