wavesurfer.js 6.3.0 → 6.5.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.
- package/LICENSE +1 -1
- package/README.md +36 -47
- package/dist/plugin/wavesurfer.cursor.js +45 -54
- package/dist/plugin/wavesurfer.cursor.js.map +1 -1
- package/dist/plugin/wavesurfer.cursor.min.js +2 -2
- package/dist/plugin/wavesurfer.cursor.min.js.map +1 -1
- package/dist/plugin/wavesurfer.elan.js +24 -51
- package/dist/plugin/wavesurfer.elan.js.map +1 -1
- package/dist/plugin/wavesurfer.elan.min.js +2 -2
- package/dist/plugin/wavesurfer.elan.min.js.map +1 -1
- package/dist/plugin/wavesurfer.markers.js +62 -74
- package/dist/plugin/wavesurfer.markers.js.map +1 -1
- package/dist/plugin/wavesurfer.markers.min.js +2 -2
- package/dist/plugin/wavesurfer.markers.min.js.map +1 -1
- package/dist/plugin/wavesurfer.mediasession.js +8 -16
- package/dist/plugin/wavesurfer.mediasession.js.map +1 -1
- package/dist/plugin/wavesurfer.mediasession.min.js +2 -2
- package/dist/plugin/wavesurfer.mediasession.min.js.map +1 -1
- package/dist/plugin/wavesurfer.microphone.js +48 -63
- package/dist/plugin/wavesurfer.microphone.js.map +1 -1
- package/dist/plugin/wavesurfer.microphone.min.js +2 -2
- package/dist/plugin/wavesurfer.microphone.min.js.map +1 -1
- package/dist/plugin/wavesurfer.minimap.js +20 -69
- package/dist/plugin/wavesurfer.minimap.js.map +1 -1
- package/dist/plugin/wavesurfer.minimap.min.js +2 -2
- package/dist/plugin/wavesurfer.minimap.min.js.map +1 -1
- package/dist/plugin/wavesurfer.playhead.js +6 -30
- package/dist/plugin/wavesurfer.playhead.js.map +1 -1
- package/dist/plugin/wavesurfer.playhead.min.js +2 -2
- package/dist/plugin/wavesurfer.playhead.min.js.map +1 -1
- package/dist/plugin/wavesurfer.regions.js +203 -260
- package/dist/plugin/wavesurfer.regions.js.map +1 -1
- package/dist/plugin/wavesurfer.regions.min.js +2 -2
- package/dist/plugin/wavesurfer.regions.min.js.map +1 -1
- package/dist/plugin/wavesurfer.spectrogram.js +55 -147
- package/dist/plugin/wavesurfer.spectrogram.js.map +1 -1
- package/dist/plugin/wavesurfer.spectrogram.min.js +2 -2
- package/dist/plugin/wavesurfer.spectrogram.min.js.map +1 -1
- package/dist/plugin/wavesurfer.timeline.js +53 -88
- package/dist/plugin/wavesurfer.timeline.js.map +1 -1
- package/dist/plugin/wavesurfer.timeline.min.js +2 -2
- package/dist/plugin/wavesurfer.timeline.min.js.map +1 -1
- package/dist/wavesurfer-html-init.js +34 -54
- package/dist/wavesurfer-html-init.js.map +1 -1
- package/dist/wavesurfer-html-init.min.js +2 -2
- package/dist/wavesurfer-html-init.min.js.map +1 -1
- package/dist/wavesurfer.js +490 -1003
- package/dist/wavesurfer.js.map +1 -1
- package/dist/wavesurfer.min.js +2 -2
- package/dist/wavesurfer.min.js.map +1 -1
- package/package.json +11 -11
- package/src/mediaelement.js +3 -0
- package/src/plugin/cursor/index.js +15 -3
- package/src/plugin/markers/index.js +40 -1
- package/src/plugin/regions/index.js +4 -0
- package/src/plugin/regions/region.js +76 -1
- package/src/util/silence-mode.js +7 -0
- package/src/wavesurfer.js +4 -0
- package/CHANGES.md +0 -482
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wavesurfer.cursor.min.js","mappings":";;;;;CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,aAAc,GAAIH,GACC,iBAAZC,QACdA,QAAoB,WAAID,KAExBD,EAAiB,WAAIA,EAAiB,YAAK,CAAC,EAAGA,EAAiB,WAAU,OAAIC,IAC/E,CATD,CASGK,MAAM,IACT,M,oYCoCqBC,EAAAA,WA0EjB,WAAYC,EAAQC,GAAI,Y,4FAAA,gCAlDR,CACZC,YAAY,EACZC,MAAO,MACPC,MAAO,QACPC,QAAS,OACTC,MAAO,QACPC,OAAQ,EACRC,YAAa,CAAC,EACdC,oBAAqB,CAAC,EACtBC,UAAU,EACVC,eAAe,EACfC,mBAAoB,OAuCA,uBAjCT,SAAAC,GACX,IAAMC,EAAQ,EAAKC,KAAKC,gBAAgBH,EAAG,EAAKI,WAAWjB,OAAOkB,UAC5DC,EAAO,EAAKC,QAAQC,wBACtBC,EAAI,EACJC,EAAI,EAAKH,QAAQI,WAAaV,EAAMW,QAAUN,EAAKO,KACjDC,EAAmB,EAAKC,YAAc,EAAKA,YAAYP,wBAAwBlB,MAAQ,EACzF0B,EAAOV,EAAKW,MAAQhB,EAAMW,QAAUE,EAEpC,EAAK3B,OAAOU,UAAY,EAAKV,OAAOW,gBAEpCW,EAAIR,EAAMiB,SAAWZ,EAAKa,IAAMb,EAAKc,OAAS,IAGlD,EAAKC,qBAAqBX,EAAGD,EAAGO,EACnC,IAmBuB,wBAdR,kBAAM,EAAKM,YAAX,IAcQ,wBATR,kBAAM,EAAKC,YAAX,IAUZC,KAAKpB,WAAahB,EAClBoC,KAAK/B,MAAQL,EAAGc,KAAKT,MACrB+B,KAAKtB,KAAOd,EAAGc,KAMfsB,KAAKC,OAAS,KAMdD,KAAK3B,SAAW,KAMhB2B,KAAKT,YAAc,KAEnBS,KAAKrC,OAASuC,OAAOC,OAAO,CAAC,EAAGH,KAAKI,cAAezC,EACvD,C,8CAED,WACIqC,KAAKjB,QAAUiB,KAAKpB,WAAWyB,OAAOtB,QACtCiB,KAAKC,OAASD,KAAKtB,KAAKC,gBAAgBqB,KAAKjB,QAAQuB,YACjDC,SAASC,cAAc,WACxBR,KAAKpB,WAAWjB,OAAOkB,UAE1BmB,KAAK/B,MAAM+B,KAAKC,OACZC,OAAOC,OACH,CACIM,SAAU,WACVvC,OAAQ8B,KAAKrC,OAAOO,OACpBmB,KAAM,EACNM,IAAK,EACLe,OAAQ,EACR5C,MAAO,IACP6C,QAAS,OACTC,iBAAkBZ,KAAKrC,OAAOM,MAC9B4C,iBAAkBb,KAAKrC,OAAOG,MAC9BgD,iBAAkBd,KAAKrC,OAAOI,MAC9BC,QAASgC,KAAKrC,OAAOK,QACrB+C,cAAe,QAEnBf,KAAKrC,OAAOQ,cAIhB6B,KAAKrC,OAAOU,WACZ2B,KAAK3B,SAAW2B,KAAKtB,KAAKC,gBAAgBqB,KAAKjB,QAAQuB,YACnDC,SAASC,cAAc,cACxBR,KAAKpB,WAAWjB,OAAOkB,UAC1BmB,KAAK/B,MACD+B,KAAK3B,SACL6B,OAAOC,OACH,CACIM,SAAU,WACVvC,OAAQ8B,KAAKrC,OAAOO,OACpBmB,KAAM,EACNM,IAAK,EACLe,OAAQ,EACR5C,MAAO,OACP6C,QAAS,OACT3C,QAASgC,KAAKrC,OAAOK,QACrB+C,cAAe,OACfnB,OAAQ,QAEZI,KAAKrC,OAAOQ,cAIpB6B,KAAKT,YAAcS,KAAKtB,KAAKC,gBAAgBqB,KAAK3B,SAASiC,YACvDC,SAASC,cAAc,QACxBR,KAAKpB,WAAWjB,OAAOkB,UAE1BmB,KAAK/B,MAAM+B,KAAKT,YACZW,OAAOC,OACH,CACIQ,QAAS,SACTI,cAAe,OACfC,OAAQ,OACRC,WAAY,UAEhBjB,KAAKrC,OAAOS,sBAKpB4B,KAAKT,YAAY2B,UAAYlB,KAAKmB,WAAW,IAGjDnB,KAAKjB,QAAQqC,iBAAiB,YAAapB,KAAKqB,cAC5CrB,KAAKrC,OAAOE,aAEZmC,KAAKD,aACLC,KAAKjB,QAAQqC,iBAAiB,aAAcpB,KAAKsB,eACjDtB,KAAKjB,QAAQqC,iBAAiB,aAAcpB,KAAKuB,eAExD,G,kBAKD,WAAO,WACCvB,KAAKpB,WAAW4C,QAChBxB,KAAKyB,WAELzB,KAAKpB,WAAW8C,KAAK,SAAS,kBAAM,EAAKD,UAAX,GAErC,G,qBAKD,WACQzB,KAAKrC,OAAOU,UACZ2B,KAAK3B,SAASsD,SAElB3B,KAAKC,OAAO0B,SACZ3B,KAAKjB,QAAQ6C,oBAAoB,YAAa5B,KAAKqB,cAC/CrB,KAAKrC,OAAOE,aACZmC,KAAKjB,QAAQ6C,oBAAoB,aAAc5B,KAAKsB,eACpDtB,KAAKjB,QAAQ6C,oBAAoB,aAAc5B,KAAKuB,eAE3D,G,kCASD,SAAqBM,EAAMC,GAAoB,IAAdtC,EAAc,wDAI3C,GAHAQ,KAAK/B,MAAM+B,KAAKC,OAAQ,CACpBZ,KAAM,GAAF,OAAKwC,EAAL,QAEJ7B,KAAKrC,OAAOU,SAAU,CACtB,IAAM0D,EAAW/B,KAAKpB,WAAWoD,cAC3BC,EACFjC,KAAKpB,WAAWyB,OAAOvC,MACvBkC,KAAKpB,WAAWjB,OAAOuE,WACrBC,EAAcnC,KAAKpB,WAAWyB,OAAO+B,aAErCC,EACDN,EAAW/B,KAAKpB,WAAWyB,OAAOvC,MAASqE,EAE1CG,EACFC,KAAKC,IAAI,GAAKX,EAAO7B,KAAKjB,QAAQI,YAAc8C,EAAgBF,GAAYM,EAC1EI,EAAczC,KAAKmB,WAAWmB,GACpC,GAAI9C,EAAM,CACN,IAAMkD,EAAa1C,KAAKT,YAAYP,wBAAwBlB,MAC5D+D,GAAQa,CACX,CACD1C,KAAK/B,MAAM+B,KAAK3B,SAAU,CACtBgB,KAAM,GAAF,OAAKwC,EAAL,MACJlC,IAAK,GAAF,OAAKmC,EAAL,QAEP9B,KAAK/B,MAAM+B,KAAKT,YAAa,CACzB0B,WAAY,YAEhBjB,KAAKT,YAAY2B,UAAjB,UAAgCuB,EACnC,CACJ,G,wBAKD,WACIzC,KAAK/B,MAAM+B,KAAKC,OAAQ,CACpBU,QAAS,SAETX,KAAKrC,OAAOU,UACZ2B,KAAK/B,MAAM+B,KAAK3B,SAAU,CACtBsC,QAAS,QAGpB,G,wBAKD,WACIX,KAAK/B,MAAM+B,KAAKC,OAAQ,CACpBU,QAAS,SAETX,KAAKrC,OAAOU,UACZ2B,KAAK/B,MAAM+B,KAAK3B,SAAU,CACtBsC,QAAS,QAGpB,G,wBAQD,SAAWgC,GAGP,OAFAA,EAAaC,MAAMD,GAAc,EAAIA,EAEjC3C,KAAKrC,OAAOY,mBACLyB,KAAKrC,OAAOY,mBAAmBoE,GAEnC,CAACA,GAAYE,KAAI,SAAAC,GAAI,MACxB,CACIP,KAAKQ,MAAOD,EAAO,KAAQ,KAC1B,KAAOP,KAAKQ,MAAMD,EAAO,KAAKE,OAAO,IACrC,MAAQT,KAAKQ,MAAOD,EAAO,EAAK,MAAOE,OAAO,IACjDC,KAAK,IALiB,GAO/B,I,uBAvRD,SAActF,GACV,MAAO,CACHuF,KAAM,SACNC,aAAWxF,IAAUA,EAAOwF,YAAYxF,EAAOwF,UAC/CxF,OAAQA,EACRyF,YAAa,CAAC,EACdC,SAAU3F,EAEjB,I,mFAnBgBA,G,kCC7CjB4F,EAA2B,CAAC,ECEhC,IAAIC,EDCJ,SAASC,EAAoBC,GAE5B,IAAIC,EAAeJ,EAAyBG,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAarG,QAGrB,IAAIC,EAASgG,EAAyBG,GAAY,CAGjDpG,QAAS,CAAC,GAOX,OAHAuG,EAAoBH,GAAUnG,EAAQA,EAAOD,QAASmG,GAG/ClG,EAAOD,OACf,CCnB0BmG,CAAoB,K,UHO9C","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/cursor/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\"][\"cursor\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} CursorPluginParams\n * @property {?boolean} deferInit Set to true to stop auto init in `addPlugin()`\n * @property {boolean} hideOnBlur=true Hide the cursor when the mouse leaves the\n * waveform\n * @property {string} width='1px' The width of the cursor\n * @property {string} color='black' The color of the cursor\n * @property {number|string} opacity='0.25' The opacity of the cursor\n * @property {string} style='solid' The border style of the cursor\n * @property {number} zIndex=3 The z-index of the cursor element\n * @property {object} customStyle An object with custom styles which are applied\n * to the cursor element\n * @property {boolean} showTime=false Show the time on the cursor.\n * @property {object} customShowTimeStyle An object with custom styles which are\n * applied to the cursor time element.\n * @property {boolean} followCursorY=false Use `true` to make the time on\n * the cursor follow the x and the y-position of the mouse. Use `false` to make the\n * it only follow the x-position of the mouse.\n * @property {function} formatTimeCallback Formats the timestamp on the cursor.\n */\n\n/**\n * Displays a thin line at the position of the cursor on the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import CursorPlugin from 'wavesurfer.cursor.js';\n *\n * // commonjs\n * var CursorPlugin = require('wavesurfer.cursor.js');\n *\n * // if you are using <script> tags\n * var CursorPlugin = window.WaveSurfer.cursor;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * CursorPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class CursorPlugin {\n /**\n * Cursor plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {CursorPluginParams} params parameters use to initialise the\n * plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'cursor',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {},\n instance: CursorPlugin\n };\n }\n\n /**\n * @type {CursorPluginParams}\n */\n defaultParams = {\n hideOnBlur: true,\n width: '1px',\n color: 'black',\n opacity: '0.25',\n style: 'solid',\n zIndex: 4,\n customStyle: {},\n customShowTimeStyle: {},\n showTime: false,\n followCursorY: false,\n formatTimeCallback: null\n };\n\n /**\n * @param {object} e Mouse move event\n */\n _onMousemove = e => {\n const event = this.util.withOrientation(e, this.wavesurfer.params.vertical);\n const bbox = this.wrapper.getBoundingClientRect();\n let y = 0;\n let x = this.wrapper.scrollLeft + event.clientX - bbox.left;\n const displayTimeWidth = this.displayTime ? this.displayTime.getBoundingClientRect().width : 0;\n let flip = bbox.right < event.clientX + displayTimeWidth;\n\n if (this.params.showTime && this.params.followCursorY) {\n // follow y-position of the mouse\n y = event.clientY - (bbox.top + bbox.height / 2);\n }\n\n this.updateCursorPosition(x, y, flip);\n };\n\n /**\n * @returns {void}\n */\n _onMouseenter = () => this.showCursor();\n\n /**\n * @returns {void}\n */\n _onMouseleave = () => this.hideCursor();\n\n /**\n * Construct the plugin class. You probably want to use `CursorPlugin.create`\n * instead.\n *\n * @param {CursorPluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.wavesurfer = ws;\n this.style = ws.util.style;\n this.util = ws.util;\n /**\n * The cursor HTML element\n *\n * @type {?HTMLElement}\n */\n this.cursor = null;\n /**\n * displays the time next to the cursor\n *\n * @type {?HTMLElement}\n */\n this.showTime = null;\n /**\n * The html container that will display the time\n *\n * @type {?HTMLElement}\n */\n this.displayTime = null;\n\n this.params = Object.assign({}, this.defaultParams, params);\n }\n\n _onReady() {\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.cursor = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('cursor'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.cursor,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: '0',\n display: 'flex',\n borderRightStyle: this.params.style,\n borderRightWidth: this.params.width,\n borderRightColor: this.params.color,\n opacity: this.params.opacity,\n pointerEvents: 'none'\n },\n this.params.customStyle\n )\n );\n\n if (this.params.showTime) {\n this.showTime = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('showTitle')\n ), this.wavesurfer.params.vertical);\n this.style(\n this.showTime,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: 'auto',\n display: 'flex',\n opacity: this.params.opacity,\n pointerEvents: 'none',\n height: '100%'\n },\n this.params.customStyle\n )\n );\n\n this.displayTime = this.util.withOrientation(this.showTime.appendChild(\n document.createElement('div'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.displayTime,\n Object.assign(\n {\n display: 'inline',\n pointerEvents: 'none',\n margin: 'auto',\n visibility: 'hidden' // initial value will be hidden just for measuring purpose\n },\n this.params.customShowTimeStyle\n )\n );\n\n // initial value to measure display width\n this.displayTime.innerHTML = this.formatTime(0);\n }\n\n this.wrapper.addEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n // ensure elements are hidden initially\n this.hideCursor();\n this.wrapper.addEventListener('mouseenter', this._onMouseenter);\n this.wrapper.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Initialise the plugin (used by the Plugin API)\n */\n init() {\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', () => this._onReady());\n }\n }\n\n /**\n * Destroy the plugin (used by the Plugin API)\n */\n destroy() {\n if (this.params.showTime) {\n this.showTime.remove();\n }\n this.cursor.remove();\n this.wrapper.removeEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n this.wrapper.removeEventListener('mouseenter', this._onMouseenter);\n this.wrapper.removeEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Update the cursor position\n *\n * @param {number} xpos The x offset of the cursor in pixels\n * @param {number} ypos The y offset of the cursor in pixels\n * @param {boolean} flip Flag to flip duration text from right to left\n */\n updateCursorPosition(xpos, ypos, flip = false) {\n this.style(this.cursor, {\n left: `${xpos}px`\n });\n if (this.params.showTime) {\n const duration = this.wavesurfer.getDuration();\n const elementWidth =\n this.wavesurfer.drawer.width /\n this.wavesurfer.params.pixelRatio;\n const scrollWidth = this.wavesurfer.drawer.getScrollX();\n\n const scrollTime =\n (duration / this.wavesurfer.drawer.width) * scrollWidth;\n\n const timeValue =\n Math.max(0, ((xpos - this.wrapper.scrollLeft) / elementWidth) * duration) + scrollTime;\n const formatValue = this.formatTime(timeValue);\n if (flip) {\n const textOffset = this.displayTime.getBoundingClientRect().width;\n xpos -= textOffset;\n }\n this.style(this.showTime, {\n left: `${xpos}px`,\n top: `${ypos}px`\n });\n this.style(this.displayTime, {\n visibility: 'visible'\n });\n this.displayTime.innerHTML = `${formatValue}`;\n }\n }\n\n /**\n * Show the cursor\n */\n showCursor() {\n this.style(this.cursor, {\n display: 'flex'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'flex'\n });\n }\n }\n\n /**\n * Hide the cursor\n */\n hideCursor() {\n this.style(this.cursor, {\n display: 'none'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'none'\n });\n }\n }\n\n /**\n * Format the timestamp for `cursorTime`.\n *\n * @param {number} cursorTime Time in seconds\n * @returns {string} Formatted timestamp\n */\n formatTime(cursorTime) {\n cursorTime = isNaN(cursorTime) ? 0 : cursorTime;\n\n if (this.params.formatTimeCallback) {\n return this.params.formatTimeCallback(cursorTime);\n }\n return [cursorTime].map(time =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2), // seconds\n ('000' + Math.floor((time % 1) * 1000)).slice(-3) // milliseconds\n ].join(':')\n );\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(178);\n"],"names":["root","factory","exports","module","define","amd","self","CursorPlugin","params","ws","hideOnBlur","width","color","opacity","style","zIndex","customStyle","customShowTimeStyle","showTime","followCursorY","formatTimeCallback","e","event","util","withOrientation","wavesurfer","vertical","bbox","wrapper","getBoundingClientRect","y","x","scrollLeft","clientX","left","displayTimeWidth","displayTime","flip","right","clientY","top","height","updateCursorPosition","showCursor","hideCursor","this","cursor","Object","assign","defaultParams","drawer","appendChild","document","createElement","position","bottom","display","borderRightStyle","borderRightWidth","borderRightColor","pointerEvents","margin","visibility","innerHTML","formatTime","addEventListener","_onMousemove","_onMouseenter","_onMouseleave","isReady","_onReady","once","remove","removeEventListener","xpos","ypos","duration","getDuration","elementWidth","pixelRatio","scrollWidth","getScrollX","scrollTime","timeValue","Math","max","formatValue","textOffset","cursorTime","isNaN","map","time","floor","slice","join","name","deferInit","staticProps","instance","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"wavesurfer.cursor.min.js","mappings":"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","sources":["webpack://WaveSurfer/webpack/universalModuleDefinition","webpack://WaveSurfer/./src/plugin/cursor/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\"][\"cursor\"] = factory();\n})(self, () => {\nreturn ","/**\n * @typedef {Object} CursorPluginParams\n * @property {?boolean} deferInit Set to true to stop auto init in `addPlugin()`\n * @property {boolean} hideOnBlur=true Hide the cursor when the mouse leaves the\n * waveform\n * @property {string} width='1px' The width of the cursor\n * @property {string} color='black' The color of the cursor\n * @property {number|string} opacity='0.25' The opacity of the cursor\n * @property {string} style='solid' The border style of the cursor\n * @property {number} zIndex=3 The z-index of the cursor element\n * @property {object} customStyle An object with custom styles which are applied\n * to the cursor element\n * @property {boolean} showTime=false Show the time on the cursor.\n * @property {object} customShowTimeStyle An object with custom styles which are\n * applied to the cursor time element.\n * @property {boolean} followCursorY=false Use `true` to make the time on\n * the cursor follow the x and the y-position of the mouse. Use `false` to make the\n * it only follow the x-position of the mouse.\n * @property {function} formatTimeCallback Formats the timestamp on the cursor.\n * @property {boolean} isDestroyCalled true if called destroy before the ready event fired\n */\n\n/**\n * Displays a thin line at the position of the cursor on the waveform.\n *\n * @implements {PluginClass}\n * @extends {Observer}\n * @example\n * // es6\n * import CursorPlugin from 'wavesurfer.cursor.js';\n *\n * // commonjs\n * var CursorPlugin = require('wavesurfer.cursor.js');\n *\n * // if you are using <script> tags\n * var CursorPlugin = window.WaveSurfer.cursor;\n *\n * // ... initialising wavesurfer with the plugin\n * var wavesurfer = WaveSurfer.create({\n * // wavesurfer options ...\n * plugins: [\n * CursorPlugin.create({\n * // plugin options ...\n * })\n * ]\n * });\n */\nexport default class CursorPlugin {\n /**\n * Cursor plugin definition factory\n *\n * This function must be used to create a plugin definition which can be\n * used by wavesurfer to correctly instantiate the plugin.\n *\n * @param {CursorPluginParams} params parameters use to initialise the\n * plugin\n * @return {PluginDefinition} an object representing the plugin\n */\n static create(params) {\n return {\n name: 'cursor',\n deferInit: params && params.deferInit ? params.deferInit : false,\n params: params,\n staticProps: {},\n instance: CursorPlugin\n };\n }\n\n /**\n * @type {CursorPluginParams}\n */\n defaultParams = {\n hideOnBlur: true,\n width: '1px',\n color: 'black',\n opacity: '0.25',\n style: 'solid',\n zIndex: 4,\n customStyle: {},\n customShowTimeStyle: {},\n showTime: false,\n followCursorY: false,\n formatTimeCallback: null\n };\n\n /**\n * @param {object} e Mouse move event\n */\n _onMousemove = e => {\n const event = this.util.withOrientation(e, this.wavesurfer.params.vertical);\n const bbox = this.wrapper.getBoundingClientRect();\n let y = 0;\n let x = this.wrapper.scrollLeft + event.clientX - bbox.left;\n const displayTimeWidth = this.displayTime ? this.displayTime.getBoundingClientRect().width : 0;\n let flip = bbox.right < event.clientX + displayTimeWidth;\n\n if (this.params.showTime && this.params.followCursorY) {\n // follow y-position of the mouse\n y = event.clientY - (bbox.top + bbox.height / 2);\n }\n\n this.updateCursorPosition(x, y, flip);\n };\n\n /**\n * @returns {void}\n */\n _onMouseenter = () => this.showCursor();\n\n /**\n * @returns {void}\n */\n _onMouseleave = () => this.hideCursor();\n\n /**\n * Construct the plugin class. You probably want to use `CursorPlugin.create`\n * instead.\n *\n * @param {CursorPluginParams} params Plugin parameters\n * @param {object} ws Wavesurfer instance\n */\n constructor(params, ws) {\n this.wavesurfer = ws;\n this.style = ws.util.style;\n this.util = ws.util;\n /**\n * The cursor HTML element\n *\n * @type {?HTMLElement}\n */\n this.cursor = null;\n /**\n * displays the time next to the cursor\n *\n * @type {?HTMLElement}\n */\n this.showTime = null;\n /**\n * The html container that will display the time\n *\n * @type {?HTMLElement}\n */\n this.displayTime = null;\n /**\n * true when `destroy` was called before `ready` event\n * @type {boolean}\n */\n this.isDestroyCalled = false;\n\n this.params = Object.assign({}, this.defaultParams, params);\n }\n\n _onReady() {\n if (this.isDestroyCalled) {\n return;\n }\n this.wrapper = this.wavesurfer.drawer.wrapper;\n this.cursor = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('cursor'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.cursor,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: '0',\n display: 'flex',\n borderRightStyle: this.params.style,\n borderRightWidth: this.params.width,\n borderRightColor: this.params.color,\n opacity: this.params.opacity,\n pointerEvents: 'none'\n },\n this.params.customStyle\n )\n );\n\n if (this.params.showTime) {\n this.showTime = this.util.withOrientation(this.wrapper.appendChild(\n document.createElement('showTitle')\n ), this.wavesurfer.params.vertical);\n this.style(\n this.showTime,\n Object.assign(\n {\n position: 'absolute',\n zIndex: this.params.zIndex,\n left: 0,\n top: 0,\n bottom: 0,\n width: 'auto',\n display: 'flex',\n opacity: this.params.opacity,\n pointerEvents: 'none',\n height: '100%'\n },\n this.params.customStyle\n )\n );\n\n this.displayTime = this.util.withOrientation(this.showTime.appendChild(\n document.createElement('div'),\n ), this.wavesurfer.params.vertical);\n\n this.style(this.displayTime,\n Object.assign(\n {\n display: 'inline',\n pointerEvents: 'none',\n margin: 'auto',\n visibility: 'hidden' // initial value will be hidden just for measuring purpose\n },\n this.params.customShowTimeStyle\n )\n );\n\n // initial value to measure display width\n this.displayTime.innerHTML = this.formatTime(0);\n }\n\n this.wrapper.addEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n // ensure elements are hidden initially\n this.hideCursor();\n this.wrapper.addEventListener('mouseenter', this._onMouseenter);\n this.wrapper.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Initialise the plugin (used by the Plugin API)\n */\n init() {\n if (this.wavesurfer.isReady) {\n this._onReady();\n } else {\n this.wavesurfer.once('ready', () => this._onReady());\n }\n }\n\n /**\n * Destroy the plugin (used by the Plugin API)\n */\n destroy() {\n if (!this.cursorTime || !this.showTime){\n this.isDestroyCalled = true;\n return;\n }\n if (this.params.showTime) {\n this.showTime && this.showTime.remove();\n }\n this.cursor && this.cursor.remove();\n this.wrapper.removeEventListener('mousemove', this._onMousemove);\n if (this.params.hideOnBlur) {\n this.wrapper.removeEventListener('mouseenter', this._onMouseenter);\n this.wrapper.removeEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n /**\n * Update the cursor position\n *\n * @param {number} xpos The x offset of the cursor in pixels\n * @param {number} ypos The y offset of the cursor in pixels\n * @param {boolean} flip Flag to flip duration text from right to left\n */\n updateCursorPosition(xpos, ypos, flip = false) {\n this.style(this.cursor, {\n left: `${xpos}px`\n });\n if (this.params.showTime) {\n const duration = this.wavesurfer.getDuration();\n const elementWidth =\n this.wavesurfer.drawer.width /\n this.wavesurfer.params.pixelRatio;\n const scrollWidth = this.wavesurfer.drawer.getScrollX();\n\n const scrollTime =\n (duration / this.wavesurfer.drawer.width) * scrollWidth;\n\n const timeValue =\n Math.max(0, ((xpos - this.wrapper.scrollLeft) / elementWidth) * duration) + scrollTime;\n const formatValue = this.formatTime(timeValue);\n if (flip) {\n const textOffset = this.displayTime.getBoundingClientRect().width;\n xpos -= textOffset;\n }\n this.style(this.showTime, {\n left: `${xpos}px`,\n top: `${ypos}px`\n });\n this.style(this.displayTime, {\n visibility: 'visible'\n });\n this.displayTime.innerHTML = `${formatValue}`;\n }\n }\n\n /**\n * Show the cursor\n */\n showCursor() {\n this.style(this.cursor, {\n display: 'flex'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'flex'\n });\n }\n }\n\n /**\n * Hide the cursor\n */\n hideCursor() {\n this.style(this.cursor, {\n display: 'none'\n });\n if (this.params.showTime) {\n this.style(this.showTime, {\n display: 'none'\n });\n }\n }\n\n /**\n * Format the timestamp for `cursorTime`.\n *\n * @param {number} cursorTime Time in seconds\n * @returns {string} Formatted timestamp\n */\n formatTime(cursorTime) {\n cursorTime = isNaN(cursorTime) ? 0 : cursorTime;\n if (this.params.formatTimeCallback) {\n return this.params.formatTimeCallback(cursorTime);\n }\n return [cursorTime].map(time =>\n [\n Math.floor((time % 3600) / 60), // minutes\n ('00' + Math.floor(time % 60)).slice(-2), // seconds\n ('000' + Math.floor((time % 1) * 1000)).slice(-3) // milliseconds\n ].join(':')\n );\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(178);\n"],"names":["root","factory","exports","module","define","amd","self","CursorPlugin","params","ws","_this","_classCallCheck","_defineProperty","hideOnBlur","width","color","opacity","style","zIndex","customStyle","customShowTimeStyle","showTime","followCursorY","formatTimeCallback","e","event","util","withOrientation","wavesurfer","vertical","bbox","wrapper","getBoundingClientRect","y","x","scrollLeft","clientX","left","displayTimeWidth","displayTime","flip","right","clientY","top","height","updateCursorPosition","showCursor","hideCursor","this","cursor","isDestroyCalled","Object","assign","defaultParams","key","value","drawer","appendChild","document","createElement","position","bottom","display","borderRightStyle","borderRightWidth","borderRightColor","pointerEvents","margin","visibility","innerHTML","formatTime","addEventListener","_onMousemove","_onMouseenter","_onMouseleave","_this2","isReady","_onReady","once","cursorTime","remove","removeEventListener","xpos","ypos","arguments","length","undefined","concat","duration","getDuration","elementWidth","pixelRatio","scrollWidth","getScrollX","scrollTime","timeValue","Math","max","formatValue","isNaN","map","time","floor","slice","join","name","deferInit","staticProps","instance","default","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* wavesurfer.js elan plugin 6.
|
|
2
|
+
* wavesurfer.js elan plugin 6.5.0 (2023-03-11)
|
|
3
3
|
* https://wavesurfer-js.org
|
|
4
4
|
* @license BSD-3-Clause
|
|
5
5
|
*/
|
|
@@ -29,15 +29,13 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
29
29
|
value: true
|
|
30
30
|
}));
|
|
31
31
|
exports["default"] = void 0;
|
|
32
|
-
|
|
32
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
33
33
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
34
|
-
|
|
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
|
-
|
|
34
|
+
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, _toPropertyKey(descriptor.key), descriptor); } }
|
|
37
35
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
38
|
-
|
|
39
|
-
function
|
|
40
|
-
|
|
36
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
37
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
38
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
41
39
|
/**
|
|
42
40
|
* @typedef {Object} ElanPluginParams
|
|
43
41
|
* @property {string|HTMLElement} container CSS selector or HTML element where
|
|
@@ -47,7 +45,6 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
47
45
|
* @property {?Object} tiers If set only shows the data tiers with the `TIER_ID`
|
|
48
46
|
* in this map.
|
|
49
47
|
*/
|
|
50
|
-
|
|
51
48
|
/**
|
|
52
49
|
* Downloads and renders ELAN audio transcription documents alongside the
|
|
53
50
|
* waveform.
|
|
@@ -77,26 +74,21 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
77
74
|
var ElanPlugin = /*#__PURE__*/function () {
|
|
78
75
|
function ElanPlugin(params, ws) {
|
|
79
76
|
_classCallCheck(this, ElanPlugin);
|
|
80
|
-
|
|
81
77
|
_defineProperty(this, "Types", {
|
|
82
78
|
ALIGNABLE_ANNOTATION: 'ALIGNABLE_ANNOTATION',
|
|
83
79
|
REF_ANNOTATION: 'REF_ANNOTATION'
|
|
84
80
|
});
|
|
85
|
-
|
|
86
81
|
this.data = null;
|
|
87
82
|
this.params = params;
|
|
88
83
|
this.container = 'string' == typeof params.container ? document.querySelector(params.container) : params.container;
|
|
89
|
-
|
|
90
84
|
if (!this.container) {
|
|
91
85
|
throw Error('No container for ELAN');
|
|
92
86
|
}
|
|
93
87
|
}
|
|
94
|
-
|
|
95
88
|
_createClass(ElanPlugin, [{
|
|
96
89
|
key: "init",
|
|
97
90
|
value: function init() {
|
|
98
91
|
this.bindClick();
|
|
99
|
-
|
|
100
92
|
if (this.params.url) {
|
|
101
93
|
this.load(this.params.url);
|
|
102
94
|
}
|
|
@@ -111,12 +103,9 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
111
103
|
key: "load",
|
|
112
104
|
value: function load(url) {
|
|
113
105
|
var _this = this;
|
|
114
|
-
|
|
115
106
|
this.loadXML(url, function (xml) {
|
|
116
107
|
_this.data = _this.parseElan(xml);
|
|
117
|
-
|
|
118
108
|
_this.render();
|
|
119
|
-
|
|
120
109
|
_this.fireEvent('ready', _this.data);
|
|
121
110
|
});
|
|
122
111
|
}
|
|
@@ -135,7 +124,6 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
135
124
|
key: "parseElan",
|
|
136
125
|
value: function parseElan(xml) {
|
|
137
126
|
var _this2 = this;
|
|
138
|
-
|
|
139
127
|
var _forEach = Array.prototype.forEach;
|
|
140
128
|
var _map = Array.prototype.map;
|
|
141
129
|
var data = {
|
|
@@ -152,17 +140,14 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
152
140
|
data.media.type = media.getAttribute('MIME_TYPE');
|
|
153
141
|
var timeSlots = xml.querySelectorAll('TIME_ORDER TIME_SLOT');
|
|
154
142
|
var timeOrder = {};
|
|
155
|
-
|
|
156
143
|
_forEach.call(timeSlots, function (slot) {
|
|
157
|
-
var value = parseFloat(slot.getAttribute('TIME_VALUE'));
|
|
158
|
-
|
|
144
|
+
var value = parseFloat(slot.getAttribute('TIME_VALUE'));
|
|
145
|
+
// If in milliseconds, convert to seconds with rounding
|
|
159
146
|
if (inMilliseconds) {
|
|
160
147
|
value = Math.round(value * 1e2) / 1e5;
|
|
161
148
|
}
|
|
162
|
-
|
|
163
149
|
timeOrder[slot.getAttribute('TIME_SLOT_ID')] = value;
|
|
164
150
|
});
|
|
165
|
-
|
|
166
151
|
data.tiers = _map.call(xml.querySelectorAll('TIER'), function (tier) {
|
|
167
152
|
return {
|
|
168
153
|
id: tier.getAttribute('TIER_ID'),
|
|
@@ -175,37 +160,36 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
175
160
|
ref: node.getAttribute('ANNOTATION_REF'),
|
|
176
161
|
value: node.querySelector('ANNOTATION_VALUE').textContent.trim()
|
|
177
162
|
};
|
|
178
|
-
|
|
179
163
|
if (_this2.Types.ALIGNABLE_ANNOTATION == annot.type) {
|
|
180
164
|
// Add start & end to alignable annotation
|
|
181
165
|
annot.start = timeOrder[node.getAttribute('TIME_SLOT_REF1')];
|
|
182
|
-
annot.end = timeOrder[node.getAttribute('TIME_SLOT_REF2')];
|
|
183
|
-
|
|
166
|
+
annot.end = timeOrder[node.getAttribute('TIME_SLOT_REF2')];
|
|
167
|
+
// Add to the list of alignable annotations
|
|
184
168
|
data.alignableAnnotations.push(annot);
|
|
185
|
-
}
|
|
186
|
-
|
|
169
|
+
}
|
|
187
170
|
|
|
171
|
+
// Additionally, put into the flat map of all annotations
|
|
188
172
|
data.annotations[annot.id] = annot;
|
|
189
173
|
return annot;
|
|
190
174
|
})
|
|
191
175
|
};
|
|
192
|
-
});
|
|
176
|
+
});
|
|
193
177
|
|
|
178
|
+
// Create JavaScript references between annotations
|
|
194
179
|
data.tiers.forEach(function (tier) {
|
|
195
180
|
tier.annotations.forEach(function (annot) {
|
|
196
181
|
if (null != annot.ref) {
|
|
197
182
|
annot.reference = data.annotations[annot.ref];
|
|
198
183
|
}
|
|
199
184
|
});
|
|
200
|
-
});
|
|
185
|
+
});
|
|
201
186
|
|
|
187
|
+
// Sort alignable annotations by start & end
|
|
202
188
|
data.alignableAnnotations.sort(function (a, b) {
|
|
203
189
|
var d = a.start - b.start;
|
|
204
|
-
|
|
205
190
|
if (d == 0) {
|
|
206
191
|
d = b.end - a.end;
|
|
207
192
|
}
|
|
208
|
-
|
|
209
193
|
return d;
|
|
210
194
|
});
|
|
211
195
|
data.length = data.alignableAnnotations.length;
|
|
@@ -215,17 +199,15 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
215
199
|
key: "render",
|
|
216
200
|
value: function render() {
|
|
217
201
|
var _this3 = this;
|
|
218
|
-
|
|
219
202
|
// apply tiers filter
|
|
220
203
|
var tiers = this.data.tiers;
|
|
221
|
-
|
|
222
204
|
if (this.params.tiers) {
|
|
223
205
|
tiers = tiers.filter(function (tier) {
|
|
224
206
|
return tier.id in _this3.params.tiers;
|
|
225
207
|
});
|
|
226
|
-
}
|
|
227
|
-
|
|
208
|
+
}
|
|
228
209
|
|
|
210
|
+
// denormalize references to alignable annotations
|
|
229
211
|
var backRefs = {};
|
|
230
212
|
var indeces = {};
|
|
231
213
|
tiers.forEach(function (tier, index) {
|
|
@@ -234,7 +216,6 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
234
216
|
if (!(annot.reference.id in backRefs)) {
|
|
235
217
|
backRefs[annot.ref] = {};
|
|
236
218
|
}
|
|
237
|
-
|
|
238
219
|
backRefs[annot.ref][index] = annot;
|
|
239
220
|
indeces[index] = true;
|
|
240
221
|
}
|
|
@@ -243,11 +224,13 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
243
224
|
indeces = Object.keys(indeces).sort();
|
|
244
225
|
this.renderedAlignable = this.data.alignableAnnotations.filter(function (alignable) {
|
|
245
226
|
return backRefs[alignable.id];
|
|
246
|
-
});
|
|
227
|
+
});
|
|
247
228
|
|
|
229
|
+
// table
|
|
248
230
|
var table = this.table = document.createElement('table');
|
|
249
|
-
table.className = 'wavesurfer-annotations';
|
|
231
|
+
table.className = 'wavesurfer-annotations';
|
|
250
232
|
|
|
233
|
+
// head
|
|
251
234
|
var thead = document.createElement('thead');
|
|
252
235
|
var headRow = document.createElement('tr');
|
|
253
236
|
thead.appendChild(headRow);
|
|
@@ -261,14 +244,13 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
261
244
|
var th = document.createElement('th');
|
|
262
245
|
th.className = 'wavesurfer-tier-' + tier.id;
|
|
263
246
|
th.textContent = tier.id;
|
|
264
|
-
|
|
265
247
|
if (_this3.params.tiers) {
|
|
266
248
|
th.style.width = _this3.params.tiers[tier.id];
|
|
267
249
|
}
|
|
268
|
-
|
|
269
250
|
headRow.appendChild(th);
|
|
270
|
-
});
|
|
251
|
+
});
|
|
271
252
|
|
|
253
|
+
// body
|
|
272
254
|
var tbody = document.createElement('tbody');
|
|
273
255
|
table.appendChild(tbody);
|
|
274
256
|
this.renderedAlignable.forEach(function (alignable) {
|
|
@@ -284,7 +266,6 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
284
266
|
var tier = tiers[index];
|
|
285
267
|
var td = document.createElement('td');
|
|
286
268
|
var annotation = backRef[index];
|
|
287
|
-
|
|
288
269
|
if (annotation) {
|
|
289
270
|
td.id = 'wavesurfer-annotation-' + annotation.id;
|
|
290
271
|
td.dataset.ref = alignable.id;
|
|
@@ -292,7 +273,6 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
292
273
|
td.dataset.end = alignable.end;
|
|
293
274
|
td.textContent = annotation.value;
|
|
294
275
|
}
|
|
295
|
-
|
|
296
276
|
td.className = 'wavesurfer-tier-' + tier.id;
|
|
297
277
|
row.appendChild(td);
|
|
298
278
|
});
|
|
@@ -304,19 +284,15 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
304
284
|
key: "bindClick",
|
|
305
285
|
value: function bindClick() {
|
|
306
286
|
var _this4 = this;
|
|
307
|
-
|
|
308
287
|
this._onClick = function (e) {
|
|
309
288
|
var ref = e.target.dataset.ref;
|
|
310
|
-
|
|
311
289
|
if (null != ref) {
|
|
312
290
|
var annot = _this4.data.annotations[ref];
|
|
313
|
-
|
|
314
291
|
if (annot) {
|
|
315
292
|
_this4.fireEvent('select', annot.start, annot.end);
|
|
316
293
|
}
|
|
317
294
|
}
|
|
318
295
|
};
|
|
319
|
-
|
|
320
296
|
this.container.addEventListener('click', this._onClick);
|
|
321
297
|
}
|
|
322
298
|
}, {
|
|
@@ -328,7 +304,6 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
328
304
|
result = annotation;
|
|
329
305
|
return true;
|
|
330
306
|
}
|
|
331
|
-
|
|
332
307
|
return false;
|
|
333
308
|
});
|
|
334
309
|
return result;
|
|
@@ -359,10 +334,8 @@ var ElanPlugin = /*#__PURE__*/function () {
|
|
|
359
334
|
};
|
|
360
335
|
}
|
|
361
336
|
}]);
|
|
362
|
-
|
|
363
337
|
return ElanPlugin;
|
|
364
338
|
}();
|
|
365
|
-
|
|
366
339
|
exports["default"] = ElanPlugin;
|
|
367
340
|
module.exports = exports.default;
|
|
368
341
|
|
|
@@ -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","_classCallCheck","_defineProperty","ALIGNABLE_ANNOTATION","REF_ANNOTATION","data","container","document","querySelector","Error","_createClass","key","value","init","bindClick","url","load","destroy","removeEventListener","_onClick","removeChild","table","_this","loadXML","xml","parseElan","render","fireEvent","callback","xhr","XMLHttpRequest","open","responseType","send","addEventListener","e","target","responseXML","_this2","_forEach","Array","prototype","forEach","_map","map","media","timeOrder","tiers","annotations","alignableAnnotations","header","inMilliseconds","getAttribute","type","timeSlots","querySelectorAll","call","slot","parseFloat","Math","round","tier","id","linguisticTypeRef","defaultLocale","node","annot","nodeName","ref","textContent","trim","Types","start","end","push","reference","sort","a","b","d","length","_this3","filter","backRefs","indeces","index","Object","keys","renderedAlignable","alignable","createElement","className","thead","headRow","appendChild","th","style","width","tbody","row","td","toFixed","backRef","annotation","dataset","innerHTML","_this4","getRenderedAnnotation","time","result","some","getAnnotationNode","getElementById","create","name","deferInit","instance","exports","default","module"],"sourceRoot":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* wavesurfer.js elan plugin 6.
|
|
2
|
+
* wavesurfer.js elan plugin 6.5.0 (2023-03-11)
|
|
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())}(self,(()=>(()=>{"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
|
|
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,(()=>(()=>{"use strict";var e={375:(e,t)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(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,a(r.key),r)}}function a(e){var t=function(e,t){if("object"!==n(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!==n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===n(t)?t:String(t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function(){function e(t,n){var r,i,o;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=this,o={ALIGNABLE_ANNOTATION:"ALIGNABLE_ANNOTATION",REF_ANNOTATION:"REF_ANNOTATION"},(i=a(i="Types"))in r?Object.defineProperty(r,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[i]=o,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,n,i;return t=e,i=[{key:"create",value:function(t){return{name:"elan",deferInit:!(!t||!t.deferInit)&&t.deferInit,params:t,instance:e}}}],(n=[{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 u=e.querySelectorAll("TIME_ORDER TIME_SLOT"),s={};return n.call(u,(function(e){var t=parseFloat(e.getAttribute("TIME_VALUE"));o&&(t=Math.round(100*t)/1e5),s[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=s[e.getAttribute("TIME_SLOT_REF1")],n.end=s[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 u=document.createElement("tbody");a.appendChild(u),this.renderedAlignable.forEach((function(e){var a=document.createElement("tr");a.id="wavesurfer-alignable-"+e.id,u.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)}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=i,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,"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","_classCallCheck","ALIGNABLE_ANNOTATION","REF_ANNOTATION","this","data","container","document","querySelector","Error","key","value","name","deferInit","instance","bindClick","url","load","removeEventListener","_onClick","removeChild","table","_this","loadXML","xml","parseElan","render","fireEvent","callback","xhr","XMLHttpRequest","open","responseType","send","addEventListener","e","target","responseXML","_this2","_forEach","Array","prototype","forEach","_map","map","media","timeOrder","tiers","annotations","alignableAnnotations","header","inMilliseconds","getAttribute","type","timeSlots","querySelectorAll","call","slot","parseFloat","Math","round","tier","id","linguisticTypeRef","defaultLocale","node","annot","nodeName","ref","textContent","trim","Types","start","end","push","reference","sort","a","b","d","length","_this3","filter","backRefs","indeces","index","Object","keys","renderedAlignable","alignable","createElement","className","thead","headRow","appendChild","th","style","width","tbody","row","td","toFixed","backRef","annotation","dataset","innerHTML","_this4","time","result","some","getElementById","default","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
|