wavesurfer.js 5.1.0 → 6.0.2

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 (66) hide show
  1. package/CHANGES.md +47 -0
  2. package/README.md +10 -0
  3. package/dist/plugin/wavesurfer.cursor.js +53 -51
  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 +10 -7
  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 +142 -26
  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 +6 -6
  16. package/dist/plugin/wavesurfer.mediasession.js.map +1 -1
  17. package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
  18. package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
  19. package/dist/plugin/wavesurfer.microphone.js +5 -5
  20. package/dist/plugin/wavesurfer.microphone.js.map +1 -1
  21. package/dist/plugin/wavesurfer.microphone.min.js +2 -2
  22. package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
  23. package/dist/plugin/wavesurfer.minimap.js +26 -23
  24. package/dist/plugin/wavesurfer.minimap.js.map +1 -1
  25. package/dist/plugin/wavesurfer.minimap.min.js +2 -2
  26. package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
  27. package/dist/plugin/wavesurfer.playhead.js +5 -5
  28. package/dist/plugin/wavesurfer.playhead.js.map +1 -1
  29. package/dist/plugin/wavesurfer.playhead.min.js +2 -2
  30. package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
  31. package/dist/plugin/wavesurfer.regions.js +88 -21
  32. package/dist/plugin/wavesurfer.regions.js.map +1 -1
  33. package/dist/plugin/wavesurfer.regions.min.js +2 -2
  34. package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
  35. package/dist/plugin/wavesurfer.spectrogram.js +71 -58
  36. package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
  37. package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
  38. package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
  39. package/dist/plugin/wavesurfer.timeline.js +52 -54
  40. package/dist/plugin/wavesurfer.timeline.js.map +1 -1
  41. package/dist/plugin/wavesurfer.timeline.min.js +2 -2
  42. package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
  43. package/dist/wavesurfer-html-init.js +6 -6
  44. package/dist/wavesurfer-html-init.js.map +1 -1
  45. package/dist/wavesurfer-html-init.min.js +2 -2
  46. package/dist/wavesurfer-html-init.min.js.map +1 -1
  47. package/dist/wavesurfer.js +302 -133
  48. package/dist/wavesurfer.js.map +1 -1
  49. package/dist/wavesurfer.min.js +2 -2
  50. package/dist/wavesurfer.min.js.map +1 -1
  51. package/package.json +23 -23
  52. package/src/drawer.canvasentry.js +33 -6
  53. package/src/drawer.js +1 -0
  54. package/src/drawer.multicanvas.js +19 -8
  55. package/src/mediaelement.js +1 -1
  56. package/src/plugin/cursor/index.js +68 -70
  57. package/src/plugin/markers/index.js +112 -23
  58. package/src/plugin/minimap/index.js +24 -21
  59. package/src/plugin/regions/index.js +31 -4
  60. package/src/plugin/regions/region.js +45 -8
  61. package/src/plugin/spectrogram/index.js +65 -50
  62. package/src/plugin/timeline/index.js +11 -9
  63. package/src/util/index.js +1 -0
  64. package/src/util/silence-mode.js +35 -0
  65. package/src/wavesurfer.js +54 -23
  66. package/src/webaudio.js +10 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/elan/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/startup"],"names":["ElanPlugin","params","ws","Types","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","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"],"mappings":"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","file":"wavesurfer.elan.js","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})(this, function() {\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"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.elan.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/elan/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\"][\"elan\"] = factory();\n})(self, function() {\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,7 +1,7 @@
1
1
  /*!
2
- * wavesurfer.js elan plugin 5.1.0 (2021-06-20)
2
+ * wavesurfer.js elan plugin 6.0.2 (2022-02-20)
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.elan=t())}(this,(function(){return(()=>{"use strict";var e={375:(e,t)=>{function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(){function e(t,n){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.Types={ALIGNABLE_ANNOTATION:"ALIGNABLE_ANNOTATION",REF_ANNOTATION:"REF_ANNOTATION"},this.data=null,this.params=t,this.container="string"==typeof t.container?document.querySelector(t.container):t.container,!this.container)throw Error("No container for ELAN")}var t,r,a;return t=e,a=[{key:"create",value:function(t){return{name:"elan",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,instance:e}}}],(r=[{key:"init",value:function(){this.bindClick(),this.params.url&&this.load(this.params.url)}},{key:"destroy",value:function(){this.container.removeEventListener("click",this._onClick),this.container.removeChild(this.table)}},{key:"load",value:function(e){var t=this;this.loadXML(e,(function(e){t.data=t.parseElan(e),t.render(),t.fireEvent("ready",t.data)}))}},{key:"loadXML",value:function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="document",n.send(),n.addEventListener("load",(function(e){t&&t(e.target.responseXML)}))}},{key:"parseElan",value:function(e){var t=this,n=Array.prototype.forEach,r=Array.prototype.map,a={media:{},timeOrder:{},tiers:[],annotations:{},alignableAnnotations:[]},i=e.querySelector("HEADER"),o="milliseconds"==i.getAttribute("TIME_UNITS"),s=i.querySelector("MEDIA_DESCRIPTOR");a.media.url=s.getAttribute("MEDIA_URL"),a.media.type=s.getAttribute("MIME_TYPE");var l=e.querySelectorAll("TIME_ORDER TIME_SLOT"),u={};return n.call(l,(function(e){var t=parseFloat(e.getAttribute("TIME_VALUE"));o&&(t=Math.round(100*t)/1e5),u[e.getAttribute("TIME_SLOT_ID")]=t})),a.tiers=r.call(e.querySelectorAll("TIER"),(function(e){return{id:e.getAttribute("TIER_ID"),linguisticTypeRef:e.getAttribute("LINGUISTIC_TYPE_REF"),defaultLocale:e.getAttribute("DEFAULT_LOCALE"),annotations:r.call(e.querySelectorAll("REF_ANNOTATION, ALIGNABLE_ANNOTATION"),(function(e){var n={type:e.nodeName,id:e.getAttribute("ANNOTATION_ID"),ref:e.getAttribute("ANNOTATION_REF"),value:e.querySelector("ANNOTATION_VALUE").textContent.trim()};return t.Types.ALIGNABLE_ANNOTATION==n.type&&(n.start=u[e.getAttribute("TIME_SLOT_REF1")],n.end=u[e.getAttribute("TIME_SLOT_REF2")],a.alignableAnnotations.push(n)),a.annotations[n.id]=n,n}))}})),a.tiers.forEach((function(e){e.annotations.forEach((function(e){null!=e.ref&&(e.reference=a.annotations[e.ref])}))})),a.alignableAnnotations.sort((function(e,t){var n=e.start-t.start;return 0==n&&(n=t.end-e.end),n})),a.length=a.alignableAnnotations.length,a}},{key:"render",value:function(){var e=this,t=this.data.tiers;this.params.tiers&&(t=t.filter((function(t){return t.id in e.params.tiers})));var n={},r={};t.forEach((function(t,a){t.annotations.forEach((function(t){t.reference&&t.reference.type==e.Types.ALIGNABLE_ANNOTATION&&(t.reference.id in n||(n[t.ref]={}),n[t.ref][a]=t,r[a]=!0)}))})),r=Object.keys(r).sort(),this.renderedAlignable=this.data.alignableAnnotations.filter((function(e){return n[e.id]}));var a=this.table=document.createElement("table");a.className="wavesurfer-annotations";var i=document.createElement("thead"),o=document.createElement("tr");i.appendChild(o),a.appendChild(i);var s=document.createElement("th");s.textContent="Time",s.className="wavesurfer-time",o.appendChild(s),r.forEach((function(n){var r=t[n],a=document.createElement("th");a.className="wavesurfer-tier-"+r.id,a.textContent=r.id,e.params.tiers&&(a.style.width=e.params.tiers[r.id]),o.appendChild(a)}));var l=document.createElement("tbody");a.appendChild(l),this.renderedAlignable.forEach((function(e){var a=document.createElement("tr");a.id="wavesurfer-alignable-"+e.id,l.appendChild(a);var i=document.createElement("td");i.className="wavesurfer-time",i.textContent=e.start.toFixed(1)+"–"+e.end.toFixed(1),a.appendChild(i);var o=n[e.id];r.forEach((function(n){var r=t[n],i=document.createElement("td"),s=o[n];s&&(i.id="wavesurfer-annotation-"+s.id,i.dataset.ref=e.id,i.dataset.start=e.start,i.dataset.end=e.end,i.textContent=s.value),i.className="wavesurfer-tier-"+r.id,a.appendChild(i)}))})),this.container.innerHTML="",this.container.appendChild(a)}},{key:"bindClick",value:function(){var e=this;this._onClick=function(t){var n=t.target.dataset.ref;if(null!=n){var r=e.data.annotations[n];r&&e.fireEvent("select",r.start,r.end)}},this.container.addEventListener("click",this._onClick)}},{key:"getRenderedAnnotation",value:function(e){var t;return this.renderedAlignable.some((function(n){return n.start<=e&&n.end>=e&&(t=n,!0)})),t}},{key:"getAnnotationNode",value:function(e){return document.getElementById("wavesurfer-alignable-"+e.id)}}])&&n(t.prototype,r),a&&n(t,a),e}();t.default=r,e.exports=t.default}},t={};return function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}(375)})()}));
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.elan=t())}(self,(function(){return(()=>{"use strict";var e={375:(e,t)=>{function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(){function e(t,n){var r,a,i;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),i={ALIGNABLE_ANNOTATION:"ALIGNABLE_ANNOTATION",REF_ANNOTATION:"REF_ANNOTATION"},(a="Types")in(r=this)?Object.defineProperty(r,a,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[a]=i,this.data=null,this.params=t,this.container="string"==typeof t.container?document.querySelector(t.container):t.container,!this.container)throw Error("No container for ELAN")}var t,r,a;return t=e,a=[{key:"create",value:function(t){return{name:"elan",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,instance:e}}}],(r=[{key:"init",value:function(){this.bindClick(),this.params.url&&this.load(this.params.url)}},{key:"destroy",value:function(){this.container.removeEventListener("click",this._onClick),this.container.removeChild(this.table)}},{key:"load",value:function(e){var t=this;this.loadXML(e,(function(e){t.data=t.parseElan(e),t.render(),t.fireEvent("ready",t.data)}))}},{key:"loadXML",value:function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="document",n.send(),n.addEventListener("load",(function(e){t&&t(e.target.responseXML)}))}},{key:"parseElan",value:function(e){var t=this,n=Array.prototype.forEach,r=Array.prototype.map,a={media:{},timeOrder:{},tiers:[],annotations:{},alignableAnnotations:[]},i=e.querySelector("HEADER"),o="milliseconds"==i.getAttribute("TIME_UNITS"),l=i.querySelector("MEDIA_DESCRIPTOR");a.media.url=l.getAttribute("MEDIA_URL"),a.media.type=l.getAttribute("MIME_TYPE");var s=e.querySelectorAll("TIME_ORDER TIME_SLOT"),u={};return n.call(s,(function(e){var t=parseFloat(e.getAttribute("TIME_VALUE"));o&&(t=Math.round(100*t)/1e5),u[e.getAttribute("TIME_SLOT_ID")]=t})),a.tiers=r.call(e.querySelectorAll("TIER"),(function(e){return{id:e.getAttribute("TIER_ID"),linguisticTypeRef:e.getAttribute("LINGUISTIC_TYPE_REF"),defaultLocale:e.getAttribute("DEFAULT_LOCALE"),annotations:r.call(e.querySelectorAll("REF_ANNOTATION, ALIGNABLE_ANNOTATION"),(function(e){var n={type:e.nodeName,id:e.getAttribute("ANNOTATION_ID"),ref:e.getAttribute("ANNOTATION_REF"),value:e.querySelector("ANNOTATION_VALUE").textContent.trim()};return t.Types.ALIGNABLE_ANNOTATION==n.type&&(n.start=u[e.getAttribute("TIME_SLOT_REF1")],n.end=u[e.getAttribute("TIME_SLOT_REF2")],a.alignableAnnotations.push(n)),a.annotations[n.id]=n,n}))}})),a.tiers.forEach((function(e){e.annotations.forEach((function(e){null!=e.ref&&(e.reference=a.annotations[e.ref])}))})),a.alignableAnnotations.sort((function(e,t){var n=e.start-t.start;return 0==n&&(n=t.end-e.end),n})),a.length=a.alignableAnnotations.length,a}},{key:"render",value:function(){var e=this,t=this.data.tiers;this.params.tiers&&(t=t.filter((function(t){return t.id in e.params.tiers})));var n={},r={};t.forEach((function(t,a){t.annotations.forEach((function(t){t.reference&&t.reference.type==e.Types.ALIGNABLE_ANNOTATION&&(t.reference.id in n||(n[t.ref]={}),n[t.ref][a]=t,r[a]=!0)}))})),r=Object.keys(r).sort(),this.renderedAlignable=this.data.alignableAnnotations.filter((function(e){return n[e.id]}));var a=this.table=document.createElement("table");a.className="wavesurfer-annotations";var i=document.createElement("thead"),o=document.createElement("tr");i.appendChild(o),a.appendChild(i);var l=document.createElement("th");l.textContent="Time",l.className="wavesurfer-time",o.appendChild(l),r.forEach((function(n){var r=t[n],a=document.createElement("th");a.className="wavesurfer-tier-"+r.id,a.textContent=r.id,e.params.tiers&&(a.style.width=e.params.tiers[r.id]),o.appendChild(a)}));var s=document.createElement("tbody");a.appendChild(s),this.renderedAlignable.forEach((function(e){var a=document.createElement("tr");a.id="wavesurfer-alignable-"+e.id,s.appendChild(a);var i=document.createElement("td");i.className="wavesurfer-time",i.textContent=e.start.toFixed(1)+"–"+e.end.toFixed(1),a.appendChild(i);var o=n[e.id];r.forEach((function(n){var r=t[n],i=document.createElement("td"),l=o[n];l&&(i.id="wavesurfer-annotation-"+l.id,i.dataset.ref=e.id,i.dataset.start=e.start,i.dataset.end=e.end,i.textContent=l.value),i.className="wavesurfer-tier-"+r.id,a.appendChild(i)}))})),this.container.innerHTML="",this.container.appendChild(a)}},{key:"bindClick",value:function(){var e=this;this._onClick=function(t){var n=t.target.dataset.ref;if(null!=n){var r=e.data.annotations[n];r&&e.fireEvent("select",r.start,r.end)}},this.container.addEventListener("click",this._onClick)}},{key:"getRenderedAnnotation",value:function(e){var t;return this.renderedAlignable.some((function(n){return n.start<=e&&n.end>=e&&(t=n,!0)})),t}},{key:"getAnnotationNode",value:function(e){return document.getElementById("wavesurfer-alignable-"+e.id)}}])&&n(t.prototype,r),a&&n(t,a),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=r,e.exports=t.default}},t={};var n=function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}(375);return n})()}));
7
7
  //# sourceMappingURL=wavesurfer.elan.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/elan/index.js","webpack://WaveSurfer.[name]/webpack/bootstrap","webpack://WaveSurfer.[name]/webpack/startup"],"names":["root","factory","exports","module","define","amd","this","ElanPlugin","params","ws","Types","ALIGNABLE_ANNOTATION","REF_ANNOTATION","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","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_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"mappings":"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","file":"wavesurfer.elan.min.js","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})(this, function() {\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"],"sourceRoot":""}
1
+ {"version":3,"file":"wavesurfer.elan.min.js","mappings":"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","sources":["webpack://WaveSurfer.[name]/webpack/universalModuleDefinition","webpack://WaveSurfer.[name]/./src/plugin/elan/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\"][\"elan\"] = factory();\n})(self, function() {\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,5 +1,5 @@
1
1
  /*!
2
- * wavesurfer.js markers plugin 5.1.0 (2021-06-20)
2
+ * wavesurfer.js markers plugin 6.0.2 (2022-02-20)
3
3
  * https://wavesurfer-js.org
4
4
  * @license BSD-3-Clause
5
5
  */
@@ -12,7 +12,7 @@
12
12
  exports["WaveSurfer"] = factory();
13
13
  else
14
14
  root["WaveSurfer"] = root["WaveSurfer"] || {}, root["WaveSurfer"]["markers"] = factory();
15
- })(this, function() {
15
+ })(self, function() {
16
16
  return /******/ (() => { // webpackBootstrap
17
17
  /******/ "use strict";
18
18
  /******/ var __webpack_modules__ = ({
@@ -28,13 +28,13 @@ 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
38
 
39
39
  /**
40
40
  * @typedef {Object} MarkerParams
@@ -45,6 +45,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
45
45
  * @property {?color} string Background color for marker
46
46
  * @property {?position} string "top" or "bottom", defaults to "bottom"
47
47
  * @property {?markerElement} element An HTML element to display instead of the default marker image
48
+ * @property {?draggable} boolean Set marker as draggable, defaults to false
48
49
  */
49
50
 
50
51
  /**
@@ -81,8 +82,10 @@ var MarkersPlugin = /*#__PURE__*/function () {
81
82
  this.wavesurfer = ws;
82
83
  this.util = ws.util;
83
84
  this.style = this.util.style;
85
+ this.markerLineWidth = 1;
84
86
  this.markerWidth = 11;
85
87
  this.markerHeight = 22;
88
+ this.dragging = false;
86
89
 
87
90
  this._onResize = function () {
88
91
  _this._updateMarkerPositions();
@@ -101,6 +104,24 @@ var MarkersPlugin = /*#__PURE__*/function () {
101
104
  window.addEventListener('orientationchange', _this._onResize, true);
102
105
 
103
106
  _this.wavesurfer.on('zoom', _this._onResize);
107
+
108
+ if (!_this.markers.find(function (marker) {
109
+ return marker.draggable;
110
+ })) {
111
+ return;
112
+ }
113
+
114
+ _this.onMouseMove = function (e) {
115
+ return _this._onMouseMove(e);
116
+ };
117
+
118
+ window.addEventListener('mousemove', _this.onMouseMove);
119
+
120
+ _this.onMouseUp = function (e) {
121
+ return _this._onMouseUp(e);
122
+ };
123
+
124
+ window.addEventListener("mouseup", _this.onMouseUp);
104
125
  };
105
126
 
106
127
  this.markers = [];
@@ -133,6 +154,15 @@ var MarkersPlugin = /*#__PURE__*/function () {
133
154
  this.wavesurfer.un('zoom', this._onResize);
134
155
  window.removeEventListener('resize', this._onResize, true);
135
156
  window.removeEventListener('orientationchange', this._onResize, true);
157
+
158
+ if (this.onMouseMove) {
159
+ window.removeEventListener('mousemove', this.onMouseMove);
160
+ }
161
+
162
+ if (this.onMouseUp) {
163
+ window.removeEventListener("mouseup", this.onMouseUp);
164
+ }
165
+
136
166
  this.clear();
137
167
  }
138
168
  /**
@@ -149,14 +179,9 @@ var MarkersPlugin = /*#__PURE__*/function () {
149
179
  time: params.time,
150
180
  label: params.label,
151
181
  color: params.color || DEFAULT_FILL_COLOR,
152
- position: params.position || DEFAULT_POSITION
182
+ position: params.position || DEFAULT_POSITION,
183
+ draggable: !!params.draggable
153
184
  };
154
-
155
- if (params.markerElement) {
156
- this.markerWidth = params.markerElement.width;
157
- this.markerHeight = params.markerElement.height;
158
- }
159
-
160
185
  marker.el = this._createMarkerElement(marker, params.markerElement);
161
186
  this.wrapper.appendChild(marker.el);
162
187
  this.markers.push(marker);
@@ -215,7 +240,6 @@ var MarkersPlugin = /*#__PURE__*/function () {
215
240
  var _this2 = this;
216
241
 
217
242
  var label = marker.label;
218
- var time = marker.time;
219
243
  var el = document.createElement('marker');
220
244
  el.className = "wavesurfer-marker";
221
245
  this.style(el, {
@@ -226,11 +250,13 @@ var MarkersPlugin = /*#__PURE__*/function () {
226
250
  "flex-direction": marker.position == "top" ? "column-reverse" : "column"
227
251
  });
228
252
  var line = document.createElement('div');
253
+ var width = markerElement ? markerElement.width : this.markerWidth;
254
+ marker.offset = (width - this.markerLineWidth) / 2;
229
255
  this.style(line, {
230
256
  "flex-grow": 1,
231
- "margin-left": this.markerWidth / 2 - 0.5 + "px",
257
+ "margin-left": marker.offset + "px",
232
258
  background: "black",
233
- width: "1px",
259
+ width: this.markerLineWidth + "px",
234
260
  opacity: 0.1
235
261
  });
236
262
  el.appendChild(line);
@@ -238,6 +264,10 @@ var MarkersPlugin = /*#__PURE__*/function () {
238
264
 
239
265
  var point = markerElement || this._createPointerSVG(marker.color, marker.position);
240
266
 
267
+ if (marker.draggable) {
268
+ point.draggable = false;
269
+ }
270
+
241
271
  labelDiv.appendChild(point);
242
272
 
243
273
  if (label) {
@@ -257,29 +287,113 @@ var MarkersPlugin = /*#__PURE__*/function () {
257
287
  });
258
288
  el.appendChild(labelDiv);
259
289
  labelDiv.addEventListener("click", function (e) {
260
- e.stopPropagation();
290
+ e.stopPropagation(); // Click event is caught when the marker-drop event was dispatched.
291
+ // Drop event was dispatched at this moment, but this.dragging
292
+ // is waiting for the next tick to set as false
293
+
294
+ if (_this2.dragging) {
295
+ return;
296
+ }
261
297
 
262
- _this2.wavesurfer.setCurrentTime(time);
298
+ _this2.wavesurfer.setCurrentTime(marker.time);
263
299
 
264
300
  _this2.wavesurfer.fireEvent("marker-click", marker, e);
265
301
  });
302
+
303
+ if (marker.draggable) {
304
+ labelDiv.addEventListener("mousedown", function (e) {
305
+ _this2.selectedMarker = marker;
306
+ });
307
+ }
308
+
266
309
  return el;
267
310
  }
268
311
  }, {
269
312
  key: "_updateMarkerPositions",
270
313
  value: function _updateMarkerPositions() {
271
- var duration = this.wavesurfer.getDuration();
272
-
273
314
  for (var i = 0; i < this.markers.length; i++) {
274
315
  var marker = this.markers[i];
275
- var elementWidth = this.wavesurfer.drawer.width / this.wavesurfer.params.pixelRatio;
276
- var positionPct = Math.min(marker.time / duration, 1);
277
- var leftPx = elementWidth * positionPct - this.markerWidth / 2;
278
- this.style(marker.el, {
279
- "left": leftPx + "px",
280
- "max-width": elementWidth - leftPx + "px"
281
- });
316
+
317
+ this._updateMarkerPosition(marker);
318
+ }
319
+ }
320
+ /**
321
+ * Update a marker position based on its time property.
322
+ *
323
+ * @private
324
+ * @param {MarkerParams} params The marker to update.
325
+ * @returns {void}
326
+ */
327
+
328
+ }, {
329
+ key: "_updateMarkerPosition",
330
+ value: function _updateMarkerPosition(params) {
331
+ var duration = this.wavesurfer.getDuration();
332
+ var elementWidth = this.wavesurfer.drawer.width / this.wavesurfer.params.pixelRatio;
333
+ var positionPct = Math.min(params.time / duration, 1);
334
+ var leftPx = elementWidth * positionPct - params.offset;
335
+ this.style(params.el, {
336
+ "left": leftPx + "px",
337
+ "max-width": elementWidth - leftPx + "px"
338
+ });
339
+ }
340
+ /**
341
+ * Fires `marker-drag` event, update the `time` property for the
342
+ * selected marker based on the mouse position, and calls to update
343
+ * its position.
344
+ *
345
+ * @private
346
+ * @param {MouseEvent} event The mouse event.
347
+ * @returns {void}
348
+ */
349
+
350
+ }, {
351
+ key: "_onMouseMove",
352
+ value: function _onMouseMove(event) {
353
+ if (!this.selectedMarker) {
354
+ return;
355
+ }
356
+
357
+ if (!this.dragging) {
358
+ this.dragging = true;
359
+ this.wavesurfer.fireEvent("marker-drag", this.selectedMarker, event);
360
+ }
361
+
362
+ this.selectedMarker.time = this.wavesurfer.drawer.handleEvent(event) * this.wavesurfer.getDuration();
363
+
364
+ this._updateMarkerPositions();
365
+ }
366
+ /**
367
+ * Fires `marker-drop` event and unselect the dragged marker.
368
+ *
369
+ * @private
370
+ * @param {MouseEvent} event The mouse event.
371
+ * @returns {void}
372
+ */
373
+
374
+ }, {
375
+ key: "_onMouseUp",
376
+ value: function _onMouseUp(event) {
377
+ var _this3 = this;
378
+
379
+ if (this.selectedMarker) {
380
+ setTimeout(function () {
381
+ _this3.selectedMarker = false;
382
+ _this3.dragging = false;
383
+ }, 0);
282
384
  }
385
+
386
+ if (!this.dragging) {
387
+ return;
388
+ }
389
+
390
+ event.stopPropagation();
391
+ var duration = this.wavesurfer.getDuration();
392
+ this.selectedMarker.time = this.wavesurfer.drawer.handleEvent(event) * duration;
393
+
394
+ this._updateMarkerPositions();
395
+
396
+ this.wavesurfer.fireEvent("marker-drop", this.selectedMarker, event);
283
397
  }
284
398
  /**
285
399
  * Remove all markers
@@ -299,6 +413,8 @@ var MarkersPlugin = /*#__PURE__*/function () {
299
413
  * @typedef {Object} MarkersPluginParams
300
414
  * @property {?MarkerParams[]} markers Initial set of markers
301
415
  * @fires MarkersPlugin#marker-click
416
+ * @fires MarkersPlugin#marker-drag
417
+ * @fires MarkersPlugin#marker-drop
302
418
  */
303
419
 
304
420
  /**
@@ -336,7 +452,7 @@ var MarkersPlugin = /*#__PURE__*/function () {
336
452
  return MarkersPlugin;
337
453
  }();
338
454
 
339
- exports.default = MarkersPlugin;
455
+ exports["default"] = MarkersPlugin;
340
456
  module.exports = exports.default;
341
457
 
342
458
  /***/ })