diff --git a/gulpfile.js b/gulpfile.js index ea171bbd..13f76b5d 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -44,7 +44,7 @@ gulp.task('js', function () { }); gulp.task('embed', function () { - return gulp.src(['server/VERSION.js', 'server/config/api_key.js', 'server/public/assets/js/player.js', 'server/public/assets/js/helpers.js', 'server/public/assets/js/playercontrols.js', 'server/public/assets/js/list.js', 'server/public/assets/js/embed.js', '!server/public/assets/js/frontpage*', '!server/public/assets/js/remotecontroller.js', 'server/public/assets/js/hostcontroller.js']) + return gulp.src(['server/VERSION.js', 'server/config/api_key.js', 'server/public/assets/js/player.js', 'server/public/assets/js/functions.js', 'server/public/assets/js/helpers.js', 'server/public/assets/js/playercontrols.js', 'server/public/assets/js/list.js', 'server/public/assets/js/embed.js', '!server/public/assets/js/frontpage*', '!server/public/assets/js/remotecontroller.js', 'server/public/assets/js/hostcontroller.js']) //.pipe(sourcemaps.init()) .pipe(concat('embed.min.js')) .pipe(uglify({ @@ -105,6 +105,7 @@ gulp.task('remotecontroller', function () { gulp.task('default', function(){ gulp.watch(['server/VERSION.js', 'server/public/assets/js/*.js'], ['js']); gulp.watch(['server/public/assets/css/*.css'], ['css']); + gulp.watch(['server/public/assets/css/*.css'], ['css-embed']); gulp.watch(['server/public/assets/js/token*.js', 'server/public/assets/js/helpers.js'], ['token']); gulp.watch(['server/VERSION.js', 'server/public/assets/js/*.js'], ['embed']); gulp.watch(['server/VERSION.js', 'server/public/assets/js/callback.js', 'server/public/assets/js/helpers.js'], ['callback']); diff --git a/package-lock.json b/package-lock.json index 5c53bd4a..2b334fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,34 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@gulp-sourcemaps/identity-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", + "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", + "requires": { + "acorn": "^5.0.3", + "css": "^2.2.1", + "normalize-path": "^2.1.1", + "source-map": "^0.6.0", + "through2": "^2.0.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@gulp-sourcemaps/map-sources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", + "requires": { + "normalize-path": "^2.0.1", + "through2": "^2.0.3" + } + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -28,6 +56,11 @@ } } }, + "acorn": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz", + "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==" + }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -69,7 +102,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, "requires": { "ansi-wrap": "^0.1.0" } @@ -98,8 +130,7 @@ "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" }, "archy": { "version": "1.0.0", @@ -119,8 +150,7 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", @@ -131,8 +161,7 @@ "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-differ": { "version": "1.0.0", @@ -187,8 +216,7 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async": { "version": "1.5.2", @@ -200,6 +228,11 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "autoprefixer": { "version": "6.7.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", @@ -498,8 +531,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-shims": { "version": "1.0.0", @@ -707,8 +739,7 @@ "clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, "clone-stats": { "version": "0.0.1", @@ -720,7 +751,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, "requires": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", @@ -730,14 +760,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -752,7 +780,6 @@ "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" } @@ -946,6 +973,11 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -986,8 +1018,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cors": { "version": "2.8.4", @@ -1028,6 +1059,27 @@ } } }, + "css": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", + "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", + "requires": { + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.5.1", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -1100,6 +1152,14 @@ } } }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "^0.10.9" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1134,6 +1194,31 @@ "ms": "2.0.0" } }, + "debug-fabulous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "requires": { + "debug": "3.X", + "memoizee": "0.4.X", + "object-assign": "4.X" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -1142,8 +1227,7 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "defaults": { "version": "1.0.3", @@ -1206,6 +1290,11 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + }, "dns-prefetch-control": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", @@ -1366,11 +1455,51 @@ "has-binary2": "~1.0.2" } }, + "es5-ext": { + "version": "0.10.46", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", + "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "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-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1393,6 +1522,15 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "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" + } + }, "exif-parser": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", @@ -1847,7 +1985,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -1857,7 +1994,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -2460,6 +2596,31 @@ } } }, + "gulp-sourcemaps": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz", + "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=", + "requires": { + "@gulp-sourcemaps/identity-map": "1.X", + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "5.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "1.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "~0.6.0", + "strip-bom-string": "1.X", + "through2": "2.X" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "gulp-uglify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.1.tgz", @@ -2500,6 +2661,48 @@ } } }, + "gulp-uglify-es": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/gulp-uglify-es/-/gulp-uglify-es-1.0.4.tgz", + "integrity": "sha512-UMRufZsBmQizCYpftutaiVoLswpbzFEfY90EJLU4YlTgculeHnanb794s88TMd5tpCZVC638sAX6JrLVYTP/Wg==", + "requires": { + "o-stream": "^0.2.2", + "plugin-error": "^1.0.1", + "terser": "^3.7.5", + "vinyl": "^2.1.0", + "vinyl-sourcemaps-apply": "^0.2.1" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + } + } + }, "gulp-util": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", @@ -3000,11 +3203,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" } }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -3059,8 +3266,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "jimp": { "version": "0.2.28", @@ -3337,6 +3543,14 @@ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", "dev": true }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "requires": { + "es5-ext": "~0.10.2" + } + }, "macaddress": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", @@ -3392,6 +3606,21 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memoizee": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", + "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "requires": { + "d": "1", + "es5-ext": "^0.10.45", + "es6-weak-map": "^2.0.2", + "event-emitter": "^0.3.5", + "is-promise": "^2.1", + "lru-queue": "0.1", + "next-tick": "1", + "timers-ext": "^0.1.5" + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -3798,6 +4027,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nocache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", @@ -3808,6 +4042,14 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.6.4.tgz", "integrity": "sha512-SD4uuX7NMzZ5f5m1XHDd13J4UC3SmdJk8DsmU1g6Nrs5h3x9LcXr6EBPZIqXRJ3LrF7RdklzGhZRF/TuylTcLg==" }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -3845,6 +4087,11 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, + "o-stream": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/o-stream/-/o-stream-0.2.2.tgz", + "integrity": "sha512-V3j76KU3g/Gyl8rpdi2z72rn5zguMvTCQgAXfBe3pxEefKqXmOUOD7mvx/mNjykdxGqDVfpSoo8r+WdrkWg/1Q==" + }, "object-assign": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", @@ -4188,7 +4435,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, "requires": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", @@ -4547,8 +4793,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promise": { "version": "7.3.1", @@ -4779,8 +5024,7 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.2", @@ -4947,8 +5191,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "ret": { "version": "0.1.15", @@ -5379,6 +5622,39 @@ "amdefine": ">=0.0.4" } }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, "sparkles": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", @@ -5542,6 +5818,11 @@ "is-utf8": "^0.2.0" } }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -5563,11 +5844,32 @@ "whet.extend": "~0.9.9" } }, + "terser": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.8.2.tgz", + "integrity": "sha512-FGSBXiBJe2TSXy6pWwXpY0YcEWEK35UKL64BBbxX3aHqM4Nj0RMqXvqBuoSGfyd80t8MKQ5JwYm5jRRGTSEFNg==", + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, "requires": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -5576,32 +5878,27 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5615,14 +5912,12 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "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" } @@ -5630,14 +5925,12 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" } } }, @@ -5661,6 +5954,15 @@ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, + "timers-ext": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz", + "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", + "requires": { + "es5-ext": "~0.10.14", + "next-tick": "1" + } + }, "tinycolor2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", @@ -5919,8 +6221,7 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url-regex": { "version": "3.2.0", @@ -5956,8 +6257,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -6119,7 +6419,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, "requires": { "source-map": "^0.5.1" }, @@ -6127,8 +6426,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, diff --git a/package.json b/package.json index f2732d28..64074079 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,8 @@ "express-recaptcha": "^3.0.1", "express-session": "^1.15.6", "express-sessions": "^1.0.6", + "gulp-sourcemaps": "^2.6.4", + "gulp-uglify-es": "^1.0.4", "helmet": "^3.12.0", "jimp": "^0.2.28", "mongodb": "^2.2.35", diff --git a/server/public/assets/css/embed.css b/server/public/assets/css/embed.css index 4457907b..e1f886cc 100755 --- a/server/public/assets/css/embed.css +++ b/server/public/assets/css/embed.css @@ -13,6 +13,40 @@ transition: all .3s !important; } +.prev.playbar, .skip.playbar { + float: left; + font-size: 24px; + cursor: pointer; + height: 32px; + line-height: 31px; + padding-top: 3px; +} + +.prev, .skip { + display: flex; + justify-content: center; + align-items: center; +} + +#playpause, .prev.playbar, .skip.playbar { + padding: 0 2.5px; +} +.playbar-btn:hover { + background-color: rgba(0,0,0,.6); + color: hsla(0,0%,100%,.5); +} + +.hide { + display: none!important; +} +.playbar-btn { + cursor: pointer; + transition: background-color .2s; +} +#controls, .playbar { + color: #fff; +} + #player_loader_container { width: 100%; height: 100%; @@ -252,9 +286,28 @@ color:white; } +.margin-playbar { + margin-left: 10px; +} + + +#seekToDuration{ + position: absolute; + background: #2d2d2d; + color:white; + padding: 10px 8px; + z-index: 2000; + background-color: #2d2d2d; + border-radius: 2px; + color: #fff; + min-height: 36px; + text-align: center; + max-width: calc(100% - 4px); + pointer-events: none; +} + #playpause, #volume-button { - margin-left:10px; font-size: 23px; } diff --git a/server/public/assets/js/channel.js b/server/public/assets/js/channel.js index fc10ffcc..e3bffa12 100644 --- a/server/public/assets/js/channel.js +++ b/server/public/assets/js/channel.js @@ -364,61 +364,6 @@ var Channel = { } }, - seekToClick: function(e){ - var acceptable = ["bar", "controls", "duration"]; - - if(acceptable.indexOf(e.target.getAttribute("id")) >= 0) { - if(full_playlist == undefined) return; - var total = full_playlist[full_playlist.length - 1].duration / document.getElementById("controls").offsetWidth; - total = total * e.clientX; - - if(!chromecastAvailable){ - if(videoSource == "youtube") Player.player.seekTo(total + Player.np.start); - else if(videoSource == "soundcloud") Player.soundcloud_player.seek((total + Player.np.start) * 1000); - dMinutes = Math.floor(duration / 60); - dSeconds = duration - dMinutes * 60; - currDurr = total; - if(currDurr - Player.np.start > duration) { - currDurr = duration - Player.np.start; - } - currDurr = currDurr - Player.np.start; - minutes = Math.floor(currDurr / 60); - seconds = currDurr - (minutes * 60); - document.getElementById("duration").innerHTML = Helper.pad(minutes)+":"+Helper.pad(seconds)+" / "+Helper.pad(dMinutes)+":"+Helper.pad(dSeconds); - per = (100 / duration) * currDurr; - if(per >= 100) - per = 100; - else if(duration === 0) - per = 0; - document.getElementById("bar").style.width = per + "%" - } else { - castSession.sendMessage("urn:x-cast:zoff.me", {type: "seekTo", seekTo: total}); - } - } - }, - - seekToMove: function(e){ - var pos_x = event.clientX - Math.ceil(document.getElementById("seekToDuration").offsetWidth / 2); - if(pos_x < 0) pos_x = 0; - else if(pos_x + document.getElementById("seekToDuration").offsetWidth > document.getElementById("controls").offsetWidth) { - pos_x = document.getElementById("controls").offsetWidth - document.getElementById("seekToDuration").offsetWidth; - } - Helper.css("#seekToDuration", "left", pos_x + "px"); - try{ - var total = full_playlist[full_playlist.length - 1].duration / document.getElementById("controls").offsetWidth; - total = total * event.clientX; - var _time = Helper.secondsToOther(total); - var _minutes = Helper.pad(_time[0]); - var _seconds = Helper.pad(Math.ceil(_time[1])); - Helper.setHtml("#seekToDuration", _minutes + ":" + _seconds); - - var acceptable = ["bar", "controls", "duration"]; - if(acceptable.indexOf(event.target.getAttribute("id")) >= 0 && dragging) { - document.getElementById("bar").style.width(((100 / duration) * total) + "%"); - } - } catch(e){} - }, - set_title_width: function(start){ if(window.innerWidth > 600){ var add_width = document.getElementsByClassName("brand-logo")[0].offsetWidth diff --git a/server/public/assets/js/embed.js b/server/public/assets/js/embed.js index 883aaed7..94cd1572 100755 --- a/server/public/assets/js/embed.js +++ b/server/public/assets/js/embed.js @@ -5,6 +5,7 @@ var song_title = ""; var paused = false; var client = false; var startTime = 0; +var full_playlist; var hostMode = false; var soundcloud_enabled = true; var socket_connected = false; @@ -12,6 +13,8 @@ var dynamicListeners = {}; var player_ready = false; var previousSoundcloud; var buffering = false; +var prev_chan_list = ""; +var local_new_channel = false; var empty_clear = false; var fix_too_far = false; var beginning = false; @@ -76,12 +79,12 @@ window.addEventListener("message", receiveMessage, false); window.addEventListener("DOMContentLoaded", function() { }); window.addEventListener("load", function() { - if(hash.length >= 2 && hash.indexOf("autoplay") > 0){ - autoplay = true; - Helper.css("#player", "visibility", "hidden"); - } else { - //paused = true; - } + if(hash.length >= 2 && hash.indexOf("autoplay") > 0){ + autoplay = true; + Helper.css("#player", "visibility", "hidden"); + } else { + //paused = true; + } if(hash.indexOf("videoonly") > -1) { Helper.addClass("#wrapper", "hide"); Helper.addClass("#controls", "hide"); @@ -89,6 +92,7 @@ window.addEventListener("load", function() { Helper.addClass("#player_overlay", "video_only"); Helper.css("#zoffbutton", "bottom", "0px"); } + M.Modal.init(document.getElementById("locked_channel"), { dismissible: false }); @@ -98,6 +102,10 @@ window.addEventListener("load", function() { //add = "localhost"; socket = io.connect(''+add+':8080', connection_options); + if(hash.indexOf("localmode") > 1) { + change_offline(true, false); + } + socket.on('auth_required', function() { M.Modal.getInstance(document.getElementById("locked_channel")).open(); }); @@ -125,7 +133,7 @@ window.addEventListener("load", function() { setup_list_listener(); if(autoplay) { - startWaitTimerPlay(); + startWaitTimerPlay(); } window.onYouTubeIframeAPIReady = Player.onYouTubeIframeAPIReady; @@ -147,13 +155,13 @@ window.addEventListener("load", function() { function resizePlaylistPlaying(){}; function startWaitTimerPlay() { - setTimeout(function() { - if(videoSource == "youtube") { - Player.player.playVideo(); - } else if(videoSource == "soundcloud"){ - Player.soundcloud_player.play(); - } - }, 5000); + setTimeout(function() { + if(videoSource == "youtube") { + Player.player.playVideo(); + } else if(videoSource == "soundcloud"){ + Player.soundcloud_player.play(); + } + }, 5000); } function setup_host_listener(id) { @@ -183,78 +191,78 @@ function loadChromecastVideo(){} function toast(msg) { switch(msg) { case "suggested_thumbnail": - if(embed) return; - msg = "The thumbnail has been suggested!"; - break; + if(embed) return; + msg = "The thumbnail has been suggested!"; + break; case "faulty_start_end": - if(embed) return; - break; + if(embed) return; + break; case "wait_longer": - if(embed) return; - break; + if(embed) return; + break; case "suggested_description": - if(embed) return; - break; + if(embed) return; + break; case "thumbnail_denied": - if(embed) return; - break; + if(embed) return; + break; case "description_denied": - if(embed) return; - break; + if(embed) return; + break; case "addedsong": - if(embed) return; - break; + if(embed) return; + break; case "addedplaylist": - if(embed) return; - break; + if(embed) return; + break; case "savedsettings": - if(embed) return; - break; + if(embed) return; + break; case "wrongpass": - if(embed) return; - break; + if(embed) return; + break; case "deleted_songs": - if(embed) return; - break; + if(embed) return; + break; case "shuffled": - if(embed) return; - break; + if(embed) return; + break; case "deletesong": - if(embed) return; - break; + if(embed) return; + break; case "voted": - msg=Helper.rnd(["You voted!", "You vote like a boss", "Voting is the key to democracy", "May you get your song to the very top!", "I love that song! I vouch for you.", "Only you vote that good", "I like the way you vote...", "Up the video goes!", "Voted Zoff for president", "Only 999 more to go!"]); - break; + msg=Helper.rnd(["You voted!", "You vote like a boss", "Voting is the key to democracy", "May you get your song to the very top!", "I love that song! I vouch for you.", "Only you vote that good", "I like the way you vote...", "Up the video goes!", "Voted Zoff for president", "Only 999 more to go!"]); + break; case "alreadyvoted": - msg=Helper.rnd(["You can't vote twice on that song!", "I see you have voted on that song before", "One vote per person!", "I know you want to hear your song, but have patience!", "I'm sorry, but I can't let you vote twice, Dave."]); - break; + msg=Helper.rnd(["You can't vote twice on that song!", "I see you have voted on that song before", "One vote per person!", "I know you want to hear your song, but have patience!", "I'm sorry, but I can't let you vote twice, Dave."]); + break; case "skip": - if(embed) return; - break; + if(embed) return; + break; case "listhaspass": - if(embed) return; - break; + if(embed) return; + break; case "noskip": - if(embed) return; - break; + if(embed) return; + break; case "alreadyskip": - if(embed) return; - break; + if(embed) return; + break; case "notyetskip": - if(embed) return; - break; + if(embed) return; + break; case "correctpass": - if(embed) return; - break; + if(embed) return; + break; case "changedpass": - if(embed) return; - break; + if(embed) return; + break; case "suggested": - if(embed) return; - break; + if(embed) return; + break; case "alreadyplay": - if(embed) return; - break; + if(embed) return; + break; } before_toast(); M.toast({html: msg, displayLength: 4000}); @@ -274,38 +282,121 @@ function emit() { } } +function change_offline(enabled, already_offline){ + if(client) { + offline = false; + return; + } + offline = enabled; + socket.emit("offline", {status: enabled, channel: chan != undefined ? chan.toLowerCase() : ""}); + if(!Helper.mobilecheck()) { + if(document.querySelectorAll("#offline-mode").length == 1 && M.Tooltip.getInstance(document.getElementById("offline-mode"))) { + Helper.tooltip("#offline-mode", 'destroy'); + } + } -function handleEvent(e, target, tried, type) { - for(var y = 0; y < e.path.length; y++) { - var target = e.path[y]; - if(dynamicListeners[type] && dynamicListeners[type]["#" + target.id]) { - dynamicListeners[type]["#" + target.id].call(target); - return; - } else { - if(target.classList == undefined) return; - for(var i = 0; i < target.classList.length; i++) { - if(dynamicListeners[type] && dynamicListeners[type]["." + target.classList[i]]) { - dynamicListeners[type]["." + target.classList[i]].call(target); - return; - } + var mouseEnter = function(e){ + Helper.removeClass("#seekToDuration", "hide"); + }; + + var mouseLeave = function(e){ + dragging = false; + Helper.addClass("#seekToDuration", "hide"); + }; + + var mouseDown = function(e) { + var acceptable = ["bar", "controls", "duration"]; + if(acceptable.indexOf(e.target.id) >= 0) { + dragging = true; + } + }; + + var mouseUp = function(e) { + dragging = false; + }; + + if(enabled){ + Helper.addClass("#viewers", "hide"); + Helper.removeClass(".margin-playbar", "margin-playbar"); + Helper.addClass(".prev playbar", "margin-playbar"); + Helper.removeClass(".prev playbar", "hide"); + Helper.removeClass(".skip playbar", "hide"); + Helper.removeClass("#offline-mode", "waves-cyan"); + Helper.addClass("#offline-mode", "cyan"); + Helper.removeClass(".delete-context-menu", "context-menu-disabled"); + if(!Helper.mobilecheck()) { + Helper.tooltip("#offline-mode", { + delay: 5, + position: "bottom", + html: "Disable local mode" + }); + } + + if(window.location.pathname != "/"){ + socket.removeEventListener("color"); + document.getElementById("controls").addEventListener("mouseenter", mouseEnter, false); + document.getElementById("controls").addEventListener("mouseleave", mouseLeave, false); + document.getElementById("controls").addEventListener("mousedown", mouseDown, false); + document.getElementById("controls").addEventListener("mouseup", mouseUp, false); + document.getElementById("controls").addEventListener("mousemove", seekToMove); + document.getElementById("controls").addEventListener("click", seekToClick); + + document.querySelector("#main_components").insertAdjacentHTML("beforeend", "
00:00/01:00
"); + var controlElement = document.querySelector("#controls"); + Helper.css("#seekToDuration", "bottom", "50px"); + Helper.addClass("#controls", "ewresize"); + } + if(full_playlist != undefined && !already_offline){ + for(var x = 0; x < full_playlist.length; x++){ + full_playlist[x].votes = 0; } + List.sortList(); + List.populate_list(full_playlist); + } + } else { + + if(!Admin.logged_in) Helper.addClass(".delete-context-menu", "context-menu-disabled"); + Helper.removeClass(".margin-playbar", "margin-playbar"); + Helper.addClass("#playpause", "margin-playbar"); + Helper.removeClass("#viewers", "hide"); + Helper.addClass(".prev playbar", "hide"); + Helper.addClass(".skip playbar", "hide"); + Helper.addClass("#offline-mode", "waves-cyan"); + Helper.removeClass("#offline-mode", "cyan"); + if(!Helper.mobilecheck()) { + Helper.tooltip("#offline-mode", { + delay: 5, + position: "bottom", + html: "Enable local mode" + }); + } + + if(window.location.pathname != "/"){ + document.getElementById("controls").removeEventListener("mouseenter", mouseEnter, false); + document.getElementById("controls").removeEventListener("mouseleave", mouseLeave, false); + document.getElementById("controls").removeEventListener("mousedown", mouseDown, false); + document.getElementById("controls").removeEventListener("mouseup", mouseUp, false); + document.getElementById("controls").removeEventListener("mousemove", seekToMove); + document.getElementById("controls").removeEventListener("click", seekToClick); + Helper.removeElement("#seekToDuration"); + socket.on("color", Player.setBGimage); + socket.emit("pos", {channel: chan.toLowerCase()}); + var add = ""; + //if(private_channel) add = Crypt.getCookie("_uI") + "_"; + socket.emit("list", {version: parseInt(localStorage.getItem("VERSION")), channel: add + chan.toLowerCase()}); + Helper.removeClass("#controls", "ewresize"); } } } -function addListener(type, element, callback) { - if(dynamicListeners[type] == undefined) dynamicListeners[type] = {}; - dynamicListeners[type][element] = callback; -} - function before_toast(){ /*if($('.toast').length > 0) { - var toastElement = $('.toast').first()[0]; - var toastInstance = toastElement.M_Toast; - toastInstance.remove(); - }*/ - M.Toast.dismissAll(); - //Materialize.Toast.removeAll(); + var toastElement = $('.toast').first()[0]; + var toastInstance = toastElement.M_Toast; + toastInstance.remove(); +}*/ +M.Toast.dismissAll(); +//Materialize.Toast.removeAll(); } document.addEventListener("click", function(e) { @@ -318,7 +409,8 @@ addListener("click", "#zoffbutton", function(e) { }); addListener("click", ".vote-container", function(e) { - var id = this.getAttribute("data-video-id"); + var that = e; + var id = that.getAttribute("data-video-id"); List.vote(id, "pos"); }); @@ -336,6 +428,18 @@ addListener("click", ".next_page", function(e) { List.dynamicContentPage(1); }); +addListener("click", ".prev", function(event){ + this.preventDefault(); + if(!offline) return; + List.skip(false); +}); + +addListener("click", ".skip", function(event){ + this.preventDefault(); + if(!offline) return; + List.skip(true); +}); + addListener("click", ".last_page", function(e){ event.preventDefault(); List.dynamicContentPage(10); diff --git a/server/public/assets/js/functions.js b/server/public/assets/js/functions.js index f43813fe..c506c03c 100644 --- a/server/public/assets/js/functions.js +++ b/server/public/assets/js/functions.js @@ -23,7 +23,7 @@ function removeAllListeners() { function resizeFunction() { if(chan && !Helper.mobilecheck()){ - if(document.querySelector("#wrapper") == null) return; + if(document.querySelector("#wrapper") == null) return; if(!client && !embed) document.querySelector("#hide-playlist").style.left = (document.querySelector("#video-container").offsetWidth - document.querySelector("#hide-playlist").offsetWidth) + "px"; if(window.innerWidth > 600 && document.querySelector("#wrapper").style.height != "") { document.querySelector("#wrapper").style.height = ""; @@ -753,10 +753,10 @@ function disable_debug(){ localStorage.debug = false; } -function embed_code(autoplay, width, height, color, embed_code){ +function embed_code(autoplay, width, height, color, embed_code, embed_local){ var autoplay_add = ""; if(autoplay == "&autoplay") autoplay_add = 'allow="autoplay"'; - return ''; + return ''; } function change_offline(enabled, already_offline){ @@ -795,88 +795,129 @@ function change_offline(enabled, already_offline){ }; if(enabled){ - /*if(list_html == undefined){ - var tempOuter = document.createElement("div"); - list_html.innerHTML = list_html; - //list_html.find(".list-remove").removeClass("hide"); - list_html = list_html.innerHTML; - }*/ - //$(".list-remove").removeClass("hide"); - Helper.addClass("#viewers", "hide"); - Helper.removeClass(".margin-playbar", "margin-playbar"); - Helper.addClass(".prev playbar", "margin-playbar"); - Helper.removeClass(".prev playbar", "hide"); - Helper.removeClass("#offline-mode", "waves-cyan"); - Helper.addClass("#offline-mode", "cyan"); - Helper.removeClass(".delete-context-menu", "context-menu-disabled"); - if(!Helper.mobilecheck()) { - Helper.tooltip("#offline-mode", { - delay: 5, - position: "bottom", - html: "Disable local mode" - }); - } - - if(window.location.pathname != "/"){ - socket.removeEventListener("color"); - document.getElementById("controls").addEventListener("mouseenter", mouseEnter, false); - document.getElementById("controls").addEventListener("mouseleave", mouseLeave, false); - document.getElementById("controls").addEventListener("mousedown", mouseDown, false); - document.getElementById("controls").addEventListener("mouseup", mouseUp, false); - document.getElementById("controls").addEventListener("mousemove", Channel.seekToMove); - document.getElementById("controls").addEventListener("click", Channel.seekToClick); - - document.querySelector("#main_components").insertAdjacentHTML("beforeend", "
00:00/01:00
"); - var controlElement = document.querySelector("#controls"); - if(!Helper.mobilecheck()) Helper.css("#seekToDuration", "top", -controlElement.offsetHeight - 25 + "px"); - else if(Helper.mobilecheck()) Helper.css("#seekToDuration", "top", -controlElement.offsetHeight - 25 + "px"); - Helper.addClass("#controls", "ewresize"); - } - if(full_playlist != undefined && !already_offline){ - for(var x = 0; x < full_playlist.length; x++){ - full_playlist[x].votes = 0; + Helper.addClass("#viewers", "hide"); + Helper.removeClass(".margin-playbar", "margin-playbar"); + Helper.addClass(".prev playbar", "margin-playbar"); + Helper.removeClass(".prev playbar", "hide"); + Helper.removeClass("#offline-mode", "waves-cyan"); + Helper.addClass("#offline-mode", "cyan"); + Helper.removeClass(".delete-context-menu", "context-menu-disabled"); + if(!Helper.mobilecheck()) { + Helper.tooltip("#offline-mode", { + delay: 5, + position: "bottom", + html: "Disable local mode" + }); + } + + if(window.location.pathname != "/"){ + socket.removeEventListener("color"); + document.getElementById("controls").addEventListener("mouseenter", mouseEnter, false); + document.getElementById("controls").addEventListener("mouseleave", mouseLeave, false); + document.getElementById("controls").addEventListener("mousedown", mouseDown, false); + document.getElementById("controls").addEventListener("mouseup", mouseUp, false); + document.getElementById("controls").addEventListener("mousemove", seekToMove); + document.getElementById("controls").addEventListener("click", seekToClick); + + document.querySelector("#main_components").insertAdjacentHTML("beforeend", "
00:00/01:00
"); + var controlElement = document.querySelector("#controls"); + if(!Helper.mobilecheck()) Helper.css("#seekToDuration", "top", -controlElement.offsetHeight - 25 + "px"); + else if(Helper.mobilecheck()) Helper.css("#seekToDuration", "top", -controlElement.offsetHeight - 25 + "px"); + Helper.addClass("#controls", "ewresize"); + } + if(full_playlist != undefined && !already_offline){ + for(var x = 0; x < full_playlist.length; x++){ + full_playlist[x].votes = 0; + } + List.sortList(); + List.populate_list(full_playlist); + } + } else { + if(!Admin.logged_in) Helper.addClass(".delete-context-menu", "context-menu-disabled"); + Helper.removeClass(".margin-playbar", "margin-playbar"); + Helper.addClass("#playpause", "margin-playbar"); + Helper.removeClass("#viewers", "hide"); + Helper.addClass(".prev playbar", "hide"); + Helper.addClass("#offline-mode", "waves-cyan"); + Helper.removeClass("#offline-mode", "cyan"); + if(!Helper.mobilecheck()) { + Helper.tooltip("#offline-mode", { + delay: 5, + position: "bottom", + html: "Enable local mode" + }); + } + + if(window.location.pathname != "/"){ + document.getElementById("controls").removeEventListener("mouseenter", mouseEnter, false); + document.getElementById("controls").removeEventListener("mouseleave", mouseLeave, false); + document.getElementById("controls").removeEventListener("mousedown", mouseDown, false); + document.getElementById("controls").removeEventListener("mouseup", mouseUp, false); + document.getElementById("controls").removeEventListener("mousemove", seekToMove); + document.getElementById("controls").removeEventListener("click", seekToClick); + Helper.removeElement("#seekToDuration"); + socket.on("color", Player.setBGimage); + socket.emit("pos", {channel: chan.toLowerCase()}); + var add = ""; + socket.emit("list", {version: parseInt(localStorage.getItem("VERSION")), channel: add + chan.toLowerCase()}); + Helper.removeClass("#controls", "ewresize"); } - List.sortList(); - List.populate_list(full_playlist); } -} else { - /*if(list_html == undefined){ - var tempOuter = document.createElement("div"); - list_html.innerHTML = list_html; - //list_html.find(".list-remove").removeClass("hide"); - list_html = list_html.innerHTML; -}*/ -if(!Admin.logged_in) Helper.addClass(".delete-context-menu", "context-menu-disabled"); -Helper.removeClass(".margin-playbar", "margin-playbar"); -Helper.addClass("#playpause", "margin-playbar"); -Helper.removeClass("#viewers", "hide"); -Helper.addClass(".prev playbar", "hide"); -Helper.addClass("#offline-mode", "waves-cyan"); -Helper.removeClass("#offline-mode", "cyan"); -if(!Helper.mobilecheck()) { - Helper.tooltip("#offline-mode", { - delay: 5, - position: "bottom", - html: "Enable local mode" - }); } -if(window.location.pathname != "/"){ - document.getElementById("controls").removeEventListener("mouseenter", mouseEnter, false); - document.getElementById("controls").removeEventListener("mouseleave", mouseLeave, false); - document.getElementById("controls").removeEventListener("mousedown", mouseDown, false); - document.getElementById("controls").removeEventListener("mouseup", mouseUp, false); - document.getElementById("controls").removeEventListener("mousemove", Channel.seekToMove); - document.getElementById("controls").removeEventListener("click", Channel.seekToClick); - Helper.removeElement("#seekToDuration"); - socket.on("color", Player.setBGimage); - socket.emit("pos", {channel: chan.toLowerCase()}); - var add = ""; - //if(private_channel) add = Crypt.getCookie("_uI") + "_"; - socket.emit("list", {version: parseInt(localStorage.getItem("VERSION")), channel: add + chan.toLowerCase()}); - Helper.removeClass("#controls", "ewresize"); -} +function seekToClick(e){ + var acceptable = ["bar", "controls", "duration"]; + + if(acceptable.indexOf(e.target.getAttribute("id")) >= 0) { + if(full_playlist == undefined) return; + var total = full_playlist[full_playlist.length - 1].duration / document.getElementById("controls").offsetWidth; + total = total * e.clientX; + + if(!chromecastAvailable){ + if(videoSource == "youtube") Player.player.seekTo(total + Player.np.start); + else if(videoSource == "soundcloud") Player.soundcloud_player.seek((total + Player.np.start) * 1000); + dMinutes = Math.floor(duration / 60); + dSeconds = duration - dMinutes * 60; + currDurr = total; + if(currDurr - Player.np.start > duration) { + currDurr = duration - Player.np.start; + } + currDurr = currDurr - Player.np.start; + minutes = Math.floor(currDurr / 60); + seconds = currDurr - (minutes * 60); + document.getElementById("duration").innerHTML = Helper.pad(minutes)+":"+Helper.pad(seconds)+" / "+Helper.pad(dMinutes)+":"+Helper.pad(dSeconds); + per = (100 / duration) * currDurr; + if(per >= 100) + per = 100; + else if(duration === 0) + per = 0; + document.getElementById("bar").style.width = per + "%" + } else { + castSession.sendMessage("urn:x-cast:zoff.me", {type: "seekTo", seekTo: total}); + } + } } + +function seekToMove(e){ + var pos_x = event.clientX - Math.ceil(document.getElementById("seekToDuration").offsetWidth / 2); + if(pos_x < 0) pos_x = 0; + else if(pos_x + document.getElementById("seekToDuration").offsetWidth > document.getElementById("controls").offsetWidth) { + pos_x = document.getElementById("controls").offsetWidth - document.getElementById("seekToDuration").offsetWidth; + } + Helper.css("#seekToDuration", "left", pos_x + "px"); + try{ + var total = full_playlist[full_playlist.length - 1].duration / document.getElementById("controls").offsetWidth; + total = total * event.clientX; + var _time = Helper.secondsToOther(total); + var _minutes = Helper.pad(_time[0]); + var _seconds = Helper.pad(Math.ceil(_time[1])); + Helper.setHtml("#seekToDuration", _minutes + ":" + _seconds); + + var acceptable = ["bar", "controls", "duration"]; + if(acceptable.indexOf(event.target.getAttribute("id")) >= 0 && dragging) { + document.getElementById("bar").style.width(((100 / duration) * total) + "%"); + } + } catch(e){} } function resizePlaylistPlaying(playing) { diff --git a/server/public/assets/js/listeners.js b/server/public/assets/js/listeners.js index e88d4ec7..ada7ccbe 100755 --- a/server/public/assets/js/listeners.js +++ b/server/public/assets/js/listeners.js @@ -76,6 +76,7 @@ var not_export_html = ""; var embed_height = 300; var embed_width = 600; var embed_videoonly = ""; +var embed_localmode = ""; var embed_autoplay = "&autoplay"; var connect_error = false; var access_token_data_youtube = {}; @@ -840,13 +841,13 @@ document.addEventListener("submit", function(event) { addListener("change", "#width_embed", function(event) { var that = this.target; embed_width = that.value; - document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly); + document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly, embed_localmode); }); addListener("change", "#height_embed", function(event) { var that = this.target; embed_height = that.value; - document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly); + document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly, embed_localmode); }); addListener("click", ".prev_page", function(event) { @@ -994,7 +995,7 @@ addListener("change", '#view_channels_select', function(event) { addListener("input", '#color_embed', function(e){ var that = e; color = that.value.substring(1); - document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly); + document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly, embed_localmode); }); addListener("click", ".chan-link", function(e){ @@ -1172,13 +1173,19 @@ addListener("submit", "#listImportSpotify", function(event){ addListener("change", "#autoplay", function(e) { if(e.checked) embed_autoplay = "&autoplay"; else embed_autoplay = ""; - document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly); + document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly, embed_localmode); }); addListener("change", "#videoonly", function(e) { if(e.checked) embed_videoonly = "&videoonly"; else embed_videoonly = ""; - document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly); + document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly, embed_localmode); +}); + +addListener("change", "#localmode", function(e) { + if(e.checked) embed_localmode = "&localmode"; + else embed_localmode = ""; + document.getElementById("embed-area").value = embed_code(embed_autoplay, embed_width, embed_height, color, embed_videoonly, embed_localmode); }); addListener("click", "#playbutton_remote", function(event) { diff --git a/server/public/assets/js/player.js b/server/public/assets/js/player.js index 730e342b..8a0ad82d 100755 --- a/server/public/assets/js/player.js +++ b/server/public/assets/js/player.js @@ -426,7 +426,7 @@ var Player = { } } } - if(offline) { + if(offline && !embed) { var url = 'https://img.youtube.com/vi/'+id+'/mqdefault.jpg'; if(videoSource == "soundcloud") url = Player.np.thumbnail; getColor(url); diff --git a/server/public/layouts/client/embed.handlebars b/server/public/layouts/client/embed.handlebars index 879ff704..1685fe2d 100644 --- a/server/public/layouts/client/embed.handlebars +++ b/server/public/layouts/client/embed.handlebars @@ -7,7 +7,7 @@
-
+
@@ -25,10 +25,16 @@
-
+ +
play_arrow pause
+
00:00 / 00:00
diff --git a/server/public/partials/channel/modal.handlebars b/server/public/partials/channel/modal.handlebars index 0599169c..2ac59855 100644 --- a/server/public/partials/channel/modal.handlebars +++ b/server/public/partials/channel/modal.handlebars @@ -18,6 +18,10 @@ Video-only +