From 21ee6fcfb7e5ab843c5052dddac587177bb18a2f Mon Sep 17 00:00:00 2001 From: SirStendec Date: Sun, 9 Jun 2019 19:48:26 -0400 Subject: [PATCH] 4.3.1 * Fixed: Unable to see in-line chat action context menus in theater mode. * Changed: Add a new socket server to the list to take pressure off the others. * API Added: `debounce` method in `FrankerFaceZ.utilities.object`. * API Added: `` Vue component for implementing text fields with auto-completion. * API Changed: Update localized Vue strings immediately when the i18n debug transformation changes. * API Changed: `` now has a closed and open state. It doesn't always show the drawer of icons. * API Changed: Include the `vue-clickaway` mixin in everything. --- res/font/ffz-fontello.eot | Bin 23712 -> 23800 bytes res/font/ffz-fontello.svg | 2 + res/font/ffz-fontello.ttf | Bin 23528 -> 23616 bytes res/font/ffz-fontello.woff | Bin 14792 -> 14848 bytes res/font/ffz-fontello.woff2 | Bin 12380 -> 12428 bytes src/i18n.js | 7 +- src/main.js | 2 +- .../chat/actions/components/edit-icon.vue | 6 +- .../main_menu/components/chat-actions.vue | 3 +- .../main_menu/components/color-picker.vue | 3 - .../main_menu/components/profile-selector.vue | 3 - src/sites/twitch-twilight/index.js | 3 +- src/sites/twitch-twilight/styles/chat.scss | 4 + src/std-components/autocomplete.vue | 381 ++++++++++++++++++ src/std-components/balloon.vue | 2 +- src/std-components/icon-picker.vue | 212 +++++++--- src/utilities/constants.js | 3 +- src/utilities/object.js | 46 +++ src/utilities/translation-core.js | 56 +-- src/utilities/vue.js | 26 +- styles/icons.scss | 1 + styles/widgets.scss | 5 + styles/widgets/icon-picker.scss | 2 +- 23 files changed, 667 insertions(+), 100 deletions(-) create mode 100644 src/std-components/autocomplete.vue diff --git a/res/font/ffz-fontello.eot b/res/font/ffz-fontello.eot index 90ba00980e7b01a43b7cabaa36d246ca396b027c..1adccb3b2b499591af81e4856a323680b78d1b4f 100644 GIT binary patch delta 813 zcmYL{Pe>F|9LK+JW}MyD-At49&#vweB83{^pS9Y})+}8m&4Wm#5W~8zgsVeJ>~_&Z zn8+I1oJtSXA;d!zBb4Al$WsxRdhwpH2$c$w(606yAJIHM^LfADoA-M&@6F3acCg6g zgKi+uJuQ1B2iu5G2WCcg0oD$nGZa;|Cu`+VisyigH=&2aioBV60kof`aiv#_L?@=F z?ob>AGPQ_0q*4A9#R}OP>5uomURh267OEGR>kF$r&QBH3fTjZ)_x4f3YKZ57;020H z`l7?J)XmPLO-gjoqVE2|kXrJn<}=W27M_Z#F^w(Qb)bbpC~9FCDOLa>tql$h zze*npK&u%aY7fHNR(;tL(DhM&$GX_0ZWkiw+Q7`|EC}(qS5CIk^KForn+6nW5|FIa zXN8dKG5)nN{BPr+rWcBn8I4p)*58XMeMhil+0Dx0ZSzi7qp>926-JVkW;KedfSsot zRFj``P(z;Kz)SwlK`r?Q2N%gdIk*Ju=5uhFOmA%hADPxLfuDTsm=WL#b&?#^k$-b= zl}u-0f&lps2lc?7ivudMx5_~S`5On<$!i?kAg^;k8)9zj(Jx^`7()q)4cYpo%x9+N z#cc63G9eolfmM{9U~*|qcC|N;IderR?Q-PgID{<+Yd!3-*s?_LNxPMLxiD6%W^>)~ z4d%F)<=;o9NS^|1p4q2giCZ5J*0LsjIrx=j>l4i%Ds0Y#GnKcUKU-ich!sk%QrC)G zagP?&6>S%HdMZ8lJyV`-rQ`Vgn~Z@LpGec^TN45c8s4@T%aF8wHLkzCwQh{IEB3z( CAlf4U delta 721 zcmYL`UuaTM9LK-MtM1l>1&!sV<|PV>wTEiCl~&r!=CHJvK{KeEIi+;FY!dd;AR;1a zCFiBGVDu0@1TAhagYdZr8>{u=Lp@dOVTEnPR=MnVJ&f+*!{>a@pWoq}yE?h7LuwDWBWjfTJ8BM4=XWRDzVTBe`GEl4pcnXI7vKQdDZoK8)ir>Zd{h7*d7(i9I7FQl0S=Q_1vo + + diff --git a/res/font/ffz-fontello.ttf b/res/font/ffz-fontello.ttf index ee9319bd1841fb06a6be6e8422d496df02805aea..52093499fe82db685fef887bed57eed05f36bef0 100644 GIT binary patch delta 783 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ȼU%di0ihdqo=)UPP(xTMYo64@h7Sd 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 YVY{eg1NsaIoOhnS8|_UJ6uCYB2V9sX>Hq)$ delta 12355 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 K4#op7iZ20LjpMTb literal 12380 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 O@WQL&9i+MVM9~T!B?@T( diff --git a/src/i18n.js b/src/i18n.js index f9a6452c..55013980 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -92,7 +92,8 @@ export class TranslationManager extends Module { changed: val => { this._.transformation = TRANSFORMATIONS[val]; - this.emit(':update') + this.emit(':transform'); + this.emit(':update'); } }); @@ -387,6 +388,10 @@ export class TranslationManager extends Module { return this._.has(key); } + formatNode(...args) { + return this._.formatNode(...args); + } + toLocaleString(...args) { return this._.toLocaleString(...args); } diff --git a/src/main.js b/src/main.js index 57a99673..04ccad1d 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: 3, revision: 0, + major: 4, minor: 3, revision: 1, commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/modules/chat/actions/components/edit-icon.vue b/src/modules/chat/actions/components/edit-icon.vue index ffddbf6a..110fec9b 100644 --- a/src/modules/chat/actions/components/edit-icon.vue +++ b/src/modules/chat/actions/components/edit-icon.vue @@ -4,7 +4,11 @@ {{ t('setting.actions.icon', 'Icon') }} - + diff --git a/src/modules/main_menu/components/chat-actions.vue b/src/modules/main_menu/components/chat-actions.vue index e6da257e..1f0818dc 100644 --- a/src/modules/main_menu/components/chat-actions.vue +++ b/src/modules/main_menu/components/chat-actions.vue @@ -207,13 +207,12 @@ import SettingMixin from '../setting-mixin'; import Sortable from 'sortablejs'; import {deep_copy} from 'utilities/object'; -import {mixin as clickaway} from 'vue-clickaway'; let last_id = 0; export default { - mixins: [clickaway, SettingMixin], + mixins: [SettingMixin], props: ['item', 'context'], data() { diff --git a/src/modules/main_menu/components/color-picker.vue b/src/modules/main_menu/components/color-picker.vue index e95b03fc..c9f3e9b8 100644 --- a/src/modules/main_menu/components/color-picker.vue +++ b/src/modules/main_menu/components/color-picker.vue @@ -55,15 +55,12 @@ import {Color} from 'utilities/color'; import {Sketch} from 'vue-color'; -import {mixin as clickaway} from 'vue-clickaway'; export default { components: { 'chrome-picker': Sketch }, - mixins: [clickaway], - props: { value: String, default: { diff --git a/src/modules/main_menu/components/profile-selector.vue b/src/modules/main_menu/components/profile-selector.vue index b2cbf412..fe02c2a0 100644 --- a/src/modules/main_menu/components/profile-selector.vue +++ b/src/modules/main_menu/components/profile-selector.vue @@ -83,12 +83,9 @@ \ No newline at end of file diff --git a/src/std-components/balloon.vue b/src/std-components/balloon.vue index 727efd3b..1a620f1b 100644 --- a/src/std-components/balloon.vue +++ b/src/std-components/balloon.vue @@ -21,7 +21,7 @@ export default { props: { color: { type: String, - default: 'background' + default: 'background-base' }, size: String, diff --git a/src/std-components/icon-picker.vue b/src/std-components/icon-picker.vue index db152489..5290e632 100644 --- a/src/std-components/icon-picker.vue +++ b/src/std-components/icon-picker.vue @@ -1,51 +1,72 @@ @@ -53,8 +74,9 @@ let id = 0; -import {escape_regex, deep_copy} from 'utilities/object'; +import {escape_regex, deep_copy, debounce} from 'utilities/object'; import {load, ICONS as FA_ICONS, ALIASES as FA_ALIASES} from 'utilities/font-awesome'; +import { maybeLoad } from '../utilities/font-awesome'; const FFZ_ICONS = [ 'cancel', @@ -107,6 +129,7 @@ const FFZ_ICONS = [ 'cw', 'up-dir', 'up-big', + 'play', 'link-ext', 'twitter', 'github', @@ -140,11 +163,30 @@ const ICONS = FFZ_ICONS .concat(FA_ICONS.filter(x => ! FFZ_ICONS.includes(x)).map(x => [`ffz-fa fa-${x}`, FA_ALIASES[x] ? FA_ALIASES[x].join(' ') : x])); export default { - props: ['value'], + props: { + value: String, + alwaysOpen: { + type: Boolean, + required: false, + default: false + }, + clearable: { + type: Boolean, + required: false, + default: false + }, + direction: { + type: String, + required: false, + default: 'down' + } + }, data() { return { id: id++, + open: false, + val: this.value, search: '', icons: deep_copy(ICONS) } @@ -159,25 +201,81 @@ export default { reg = new RegExp('(?:^|-| )' + escape_regex(search), 'i'); return this.icons.filter(x => reg.test(x[1])); + }, + + isOpen() { + return this.alwaysOpen || this.open } }, - mounted() { - load(); + watch: { + value() { + this.val = this.value; + }, - this.$nextTick(() => { - if ( this.value ) { - const el = this.$el.querySelector('.tw-interactable--selected'); - if ( el ) - el.scrollIntoViewIfNeeded(); + isOpen() { + if ( ! this.isOpen ) { + requestAnimationFrame(() => { + const ffz = FrankerFaceZ.get(); + if ( ffz ) + ffz.emit('tooltips:cleanup'); + }); + return; } - }); + + load(); + + this.$nextTick(() => { + if ( this.val ) { + const root = this.$refs.list, + el = root && root.querySelector('.tw-interactable--selected'); + + if ( el ) + el.scrollIntoViewIfNeeded(); + } + }); + } + }, + + created() { + this.maybeClose = debounce(this.maybeClose, 10); + }, + + mounted() { + maybeLoad(this.val); }, methods: { - change(val) { - this.value = val; - this.$emit('input', this.value); + update() { + if ( this.open ) + this.search = this.$refs.input.value; + }, + + close() { + this.open = false; + }, + + change(val, close = true) { + this.val = val; + this.$emit('input', this.val); + if ( close ) + this.open = false; + }, + + onFocus(open = true) { + this.focused = true; + if ( open ) + this.open = true; + }, + + onBlur() { + this.focused = false; + this.maybeClose(); + }, + + maybeClose() { + if ( ! this.focused ) + this.open = false; } } } diff --git a/src/utilities/constants.js b/src/utilities/constants.js index d55cf4e5..949a24ee 100644 --- a/src/utilities/constants.js +++ b/src/utilities/constants.js @@ -73,7 +73,8 @@ export const WS_CLUSTERS = { ['wss://andknuckles.frankerfacez.com/', 0.8], ['wss://tuturu.frankerfacez.com/', 1], ['wss://lilz.frankerfacez.com/', 1], - ['wss://yoohoo.frankerfacez.com/', 1] + ['wss://yoohoo.frankerfacez.com/', 1], + ['wss://pog.frankerfacez.com/', 1] ], Development: [ diff --git a/src/utilities/object.js b/src/utilities/object.js index 7b0f0413..f97b3f68 100644 --- a/src/utilities/object.js +++ b/src/utilities/object.js @@ -73,6 +73,52 @@ export function timeout(promise, delay) { } +/** + * Return a wrapper for a function that will only execute the function + * a period of time after it has stopped being called. + * @param {Function} fn The function to wrap. + * @param {Integer} delay The time to wait, in milliseconds + * @param {Boolean} immediate If immediate is true, trigger the function immediately rather than eventually. + * @returns {Function} wrapped function + */ +export function debounce(fn, delay, immediate) { + let timer; + if ( immediate ) { + const later = () => timer = null; + if ( immediate === 2 ) + // Special Mode! Run immediately OR later. + return function(...args) { + if ( timer ) { + clearTimeout(timer); + timer = setTimeout(() => { + timer = null; + fn.apply(this, args); // eslint-disable-line no-invalid-this + }, delay); + } else { + fn.apply(this, args); // eslint-disable-line no-invalid-this + timer = setTimeout(later, delay); + } + } + + return function(...args) { + if ( ! timer ) + fn.apply(this, args); // eslint-disable-line no-invalid-this + else + clearTimeout(timer); + + timer = setTimeout(later, delay); + } + } + + return function(...args) { + if ( timer ) + clearTimeout(timer); + + timer = setTimeout(fn.bind(this, ...args), delay); // eslint-disable-line no-invalid-this + } +} + + /** * Make sure that a given asynchronous function is only called once * at a time. diff --git a/src/utilities/translation-core.js b/src/utilities/translation-core.js index 08ccc313..56cea45e 100644 --- a/src/utilities/translation-core.js +++ b/src/utilities/translation-core.js @@ -72,7 +72,7 @@ export const DEFAULT_TYPES = { }, humantime(val, node) { - return this.formatHumanTime(val, node.f); + return this.formatHumanTime(val, 1, node.f); }, en_plural: v => v !== 1 ? 's' : '' @@ -226,26 +226,28 @@ export default class TranslationCore { return thing; } - formatHumanTime(value, factor) { + formatHumanTime(value, factor, round = false) { if ( value instanceof Date ) value = (Date.now() - value.getTime()) / 1000; value = Math.floor(value); factor = Number(factor) || 1; - const years = Math.floor((value * factor) / 31536000) / factor; + const fn = round ? Math.round : Math.floor; + + const years = fn((value * factor) / 31536000) / factor; if ( years >= 1 ) return this.t('human-time.years', '{count,number} year{count,en_plural}', years); - const days = Math.floor((value %= 31536000) / 86400); + const days = fn((value %= 31536000) / 86400); if ( days >= 1 ) return this.t('human-time.days', '{count,number} day{count,en_plural}', days); - const hours = Math.floor((value %= 86400) / 3600); + const hours = fn((value %= 86400) / 3600); if ( hours >= 1 ) return this.t('human-time.hours', '{count,number} hour{count,en_plural}', hours); - const minutes = Math.floor((value %= 3600) / 60); + const minutes = fn((value %= 3600) / 60); if ( minutes >= 1 ) return this.t('human-time.minutes', '{count,number} minute{count,en_plural}', minutes); @@ -436,29 +438,33 @@ export default class TranslationCore { return this._processAST(...this._preTransform(key, phrase, options, use_default)); } + formatNode(node, data, locale = null, out = null, ast = null) { + if ( ! node || typeof node !== 'object' ) + return node; + + if ( locale == null ) + locale = this.locale; + + let val = get(node.v, data); + if ( val == null ) + return null; + + if ( node.t ) { + if ( this.types[node.t] ) + return this.types[node.t].call(this, val, node, locale, out, ast, data); + else if ( this.warn ) + this.warn(`Encountered unknown type "${node.t}" when formatting node.`); + } + + return val; + } + _processAST(ast, data, locale) { const out = []; for(const node of ast) { - if ( typeof node === 'string' ) { - out.push(node); - continue; - - } else if ( ! node || typeof node !== 'object' ) - continue; - - let val = get(node.v, data); - if ( val == null ) - continue; - - if ( node.t ) { - if ( this.types[node.t] ) - val = this.types[node.t].call(this, val, node, locale, out, ast, data); - else if ( this.warn ) - this.warn(`Encountered unknown type "${node.t}" when processing AST.`); - } - - if ( val ) + const val = this.formatNode(node, data, locale, out, ast); + if( val != null ) out.push(val); } diff --git a/src/utilities/vue.js b/src/utilities/vue.js index 9fe56cf6..44aa5bb3 100644 --- a/src/utilities/vue.js +++ b/src/utilities/vue.js @@ -19,13 +19,25 @@ export class Vue extends Module { async onLoad() { const Vue = window.ffzVue = this.Vue = (await import(/* webpackChunkName: "vue" */ 'vue')).default, - ObserveVisibility = await import(/* webpackChunkName: "vue" */ 'vue-observe-visibility'), - RavenVue = await import(/* webpackChunkName: "vue" */ 'raven-js/plugins/vue'), components = this._components; - this.component((await import(/* webpackChunkName: "vue" */ 'src/std-components/index.js')).default); + const [ + ObserveVisibility, + Clickaway, + RavenVue, + Components + + ] = await Promise.all([ + import(/* webpackChunkName: "vue" */ 'vue-observe-visibility'), + import(/* webpackChunkName: "vue" */ 'vue-clickaway'), + import(/* webpackChunkName: "vue" */ 'raven-js/plugins/vue'), + import(/* webpackChunkName: "vue" */ 'src/std-components/index.js') + ]); + + this.component(Components.default); Vue.use(ObserveVisibility); + Vue.mixin(Clickaway.mixin); if ( ! DEBUG && this.root.raven ) this.root.raven.addPlugin(RavenVue, Vue); @@ -80,6 +92,11 @@ export class Vue extends Module { return t.i18n.tList(key, phrase, options); }, + tNode_(node, data) { + this.locale; + return t.i18n.formatNode(node, data); + }, + setLocale(locale) { t.i18n.locale = locale; } @@ -158,6 +175,9 @@ export class Vue extends Module { }, tList(key, phrase, options) { return this.$i18n.tList_(key, phrase, options); + }, + tNode(node, data) { + return this.$i18n.tNode_(node, data); } } }); diff --git a/styles/icons.scss b/styles/icons.scss index f79dcde0..88fa772a 100644 --- a/styles/icons.scss +++ b/styles/icons.scss @@ -124,6 +124,7 @@ .ffz-i-cw:before { content: '\e82f'; } /* '' */ .ffz-i-up-dir:before { content: '\e830'; } /* '' */ .ffz-i-up-big:before { content: '\e831'; } /* '' */ +.ffz-i-play:before { content: '\e832'; } /* '' */ .ffz-i-link-ext:before { content: '\f08e'; } /* '' */ .ffz-i-twitter:before { content: '\f099'; } /* '' */ .ffz-i-github:before { content: '\f09b'; } /* '' */ diff --git a/styles/widgets.scss b/styles/widgets.scss index 336dd178..5af40140 100644 --- a/styles/widgets.scss +++ b/styles/widgets.scss @@ -20,6 +20,11 @@ .ffz-monospace { font-family: monospace } .ffz-bottom-100 { bottom: 100% } +.ffz--autocomplete { + .scrollable-area { + max-height: 20rem; + } +} .ffz--widget { input, select { diff --git a/styles/widgets/icon-picker.scss b/styles/widgets/icon-picker.scss index 661f059a..5c87746f 100644 --- a/styles/widgets/icon-picker.scss +++ b/styles/widgets/icon-picker.scss @@ -5,7 +5,7 @@ .ffz-icon { width: auto !important; - > * { + figure { pointer-events: none; } }