diff --git a/assets/dither.png b/assets/dither.png new file mode 100644 index 0000000..80cb8cc Binary files /dev/null and b/assets/dither.png differ diff --git a/assets/halftone.gif b/assets/halftone.gif new file mode 100644 index 0000000..42cbaf8 Binary files /dev/null and b/assets/halftone.gif differ diff --git a/assets/main.css b/assets/main.css index 60e4a56..836b9f5 100644 --- a/assets/main.css +++ b/assets/main.css @@ -52,21 +52,42 @@ body { main { flex-grow: 1; + display: flex; + flex-direction: column; overflow: hidden; } -main > * { - height: 100%; +section > header { + height: 20px; + padding: 0 5px 5px 5px; + + font-weight: bold; + + display: flex; + flex-direction: row; } +section > header h4 { + display: block; + /* color: var(--v); */ + margin: 0; + line-height: 100%; +} +/* section > header { + position: sticky; + top: 0; + height: 30px; + line-height: 26px; + background: linear-gradient(180deg, var(--iiv), 80% transparent); +} */ menu li:first-child { margin-top: 0; } menu { - overflow-y: scroll; - overflow-x: hidden; margin: 0; padding: 0 5px; + overflow-y: scroll; + overflow-x: hidden; line-height: 1.4; } @@ -207,29 +228,6 @@ nav { .right { text-align: right; padding-left: 5px; -} - - -.content { - flex-grow: 1; - overflow-y: auto; -} - - - -.controls { - position: relative; -} -.controls header, .controls nav { - margin: 10px 0; -} - -.controls header { - text-align: center; -} -.controls header h3, .controls header p { - margin-block: 0; - line-height: 1.3; } /* nav button { @@ -251,35 +249,40 @@ nav svg { height: 22px; } */ -section.player { +section { position: relative; height: 100%; display: flex; flex-direction: column; +} + +section.player { padding: 0 5px; text-align: center; } section.player img { - margin-top: 5px; width: 230px; height: 230px; } -section.player header { +#track-title { font-size: 20px; margin-top: 2px; + font-style: normal; } -section.player cite { +#track-artist { font-size: 14px; margin: 0 50px 5px 50px; + font-style: italic; } -section.player cite, section.player header { +#track-title, #track-artist { text-wrap: nowrap; + text-overflow: clip; } .marquee { @@ -358,7 +361,7 @@ body > svg { #tab-indicator { display: block; width: 100%; - padding: 0 5px; + padding: 0 5px 3px 5px; box-sizing: border-box; } @@ -367,10 +370,6 @@ body > svg { transition: stroke-dasharray 0.1s ease-in; } -main header { - text-align: center; -} - /* body > header { height: 24px; flex-shrink: 0; @@ -396,8 +395,10 @@ main header { min-width: 60%; } */ -.top { - position: sticky; - top: 0; - z-index: 2; +.progress { + background: var(--iv); +} + +#playback-progress { + transition: stroke-dasharray 0.1s; } \ No newline at end of file diff --git a/assets/top-dither.png b/assets/top-dither.png new file mode 100644 index 0000000..56f3e23 Binary files /dev/null and b/assets/top-dither.png differ diff --git a/build/assets/main.css b/build/assets/main.css index 8978cf6..b6bef6f 100644 --- a/build/assets/main.css +++ b/build/assets/main.css @@ -1,10 +1,17 @@ :root { - --vii: #000; - --vi: #444; + /* --iiv: #000; + --iv: #444; --v: #0bb; --iv: #aaa; --iiv: #fff; - --a: #f33; + --a: #f33; */ + + --iiv: #ddd; + --iv: #aaa; + --v: #375; + --vi: #555; + --vii: #222; + --a: #f40; --chevron-right: url("data:image/svg+xml,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M8 5v2h2V5H8zm4 4V7h-2v2h2zm2 2V9h-2v2h2zm0 2h2v-2h-2v2zm-2 2v-2h2v2h-2zm0 0h-2v2h2v-2zm-4 4v-2h2v2H8z' fill='currentColor'/%3E%3C/svg%3E") } @@ -27,11 +34,10 @@ button:active, a:active { color: var(--v) } - body { margin: 0; - background: var(--vii); - color: var(--iiv); + background: var(--iiv); + color: var(--vii); font-family: sans-serif; font-size: 16px; @@ -41,27 +47,46 @@ body { height: 100vh; max-height: 100vh; - padding-top: 5px; box-sizing: border-box; } main { flex-grow: 1; + display: flex; + flex-direction: column; overflow: hidden; } -main > * { - height: 100%; +section > header { + height: 30px; + padding: 0 5px 3px 5px; + + font-weight: bold; + + display: flex; + flex-direction: row; } +section > header h4 { + display: block; + /* color: var(--v); */ + margin: 0; +} +/* section > header { + position: sticky; + top: 0; + height: 30px; + line-height: 26px; + background: linear-gradient(180deg, var(--iiv), 80% transparent); +} */ menu li:first-child { margin-top: 0; } menu { - overflow-y: scroll; - overflow-x: hidden; margin: 0; padding: 0 5px; + overflow-y: scroll; + overflow-x: hidden; line-height: 1.4; } @@ -80,6 +105,8 @@ menu a::after { mask: var(--chevron-right); mask-mode: alpha; margin-left: auto; + position: sticky; + right: 0; } menu header { @@ -140,7 +167,7 @@ menu:empty::after { } menu:empty::after, #loading { - color: var(--iv); + color: var(--vi); font-style: italic; text-align: center; } @@ -152,19 +179,13 @@ menu:empty::after, #loading { align-items: center; } - -aside { +nav { height: 30px; - max-height: 30px; width: 100%; - max-width: 100%; - flex-shrink: 0; -} -aside footer { - background: var(--vii); - color: var(--iiv); + background: var(--iiv); + color: var(--vii); display: flex; padding: 0 5px; @@ -206,29 +227,6 @@ aside footer { .right { text-align: right; padding-left: 5px; -} - - -.content { - flex-grow: 1; - overflow-y: auto; -} - - - -.controls { - position: relative; -} -.controls header, .controls nav { - margin: 10px 0; -} - -.controls header { - text-align: center; -} -.controls header h3, .controls header p { - margin-block: 0; - line-height: 1.3; } /* nav button { @@ -250,16 +248,18 @@ nav svg { height: 22px; } */ -section.player { +section { position: relative; height: 100%; display: flex; flex-direction: column; +} + +section.player { padding: 0 5px; text-align: center; - } section.player img { @@ -267,24 +267,26 @@ section.player img { height: 230px; } -section.player header { +#track-title { font-size: 20px; - margin-top: 5px; + margin-top: 2px; + font-style: normal; } -section.player cite { +#track-artist { font-size: 14px; - margin: 2px 50px 5px 50px; + margin: 0 50px 5px 50px; + font-style: italic; } -section.player cite, section.player header { +#track-title, #track-artist { text-wrap: nowrap; + text-overflow: clip; } .marquee { overflow: hidden; text-overflow: clip; - position: relative; } .marquee span { @@ -293,17 +295,6 @@ section.player cite, section.player header { padding-right: 4ch; } -.marquee:after { - content: " "; - - position: absolute; - height: 100%; - width: 15px; - background: linear-gradient(90deg, #0000, 10px var(--vii), var(--vii)); - - right: -5px; -} - @keyframes marquee { 0% { transform: translate(0, 0) } 25% { transform: translate(-100%, 0) } @@ -321,18 +312,18 @@ section.player cite, section.player header { bottom: 0; } #timestamp { - color: var(--iiv); + color: var(--a); left: 0; } #track-length { - color: var(--iv); + color: var(--vi); right: 0; } .progress { width: 100%; height: 3px; - color: var(--iiv) + color: var(--vii) } .progress path { @@ -347,10 +338,10 @@ progress { appearance: none; } progress::-webkit-progress-bar { - background-color: var(--vi); + background-color: var(--iv); } progress::-webkit-progress-value { - background-color: var(--iiv); + background-color: var(--vii); } ::-webkit-scrollbar { @@ -359,5 +350,54 @@ progress::-webkit-progress-value { } ::-webkit-scrollbar-thumb { - background-color: var(--iv); + background-color: var(--vi); } + +body > svg { + flex-shrink: 0; +} + +#tab-indicator { + display: block; + width: 100%; + padding: 0 5px 3px 5px; + box-sizing: border-box; +} + +#tab-indicator line { + stroke: var(--v); + transition: stroke-dasharray 0.1s ease-in; +} + +/* body > header { + height: 24px; + flex-shrink: 0; +} + +#tabs { + margin: 0 5px; + scrollbar-width: none; + + display: flex; + flex-direction: row; + flex-wrap: nowrap; + gap: 25px; + overflow-x: scroll; + + color: var(--vi); + + text-align: center; +} + +#tabs .selected { + color: var(--vii); + min-width: 60%; +} */ + +.progress { + background: var(--iv); +} + +#playback-progress { + transition: stroke-dasharray 0.1s; +} \ No newline at end of file diff --git a/build/index.html b/build/index.html index 875e990..fb4f18f 100644 --- a/build/index.html +++ b/build/index.html @@ -2,8 +2,16 @@ - - + + + @@ -48,16 +56,41 @@ --> -
+ + + + + + +
- -
Bocce
-Patricia Taxxon + +No Track Selected +Unknown Artist -00:00 -00:00 +--:-- +--:-- + +
+
+ +
+

Browser

+
+ + +
+
+ +
+

Queue

+ +
+
@@ -68,14 +101,11 @@
- + diff --git a/build/index.js b/build/index.js deleted file mode 100644 index 3db83c8..0000000 --- a/build/index.js +++ /dev/null @@ -1,1555 +0,0 @@ -(function () { - 'use strict'; - - var browser$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - get Cd () { return Cd; }, - get Focused () { return Focused; }, - get Init () { return Init$1; }, - get OnKeydown () { return OnKeydown$1; }, - get Open () { return Open; }, - get Render () { return Render; }, - get View () { return View$1; }, - get back () { return back; }, - get list () { return list; }, - get organizeView () { return organizeView; }, - get recurseView () { return _recurseView; } - }); - - function _arrayLikeToArray(r, a) { - (null == a || a > r.length) && (a = r.length); - for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; - return n; - } - function _arrayWithHoles(r) { - if (Array.isArray(r)) return r; - } - function asyncGeneratorStep(n, t, e, r, o, a, c) { - try { - var i = n[a](c), - u = i.value; - } catch (n) { - return void e(n); - } - i.done ? t(u) : Promise.resolve(u).then(r, o); - } - function _asyncToGenerator(n) { - return function () { - var t = this, - e = arguments; - return new Promise(function (r, o) { - var a = n.apply(t, e); - function _next(n) { - asyncGeneratorStep(a, r, o, _next, _throw, "next", n); - } - function _throw(n) { - asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); - } - _next(void 0); - }); - }; - } - function _createForOfIteratorHelper(r, e) { - var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; - if (!t) { - if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { - t && (r = t); - var n = 0, - F = function () {}; - return { - s: F, - n: function () { - return n >= r.length ? { - done: !0 - } : { - done: !1, - value: r[n++] - }; - }, - e: function (r) { - throw r; - }, - f: F - }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var o, - a = !0, - u = !1; - return { - s: function () { - t = t.call(r); - }, - n: function () { - var r = t.next(); - return a = r.done, r; - }, - e: function (r) { - u = !0, o = r; - }, - f: function () { - try { - a || null == t.return || t.return(); - } finally { - if (u) throw o; - } - } - }; - } - function _inherits(t, e) { - if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); - t.prototype = Object.create(e && e.prototype, { - constructor: { - value: t, - writable: !0, - configurable: !0 - } - }), Object.defineProperty(t, "prototype", { - writable: !1 - }), e && _setPrototypeOf(t, e); - } - function _iterableToArrayLimit(r, l) { - var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; - if (null != t) { - var e, - n, - i, - u, - a = [], - f = !0, - o = !1; - try { - if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); - } catch (r) { - o = !0, n = r; - } finally { - try { - if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; - } finally { - if (o) throw n; - } - } - return a; - } - } - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - function _regeneratorRuntime() { - _regeneratorRuntime = function () { - return e; - }; - var t, - e = {}, - r = Object.prototype, - n = r.hasOwnProperty, - o = Object.defineProperty || function (t, e, r) { - t[e] = r.value; - }, - i = "function" == typeof Symbol ? Symbol : {}, - a = i.iterator || "@@iterator", - c = i.asyncIterator || "@@asyncIterator", - u = i.toStringTag || "@@toStringTag"; - function define(t, e, r) { - return Object.defineProperty(t, e, { - value: r, - enumerable: !0, - configurable: !0, - writable: !0 - }), t[e]; - } - try { - define({}, ""); - } catch (t) { - define = function (t, e, r) { - return t[e] = r; - }; - } - function wrap(t, e, r, n) { - var i = e && e.prototype instanceof Generator ? e : Generator, - a = Object.create(i.prototype), - c = new Context(n || []); - return o(a, "_invoke", { - value: makeInvokeMethod(t, r, c) - }), a; - } - function tryCatch(t, e, r) { - try { - return { - type: "normal", - arg: t.call(e, r) - }; - } catch (t) { - return { - type: "throw", - arg: t - }; - } - } - e.wrap = wrap; - var h = "suspendedStart", - l = "suspendedYield", - f = "executing", - s = "completed", - y = {}; - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - var p = {}; - define(p, a, function () { - return this; - }); - var d = Object.getPrototypeOf, - v = d && d(d(values([]))); - v && v !== r && n.call(v, a) && (p = v); - var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); - function defineIteratorMethods(t) { - ["next", "throw", "return"].forEach(function (e) { - define(t, e, function (t) { - return this._invoke(e, t); - }); - }); - } - function AsyncIterator(t, e) { - function invoke(r, o, i, a) { - var c = tryCatch(t[r], t, o); - if ("throw" !== c.type) { - var u = c.arg, - h = u.value; - return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { - invoke("next", t, i, a); - }, function (t) { - invoke("throw", t, i, a); - }) : e.resolve(h).then(function (t) { - u.value = t, i(u); - }, function (t) { - return invoke("throw", t, i, a); - }); - } - a(c.arg); - } - var r; - o(this, "_invoke", { - value: function (t, n) { - function callInvokeWithMethodAndArg() { - return new e(function (e, r) { - invoke(t, n, e, r); - }); - } - return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - }); - } - function makeInvokeMethod(e, r, n) { - var o = h; - return function (i, a) { - if (o === f) throw Error("Generator is already running"); - if (o === s) { - if ("throw" === i) throw a; - return { - value: t, - done: !0 - }; - } - for (n.method = i, n.arg = a;;) { - var c = n.delegate; - if (c) { - var u = maybeInvokeDelegate(c, n); - if (u) { - if (u === y) continue; - return u; - } - } - if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { - if (o === h) throw o = s, n.arg; - n.dispatchException(n.arg); - } else "return" === n.method && n.abrupt("return", n.arg); - o = f; - var p = tryCatch(e, r, n); - if ("normal" === p.type) { - if (o = n.done ? s : l, p.arg === y) continue; - return { - value: p.arg, - done: n.done - }; - } - "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); - } - }; - } - function maybeInvokeDelegate(e, r) { - var n = r.method, - o = e.iterator[n]; - if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; - var i = tryCatch(o, e.iterator, r.arg); - if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; - var a = i.arg; - return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); - } - function pushTryEntry(t) { - var e = { - tryLoc: t[0] - }; - 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); - } - function resetTryEntry(t) { - var e = t.completion || {}; - e.type = "normal", delete e.arg, t.completion = e; - } - function Context(t) { - this.tryEntries = [{ - tryLoc: "root" - }], t.forEach(pushTryEntry, this), this.reset(!0); - } - function values(e) { - if (e || "" === e) { - var r = e[a]; - if (r) return r.call(e); - if ("function" == typeof e.next) return e; - if (!isNaN(e.length)) { - var o = -1, - i = function next() { - for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; - return next.value = t, next.done = !0, next; - }; - return i.next = i; - } - } - throw new TypeError(typeof e + " is not iterable"); - } - return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { - value: GeneratorFunctionPrototype, - configurable: !0 - }), o(GeneratorFunctionPrototype, "constructor", { - value: GeneratorFunction, - configurable: !0 - }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { - var e = "function" == typeof t && t.constructor; - return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); - }, e.mark = function (t) { - return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; - }, e.awrap = function (t) { - return { - __await: t - }; - }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { - return this; - }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { - void 0 === i && (i = Promise); - var a = new AsyncIterator(wrap(t, r, n, o), i); - return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { - return t.done ? t.value : a.next(); - }); - }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { - return this; - }), define(g, "toString", function () { - return "[object Generator]"; - }), e.keys = function (t) { - var e = Object(t), - r = []; - for (var n in e) r.push(n); - return r.reverse(), function next() { - for (; r.length;) { - var t = r.pop(); - if (t in e) return next.value = t, next.done = !1, next; - } - return next.done = !0, next; - }; - }, e.values = values, Context.prototype = { - constructor: Context, - reset: function (e) { - if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); - }, - stop: function () { - this.done = !0; - var t = this.tryEntries[0].completion; - if ("throw" === t.type) throw t.arg; - return this.rval; - }, - dispatchException: function (e) { - if (this.done) throw e; - var r = this; - function handle(n, o) { - return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; - } - for (var o = this.tryEntries.length - 1; o >= 0; --o) { - var i = this.tryEntries[o], - a = i.completion; - if ("root" === i.tryLoc) return handle("end"); - if (i.tryLoc <= this.prev) { - var c = n.call(i, "catchLoc"), - u = n.call(i, "finallyLoc"); - if (c && u) { - if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); - if (this.prev < i.finallyLoc) return handle(i.finallyLoc); - } else if (c) { - if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); - } else { - if (!u) throw Error("try statement without catch or finally"); - if (this.prev < i.finallyLoc) return handle(i.finallyLoc); - } - } - } - }, - abrupt: function (t, e) { - for (var r = this.tryEntries.length - 1; r >= 0; --r) { - var o = this.tryEntries[r]; - if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { - var i = o; - break; - } - } - i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); - var a = i ? i.completion : {}; - return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); - }, - complete: function (t, e) { - if ("throw" === t.type) throw t.arg; - return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; - }, - finish: function (t) { - for (var e = this.tryEntries.length - 1; e >= 0; --e) { - var r = this.tryEntries[e]; - if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; - } - }, - catch: function (t) { - for (var e = this.tryEntries.length - 1; e >= 0; --e) { - var r = this.tryEntries[e]; - if (r.tryLoc === t) { - var n = r.completion; - if ("throw" === n.type) { - var o = n.arg; - resetTryEntry(r); - } - return o; - } - } - throw Error("illegal catch attempt"); - }, - delegateYield: function (e, r, n) { - return this.delegate = { - iterator: values(e), - resultName: r, - nextLoc: n - }, "next" === this.method && (this.arg = t), y; - } - }, e; - } - function _setPrototypeOf(t, e) { - return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { - return t.__proto__ = e, t; - }, _setPrototypeOf(t, e); - } - function _slicedToArray(r, e) { - return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); - } - function _unsupportedIterableToArray(r, a) { - if (r) { - if ("string" == typeof r) return _arrayLikeToArray(r, a); - var t = {}.toString.call(r).slice(8, -1); - return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; - } - } - function _wrapRegExp() { - _wrapRegExp = function (e, r) { - return new BabelRegExp(e, void 0, r); - }; - var e = RegExp.prototype, - r = new WeakMap(); - function BabelRegExp(e, t, p) { - var o = RegExp(e, t); - return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype); - } - function buildGroups(e, t) { - var p = r.get(t); - return Object.keys(p).reduce(function (r, t) { - var o = p[t]; - if ("number" == typeof o) r[t] = e[o];else { - for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++; - r[t] = e[o[i]]; - } - return r; - }, Object.create(null)); - } - return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) { - var t = e.exec.call(this, r); - if (t) { - t.groups = buildGroups(t, this); - var p = t.indices; - p && (p.groups = buildGroups(p, this)); - } - return t; - }, BabelRegExp.prototype[Symbol.replace] = function (t, p) { - if ("string" == typeof p) { - var o = r.get(this); - return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) { - var t = o[r]; - return "$" + (Array.isArray(t) ? t.join("$") : t); - })); - } - if ("function" == typeof p) { - var i = this; - return e[Symbol.replace].call(this, t, function () { - var e = arguments; - return "object" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e); - }); - } - return e[Symbol.replace].call(this, t, p); - }, _wrapRegExp.apply(this, arguments); - } - - function Store(objectStoreName) { - var transact = () => { - return this.db.transaction(objectStoreName, "readwrite").objectStore(objectStoreName); - }; - this.Get = key => { - return promisify$1(transact().get(key)); - }; - this.Set = (key, value) => { - return promisify$1(transact().put(value, key)); - }; - return this; - } - Store.Open = /*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(dbName, objectStoreName) { - var store, request; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - store = new Store(objectStoreName); - request = indexedDB.open(dbName, 2); - request.onupgradeneeded = event => { - var db = event.target.result; - var objectStore = db.createObjectStore(objectStoreName); - objectStore.createIndex('value', 'value', { - unique: false - }); - }; - _context.next = 5; - return promisify$1(request); - case 5: - store.db = _context.sent; - return _context.abrupt("return", store); - case 7: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function (_x, _x2) { - return _ref.apply(this, arguments); - }; - }(); - function promisify$1(request) { - return new Promise((resolve, reject) => { - request.onsuccess = event => { - resolve(request.result); - }; - request.onerror = event => { - reject(request.error); - }; - }); - } - - var sdcard = navigator.getDeviceStorage('sdcard'); - function promisify(request) { - return new Promise((resolve, reject) => { - request.onsuccess = event => { - resolve(request.result); - }; - request.onerror = event => { - reject(request.error); - console.error(request.error); - }; - }); - } - function joinPath(left, right) { - return (left + right).replaceAll(/\/{2,}/g, '/'); - } - function handle(sPath, sName) { - return { - name: sName, - path: sPath, - kind: 'directory' - }; - } - var filesystemIndex; - function Start$1() {} - var createIndex = () => { - return new Promise(filesystemIndexHandler); - }; - var filesystemIndexHandler = (resolve, reject) => { - var cursor = sdcard.enumerate(); - filesystemIndex = {}; - cursor.onerror = function () { - reject(cursor.error); - }; - cursor.onsuccess = function () { - if (!this.result) { - return resolve(filesystemIndex); - } - var cs = this.result.name.split('/').slice(1); - var f = filesystemIndex; - var c; - for (var i = 0; i < cs.length; i++) { - var _f$entries, _c, _f$entries$_c; - c = cs[i]; - if (!f.entries) { - f.kind = 'directory'; - f.entries = {}; - } - f = (_f$entries$_c = (_f$entries = f.entries)[_c = c]) !== null && _f$entries$_c !== void 0 ? _f$entries$_c : _f$entries[_c] = handle('/' + cs.slice(0, i + 1).join('/'), c); - } - f.kind = 'file'; - // f.file = this.result - - this.continue(); - }; - }; - function Entries$1(_x) { - return _Entries.apply(this, arguments); - } - function _Entries() { - _Entries = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(handle) { - var pool, t, n, _t$entries, h; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - if (filesystemIndex) { - _context.next = 3; - break; - } - _context.next = 3; - return createIndex(); - case 3: - pool = new Map(); - t = handle == null ? filesystemIndex : handle; - for (n in (_t$entries = t.entries) !== null && _t$entries !== void 0 ? _t$entries : {}) { - h = t.entries[n]; - pool.set(h.name, h); - } - return _context.abrupt("return", pool); - case 7: - case "end": - return _context.stop(); - } - }, _callee); - })); - return _Entries.apply(this, arguments); - } - function Open$3(hFile) { - // return hFile.file - return promisify(sdcard.get(hFile.path)); - } - - var device = /*#__PURE__*/Object.freeze({ - __proto__: null, - Entries: Entries$1, - Open: Open$3, - Start: Start$1, - createIndex: createIndex, - get filesystemIndex () { return filesystemIndex; }, - joinPath: joinPath, - promisify: promisify, - sdcard: sdcard - }); - - function List(view) { - view.element = document.createElement('menu'); - view.cursor = 0; - this.Render = function (entries) { - var iResetCursorTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : view.cursor; - while (view.element.firstChild) { - view.element.removeChild(view.element.lastChild); - } - entries.map(renderEntry).forEach(n => view.element.appendChild(n)); - Focus(iResetCursorTo); - }; - var renderEntry = (entry, i) => { - var ele = document.createElement('li'); - if (entry.entries) { - populateListEntry(entry, ele); - } else { - populateTrackEntry(entry, ele); - } - - // ele.addEventListener('mouseenter', (event) => { - // console.log(event) - // if(event.movementX || event.movementY) - // Focus(i, false) - // }) - - return ele; - }; - var populateListEntry = (entry, ele) => { - var a = document.createElement('a'); - var header = document.createElement('header'); - header.innerText = entry.name; - a.appendChild(header); - ele.appendChild(a); - }; - var populateTrackEntry = (entry, ele) => { - // TODO: fix button problem on kaios - var sect = document.createElement('section'); - var trackNumber = document.createElement('code'); - var title = document.createElement('b'); - var artist = document.createElement('cite'); - trackNumber.innerText = formatTrackNumber(entry.trackNumber); - title.innerText = entry.name; - artist.innerText = entry.artist; - sect.appendChild(title); - sect.appendChild(artist); - ele.appendChild(trackNumber); - ele.appendChild(sect); - }; - var formatTrackNumber = trackNumber => { - return trackNumber == Infinity ? '--' : trackNumber.toString().padStart(2, '0'); - }; - var Scroll = this.Scroll = distance => { - var children = Array.from(view.element.children); - var i = view.cursor; - i += distance; - if (i >= children.length) { - i = 0; - } else if (i < 0) { - i = children.length - 1; - } - Focus(i); - }; - var Focus = this.Focus = function (i) { - var scroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - view.cursor = i; - if (view.element.children.length === 0) { - return; - } - if (view.focus) { - view.focus.classList.remove('focus'); - } - view.focus = view.element.children[view.cursor]; - view.focus.classList.add('focus'); - if (scroll) { - view.element.children[Math.max(0, i - 4)].scrollIntoView(); - } - }; - this.OnKeydown = event => { - switch (event.key) { - case 'ArrowDown': - Scroll(1); - break; - case 'ArrowUp': - Scroll(-1); - break; - default: - return true; - } - }; - return this; - } - - var _window$5, _window$app$4, _window2$4, _window2$view$4; - var app$5 = (_window$app$4 = (_window$5 = window).app) !== null && _window$app$4 !== void 0 ? _window$app$4 : _window$5.app = {}; - var view$4 = (_window2$view$4 = (_window2$4 = window).view) !== null && _window2$view$4 !== void 0 ? _window2$view$4 : _window2$4.view = {}; - - // TODO: decouple from app.browser and add loading bar - - var Init$5 = /*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - view$4.loadingStatus = document.getElementById('loading-status'); - app$5.trackCount = 0; - _context.next = 4; - return Entries(); - case 4: - app$5.index = _context.sent; - case 5: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function Init() { - return _ref.apply(this, arguments); - }; - }(); - var Entries = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(hHandle, eParent) { - var dirE, out, _iterator, _step, _step$value, n, h, e; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return Entries$1(hHandle); - case 2: - dirE = _context2.sent; - out = []; - _iterator = _createForOfIteratorHelper(dirE); - _context2.prev = 5; - _iterator.s(); - case 7: - if ((_step = _iterator.n()).done) { - _context2.next = 15; - break; - } - _step$value = _slicedToArray(_step.value, 2), n = _step$value[0], h = _step$value[1]; - _context2.next = 11; - return Create(n, h, eParent); - case 11: - e = _context2.sent; - if (e != undefined) { - out.push(e); - displayTrackFound(e); - } - case 13: - _context2.next = 7; - break; - case 15: - _context2.next = 20; - break; - case 17: - _context2.prev = 17; - _context2.t0 = _context2["catch"](5); - _iterator.e(_context2.t0); - case 20: - _context2.prev = 20; - _iterator.f(); - return _context2.finish(20); - case 23: - return _context2.abrupt("return", out); - case 24: - case "end": - return _context2.stop(); - } - }, _callee2, null, [[5, 17, 20, 23]]); - })); - return function Entries(_x, _x2) { - return _ref2.apply(this, arguments); - }; - }(); - var displayTrackFound = entry => { - app$5.trackCount++; - view$4.loadingStatus.innerText = `${entry.handle.name}\n(${app$5.trackCount})`; - }; - var trackFiletypes = ['.mp3', '.ogg', '.wav', '.flac']; - var Create = /*#__PURE__*/function () { - var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(sName, hHandle, eParent) { - var _e$trackNumber; - var e, ext; - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - e = { - handle: hHandle - }; - if (eParent) { - e.parent = eParent; - } - _context3.t0 = hHandle.kind; - _context3.next = _context3.t0 === 'directory' ? 5 : _context3.t0 === 'file' ? 10 : 17; - break; - case 5: - _context3.next = 7; - return Entries(hHandle, e); - case 7: - e.entries = _context3.sent; - e.name = sName; - return _context3.abrupt("break", 17); - case 10: - ext = sName.slice(sName.lastIndexOf('.')); - if (!trackFiletypes.includes(ext)) { - _context3.next = 16; - break; - } - _context3.next = 14; - return Track(e); - case 14: - _context3.next = 17; - break; - case 16: - return _context3.abrupt("return"); - case 17: - e.order = (_e$trackNumber = e.trackNumber) !== null && _e$trackNumber !== void 0 ? _e$trackNumber : 0; - return _context3.abrupt("return", e); - case 19: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return function Create(_x3, _x4, _x5) { - return _ref3.apply(this, arguments); - }; - }(); - var Track = /*#__PURE__*/function () { - var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(e) { - var _md$artist; - var md; - return _regeneratorRuntime().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - _context4.next = 2; - return Metadata(e); - case 2: - md = _context4.sent; - e.album = md.album; - e.name = md.title; - e.artist = (_md$artist = md.artist) !== null && _md$artist !== void 0 ? _md$artist : "Unknown Artist"; - e.trackNumber = md.track ? parseInt(md.track) : Infinity; - case 7: - case "end": - return _context4.stop(); - } - }, _callee4); - })); - return function Track(_x6) { - return _ref4.apply(this, arguments); - }; - }(); - var Metadata = /*#__PURE__*/function () { - var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(e) { - var d; - return _regeneratorRuntime().wrap(function _callee5$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - _context5.next = 2; - return Open$3(e.handle).then(mediaTags).catch(e => console.error(e)); - case 2: - d = _context5.sent; - if (d) { - _context5.next = 7; - break; - } - return _context5.abrupt("return", /*#__PURE__*/_wrapRegExp(/((\d+)\s+)?((.+)-\s*)?\s*(.+)\s*\.\w+/, { - track: 2, - artist: 4, - title: 5 - }).exec(e.handle.name).groups); - case 7: - return _context5.abrupt("return", d.tags); - case 8: - case "end": - return _context5.stop(); - } - }, _callee5); - })); - return function Metadata(_x7) { - return _ref5.apply(this, arguments); - }; - }(); - var mediaTags = blob => new Promise((resolve, reject) => { - jsmediatags.read(blob, { - onSuccess(tags) { - resolve(tags); - }, - onError(err) { - reject(err); - } - }); - }); - - var entry = /*#__PURE__*/Object.freeze({ - __proto__: null, - Create: Create, - Entries: Entries, - Init: Init$5, - displayTrackFound: displayTrackFound, - trackFiletypes: trackFiletypes - }); - - var _window$4, _window$view; - var view$3 = (_window$view = (_window$4 = window).view) !== null && _window$view !== void 0 ? _window$view : _window$4.view = {}; - var Init$4 = () => {}; - var View$4 = () => { - view$3.player = { - title: document.getElementById('track-title'), - artist: document.getElementById('track-artist'), - timestamp: document.getElementById('timestamp'), - trackLength: document.getElementById('track-length') - }; - }; - var Render$2 = eTrack => { - marqueeableText(view$3.player.title, eTrack.name); - marqueeableText(view$3.player.artist, eTrack.artist); - }; - var marqueeableText = (eElement, sName) => { - while (eElement.firstChild) { - eElement.lastChild.remove(); - } - eElement.classList = []; - var s = textContainer(eElement, sName); - if (s.offsetWidth > eElement.offsetWidth) { - eElement.classList = ['marquee']; - textContainer(eElement, sName); - } - }; - var textContainer = (eElement, sText) => { - var s = document.createElement('span'); - s.innerText = sText; - eElement.appendChild(s); - return s; - }; - var Open$2 = () => { - Display('player'); - document.body.classList.add('paused'); - }; - var OnKeydown$4 = event => { - switch (event) { - case 'Enter': - break; - default: - return true; - } - }; - - var player$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - Init: Init$4, - OnKeydown: OnKeydown$4, - Open: Open$2, - Render: Render$2, - View: View$4, - marqueeableText: marqueeableText, - textContainer: textContainer - }); - - var OnEntryListKeydown = (list, event, e) => { - switch (event.key) { - case '4': - case 'g': - browser.Open(); - browser.Cd(e.parent) && list.Focus(app.browser.view.indexOf(e)); - break; - default: - return list.OnKeydown(event); - } - }; - - var _window$3, _window$app$3, _window2$3, _window2$view$3; - var app$4 = (_window$app$3 = (_window$3 = window).app) !== null && _window$app$3 !== void 0 ? _window$app$3 : _window$3.app = {}; - var view$2 = (_window2$view$3 = (_window2$3 = window).view) !== null && _window2$view$3 !== void 0 ? _window2$view$3 : _window2$3.view = {}; - var list$1 = new List(view$2.queue = {}); - var Init$3 = /*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - app$4.queue = []; - case 1: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function Init() { - return _ref.apply(this, arguments); - }; - }(); - var View$3 = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - Render$1(); - view$2.queue.element.classList = ['queue']; - view$2.main.appendChild(view$2.queue.element); - case 3: - case "end": - return _context2.stop(); - } - }, _callee2); - })); - return function View() { - return _ref2.apply(this, arguments); - }; - }(); - var Render$1 = /*#__PURE__*/function () { - var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - list$1.Render(app$4.queue); - case 1: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return function Render() { - return _ref3.apply(this, arguments); - }; - }(); - var OnKeydown$3 = event => { - var e = Focused$1(); - console.log(event.key); - switch (event.key) { - // case 'ArrowLeft': - // back() - // break - - // case 'ArrowRight': - // cd(e) - // break - - case '[': - case 'SoftLeft': - // Move track up - Move(e, -1); - break; - case ']': - case 'SoftRight': - // Move track down - Move(e, 1); - break; - default: - return OnEntryListKeydown(list$1, event, e); - } - }; - var Move = (eTrack, offset) => { - var i = view$2.queue.cursor + offset; - if (i == app$4.queue.length || i < 0) { - return; - } - var n = app$4.queue[i]; - app$4.queue[view$2.queue.cursor] = n; - app$4.queue[i] = eTrack; - list$1.Render(app$4.queue, i); - }; - var Open$1 = () => { - Render$1(); - Display('queue'); - }; - var Focused$1 = () => { - return app$4.queue[view$2.queue.cursor]; - }; - var Add = eTrack => { - // TODO: solid way to determine if something is playable - if (!eTrack.entries) app$4.queue.push(eTrack); - }; - - var queue$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - Add: Add, - Focused: Focused$1, - Init: Init$3, - Move: Move, - OnKeydown: OnKeydown$3, - Open: Open$1, - Render: Render$1, - View: View$3, - list: list$1 - }); - - var _window$2, _window$app$2, _window2$2, _window2$view$2; - var app$3 = (_window$app$2 = (_window$2 = window).app) !== null && _window$app$2 !== void 0 ? _window$app$2 : _window$2.app = {}; - (_window2$view$2 = (_window2$2 = window).view) !== null && _window2$view$2 !== void 0 ? _window2$view$2 : _window2$2.view = {}; - var modules; - var states = { - PLAYER: 0, - BROWSER: 1, - QUEUE: 2 - }; - var Init$2 = name => { - app$3.mode = 1; - }; - var View$2 = () => { - modules = new Array(3); - modules[states.PLAYER] = player$1; - modules[states.BROWSER] = browser$1; - modules[states.QUEUE] = queue$1; - modules[app$3.mode].Open(); - }; - var Display = name => { - document.body.classList = [name]; - }; - var Scroll = distance => { - app$3.mode = Math.min(Math.max(distance + app$3.mode, 0), modules.length); - View$2(); - }; - var OnKeydown$2 = event => { - return modules[app$3.mode].OnKeydown(event); - }; - - var mode = /*#__PURE__*/Object.freeze({ - __proto__: null, - Display: Display, - Init: Init$2, - OnKeydown: OnKeydown$2, - Scroll: Scroll, - View: View$2, - get modules () { return modules; }, - states: states - }); - - var _window$1, _window$app$1, _window2$1, _window2$view$1; - var app$2 = (_window$app$1 = (_window$1 = window).app) !== null && _window$app$1 !== void 0 ? _window$app$1 : _window$1.app = {}; - var view$1 = (_window2$view$1 = (_window2$1 = window).view) !== null && _window2$view$1 !== void 0 ? _window2$view$1 : _window2$1.view = {}; - var list = new List(view$1.browser = {}); - var Init$1 = /*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - app$2.browser = {}; - app$2.browser.root = { - entries: app$2.index, - root: true - }; - app$2.browser.current = app$2.browser.root; - app$2.browser.recursiveView = false; - app$2.browser.view = []; - case 5: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function Init() { - return _ref.apply(this, arguments); - }; - }(); - var View$1 = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - Render(); - view$1.browser.element.classList = ['browser']; - view$1.main.appendChild(view$1.browser.element); - case 3: - case "end": - return _context2.stop(); - } - }, _callee2); - })); - return function View() { - return _ref2.apply(this, arguments); - }; - }(); - var Render = /*#__PURE__*/function () { - var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - organizeView(); - list.Render(app$2.browser.view, 0); - case 2: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return function Render() { - return _ref3.apply(this, arguments); - }; - }(); - var organizeView = () => { - if (app$2.browser.recursiveView) { - app$2.browser.view = []; - _recurseView(); - } else { - app$2.browser.view = app$2.browser.current.entries; - } - app$2.browser.view.sort((a, b) => a.order - b.order); - }; - var _recurseView = function recurseView() { - var eaEntries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : app$2.browser.current.entries; - var bIncludeDirectories = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var _iterator = _createForOfIteratorHelper(eaEntries), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var e = _step.value; - if (e.entries) { - _recurseView(e.entries, false); - if (!bIncludeDirectories) continue; - } - app$2.browser.view.push(e); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - }; - var Open = () => { - Display('browser'); - }; - var OnKeydown$1 = event => { - var e = Focused(); - switch (event.key) { - case 'SoftLeft': - // PlayTrack() - break; - case 'Escape': - case 'Back': - back(); - break; - case ' ': - case 'Enter': - if (e.entries) { - Cd(e); - break; - } - case 'q': - queue.Add(e); - list.Scroll(1); - break; - case 'r': - case '7': - app$2.browser.recursiveView = !app$2.browser.recursiveView; - Render(); - break; - default: - return OnEntryListKeydown(list, event, e); - } - }; - var back = () => { - var e = app$2.browser.current; - if (e.root) { - return; - } - var s = Cd(e.parent); - if (s) { - list.Focus(app$2.browser.view.indexOf(e)); - } - }; - var Cd = function Cd() { - var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : app$2.browser.root; - if (entry.entries) { - app$2.browser.current = entry; - Render(); - return true; - } else { - return false; - } - }; - var Focused = () => { - return app$2.browser.view[view$1.browser.cursor]; - }; - - var _window, _window$app, _window2, _window2$view; - var app$1 = (_window$app = (_window = window).app) !== null && _window$app !== void 0 ? _window$app : _window.app = {}; - var view = (_window2$view = (_window2 = window).view) !== null && _window2$view !== void 0 ? _window2$view : _window2.view = {}; - var store; - var saveTimeout; - var Start = /*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - var success; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return Store.Open('app', 'data'); - case 2: - store = _context2.sent; - _context2.next = 5; - return Start$1(); - case 5: - _context2.next = 7; - return loadState(); - case 7: - success = _context2.sent; - if (success) { - _context2.next = 11; - break; - } - _context2.next = 11; - return Init(); - case 11: - window.addEventListener('visibilitychange', /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(event) { - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - if (!(document.visibilityState !== 'visible')) { - _context.next = 3; - break; - } - _context.next = 3; - return saveState(); - case 3: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function (_x) { - return _ref2.apply(this, arguments); - }; - }()); - _context2.next = 14; - return View(); - case 14: - view.loading.remove(); - case 15: - case "end": - return _context2.stop(); - } - }, _callee2); - })); - return function Start() { - return _ref.apply(this, arguments); - }; - }(); - var Init = /*#__PURE__*/function () { - var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - _context3.next = 2; - return Init$5(); - case 2: - Init$2(); - _context3.next = 5; - return Init$1(); - case 5: - _context3.next = 7; - return queue.Init(); - case 7: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return function Init() { - return _ref3.apply(this, arguments); - }; - }(); - var View = /*#__PURE__*/function () { - var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { - return _regeneratorRuntime().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - view.main = document.getElementById('main'); - view.loading = document.getElementById('loading'); - view.loadingStatus = document.getElementById('loading-status'); - View$2(); - _context4.next = 6; - return View$1(); - case 6: - _context4.next = 8; - return queue.View(); - case 8: - _context4.next = 10; - return player.View(); - case 10: - window.addEventListener('keydown', OnKeydown); - player.Render({ - name: 'Timeland, Smoke & Mirrors, The Land Before Timeland, & Hypertension', - artist: 'King Gizzard & The Lizard Wizard' - }); - case 12: - case "end": - return _context4.stop(); - } - }, _callee4); - })); - return function View() { - return _ref4.apply(this, arguments); - }; - }(); - var loadState = /*#__PURE__*/function () { - var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { - var state; - return _regeneratorRuntime().wrap(function _callee5$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - _context5.next = 2; - return store.Get('state'); - case 2: - state = _context5.sent; - Object.assign(app$1, state); - return _context5.abrupt("return", state != undefined); - case 5: - case "end": - return _context5.stop(); - } - }, _callee5); - })); - return function loadState() { - return _ref5.apply(this, arguments); - }; - }(); - var saveState = () => { - app$1.lastSaved = Date.now(); - console.log('saving'); - return store.Set('state', app$1); - }; - var resetSaveTimer = () => { - if (saveTimeout) clearTimeout(saveTimeout); - saveTimeout = setTimeout(() => saveState(), 20 * 1000); - }; - var Reload = /*#__PURE__*/function () { - var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() { - return _regeneratorRuntime().wrap(function _callee6$(_context6) { - while (1) switch (_context6.prev = _context6.next) { - case 0: - _context6.next = 2; - return store.Set('state', null); - case 2: - window.location.reload(); - case 3: - case "end": - return _context6.stop(); - } - }, _callee6); - })); - return function Reload() { - return _ref6.apply(this, arguments); - }; - }(); - var OnKeydown = event => { - switch (event.key) { - case 'EndCall': - saveState().then(() => window.close()); - break; - case '2': - Open(); - break; - case '3': - queue.Open(); - break; - case '0': - main.Reload(); - break; - case 'ArrowLeft': - Scroll(-1); - break; - case 'ArrowRight': - Scroll(1); - break; - default: - if (OnKeydown$2(event)) return; - } - console.log('stop'); - event.preventDefault(); - resetSaveTimer(); - }; - - var main$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - Init: Init, - OnKeydown: OnKeydown, - Reload: Reload, - Start: Start, - View: View, - loadState: loadState, - resetSaveTimer: resetSaveTimer, - saveState: saveState, - get saveTimeout () { return saveTimeout; }, - get store () { return store; } - }); - - window.device = device; - window.browser = browser$1; - window.queue = queue$1; - window.entry = entry; - window.mode = mode; - window.player = player$1; - window.main = main$1; - document.addEventListener('load', Start()); - -})(); diff --git a/build/jsmediatags.min.js b/build/jsmediatags.min.js deleted file mode 100644 index f6a3d49..0000000 --- a/build/jsmediatags.min.js +++ /dev/null @@ -1,102 +0,0 @@ -var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(d,r,q){d!=Array.prototype&&d!=Object.prototype&&(d[r]=q.value)};$jscomp.getGlobal=function(d){return"undefined"!=typeof window&&window===d?d:"undefined"!=typeof global&&null!=global?global:d};$jscomp.global=$jscomp.getGlobal(this); -$jscomp.polyfill=function(d,r,q,n){if(r){q=$jscomp.global;d=d.split(".");for(n=0;n=this._array.length)throw Error("Offset "+a+" hasn't been loaded yet.");return this._array[a]}}],[{key:"canReadFile",value:function(a){return Array.isArray(a)||"function"===typeof Buffer&&Buffer.isBuffer(a)}}]); -return a}(d("./MediaFileReader"));r.exports=d},{"./MediaFileReader":11}],4:[function(d,r,q){function n(a){"@babel/helpers - typeof";n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"===typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};return n(a)}function u(a,c){for(var k=0;kl.offset&&(d=this._sliceData(l.data,0,d-l.offset), -m.data=this._concatData(d,e));b&&(d=this._sliceData(m.data,0,p.offset-m.offset),m.data=this._concatData(d,p.data));this._fileData.splice(h.startIx,h.endIx-h.startIx+1,m)}}},{key:"_concatData",value:function(d,e){if("undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(d)){var b=new d.constructor(d.length+e.length);b.set(d,0);b.set(e,d.length);return b}return d.concat(e)}},{key:"_sliceData",value:function(d,e,b){return d.slice?d.slice(e,b):d.subarray(e,b)}},{key:"_getChunkRange", -value:function(d,e){for(var b,h,l=-1,t=-1,m=0,f=0;f=h-1){l=f;break}}if(-1===l)return{startIx:-1,endIx:-1,insertIx:m};for(f=l;f=h-1&&(t=f),e<=b+1);f++);-1===t&&(t=l);return{startIx:l,endIx:t}}},{key:"hasDataRange",value:function(d,e){for(var b=0;b=h.offset&&e=h&&d<=l){e=this._fileData[b];break}}if(e)return e.data[d-e.offset];throw Error("Offset "+d+" hasn't been loaded yet.");}}],[{key:"NOT_FOUND",get:function(){return-1}}]);return d}();r.exports=d},{}],6:[function(d,r,q){function n(a){"@babel/helpers - typeof";n="function"=== -typeof Symbol&&"symbol"===typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"===typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};return n(a)}function u(a,g){for(var c=0;ca?t[a]:""}};f&&(a.tags.track=f);return a}}],[{key:"getTagIdentifierByteRange",value:function(){return{offset:-128,length:128}}},{key:"canReadTagFormat",value:function(a){return"TAG"=== -String.fromCharCode.apply(String,a.slice(0,3))}}]);return f}(q);var t="Blues;Classic Rock;Country;Dance;Disco;Funk;Grunge;Hip-Hop;Jazz;Metal;New Age;Oldies;Other;Pop;R&B;Rap;Reggae;Rock;Techno;Industrial;Alternative;Ska;Death Metal;Pranks;Soundtrack;Euro-Techno;Ambient;Trip-Hop;Vocal;Jazz+Funk;Fusion;Trance;Classical;Instrumental;Acid;House;Game;Sound Clip;Gospel;Noise;AlternRock;Bass;Soul;Punk;Space;Meditative;Instrumental Pop;Instrumental Rock;Ethnic;Gothic;Darkwave;Techno-Industrial;Electronic;Pop-Folk;Eurodance;Dream;Southern Rock;Comedy;Cult;Gangsta;Top 40;Christian Rap;Pop/Funk;Jungle;Native American;Cabaret;New Wave;Psychadelic;Rave;Showtunes;Trailer;Lo-Fi;Tribal;Acid Punk;Acid Jazz;Polka;Retro;Musical;Rock & Roll;Hard Rock;Folk;Folk-Rock;National Folk;Swing;Fast Fusion;Bebob;Latin;Revival;Celtic;Bluegrass;Avantgarde;Gothic Rock;Progressive Rock;Psychedelic Rock;Symphonic Rock;Slow Rock;Big Band;Chorus;Easy Listening;Acoustic;Humour;Speech;Chanson;Opera;Chamber Music;Sonata;Symphony;Booty Bass;Primus;Porn Groove;Satire;Slow Jam;Club;Tango;Samba;Folklore;Ballad;Power Ballad;Rhythmic Soul;Freestyle;Duet;Punk Rock;Drum Solo;Acapella;Euro-House;Dance Hall".split(";"); -r.exports=d},{"./MediaFileReader":11,"./MediaTagReader":12}],8:[function(d,r,q){function n(b,f){for(var a=0;a2.4",tags:{}};var e=a.getByteAt(g+4),k=a.isBitSetAt(g+5,7),h=a.isBitSetAt(g+5,6),d=a.isBitSetAt(g+5,5),l=a.getSynchsafeInteger32At(g+6);g+=10;if(h)if(4===f){var p=a.getSynchsafeInteger32At(g);g+=p}else p=a.getLongAt(g,!0),g+=p+4;p={type:"ID3",version:"2."+f+"."+e,major:f,revision:e,flags:{unsynchronisation:k,extended_header:h,experimental_indicator:d,footer_present:!1},size:l,tags:{}};b&&(c=this._expandShortcutTags(b));b=l+10;p.flags.unsynchronisation&& -(a=t.getUnsyncFileReader(a,g,l),g=0,b=a.getSize());a=t.readFrames(g,b,a,p,c);for(var n in m)m.hasOwnProperty(n)&&(c=this._getFrameData(a,m[n]))&&(p.tags[n]=c);for(var q in a)a.hasOwnProperty(q)&&(p.tags[q]=a[q]);return p}},{key:"_getFrameData",value:function(a,b){for(var c=0,g;g=b[c];c++)if(g in a)return a=a[g]instanceof Array?a[g][0]:a[g],a.data}},{key:"getShortcuts",value:function(){return m}}],[{key:"getTagIdentifierByteRange",value:function(){return{offset:0,length:10}}},{key:"canReadTagFormat", -value:function(a){return"ID3"===String.fromCharCode.apply(String,a.slice(0,3))}}]);return a}(q);var m={title:["TIT2","TT2"],artist:["TPE1","TP1"],album:["TALB","TAL"],year:["TYER","TYE"],comment:["COMM","COM"],track:["TRCK","TRK"],genre:["TCON","TCO"],picture:["APIC","PIC"],lyrics:["USLT","ULT"]};r.exports=d},{"./ID3v2FrameReader":8,"./MediaFileReader":11,"./MediaTagReader":12}],10:[function(d,r,q){function n(a){"@babel/helpers - typeof";n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator? -function(a){return typeof a}:function(a){return a&&"function"===typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a};return n(a)}function u(a,b){for(var c=0;c=a.getSize())f.onSuccess();else{var g=this,e=a.getLongAt(b,!0);if(0==e||isNaN(e))f.onSuccess();else{var h=a.getStringAt(b+4,4);if(this._isContainerAtom(h)){"meta"==h&&(b+=4);var d=(c?c+".":"")+h;"moov.udta.meta.ilst"===d?a.loadRange([b,b+e],f):a.loadRange([b+8,b+8+8], -{onSuccess:function(){g._loadAtom(a,b+8,d,f)},onError:f.onError})}else a.loadRange([b+e,b+e+8],{onSuccess:function(){g._loadAtom(a,b+e,c,f)},onError:f.onError})}}}},{key:"_isContainerAtom",value:function(a){return 0<=["moov","udta","meta","ilst"].indexOf(a)}},{key:"_canReadAtom",value:function(a){return"----"!==a}},{key:"_parseData",value:function(a,b){var c={};b=this._expandShortcutTags(b);this._readAtom(c,a,0,a.getSize(),b);for(var g in f)f.hasOwnProperty(g)&&(b=c[f[g]])&&(c[g]="track"===g?b.data.track: -b.data);return{type:"MP4",ftyp:a.getStringAt(8,4),version:a.getLongAt(12,!0),tags:c}}},{key:"_readAtom",value:function(a,b,c,f,e,h,d){d=void 0===d?"":d+" ";for(var g=c;gb&&(b+=65536);return b}},{key:"getSShortAt",value:function(b,e){b=this.getShortAt(b,e);return 32767e&&(e+=4294967296);return e}},{key:"getSLongAt", -value:function(b,e){b=this.getLongAt(b,e);return 2147483647e&&(e+=16777216);return e}},{key:"getStringAt",value:function(b,e){for(var d=[],h=b,m=0;ha||224<=a?b[f]=String.fromCharCode(c): -(a=(e[h+n]<<8)+e[h+m],h+=2,b[f]=String.fromCharCode(c,a))}return new p(b.join(""),h)},readUTF8String:function(e,b){var d=0;b=Math.min(b||e.length,e.length);239==e[0]&&187==e[1]&&191==e[2]&&(d=3);for(var l=[],n=0;dm)l[n]=String.fromCharCode(m);else if(194<=m&&224>m){var f=e[d++];l[n]=String.fromCharCode(((m&31)<<6)+(f&63))}else if(224<=m&&240>m){f=e[d++];var a=e[d++];l[n]=String.fromCharCode(((m&255)<<12)+((f&63)<<6)+(a&63))}else if(240<=m&&245>m){f=e[d++]; -a=e[d++];var c=e[d++];a=((m&7)<<18)+((f&63)<<12)+((a&63)<<6)+(c&63)-65536;l[n]=String.fromCharCode((a>>10)+55296,(a&1023)+56320)}}return new p(l.join(""),d)},readNullTerminatedString:function(e,b){var d=[];b=b||e.length;for(var l=0;lc._config.disallowedXhrHeaders.indexOf(b.toLowerCase())&&a.setRequestHeader(b,d)}},{key:"_hasResponseHeader",value:function(a,b){a=a.getAllResponseHeaders();if(!a)return!1;a=a.split("\r\n");for(var c=[],d=0;da.offset&&(-a.offset>b||0=b||c)}d("./MediaFileReader");var b=d("./XhrFileReader"),h=d("./BlobFileReader"),l=d("./ArrayFileReader");d("./MediaTagReader");var t= -d("./ID3v1TagReader"),m=d("./ID3v2TagReader"),f=d("./MP4TagReader"),a=d("./FLACTagReader"),c=[],k=[],g=function(){function a(b){n(this,a);p(this,"_file",void 0);p(this,"_tagsToRead",void 0);p(this,"_fileReader",void 0);p(this,"_tagReader",void 0);this._file=b}v(a,[{key:"setTagsToRead",value:function(a){this._tagsToRead=a;return this}},{key:"setFileReader",value:function(a){this._fileReader=a;return this}},{key:"setTagReader",value:function(a){this._tagReader=a;return this}},{key:"read",value:function(a){var b= -new (this._getFileReader())(this._file),c=this;b.init({onSuccess:function(){c._getTagReader(b,{onSuccess:function(d){(new d(b)).setTagsToRead(c._tagsToRead).read(a)},onError:a.onError})},onError:a.onError})}},{key:"_getFileReader",value:function(){return this._fileReader?this._fileReader:this._findFileReader()}},{key:"_findFileReader",value:function(){for(var a=0;ah.offset&&h.offset<-f/2?c.push(k[g]):d.push(k[g]))}var l=!1;g={onSuccess:function(){if(l){for(var c=0;c --> - + - + +