From 535192d931bc3d6c8332c0364fe75a66567c4634 Mon Sep 17 00:00:00 2001 From: SirStendec Date: Sat, 1 Jun 2019 13:58:12 -0400 Subject: [PATCH] 4.1.2 * Fixed: Mentions not appearing in bold font. * Fixed: Highlighting messages in chat when opening a viewer card by clicking a mention that wasn't all lower-case. * Fixed: Detection of External add-ons when there is a name collision. * Changed: Do not report name collision errors. * Changed: Allow for multi-line add-on descriptions. --- .eslintrc.js | 1 + src/addons.js | 8 +- src/main.js | 2 +- src/modules/chat/tokenizers.jsx | 6 +- src/modules/main_menu/components/add-ons.vue | 231 ------------------ .../main_menu/components/addon-list.vue | 107 ++++++++ src/modules/main_menu/components/addon.vue | 224 +++++++++++++++++ .../main_menu/components/main-menu.vue | 10 +- src/raven.js | 3 +- .../modules/chat/viewer_card.jsx | 4 + src/utilities/addon.js | 29 ++- 11 files changed, 382 insertions(+), 243 deletions(-) delete mode 100644 src/modules/main_menu/components/add-ons.vue create mode 100644 src/modules/main_menu/components/addon-list.vue create mode 100644 src/modules/main_menu/components/addon.vue diff --git a/.eslintrc.js b/.eslintrc.js index d187e247..dbf99241 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -113,6 +113,7 @@ module.exports = { "warn", "tab" ], + "vue/valid-template-root": "off", "vue/max-attributes-per-line": "off", "vue/require-prop-types": "off", "vue/require-default-prop": "off", diff --git a/src/addons.js b/src/addons.js index f9da81f2..17750fb0 100644 --- a/src/addons.js +++ b/src/addons.js @@ -5,7 +5,7 @@ // ============================================================================ import Module from 'utilities/module'; -import { DEBUG, SERVER } from 'utilities/constants'; +import { SERVER } from 'utilities/constants'; import { createElement } from 'utilities/dom'; import { timeout, has } from 'utilities/object'; @@ -38,7 +38,7 @@ export default class AddonManager extends Module { this.settings.addUI('add-ons', { path: 'Add-Ons @{"description": "Add-Ons are additional modules, often written by other people, that can be loaded automatically by FrankerFaceZ to add new capabilities and behaviors to the extension and Twitch."}', - component: 'add-ons', + component: 'addon-list', title: 'Add-Ons', no_filter: true, @@ -129,7 +129,6 @@ export default class AddonManager extends Module { addon.name_i18n = addon.name_i18n || `addon.${addon.id}.name`; addon.short_name_i18n = addon.short_name_i18n || `addon.${addon.id}.short_name`; - addon.description_i18n = addon.description_i18n || `addon.${addon.id}.description`; addon.author_i18n = addon.author_i18n || `addon.${addon.id}.author`; addon.dev = is_dev; @@ -173,6 +172,9 @@ export default class AddonManager extends Module { } isAddonEnabled(id) { + if ( this.isAddonExternal(id) ) + return true; + return this.enabled_addons.includes(id); } diff --git a/src/main.js b/src/main.js index 1266c214..6c3c0fb7 100644 --- a/src/main.js +++ b/src/main.js @@ -151,7 +151,7 @@ ${typeof x[1] === 'string' ? x[1] : JSON.stringify(x[1], null, 4)}` FrankerFaceZ.Logger = Logger; const VER = FrankerFaceZ.version_info = { - major: 4, minor: 1, revision: 1, + major: 4, minor: 1, revision: 2, commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/modules/chat/tokenizers.jsx b/src/modules/chat/tokenizers.jsx index c9e64837..c0b10b4c 100644 --- a/src/modules/chat/tokenizers.jsx +++ b/src/modules/chat/tokenizers.jsx @@ -209,13 +209,13 @@ export const Mentions = { }, render(token, createElement) { - return ( {token.text} - ) + ) }, process(tokens, msg, user) { @@ -274,7 +274,7 @@ export const Mentions = { type: 'mention', text: `${at}${recipient}`, me: mentioned, - recipient + recipient: recipient ? recipient.toLowerCase() : '' }); if ( mentioned ) diff --git a/src/modules/main_menu/components/add-ons.vue b/src/modules/main_menu/components/add-ons.vue deleted file mode 100644 index e1610409..00000000 --- a/src/modules/main_menu/components/add-ons.vue +++ /dev/null @@ -1,231 +0,0 @@ - - - - diff --git a/src/modules/main_menu/components/addon-list.vue b/src/modules/main_menu/components/addon-list.vue new file mode 100644 index 00000000..7dd7d11d --- /dev/null +++ b/src/modules/main_menu/components/addon-list.vue @@ -0,0 +1,107 @@ + + + + diff --git a/src/modules/main_menu/components/addon.vue b/src/modules/main_menu/components/addon.vue new file mode 100644 index 00000000..ef3c5b60 --- /dev/null +++ b/src/modules/main_menu/components/addon.vue @@ -0,0 +1,224 @@ + + + \ No newline at end of file diff --git a/src/modules/main_menu/components/main-menu.vue b/src/modules/main_menu/components/main-menu.vue index 0b2d51d0..40f7bf0d 100644 --- a/src/modules/main_menu/components/main-menu.vue +++ b/src/modules/main_menu/components/main-menu.vue @@ -227,8 +227,14 @@ export default { this.displace.reinit(); }, - navigate(key) { - let item = this.nav_keys[key]; + navigate(...keys) { + let item; + for(const key of keys) { + item = this.nav_keys[key]; + if ( item ) + break; + } + while(item && item.page) item = item.parent; diff --git a/src/raven.js b/src/raven.js index 42724bfb..4e1274db 100644 --- a/src/raven.js +++ b/src/raven.js @@ -141,7 +141,8 @@ export default class RavenLogger extends Module { 'Zugriff verweigert', 'freed script', 'ffzenhancing', - 'dead object' + 'dead object', + 'Name Collision for Module' ], sanitizeKeys: [ /Token$/ diff --git a/src/sites/twitch-twilight/modules/chat/viewer_card.jsx b/src/sites/twitch-twilight/modules/chat/viewer_card.jsx index 2c8a7e3d..813f6b1a 100644 --- a/src/sites/twitch-twilight/modules/chat/viewer_card.jsx +++ b/src/sites/twitch-twilight/modules/chat/viewer_card.jsx @@ -64,6 +64,10 @@ export default class ViewerCards extends Module { } updateStyle(login) { + // Make sure we're dealing with lower-case logins. + if ( typeof login === 'string' ) + login = login.toLowerCase(); + this.last_login = login; if ( login && this.chat.context.get('chat.viewer-cards.highlight-chat') ) { let color = this.chat.context.get('chat.viewer-cards.color'); diff --git a/src/utilities/addon.js b/src/utilities/addon.js index b8fbb517..7c1ac63b 100644 --- a/src/utilities/addon.js +++ b/src/utilities/addon.js @@ -9,12 +9,37 @@ export class Addon extends Module { } static register(id, info) { - const ffz = FrankerFaceZ.get(); - ffz.register(`addon.${id}`, this); + if ( typeof id === 'object' ) { + info = id; + id = info.id || undefined; + } + if ( ! id ) { + if ( this.name ) + id = this.name.toSnakeCase(); + else + throw new Error(`Unable to register module without ID.`); + } + + if ( ! info && this.info ) + info = this.info; + + const ffz = FrankerFaceZ.get(); if ( info ) { info.id = id; ffz.addons.addAddon(info); } + + try { + ffz.register(`addon.${id}`, this); + } catch(err) { + if ( err.message && err.message.includes('Name Collision for Module') ) { + const module = ffz.resolve(`addon.${id}`); + if ( module ) + module.external = true; + } + + throw err; + } } } \ No newline at end of file