diff --git a/package.json b/package.json index 656e20e7..5e841d08 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "frankerfacez", "author": "Dan Salvato LLC", - "version": "4.31.1", + "version": "4.31.6", "description": "FrankerFaceZ is a Twitch enhancement suite.", "private": true, "license": "Apache-2.0", @@ -42,9 +42,9 @@ "extract-loader": "^2.0.1", "file-loader": "^4.3.0", "json-loader": "^0.5.7", - "jszip": "^3.7.1", "raw-loader": "^3.1.0", "rimraf": "^3.0.2", + "sass": "^1.43.4", "sass-loader": "^7.3.1", "semver": "^7.3.5", "terser-webpack-plugin": "4", @@ -70,6 +70,7 @@ "file-saver": "^2.0.5", "graphql": "^16.0.1", "graphql-tag": "^2.12.6", + "jszip": "^3.7.1", "js-cookie": "^2.2.1", "markdown-it": "^12.2.0", "markdown-it-link-attributes": "^3.0.0", @@ -78,7 +79,6 @@ "raven-js": "^3.27.2", "react": "^17.0.2", "safe-regex": "^2.1.1", - "sass": "^1.43.4", "sortablejs": "^1.14.0", "sourcemapped-stacktrace": "^1.1.11", "text-diff": "^1.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 346e34a3..f2e77e77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -78,6 +78,7 @@ dependencies: graphql: 16.0.1 graphql-tag: 2.12.6_graphql@16.0.1 js-cookie: 2.2.1 + jszip: 3.7.1 markdown-it: 12.2.0 markdown-it-link-attributes: 3.0.0 mnemonist: 0.38.5 @@ -85,7 +86,6 @@ dependencies: raven-js: 3.27.2 react: 17.0.2 safe-regex: 2.1.1 - sass: 1.43.4 sortablejs: 1.14.0 sourcemapped-stacktrace: 1.1.11 text-diff: 1.0.1 @@ -117,9 +117,9 @@ devDependencies: extract-loader: 2.0.1 file-loader: 4.3.0_webpack@4.46.0 json-loader: 0.5.7 - jszip: 3.7.1 raw-loader: 3.1.0_webpack@4.46.0 rimraf: 3.0.2 + sass: 1.43.4 sass-loader: 7.3.1_webpack@4.46.0 semver: 7.3.5 terser-webpack-plugin: 4.2.3_webpack@4.46.0 @@ -988,6 +988,7 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.0 + dev: true /aproba/1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} @@ -1173,6 +1174,7 @@ packages: /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + dev: true /binary/0.3.0: resolution: {integrity: sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=} @@ -1260,6 +1262,7 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /brorand/1.1.0: resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} @@ -1513,6 +1516,7 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 + dev: true /chownr/1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -1760,7 +1764,6 @@ packages: /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true /create-ecdh/4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -2593,6 +2596,7 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true /finalhandler/1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} @@ -2748,6 +2752,7 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /fstream/1.0.12: @@ -2804,6 +2809,7 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true /glob/7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} @@ -3107,7 +3113,7 @@ packages: /immediate/3.0.6: resolution: {integrity: sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=} - dev: true + dev: false /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -3157,7 +3163,6 @@ packages: /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /internal-ip/6.2.0: resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} @@ -3243,6 +3248,7 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 + dev: true /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -3327,6 +3333,7 @@ packages: /is-extglob/2.1.1: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} + dev: true /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -3338,6 +3345,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true /is-ip/3.1.0: resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} @@ -3368,6 +3376,7 @@ packages: /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: true /is-path-cwd/2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} @@ -3466,7 +3475,6 @@ packages: /isarray/1.0.0: resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: true /isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} @@ -3564,7 +3572,7 @@ packages: pako: 1.0.11 readable-stream: 2.3.7 set-immediate-shim: 1.0.1 - dev: true + dev: false /kind-of/3.2.2: resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} @@ -3602,7 +3610,7 @@ packages: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} dependencies: immediate: 3.0.6 - dev: true + dev: false /linkify-it/3.0.3: resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} @@ -4079,6 +4087,7 @@ packages: /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + dev: true /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -4314,7 +4323,6 @@ packages: /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true /parallel-transform/1.2.0: resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} @@ -4425,6 +4433,7 @@ packages: /picomatch/2.3.0: resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} engines: {node: '>=8.6'} + dev: true /pify/2.3.0: resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} @@ -4548,7 +4557,6 @@ packages: /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true /process/0.11.10: resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} @@ -4719,7 +4727,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} @@ -4745,6 +4752,7 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.0 + dev: true /rechoir/0.7.1: resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} @@ -4889,7 +4897,6 @@ packages: /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -4931,7 +4938,7 @@ packages: hasBin: true dependencies: chokidar: 3.5.2 - dev: false + dev: true /schema-utils/1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} @@ -5045,7 +5052,7 @@ packages: /set-immediate-shim/1.0.1: resolution: {integrity: sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=} engines: {node: '>=0.10.0'} - dev: true + dev: false /set-value/4.1.0: resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} @@ -5353,7 +5360,6 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: true /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -5547,6 +5553,7 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true /to-regex/3.0.2: resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} @@ -5697,7 +5704,6 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - dev: true /util/0.10.3: resolution: {integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk=} diff --git a/src/i18n.js b/src/i18n.js index d5ac48fe..a4a4086c 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -15,8 +15,6 @@ import NewTransCore from 'utilities/translation-core'; const fetchJSON = (url, options) => fetch(url, options).then(r => r.ok ? r.json() : null).catch(() => null); -const API_SERVER = 'https://api-test.frankerfacez.com'; - const STACK_SPLITTER = /\s*at\s+(.+?)\s+\((.+)\)$/, SOURCE_SPLITTER = /^(.+):\/\/(.+?)(?:\?[a-zA-Z0-9]+)?:(\d+:\d+)$/; @@ -691,29 +689,24 @@ export class TranslationManager extends Module { const chunks = await Promise.all(promises); const result = {}; + let ignored = 0; + for(const chunk of chunks) { if (! chunk) continue; - for(const [key,val] of Object.entries(chunk)) - result[key] = val; + for(const [key,val] of Object.entries(chunk)) { + if (typeof val === 'string' && val.length > 0) + result[key] = val; + else + ignored++; + } } + if (ignored > 0) + this.log.debug(`Ignored ${ignored} invalid values while loading ${locale} chunks.`); + return result; - - /*const resp = await fetch(`${API_SERVER}/v2/i18n/locale/${locale}`); - if ( ! resp.ok ) { - if ( resp.status === 404 ) { - this.log.info(`Cannot Load Locale: ${locale}`); - return {}; - } - - this.log.warn(`Cannot Load Locale: ${locale} -- Status: ${resp.status}`); - throw new Error(`http error ${resp.status} loading phrases`); - } - - const data = await resp.json(); - return data?.phrases;*/ } async setLocale(new_locale) { diff --git a/src/modules/chat/actions/index.jsx b/src/modules/chat/actions/index.jsx index 733f0815..50abad1d 100644 --- a/src/modules/chat/actions/index.jsx +++ b/src/modules/chat/actions/index.jsx @@ -311,7 +311,13 @@ export default class Actions extends Module { {reason_text ?
{reason_text}
: null} - +
+
+
+
    {reason_elements}
+
+
+
); } diff --git a/src/modules/chat/badges.jsx b/src/modules/chat/badges.jsx index 1ca672b4..a008a7f4 100644 --- a/src/modules/chat/badges.jsx +++ b/src/modules/chat/badges.jsx @@ -502,6 +502,12 @@ export default class Badges extends Module { message = container[fine.accessor]?.return?.stateNode?.props?.message; if ( ! message ) message = fine.searchParent(container, n => n.props?.message)?.props?.message; + if ( ! message && this.root.flavor === 'clips' ) { + const lines = this.resolve('site.chat.line'); + const node = fine.searchParent(container, n => n.props?.node)?.props?.node; + if ( lines && node ) + message = lines.messages.get(node); + } if ( ! message ) message = fine.searchParent(container, n => n.props?.node)?.props?.node?._ffz_message; if ( ! message ) diff --git a/src/modules/chat/emotes.js b/src/modules/chat/emotes.js index a7f1bcd9..3c81719b 100644 --- a/src/modules/chat/emotes.js +++ b/src/modules/chat/emotes.js @@ -498,6 +498,8 @@ export default class Emotes extends Module { if ( ! line || ! opener ) return; + const rect = target.getBoundingClientRect(); + opener.onShowEmoteCard({ channelID: line.props.channelID || '', channelLogin: line.props.channelLogin || '', @@ -505,7 +507,8 @@ export default class Emotes extends Module { emoteCode: target.alt, sourceID: 'chat', referrerID: '', - initialTopOffset: target.getBoundingClientRect().bottom + initialTopOffset: rect.bottom, + initialBottomOffset: rect.top }); return true; diff --git a/src/modules/chat/index.js b/src/modules/chat/index.js index f9ee9afd..a62c0570 100644 --- a/src/modules/chat/index.js +++ b/src/modules/chat/index.js @@ -1854,6 +1854,24 @@ export default class Chat extends Module { }); } + removeTokenizer(tokenizer) { + let type; + if ( typeof tokenizer === 'string' ) type = tokenizer; + else type = tokenizer.type; + + tokenizer = this.tokenizers[type]; + if ( ! tokenizer ) + return null; + + if ( tokenizer.tooltip ) + delete this.tooltips.types[type]; + + const idx = this.__tokenizers.indexOf(tokenizer); + if ( idx !== -1 ) + this.__tokenizers.splice(idx, 1); + + return tokenizer; + } addRichProvider(provider) { const type = provider.type; @@ -1869,12 +1887,39 @@ export default class Chat extends Module { }); } + removeRichProvider(provider) { + let type; + if ( typeof provider === 'string' ) type = provider; + else type = provider.type; - tokenizeString(message, msg) { + provider = this.rich_providers[type]; + if ( ! provider ) + return null; + + const idx = this.__rich_providers.indexOf(provider); + if ( idx !== -1 ) + this.__rich_providers.splice(idx, 1); + + return provider; + } + + + tokenizeString(message, msg, user, haltable = false) { let tokens = [{type: 'text', text: message}]; - for(const tokenizer of this.__tokenizers) - tokens = tokenizer.process.call(this, tokens, msg); + for(const tokenizer of this.__tokenizers) { + if ( ! tokenizer.process ) + continue; + + const new_tokens = tokenizer.process.call(this, tokens, msg, user, haltable); + if ( new_tokens ) + tokens = new_tokens; + + if ( haltable && msg.ffz_halt_tokens ) { + msg.ffz_halt_tokens = undefined; + break; + } + } return tokens; } @@ -1914,7 +1959,13 @@ export default class Chat extends Module { let tokens = [{type: 'text', text: msg.message}]; for(const tokenizer of this.__tokenizers) { - tokens = tokenizer.process.call(this, tokens, msg, user, haltable); + if ( ! tokenizer.process ) + continue; + + const new_tokens = tokenizer.process.call(this, tokens, msg, user, haltable); + if ( new_tokens ) + tokens = new_tokens; + if ( haltable && msg.ffz_halt_tokens ) { msg.ffz_halt_tokens = undefined; break; diff --git a/src/modules/chat/tokenizers.jsx b/src/modules/chat/tokenizers.jsx index f82a2d51..9ccf7ede 100644 --- a/src/modules/chat/tokenizers.jsx +++ b/src/modules/chat/tokenizers.jsx @@ -34,7 +34,7 @@ export const FilterTester = { process(tokens, msg) { if ( ! tokens || ! tokens.length || ! this.context.get('chat.filtering.debug') ) - return tokens; + return; msg.filters = []; @@ -178,9 +178,7 @@ export const Links = { process(tokens) { if ( ! tokens || ! tokens.length ) - return tokens; - - //const use_new = this.experiments.getAssignment('new_links'); + return; const out = []; for(const token of tokens) { @@ -189,7 +187,6 @@ export const Links = { continue; } - //LINK_REGEX.lastIndex = 0; NEW_LINK_REGEX.lastIndex = 0; const text = token.text; let idx = 0, match; @@ -251,41 +248,6 @@ Links.tooltip.delayHide = function(target) { }; -// ============================================================================ -// Rich Content -// ============================================================================ - -/*export const RichContent = { - type: 'rich-content', - - render(token, e) { - return e('div', { - className: 'ffz--rich-content elevation-1 mg-y-05', - }, e('a', { - className: 'clips-chat-card flex flex-nowrap pd-05', - target: '_blank', - href: token.url - }, [ - e('div', { - className: 'clips-chat-card__thumb align-items-center flex justify-content-center' - }) - ])); - }, - - process(tokens, msg) { - if ( ! tokens || ! tokens.length ) - return tokens; - - for(const token of tokens) { - if ( token.type !== 'link' ) - continue; - - - } - } -}*/ - - // ============================================================================ // Replies (Styled Like Mentions) // ============================================================================ @@ -333,10 +295,6 @@ export const Replies = { reply.parentMessageBody ]) ]; - }, - - process(tokens) { - return tokens; } } @@ -351,11 +309,11 @@ export const Mentions = { component: () => import(/* webpackChunkName: 'vue-chat' */ './components/chat-mention.vue'), - oldRender(token, createElement) { + /*oldRender(token, createElement) { return ( {token.text} ); - }, + },*/ render(token, createElement) { let color = token.color; @@ -376,7 +334,7 @@ export const Mentions = { process(tokens, msg, user) { if ( ! tokens || ! tokens.length ) - return tokens; + return; const can_highlight_user = user && user.login && user.login == msg.user.login && ! this.context.get('chat.filtering.process-own'), priority = this.context.get('chat.filtering.mention-priority'); @@ -467,19 +425,17 @@ export const UserHighlights = { process(tokens, msg, user) { if ( user && user.login && user.login == msg.user.login && ! this.context.get('chat.filtering.process-own') ) - return tokens; + return; const list = this.context.get('__filter:highlight-users'); if ( ! list || ! list.length ) - return tokens; + return; const u = msg.user; for(const [priority, color, regex] of list) { if ( regex.test(u.login) || regex.test(u.displayName) ) this.applyHighlight(msg, priority, color, 'user'); } - - return tokens; } } @@ -489,12 +445,12 @@ export const BlockedUsers = { process(tokens, msg, user, haltable) { if ( user && user.login && user.login == msg.user.login && ! this.context.get('chat.filtering.process-own') ) - return tokens; + return; const u = msg.user, regexes = this.context.get('__filter:block-users'); if ( ! regexes ) - return tokens; + return; if ( regexes[1] && (regexes[1].test(u.login) || regexes[1].test(u.displayName)) ) { msg.deleted = true; @@ -504,8 +460,6 @@ export const BlockedUsers = { } else if ( ! msg.deleted && regexes[0] && (regexes[0].test(u.login) || regexes[0].test(u.displayName)) ) msg.deleted = true; - - return tokens; } } @@ -530,17 +484,17 @@ export const BadgeStuff = { process(tokens, msg, user, haltable) { if ( user && user.login && user.login == msg.user.login && ! this.context.get('chat.filtering.process-own') ) - return tokens; + return; const highlights = this.context.get('__filter:highlight-badges'), list = this.context.get('__filter:block-badges'); if ( ! highlights && ! list ) - return tokens; + return; const keys = getBadgeIDs(msg); if ( ! keys || ! keys.length ) - return tokens; + return; for(const badge of keys) { if ( list && list[1].includes(badge) ) { @@ -548,7 +502,7 @@ export const BadgeStuff = { msg.ffz_removed = true; if ( haltable ) msg.ffz_halt_tokens = true; - return tokens; + return; } if ( list && ! msg.deleted && list[0].includes(badge) ) @@ -560,8 +514,6 @@ export const BadgeStuff = { this.applyHighlight(msg, details[0], details[1], 'badge'); } } - - return tokens; } } @@ -609,14 +561,14 @@ export const CustomHighlights = { process(tokens, msg, user) { if ( ! tokens || ! tokens.length ) - return tokens; + return; if ( user && user.login && user.login == msg.user.login && ! this.context.get('chat.filtering.process-own') ) - return tokens; + return; const data = this.context.get('__filter:highlight-terms'); if ( ! data ) - return tokens; + return; let had_match = false; if ( data.non ) { @@ -781,14 +733,14 @@ export const BlockedTerms = { process(tokens, msg, user, haltable) { if ( ! tokens || ! tokens.length ) - return tokens; + return; if ( user && user.login && user.login == msg.user.login && ! this.context.get('chat.filtering.process-own') ) - return tokens; + return; const regexes = this.context.get('__filter:block-terms'); if ( ! regexes ) - return tokens; + return; if ( regexes.remove ) { tokens = blocked_process(tokens, msg, regexes.remove, true, haltable); @@ -863,7 +815,7 @@ export const AutomoddedTerms = { process(tokens, msg, user, haltable) { if ( ! tokens || ! tokens.length || ! msg.flags || ! Array.isArray(msg.flags.list) ) - return tokens; + return; const cats = msg.flags.preferences, flagged = msg.flags.list.filter(x => { @@ -882,7 +834,7 @@ export const AutomoddedTerms = { f_length = flagged.length; if ( ! f_length ) - return tokens; + return; const out = []; let idx = 0, @@ -898,7 +850,7 @@ export const AutomoddedTerms = { msg.ffz_removed = true; if ( haltable ) msg.ffz_halt_tokens = true; - return tokens; + return; } for(const token of tokens) { @@ -1050,13 +1002,13 @@ export const CheerEmotes = { process(tokens, msg) { if ( ! tokens || ! tokens.length || ! msg.bits ) - return tokens; + return; const room = this.getRoom(msg.roomID, msg.roomLogin, true), actions = room && room.bitsConfig; if ( ! actions ) - return tokens; + return; const matcher = new RegExp(`^(${Object.keys(actions).join('|')})(\\d+)$`, 'i'); @@ -1464,10 +1416,10 @@ export const AddonEmotes = { process(tokens, msg) { if ( ! tokens || ! tokens.length ) - return tokens; + return; if ( this.context.get('chat.emotes.enabled') !== 2 ) - return tokens; + return; const emotes = this.emotes.getEmotes( msg.user.id, @@ -1477,7 +1429,7 @@ export const AddonEmotes = { ); if ( ! emotes ) - return tokens; + return; const big = this.context.get('chat.emotes.2x'), anim = this.context.get('chat.emotes.animated'), @@ -1508,12 +1460,14 @@ export const AddonEmotes = { // Is this emote a modifier? if ( emote.modifier && last_token && last_token.modifiers && (!text.length || (text.length === 1 && text[0] === '')) ) { if ( last_token.modifiers.indexOf(emote.token) === -1 ) { - if ( big ) - last_token.modifiers.push(Object.assign({ - big - }, emote.token)); - else - last_token.modifiers.push(emote.token); + last_token.modifiers.push( + Object.assign({ + big, + anim + }, + emote.token + ) + ); } continue; @@ -1574,14 +1528,15 @@ export const Emoji = { process(tokens) { if ( ! tokens || ! tokens.length ) - return tokens; + return; const splitter = this.emoji.splitter, - style = this.context.get('chat.emoji.style'), - out = []; + style = this.context.get('chat.emoji.style'); if ( style === 0 ) - return tokens; + return; + + const out = []; for(const token of tokens) { if ( ! token ) @@ -1648,10 +1603,10 @@ export const TwitchEmotes = { process(tokens, msg) { if ( ! msg.ffz_emotes ) - return tokens; + return; if ( this.context.get('chat.emotes.enabled') < 1 ) - return tokens; + return; const data = msg.ffz_emotes, anim = this.context.get('chat.emotes.animated'), @@ -1666,11 +1621,12 @@ export const TwitchEmotes = { emotes.push([emote_id, match.startIndex, match.endIndex + 1]); } - const out = [], - e_length = emotes.length; + const e_length = emotes.length; if ( ! e_length ) - return tokens; + return; + + const out = []; emotes.sort((a,b) => a[1] !== b[1] ? a[1] - b[1] : b[0] - a[0]); diff --git a/src/modules/main_menu/components/experiments.vue b/src/modules/main_menu/components/experiments.vue index 8c8bf48d..0a662175 100644 --- a/src/modules/main_menu/components/experiments.vue +++ b/src/modules/main_menu/components/experiments.vue @@ -237,7 +237,7 @@ export default { data() { return { code: pick_random(CODES), - experiments_locked: true, //this.item.is_locked(), + experiments_locked: this.item.is_locked(), sort_by: 1, unused: false, unique_id: this.item.unique_id(), diff --git a/src/modules/main_menu/components/link-tester.vue b/src/modules/main_menu/components/link-tester.vue index 4ca1bcb9..2ae6dde4 100644 --- a/src/modules/main_menu/components/link-tester.vue +++ b/src/modules/main_menu/components/link-tester.vue @@ -91,6 +91,8 @@