From 80282914c460dd769aa268636826c0d88fd8aa3c Mon Sep 17 00:00:00 2001 From: SirStendec Date: Thu, 14 Mar 2019 21:43:44 -0400 Subject: [PATCH] 4.0.0-rc15 * Added: Data Management > Backup and Restore * Added: Option to expand merged mass sub gift messages by default. * Added: Option to hide the Discover link in the top navigation bar. * Changed: Use icons for navigation of the emote menu. Fix padding as well. * Fixed: Player problems on Squad Streams pages. * Fixed: Option to hide Live indicators on channels in the directory. --- package-lock.json | 207 ++++++++++++------ package.json | 3 +- res/font/ffz-fontello.eot | Bin 22360 -> 23208 bytes res/font/ffz-fontello.svg | 8 +- res/font/ffz-fontello.ttf | Bin 22176 -> 23024 bytes res/font/ffz-fontello.woff | Bin 14008 -> 14476 bytes res/font/ffz-fontello.woff2 | Bin 11732 -> 12112 bytes src/main.js | 2 +- .../main_menu/components/backup-restore.vue | 142 ++++++++++++ src/modules/main_menu/index.js | 6 + src/settings/index.js | 22 ++ src/settings/providers.js | 10 +- src/sites/twitch-twilight/index.js | 1 + .../modules/chat/emote_menu.jsx | 104 +++++---- .../twitch-twilight/modules/chat/index.js | 10 + .../twitch-twilight/modules/chat/line.js | 7 +- .../modules/css_tweaks/index.js | 16 +- src/sites/twitch-twilight/styles/chat.scss | 2 +- src/utilities/dom.js | 27 +++ styles/icons.scss | 3 + 20 files changed, 448 insertions(+), 122 deletions(-) create mode 100644 src/modules/main_menu/components/backup-restore.vue diff --git a/package-lock.json b/package-lock.json index 7483e993..40ed8a15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1378,7 +1378,6 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -2001,9 +2000,9 @@ "dev": true }, "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -2718,7 +2717,6 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -3626,6 +3624,11 @@ } } }, + "file-saver": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.1.tgz", + "integrity": "sha512-dCB3K7/BvAcUmtmh1DzFdv0eXSVJ9IAFt1mw3XZfAexodNRoE29l3xB2EX4wH2q8m/UTzwzEPq/ArYk98kUkBQ==" + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -3757,13 +3760,13 @@ "dev": true }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, @@ -4583,13 +4586,54 @@ "dev": true }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "^5.1.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + } } }, "has": { @@ -5557,8 +5601,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true }, "jsesc": { "version": "0.5.0", @@ -5757,9 +5800,9 @@ } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "lodash.assign": { @@ -6328,9 +6371,9 @@ } }, "node-sass": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", - "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -6348,7 +6391,7 @@ "nan": "^2.10.0", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", - "request": "2.87.0", + "request": "^2.88.0", "sass-graph": "^2.2.4", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" @@ -6448,9 +6491,9 @@ "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -7588,6 +7631,12 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true + }, "public-encrypt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", @@ -7984,31 +8033,60 @@ } }, "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" + }, + "dependencies": { + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } }, "require-directory": { @@ -8779,9 +8857,9 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -8832,9 +8910,9 @@ "dev": true }, "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "dev": true, "requires": { "readable-stream": "^2.0.1" @@ -9196,11 +9274,12 @@ } }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" } }, @@ -9217,27 +9296,12 @@ "dev": true }, "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "dev": true, "requires": { - "glob": "^6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "glob": "^7.1.2" } }, "tty-browserify": { @@ -9259,8 +9323,7 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.3.2", @@ -10347,9 +10410,9 @@ }, "dependencies": { "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true } } diff --git a/package.json b/package.json index c5f76a9d..4a9d9831 100755 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "eslint-plugin-vue": "^4.5.0", "extract-loader": "^1.0.2", "file-loader": "^1.1.11", - "node-sass": "^4.9.3", + "node-sass": "^4.11.0", "raw-loader": "^0.5.1", "sass-loader": "^6.0.7", "style-loader": "^0.18.2", @@ -58,6 +58,7 @@ "dayjs": "^1.7.7", "displacejs": "^1.2.4", "emoji-regex": "^6.5.1", + "file-saver": "^2.0.1", "graphql": "^0.13.2", "graphql-tag": "^2.9.1", "js-cookie": "^2.2.0", diff --git a/res/font/ffz-fontello.eot b/res/font/ffz-fontello.eot index 92503d0289de943d9545ef43a5eda451a48e67a4..886e3abe289b2ac99d1c30b4dc5e35a39f968d43 100644 GIT binary patch delta 1604 zcmZvcZA@EL7{{OI+_x5Ldt3Sfr4*>b2(T7A)*@r2w7h2%GM8EA0(7jrL|_ecx-D~^ zhUv0I9Nw8YS&V*ANoEX7V`9wwVwPne{NT$zU}Bb;Y>Fn%Zt-Q}0H4cUh7x=7JOAh9 zJonr_=d=qS;oQe4&g})r_RNR@zDW}EX2P@SzW}fs0QL-w#gonLRj-gg2Ox|OJeMjF zzrFt!z|IBAmkcI{#!k{NhhvPV` zj}t&cv2ZWy!_Wi~S}H2tnnr(P<)#v!$LDm&#g^h62~5mn5v*0X#cwY{Yg(*APx*GN z4U}quhko7$e`9{5zi~Z&e!x~#WK$<>dT6fsYtzb4YB2pTdp);iv6xo<-|)({|BJ52 zuzKC5i@ny}DHfydx}Z4hauzTIY*QyV2#E1P1ic6*G;(TF{C0=gh>wfYrzjM2Ebx&+N#T*^g$u&TKh**1}?Tc_k)OCB7#+g1Od}PxP{oqYI!b zr~}CS>bowch1KQNi(DU<3wiV+WppK@5D7OHSsCN74fG&#da++Xjz@+Z>!;TP385b( zole>flBA1)PSWjY3OgM3JZoM-fh9*Mswy+07dMrM(C%=fKM)L|8_TSsr#!^$0;w0( zRINA7JVxf`LR`>lM30w+(COVQn|yT$0#8|3P`x@wa#$9cAKTz5MW{c z{EY|ty>ccR#HeyL`kC@Vb0N?5tS&2WHoxXuusLn#?FRdjhU4SoiP1@Mfc{b^ s;=0k1@n<(D4yUBl^CPKLVnQ4mNev&`ubk}kh{EL9$Y>(-LFYxoKlKi7aR2}S delta 742 zcmX|;O-vI(7>3{NmV!`$MEP&A8WN5CsGtR;D1xCzA>kroIG9?Nw%Wp`tXMq&dN4#2 zkgNx>7d^>Ajb_nAgE!+rOssgpXySz?#3-pogG5o^b%HZ_^2|Hm?(ELY)I(|ho@DDf z2HfnNu(_?tu&aBbDL%XmNF4w={Slwqh}kIf6p-fe4{9#k+g~?;!=tRbdeuPW^2F8S z%&cdr0pEbi`CR4^IwKH1*Lx|HdkU~E01b(t;_Jy9U*85aPqXe0aw5Z!w=#cXE(=Dq z*uuNcKOcY=E+Qe^@Au8cpEUyqnQ<}Vi>cCGyUu)#+12NZD4rH&m6;1#R@MFiP0qQp z0(i~*QjIEV@<90v_fn|em%1fgw_5@=bzGWFs)qb;R6%F*`8rr78w;h}f{g6Niqu$Y zG8IoPq?Yt4%VvGnQstCb9sJ*8SnKD(t{2M}j9ao@T4yysz_#CbWG%G}r^WyiRMC?H z?4aWU?4)@{CfG%P7NDA55}*e7;t*grZDxW!G>^yxZhBFGTAFuBc*S)b{1Bj?{wcs- z;A@Eh4Rk^P5B*wzMtV+wee@dvHTlZ}-L7!*M2_b>vSj`QFh82? zU$Z{bS}Qf_-&&vQkG&i8gm=9BPM#w_Gk>OFd%^X>Cq-RF)5RN$=Sqf3K02N|eml#Y zLr!xQ^RAkVu|o|qUw?6A#OP@2k~W1yeWxpxn3k@c4QZMZ%?^aL;F*(^{!r8(R(kYT L?OTlH_6PRA{RP`A diff --git a/res/font/ffz-fontello.svg b/res/font/ffz-fontello.svg index 1f672a2b..4e2b57a3 100644 --- a/res/font/ffz-fontello.svg +++ b/res/font/ffz-fontello.svg @@ -96,11 +96,15 @@ + + + + - + @@ -108,6 +112,8 @@ + + diff --git a/res/font/ffz-fontello.ttf b/res/font/ffz-fontello.ttf index 05697d85ae13a257798e898e1628971bb1c0aba3..43ab3c1f49ab0922886cb27962c840df31f2c1f7 100644 GIT binary patch delta 1586 zcmZuxYfPJE6h7zuE^VQ9ESV--`p200$4s+7CSDeUiCI{(O*9d^#mmG|JYT_DtbLR0O8~;;(96kk@%u;T0QN3YynHw@GV#{w zQ+;GV1Sm|5#AXuYm&pE#SUoa+bl9ioPXnlI0Kprh@z`PWtvL_Ct|f~5N6Deia5Vt! z6o;orCz7*Sp?CcUax_y@?fBGCEE|PK03Dr_aB?Cxo4_mDG}&^4^2yjlyg3qIBRdPg z))G@Q$<9A6_X6ye?WM$YJaM^HfkNWz0QU$6;fg09xq->{U$&S|LoS;`_H5 z8fjat+?1=9C4It~EazmY>t?O5!x5t*A%F4 z@wU`dm3v$syHzSPmKCT#&-6yYREyiamQpmO#9DM!?nIxzLUBB?i#FMt#-w=c+Hap6Uybyz?p->&Ml01dHrDBN1@^nnntY+-F<(IWU4G2f2h+j_4wH2OWWeJNmcTdv1BqnEsl&O YM~@szf7#^{g_()5@p$IfuB+OA0E1>}OaK4? delta 735 zcmX|;OH30{7=_R6l!AajL}-B)tCDEsp@8y`A}>P|k;H`}hJ`6*Xsazu%81nkpbJAZ z;o-Od*|?L1EX=SnxHE2aftVPLCT<`hMsYAPVifd@6TCNHzI*1M`DgB2Ll+O`#KivL zAAmRmpd%OyDD`*|XPyO;e8EB0>v;G3K5%N3b#Jc{irt=^xWLSMni2{OD7>D3F)Rmqa>jR_2AbztuL|=*iY^^s{>)qyj;V>|_Z@#e0xfJJ5bX~J zmS&zc11FhrGZsiFVlG`{zQ^qC3&dn!i@eFqhPF+me?XNo@B9S(W`3!}Wo4zQc!7Iy zO>T4vO*<<>l{M_lAu1sKTb0nMyuAi?;b5VVJCKmET4IbD)5eUkY^-U9*sEpR$~=PA z!T&RX?Rg!XTDR>6TROCL+tytvN&6}}cG%5VaWv>#QlV|w7z0dDMo(MdFg;^|BQ$@O z3Cig&7O0@tEKmuoyDe~(HZ#F7n*YiKRrIO_s%ai7ISEbKs~)=ffMv=3vSMpeD0v$UjD(MH`P8&cXxTCD;G0;-;pNqBY?M~EB)Kn?5)+J zQS-Gv)r3D=bNR=MALY1nQ*#%bhn!QcCwZND^ZC2;mkNdoKDnQ}w>(9jA&=R`Jhevs zjlWLf`}BtP$LW6o DR6o>= diff --git a/res/font/ffz-fontello.woff b/res/font/ffz-fontello.woff index 3b2132b91a59226b806697071d9cffe834b46940..d2127e635cdff8d01b0e6ca227b3e956477c4a41 100644 GIT binary patch delta 12321 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 F{|Apu-1-0j delta 11827 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 diff --git a/res/font/ffz-fontello.woff2 b/res/font/ffz-fontello.woff2 index 025c0b5b4afa3760f95a454c96ccf9fded669530..e74652b7c2afa3514d150908354d5313426a0d87 100644 GIT binary patch literal 12112 zcmV-WFR##dPew8T0RR91054Dg4*&oF09o(=0510c0RR9100000000000000000000 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 diff --git a/src/main.js b/src/main.js index e1a9c363..74ad7c2e 100644 --- a/src/main.js +++ b/src/main.js @@ -149,7 +149,7 @@ ${typeof x[1] === 'string' ? x[1] : JSON.stringify(x[1], null, 4)}` FrankerFaceZ.Logger = Logger; const VER = FrankerFaceZ.version_info = { - major: 4, minor: 0, revision: 0, extra: '-rc14.2', + major: 4, minor: 0, revision: 0, extra: '-rc15', commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/modules/main_menu/components/backup-restore.vue b/src/modules/main_menu/components/backup-restore.vue new file mode 100644 index 00000000..c24a9754 --- /dev/null +++ b/src/modules/main_menu/components/backup-restore.vue @@ -0,0 +1,142 @@ + + + \ No newline at end of file diff --git a/src/modules/main_menu/index.js b/src/modules/main_menu/index.js index fa138244..8f73ee48 100644 --- a/src/modules/main_menu/index.js +++ b/src/modules/main_menu/index.js @@ -47,6 +47,12 @@ export default class MainMenu extends Module { component: 'profile-manager' }); + this.settings.addUI('backup', { + path: 'Data Management > Backup and Restore @{"profile_warning": false}', + component: 'backup-restore', + getFFZ: () => this.resolve('core') + }); + this.settings.addUI('home', { path: 'Home @{"sort": -1000, "profile_warning": false}', component: 'home-page' diff --git a/src/settings/index.js b/src/settings/index.js index c786b4cf..36d72cb2 100644 --- a/src/settings/index.js +++ b/src/settings/index.js @@ -95,6 +95,28 @@ export default class SettingsManager extends Module { } + // ======================================================================== + // Backup and Restore + // ======================================================================== + + async getFullBackup() { + // Before we do anything else, make sure the provider is ready. + await this.provider.awaitReady(); + + const out = { + version: 2, + type: 'full', + values: {} + }; + + for(const [k, v] of this.provider.entries()) + out.values[k] = v; + + return out; + } + + + // ======================================================================== // Provider Interaction // ======================================================================== diff --git a/src/settings/providers.js b/src/settings/providers.js index 487011ba..437a03c2 100644 --- a/src/settings/providers.js +++ b/src/settings/providers.js @@ -191,10 +191,14 @@ export class LocalStorageProvider extends SettingsProvider { } clear() { - for(const key of this._cached.keys()) - localStorage.removeItem(this.prefix + key); + const old_cache = this._cached; + this._cached = new Map; + + for(const key of old_cache.keys()) { + localStorage.removeItem(this.prefix + key); + this.emit('changed', key, undefined, true); + } - this._cached.clear(); this.broadcast({type: 'clear'}); } diff --git a/src/sites/twitch-twilight/index.js b/src/sites/twitch-twilight/index.js index a3972fa3..a318cbba 100644 --- a/src/sites/twitch-twilight/index.js +++ b/src/sites/twitch-twilight/index.js @@ -212,6 +212,7 @@ Twilight.ROUTES = { 'prime': '/prime', 'turbo': '/turbo', 'user': '/:userName', + 'squad': '/:userName/squad', 'embed-chat': '/embed/:userName/chat' } diff --git a/src/sites/twitch-twilight/modules/chat/emote_menu.jsx b/src/sites/twitch-twilight/modules/chat/emote_menu.jsx index 106dcf47..d1f13e4a 100644 --- a/src/sites/twitch-twilight/modules/chat/emote_menu.jsx +++ b/src/sites/twitch-twilight/modules/chat/emote_menu.jsx @@ -938,7 +938,7 @@ export default class EmoteMenu extends Module { clickTab(event) { this.setState({ - tab: event.target.dataset.tab + tab: event.currentTarget.dataset.tab }); } @@ -1706,49 +1706,75 @@ export default class EmoteMenu extends Module { />} )} -
-
-
+
+
+
- {this.state.has_channel_tab &&
- {t.i18n.t('emote-menu.channel', 'Channel')} + {this.state.has_channel_tab &&
+
} -
- {t.i18n.t('emote-menu.my-emotes', 'My Emotes')} +
+
- {this.state.has_emoji_tab &&
- {t.i18n.t('emote-menu.emoji', 'Emoji')} + {this.state.has_emoji_tab &&
+
}
- {!loading && (
-
+ {!loading && (
+
)}
diff --git a/src/sites/twitch-twilight/modules/chat/index.js b/src/sites/twitch-twilight/modules/chat/index.js index ad180ad6..90923e83 100644 --- a/src/sites/twitch-twilight/modules/chat/index.js +++ b/src/sites/twitch-twilight/modules/chat/index.js @@ -89,6 +89,7 @@ const CHAT_TYPES = make_enum( 'Resubscription', 'GiftPaidUpgrade', 'AnonGiftPaidUpgrade', + 'PrimePaidUpgrade', 'SubGift', 'AnonSubGift', 'Clear', @@ -274,6 +275,15 @@ export default class ChatHook extends Module { } }); + this.settings.add('chat.subs.merge-gifts-visibility', { + default: false, + ui: { + path: 'Chat > Appearance >> Subscriptions', + title: 'Expand merged mass sub gift messages by default.', + component: 'setting-check-box' + } + }); + this.settings.add('chat.lines.alternate', { default: false, ui: { diff --git a/src/sites/twitch-twilight/modules/chat/line.js b/src/sites/twitch-twilight/modules/chat/line.js index 959a36b5..86f5dc54 100644 --- a/src/sites/twitch-twilight/modules/chat/line.js +++ b/src/sites/twitch-twilight/modules/chat/line.js @@ -416,8 +416,11 @@ export default class ChatLine extends Module { }); } + const expanded = t.chat.context.get('chat.subs.merge-gifts-visibility') ? + ! this.state.ffz_expanded : this.state.ffz_expanded; + let sub_list = null; - if( this.state.ffz_expanded && mystery && mystery.recipients && mystery.recipients.length > 0 ) { + if( expanded && mystery && mystery.recipients && mystery.recipients.length > 0 ) { const the_list = []; for(const x of mystery.recipients) { if ( the_list.length ) @@ -455,7 +458,7 @@ export default class ChatLine extends Module { mystery ? e('div', { className: 'tw-pd-l-05 tw-font-size-4' }, e('figure', { - className: `ffz-i-${this.state.ffz_expanded ? 'down' : 'right'}-dir tw-pd-y-1` + className: `ffz-i-${expanded ? 'down' : 'right'}-dir tw-pd-y-1` })) : null ]), sub_list, diff --git a/src/sites/twitch-twilight/modules/css_tweaks/index.js b/src/sites/twitch-twilight/modules/css_tweaks/index.js index 8b71b19f..146c1f5f 100644 --- a/src/sites/twitch-twilight/modules/css_tweaks/index.js +++ b/src/sites/twitch-twilight/modules/css_tweaks/index.js @@ -12,6 +12,7 @@ import {has} from 'utilities/object'; const PORTRAIT_ROUTES = ['user', 'video', 'user-video', 'user-clip', 'user-videos', 'user-clips', 'user-collections', 'user-events', 'user-followers', 'user-following'] const CLASSES = { + 'top-discover': '.top-nav__nav-link[data-a-target="discover-link"]', 'side-nav': '.side-nav', 'side-rec-channels': '.side-nav .recommended-channels', 'side-rec-friends': '.side-nav .recommended-friends', @@ -30,7 +31,7 @@ const CLASSES = { 'pinned-cheer': '.pinned-cheer,.pinned-cheer-v2', 'whispers': '.whispers', - 'dir-live-ind': '.live-channel-card:not([data-a-target*="host"]) .stream-type-indicator.stream-type-indicator--live,.stream-thumbnail__card .stream-type-indicator.stream-type-indicator--live,.preview-card .stream-type-indicator.stream-type-indicator--live', + 'dir-live-ind': '.live-channel-card:not([data-a-target*="host"]) .stream-type-indicator.stream-type-indicator--live,.stream-thumbnail__card .stream-type-indicator.stream-type-indicator--live,.preview-card .stream-type-indicator.stream-type-indicator--live,.preview-card .preview-card-stat.preview-card-stat--live', 'profile-hover': '.preview-card .tw-relative:hover .ffz-channel-avatar', }; @@ -242,7 +243,17 @@ export default class CSSTweaks extends Module { component: 'setting-check-box' }, changed: val => this.toggle('theatre-nav', val) - }) + }); + + this.settings.add('layout.discover', { + default: true, + ui: { + path: 'Appearance > Layout >> Top Navigation', + title: 'Show Discover link.', + component: 'setting-check-box' + }, + changed: val => this.toggleHide('top-discover', !val) + }); this.settings.add('layout.prime-offers', { default: true, @@ -290,6 +301,7 @@ export default class CSSTweaks extends Module { this.toggleHide('side-nav', !this.settings.get('layout.side-nav.show')); this.toggleHide('side-rec-friends', !this.settings.get('layout.side-nav.show-rec-friends')); this.toggleHide('prime-offers', !this.settings.get('layout.prime-offers')); + this.toggleHide('top-discover', !this.settings.get('layout.discover')); const recs = this.settings.get('layout.side-nav.show-rec-channels'); this.toggleHide('side-rec-channels', recs === 0); diff --git a/src/sites/twitch-twilight/styles/chat.scss b/src/sites/twitch-twilight/styles/chat.scss index 6f847015..722de55d 100644 --- a/src/sites/twitch-twilight/styles/chat.scss +++ b/src/sites/twitch-twilight/styles/chat.scss @@ -188,7 +188,7 @@ } } - .emote-picker__tab > *, + .emote-picker-tab-item button > *, .emote-picker__emote-link > * { pointer-events: none; } diff --git a/src/utilities/dom.js b/src/utilities/dom.js index 2c5b7518..c0779fcc 100644 --- a/src/utilities/dom.js +++ b/src/utilities/dom.js @@ -132,6 +132,33 @@ export function setChildren(el, children, no_sanitize, no_empty) { } +export function openFile(contentType, multiple) { + return new Promise(resolve => { + const input = document.createElement('input'); + input.type = 'file'; + input.accept = contentType; + input.multiple = multiple; + + input.onchange = () => { + const files = Array.from(input.files); + resolve(multiple ? files : files[0]) + } + + input.click(); + }) +} + + +export function readFile(file, encoding = 'utf-8') { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsText(file, encoding); + reader.onload = () => resolve(reader.result); + reader.onerror = e => reject(e); + }); +} + + const el = createElement('span'); export function sanitize(text) { diff --git a/styles/icons.scss b/styles/icons.scss index 69585c85..685ae846 100644 --- a/styles/icons.scss +++ b/styles/icons.scss @@ -119,12 +119,15 @@ .ffz-i-eye-off:before { content: '\e82a'; } /* '' */ .ffz-i-views:before { content: '\e82b'; } /* '' */ .ffz-i-conversations:before { content: '\e82c'; } /* '' */ +.ffz-i-channels:before { content: '\e82d'; } /* '' */ +.ffz-i-camera:before { content: '\e82e'; } /* '' */ .ffz-i-link-ext:before { content: '\f08e'; } /* '' */ .ffz-i-twitter:before { content: '\f099'; } /* '' */ .ffz-i-github:before { content: '\f09b'; } /* '' */ .ffz-i-gauge:before { content: '\f0e4'; } /* '' */ .ffz-i-download-cloud:before { content: '\f0ed'; } /* '' */ .ffz-i-upload-cloud:before { content: '\f0ee'; } /* '' */ +.ffz-i-smile:before { content: '\f118'; } /* '' */ .ffz-i-keyboard:before { content: '\f11c'; } /* '' */ .ffz-i-calendar-empty:before { content: '\f133'; } /* '' */ .ffz-i-ellipsis-vert:before { content: '\f142'; } /* '' */