wavesurfer.js 6.3.0 → 6.4.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 (53) hide show
  1. package/README.md +1 -0
  2. package/dist/plugin/wavesurfer.cursor.js +29 -49
  3. package/dist/plugin/wavesurfer.cursor.js.map +1 -1
  4. package/dist/plugin/wavesurfer.cursor.min.js +2 -2
  5. package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
  6. package/dist/plugin/wavesurfer.elan.js +19 -49
  7. package/dist/plugin/wavesurfer.elan.js.map +1 -1
  8. package/dist/plugin/wavesurfer.elan.min.js +1 -1
  9. package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
  10. package/dist/plugin/wavesurfer.markers.js +57 -72
  11. package/dist/plugin/wavesurfer.markers.js.map +1 -1
  12. package/dist/plugin/wavesurfer.markers.min.js +2 -2
  13. package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
  14. package/dist/plugin/wavesurfer.mediasession.js +5 -15
  15. package/dist/plugin/wavesurfer.mediasession.js.map +1 -1
  16. package/dist/plugin/wavesurfer.mediasession.min.js +1 -1
  17. package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
  18. package/dist/plugin/wavesurfer.microphone.js +44 -62
  19. package/dist/plugin/wavesurfer.microphone.js.map +1 -1
  20. package/dist/plugin/wavesurfer.microphone.min.js +1 -1
  21. package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
  22. package/dist/plugin/wavesurfer.minimap.js +16 -68
  23. package/dist/plugin/wavesurfer.minimap.js.map +1 -1
  24. package/dist/plugin/wavesurfer.minimap.min.js +1 -1
  25. package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
  26. package/dist/plugin/wavesurfer.playhead.js +2 -29
  27. package/dist/plugin/wavesurfer.playhead.js.map +1 -1
  28. package/dist/plugin/wavesurfer.playhead.min.js +1 -1
  29. package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
  30. package/dist/plugin/wavesurfer.regions.js +98 -252
  31. package/dist/plugin/wavesurfer.regions.js.map +1 -1
  32. package/dist/plugin/wavesurfer.regions.min.js +1 -1
  33. package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
  34. package/dist/plugin/wavesurfer.spectrogram.js +51 -146
  35. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  36. package/dist/plugin/wavesurfer.spectrogram.min.js +1 -1
  37. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  38. package/dist/plugin/wavesurfer.timeline.js +42 -85
  39. package/dist/plugin/wavesurfer.timeline.js.map +1 -1
  40. package/dist/plugin/wavesurfer.timeline.min.js +1 -1
  41. package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
  42. package/dist/wavesurfer-html-init.js +31 -53
  43. package/dist/wavesurfer-html-init.js.map +1 -1
  44. package/dist/wavesurfer-html-init.min.js +1 -1
  45. package/dist/wavesurfer-html-init.min.js.map +1 -1
  46. package/dist/wavesurfer.js +419 -982
  47. package/dist/wavesurfer.js.map +1 -1
  48. package/dist/wavesurfer.min.js +2 -2
  49. package/dist/wavesurfer.min.js.map +1 -1
  50. package/package.json +6 -6
  51. package/src/plugin/cursor/index.js +15 -3
  52. package/src/plugin/markers/index.js +39 -0
  53. package/CHANGES.md +0 -482
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js elan plugin 6.3.0 (2022-10-03)
2
+ * wavesurfer.js elan plugin 6.4.0 (2022-11-05)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -29,15 +29,10 @@ Object.defineProperty(exports, "__esModule", ({
29
29
  value: true
30
30
  }));
31
31
  exports["default"] = void 0;
32
-
33
32
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
34
-
35
33
  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
-
37
34
  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
35
  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; }
40
-
41
36
  /**
42
37
  * @typedef {Object} ElanPluginParams
43
38
  * @property {string|HTMLElement} container CSS selector or HTML element where
@@ -47,7 +42,6 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
47
42
  * @property {?Object} tiers If set only shows the data tiers with the `TIER_ID`
48
43
  * in this map.
49
44
  */
50
-
51
45
  /**
52
46
  * Downloads and renders ELAN audio transcription documents alongside the
53
47
  * waveform.
@@ -77,26 +71,21 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
77
71
  var ElanPlugin = /*#__PURE__*/function () {
78
72
  function ElanPlugin(params, ws) {
79
73
  _classCallCheck(this, ElanPlugin);
80
-
81
74
  _defineProperty(this, "Types", {
82
75
  ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',
83
76
  REF_ANNOTATION: 'REF_ANNOTATION'
84
77
  });
85
-
86
78
  this.data = null;
87
79
  this.params = params;
88
80
  this.container = 'string' == typeof params.container ? document.querySelector(params.container) : params.container;
89
-
90
81
  if (!this.container) {
91
82
  throw Error('No container for ELAN');
92
83
  }
93
84
  }
94
-
95
85
  _createClass(ElanPlugin, [{
96
86
  key: "init",
97
87
  value: function init() {
98
88
  this.bindClick();
99
-
100
89
  if (this.params.url) {
101
90
  this.load(this.params.url);
102
91
  }
@@ -111,12 +100,9 @@ var ElanPlugin = /*#__PURE__*/function () {
111
100
  key: "load",
112
101
  value: function load(url) {
113
102
  var _this = this;
114
-
115
103
  this.loadXML(url, function (xml) {
116
104
  _this.data = _this.parseElan(xml);
117
-
118
105
  _this.render();
119
-
120
106
  _this.fireEvent('ready', _this.data);
121
107
  });
122
108
  }
@@ -135,7 +121,6 @@ var ElanPlugin = /*#__PURE__*/function () {
135
121
  key: "parseElan",
136
122
  value: function parseElan(xml) {
137
123
  var _this2 = this;
138
-
139
124
  var _forEach = Array.prototype.forEach;
140
125
  var _map = Array.prototype.map;
141
126
  var data = {
@@ -152,17 +137,14 @@ var ElanPlugin = /*#__PURE__*/function () {
152
137
  data.media.type = media.getAttribute('MIME_TYPE');
153
138
  var timeSlots = xml.querySelectorAll('TIME_ORDER TIME_SLOT');
154
139
  var timeOrder = {};
155
-
156
140
  _forEach.call(timeSlots, function (slot) {
157
- var value = parseFloat(slot.getAttribute('TIME_VALUE')); // If in milliseconds, convert to seconds with rounding
158
-
141
+ var value = parseFloat(slot.getAttribute('TIME_VALUE'));
142
+ // If in milliseconds, convert to seconds with rounding
159
143
  if (inMilliseconds) {
160
144
  value = Math.round(value * 1e2) / 1e5;
161
145
  }
162
-
163
146
  timeOrder[slot.getAttribute('TIME_SLOT_ID')] = value;
164
147
  });
165
-
166
148
  data.tiers = _map.call(xml.querySelectorAll('TIER'), function (tier) {
167
149
  return {
168
150
  id: tier.getAttribute('TIER_ID'),
@@ -175,37 +157,36 @@ var ElanPlugin = /*#__PURE__*/function () {
175
157
  ref: node.getAttribute('ANNOTATION_REF'),
176
158
  value: node.querySelector('ANNOTATION_VALUE').textContent.trim()
177
159
  };
178
-
179
160
  if (_this2.Types.ALIGNABLE_ANNOTATION == annot.type) {
180
161
  // Add start & end to alignable annotation
181
162
  annot.start = timeOrder[node.getAttribute('TIME_SLOT_REF1')];
182
- annot.end = timeOrder[node.getAttribute('TIME_SLOT_REF2')]; // Add to the list of alignable annotations
183
-
163
+ annot.end = timeOrder[node.getAttribute('TIME_SLOT_REF2')];
164
+ // Add to the list of alignable annotations
184
165
  data.alignableAnnotations.push(annot);
185
- } // Additionally, put into the flat map of all annotations
186
-
166
+ }
187
167
 
168
+ // Additionally, put into the flat map of all annotations
188
169
  data.annotations[annot.id] = annot;
189
170
  return annot;
190
171
  })
191
172
  };
192
- }); // Create JavaScript references between annotations
173
+ });
193
174
 
175
+ // Create JavaScript references between annotations
194
176
  data.tiers.forEach(function (tier) {
195
177
  tier.annotations.forEach(function (annot) {
196
178
  if (null != annot.ref) {
197
179
  annot.reference = data.annotations[annot.ref];
198
180
  }
199
181
  });
200
- }); // Sort alignable annotations by start & end
182
+ });
201
183
 
184
+ // Sort alignable annotations by start & end
202
185
  data.alignableAnnotations.sort(function (a, b) {
203
186
  var d = a.start - b.start;
204
-
205
187
  if (d == 0) {
206
188
  d = b.end - a.end;
207
189
  }
208
-
209
190
  return d;
210
191
  });
211
192
  data.length = data.alignableAnnotations.length;
@@ -215,17 +196,15 @@ var ElanPlugin = /*#__PURE__*/function () {
215
196
  key: "render",
216
197
  value: function render() {
217
198
  var _this3 = this;
218
-
219
199
  // apply tiers filter
220
200
  var tiers = this.data.tiers;
221
-
222
201
  if (this.params.tiers) {
223
202
  tiers = tiers.filter(function (tier) {
224
203
  return tier.id in _this3.params.tiers;
225
204
  });
226
- } // denormalize references to alignable annotations
227
-
205
+ }
228
206
 
207
+ // denormalize references to alignable annotations
229
208
  var backRefs = {};
230
209
  var indeces = {};
231
210
  tiers.forEach(function (tier, index) {
@@ -234,7 +213,6 @@ var ElanPlugin = /*#__PURE__*/function () {
234
213
  if (!(annot.reference.id in backRefs)) {
235
214
  backRefs[annot.ref] = {};
236
215
  }
237
-
238
216
  backRefs[annot.ref][index] = annot;
239
217
  indeces[index] = true;
240
218
  }
@@ -243,11 +221,13 @@ var ElanPlugin = /*#__PURE__*/function () {
243
221
  indeces = Object.keys(indeces).sort();
244
222
  this.renderedAlignable = this.data.alignableAnnotations.filter(function (alignable) {
245
223
  return backRefs[alignable.id];
246
- }); // table
224
+ });
247
225
 
226
+ // table
248
227
  var table = this.table = document.createElement('table');
249
- table.className = 'wavesurfer-annotations'; // head
228
+ table.className = 'wavesurfer-annotations';
250
229
 
230
+ // head
251
231
  var thead = document.createElement('thead');
252
232
  var headRow = document.createElement('tr');
253
233
  thead.appendChild(headRow);
@@ -261,14 +241,13 @@ var ElanPlugin = /*#__PURE__*/function () {
261
241
  var th = document.createElement('th');
262
242
  th.className = 'wavesurfer-tier-' + tier.id;
263
243
  th.textContent = tier.id;
264
-
265
244
  if (_this3.params.tiers) {
266
245
  th.style.width = _this3.params.tiers[tier.id];
267
246
  }
268
-
269
247
  headRow.appendChild(th);
270
- }); // body
248
+ });
271
249
 
250
+ // body
272
251
  var tbody = document.createElement('tbody');
273
252
  table.appendChild(tbody);
274
253
  this.renderedAlignable.forEach(function (alignable) {
@@ -284,7 +263,6 @@ var ElanPlugin = /*#__PURE__*/function () {
284
263
  var tier = tiers[index];
285
264
  var td = document.createElement('td');
286
265
  var annotation = backRef[index];
287
-
288
266
  if (annotation) {
289
267
  td.id = 'wavesurfer-annotation-' + annotation.id;
290
268
  td.dataset.ref = alignable.id;
@@ -292,7 +270,6 @@ var ElanPlugin = /*#__PURE__*/function () {
292
270
  td.dataset.end = alignable.end;
293
271
  td.textContent = annotation.value;
294
272
  }
295
-
296
273
  td.className = 'wavesurfer-tier-' + tier.id;
297
274
  row.appendChild(td);
298
275
  });
@@ -304,19 +281,15 @@ var ElanPlugin = /*#__PURE__*/function () {
304
281
  key: "bindClick",
305
282
  value: function bindClick() {
306
283
  var _this4 = this;
307
-
308
284
  this._onClick = function (e) {
309
285
  var ref = e.target.dataset.ref;
310
-
311
286
  if (null != ref) {
312
287
  var annot = _this4.data.annotations[ref];
313
-
314
288
  if (annot) {
315
289
  _this4.fireEvent('select', annot.start, annot.end);
316
290
  }
317
291
  }
318
292
  };
319
-
320
293
  this.container.addEventListener('click', this._onClick);
321
294
  }
322
295
  }, {
@@ -328,7 +301,6 @@ var ElanPlugin = /*#__PURE__*/function () {
328
301
  result = annotation;
329
302
  return true;
330
303
  }
331
-
332
304
  return false;
333
305
  });
334
306
  return result;
@@ -359,10 +331,8 @@ var ElanPlugin = /*#__PURE__*/function () {
359
331
  };
360
332
  }
361
333
  }]);
362
-
363
334
  return ElanPlugin;
364
335
  }();
365
-
366
336
  exports["default"] = ElanPlugin;
367
337
  module.exports = exports.default;
368
338
 
@@ -1 +1 @@
1
- {"version":3,"file":"wavesurfer.elan.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/elan/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/before-startup","webpack://WaveSurfer/webpack/startup","webpack://WaveSurfer/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\"][\"elan\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} ElanPluginParams\n * @property {string|HTMLElement} container CSS selector or HTML element where\n * the ELAN information should be rendered.\n * @property {string} url The location of ELAN XML data\n * @property {?boolean} deferInit Set to true to manually call\n * @property {?Object} tiers If set only shows the data tiers with the `TIER_ID`\n * in this map.\n */\n\n/**\n * Downloads and renders ELAN audio transcription documents alongside the\n * waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import ElanPlugin from 'wavesurfer.elan.js';\n *\n * // commonjs\n * var ElanPlugin = require('wavesurfer.elan.js');\n *\n * // if you are using <script> tags\n * var ElanPlugin = window.WaveSurfer.elan;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * ElanPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class ElanPlugin {\n /**\n * Elan 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 {ElanPluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'elan',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: ElanPlugin\n };\n }\n\n Types = {\n ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',\n REF_ANNOTATION: 'REF_ANNOTATION'\n };\n\n constructor(params, ws) {\n this.data = null;\n this.params = params;\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for ELAN');\n }\n }\n\n init() {\n this.bindClick();\n\n if (this.params.url) {\n this.load(this.params.url);\n }\n }\n\n destroy() {\n this.container.removeEventListener('click', this._onClick);\n this.container.removeChild(this.table);\n }\n\n load(url) {\n this.loadXML(url, xml => {\n this.data = this.parseElan(xml);\n this.render();\n this.fireEvent('ready', this.data);\n });\n }\n\n loadXML(url, callback) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'document';\n xhr.send();\n xhr.addEventListener('load', e => {\n callback && callback(e.target.responseXML);\n });\n }\n\n parseElan(xml) {\n const _forEach = Array.prototype.forEach;\n const _map = Array.prototype.map;\n\n const data = {\n media: {},\n timeOrder: {},\n tiers: [],\n annotations: {},\n alignableAnnotations: []\n };\n\n const header = xml.querySelector('HEADER');\n const inMilliseconds =\n header.getAttribute('TIME_UNITS') == 'milliseconds';\n const media = header.querySelector('MEDIA_DESCRIPTOR');\n data.media.url = media.getAttribute('MEDIA_URL');\n data.media.type = media.getAttribute('MIME_TYPE');\n\n const timeSlots = xml.querySelectorAll('TIME_ORDER TIME_SLOT');\n const timeOrder = {};\n _forEach.call(timeSlots, slot => {\n let value = parseFloat(slot.getAttribute('TIME_VALUE'));\n // If in milliseconds, convert to seconds with rounding\n if (inMilliseconds) {\n value = Math.round(value * 1e2) / 1e5;\n }\n timeOrder[slot.getAttribute('TIME_SLOT_ID')] = value;\n });\n\n data.tiers = _map.call(xml.querySelectorAll('TIER'), tier => ({\n id: tier.getAttribute('TIER_ID'),\n linguisticTypeRef: tier.getAttribute('LINGUISTIC_TYPE_REF'),\n defaultLocale: tier.getAttribute('DEFAULT_LOCALE'),\n annotations: _map.call(\n tier.querySelectorAll('REF_ANNOTATION, ALIGNABLE_ANNOTATION'),\n node => {\n const annot = {\n type: node.nodeName,\n id: node.getAttribute('ANNOTATION_ID'),\n ref: node.getAttribute('ANNOTATION_REF'),\n value: node\n .querySelector('ANNOTATION_VALUE')\n .textContent.trim()\n };\n\n if (this.Types.ALIGNABLE_ANNOTATION == annot.type) {\n // Add start & end to alignable annotation\n annot.start =\n timeOrder[node.getAttribute('TIME_SLOT_REF1')];\n annot.end =\n timeOrder[node.getAttribute('TIME_SLOT_REF2')];\n // Add to the list of alignable annotations\n data.alignableAnnotations.push(annot);\n }\n\n // Additionally, put into the flat map of all annotations\n data.annotations[annot.id] = annot;\n\n return annot;\n }\n )\n }));\n\n // Create JavaScript references between annotations\n data.tiers.forEach(tier => {\n tier.annotations.forEach(annot => {\n if (null != annot.ref) {\n annot.reference = data.annotations[annot.ref];\n }\n });\n });\n\n // Sort alignable annotations by start & end\n data.alignableAnnotations.sort((a, b) => {\n let d = a.start - b.start;\n if (d == 0) {\n d = b.end - a.end;\n }\n return d;\n });\n\n data.length = data.alignableAnnotations.length;\n\n return data;\n }\n\n render() {\n // apply tiers filter\n let tiers = this.data.tiers;\n if (this.params.tiers) {\n tiers = tiers.filter(tier => tier.id in this.params.tiers);\n }\n\n // denormalize references to alignable annotations\n const backRefs = {};\n let indeces = {};\n tiers.forEach((tier, index) => {\n tier.annotations.forEach(annot => {\n if (\n annot.reference &&\n annot.reference.type == this.Types.ALIGNABLE_ANNOTATION\n ) {\n if (!(annot.reference.id in backRefs)) {\n backRefs[annot.ref] = {};\n }\n backRefs[annot.ref][index] = annot;\n indeces[index] = true;\n }\n });\n });\n indeces = Object.keys(indeces).sort();\n\n this.renderedAlignable = this.data.alignableAnnotations.filter(\n alignable => backRefs[alignable.id]\n );\n\n // table\n const table = (this.table = document.createElement('table'));\n table.className = 'wavesurfer-annotations';\n\n // head\n const thead = document.createElement('thead');\n const headRow = document.createElement('tr');\n thead.appendChild(headRow);\n table.appendChild(thead);\n const th = document.createElement('th');\n th.textContent = 'Time';\n th.className = 'wavesurfer-time';\n headRow.appendChild(th);\n indeces.forEach(index => {\n const tier = tiers[index];\n const th = document.createElement('th');\n th.className = 'wavesurfer-tier-' + tier.id;\n th.textContent = tier.id;\n if (this.params.tiers) { th.style.width = this.params.tiers[tier.id]; }\n headRow.appendChild(th);\n });\n\n // body\n const tbody = document.createElement('tbody');\n table.appendChild(tbody);\n this.renderedAlignable.forEach(alignable => {\n const row = document.createElement('tr');\n row.id = 'wavesurfer-alignable-' + alignable.id;\n tbody.appendChild(row);\n\n const td = document.createElement('td');\n td.className = 'wavesurfer-time';\n td.textContent =\n alignable.start.toFixed(1) + '–' + alignable.end.toFixed(1);\n row.appendChild(td);\n\n const backRef = backRefs[alignable.id];\n indeces.forEach(index => {\n const tier = tiers[index];\n const td = document.createElement('td');\n const annotation = backRef[index];\n if (annotation) {\n td.id = 'wavesurfer-annotation-' + annotation.id;\n td.dataset.ref = alignable.id;\n td.dataset.start = alignable.start;\n td.dataset.end = alignable.end;\n td.textContent = annotation.value;\n }\n td.className = 'wavesurfer-tier-' + tier.id;\n row.appendChild(td);\n });\n });\n\n this.container.innerHTML = '';\n this.container.appendChild(table);\n }\n\n bindClick() {\n this._onClick = e => {\n const ref = e.target.dataset.ref;\n if (null != ref) {\n const annot = this.data.annotations[ref];\n if (annot) {\n this.fireEvent('select', annot.start, annot.end);\n }\n }\n };\n this.container.addEventListener('click', this._onClick);\n }\n\n getRenderedAnnotation(time) {\n let result;\n this.renderedAlignable.some(annotation => {\n if (annotation.start <= time && annotation.end >= time) {\n result = annotation;\n return true;\n }\n return false;\n });\n return result;\n }\n\n getAnnotationNode(annotation) {\n return document.getElementById('wavesurfer-alignable-' + annotation.id);\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/elan/index.js\");\n",""],"names":["ElanPlugin","params","ws","ALIGNABLE_ANNOTATION","REF_ANNOTATION","data","container","document","querySelector","Error","bindClick","url","load","removeEventListener","_onClick","removeChild","table","loadXML","xml","parseElan","render","fireEvent","callback","xhr","XMLHttpRequest","open","responseType","send","addEventListener","e","target","responseXML","_forEach","Array","prototype","forEach","_map","map","media","timeOrder","tiers","annotations","alignableAnnotations","header","inMilliseconds","getAttribute","type","timeSlots","querySelectorAll","call","slot","value","parseFloat","Math","round","tier","id","linguisticTypeRef","defaultLocale","node","annot","nodeName","ref","textContent","trim","Types","start","end","push","reference","sort","a","b","d","length","filter","backRefs","indeces","index","Object","keys","renderedAlignable","alignable","createElement","className","thead","headRow","appendChild","th","style","width","tbody","row","td","toFixed","backRef","annotation","dataset","innerHTML","time","result","some","getElementById","name","deferInit","instance"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.elan.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/elan/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/webpack/before-startup","webpack://WaveSurfer/webpack/startup","webpack://WaveSurfer/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\"][\"elan\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} ElanPluginParams\n * @property {string|HTMLElement} container CSS selector or HTML element where\n * the ELAN information should be rendered.\n * @property {string} url The location of ELAN XML data\n * @property {?boolean} deferInit Set to true to manually call\n * @property {?Object} tiers If set only shows the data tiers with the `TIER_ID`\n * in this map.\n */\n\n/**\n * Downloads and renders ELAN audio transcription documents alongside the\n * waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import ElanPlugin from 'wavesurfer.elan.js';\n *\n * // commonjs\n * var ElanPlugin = require('wavesurfer.elan.js');\n *\n * // if you are using <script> tags\n * var ElanPlugin = window.WaveSurfer.elan;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * ElanPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class ElanPlugin {\n /**\n * Elan 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 {ElanPluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'elan',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: ElanPlugin\n };\n }\n\n Types = {\n ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',\n REF_ANNOTATION: 'REF_ANNOTATION'\n };\n\n constructor(params, ws) {\n this.data = null;\n this.params = params;\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for ELAN');\n }\n }\n\n init() {\n this.bindClick();\n\n if (this.params.url) {\n this.load(this.params.url);\n }\n }\n\n destroy() {\n this.container.removeEventListener('click', this._onClick);\n this.container.removeChild(this.table);\n }\n\n load(url) {\n this.loadXML(url, xml => {\n this.data = this.parseElan(xml);\n this.render();\n this.fireEvent('ready', this.data);\n });\n }\n\n loadXML(url, callback) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'document';\n xhr.send();\n xhr.addEventListener('load', e => {\n callback && callback(e.target.responseXML);\n });\n }\n\n parseElan(xml) {\n const _forEach = Array.prototype.forEach;\n const _map = Array.prototype.map;\n\n const data = {\n media: {},\n timeOrder: {},\n tiers: [],\n annotations: {},\n alignableAnnotations: []\n };\n\n const header = xml.querySelector('HEADER');\n const inMilliseconds =\n header.getAttribute('TIME_UNITS') == 'milliseconds';\n const media = header.querySelector('MEDIA_DESCRIPTOR');\n data.media.url = media.getAttribute('MEDIA_URL');\n data.media.type = media.getAttribute('MIME_TYPE');\n\n const timeSlots = xml.querySelectorAll('TIME_ORDER TIME_SLOT');\n const timeOrder = {};\n _forEach.call(timeSlots, slot => {\n let value = parseFloat(slot.getAttribute('TIME_VALUE'));\n // If in milliseconds, convert to seconds with rounding\n if (inMilliseconds) {\n value = Math.round(value * 1e2) / 1e5;\n }\n timeOrder[slot.getAttribute('TIME_SLOT_ID')] = value;\n });\n\n data.tiers = _map.call(xml.querySelectorAll('TIER'), tier => ({\n id: tier.getAttribute('TIER_ID'),\n linguisticTypeRef: tier.getAttribute('LINGUISTIC_TYPE_REF'),\n defaultLocale: tier.getAttribute('DEFAULT_LOCALE'),\n annotations: _map.call(\n tier.querySelectorAll('REF_ANNOTATION, ALIGNABLE_ANNOTATION'),\n node => {\n const annot = {\n type: node.nodeName,\n id: node.getAttribute('ANNOTATION_ID'),\n ref: node.getAttribute('ANNOTATION_REF'),\n value: node\n .querySelector('ANNOTATION_VALUE')\n .textContent.trim()\n };\n\n if (this.Types.ALIGNABLE_ANNOTATION == annot.type) {\n // Add start & end to alignable annotation\n annot.start =\n timeOrder[node.getAttribute('TIME_SLOT_REF1')];\n annot.end =\n timeOrder[node.getAttribute('TIME_SLOT_REF2')];\n // Add to the list of alignable annotations\n data.alignableAnnotations.push(annot);\n }\n\n // Additionally, put into the flat map of all annotations\n data.annotations[annot.id] = annot;\n\n return annot;\n }\n )\n }));\n\n // Create JavaScript references between annotations\n data.tiers.forEach(tier => {\n tier.annotations.forEach(annot => {\n if (null != annot.ref) {\n annot.reference = data.annotations[annot.ref];\n }\n });\n });\n\n // Sort alignable annotations by start & end\n data.alignableAnnotations.sort((a, b) => {\n let d = a.start - b.start;\n if (d == 0) {\n d = b.end - a.end;\n }\n return d;\n });\n\n data.length = data.alignableAnnotations.length;\n\n return data;\n }\n\n render() {\n // apply tiers filter\n let tiers = this.data.tiers;\n if (this.params.tiers) {\n tiers = tiers.filter(tier => tier.id in this.params.tiers);\n }\n\n // denormalize references to alignable annotations\n const backRefs = {};\n let indeces = {};\n tiers.forEach((tier, index) => {\n tier.annotations.forEach(annot => {\n if (\n annot.reference &&\n annot.reference.type == this.Types.ALIGNABLE_ANNOTATION\n ) {\n if (!(annot.reference.id in backRefs)) {\n backRefs[annot.ref] = {};\n }\n backRefs[annot.ref][index] = annot;\n indeces[index] = true;\n }\n });\n });\n indeces = Object.keys(indeces).sort();\n\n this.renderedAlignable = this.data.alignableAnnotations.filter(\n alignable => backRefs[alignable.id]\n );\n\n // table\n const table = (this.table = document.createElement('table'));\n table.className = 'wavesurfer-annotations';\n\n // head\n const thead = document.createElement('thead');\n const headRow = document.createElement('tr');\n thead.appendChild(headRow);\n table.appendChild(thead);\n const th = document.createElement('th');\n th.textContent = 'Time';\n th.className = 'wavesurfer-time';\n headRow.appendChild(th);\n indeces.forEach(index => {\n const tier = tiers[index];\n const th = document.createElement('th');\n th.className = 'wavesurfer-tier-' + tier.id;\n th.textContent = tier.id;\n if (this.params.tiers) { th.style.width = this.params.tiers[tier.id]; }\n headRow.appendChild(th);\n });\n\n // body\n const tbody = document.createElement('tbody');\n table.appendChild(tbody);\n this.renderedAlignable.forEach(alignable => {\n const row = document.createElement('tr');\n row.id = 'wavesurfer-alignable-' + alignable.id;\n tbody.appendChild(row);\n\n const td = document.createElement('td');\n td.className = 'wavesurfer-time';\n td.textContent =\n alignable.start.toFixed(1) + '–' + alignable.end.toFixed(1);\n row.appendChild(td);\n\n const backRef = backRefs[alignable.id];\n indeces.forEach(index => {\n const tier = tiers[index];\n const td = document.createElement('td');\n const annotation = backRef[index];\n if (annotation) {\n td.id = 'wavesurfer-annotation-' + annotation.id;\n td.dataset.ref = alignable.id;\n td.dataset.start = alignable.start;\n td.dataset.end = alignable.end;\n td.textContent = annotation.value;\n }\n td.className = 'wavesurfer-tier-' + tier.id;\n row.appendChild(td);\n });\n });\n\n this.container.innerHTML = '';\n this.container.appendChild(table);\n }\n\n bindClick() {\n this._onClick = e => {\n const ref = e.target.dataset.ref;\n if (null != ref) {\n const annot = this.data.annotations[ref];\n if (annot) {\n this.fireEvent('select', annot.start, annot.end);\n }\n }\n };\n this.container.addEventListener('click', this._onClick);\n }\n\n getRenderedAnnotation(time) {\n let result;\n this.renderedAlignable.some(annotation => {\n if (annotation.start <= time && annotation.end >= time) {\n result = annotation;\n return true;\n }\n return false;\n });\n return result;\n }\n\n getAnnotationNode(annotation) {\n return document.getElementById('wavesurfer-alignable-' + annotation.id);\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/elan/index.js\");\n",""],"names":["ElanPlugin","params","ws","ALIGNABLE_ANNOTATION","REF_ANNOTATION","data","container","document","querySelector","Error","bindClick","url","load","removeEventListener","_onClick","removeChild","table","loadXML","xml","parseElan","render","fireEvent","callback","xhr","XMLHttpRequest","open","responseType","send","addEventListener","e","target","responseXML","_forEach","Array","prototype","forEach","_map","map","media","timeOrder","tiers","annotations","alignableAnnotations","header","inMilliseconds","getAttribute","type","timeSlots","querySelectorAll","call","slot","value","parseFloat","Math","round","tier","id","linguisticTypeRef","defaultLocale","node","annot","nodeName","ref","textContent","trim","Types","start","end","push","reference","sort","a","b","d","length","filter","backRefs","indeces","index","Object","keys","renderedAlignable","alignable","createElement","className","thead","headRow","appendChild","th","style","width","tbody","row","td","toFixed","backRef","annotation","dataset","innerHTML","time","result","some","getElementById","name","deferInit","instance"],"sourceRoot":""}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js elan plugin 6.3.0 (2022-10-03)
2
+ * wavesurfer.js elan plugin 6.4.0 (2022-11-05)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"wavesurfer.elan.min.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/elan/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/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\"][\"elan\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} ElanPluginParams\n * @property {string|HTMLElement} container CSS selector or HTML element where\n * the ELAN information should be rendered.\n * @property {string} url The location of ELAN XML data\n * @property {?boolean} deferInit Set to true to manually call\n * @property {?Object} tiers If set only shows the data tiers with the `TIER_ID`\n * in this map.\n */\n\n/**\n * Downloads and renders ELAN audio transcription documents alongside the\n * waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import ElanPlugin from 'wavesurfer.elan.js';\n *\n * // commonjs\n * var ElanPlugin = require('wavesurfer.elan.js');\n *\n * // if you are using <script> tags\n * var ElanPlugin = window.WaveSurfer.elan;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * ElanPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class ElanPlugin {\n /**\n * Elan 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 {ElanPluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'elan',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: ElanPlugin\n };\n }\n\n Types = {\n ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',\n REF_ANNOTATION: 'REF_ANNOTATION'\n };\n\n constructor(params, ws) {\n this.data = null;\n this.params = params;\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for ELAN');\n }\n }\n\n init() {\n this.bindClick();\n\n if (this.params.url) {\n this.load(this.params.url);\n }\n }\n\n destroy() {\n this.container.removeEventListener('click', this._onClick);\n this.container.removeChild(this.table);\n }\n\n load(url) {\n this.loadXML(url, xml => {\n this.data = this.parseElan(xml);\n this.render();\n this.fireEvent('ready', this.data);\n });\n }\n\n loadXML(url, callback) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'document';\n xhr.send();\n xhr.addEventListener('load', e => {\n callback && callback(e.target.responseXML);\n });\n }\n\n parseElan(xml) {\n const _forEach = Array.prototype.forEach;\n const _map = Array.prototype.map;\n\n const data = {\n media: {},\n timeOrder: {},\n tiers: [],\n annotations: {},\n alignableAnnotations: []\n };\n\n const header = xml.querySelector('HEADER');\n const inMilliseconds =\n header.getAttribute('TIME_UNITS') == 'milliseconds';\n const media = header.querySelector('MEDIA_DESCRIPTOR');\n data.media.url = media.getAttribute('MEDIA_URL');\n data.media.type = media.getAttribute('MIME_TYPE');\n\n const timeSlots = xml.querySelectorAll('TIME_ORDER TIME_SLOT');\n const timeOrder = {};\n _forEach.call(timeSlots, slot => {\n let value = parseFloat(slot.getAttribute('TIME_VALUE'));\n // If in milliseconds, convert to seconds with rounding\n if (inMilliseconds) {\n value = Math.round(value * 1e2) / 1e5;\n }\n timeOrder[slot.getAttribute('TIME_SLOT_ID')] = value;\n });\n\n data.tiers = _map.call(xml.querySelectorAll('TIER'), tier => ({\n id: tier.getAttribute('TIER_ID'),\n linguisticTypeRef: tier.getAttribute('LINGUISTIC_TYPE_REF'),\n defaultLocale: tier.getAttribute('DEFAULT_LOCALE'),\n annotations: _map.call(\n tier.querySelectorAll('REF_ANNOTATION, ALIGNABLE_ANNOTATION'),\n node => {\n const annot = {\n type: node.nodeName,\n id: node.getAttribute('ANNOTATION_ID'),\n ref: node.getAttribute('ANNOTATION_REF'),\n value: node\n .querySelector('ANNOTATION_VALUE')\n .textContent.trim()\n };\n\n if (this.Types.ALIGNABLE_ANNOTATION == annot.type) {\n // Add start & end to alignable annotation\n annot.start =\n timeOrder[node.getAttribute('TIME_SLOT_REF1')];\n annot.end =\n timeOrder[node.getAttribute('TIME_SLOT_REF2')];\n // Add to the list of alignable annotations\n data.alignableAnnotations.push(annot);\n }\n\n // Additionally, put into the flat map of all annotations\n data.annotations[annot.id] = annot;\n\n return annot;\n }\n )\n }));\n\n // Create JavaScript references between annotations\n data.tiers.forEach(tier => {\n tier.annotations.forEach(annot => {\n if (null != annot.ref) {\n annot.reference = data.annotations[annot.ref];\n }\n });\n });\n\n // Sort alignable annotations by start & end\n data.alignableAnnotations.sort((a, b) => {\n let d = a.start - b.start;\n if (d == 0) {\n d = b.end - a.end;\n }\n return d;\n });\n\n data.length = data.alignableAnnotations.length;\n\n return data;\n }\n\n render() {\n // apply tiers filter\n let tiers = this.data.tiers;\n if (this.params.tiers) {\n tiers = tiers.filter(tier => tier.id in this.params.tiers);\n }\n\n // denormalize references to alignable annotations\n const backRefs = {};\n let indeces = {};\n tiers.forEach((tier, index) => {\n tier.annotations.forEach(annot => {\n if (\n annot.reference &&\n annot.reference.type == this.Types.ALIGNABLE_ANNOTATION\n ) {\n if (!(annot.reference.id in backRefs)) {\n backRefs[annot.ref] = {};\n }\n backRefs[annot.ref][index] = annot;\n indeces[index] = true;\n }\n });\n });\n indeces = Object.keys(indeces).sort();\n\n this.renderedAlignable = this.data.alignableAnnotations.filter(\n alignable => backRefs[alignable.id]\n );\n\n // table\n const table = (this.table = document.createElement('table'));\n table.className = 'wavesurfer-annotations';\n\n // head\n const thead = document.createElement('thead');\n const headRow = document.createElement('tr');\n thead.appendChild(headRow);\n table.appendChild(thead);\n const th = document.createElement('th');\n th.textContent = 'Time';\n th.className = 'wavesurfer-time';\n headRow.appendChild(th);\n indeces.forEach(index => {\n const tier = tiers[index];\n const th = document.createElement('th');\n th.className = 'wavesurfer-tier-' + tier.id;\n th.textContent = tier.id;\n if (this.params.tiers) { th.style.width = this.params.tiers[tier.id]; }\n headRow.appendChild(th);\n });\n\n // body\n const tbody = document.createElement('tbody');\n table.appendChild(tbody);\n this.renderedAlignable.forEach(alignable => {\n const row = document.createElement('tr');\n row.id = 'wavesurfer-alignable-' + alignable.id;\n tbody.appendChild(row);\n\n const td = document.createElement('td');\n td.className = 'wavesurfer-time';\n td.textContent =\n alignable.start.toFixed(1) + '–' + alignable.end.toFixed(1);\n row.appendChild(td);\n\n const backRef = backRefs[alignable.id];\n indeces.forEach(index => {\n const tier = tiers[index];\n const td = document.createElement('td');\n const annotation = backRef[index];\n if (annotation) {\n td.id = 'wavesurfer-annotation-' + annotation.id;\n td.dataset.ref = alignable.id;\n td.dataset.start = alignable.start;\n td.dataset.end = alignable.end;\n td.textContent = annotation.value;\n }\n td.className = 'wavesurfer-tier-' + tier.id;\n row.appendChild(td);\n });\n });\n\n this.container.innerHTML = '';\n this.container.appendChild(table);\n }\n\n bindClick() {\n this._onClick = e => {\n const ref = e.target.dataset.ref;\n if (null != ref) {\n const annot = this.data.annotations[ref];\n if (annot) {\n this.fireEvent('select', annot.start, annot.end);\n }\n }\n };\n this.container.addEventListener('click', this._onClick);\n }\n\n getRenderedAnnotation(time) {\n let result;\n this.renderedAlignable.some(annotation => {\n if (annotation.start <= time && annotation.end >= time) {\n result = annotation;\n return true;\n }\n return false;\n });\n return result;\n }\n\n getAnnotationNode(annotation) {\n return document.getElementById('wavesurfer-alignable-' + annotation.id);\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__(375);\n"],"names":["root","factory","exports","module","define","amd","self","ElanPlugin","params","ws","ALIGNABLE_ANNOTATION","REF_ANNOTATION","this","data","container","document","querySelector","Error","name","deferInit","instance","bindClick","url","load","removeEventListener","_onClick","removeChild","table","loadXML","xml","parseElan","render","fireEvent","callback","xhr","XMLHttpRequest","open","responseType","send","addEventListener","e","target","responseXML","_forEach","Array","prototype","forEach","_map","map","media","timeOrder","tiers","annotations","alignableAnnotations","header","inMilliseconds","getAttribute","type","timeSlots","querySelectorAll","call","slot","value","parseFloat","Math","round","tier","id","linguisticTypeRef","defaultLocale","node","annot","nodeName","ref","textContent","trim","Types","start","end","push","reference","sort","a","b","d","length","filter","backRefs","indeces","index","Object","keys","renderedAlignable","alignable","createElement","className","thead","headRow","appendChild","th","style","width","tbody","row","td","toFixed","backRef","annotation","dataset","innerHTML","time","result","some","getElementById","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.elan.min.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/elan/index.js","webpack://WaveSurfer/webpack/bootstrap","webpack://WaveSurfer/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\"][\"elan\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} ElanPluginParams\n * @property {string|HTMLElement} container CSS selector or HTML element where\n * the ELAN information should be rendered.\n * @property {string} url The location of ELAN XML data\n * @property {?boolean} deferInit Set to true to manually call\n * @property {?Object} tiers If set only shows the data tiers with the `TIER_ID`\n * in this map.\n */\n\n/**\n * Downloads and renders ELAN audio transcription documents alongside the\n * waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import ElanPlugin from 'wavesurfer.elan.js';\n *\n * // commonjs\n * var ElanPlugin = require('wavesurfer.elan.js');\n *\n * // if you are using <script> tags\n * var ElanPlugin = window.WaveSurfer.elan;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * ElanPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class ElanPlugin {\n /**\n * Elan 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 {ElanPluginParams} params parameters use to initialise the plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'elan',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n instance: ElanPlugin\n };\n }\n\n Types = {\n ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',\n REF_ANNOTATION: 'REF_ANNOTATION'\n };\n\n constructor(params, ws) {\n this.data = null;\n this.params = params;\n this.container =\n 'string' == typeof params.container\n ? document.querySelector(params.container)\n : params.container;\n\n if (!this.container) {\n throw Error('No container for ELAN');\n }\n }\n\n init() {\n this.bindClick();\n\n if (this.params.url) {\n this.load(this.params.url);\n }\n }\n\n destroy() {\n this.container.removeEventListener('click', this._onClick);\n this.container.removeChild(this.table);\n }\n\n load(url) {\n this.loadXML(url, xml => {\n this.data = this.parseElan(xml);\n this.render();\n this.fireEvent('ready', this.data);\n });\n }\n\n loadXML(url, callback) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'document';\n xhr.send();\n xhr.addEventListener('load', e => {\n callback && callback(e.target.responseXML);\n });\n }\n\n parseElan(xml) {\n const _forEach = Array.prototype.forEach;\n const _map = Array.prototype.map;\n\n const data = {\n media: {},\n timeOrder: {},\n tiers: [],\n annotations: {},\n alignableAnnotations: []\n };\n\n const header = xml.querySelector('HEADER');\n const inMilliseconds =\n header.getAttribute('TIME_UNITS') == 'milliseconds';\n const media = header.querySelector('MEDIA_DESCRIPTOR');\n data.media.url = media.getAttribute('MEDIA_URL');\n data.media.type = media.getAttribute('MIME_TYPE');\n\n const timeSlots = xml.querySelectorAll('TIME_ORDER TIME_SLOT');\n const timeOrder = {};\n _forEach.call(timeSlots, slot => {\n let value = parseFloat(slot.getAttribute('TIME_VALUE'));\n // If in milliseconds, convert to seconds with rounding\n if (inMilliseconds) {\n value = Math.round(value * 1e2) / 1e5;\n }\n timeOrder[slot.getAttribute('TIME_SLOT_ID')] = value;\n });\n\n data.tiers = _map.call(xml.querySelectorAll('TIER'), tier => ({\n id: tier.getAttribute('TIER_ID'),\n linguisticTypeRef: tier.getAttribute('LINGUISTIC_TYPE_REF'),\n defaultLocale: tier.getAttribute('DEFAULT_LOCALE'),\n annotations: _map.call(\n tier.querySelectorAll('REF_ANNOTATION, ALIGNABLE_ANNOTATION'),\n node => {\n const annot = {\n type: node.nodeName,\n id: node.getAttribute('ANNOTATION_ID'),\n ref: node.getAttribute('ANNOTATION_REF'),\n value: node\n .querySelector('ANNOTATION_VALUE')\n .textContent.trim()\n };\n\n if (this.Types.ALIGNABLE_ANNOTATION == annot.type) {\n // Add start & end to alignable annotation\n annot.start =\n timeOrder[node.getAttribute('TIME_SLOT_REF1')];\n annot.end =\n timeOrder[node.getAttribute('TIME_SLOT_REF2')];\n // Add to the list of alignable annotations\n data.alignableAnnotations.push(annot);\n }\n\n // Additionally, put into the flat map of all annotations\n data.annotations[annot.id] = annot;\n\n return annot;\n }\n )\n }));\n\n // Create JavaScript references between annotations\n data.tiers.forEach(tier => {\n tier.annotations.forEach(annot => {\n if (null != annot.ref) {\n annot.reference = data.annotations[annot.ref];\n }\n });\n });\n\n // Sort alignable annotations by start & end\n data.alignableAnnotations.sort((a, b) => {\n let d = a.start - b.start;\n if (d == 0) {\n d = b.end - a.end;\n }\n return d;\n });\n\n data.length = data.alignableAnnotations.length;\n\n return data;\n }\n\n render() {\n // apply tiers filter\n let tiers = this.data.tiers;\n if (this.params.tiers) {\n tiers = tiers.filter(tier => tier.id in this.params.tiers);\n }\n\n // denormalize references to alignable annotations\n const backRefs = {};\n let indeces = {};\n tiers.forEach((tier, index) => {\n tier.annotations.forEach(annot => {\n if (\n annot.reference &&\n annot.reference.type == this.Types.ALIGNABLE_ANNOTATION\n ) {\n if (!(annot.reference.id in backRefs)) {\n backRefs[annot.ref] = {};\n }\n backRefs[annot.ref][index] = annot;\n indeces[index] = true;\n }\n });\n });\n indeces = Object.keys(indeces).sort();\n\n this.renderedAlignable = this.data.alignableAnnotations.filter(\n alignable => backRefs[alignable.id]\n );\n\n // table\n const table = (this.table = document.createElement('table'));\n table.className = 'wavesurfer-annotations';\n\n // head\n const thead = document.createElement('thead');\n const headRow = document.createElement('tr');\n thead.appendChild(headRow);\n table.appendChild(thead);\n const th = document.createElement('th');\n th.textContent = 'Time';\n th.className = 'wavesurfer-time';\n headRow.appendChild(th);\n indeces.forEach(index => {\n const tier = tiers[index];\n const th = document.createElement('th');\n th.className = 'wavesurfer-tier-' + tier.id;\n th.textContent = tier.id;\n if (this.params.tiers) { th.style.width = this.params.tiers[tier.id]; }\n headRow.appendChild(th);\n });\n\n // body\n const tbody = document.createElement('tbody');\n table.appendChild(tbody);\n this.renderedAlignable.forEach(alignable => {\n const row = document.createElement('tr');\n row.id = 'wavesurfer-alignable-' + alignable.id;\n tbody.appendChild(row);\n\n const td = document.createElement('td');\n td.className = 'wavesurfer-time';\n td.textContent =\n alignable.start.toFixed(1) + '–' + alignable.end.toFixed(1);\n row.appendChild(td);\n\n const backRef = backRefs[alignable.id];\n indeces.forEach(index => {\n const tier = tiers[index];\n const td = document.createElement('td');\n const annotation = backRef[index];\n if (annotation) {\n td.id = 'wavesurfer-annotation-' + annotation.id;\n td.dataset.ref = alignable.id;\n td.dataset.start = alignable.start;\n td.dataset.end = alignable.end;\n td.textContent = annotation.value;\n }\n td.className = 'wavesurfer-tier-' + tier.id;\n row.appendChild(td);\n });\n });\n\n this.container.innerHTML = '';\n this.container.appendChild(table);\n }\n\n bindClick() {\n this._onClick = e => {\n const ref = e.target.dataset.ref;\n if (null != ref) {\n const annot = this.data.annotations[ref];\n if (annot) {\n this.fireEvent('select', annot.start, annot.end);\n }\n }\n };\n this.container.addEventListener('click', this._onClick);\n }\n\n getRenderedAnnotation(time) {\n let result;\n this.renderedAlignable.some(annotation => {\n if (annotation.start <= time && annotation.end >= time) {\n result = annotation;\n return true;\n }\n return false;\n });\n return result;\n }\n\n getAnnotationNode(annotation) {\n return document.getElementById('wavesurfer-alignable-' + annotation.id);\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__(375);\n"],"names":["root","factory","exports","module","define","amd","self","ElanPlugin","params","ws","ALIGNABLE_ANNOTATION","REF_ANNOTATION","this","data","container","document","querySelector","Error","name","deferInit","instance","bindClick","url","load","removeEventListener","_onClick","removeChild","table","loadXML","xml","parseElan","render","fireEvent","callback","xhr","XMLHttpRequest","open","responseType","send","addEventListener","e","target","responseXML","_forEach","Array","prototype","forEach","_map","map","media","timeOrder","tiers","annotations","alignableAnnotations","header","inMilliseconds","getAttribute","type","timeSlots","querySelectorAll","call","slot","value","parseFloat","Math","round","tier","id","linguisticTypeRef","defaultLocale","node","annot","nodeName","ref","textContent","trim","Types","start","end","push","reference","sort","a","b","d","length","filter","backRefs","indeces","index","Object","keys","renderedAlignable","alignable","createElement","className","thead","headRow","appendChild","th","style","width","tbody","row","td","toFixed","backRef","annotation","dataset","innerHTML","time","result","some","getElementById","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}