wavesurfer.js 5.2.0 → 6.0.0

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.
Files changed (58) hide show
  1. package/CHANGES.md +22 -0
  2. package/README.md +10 -0
  3. package/dist/plugin/wavesurfer.cursor.js +52 -50
  4. package/dist/plugin/wavesurfer.cursor.js.map +1 -1
  5. package/dist/plugin/wavesurfer.cursor.min.js +2 -2
  6. package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
  7. package/dist/plugin/wavesurfer.elan.js +9 -6
  8. package/dist/plugin/wavesurfer.elan.js.map +1 -1
  9. package/dist/plugin/wavesurfer.elan.min.js +2 -2
  10. package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
  11. package/dist/plugin/wavesurfer.markers.js +141 -25
  12. package/dist/plugin/wavesurfer.markers.js.map +1 -1
  13. package/dist/plugin/wavesurfer.markers.min.js +2 -2
  14. package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
  15. package/dist/plugin/wavesurfer.mediasession.js +5 -5
  16. package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
  17. package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
  18. package/dist/plugin/wavesurfer.microphone.js +4 -4
  19. package/dist/plugin/wavesurfer.microphone.min.js +2 -2
  20. package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
  21. package/dist/plugin/wavesurfer.minimap.js +25 -22
  22. package/dist/plugin/wavesurfer.minimap.js.map +1 -1
  23. package/dist/plugin/wavesurfer.minimap.min.js +2 -2
  24. package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
  25. package/dist/plugin/wavesurfer.playhead.js +4 -4
  26. package/dist/plugin/wavesurfer.playhead.min.js +2 -2
  27. package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
  28. package/dist/plugin/wavesurfer.regions.js +53 -16
  29. package/dist/plugin/wavesurfer.regions.js.map +1 -1
  30. package/dist/plugin/wavesurfer.regions.min.js +2 -2
  31. package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
  32. package/dist/plugin/wavesurfer.spectrogram.js +70 -57
  33. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  34. package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
  35. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  36. package/dist/plugin/wavesurfer.timeline.js +39 -44
  37. package/dist/plugin/wavesurfer.timeline.js.map +1 -1
  38. package/dist/plugin/wavesurfer.timeline.min.js +2 -2
  39. package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
  40. package/dist/wavesurfer-html-init.js +5 -5
  41. package/dist/wavesurfer-html-init.min.js +2 -2
  42. package/dist/wavesurfer-html-init.min.js.map +1 -1
  43. package/dist/wavesurfer.js +209 -121
  44. package/dist/wavesurfer.js.map +1 -1
  45. package/dist/wavesurfer.min.js +2 -2
  46. package/dist/wavesurfer.min.js.map +1 -1
  47. package/package.json +23 -23
  48. package/src/drawer.canvasentry.js +30 -6
  49. package/src/drawer.js +1 -0
  50. package/src/drawer.multicanvas.js +19 -8
  51. package/src/mediaelement.js +1 -1
  52. package/src/plugin/cursor/index.js +68 -70
  53. package/src/plugin/markers/index.js +112 -23
  54. package/src/plugin/minimap/index.js +24 -21
  55. package/src/plugin/regions/index.js +30 -3
  56. package/src/plugin/regions/region.js +13 -4
  57. package/src/plugin/spectrogram/index.js +65 -50
  58. package/src/wavesurfer.js +31 -10
package/CHANGES.md CHANGED
@@ -1,6 +1,28 @@
1
1
  wavesurfer.js changelog
2
2
  =======================
3
3
 
4
+ 6.0.0 (07.02.2022)
5
+ ------------------
6
+ - Add additional type to `waveColor` and `progressColor` parameters to support linear gradients (#2345)
7
+ - Add `hideCursor` option to hide the mouse cursor when hovering over the waveform (#2367)
8
+ - Add optional `channelIdx` parameter to `setWaveColor`, `getWaveColor`, `setProgressColor` and
9
+ `getProgressColor` methods (#2391)
10
+ - Improved drawing waveform with bars, now bars height is the maximum peak value in range (#2428)
11
+ - Workaround for `seekTo` occasionally crashing on Firefox (#1228, #2431)
12
+ - Markers plugin: Add the ability to set markers as draggable using param `draggable=true`,
13
+ `marker-drag` and `marker-drop` events will be triggered (#2398)
14
+ - Regions plugin:
15
+ - Increase region z-index to fix stacking inconsistencies (#2353)
16
+ - Check `maxLength` before resizing region (#2374)
17
+ - Add support for drag selection to be separated for each channel (#2380)
18
+ - Allow `formatTimeCallback` from plugin params to be used (#2294)
19
+ - Use of default `edgeScrollWidth` value no longer dependent on regions being created via
20
+ plugin params (#2401)
21
+ - Disable `region-remove` event emission during plugin teardown (#2403)
22
+ - Spectrogram plugin:
23
+ - Remove inaccurate frequency doubling of spectrogram (#2232)
24
+ - Support for `splitChannels` option to draw spectrogram for each channel (#2424)
25
+
4
26
  5.2.0 (16.08.2021)
5
27
  ------------------
6
28
  - Add `ignoreSilenceMode` option to ignore iOS hardware silence switch when using the
package/README.md CHANGED
@@ -9,6 +9,16 @@ Interactive navigable audio visualization using Web Audio and Canvas.
9
9
 
10
10
  See a [tutorial](https://wavesurfer-js.org/docs) and [examples](https://wavesurfer-js.org/examples) on [wavesurfer-js.org](https://wavesurfer-js.org).
11
11
 
12
+ ## 10 years of wavesufer.js 🎉
13
+ Wavesufer.js was started in March 2012. To celebrate the 10-year anniversary of wavesufer.js, we created an NFT representing the initial commit to this repository.
14
+
15
+ If you're a company, or an individual, wishing to support the project, please consider buying this memorable commit.
16
+
17
+ |[<img alt="wavesufer.js NFT" src="https://lh3.googleusercontent.com/82rx4HORLYEodBBt13X6nZ2pdR-Ij25iRInmYuzCjjKU1uZ8NQmhaS-wB5u74qZlDShJlbEVTxUu8OodD8JdN79N7za4-AZfipT3=w600" width="300" />](https://opensea.io/assets/matic/0xE7ea2E2bE12C257d376400cB231D8eE51e972BD6/41246820351435245535444587687799096392219692760736652072803901002414398825025)|[Buy the first commit NFT 🎁](https://opensea.io/assets/matic/0xE7ea2E2bE12C257d376400cB231D8eE51e972BD6/41246820351435245535444587687799096392219692760736652072803901002414398825025)|
18
+ ---|---|
19
+
20
+ The proceeds will go to the author and the current maintainer.
21
+
12
22
  ## Browser support
13
23
  wavesurfer.js works only in [modern browsers supporting Web Audio](http://caniuse.com/audio-api).
14
24
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js cursor plugin 5.2.0 (2021-08-16)
2
+ * wavesurfer.js cursor plugin 6.0.0 (2022-02-07)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -28,13 +28,15 @@ return /******/ (() => { // webpackBootstrap
28
28
  Object.defineProperty(exports, "__esModule", ({
29
29
  value: true
30
30
  }));
31
- exports.default = void 0;
31
+ exports["default"] = void 0;
32
32
 
33
33
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34
34
 
35
35
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
36
36
 
37
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
37
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
38
+
39
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
38
40
 
39
41
  /**
40
42
  * @typedef {Object} CursorPluginParams
@@ -95,7 +97,7 @@ var CursorPlugin = /*#__PURE__*/function () {
95
97
 
96
98
  _classCallCheck(this, CursorPlugin);
97
99
 
98
- this.defaultParams = {
100
+ _defineProperty(this, "defaultParams", {
99
101
  hideOnBlur: true,
100
102
  width: '1px',
101
103
  color: 'black',
@@ -107,34 +109,37 @@ var CursorPlugin = /*#__PURE__*/function () {
107
109
  showTime: false,
108
110
  followCursorY: false,
109
111
  formatTimeCallback: null
110
- };
112
+ });
113
+
114
+ _defineProperty(this, "_onMousemove", function (e) {
115
+ var event = _this.util.withOrientation(e, _this.wavesurfer.params.vertical);
111
116
 
112
- this._onMousemove = function (e) {
113
- var bbox = _this.wavesurfer.container.getBoundingClientRect();
117
+ var bbox = _this.wrapper.getBoundingClientRect();
114
118
 
115
119
  var y = 0;
116
- var x = e.clientX - bbox.left;
120
+ var x = _this.wrapper.scrollLeft + event.clientX - bbox.left;
117
121
 
118
- var flip = bbox.right < e.clientX + _this.outerWidth(_this.displayTime);
122
+ var flip = bbox.right < event.clientX + _this.displayTime.getBoundingClientRect().width;
119
123
 
120
124
  if (_this.params.showTime && _this.params.followCursorY) {
121
125
  // follow y-position of the mouse
122
- y = e.clientY - (bbox.top + bbox.height / 2);
126
+ y = event.clientY - (bbox.top + bbox.height / 2);
123
127
  }
124
128
 
125
129
  _this.updateCursorPosition(x, y, flip);
126
- };
130
+ });
127
131
 
128
- this._onMouseenter = function () {
132
+ _defineProperty(this, "_onMouseenter", function () {
129
133
  return _this.showCursor();
130
- };
134
+ });
131
135
 
132
- this._onMouseleave = function () {
136
+ _defineProperty(this, "_onMouseleave", function () {
133
137
  return _this.hideCursor();
134
- };
138
+ });
135
139
 
136
140
  this.wavesurfer = ws;
137
141
  this.style = ws.util.style;
142
+ this.util = ws.util;
138
143
  /**
139
144
  * The cursor HTML element
140
145
  *
@@ -158,16 +163,13 @@ var CursorPlugin = /*#__PURE__*/function () {
158
163
  this.displayTime = null;
159
164
  this.params = Object.assign({}, this.defaultParams, params);
160
165
  }
161
- /**
162
- * Initialise the plugin (used by the Plugin API)
163
- */
164
-
165
166
 
166
167
  _createClass(CursorPlugin, [{
167
- key: "init",
168
- value: function init() {
169
- this.wrapper = this.wavesurfer.container;
170
- this.cursor = this.wrapper.appendChild(this.style(document.createElement('cursor'), Object.assign({
168
+ key: "_onReady",
169
+ value: function _onReady() {
170
+ this.wrapper = this.wavesurfer.drawer.wrapper;
171
+ this.cursor = this.util.withOrientation(this.wrapper.appendChild(document.createElement('cursor')), this.wavesurfer.params.vertical);
172
+ this.style(this.cursor, Object.assign({
171
173
  position: 'absolute',
172
174
  zIndex: this.params.zIndex,
173
175
  left: 0,
@@ -180,10 +182,11 @@ var CursorPlugin = /*#__PURE__*/function () {
180
182
  borderRightColor: this.params.color,
181
183
  opacity: this.params.opacity,
182
184
  pointerEvents: 'none'
183
- }, this.params.customStyle)));
185
+ }, this.params.customStyle));
184
186
 
185
187
  if (this.params.showTime) {
186
- this.showTime = this.wrapper.appendChild(this.style(document.createElement('showTitle'), Object.assign({
188
+ this.showTime = this.util.withOrientation(this.wrapper.appendChild(document.createElement('showTitle')), this.wavesurfer.params.vertical);
189
+ this.style(this.showTime, Object.assign({
187
190
  position: 'absolute',
188
191
  zIndex: this.params.zIndex,
189
192
  left: 0,
@@ -194,14 +197,15 @@ var CursorPlugin = /*#__PURE__*/function () {
194
197
  opacity: this.params.opacity,
195
198
  pointerEvents: 'none',
196
199
  height: '100%'
197
- }, this.params.customStyle)));
198
- this.displayTime = this.showTime.appendChild(this.style(document.createElement('div'), Object.assign({
200
+ }, this.params.customStyle));
201
+ this.displayTime = this.util.withOrientation(this.showTime.appendChild(document.createElement('div')), this.wavesurfer.params.vertical);
202
+ this.style(this.displayTime, Object.assign({
199
203
  display: 'inline',
200
204
  pointerEvents: 'none',
201
205
  margin: 'auto',
202
206
  visibility: 'hidden' // initial value will be hidden just for measuring purpose
203
207
 
204
- }, this.params.customShowTimeStyle))); // initial value to measure display width
208
+ }, this.params.customShowTimeStyle)); // initial value to measure display width
205
209
 
206
210
  this.displayTime.innerHTML = this.formatTime(0);
207
211
  }
@@ -215,6 +219,23 @@ var CursorPlugin = /*#__PURE__*/function () {
215
219
  this.wrapper.addEventListener('mouseleave', this._onMouseleave);
216
220
  }
217
221
  }
222
+ /**
223
+ * Initialise the plugin (used by the Plugin API)
224
+ */
225
+
226
+ }, {
227
+ key: "init",
228
+ value: function init() {
229
+ var _this2 = this;
230
+
231
+ if (this.wavesurfer.isReady) {
232
+ this._onReady();
233
+ } else {
234
+ this.wavesurfer.once('ready', function () {
235
+ return _this2._onReady();
236
+ });
237
+ }
238
+ }
218
239
  /**
219
240
  * Destroy the plugin (used by the Plugin API)
220
241
  */
@@ -255,11 +276,11 @@ var CursorPlugin = /*#__PURE__*/function () {
255
276
  var elementWidth = this.wavesurfer.drawer.width / this.wavesurfer.params.pixelRatio;
256
277
  var scrollWidth = this.wavesurfer.drawer.getScrollX();
257
278
  var scrollTime = duration / this.wavesurfer.drawer.width * scrollWidth;
258
- var timeValue = Math.max(0, xpos / elementWidth * duration) + scrollTime;
279
+ var timeValue = Math.max(0, (xpos - this.wrapper.scrollLeft) / elementWidth * duration) + scrollTime;
259
280
  var formatValue = this.formatTime(timeValue);
260
281
 
261
282
  if (flip) {
262
- var textOffset = this.outerWidth(this.displayTime);
283
+ var textOffset = this.displayTime.getBoundingClientRect().width;
263
284
  xpos -= textOffset;
264
285
  }
265
286
 
@@ -330,25 +351,6 @@ var CursorPlugin = /*#__PURE__*/function () {
330
351
  ].join(':');
331
352
  });
332
353
  }
333
- /**
334
- * Get outer width of given element.
335
- *
336
- * @param {DOM} element DOM Element
337
- * @returns {number} outer width
338
- */
339
-
340
- }, {
341
- key: "outerWidth",
342
- value: function outerWidth(element) {
343
- if (!element) {
344
- return 0;
345
- }
346
-
347
- var width = element.offsetWidth;
348
- var style = getComputedStyle(element);
349
- width += parseInt(style.marginLeft + style.marginRight);
350
- return width;
351
- }
352
354
  }], [{
353
355
  key: "create",
354
356
  value:
@@ -380,7 +382,7 @@ var CursorPlugin = /*#__PURE__*/function () {
380
382
  return CursorPlugin;
381
383
  }();
382
384
 
383
- exports.default = CursorPlugin;
385
+ exports["default"] = CursorPlugin;
384
386
  module.exports = exports.default;
385
387
 
386
388
  /***/ })
@@ -1 +1 @@
1
- {"version":3,"file":"wavesurfer.cursor.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/cursor/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/before-startup","webpack://WaveSurfer.[name]/webpack/startup","webpack://WaveSurfer.[name]/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"cursor\"] = factory();\n})(self, function() {\nreturn ","/**\n * @typedef {Object} CursorPluginParams\n * @property {?boolean} deferInit Set to true to stop auto init in `addPlugin()`\n * @property {boolean} hideOnBlur=true Hide the cursor when the mouse leaves the\n * waveform\n * @property {string} width='1px' The width of the cursor\n * @property {string} color='black' The color of the cursor\n * @property {string} opacity='0.25' The opacity of the cursor\n * @property {string} style='solid' The border style of the cursor\n * @property {number} zIndex=3 The z-index of the cursor element\n * @property {object} customStyle An object with custom styles which are applied\n * to the cursor element\n * @property {boolean} showTime=false Show the time on the cursor.\n * @property {object} customShowTimeStyle An object with custom styles which are\n * applied to the cursor time element.\n * @property {string} followCursorY=false Use `true` to make the time on\n * the cursor follow the x and the y-position of the mouse. Use `false` to make the\n * it only follow the x-position of the mouse.\n * @property {function} formatTimeCallback Formats the timestamp on the cursor.\n */\n\n/**\n * Displays a thin line at the position of the cursor on the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import CursorPlugin from 'wavesurfer.cursor.js';\n *\n * // commonjs\n * var CursorPlugin = require('wavesurfer.cursor.js');\n *\n * // if you are using <script> tags\n * var CursorPlugin = window.WaveSurfer.cursor;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * CursorPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class CursorPlugin {\n /**\n * Cursor plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {CursorPluginParams} params parameters use to initialise the\n * plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'cursor',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {},\n instance: CursorPlugin\n };\n }\n\n /**\n * @type {CursorPluginParams}\n */\n defaultParams = {\n hideOnBlur: true,\n width: '1px',\n color: 'black',\n opacity: '0.25',\n style: 'solid',\n zIndex: 4,\n customStyle: {},\n customShowTimeStyle: {},\n showTime: false,\n followCursorY: false,\n formatTimeCallback: null\n };\n\n /**\n * @param {object} e Mouse move event\n */\n _onMousemove = e => {\n const bbox = this.wavesurfer.container.getBoundingClientRect();\n let y = 0;\n let x = e.clientX - bbox.left;\n let flip = bbox.right < e.clientX + this.outerWidth(this.displayTime);\n\n if (this.params.showTime && this.params.followCursorY) {\n // follow y-position of the mouse\n y = e.clientY - (bbox.top + bbox.height / 2);\n }\n\n this.updateCursorPosition(x, y, flip);\n };\n\n /**\n * @returns {void}\n */\n _onMouseenter = () => this.showCursor();\n\n /**\n * @returns {void}\n */\n _onMouseleave = () => this.hideCursor();\n\n /**\n * Construct the plugin class. You probably want to use `CursorPlugin.create`\n * instead.\n *\n * @param {CursorPluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.wavesurfer = ws;\n this.style = ws.util.style;\n /**\n * The cursor HTML element\n *\n * @type {?HTMLElement}\n */\n this.cursor = null;\n /**\n * displays the time next to the cursor\n *\n * @type {?HTMLElement}\n */\n this.showTime = null;\n /**\n * The html container that will display the time\n *\n * @type {?HTMLElement}\n */\n this.displayTime = null;\n\n this.params = Object.assign({}, this.defaultParams, params);\n }\n\n /**\n * Initialise the plugin (used by the Plugin API)\n */\n init() {\n this.wrapper = this.wavesurfer.container;\n this.cursor = this.wrapper.appendChild(\n this.style(\n document.createElement('cursor'),\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: '0',\n display: 'flex',\n borderRightStyle: this.params.style,\n borderRightWidth: this.params.width,\n borderRightColor: this.params.color,\n opacity: this.params.opacity,\n pointerEvents: 'none'\n },\n this.params.customStyle\n )\n )\n );\n if (this.params.showTime) {\n this.showTime = this.wrapper.appendChild(\n this.style(\n document.createElement('showTitle'),\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: 'auto',\n display: 'flex',\n opacity: this.params.opacity,\n pointerEvents: 'none',\n height: '100%'\n },\n this.params.customStyle\n )\n )\n );\n this.displayTime = this.showTime.appendChild(\n this.style(\n document.createElement('div'),\n Object.assign(\n {\n display: 'inline',\n pointerEvents: 'none',\n margin: 'auto',\n visibility: 'hidden' // initial value will be hidden just for measuring purpose\n },\n this.params.customShowTimeStyle\n )\n )\n );\n // initial value to measure display width\n this.displayTime.innerHTML = this.formatTime(0);\n }\n\n this.wrapper.addEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n // ensure elements are hidden initially\n this.hideCursor();\n this.wrapper.addEventListener('mouseenter', this._onMouseenter);\n this.wrapper.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Destroy the plugin (used by the Plugin API)\n */\n destroy() {\n if (this.params.showTime) {\n this.cursor.parentNode.removeChild(this.showTime);\n }\n this.cursor.parentNode.removeChild(this.cursor);\n this.wrapper.removeEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n this.wrapper.removeEventListener('mouseenter', this._onMouseenter);\n this.wrapper.removeEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Update the cursor position\n *\n * @param {number} xpos The x offset of the cursor in pixels\n * @param {number} ypos The y offset of the cursor in pixels\n * @param {boolean} flip Flag to flip duration text from right to left\n */\n updateCursorPosition(xpos, ypos, flip = false) {\n this.style(this.cursor, {\n left: `${xpos}px`\n });\n if (this.params.showTime) {\n const duration = this.wavesurfer.getDuration();\n const elementWidth =\n this.wavesurfer.drawer.width /\n this.wavesurfer.params.pixelRatio;\n const scrollWidth = this.wavesurfer.drawer.getScrollX();\n\n const scrollTime =\n (duration / this.wavesurfer.drawer.width) * scrollWidth;\n\n const timeValue =\n Math.max(0, (xpos / elementWidth) * duration) + scrollTime;\n const formatValue = this.formatTime(timeValue);\n if (flip) {\n const textOffset = this.outerWidth(this.displayTime);\n xpos -= textOffset;\n }\n this.style(this.showTime, {\n left: `${xpos}px`,\n top: `${ypos}px`\n });\n this.style(this.displayTime, {\n visibility: 'visible'\n });\n this.displayTime.innerHTML = `${formatValue}`;\n }\n }\n\n /**\n * Show the cursor\n */\n showCursor() {\n this.style(this.cursor, {\n display: 'flex'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'flex'\n });\n }\n }\n\n /**\n * Hide the cursor\n */\n hideCursor() {\n this.style(this.cursor, {\n display: 'none'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'none'\n });\n }\n }\n\n /**\n * Format the timestamp for `cursorTime`.\n *\n * @param {number} cursorTime Time in seconds\n * @returns {string} Formatted timestamp\n */\n formatTime(cursorTime) {\n cursorTime = isNaN(cursorTime) ? 0 : cursorTime;\n\n if (this.params.formatTimeCallback) {\n return this.params.formatTimeCallback(cursorTime);\n }\n return [cursorTime].map(time =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2), // seconds\n ('000' + Math.floor((time % 1) * 1000)).slice(-3) // milliseconds\n ].join(':')\n );\n }\n\n /**\n * Get outer width of given element.\n *\n * @param {DOM} element DOM Element\n * @returns {number} outer width\n */\n outerWidth(element) {\n if (!element) {\n return 0;\n }\n\n let width = element.offsetWidth;\n let style = getComputedStyle(element);\n\n width += parseInt(style.marginLeft + style.marginRight);\n return width;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/cursor/index.js\");\n",""],"names":["CursorPlugin","params","ws","defaultParams","hideOnBlur","width","color","opacity","style","zIndex","customStyle","customShowTimeStyle","showTime","followCursorY","formatTimeCallback","_onMousemove","e","bbox","wavesurfer","container","getBoundingClientRect","y","x","clientX","left","flip","right","outerWidth","displayTime","clientY","top","height","updateCursorPosition","_onMouseenter","showCursor","_onMouseleave","hideCursor","util","cursor","Object","assign","wrapper","appendChild","document","createElement","position","bottom","display","borderRightStyle","borderRightWidth","borderRightColor","pointerEvents","margin","visibility","innerHTML","formatTime","addEventListener","parentNode","removeChild","removeEventListener","xpos","ypos","duration","getDuration","elementWidth","drawer","pixelRatio","scrollWidth","getScrollX","scrollTime","timeValue","Math","max","formatValue","textOffset","cursorTime","isNaN","map","time","floor","slice","join","element","offsetWidth","getComputedStyle","parseInt","marginLeft","marginRight","name","deferInit","staticProps","instance"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.cursor.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/cursor/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/before-startup","webpack://WaveSurfer.[name]/webpack/startup","webpack://WaveSurfer.[name]/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"cursor\"] = factory();\n})(self, function() {\nreturn ","/**\n * @typedef {Object} CursorPluginParams\n * @property {?boolean} deferInit Set to true to stop auto init in `addPlugin()`\n * @property {boolean} hideOnBlur=true Hide the cursor when the mouse leaves the\n * waveform\n * @property {string} width='1px' The width of the cursor\n * @property {string} color='black' The color of the cursor\n * @property {string} opacity='0.25' The opacity of the cursor\n * @property {string} style='solid' The border style of the cursor\n * @property {number} zIndex=3 The z-index of the cursor element\n * @property {object} customStyle An object with custom styles which are applied\n * to the cursor element\n * @property {boolean} showTime=false Show the time on the cursor.\n * @property {object} customShowTimeStyle An object with custom styles which are\n * applied to the cursor time element.\n * @property {string} followCursorY=false Use `true` to make the time on\n * the cursor follow the x and the y-position of the mouse. Use `false` to make the\n * it only follow the x-position of the mouse.\n * @property {function} formatTimeCallback Formats the timestamp on the cursor.\n */\n\n/**\n * Displays a thin line at the position of the cursor on the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import CursorPlugin from 'wavesurfer.cursor.js';\n *\n * // commonjs\n * var CursorPlugin = require('wavesurfer.cursor.js');\n *\n * // if you are using <script> tags\n * var CursorPlugin = window.WaveSurfer.cursor;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * CursorPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class CursorPlugin {\n /**\n * Cursor plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {CursorPluginParams} params parameters use to initialise the\n * plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'cursor',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {},\n instance: CursorPlugin\n };\n }\n\n /**\n * @type {CursorPluginParams}\n */\n defaultParams = {\n hideOnBlur: true,\n width: '1px',\n color: 'black',\n opacity: '0.25',\n style: 'solid',\n zIndex: 4,\n customStyle: {},\n customShowTimeStyle: {},\n showTime: false,\n followCursorY: false,\n formatTimeCallback: null\n };\n\n /**\n * @param {object} e Mouse move event\n */\n _onMousemove = e => {\n const event = this.util.withOrientation(e, this.wavesurfer.params.vertical);\n const bbox = this.wrapper.getBoundingClientRect();\n let y = 0;\n let x = this.wrapper.scrollLeft + event.clientX - bbox.left;\n let flip = bbox.right < event.clientX + this.displayTime.getBoundingClientRect().width;\n\n if (this.params.showTime && this.params.followCursorY) {\n // follow y-position of the mouse\n y = event.clientY - (bbox.top + bbox.height / 2);\n }\n\n this.updateCursorPosition(x, y, flip);\n };\n\n /**\n * @returns {void}\n */\n _onMouseenter = () => this.showCursor();\n\n /**\n * @returns {void}\n */\n _onMouseleave = () => this.hideCursor();\n\n /**\n * Construct the plugin class. You probably want to use `CursorPlugin.create`\n * instead.\n *\n * @param {CursorPluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.wavesurfer = ws;\n this.style = ws.util.style;\n this.util = ws.util;\n /**\n * The cursor HTML element\n *\n * @type {?HTMLElement}\n */\n this.cursor = null;\n /**\n * displays the time next to the cursor\n *\n * @type {?HTMLElement}\n */\n this.showTime = null;\n /**\n * The html container that will display the time\n *\n * @type {?HTMLElement}\n */\n this.displayTime = null;\n\n this.params = Object.assign({}, this.defaultParams, params);\n }\n\n _onReady() {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.cursor = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('cursor'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.cursor,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: '0',\n display: 'flex',\n borderRightStyle: this.params.style,\n borderRightWidth: this.params.width,\n borderRightColor: this.params.color,\n opacity: this.params.opacity,\n pointerEvents: 'none'\n },\n this.params.customStyle\n )\n );\n\n if (this.params.showTime) {\n this.showTime = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('showTitle')\n ), this.wavesurfer.params.vertical);\n this.style(\n this.showTime,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: 'auto',\n display: 'flex',\n opacity: this.params.opacity,\n pointerEvents: 'none',\n height: '100%'\n },\n this.params.customStyle\n )\n );\n\n this.displayTime = this.util.withOrientation(this.showTime.appendChild(\n document.createElement('div'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.displayTime,\n Object.assign(\n {\n display: 'inline',\n pointerEvents: 'none',\n margin: 'auto',\n visibility: 'hidden' // initial value will be hidden just for measuring purpose\n },\n this.params.customShowTimeStyle\n )\n );\n\n // initial value to measure display width\n this.displayTime.innerHTML = this.formatTime(0);\n }\n\n this.wrapper.addEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n // ensure elements are hidden initially\n this.hideCursor();\n this.wrapper.addEventListener('mouseenter', this._onMouseenter);\n this.wrapper.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Initialise the plugin (used by the Plugin API)\n */\n init() {\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', () => this._onReady());\n }\n }\n\n /**\n * Destroy the plugin (used by the Plugin API)\n */\n destroy() {\n if (this.params.showTime) {\n this.cursor.parentNode.removeChild(this.showTime);\n }\n this.cursor.parentNode.removeChild(this.cursor);\n this.wrapper.removeEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n this.wrapper.removeEventListener('mouseenter', this._onMouseenter);\n this.wrapper.removeEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Update the cursor position\n *\n * @param {number} xpos The x offset of the cursor in pixels\n * @param {number} ypos The y offset of the cursor in pixels\n * @param {boolean} flip Flag to flip duration text from right to left\n */\n updateCursorPosition(xpos, ypos, flip = false) {\n this.style(this.cursor, {\n left: `${xpos}px`\n });\n if (this.params.showTime) {\n const duration = this.wavesurfer.getDuration();\n const elementWidth =\n this.wavesurfer.drawer.width /\n this.wavesurfer.params.pixelRatio;\n const scrollWidth = this.wavesurfer.drawer.getScrollX();\n\n const scrollTime =\n (duration / this.wavesurfer.drawer.width) * scrollWidth;\n\n const timeValue =\n Math.max(0, ((xpos - this.wrapper.scrollLeft) / elementWidth) * duration) + scrollTime;\n const formatValue = this.formatTime(timeValue);\n if (flip) {\n const textOffset = this.displayTime.getBoundingClientRect().width;\n xpos -= textOffset;\n }\n this.style(this.showTime, {\n left: `${xpos}px`,\n top: `${ypos}px`\n });\n this.style(this.displayTime, {\n visibility: 'visible'\n });\n this.displayTime.innerHTML = `${formatValue}`;\n }\n }\n\n /**\n * Show the cursor\n */\n showCursor() {\n this.style(this.cursor, {\n display: 'flex'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'flex'\n });\n }\n }\n\n /**\n * Hide the cursor\n */\n hideCursor() {\n this.style(this.cursor, {\n display: 'none'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'none'\n });\n }\n }\n\n /**\n * Format the timestamp for `cursorTime`.\n *\n * @param {number} cursorTime Time in seconds\n * @returns {string} Formatted timestamp\n */\n formatTime(cursorTime) {\n cursorTime = isNaN(cursorTime) ? 0 : cursorTime;\n\n if (this.params.formatTimeCallback) {\n return this.params.formatTimeCallback(cursorTime);\n }\n return [cursorTime].map(time =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2), // seconds\n ('000' + Math.floor((time % 1) * 1000)).slice(-3) // milliseconds\n ].join(':')\n );\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/plugin/cursor/index.js\");\n",""],"names":["CursorPlugin","params","ws","hideOnBlur","width","color","opacity","style","zIndex","customStyle","customShowTimeStyle","showTime","followCursorY","formatTimeCallback","e","event","util","withOrientation","wavesurfer","vertical","bbox","wrapper","getBoundingClientRect","y","x","scrollLeft","clientX","left","flip","right","displayTime","clientY","top","height","updateCursorPosition","showCursor","hideCursor","cursor","Object","assign","defaultParams","drawer","appendChild","document","createElement","position","bottom","display","borderRightStyle","borderRightWidth","borderRightColor","pointerEvents","margin","visibility","innerHTML","formatTime","addEventListener","_onMousemove","_onMouseenter","_onMouseleave","isReady","_onReady","once","parentNode","removeChild","removeEventListener","xpos","ypos","duration","getDuration","elementWidth","pixelRatio","scrollWidth","getScrollX","scrollTime","timeValue","Math","max","formatValue","textOffset","cursorTime","isNaN","map","time","floor","slice","join","name","deferInit","staticProps","instance"],"sourceRoot":""}
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * wavesurfer.js cursor plugin 5.2.0 (2021-08-16)
2
+ * wavesurfer.js cursor plugin 6.0.0 (2022-02-07)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
6
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.cursor=t())}(self,(function(){return(()=>{"use strict";var e={178:(e,t)=>{function i(e,t){for(var i=0;i<t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=function(){function e(t,i){var s=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.defaultParams={hideOnBlur:!0,width:"1px",color:"black",opacity:"0.25",style:"solid",zIndex:4,customStyle:{},customShowTimeStyle:{},showTime:!1,followCursorY:!1,formatTimeCallback:null},this._onMousemove=function(e){var t=s.wavesurfer.container.getBoundingClientRect(),i=0,r=e.clientX-t.left,o=t.right<e.clientX+s.outerWidth(s.displayTime);s.params.showTime&&s.params.followCursorY&&(i=e.clientY-(t.top+t.height/2)),s.updateCursorPosition(r,i,o)},this._onMouseenter=function(){return s.showCursor()},this._onMouseleave=function(){return s.hideCursor()},this.wavesurfer=i,this.style=i.util.style,this.cursor=null,this.showTime=null,this.displayTime=null,this.params=Object.assign({},this.defaultParams,t)}var t,s,r;return t=e,r=[{key:"create",value:function(t){return{name:"cursor",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,staticProps:{},instance:e}}}],(s=[{key:"init",value:function(){this.wrapper=this.wavesurfer.container,this.cursor=this.wrapper.appendChild(this.style(document.createElement("cursor"),Object.assign({position:"absolute",zIndex:this.params.zIndex,left:0,top:0,bottom:0,width:"0",display:"flex",borderRightStyle:this.params.style,borderRightWidth:this.params.width,borderRightColor:this.params.color,opacity:this.params.opacity,pointerEvents:"none"},this.params.customStyle))),this.params.showTime&&(this.showTime=this.wrapper.appendChild(this.style(document.createElement("showTitle"),Object.assign({position:"absolute",zIndex:this.params.zIndex,left:0,top:0,bottom:0,width:"auto",display:"flex",opacity:this.params.opacity,pointerEvents:"none",height:"100%"},this.params.customStyle))),this.displayTime=this.showTime.appendChild(this.style(document.createElement("div"),Object.assign({display:"inline",pointerEvents:"none",margin:"auto",visibility:"hidden"},this.params.customShowTimeStyle))),this.displayTime.innerHTML=this.formatTime(0)),this.wrapper.addEventListener("mousemove",this._onMousemove),this.params.hideOnBlur&&(this.hideCursor(),this.wrapper.addEventListener("mouseenter",this._onMouseenter),this.wrapper.addEventListener("mouseleave",this._onMouseleave))}},{key:"destroy",value:function(){this.params.showTime&&this.cursor.parentNode.removeChild(this.showTime),this.cursor.parentNode.removeChild(this.cursor),this.wrapper.removeEventListener("mousemove",this._onMousemove),this.params.hideOnBlur&&(this.wrapper.removeEventListener("mouseenter",this._onMouseenter),this.wrapper.removeEventListener("mouseleave",this._onMouseleave))}},{key:"updateCursorPosition",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.style(this.cursor,{left:"".concat(e,"px")}),this.params.showTime){var s=this.wavesurfer.getDuration(),r=this.wavesurfer.drawer.width/this.wavesurfer.params.pixelRatio,o=this.wavesurfer.drawer.getScrollX(),a=s/this.wavesurfer.drawer.width*o,n=Math.max(0,e/r*s)+a,h=this.formatTime(n);if(i){var l=this.outerWidth(this.displayTime);e-=l}this.style(this.showTime,{left:"".concat(e,"px"),top:"".concat(t,"px")}),this.style(this.displayTime,{visibility:"visible"}),this.displayTime.innerHTML="".concat(h)}}},{key:"showCursor",value:function(){this.style(this.cursor,{display:"flex"}),this.params.showTime&&this.style(this.showTime,{display:"flex"})}},{key:"hideCursor",value:function(){this.style(this.cursor,{display:"none"}),this.params.showTime&&this.style(this.showTime,{display:"none"})}},{key:"formatTime",value:function(e){return e=isNaN(e)?0:e,this.params.formatTimeCallback?this.params.formatTimeCallback(e):[e].map((function(e){return[Math.floor(e%3600/60),("00"+Math.floor(e%60)).slice(-2),("000"+Math.floor(e%1*1e3)).slice(-3)].join(":")}))}},{key:"outerWidth",value:function(e){if(!e)return 0;var t=e.offsetWidth,i=getComputedStyle(e);return t+=parseInt(i.marginLeft+i.marginRight)}}])&&i(t.prototype,s),r&&i(t,r),e}();t.default=s,e.exports=t.default}},t={};return function i(s){var r=t[s];if(void 0!==r)return r.exports;var o=t[s]={exports:{}};return e[s](o,o.exports,i),o.exports}(178)})()}));
6
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("WaveSurfer",[],t):"object"==typeof exports?exports.WaveSurfer=t():(e.WaveSurfer=e.WaveSurfer||{},e.WaveSurfer.cursor=t())}(self,(function(){return(()=>{"use strict";var e={178:(e,t)=>{function i(e,t){for(var i=0;i<t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}function s(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(){function e(t,i){var r=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),s(this,"defaultParams",{hideOnBlur:!0,width:"1px",color:"black",opacity:"0.25",style:"solid",zIndex:4,customStyle:{},customShowTimeStyle:{},showTime:!1,followCursorY:!1,formatTimeCallback:null}),s(this,"_onMousemove",(function(e){var t=r.util.withOrientation(e,r.wavesurfer.params.vertical),i=r.wrapper.getBoundingClientRect(),s=0,a=r.wrapper.scrollLeft+t.clientX-i.left,o=i.right<t.clientX+r.displayTime.getBoundingClientRect().width;r.params.showTime&&r.params.followCursorY&&(s=t.clientY-(i.top+i.height/2)),r.updateCursorPosition(a,s,o)})),s(this,"_onMouseenter",(function(){return r.showCursor()})),s(this,"_onMouseleave",(function(){return r.hideCursor()})),this.wavesurfer=i,this.style=i.util.style,this.util=i.util,this.cursor=null,this.showTime=null,this.displayTime=null,this.params=Object.assign({},this.defaultParams,t)}var t,r,a;return t=e,r=[{key:"_onReady",value:function(){this.wrapper=this.wavesurfer.drawer.wrapper,this.cursor=this.util.withOrientation(this.wrapper.appendChild(document.createElement("cursor")),this.wavesurfer.params.vertical),this.style(this.cursor,Object.assign({position:"absolute",zIndex:this.params.zIndex,left:0,top:0,bottom:0,width:"0",display:"flex",borderRightStyle:this.params.style,borderRightWidth:this.params.width,borderRightColor:this.params.color,opacity:this.params.opacity,pointerEvents:"none"},this.params.customStyle)),this.params.showTime&&(this.showTime=this.util.withOrientation(this.wrapper.appendChild(document.createElement("showTitle")),this.wavesurfer.params.vertical),this.style(this.showTime,Object.assign({position:"absolute",zIndex:this.params.zIndex,left:0,top:0,bottom:0,width:"auto",display:"flex",opacity:this.params.opacity,pointerEvents:"none",height:"100%"},this.params.customStyle)),this.displayTime=this.util.withOrientation(this.showTime.appendChild(document.createElement("div")),this.wavesurfer.params.vertical),this.style(this.displayTime,Object.assign({display:"inline",pointerEvents:"none",margin:"auto",visibility:"hidden"},this.params.customShowTimeStyle)),this.displayTime.innerHTML=this.formatTime(0)),this.wrapper.addEventListener("mousemove",this._onMousemove),this.params.hideOnBlur&&(this.hideCursor(),this.wrapper.addEventListener("mouseenter",this._onMouseenter),this.wrapper.addEventListener("mouseleave",this._onMouseleave))}},{key:"init",value:function(){var e=this;this.wavesurfer.isReady?this._onReady():this.wavesurfer.once("ready",(function(){return e._onReady()}))}},{key:"destroy",value:function(){this.params.showTime&&this.cursor.parentNode.removeChild(this.showTime),this.cursor.parentNode.removeChild(this.cursor),this.wrapper.removeEventListener("mousemove",this._onMousemove),this.params.hideOnBlur&&(this.wrapper.removeEventListener("mouseenter",this._onMouseenter),this.wrapper.removeEventListener("mouseleave",this._onMouseleave))}},{key:"updateCursorPosition",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(this.style(this.cursor,{left:"".concat(e,"px")}),this.params.showTime){var s=this.wavesurfer.getDuration(),r=this.wavesurfer.drawer.width/this.wavesurfer.params.pixelRatio,a=this.wavesurfer.drawer.getScrollX(),o=s/this.wavesurfer.drawer.width*a,n=Math.max(0,(e-this.wrapper.scrollLeft)/r*s)+o,h=this.formatTime(n);if(i){var l=this.displayTime.getBoundingClientRect().width;e-=l}this.style(this.showTime,{left:"".concat(e,"px"),top:"".concat(t,"px")}),this.style(this.displayTime,{visibility:"visible"}),this.displayTime.innerHTML="".concat(h)}}},{key:"showCursor",value:function(){this.style(this.cursor,{display:"flex"}),this.params.showTime&&this.style(this.showTime,{display:"flex"})}},{key:"hideCursor",value:function(){this.style(this.cursor,{display:"none"}),this.params.showTime&&this.style(this.showTime,{display:"none"})}},{key:"formatTime",value:function(e){return e=isNaN(e)?0:e,this.params.formatTimeCallback?this.params.formatTimeCallback(e):[e].map((function(e){return[Math.floor(e%3600/60),("00"+Math.floor(e%60)).slice(-2),("000"+Math.floor(e%1*1e3)).slice(-3)].join(":")}))}}],a=[{key:"create",value:function(t){return{name:"cursor",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,staticProps:{},instance:e}}}],r&&i(t.prototype,r),a&&i(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=r,e.exports=t.default}},t={};var i=function i(s){var r=t[s];if(void 0!==r)return r.exports;var a=t[s]={exports:{}};return e[s](a,a.exports,i),a.exports}(178);return i})()}));
7
7
  //# sourceMappingURL=wavesurfer.cursor.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wavesurfer.cursor.min.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/cursor/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"cursor\"] = factory();\n})(self, function() {\nreturn ","/**\n * @typedef {Object} CursorPluginParams\n * @property {?boolean} deferInit Set to true to stop auto init in `addPlugin()`\n * @property {boolean} hideOnBlur=true Hide the cursor when the mouse leaves the\n * waveform\n * @property {string} width='1px' The width of the cursor\n * @property {string} color='black' The color of the cursor\n * @property {string} opacity='0.25' The opacity of the cursor\n * @property {string} style='solid' The border style of the cursor\n * @property {number} zIndex=3 The z-index of the cursor element\n * @property {object} customStyle An object with custom styles which are applied\n * to the cursor element\n * @property {boolean} showTime=false Show the time on the cursor.\n * @property {object} customShowTimeStyle An object with custom styles which are\n * applied to the cursor time element.\n * @property {string} followCursorY=false Use `true` to make the time on\n * the cursor follow the x and the y-position of the mouse. Use `false` to make the\n * it only follow the x-position of the mouse.\n * @property {function} formatTimeCallback Formats the timestamp on the cursor.\n */\n\n/**\n * Displays a thin line at the position of the cursor on the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import CursorPlugin from 'wavesurfer.cursor.js';\n *\n * // commonjs\n * var CursorPlugin = require('wavesurfer.cursor.js');\n *\n * // if you are using <script> tags\n * var CursorPlugin = window.WaveSurfer.cursor;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * CursorPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class CursorPlugin {\n /**\n * Cursor plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {CursorPluginParams} params parameters use to initialise the\n * plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'cursor',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {},\n instance: CursorPlugin\n };\n }\n\n /**\n * @type {CursorPluginParams}\n */\n defaultParams = {\n hideOnBlur: true,\n width: '1px',\n color: 'black',\n opacity: '0.25',\n style: 'solid',\n zIndex: 4,\n customStyle: {},\n customShowTimeStyle: {},\n showTime: false,\n followCursorY: false,\n formatTimeCallback: null\n };\n\n /**\n * @param {object} e Mouse move event\n */\n _onMousemove = e => {\n const bbox = this.wavesurfer.container.getBoundingClientRect();\n let y = 0;\n let x = e.clientX - bbox.left;\n let flip = bbox.right < e.clientX + this.outerWidth(this.displayTime);\n\n if (this.params.showTime && this.params.followCursorY) {\n // follow y-position of the mouse\n y = e.clientY - (bbox.top + bbox.height / 2);\n }\n\n this.updateCursorPosition(x, y, flip);\n };\n\n /**\n * @returns {void}\n */\n _onMouseenter = () => this.showCursor();\n\n /**\n * @returns {void}\n */\n _onMouseleave = () => this.hideCursor();\n\n /**\n * Construct the plugin class. You probably want to use `CursorPlugin.create`\n * instead.\n *\n * @param {CursorPluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.wavesurfer = ws;\n this.style = ws.util.style;\n /**\n * The cursor HTML element\n *\n * @type {?HTMLElement}\n */\n this.cursor = null;\n /**\n * displays the time next to the cursor\n *\n * @type {?HTMLElement}\n */\n this.showTime = null;\n /**\n * The html container that will display the time\n *\n * @type {?HTMLElement}\n */\n this.displayTime = null;\n\n this.params = Object.assign({}, this.defaultParams, params);\n }\n\n /**\n * Initialise the plugin (used by the Plugin API)\n */\n init() {\n this.wrapper = this.wavesurfer.container;\n this.cursor = this.wrapper.appendChild(\n this.style(\n document.createElement('cursor'),\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: '0',\n display: 'flex',\n borderRightStyle: this.params.style,\n borderRightWidth: this.params.width,\n borderRightColor: this.params.color,\n opacity: this.params.opacity,\n pointerEvents: 'none'\n },\n this.params.customStyle\n )\n )\n );\n if (this.params.showTime) {\n this.showTime = this.wrapper.appendChild(\n this.style(\n document.createElement('showTitle'),\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: 'auto',\n display: 'flex',\n opacity: this.params.opacity,\n pointerEvents: 'none',\n height: '100%'\n },\n this.params.customStyle\n )\n )\n );\n this.displayTime = this.showTime.appendChild(\n this.style(\n document.createElement('div'),\n Object.assign(\n {\n display: 'inline',\n pointerEvents: 'none',\n margin: 'auto',\n visibility: 'hidden' // initial value will be hidden just for measuring purpose\n },\n this.params.customShowTimeStyle\n )\n )\n );\n // initial value to measure display width\n this.displayTime.innerHTML = this.formatTime(0);\n }\n\n this.wrapper.addEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n // ensure elements are hidden initially\n this.hideCursor();\n this.wrapper.addEventListener('mouseenter', this._onMouseenter);\n this.wrapper.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Destroy the plugin (used by the Plugin API)\n */\n destroy() {\n if (this.params.showTime) {\n this.cursor.parentNode.removeChild(this.showTime);\n }\n this.cursor.parentNode.removeChild(this.cursor);\n this.wrapper.removeEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n this.wrapper.removeEventListener('mouseenter', this._onMouseenter);\n this.wrapper.removeEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Update the cursor position\n *\n * @param {number} xpos The x offset of the cursor in pixels\n * @param {number} ypos The y offset of the cursor in pixels\n * @param {boolean} flip Flag to flip duration text from right to left\n */\n updateCursorPosition(xpos, ypos, flip = false) {\n this.style(this.cursor, {\n left: `${xpos}px`\n });\n if (this.params.showTime) {\n const duration = this.wavesurfer.getDuration();\n const elementWidth =\n this.wavesurfer.drawer.width /\n this.wavesurfer.params.pixelRatio;\n const scrollWidth = this.wavesurfer.drawer.getScrollX();\n\n const scrollTime =\n (duration / this.wavesurfer.drawer.width) * scrollWidth;\n\n const timeValue =\n Math.max(0, (xpos / elementWidth) * duration) + scrollTime;\n const formatValue = this.formatTime(timeValue);\n if (flip) {\n const textOffset = this.outerWidth(this.displayTime);\n xpos -= textOffset;\n }\n this.style(this.showTime, {\n left: `${xpos}px`,\n top: `${ypos}px`\n });\n this.style(this.displayTime, {\n visibility: 'visible'\n });\n this.displayTime.innerHTML = `${formatValue}`;\n }\n }\n\n /**\n * Show the cursor\n */\n showCursor() {\n this.style(this.cursor, {\n display: 'flex'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'flex'\n });\n }\n }\n\n /**\n * Hide the cursor\n */\n hideCursor() {\n this.style(this.cursor, {\n display: 'none'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'none'\n });\n }\n }\n\n /**\n * Format the timestamp for `cursorTime`.\n *\n * @param {number} cursorTime Time in seconds\n * @returns {string} Formatted timestamp\n */\n formatTime(cursorTime) {\n cursorTime = isNaN(cursorTime) ? 0 : cursorTime;\n\n if (this.params.formatTimeCallback) {\n return this.params.formatTimeCallback(cursorTime);\n }\n return [cursorTime].map(time =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2), // seconds\n ('000' + Math.floor((time % 1) * 1000)).slice(-3) // milliseconds\n ].join(':')\n );\n }\n\n /**\n * Get outer width of given element.\n *\n * @param {DOM} element DOM Element\n * @returns {number} outer width\n */\n outerWidth(element) {\n if (!element) {\n return 0;\n }\n\n let width = element.offsetWidth;\n let style = getComputedStyle(element);\n\n width += parseInt(style.marginLeft + style.marginRight);\n return width;\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(178);\n"],"names":["root","factory","exports","module","define","amd","self","CursorPlugin","params","ws","defaultParams","hideOnBlur","width","color","opacity","style","zIndex","customStyle","customShowTimeStyle","showTime","followCursorY","formatTimeCallback","_onMousemove","e","bbox","wavesurfer","container","getBoundingClientRect","y","x","clientX","left","flip","right","outerWidth","displayTime","clientY","top","height","updateCursorPosition","_onMouseenter","showCursor","_onMouseleave","hideCursor","this","util","cursor","Object","assign","name","deferInit","staticProps","instance","wrapper","appendChild","document","createElement","position","bottom","display","borderRightStyle","borderRightWidth","borderRightColor","pointerEvents","margin","visibility","innerHTML","formatTime","addEventListener","parentNode","removeChild","removeEventListener","xpos","ypos","duration","getDuration","elementWidth","drawer","pixelRatio","scrollWidth","getScrollX","scrollTime","timeValue","Math","max","formatValue","textOffset","cursorTime","isNaN","map","time","floor","slice","join","element","offsetWidth","getComputedStyle","parseInt","marginLeft","marginRight","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.cursor.min.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/cursor/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = root[\"WaveSurfer\"] || {}, root[\"WaveSurfer\"][\"cursor\"] = factory();\n})(self, function() {\nreturn ","/**\n * @typedef {Object} CursorPluginParams\n * @property {?boolean} deferInit Set to true to stop auto init in `addPlugin()`\n * @property {boolean} hideOnBlur=true Hide the cursor when the mouse leaves the\n * waveform\n * @property {string} width='1px' The width of the cursor\n * @property {string} color='black' The color of the cursor\n * @property {string} opacity='0.25' The opacity of the cursor\n * @property {string} style='solid' The border style of the cursor\n * @property {number} zIndex=3 The z-index of the cursor element\n * @property {object} customStyle An object with custom styles which are applied\n * to the cursor element\n * @property {boolean} showTime=false Show the time on the cursor.\n * @property {object} customShowTimeStyle An object with custom styles which are\n * applied to the cursor time element.\n * @property {string} followCursorY=false Use `true` to make the time on\n * the cursor follow the x and the y-position of the mouse. Use `false` to make the\n * it only follow the x-position of the mouse.\n * @property {function} formatTimeCallback Formats the timestamp on the cursor.\n */\n\n/**\n * Displays a thin line at the position of the cursor on the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import CursorPlugin from 'wavesurfer.cursor.js';\n *\n * // commonjs\n * var CursorPlugin = require('wavesurfer.cursor.js');\n *\n * // if you are using <script> tags\n * var CursorPlugin = window.WaveSurfer.cursor;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * CursorPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class CursorPlugin {\n /**\n * Cursor plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {CursorPluginParams} params parameters use to initialise the\n * plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'cursor',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {},\n instance: CursorPlugin\n };\n }\n\n /**\n * @type {CursorPluginParams}\n */\n defaultParams = {\n hideOnBlur: true,\n width: '1px',\n color: 'black',\n opacity: '0.25',\n style: 'solid',\n zIndex: 4,\n customStyle: {},\n customShowTimeStyle: {},\n showTime: false,\n followCursorY: false,\n formatTimeCallback: null\n };\n\n /**\n * @param {object} e Mouse move event\n */\n _onMousemove = e => {\n const event = this.util.withOrientation(e, this.wavesurfer.params.vertical);\n const bbox = this.wrapper.getBoundingClientRect();\n let y = 0;\n let x = this.wrapper.scrollLeft + event.clientX - bbox.left;\n let flip = bbox.right < event.clientX + this.displayTime.getBoundingClientRect().width;\n\n if (this.params.showTime && this.params.followCursorY) {\n // follow y-position of the mouse\n y = event.clientY - (bbox.top + bbox.height / 2);\n }\n\n this.updateCursorPosition(x, y, flip);\n };\n\n /**\n * @returns {void}\n */\n _onMouseenter = () => this.showCursor();\n\n /**\n * @returns {void}\n */\n _onMouseleave = () => this.hideCursor();\n\n /**\n * Construct the plugin class. You probably want to use `CursorPlugin.create`\n * instead.\n *\n * @param {CursorPluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.wavesurfer = ws;\n this.style = ws.util.style;\n this.util = ws.util;\n /**\n * The cursor HTML element\n *\n * @type {?HTMLElement}\n */\n this.cursor = null;\n /**\n * displays the time next to the cursor\n *\n * @type {?HTMLElement}\n */\n this.showTime = null;\n /**\n * The html container that will display the time\n *\n * @type {?HTMLElement}\n */\n this.displayTime = null;\n\n this.params = Object.assign({}, this.defaultParams, params);\n }\n\n _onReady() {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.cursor = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('cursor'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.cursor,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: '0',\n display: 'flex',\n borderRightStyle: this.params.style,\n borderRightWidth: this.params.width,\n borderRightColor: this.params.color,\n opacity: this.params.opacity,\n pointerEvents: 'none'\n },\n this.params.customStyle\n )\n );\n\n if (this.params.showTime) {\n this.showTime = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('showTitle')\n ), this.wavesurfer.params.vertical);\n this.style(\n this.showTime,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: 'auto',\n display: 'flex',\n opacity: this.params.opacity,\n pointerEvents: 'none',\n height: '100%'\n },\n this.params.customStyle\n )\n );\n\n this.displayTime = this.util.withOrientation(this.showTime.appendChild(\n document.createElement('div'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.displayTime,\n Object.assign(\n {\n display: 'inline',\n pointerEvents: 'none',\n margin: 'auto',\n visibility: 'hidden' // initial value will be hidden just for measuring purpose\n },\n this.params.customShowTimeStyle\n )\n );\n\n // initial value to measure display width\n this.displayTime.innerHTML = this.formatTime(0);\n }\n\n this.wrapper.addEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n // ensure elements are hidden initially\n this.hideCursor();\n this.wrapper.addEventListener('mouseenter', this._onMouseenter);\n this.wrapper.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Initialise the plugin (used by the Plugin API)\n */\n init() {\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', () => this._onReady());\n }\n }\n\n /**\n * Destroy the plugin (used by the Plugin API)\n */\n destroy() {\n if (this.params.showTime) {\n this.cursor.parentNode.removeChild(this.showTime);\n }\n this.cursor.parentNode.removeChild(this.cursor);\n this.wrapper.removeEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n this.wrapper.removeEventListener('mouseenter', this._onMouseenter);\n this.wrapper.removeEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Update the cursor position\n *\n * @param {number} xpos The x offset of the cursor in pixels\n * @param {number} ypos The y offset of the cursor in pixels\n * @param {boolean} flip Flag to flip duration text from right to left\n */\n updateCursorPosition(xpos, ypos, flip = false) {\n this.style(this.cursor, {\n left: `${xpos}px`\n });\n if (this.params.showTime) {\n const duration = this.wavesurfer.getDuration();\n const elementWidth =\n this.wavesurfer.drawer.width /\n this.wavesurfer.params.pixelRatio;\n const scrollWidth = this.wavesurfer.drawer.getScrollX();\n\n const scrollTime =\n (duration / this.wavesurfer.drawer.width) * scrollWidth;\n\n const timeValue =\n Math.max(0, ((xpos - this.wrapper.scrollLeft) / elementWidth) * duration) + scrollTime;\n const formatValue = this.formatTime(timeValue);\n if (flip) {\n const textOffset = this.displayTime.getBoundingClientRect().width;\n xpos -= textOffset;\n }\n this.style(this.showTime, {\n left: `${xpos}px`,\n top: `${ypos}px`\n });\n this.style(this.displayTime, {\n visibility: 'visible'\n });\n this.displayTime.innerHTML = `${formatValue}`;\n }\n }\n\n /**\n * Show the cursor\n */\n showCursor() {\n this.style(this.cursor, {\n display: 'flex'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'flex'\n });\n }\n }\n\n /**\n * Hide the cursor\n */\n hideCursor() {\n this.style(this.cursor, {\n display: 'none'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'none'\n });\n }\n }\n\n /**\n * Format the timestamp for `cursorTime`.\n *\n * @param {number} cursorTime Time in seconds\n * @returns {string} Formatted timestamp\n */\n formatTime(cursorTime) {\n cursorTime = isNaN(cursorTime) ? 0 : cursorTime;\n\n if (this.params.formatTimeCallback) {\n return this.params.formatTimeCallback(cursorTime);\n }\n return [cursorTime].map(time =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2), // seconds\n ('000' + Math.floor((time % 1) * 1000)).slice(-3) // milliseconds\n ].join(':')\n );\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(178);\n"],"names":["root","factory","exports","module","define","amd","self","CursorPlugin","params","ws","hideOnBlur","width","color","opacity","style","zIndex","customStyle","customShowTimeStyle","showTime","followCursorY","formatTimeCallback","e","event","util","withOrientation","wavesurfer","vertical","bbox","wrapper","getBoundingClientRect","y","x","scrollLeft","clientX","left","flip","right","displayTime","clientY","top","height","updateCursorPosition","showCursor","hideCursor","this","cursor","Object","assign","defaultParams","drawer","appendChild","document","createElement","position","bottom","display","borderRightStyle","borderRightWidth","borderRightColor","pointerEvents","margin","visibility","innerHTML","formatTime","addEventListener","_onMousemove","_onMouseenter","_onMouseleave","isReady","_onReady","once","parentNode","removeChild","removeEventListener","xpos","ypos","duration","getDuration","elementWidth","pixelRatio","scrollWidth","getScrollX","scrollTime","timeValue","Math","max","formatValue","textOffset","cursorTime","isNaN","map","time","floor","slice","join","name","deferInit","staticProps","instance","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js elan plugin 5.2.0 (2021-08-16)
2
+ * wavesurfer.js elan plugin 6.0.0 (2022-02-07)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -28,13 +28,15 @@ return /******/ (() => { // webpackBootstrap
28
28
  Object.defineProperty(exports, "__esModule", ({
29
29
  value: true
30
30
  }));
31
- exports.default = void 0;
31
+ exports["default"] = void 0;
32
32
 
33
33
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34
34
 
35
35
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
36
36
 
37
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
37
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
38
+
39
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
38
40
 
39
41
  /**
40
42
  * @typedef {Object} ElanPluginParams
@@ -76,10 +78,11 @@ var ElanPlugin = /*#__PURE__*/function () {
76
78
  function ElanPlugin(params, ws) {
77
79
  _classCallCheck(this, ElanPlugin);
78
80
 
79
- this.Types = {
81
+ _defineProperty(this, "Types", {
80
82
  ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',
81
83
  REF_ANNOTATION: 'REF_ANNOTATION'
82
- };
84
+ });
85
+
83
86
  this.data = null;
84
87
  this.params = params;
85
88
  this.container = 'string' == typeof params.container ? document.querySelector(params.container) : params.container;
@@ -360,7 +363,7 @@ var ElanPlugin = /*#__PURE__*/function () {
360
363
  return ElanPlugin;
361
364
  }();
362
365
 
363
- exports.default = ElanPlugin;
366
+ exports["default"] = ElanPlugin;
364
367
  module.exports = exports.default;
365
368
 
366
369
  /***/ })