diff --git a/.eslintrc.json b/.eslintrc.json index dd524c91..b99400c2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -7,6 +7,9 @@ "no-trailing-spaces": 2, "no-mixed-spaces-and-tabs": 2, "no-multi-spaces": 2, + "no-tabs": 2, + "no-extra-bind": 2, + "eqeqeq": 2, "indent": [ 2, 4, @@ -33,6 +36,34 @@ ], "keyword-spacing": ["error", { "before": true }], "space-infix-ops": 2, - "prefer-arrow-callback": 2 - } + "prefer-arrow-callback": 2, + "valid-jsdoc": [2, { + "requireReturn": false, + "requireReturnType": false + }], + "require-jsdoc": 2, + "no-console": 2, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-extra-semi": 2, + "no-fallthrough": 2, + "use-isnan": 2, + "valid-typeof": 2, + "no-var": 2 + }, + "overrides": [ + { + "files": ["test-*.js", "*.spec.js", "test-helpers.js"], + "rules": { + "valid-jsdoc": 0, + "require-jsdoc": 0 + } + }, + { + "files": ["build-config/**/*.js"], + "rules": { + "no-console": 0 + } + } + ] } diff --git a/.jsdoc.json b/.jsdoc.json new file mode 100644 index 00000000..d1634f11 --- /dev/null +++ b/.jsdoc.json @@ -0,0 +1,18 @@ +{ + "opts": { + "template": "node_modules/tui-jsdoc-template", + "encoding": "utf8", + "destination": "./docs/", + "recurse": true, + "package": "./package.json", + "readme": "./README.md" + }, + "templates": { + "name": "videojs-wavesurfer", + "default": { + "layoutFile": "./examples/layout.tmpl" + } + }, + "plugins": ["plugins/markdown"] +} + diff --git a/README.md b/README.md index 8db51be0..def7a781 100644 --- a/README.md +++ b/README.md @@ -373,6 +373,12 @@ npm run start This will watch the source directory and rebuild when any changes are detected. It will also serve the files on http://127.0.0.1:8080. +Generate the API documentation (placed in the `docs` directory): + +``` +npm run docs +``` + All commands for development are listed in the `package.json` file and are run using: diff --git a/build-config/fragments/common.js b/build-config/fragments/common.js index d29f1ae9..e9c27ca1 100644 --- a/build-config/fragments/common.js +++ b/build-config/fragments/common.js @@ -9,36 +9,35 @@ const moment = require('moment'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const time = moment().format('YYYY'); +const rootDir = path.resolve(__dirname, '..', '..'); const pckg = require(path.join(__dirname, '..', '..', 'package.json')); // add JS banner with copyright and version info -var jsBanner = `${pckg.name} +let jsBanner = `${pckg.name} @version ${pckg.version} @see ${pckg.homepage} @copyright 2014-${time} ${pckg.author} @license ${pckg.license}`; -var jsBannerPlugin = new webpack.BannerPlugin({ +let jsBannerPlugin = new webpack.BannerPlugin({ banner: jsBanner, test: /\.js$/ }); // add CSS banner with version info -var cssBanner = `/*! +let cssBanner = `/*! Default styles for ${pckg.name} ${pckg.version} */`; -var cssBannerPlugin = new webpack.BannerPlugin({ +let cssBannerPlugin = new webpack.BannerPlugin({ banner: cssBanner, raw: true, test: /\.css$/ }); // inject JS version number -var jsVersionPlugin = new webpack.DefinePlugin({ +let jsVersionPlugin = new webpack.DefinePlugin({ '__VERSION__': JSON.stringify(pckg.version) }); -var rootDir = path.resolve(__dirname, '..', '..'); - module.exports = { context: rootDir, output: { diff --git a/examples/layout.tmpl b/examples/layout.tmpl new file mode 100644 index 00000000..7f4fe656 --- /dev/null +++ b/examples/layout.tmpl @@ -0,0 +1,124 @@ + + + + + + + <?js= title ?> + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + diff --git a/package-lock.json b/package-lock.json index e176120b..8c2b6aad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2264,6 +2264,84 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "cheerio": { + "version": "0.22.0", + "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6" + } + }, + "readable-stream": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", + "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "chokidar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", @@ -3587,7 +3665,6 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, - "optional": true, "requires": { "domelementtype": "1" } @@ -7521,10 +7598,13 @@ } }, "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz", + "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==", + "dev": true, + "requires": { + "jasmine-core": "^3.3" + } }, "karma-jasmine-matchers": { "version": "3.8.3", @@ -7766,6 +7846,12 @@ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", "dev": true }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -7778,36 +7864,90 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, "lodash.mergewith": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", "dev": true }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", "dev": true }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -8192,9 +8332,9 @@ } }, "mini-css-extract-plugin": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.4.tgz", - "integrity": "sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz", + "integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -13313,6 +13453,15 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tui-jsdoc-template": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tui-jsdoc-template/-/tui-jsdoc-template-1.2.2.tgz", + "integrity": "sha512-oqw0IYaot86VJ2owKBozJnilgta0Z55x8r9PeHj7vb+jDoSvJGRUQUcgs56SZh9HE20fx54Pe75p84X85/ygLA==", + "dev": true, + "requires": { + "cheerio": "^0.22.0" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -14703,9 +14852,9 @@ } }, "webrtc-adapter": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-6.4.6.tgz", - "integrity": "sha512-b2Kp7aPDc1y8qZkTWEaPN3BRqrrhObJeqNgu0i84HrkVFxzAJDiR2wU/4dK/hN7LvNYjvSQ/N7iN8aiEZ6qkLw==", + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-6.4.8.tgz", + "integrity": "sha512-YM8yl545c/JhYcjGHgaCoA7jRK/KZuMwEDFeP2AcP0Auv5awEd+gZE0hXy9z7Ed3p9HvAXp8jdbe+4ESb1zxAw==", "dev": true, "requires": { "rtcpeerconnection-shim": "^1.2.14", diff --git a/package.json b/package.json index e945c38e..67709347 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "build:dev": "webpack --config ./build-config/webpack.dev.main.js", "build:min": "webpack --config ./build-config/webpack.prod.main.js", "docs": "npm-run-all docs:*", - "docs:api": "jsdoc src/js -r -d docs/api", + "docs:api": "jsdoc src/js -c .jsdoc.json", "lint": "npm-run-all lint:*", "lint:js": "eslint src/js test build-config", "lint:html": "htmlhint examples", @@ -73,12 +73,12 @@ "karma-edge-launcher": "^0.4.2", "karma-firefox-launcher": "^1.1.0", "karma-host-environment": "^1.1.6", - "karma-jasmine": "^1.1.2", + "karma-jasmine": "^2.0.1", "karma-jasmine-matchers": "^3.8.3", "karma-safari-launcher": "^1.0.0", "karma-verbose-reporter": "0.0.6", "karma-webpack": "^4.0.0-beta.0", - "mini-css-extract-plugin": "^0.4.4", + "mini-css-extract-plugin": "^0.4.5", "moment": "^2.22.2", "node-sass": "^4.10.0", "npm-run-all": "^4.1.3", @@ -87,10 +87,11 @@ "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "terser-webpack-plugin": "^1.1.0", + "tui-jsdoc-template": "^1.2.2", "webpack": "^4.26.0", "webpack-cli": "^3.1.2", "webpack-dev-server": "^3.1.10", "webpack-merge": "^4.1.4", - "webrtc-adapter": "^6.4.6" + "webrtc-adapter": "^6.4.8" } } diff --git a/src/js/utils/log.js b/src/js/utils/log.js index 6a4dd5ab..b9fbb0be 100644 --- a/src/js/utils/log.js +++ b/src/js/utils/log.js @@ -8,6 +8,12 @@ const WARN = 'warn'; /** * Log message (if the debug option is enabled). + * + * @private + * @param {Array} args - The arguments to be passed to the matching console + * method. + * @param {string} logType - The name of the console method to use. + * @param {boolean} debug - Whether or not the debug option is enabled or not. */ const log = function(args, logType, debug) { diff --git a/src/js/videojs.wavesurfer.js b/src/js/videojs.wavesurfer.js index 93b52e17..5b91f88b 100644 --- a/src/js/videojs.wavesurfer.js +++ b/src/js/videojs.wavesurfer.js @@ -20,14 +20,14 @@ const wavesurferClassName = 'vjs-wavedisplay'; /** * Draw a waveform for audio and video files in a video.js player. * - * @class Wavesurfer - * @extends videojs.Plugin + * @class + * @augments videojs.Plugin */ class Wavesurfer extends Plugin { /** * The constructor function for the class. * - * @param {(videojs.Player|Object)} player + * @param {(videojs.Player|Object)} player - video.js Player object. * @param {Object} options - Player options. */ constructor(player, options) { @@ -65,6 +65,8 @@ class Wavesurfer extends Plugin { /** * Player UI is ready: customize controls. + * + * @private */ initialize() { // hide big play button @@ -173,8 +175,9 @@ class Wavesurfer extends Plugin { /** * Initializes the waveform options. * - * @param {Object} surferOpts - Plugin options. * @private + * @param {Object} surferOpts - Plugin options. + * @returns {Object} - Updated `surferOpts` object. */ parseOptions(surferOpts) { let rect = this.player.el_.getBoundingClientRect(); @@ -275,7 +278,7 @@ class Wavesurfer extends Plugin { * * @param {string|blob|file} url - Either the URL of the audio file, * a Blob or a File object. - * @param {string|?number[]|number[][]} peaks - Either the URL of peaks + * @param {string|number[]} peaks - Either the URL of peaks * data for the audio file, or an array with peaks data. */ load(url, peaks) { @@ -437,12 +440,12 @@ class Wavesurfer extends Plugin { /** * Save waveform image as data URI. * - * The default format is 'image/png'. Other supported types are - * 'image/jpeg' and 'image/webp'. + * The default format is `'image/png'`. Other supported types are + * `'image/jpeg'` and `'image/webp'`. * * @param {string} [format=image/png] - String indicating the image format. * @param {number} [quality=1] - Number between 0 and 1 indicating image - * quality if the requested type is 'image/jpeg' or 'image/webp'. + * quality if the requested type is `'image/jpeg'` or `'image/webp'`. * @returns {string} The data URI of the image data. */ exportImage(format, quality) { @@ -452,7 +455,7 @@ class Wavesurfer extends Plugin { /** * Change the audio output device. * - * @param {string} sinkId - Id of audio output device. + * @param {string} deviceId - Id of audio output device. */ setAudioOutput(deviceId) { if (deviceId) { @@ -472,6 +475,8 @@ class Wavesurfer extends Plugin { * Get the current time (in seconds) of the stream during playback. * * Returns 0 if no stream is available (yet). + * + * @returns {float} Current time of the stream. */ getCurrentTime() { let currentTime = this.surfer.getCurrentTime(); @@ -520,6 +525,8 @@ class Wavesurfer extends Plugin { * Get the duration of the stream in seconds. * * Returns 0 if no stream is available (yet). + * + * @returns {float} Duration of the stream. */ getDuration() { let duration = this.surfer.getDuration(); @@ -689,7 +696,7 @@ class Wavesurfer extends Plugin { onScreenChange() { // execute with tiny delay so the player element completes // rendering and correct dimensions are reported - var fullscreenDelay = this.player.setInterval(() => { + let fullscreenDelay = this.player.setInterval(() => { let isFullscreen = this.player.isFullscreen(); let newWidth, newHeight; if (!isFullscreen) { @@ -765,7 +772,12 @@ class Wavesurfer extends Plugin { } /** + * Log message to console (if the debug option is enabled). + * * @private + * @param {Array} args - The arguments to be passed to the matching console + * method. + * @param {string} logType - The name of the console method to use. */ log(args, logType) { log(args, logType, this.debug); diff --git a/test/fluid.spec.js b/test/fluid.spec.js index 540512f0..cbbdbbc1 100644 --- a/test/fluid.spec.js +++ b/test/fluid.spec.js @@ -8,7 +8,7 @@ import TestHelpers from './test-helpers.js'; /** @test {Wavesurfer} */ describe('Wavesurfer Fluid', () => { - var player; + let player; beforeEach(() => { // create new player @@ -23,7 +23,7 @@ describe('Wavesurfer Fluid', () => { } } }; - var tag = TestHelpers.makeTag('audio', 'fluidAudio'); + let tag = TestHelpers.makeTag('audio', 'fluidAudio'); player = TestHelpers.makePlayer(options, tag); }); diff --git a/test/live.spec.js b/test/live.spec.js index 4dc30e15..09bbdcda 100644 --- a/test/live.spec.js +++ b/test/live.spec.js @@ -6,7 +6,7 @@ import TestHelpers from './test-helpers.js'; /** @test {Wavesurfer} */ describe('Wavesurfer Live', () => { - var player; + let player; afterEach(() => { // delete player @@ -31,7 +31,7 @@ describe('Wavesurfer Live', () => { /** @test {Wavesurfer} */ it('throws error when microphone plugin is missing', () => { - var plugin = WaveSurfer.microphone; + let plugin = WaveSurfer.microphone; WaveSurfer.microphone = undefined; player = TestHelpers.makeLivePlayer(); diff --git a/test/options.spec.js b/test/options.spec.js index 3ba2f6fd..1fc0bb90 100644 --- a/test/options.spec.js +++ b/test/options.spec.js @@ -6,7 +6,7 @@ import TestHelpers from './test-helpers.js'; /** @test {Wavesurfer} */ describe('Wavesurfer options', () => { - var player; + let player; afterEach(() => { // delete player diff --git a/test/test-helpers.js b/test/test-helpers.js index e9f1533e..0554e58a 100644 --- a/test/test-helpers.js +++ b/test/test-helpers.js @@ -53,7 +53,7 @@ const TestHelpers = { document.getElementsByTagName('body')[0].appendChild(elementTag); // default options - var opts = mergeOptions({ + let opts = mergeOptions({ controls: true, autoplay: false, fluid: false, @@ -81,8 +81,8 @@ const TestHelpers = { * Create a test player with the microphone plugin enabled. */ makeLivePlayer() { - var tag = TestHelpers.makeTag('audio', 'liveAudio'); - var opts = { + let tag = TestHelpers.makeTag('audio', 'liveAudio'); + let opts = { plugins: { wavesurfer: { src: 'live', diff --git a/test/tracks.spec.js b/test/tracks.spec.js index 815dfc15..d595d2cc 100644 --- a/test/tracks.spec.js +++ b/test/tracks.spec.js @@ -7,7 +7,7 @@ import TestHelpers from './test-helpers.js'; /** @test {Wavesurfer} */ describe('Wavesurfer TextTracks', () => { - var player; + let player; beforeEach(() => { // create audio element with nested text track element diff --git a/test/videojs.wavesurfer.spec.js b/test/videojs.wavesurfer.spec.js index 56eacda5..577c847f 100644 --- a/test/videojs.wavesurfer.spec.js +++ b/test/videojs.wavesurfer.spec.js @@ -10,8 +10,8 @@ import Wavesurfer from '../src/js/videojs.wavesurfer.js'; /** @test {Wavesurfer} */ describe('Wavesurfer', () => { - var player; - var originalTimeout; + let player; + let originalTimeout; beforeEach(() => { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;