mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-07-05 10:38:30 +00:00
4.17.11
* Added: Current Title rule for settings profiles. Matches against the title of the current stream or video. Allows for regular expressions. * API Added: Added several methods for working with polls to the Twitch data module. * Changed: Move queries into a separate file to reduce initial load file size. * Fixed: Remove debug logging from stream up-time metadata. * Fixed: Display the count of new settings on the FFZ menu button when not disabled. * Maintenance: Updated to the current version of `displacejs`, no longer using a fork.
This commit is contained in:
parent
51eea310a8
commit
a4a16af5e1
14 changed files with 464 additions and 102 deletions
208
package-lock.json
generated
208
package-lock.json
generated
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "frankerfacez",
|
"name": "frankerfacez",
|
||||||
"version": "4.17.0",
|
"version": "4.17.10",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -1481,39 +1481,6 @@
|
||||||
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
|
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cacache": {
|
|
||||||
"version": "11.3.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
|
|
||||||
"integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"bluebird": "^3.5.5",
|
|
||||||
"chownr": "^1.1.1",
|
|
||||||
"figgy-pudding": "^3.5.1",
|
|
||||||
"glob": "^7.1.4",
|
|
||||||
"graceful-fs": "^4.1.15",
|
|
||||||
"lru-cache": "^5.1.1",
|
|
||||||
"mississippi": "^3.0.0",
|
|
||||||
"mkdirp": "^0.5.1",
|
|
||||||
"move-concurrently": "^1.0.1",
|
|
||||||
"promise-inflight": "^1.0.1",
|
|
||||||
"rimraf": "^2.6.3",
|
|
||||||
"ssri": "^6.0.1",
|
|
||||||
"unique-filename": "^1.1.1",
|
|
||||||
"y18n": "^4.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"rimraf": {
|
|
||||||
"version": "2.7.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
|
||||||
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"glob": "^7.1.3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"cache-base": {
|
"cache-base": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
|
||||||
|
@ -1924,12 +1891,12 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"copy-webpack-plugin": {
|
"copy-webpack-plugin": {
|
||||||
"version": "5.0.4",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz",
|
||||||
"integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==",
|
"integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cacache": "^11.3.3",
|
"cacache": "^12.0.3",
|
||||||
"find-cache-dir": "^2.1.0",
|
"find-cache-dir": "^2.1.0",
|
||||||
"glob-parent": "^3.1.0",
|
"glob-parent": "^3.1.0",
|
||||||
"globby": "^7.1.1",
|
"globby": "^7.1.1",
|
||||||
|
@ -1937,10 +1904,59 @@
|
||||||
"loader-utils": "^1.2.3",
|
"loader-utils": "^1.2.3",
|
||||||
"minimatch": "^3.0.4",
|
"minimatch": "^3.0.4",
|
||||||
"normalize-path": "^3.0.0",
|
"normalize-path": "^3.0.0",
|
||||||
"p-limit": "^2.2.0",
|
"p-limit": "^2.2.1",
|
||||||
"schema-utils": "^1.0.0",
|
"schema-utils": "^1.0.0",
|
||||||
"serialize-javascript": "^1.7.0",
|
"serialize-javascript": "^2.1.2",
|
||||||
"webpack-log": "^2.0.0"
|
"webpack-log": "^2.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"cacache": {
|
||||||
|
"version": "12.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
|
||||||
|
"integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"bluebird": "^3.5.5",
|
||||||
|
"chownr": "^1.1.1",
|
||||||
|
"figgy-pudding": "^3.5.1",
|
||||||
|
"glob": "^7.1.4",
|
||||||
|
"graceful-fs": "^4.1.15",
|
||||||
|
"infer-owner": "^1.0.3",
|
||||||
|
"lru-cache": "^5.1.1",
|
||||||
|
"mississippi": "^3.0.0",
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
|
"move-concurrently": "^1.0.1",
|
||||||
|
"promise-inflight": "^1.0.1",
|
||||||
|
"rimraf": "^2.6.3",
|
||||||
|
"ssri": "^6.0.1",
|
||||||
|
"unique-filename": "^1.1.1",
|
||||||
|
"y18n": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-try": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rimraf": {
|
||||||
|
"version": "2.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
||||||
|
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"glob": "^7.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serialize-javascript": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
|
@ -2327,8 +2343,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"displacejs": {
|
"displacejs": {
|
||||||
"version": "github:sirstendec/displace#38306dedc200e980fefe3a9b978700cc6d1f127b",
|
"version": "1.4.0",
|
||||||
"from": "github:sirstendec/displace"
|
"resolved": "https://registry.npmjs.org/displacejs/-/displacejs-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-uWe6VmPM95lqH8QWxVb+pQ30laahTgvnzCI+bTIOc/cNhd9zSWECdYW7mpWAIEoGDH+CA3HoQgos2lcOQ7fFjw=="
|
||||||
},
|
},
|
||||||
"dns-equal": {
|
"dns-equal": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -4445,6 +4462,12 @@
|
||||||
"integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
|
"integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"infer-owner": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"inflight": {
|
"inflight": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
@ -7175,12 +7198,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serialize-javascript": {
|
|
||||||
"version": "1.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
|
|
||||||
"integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"serve-index": {
|
"serve-index": {
|
||||||
"version": "1.9.1",
|
"version": "1.9.1",
|
||||||
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
|
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
|
||||||
|
@ -7929,48 +7946,87 @@
|
||||||
"inherits": "2"
|
"inherits": "2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"terser": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"commander": "^2.19.0",
|
|
||||||
"source-map": "~0.6.1",
|
|
||||||
"source-map-support": "~0.5.10"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"source-map": {
|
|
||||||
"version": "0.6.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
|
||||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"terser-webpack-plugin": {
|
"terser-webpack-plugin": {
|
||||||
"version": "1.3.0",
|
"version": "1.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
|
||||||
"integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==",
|
"integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cacache": "^11.3.2",
|
"cacache": "^12.0.2",
|
||||||
"find-cache-dir": "^2.0.0",
|
"find-cache-dir": "^2.1.0",
|
||||||
"is-wsl": "^1.1.0",
|
"is-wsl": "^1.1.0",
|
||||||
"loader-utils": "^1.2.3",
|
|
||||||
"schema-utils": "^1.0.0",
|
"schema-utils": "^1.0.0",
|
||||||
"serialize-javascript": "^1.7.0",
|
"serialize-javascript": "^2.1.2",
|
||||||
"source-map": "^0.6.1",
|
"source-map": "^0.6.1",
|
||||||
"terser": "^4.0.0",
|
"terser": "^4.1.2",
|
||||||
"webpack-sources": "^1.3.0",
|
"webpack-sources": "^1.4.0",
|
||||||
"worker-farm": "^1.7.0"
|
"worker-farm": "^1.7.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"cacache": {
|
||||||
|
"version": "12.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
|
||||||
|
"integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"bluebird": "^3.5.5",
|
||||||
|
"chownr": "^1.1.1",
|
||||||
|
"figgy-pudding": "^3.5.1",
|
||||||
|
"glob": "^7.1.4",
|
||||||
|
"graceful-fs": "^4.1.15",
|
||||||
|
"infer-owner": "^1.0.3",
|
||||||
|
"lru-cache": "^5.1.1",
|
||||||
|
"mississippi": "^3.0.0",
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
|
"move-concurrently": "^1.0.1",
|
||||||
|
"promise-inflight": "^1.0.1",
|
||||||
|
"rimraf": "^2.6.3",
|
||||||
|
"ssri": "^6.0.1",
|
||||||
|
"unique-filename": "^1.1.1",
|
||||||
|
"y18n": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rimraf": {
|
||||||
|
"version": "2.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
||||||
|
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"glob": "^7.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"serialize-javascript": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
|
},
|
||||||
|
"terser": {
|
||||||
|
"version": "4.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz",
|
||||||
|
"integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"commander": "^2.20.0",
|
||||||
|
"source-map": "~0.6.1",
|
||||||
|
"source-map-support": "~0.5.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webpack-sources": {
|
||||||
|
"version": "1.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
|
||||||
|
"integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"source-list-map": "^2.0.0",
|
||||||
|
"source-map": "~0.6.1"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "frankerfacez",
|
"name": "frankerfacez",
|
||||||
"author": "Dan Salvato LLC",
|
"author": "Dan Salvato LLC",
|
||||||
"version": "4.17.10",
|
"version": "4.17.11",
|
||||||
"description": "FrankerFaceZ is a Twitch enhancement suite.",
|
"description": "FrankerFaceZ is a Twitch enhancement suite.",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"babel-eslint": "^10.0.2",
|
"babel-eslint": "^10.0.2",
|
||||||
"babel-loader": "^8.0.6",
|
"babel-loader": "^8.0.6",
|
||||||
"clean-webpack-plugin": "^3.0.0",
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
"copy-webpack-plugin": "^5.0.4",
|
"copy-webpack-plugin": "^5.1.1",
|
||||||
"cross-env": "^5.2.0",
|
"cross-env": "^5.2.0",
|
||||||
"css-loader": "^3.1.0",
|
"css-loader": "^3.1.0",
|
||||||
"eslint": "^6.1.0",
|
"eslint": "^6.1.0",
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
"@ffz/icu-msgparser": "^1.0.2",
|
"@ffz/icu-msgparser": "^1.0.2",
|
||||||
"crypto-js": "^3.1.9-1",
|
"crypto-js": "^3.1.9-1",
|
||||||
"dayjs": "^1.8.17",
|
"dayjs": "^1.8.17",
|
||||||
"displacejs": "github:sirstendec/displace",
|
"displacejs": "^1.4.0",
|
||||||
"emoji-regex": "^8.0.0",
|
"emoji-regex": "^8.0.0",
|
||||||
"file-saver": "^2.0.1",
|
"file-saver": "^2.0.1",
|
||||||
"graphql": "^14.4.2",
|
"graphql": "^14.4.2",
|
||||||
|
|
|
@ -204,11 +204,13 @@ export default {
|
||||||
if ( ! key )
|
if ( ! key )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.editing.push({
|
const out = {
|
||||||
id: generateUUID(),
|
id: generateUUID(),
|
||||||
type: key,
|
type: key,
|
||||||
data: maybe_call(type.default, type)
|
data: maybe_call(type.default, type)
|
||||||
});
|
};
|
||||||
|
|
||||||
|
this.editing.push(out);
|
||||||
},
|
},
|
||||||
|
|
||||||
updateRule(id, data) {
|
updateRule(id, data) {
|
||||||
|
|
|
@ -111,8 +111,6 @@ export default class Metadata extends Module {
|
||||||
subtitle: () => this.i18n.t('metadata.uptime.subtitle', 'Uptime'),
|
subtitle: () => this.i18n.t('metadata.uptime.subtitle', 'Uptime'),
|
||||||
|
|
||||||
tooltip(data) {
|
tooltip(data) {
|
||||||
console.log('tool-tip');
|
|
||||||
|
|
||||||
if ( ! data.created )
|
if ( ! data.created )
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
109
src/settings/components/title.vue
Normal file
109
src/settings/components/title.vue
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
<template>
|
||||||
|
<section class="tw-flex-grow-1 tw-align-self-start tw-flex tw-align-items-center">
|
||||||
|
<div class="tw-flex tw-flex-grow-1 tw-align-items-center">
|
||||||
|
<div class="tw-mg-r-1">
|
||||||
|
{{ t(type.i18n, type.title) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="! is_valid" class="tw-relative tw-tooltip-wrapper tw-mg-r-05">
|
||||||
|
<figure class="tw-c-text-error ffz-i-attention" />
|
||||||
|
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-left">
|
||||||
|
{{ t('settings.filter.title.warn-invalid', 'This pattern is invalid.') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="! is_safe" class="tw-relative tw-tooltip-wrapper tw-mg-r-05">
|
||||||
|
<figure class="tw-c-text-error ffz-i-attention" />
|
||||||
|
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-left">
|
||||||
|
{{ t('settings.filter.title.warn-complex', 'This pattern is potentially too complex. It will be disabled to avoid client lag or freezing.') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input
|
||||||
|
:id="'title$' + id"
|
||||||
|
v-model="value.data.title"
|
||||||
|
type="text"
|
||||||
|
class="tw-flex-grow-1 tw-border-radius-medium tw-font-size-6 tw-mg-x-1 tw-pd-x-1 tw-pd-y-05 tw-input"
|
||||||
|
autocapitalize="off"
|
||||||
|
autocorrect="off"
|
||||||
|
>
|
||||||
|
|
||||||
|
<select
|
||||||
|
:id="'mode$' + id"
|
||||||
|
v-model="value.data.mode"
|
||||||
|
class="tw-block tw-border-radius-medium tw-font-size-6 tw-select tw-pd-l-1 tw-pd-r-3 tw-pd-y-05 ffz-min-width-unset"
|
||||||
|
>
|
||||||
|
<option value="text">
|
||||||
|
{{ t('setting.terms.type.text', 'Text') }}
|
||||||
|
</option>
|
||||||
|
<option value="glob">
|
||||||
|
{{ t('setting.terms.type.glob', 'Glob') }}
|
||||||
|
</option>
|
||||||
|
<option value="raw">
|
||||||
|
{{ t('setting.terms.type.regex', 'Regex') }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<div class="tw-flex tw-align-items-center tw-checkbox tw-mg-l-1 tw-mg-y-05">
|
||||||
|
<input
|
||||||
|
:id="'sensitive$' + id"
|
||||||
|
v-model="value.data.sensitive"
|
||||||
|
type="checkbox"
|
||||||
|
class="ffz-min-width-unset tw-checkbox__input"
|
||||||
|
>
|
||||||
|
<label :for="'sensitive$' + id" class="tw-checkbox__label tw-relative tw-tooltip-wrapper">
|
||||||
|
Aa
|
||||||
|
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-right">
|
||||||
|
{{ t('settings.filter.title.sensitive', 'Case Sensitive') }}
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import safety from 'safe-regex';
|
||||||
|
|
||||||
|
import {glob_to_regex, escape_regex} from 'utilities/object';
|
||||||
|
|
||||||
|
let last_id = 0;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: ['value', 'type', 'filters', 'context'],
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
id: last_id++
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
regex() {
|
||||||
|
const mode = this.value.data.mode;
|
||||||
|
let v = this.value.data.title;
|
||||||
|
|
||||||
|
if ( mode === 'text' )
|
||||||
|
v = escape_regex(v);
|
||||||
|
else if ( mode === 'glob' )
|
||||||
|
v = glob_to_regex(v);
|
||||||
|
|
||||||
|
return v;
|
||||||
|
},
|
||||||
|
|
||||||
|
is_valid() {
|
||||||
|
try {
|
||||||
|
new RegExp(this.regex, `g${this.value.data.sensitive ? '' : 'i'}`);
|
||||||
|
return true;
|
||||||
|
} catch(err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
is_safe() {
|
||||||
|
return safety(this.regex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
|
@ -4,8 +4,12 @@
|
||||||
// Profile Filters for Settings
|
// Profile Filters for Settings
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
import safety from 'safe-regex';
|
||||||
|
|
||||||
|
import {glob_to_regex, escape_regex} from 'utilities/object';
|
||||||
import {createTester} from 'utilities/filtering';
|
import {createTester} from 'utilities/filtering';
|
||||||
|
|
||||||
|
|
||||||
// Logical Components
|
// Logical Components
|
||||||
|
|
||||||
export const Invert = {
|
export const Invert = {
|
||||||
|
@ -283,3 +287,43 @@ export const Category = {
|
||||||
|
|
||||||
editor: () => import(/* webpackChunkName: 'main-menu' */ './components/category.vue')
|
editor: () => import(/* webpackChunkName: 'main-menu' */ './components/category.vue')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const Title = {
|
||||||
|
createTest(config = {}) {
|
||||||
|
const mode = config.mode;
|
||||||
|
let title = config.title;
|
||||||
|
|
||||||
|
if ( ! title || ! mode )
|
||||||
|
return () => false;
|
||||||
|
|
||||||
|
if ( mode === 'text' )
|
||||||
|
title = escape_regex(title);
|
||||||
|
else if ( mode === 'glob' )
|
||||||
|
title = glob_to_regex(title);
|
||||||
|
else if ( mode !== 'raw' )
|
||||||
|
return () => false;
|
||||||
|
|
||||||
|
if ( ! safety(title) )
|
||||||
|
return () => false;
|
||||||
|
|
||||||
|
let regex;
|
||||||
|
try {
|
||||||
|
regex = new RegExp(title, `g${config.sensitive ? '' : 'i'}`);
|
||||||
|
} catch(err) {
|
||||||
|
return () => false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx => ctx.title && regex.test(ctx.title)
|
||||||
|
},
|
||||||
|
|
||||||
|
title: 'Current Title',
|
||||||
|
i18n: 'settings.filter.title',
|
||||||
|
|
||||||
|
default: () => ({
|
||||||
|
title: '',
|
||||||
|
mode: 'text',
|
||||||
|
sensitive: false
|
||||||
|
}),
|
||||||
|
|
||||||
|
editor: () => import(/* webpackChunkName: 'main-menu' */ './components/title.vue')
|
||||||
|
};
|
|
@ -127,12 +127,14 @@ export default class Channel extends Module {
|
||||||
channelID: null,
|
channelID: null,
|
||||||
channelColor: null,
|
channelColor: null,
|
||||||
category: null,
|
category: null,
|
||||||
categoryID: null
|
categoryID: null,
|
||||||
|
title: null
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.ChannelPage.on('update', inst => {
|
this.ChannelPage.on('update', inst => {
|
||||||
const category = get('state.video.game', inst) || get('state.clip.game', inst) || get('state.channel.broadcastSettings.game', inst);
|
const category = get('state.video.game', inst) || get('state.clip.game', inst) || get('state.channel.stream.game', inst) || get('state.channel.broadcastSettings.game', inst),
|
||||||
|
title = get('state.video.title', inst) || get('state.clip.title', inst) || get('state.channel.stream.title', inst) || get('state.channel.broadcastSettings.title', inst);
|
||||||
|
|
||||||
const color = get('state.primaryColorHex', inst);
|
const color = get('state.primaryColorHex', inst);
|
||||||
this.updateChannelColor(color);
|
this.updateChannelColor(color);
|
||||||
|
@ -142,7 +144,8 @@ export default class Channel extends Module {
|
||||||
channelID: get('state.channel.id', inst),
|
channelID: get('state.channel.id', inst),
|
||||||
channelColor: color,
|
channelColor: color,
|
||||||
category: category?.name,
|
category: category?.name,
|
||||||
categoryID: category?.id
|
categoryID: category?.id,
|
||||||
|
title
|
||||||
});
|
});
|
||||||
|
|
||||||
if ( this.settings.get('channel.hosting.enable') || has(inst.state, 'hostMode') || has(inst.state, 'hostedChannel') )
|
if ( this.settings.get('channel.hosting.enable') || has(inst.state, 'hostMode') || has(inst.state, 'hostedChannel') )
|
||||||
|
@ -174,7 +177,8 @@ export default class Channel extends Module {
|
||||||
clip = inst.state.clip,
|
clip = inst.state.clip,
|
||||||
video = inst.state.video,
|
video = inst.state.video,
|
||||||
|
|
||||||
category = video?.game || clip?.game || channel?.stream?.game || channel?.broadcastSettings?.game;
|
category = video?.game || clip?.game || channel?.stream?.game || channel?.broadcastSettings?.game,
|
||||||
|
title = video?.title || clip?.title || channel?.stream?.title || channel?.broadcastSettings?.title || null;
|
||||||
|
|
||||||
const color = inst.state?.primaryColorHex;
|
const color = inst.state?.primaryColorHex;
|
||||||
this.updateChannelColor(color);
|
this.updateChannelColor(color);
|
||||||
|
@ -184,7 +188,8 @@ export default class Channel extends Module {
|
||||||
channelID: inst.state.channel?.id,
|
channelID: inst.state.channel?.id,
|
||||||
channelColor: color,
|
channelColor: color,
|
||||||
category: category?.name,
|
category: category?.name,
|
||||||
categoryID: category?.id
|
categoryID: category?.id,
|
||||||
|
title
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +200,8 @@ export default class Channel extends Module {
|
||||||
channelID: null,
|
channelID: null,
|
||||||
category: null,
|
category: null,
|
||||||
categoryID: null,
|
categoryID: null,
|
||||||
channelColor: null
|
channelColor: null,
|
||||||
|
title: null
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,7 +209,8 @@ export default class Channel extends Module {
|
||||||
onChannelMounted(inst) {
|
onChannelMounted(inst) {
|
||||||
this.wrapChannelPage(inst);
|
this.wrapChannelPage(inst);
|
||||||
|
|
||||||
const category = get('state.video.game', inst) || get('state.clip.game', inst) || get('state.channel.broadcastSettings.game', inst);
|
const category = get('state.video.game', inst) || get('state.clip.game', inst) || get('state.channel.stream.game', inst) || get('state.channel.broadcastSettings.game', inst),
|
||||||
|
title = get('state.video.title', inst) || get('state.clip.title', inst) || get('state.channel.stream.title', inst) || get('state.channel.broadcastSettings.title', inst) || null;
|
||||||
|
|
||||||
const color = get('state.primaryColorHex', inst);
|
const color = get('state.primaryColorHex', inst);
|
||||||
this.updateChannelColor(color);
|
this.updateChannelColor(color);
|
||||||
|
@ -213,7 +220,8 @@ export default class Channel extends Module {
|
||||||
channelID: get('state.channel.id', inst),
|
channelID: get('state.channel.id', inst),
|
||||||
channelColor: color,
|
channelColor: color,
|
||||||
category: category?.name,
|
category: category?.name,
|
||||||
categoryID: category?.id
|
categoryID: category?.id,
|
||||||
|
title
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,9 @@ export default class MenuButton extends SiteModule {
|
||||||
if ( typeof val === 'number' )
|
if ( typeof val === 'number' )
|
||||||
return this.i18n.formatNumber(val);
|
return this.i18n.formatNumber(val);
|
||||||
|
|
||||||
|
if ( val == null && this.has_new )
|
||||||
|
return this.i18n.formatNumber(this._new_settings);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +303,7 @@ export default class MenuButton extends SiteModule {
|
||||||
{this.has_update && (<div class="tw-mg-t-1">
|
{this.has_update && (<div class="tw-mg-t-1">
|
||||||
{this.i18n.t('site.menu_button.update-desc', 'There is an update available. Please refresh your page.')}
|
{this.i18n.t('site.menu_button.update-desc', 'There is an update available. Please refresh your page.')}
|
||||||
</div>)}
|
</div>)}
|
||||||
{this.has_new && (<div class="tw-mg-t-1">
|
{this._new_settings > 0 && (<div class="tw-mg-t-1">
|
||||||
{this.i18n.t('site.menu_button.new-desc', 'There {count,plural,one {is one new setting} other {are # new settings}}.', {count: this._new_settings})}
|
{this.i18n.t('site.menu_button.new-desc', 'There {count,plural,one {is one new setting} other {are # new settings}}.', {count: this._new_settings})}
|
||||||
</div>)}
|
</div>)}
|
||||||
{this.has_strings && (<div class="tw-mg-t-1">
|
{this.has_strings && (<div class="tw-mg-t-1">
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
.ffz-menu__pill {
|
.ffz-menu__pill {
|
||||||
top: -.5rem;
|
top: -.5rem;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ffz-menu__extra-pill {
|
.ffz-menu__extra-pill {
|
||||||
|
|
8
src/utilities/data/poll-archive.gql
Normal file
8
src/utilities/data/poll-archive.gql
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
mutation FFZ_ArchivePoll($id: ID!) {
|
||||||
|
archivePoll(input: {pollID: $id}) {
|
||||||
|
poll {
|
||||||
|
id
|
||||||
|
status
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
src/utilities/data/poll-create.gql
Normal file
12
src/utilities/data/poll-create.gql
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
mutation FFZ_CreatePoll($input: CreatePollInput!) {
|
||||||
|
createPoll(input: $input) {
|
||||||
|
poll {
|
||||||
|
id
|
||||||
|
status
|
||||||
|
choices {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
src/utilities/data/poll-get.gql
Normal file
25
src/utilities/data/poll-get.gql
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
query FFZ_FetchPoll($id: ID!) {
|
||||||
|
poll(id: $id) {
|
||||||
|
id
|
||||||
|
status
|
||||||
|
title
|
||||||
|
ownedBy {
|
||||||
|
id
|
||||||
|
login
|
||||||
|
displayName
|
||||||
|
}
|
||||||
|
endedAt
|
||||||
|
startedAt
|
||||||
|
totalVoters
|
||||||
|
choices {
|
||||||
|
id
|
||||||
|
title
|
||||||
|
votes {
|
||||||
|
id
|
||||||
|
base
|
||||||
|
bits
|
||||||
|
total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
src/utilities/data/poll-terminate.gql
Normal file
8
src/utilities/data/poll-terminate.gql
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
mutation FFZ_TerminatePoll($id: ID!) {
|
||||||
|
terminatePoll(input: {pollID: $id}) {
|
||||||
|
poll {
|
||||||
|
id
|
||||||
|
status
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -89,6 +89,23 @@ export default class TwitchData extends Module {
|
||||||
return this.apollo.client.query(thing);
|
return this.apollo.client.query(thing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutate(mutation, variables, options) {
|
||||||
|
let thing;
|
||||||
|
if ( ! variables && ! options && mutation.mutation )
|
||||||
|
thing = mutation;
|
||||||
|
else {
|
||||||
|
thing = {
|
||||||
|
mutation,
|
||||||
|
variables
|
||||||
|
};
|
||||||
|
|
||||||
|
if ( options )
|
||||||
|
thing = Object.assign(thing, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.apollo.client.mutate(thing);
|
||||||
|
}
|
||||||
|
|
||||||
get languageCode() {
|
get languageCode() {
|
||||||
const session = this.site.getSession();
|
const session = this.site.getSession();
|
||||||
return session && session.languageCode || 'en'
|
return session && session.languageCode || 'en'
|
||||||
|
@ -130,7 +147,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getMatchingCategories(query) {
|
async getMatchingCategories(query) {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/search-category.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/search-category.gql'),
|
||||||
{ query }
|
{ query }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -143,7 +160,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getCategory(id, name) {
|
async getCategory(id, name) {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/category-fetch.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/category-fetch.gql'),
|
||||||
{ id, name }
|
{ id, name }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -157,7 +174,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getMatchingUsers(query) {
|
async getMatchingUsers(query) {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/search-user.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/search-user.gql'),
|
||||||
{ query }
|
{ query }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -170,7 +187,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getUser(id, login) {
|
async getUser(id, login) {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/user-fetch.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/user-fetch.gql'),
|
||||||
{ id, login }
|
{ id, login }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -179,7 +196,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getLastBroadcast(id, login) {
|
async getLastBroadcast(id, login) {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/last-broadcast.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/last-broadcast.gql'),
|
||||||
{ id, login }
|
{ id, login }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -192,7 +209,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getBroadcastID(id, login) {
|
async getBroadcastID(id, login) {
|
||||||
const data = await this.queryApollo({
|
const data = await this.queryApollo({
|
||||||
query: require('./data/broadcast-id.gql'),
|
query: await import(/* webpackChunkName: 'queries' */ './data/broadcast-id.gql'),
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
login
|
login
|
||||||
|
@ -203,6 +220,77 @@ export default class TwitchData extends Module {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// Polls
|
||||||
|
// ========================================================================
|
||||||
|
|
||||||
|
async getPoll(poll_id) {
|
||||||
|
const data = await this.queryApollo({
|
||||||
|
query: await import(/* webpackChunkName: 'queries' */ './data/poll-get.gql'),
|
||||||
|
variables: {
|
||||||
|
id: poll_id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return get('data.poll', data);
|
||||||
|
}
|
||||||
|
|
||||||
|
async createPoll(channel_id, title, choices, options = {}) {
|
||||||
|
if ( typeof title !== 'string' )
|
||||||
|
throw new TypeError('title must be string');
|
||||||
|
|
||||||
|
if ( ! Array.isArray(choices) || choices.some(x => typeof x !== 'string') )
|
||||||
|
throw new TypeError('choices must be array of strings');
|
||||||
|
|
||||||
|
let bits = options.bits || 0,
|
||||||
|
duration = options.duration || 60;
|
||||||
|
if ( typeof bits !== 'number' || bits < 0 )
|
||||||
|
bits = 0;
|
||||||
|
if ( typeof duration !== 'number' || duration < 0 )
|
||||||
|
duration = 60;
|
||||||
|
|
||||||
|
const data = await this.mutate({
|
||||||
|
mutation: await import(/* webpackChunkName: 'queries' */ './data/poll-create.gql'),
|
||||||
|
variables: {
|
||||||
|
input: {
|
||||||
|
bitsCost: bits,
|
||||||
|
bitsVoting: bits > 0,
|
||||||
|
choices: choices.map(x => ({title: x})),
|
||||||
|
durationSeconds: duration,
|
||||||
|
ownedBy: `${channel_id}`,
|
||||||
|
subscriberMultiplier: options.subscriberMultiplier || false,
|
||||||
|
subscriberOnly: options.subscriberOnly || false,
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return get('data.createPoll.poll', data);
|
||||||
|
}
|
||||||
|
|
||||||
|
async archivePoll(poll_id) {
|
||||||
|
const data = await this.mutate({
|
||||||
|
mutation: await import(/* webpackChunkName: 'queries' */ './data/poll-archive.gql'),
|
||||||
|
variables: {
|
||||||
|
id: poll_id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return get('data.archivePoll.poll', data);
|
||||||
|
}
|
||||||
|
|
||||||
|
async terminatePoll(poll_id) {
|
||||||
|
const data = await this.mutate({
|
||||||
|
mutation: await import(/* webpackChunkName: 'queries' */ './data/poll-terminate.gql'),
|
||||||
|
variables: {
|
||||||
|
id: poll_id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return get('data.terminatePoll.poll', data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// Stream Up-Type (Uptime and Type, for Directory Purposes)
|
// Stream Up-Type (Uptime and Type, for Directory Purposes)
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
|
@ -242,7 +330,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = await this.queryApollo({
|
const data = await this.queryApollo({
|
||||||
query: require('./data/stream-fetch.gql'),
|
query: await import(/* webpackChunkName: 'queries' */ './data/stream-fetch.gql'),
|
||||||
variables: {
|
variables: {
|
||||||
ids: ids.length ? ids : null,
|
ids: ids.length ? ids : null,
|
||||||
logins: logins.length ? logins : null
|
logins: logins.length ? logins : null
|
||||||
|
@ -376,7 +464,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/tags-fetch.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/tags-fetch.gql'),
|
||||||
{
|
{
|
||||||
ids
|
ids
|
||||||
}
|
}
|
||||||
|
@ -467,7 +555,7 @@ export default class TwitchData extends Module {
|
||||||
|
|
||||||
async getTopTags(limit = 50) {
|
async getTopTags(limit = 50) {
|
||||||
const data = await this.queryApollo(
|
const data = await this.queryApollo(
|
||||||
require('./data/tags-top.gql'),
|
await import(/* webpackChunkName: 'queries' */ './data/tags-top.gql'),
|
||||||
{limit}
|
{limit}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue