diff --git a/app/assets/main.css b/app/assets/main.css
new file mode 100644
index 0000000..1a40eac
--- /dev/null
+++ b/app/assets/main.css
@@ -0,0 +1,80 @@
+body {
+ all: unset;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+main {
+ flex-grow: 1;
+ display: flex;
+}
+
+#controls {
+ margin: 20px;
+ display: flex;
+ flex-flow: column;
+ justify-content: center;
+ align-items: center;
+}
+
+#container {
+ flex-grow: 1;
+ margin: 20px;
+}
+
+button#playpause {
+ border: none;
+ background: none;
+ cursor: pointer;
+ font-size: 64px;
+ margin: 8px;
+ vertical-align: middle;
+ transition: all 50ms;
+}
+
+button#playpause:hover,
+button#playpause:focus {
+ filter: brightness(120%);
+ outline: none;
+}
+
+button#playpause:active {
+ transform: translate(1px, 1px);
+}
+
+label#volume-label {
+ font-size: 30px;
+ vertical-align: middle;
+}
+
+input#volume {
+ vertical-align: middle;
+ width: 80px;
+ height: 30px;
+ border-radius: 3px;
+ background: #eee;
+ cursor: pointer;
+ -webkit-appearance: none;
+}
+
+input#volume::-moz-range-thumb {
+ height: 30px;
+ width: 20px;
+ background-color: #999;
+ border-radius: 3px;
+}
+
+input#volume::-webkit-slider-thumb {
+ height: 30px;
+ width: 20px;
+ background-color: #999;
+ border-radius: 3px;
+ -webkit-appearance: none;
+}
+
+input#volume:hover,
+input#volume:focus {
+ filter: brightness(102%);
+ outline: none;
+}
diff --git a/app/assets/waveform-playlist.css b/app/assets/waveform-playlist.css
new file mode 100644
index 0000000..9d8ea52
--- /dev/null
+++ b/app/assets/waveform-playlist.css
@@ -0,0 +1,160 @@
+.playlist {
+ margin: 2em 0; }
+ .playlist .playlist-time-scale {
+ height: 30px; }
+ .playlist .playlist-tracks {
+ background: #E0EFF1; }
+ .playlist .channel {
+ background: grey; }
+ .playlist .channel-progress {
+ background: orange; }
+ .playlist .cursor {
+ background: black; }
+ .playlist .wp-fade {
+ background-color: rgba(0, 0, 0, 0.1); }
+ .playlist .state-cursor,
+ .playlist .state-select {
+ cursor: text; }
+ .playlist .state-fadein {
+ cursor: w-resize; }
+ .playlist .state-fadeout {
+ cursor: e-resize; }
+ .playlist .state-shift {
+ cursor: ew-resize; }
+ .playlist .selection.point {
+ background: red; }
+ .playlist .selection.segment {
+ background: rgba(0, 0, 0, 0.1); }
+ .playlist .channel-wrapper.silent .channel {
+ opacity: 0.3; }
+ .playlist .controls {
+ background: white;
+ text-align: center; }
+ .playlist .controls header {
+ overflow: hidden;
+ color: white;
+ background-color: blueviolet;
+ margin-bottom: 1em;
+ height: 20px; }
+ .playlist .controls label {
+ margin: 1em auto;
+ width: 100%;
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ transform: translate(0, 0); }
+ .playlist .controls label:before {
+ content: "\f027";
+ color: black;
+ font-size: 18px;
+ padding-right: 5px;
+ -moz-osx-font-smoothing: grayscale; }
+ .playlist .controls label:after {
+ content: "\f028";
+ color: black;
+ font-size: 18px;
+ padding-left: 5px; }
+ .playlist .controls input[type=range] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ display: inline-block;
+ width: 75%; }
+ .playlist .controls input[type=range]::-webkit-slider-runnable-track {
+ height: 8px;
+ background: #ddd;
+ border: none;
+ border-radius: 3px;
+ padding: 1px; }
+ .playlist .controls input[type=range]::-moz-range-track {
+ height: 8px;
+ background: #ddd;
+ border: none;
+ border-radius: 3px;
+ padding: 1px; }
+ .playlist .controls input[type=range]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border: none;
+ height: 16px;
+ width: 16px;
+ border-radius: 50%;
+ background: goldenrod;
+ margin-top: -5px;
+ cursor: ew-resize; }
+ .playlist .controls input[type=range]::-moz-range-thumb {
+ border: none;
+ height: 16px;
+ width: 16px;
+ border-radius: 50%;
+ background: goldenrod;
+ margin-top: -5px;
+ cursor: ew-resize; }
+ .playlist .controls input[type=range]:focus {
+ outline: none; }
+ .playlist .controls input[type=range]:focus::-webkit-slider-runnable-track {
+ background: #ccc; }
+ .playlist .controls input[type=range]:focus::-moz-range-track {
+ background: #ccc; }
+ .playlist .annotations .annotations-boxes {
+ text-align: center; }
+ .playlist .annotations .annotation-box {
+ border: 2px dashed grey;
+ padding: 0 10px; }
+ .playlist .annotations .annotation-box .resize-handle {
+ background: grey;
+ opacity: 0.3;
+ cursor: ew-resize; }
+ .playlist .annotations .annotation-box .id {
+ cursor: pointer;
+ display: inline-block;
+ width: 100%;
+ height: 100%; }
+ .playlist .annotations .annotations-text {
+ font-size: 19px;
+ font-weight: 300;
+ margin-top: 1em;
+ height: 160px;
+ overflow-x: hidden;
+ overflow-y: auto; }
+ .playlist .annotations .annotations-text .annotation {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ align-items: stretch; }
+ .playlist .annotations .annotations-text .annotation span {
+ margin: 0.3rem 0.6rem; }
+ .playlist .annotations .annotations-text .annotation span:last-of-type {
+ margin-right: 1.2rem; }
+ .playlist .annotations .annotations-text .annotation .annotation-id {
+ font-size: 16px;
+ line-height: 27px; }
+ .playlist .annotations .annotations-text .annotation .annotation-start {
+ font-size: 16px;
+ line-height: 27px; }
+ .playlist .annotations .annotations-text .annotation .annotation-end {
+ font-size: 16px;
+ line-height: 27px; }
+ .playlist .annotations .annotations-text .annotation .annotation-lines {
+ flex-grow: 10; }
+ .playlist .annotations .annotations-text .annotation .annotation-actions {
+ flex-basis: auto;
+ width: 80px;
+ text-align: right;
+ font-size: 16px; }
+ .playlist .annotations .annotations-text .annotation .annotation-actions i {
+ margin-right: 0.6rem; }
+ .playlist .annotations .annotations-text .annotation .annotation-actions i:last-of-type {
+ margin-right: 0; }
+ .playlist .annotations .annotations-text .annotation .annotation-actions i:hover {
+ color: orange;
+ cursor: pointer; }
+ .playlist .annotations .current {
+ background-color: #EBF4F6; }
+
+/*# sourceMappingURL=test.css.map */
diff --git a/app/scripts/background.js b/app/scripts/background.js
index d2071d4..93e5535 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -8,6 +8,14 @@ async function onHeadersReceived({ responseHeaders, url, tabId }) {
runAt: 'document_end',
file: '/scripts/contentscript.js',
});
+ browser.tabs.insertCSS(tabId, {
+ runAt: 'document_end',
+ file: '/assets/main.css',
+ });
+ browser.tabs.insertCSS(tabId, {
+ runAt: 'document_end',
+ file: '/assets/waveform-playlist.css',
+ });
}
}
diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js
index e69de29..b3cb9cf 100644
--- a/app/scripts/contentscript.js
+++ b/app/scripts/contentscript.js
@@ -0,0 +1,67 @@
+import * as WaveformPlaylist from 'waveform-playlist';
+
+async function init() {
+ document.body.innerHTML = '';
+
+ const main = document.createElement('main');
+ main.innerHTML = `
+
+
+
+ `;
+ document.body.append(main);
+
+ const playlist = WaveformPlaylist.init({
+ container: document.getElementById('container'),
+ timescale: true,
+ waveHeight: 100,
+ state: 'select',
+ // isContinuousPlay: false,
+ });
+
+ const eventEmitter = playlist.getEventEmitter();
+
+ function onClickPlayPause(event) {
+ if (playlist.isPlaying()) {
+ eventEmitter.emit('pause');
+ } else {
+ eventEmitter.emit('play');
+ }
+ }
+
+ const playpauseEl = document.getElementById('playpause');
+ const volumeEl = document.getElementById('volume');
+ playpauseEl.addEventListener('click',
+ e => eventEmitter.emit(playlist.isPlaying() ? 'pause' : 'play')
+ );
+ volumeEl.addEventListener('input',
+ e => eventEmitter.emit("mastervolumechange", e.target.value)
+ );
+
+ let start, end;
+ const fragmentIdentifier = window.location.hash;
+ if (fragmentIdentifier) {
+ const match = fragmentIdentifier.match(/#t=(\d+(?:\.\d+)?)?(?:,(\d+(?:\.\d+)?))?/)
+ if (match) {
+ if (match[1] !== undefined) {
+ start = Number.parseFloat(match[1]);
+ }
+ if (match[2] !== undefined) {
+ end = Number.parseFloat(match[2]);
+ }
+ }
+ }
+
+ await playlist.load([{
+ src: document.URL,
+ selected: { start, end },
+ }]);
+}
+
+init();
diff --git a/package-lock.json b/package-lock.json
index 82280d9..8a5af7c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1390,6 +1390,11 @@
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
"dev": true
},
+ "browser-split": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.1.tgz",
+ "integrity": "sha1-ewl1dPjj6tYG+0Zk5krf3aKYGpM="
+ },
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@@ -1545,6 +1550,11 @@
"unset-value": "^1.0.0"
}
},
+ "camelize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
+ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
+ },
"caniuse-lite": {
"version": "1.0.30000999",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz",
@@ -1867,6 +1877,15 @@
"integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
"dev": true
},
+ "d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
"date-now": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
@@ -1968,6 +1987,11 @@
"path-type": "^3.0.0"
}
},
+ "dom-walk": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
+ },
"domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -2054,6 +2078,16 @@
"prr": "~1.0.1"
}
},
+ "error": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/error/-/error-4.4.0.tgz",
+ "integrity": "sha1-v2n/JR+0onnBmtzNqmth6Q2b8So=",
+ "requires": {
+ "camelize": "^1.0.0",
+ "string-template": "~0.2.0",
+ "xtend": "~4.0.0"
+ }
+ },
"es-abstract": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
@@ -2083,6 +2117,35 @@
"is-symbol": "^1.0.2"
}
},
+ "es5-ext": {
+ "version": "0.10.51",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz",
+ "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==",
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "^1.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz",
+ "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==",
+ "requires": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.51"
+ }
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -2120,6 +2183,23 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
+ "ev-store": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/ev-store/-/ev-store-7.0.0.tgz",
+ "integrity": "sha1-GrDH+CE2UF3XSzHRdwHLK+bSZVg=",
+ "requires": {
+ "individual": "^3.0.0"
+ }
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
"events": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
@@ -2272,6 +2352,19 @@
}
}
},
+ "fade-curves": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fade-curves/-/fade-curves-1.0.2.tgz",
+ "integrity": "sha1-X7pvkoL8YUopJuhiHQQAaTJg0Ds="
+ },
+ "fade-maker": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fade-maker/-/fade-maker-1.0.3.tgz",
+ "integrity": "sha1-LK+3w6Z0vJFvISpNwnewI6dcNBo=",
+ "requires": {
+ "fade-curves": "^1.0.2"
+ }
+ },
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
@@ -3062,6 +3155,15 @@
}
}
},
+ "global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -3208,6 +3310,11 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "individual": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/individual/-/individual-3.0.0.tgz",
+ "integrity": "sha1-58pPhfiVewGHNPKFdQ3CLsL5hi0="
+ },
"infer-owner": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
@@ -3230,6 +3337,11 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "inline-worker": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/inline-worker/-/inline-worker-1.1.0.tgz",
+ "integrity": "sha1-VelvVJFaZCsAhyotqm/oMrQkyY0="
+ },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -3381,6 +3493,11 @@
}
}
},
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
+ },
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -3538,6 +3655,21 @@
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true
},
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
+ },
+ "lodash.forown": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz",
+ "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68="
+ },
"log-update": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
@@ -3656,6 +3788,14 @@
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "requires": {
+ "dom-walk": "^0.1.0"
+ }
+ },
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -3759,6 +3899,11 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "mucss": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/mucss/-/mucss-1.1.5.tgz",
+ "integrity": "sha1-fNbsWVWQ5gPkg6ENaajsfdJwplY="
+ },
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
@@ -3791,6 +3936,11 @@
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
"node-libs-browser": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
@@ -4126,8 +4276,7 @@
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
},
"process-nextick-args": {
"version": "2.0.1",
@@ -4771,6 +4920,11 @@
"schema-utils": "^1.0.0"
}
},
+ "string-template": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
+ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0="
+ },
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
@@ -5105,6 +5259,11 @@
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
+ "type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+ },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
@@ -5287,6 +5446,33 @@
"object.getownpropertydescriptors": "^2.0.3"
}
},
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="
+ },
+ "virtual-dom": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/virtual-dom/-/virtual-dom-2.1.1.tgz",
+ "integrity": "sha1-gO2i1IG57eDASRGM78tKBfIdE3U=",
+ "requires": {
+ "browser-split": "0.0.1",
+ "error": "^4.3.0",
+ "ev-store": "^7.0.0",
+ "global": "^4.3.0",
+ "is-object": "^1.0.1",
+ "next-tick": "^0.2.2",
+ "x-is-array": "0.1.0",
+ "x-is-string": "0.1.0"
+ },
+ "dependencies": {
+ "next-tick": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz",
+ "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0="
+ }
+ }
+ },
"vm-browserify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
@@ -5304,6 +5490,29 @@
"neo-async": "^2.5.0"
}
},
+ "waveform-playlist": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/waveform-playlist/-/waveform-playlist-3.0.4.tgz",
+ "integrity": "sha1-7kCxarp48fHmQ+5SEyd6/FDfh0Y=",
+ "requires": {
+ "event-emitter": "^0.3.4",
+ "fade-curves": "^1.0.2",
+ "fade-maker": "^1.0.3",
+ "inline-worker": "^1.1.0",
+ "lodash.assign": "^4.0.0",
+ "lodash.defaults": "^4.0.0",
+ "lodash.forown": "^4.0.0",
+ "mucss": "^1.1.5",
+ "uuid": "^2.0.1",
+ "virtual-dom": "^2.1.1",
+ "webaudio-peaks": "^0.0.6"
+ }
+ },
+ "webaudio-peaks": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/webaudio-peaks/-/webaudio-peaks-0.0.6.tgz",
+ "integrity": "sha1-DFeqnU/ZT68/UzI9vj9Xcnux6zQ="
+ },
"webextension-polyfill": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.3.1.tgz",
@@ -5464,11 +5673,20 @@
"async-limiter": "~1.0.0"
}
},
+ "x-is-array": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/x-is-array/-/x-is-array-0.1.0.tgz",
+ "integrity": "sha1-3lIBcdR7P0FvVYfWKbidJrEtwp0="
+ },
+ "x-is-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI="
+ },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"y18n": {
"version": "4.0.0",
diff --git a/package.json b/package.json
index f52cc07..c35175e 100644
--- a/package.json
+++ b/package.json
@@ -14,5 +14,7 @@
"devDependencies": {
"webextension-toolbox": "latest"
},
- "dependencies": {}
+ "dependencies": {
+ "waveform-playlist": "^3.0.4"
+ }
}