From 3c00c0946e09056960d84dab3e322a95d7f381a8 Mon Sep 17 00:00:00 2001 From: SirStendec Date: Mon, 17 Jun 2019 15:32:38 -0400 Subject: [PATCH] 4.5.0 * Added: Setting to hide the "LIVE" indicator on live channel pages. * Added: Setting to invert portrait mode, placing chat at the top rather than the bottom. * API Added: New icons to the default icon set: `user`, `clip`, `sort-down`, `sort-up`, `sort-alt-up`, `sort-alt-down`, and `language`. * API Added: All Vue components now have access to a `getReactURL(route, ...)` method for building URLs. * API Fixed: `` will not attempt a React navigation if given a non-relative link. * API Fixed: Issue with `getTagImmediate` throwing an exception when not given a callback function. --- res/font/ffz-fontello.eot | Bin 25400 -> 25764 bytes res/font/ffz-fontello.svg | 4 + res/font/ffz-fontello.ttf | Bin 25216 -> 25580 bytes res/font/ffz-fontello.woff | Bin 15760 -> 16016 bytes res/font/ffz-fontello.woff2 | Bin 13228 -> 13448 bytes src/main.js | 2 +- src/modules/tooltips.js | 44 +++++++++++ .../modules/css_tweaks/index.js | 18 ++++- .../modules/css_tweaks/styles/portrait.scss | 72 ++++++++++++++---- src/sites/twitch-twilight/modules/layout.js | 12 +++ src/std-components/aspect.vue | 2 +- src/std-components/icon-picker.vue | 7 ++ src/std-components/react-link.vue | 2 +- src/utilities/compat/fine-router.js | 17 ++++- src/utilities/time.js | 6 +- src/utilities/twitch-data.js | 7 +- src/utilities/vue.js | 4 + styles/icons.scss | 2 + styles/tooltips.scss | 12 +++ 19 files changed, 189 insertions(+), 22 deletions(-) diff --git a/res/font/ffz-fontello.eot b/res/font/ffz-fontello.eot index d7f8d3a1dfe04becbcd77b4aeb49f4c99f51aba6..00c0f8ae1dc0b6f1ca8bb9da0c0348de5724f942 100644 GIT binary patch delta 1164 zcmX|Fv;lqTL5ayP}#A!@iNVUWmHD;f55;a4K**>`VK@&_SnPf&YW%yjq=6&+Jzx$kX z?sLw$_k8jtyYw|vE+v3l@kymY4i|d$lP%|SzX7ZZKqQ`uWpoSAM=5_FP+ajBvM%Mu zzi$EEi`4Jx&kUr-Cnuhv{0^`oGY}ijQ2R#8zabk2hF|>_+{-*S4Z(@xnIgH)dL#vlkWrC{p~XXG?32;&`3Tnz#j5X0z5{(DZu08 zUj%3(|1Lm)yez;Iz#q1CazHaZI0Sf-OpDP#3z>GVfmU)<0Ie-1z&`Q^0_-O*3D8FV zOMrIr-vS&U|06&USgE94tW?qj2g%n2I7D6$;4t}n0gjM=5YX3480>Yq52bl-f{H3^ zY4JeEbZO3*%+io0ISmO?nrioNvYO3SpQ5X%-BPA_-JY7={$_41_ci*eI4@H?J6S^& zljhrZ-P^pY-Dun1yyM{fq3wHX9ELYX=3bUxyFAtw=;;YO8jb|Ev0$*KIUHeEdPYYJ zxs%ce=vZLwJ3c0@K%paJh8Mn;N6aSULk2~sXKjj(b0)F0%pR=AVzGEFUXR;VUFCFC z+El%+td?!v$x4}3zg4eM!m63he1Ea#dVPJP1|KWoZuOPEndnsCc;AR>^YapJcB-rU zRp;Hr^m<6qxN7H?adkb+G(H}^H>BF_Dw~?73n;$mcUL&{y@haJY2Z(6;Plgg8#_*& zdf@zAsF8*8w?fwxX`YVkQvTDAK(!y5~F-o~xc^Z_xV@6=X!H_(fL}r;2xHt)X!PF} zsFY9|CkxxUbWt!1VKyqR3&n+vBG`o@Qn3V;)@Q-Cdd7>+;hS&HJ@+y9-g{H*;UqH! zqQKz!oXKa*E80pfG@dB|EDWGEnv#`OXQyP!CjgT%dL=EHW|qdNl%%>8R}!hA+{kIl zZvhr1A@?cNzJc;ivN_RxE&lRC+d5!%0ci9lV{(_R_`w4le?@g)k{ZmKup4NmG1!_+ zrTZ-(TYporc@HhRtGhQU-+X&D0-Wfg4r3{~Uty1|Dxm)#q#ijH3)aV$DVG4lveMg^ z4mNys0jDSzYLrVc<$dkWCxE=DK453q4b^H$Y*)ba;p`%Wzh7SRS{kpw$o5lV8zdNE znyXar8ZNtsz$1$+hX2P1^ti2uS}BZb&jc%5lh>!E=a@EYj2klZ!+;KGGxMVyRFTIy z@R470;3vP~AV8kwU@!R-2m8pMIj9B}L=J*vCkHiTI#D76&~6s$I5oaFqOlL#H%owtKZ= zm80CbqAB@v>x1865omp2W=EvspH*|%&zjUwcv=-tKJ{m9OPfk!nHUgD_ICSZdBl-+ zmN|P|8(ohp-fgavAQjxA`iFgWIY%~ianzV{YwLsH!wA|5tv+Npq EAFUDB*8l(j diff --git a/res/font/ffz-fontello.svg b/res/font/ffz-fontello.svg index 61b5077b..bc27f344 100644 --- a/res/font/ffz-fontello.svg +++ b/res/font/ffz-fontello.svg @@ -108,6 +108,10 @@ + + + + diff --git a/res/font/ffz-fontello.ttf b/res/font/ffz-fontello.ttf index 41678442fc98081ac7b168f7954a243245363bc9..7f775d92338dab6d7e8b59782775626c2cf6dcc3 100644 GIT binary patch delta 1137 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 HlM_CD+B$BR diff --git a/res/font/ffz-fontello.woff2 b/res/font/ffz-fontello.woff2 index 8481f2dd04cacfc0ce542d19bad612456391c7c0..bc9adb420b6822e7a0786d0f72fc38d0e8db217a 100644 GIT binary patch literal 13448 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 literal 13228 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 diff --git a/src/main.js b/src/main.js index 3114d80c..71d92b2e 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: 4, revision: 2, + major: 4, minor: 5, revision: 0, commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/modules/tooltips.js b/src/modules/tooltips.js index 9cd32b20..b2aba3fd 100644 --- a/src/modules/tooltips.js +++ b/src/modules/tooltips.js @@ -31,6 +31,30 @@ export default class TooltipProvider extends Module { ] } + this.types.child = target => { + const child = target.querySelector(':scope > .ffz-tooltip-child'); + if ( ! child ) + return null; + + target._ffz_child = child; + child.remove(); + child.classList.remove('ffz-tooltip-child'); + return child; + }; + + this.types.child.onHide = target => { + const child = target._ffz_child; + if ( child ) { + target._ffz_child = null; + child.remove(); + + if ( ! target.querySelector(':scope > .ffz-tooltip-child') ) { + child.classList.add('ffz-tooltip-child'); + target.appendChild(child); + } + } + } + this.types.text = target => sanitize(target.dataset.title); this.types.html = target => target.dataset.title; } @@ -46,6 +70,10 @@ export default class TooltipProvider extends Module { content: this.process.bind(this), interactive: this.checkInteractive.bind(this), hover_events: this.checkHoverEvents.bind(this), + + onShow: this.delegateOnShow.bind(this), + onHide: this.delegateOnHide.bind(this), + popper: { placement: 'top', modifiers: { @@ -74,6 +102,22 @@ export default class TooltipProvider extends Module { this.tips.cleanup(); } + delegateOnShow(target, tip) { + const type = target.dataset.tooltipType, + handler = this.types[type]; + + if ( handler && handler.onShow ) + handler.onShow(target, tip); + } + + delegateOnHide(target, tip) { + const type = target.dataset.tooltipType, + handler = this.types[type]; + + if ( handler && handler.onHide ) + handler.onHide(target, tip); + } + checkDelayShow(target, tip) { const type = target.dataset.tooltipType, handler = this.types[type]; diff --git a/src/sites/twitch-twilight/modules/css_tweaks/index.js b/src/sites/twitch-twilight/modules/css_tweaks/index.js index 326be42e..ab68a870 100644 --- a/src/sites/twitch-twilight/modules/css_tweaks/index.js +++ b/src/sites/twitch-twilight/modules/css_tweaks/index.js @@ -32,6 +32,7 @@ const CLASSES = { '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', 'not-live-bar': 'div[data-test-selector="non-live-video-banner-layout"]', + 'channel-live-ind': 'div[data-target="channel-header__live-indicator"]' }; @@ -220,6 +221,20 @@ export default class CSSTweaks extends Module { // Other? + this.settings.add('channel.hide-live-indicator', { + requires: ['context.route.name'], + process(ctx, val) { + return ctx.get('context.route.name') === 'user' ? val : false + }, + default: false, + ui: { + path: 'Channel > Appearance >> General', + title: 'Hide the "LIVE" indicator on live channel pages.', + component: 'setting-check-box' + }, + changed: val => this.toggleHide('channel-live-ind', val) + }); + this.settings.add('channel.round-avatars', { default: true, ui: { @@ -231,7 +246,7 @@ export default class CSSTweaks extends Module { }); this.settings.add('channel.hide-not-live-bar', { - default: true, + default: false, ui: { path: 'Channel > Appearance >> General', title: 'Hide the "Not Live" bar.', @@ -256,6 +271,7 @@ export default class CSSTweaks extends Module { this.toggle('square-avatars', ! this.settings.get('channel.round-avatars')); this.toggleHide('not-live-bar', this.settings.get('channel.hide-not-live-bar')); + this.toggleHide('channel-live-ind', this.settings.get('channel.hide-live-indicator')); 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/modules/css_tweaks/styles/portrait.scss b/src/sites/twitch-twilight/modules/css_tweaks/styles/portrait.scss index 10632bea..f593c119 100644 --- a/src/sites/twitch-twilight/modules/css_tweaks/styles/portrait.scss +++ b/src/sites/twitch-twilight/modules/css_tweaks/styles/portrait.scss @@ -2,14 +2,22 @@ --ffz-player-width: calc(100vw - var(--ffz-portrait-extra-width)); --ffz-player-height: calc(calc(calc(var(--ffz-player-width) * 0.5625) + var(--ffz-portrait-extra-height))); --ffz-theater-height: calc(calc(100vw * 0.5625) + var(--ffz-portrait-extra-height)); + --ffz-chat-height: calc(100vh - var(--ffz-player-height)); + + & > .tw-flex-column { + .ffz--portrait-invert & { + top: var(--ffz-chat-height) !important; + } - & > .tw-full-height { height: var(--ffz-player-height) !important; } .persistent-player.persistent-player__border--mini { pointer-events: none; - bottom: calc(100vh - var(--ffz-player-height)) !important; + + body:not(.ffz--portrait-invert) & { + bottom: var(--ffz-chat-height) !important; + } > * { pointer-events: auto; @@ -17,10 +25,18 @@ } .persistent-player.persistent-player--theatre { - top: 0 !important; + .ffz--portrait-invert & { + top: unset !important; + bottom: 0 !important; + } + + body:not(.ffz--portrait-invert) & { + top: 0 !important; + bottom: unset !important; + } + left: 0 !important; right: 0 !important; - bottom: unset !important; height: var(--ffz-theater-height) !important; width: 100% !important; } @@ -37,9 +53,28 @@ bottom: 0 !important; left: 0 !important; right: 0 !important; - height: calc(100vh - var(--ffz-player-height)) !important; + height: var(--ffz-chat-height) !important; width: unset !important; - border-top: 1px solid #dad8de; + + body:not(.ffz--portrait-invert) & { + top: unset !important; + bottom: 0 !important; + border-top: 1px solid #dad8de; + + .tw-root--theme-dark & { + border-top-color: #2a2a2a; + } + } + + .ffz--portrait-invert & { + top: 0 !important; + bottom: unset !important; + border-bottom: 1px solid #dad8de; + + .tw-root--theme-dark & { + border-bottom-color: #2a2a2a; + } + } & > .tw-full-height { width: 100% !important; @@ -47,18 +82,33 @@ .right-column__toggle-visibility { position: fixed !important; - top: 6.5rem; + + body:not(.ffz--portrait-invert) & { + top: 6.5rem; + } + + .ffz--portrait-invert & { + top: calc(var(--ffz-chat-height) + 6.5rem); + } + right: .5rem; left: unset !important; transform: rotate(90deg); } .emote-picker__tab-content { - max-height: calc(calc(100vh - var(--ffz-player-height)) - 26rem); + max-height: calc(var(--ffz-chat-height) - 26rem); } &.right-column--theatre { - top: unset !important; + .ffz--portrait-invert & { + bottom: unset !important; + } + + body:not(.ffz--portrait-invert) & { + top: unset !important; + } + height: calc(100vh - var(--ffz-theater-height)) !important; .emote-picker__tab-content { @@ -66,10 +116,6 @@ } } - .tw-root--theme-dark & { - border-top-color: #2a2a2a - } - .video-chat { flex-basis: unset; } diff --git a/src/sites/twitch-twilight/modules/layout.js b/src/sites/twitch-twilight/modules/layout.js index 8eb0f1a7..250a8653 100644 --- a/src/sites/twitch-twilight/modules/layout.js +++ b/src/sites/twitch-twilight/modules/layout.js @@ -40,6 +40,16 @@ export default class Layout extends Module { } }); + this.settings.add('layout.portrait-invert', { + default: false, + ui: { + path: 'Appearance > Layout >> Channel', + title: 'When in portrait mode, place chat at the top.', + component: 'setting-check-box' + }, + changed: val => document.body.classList.toggle('ffz--portrait-invert', val) + }); + this.settings.add('layout.portrait-threshold', { default: 1.25, ui: { @@ -147,6 +157,8 @@ export default class Layout extends Module { } onEnable() { + document.body.classList.toggle('ffz--portrait-invert', this.settings.get('layout.portrait-invert')); + this.css_tweaks.toggle('portrait', this.settings.get('layout.inject-portrait')); this.css_tweaks.toggle('portrait-swapped', this.settings.get('layout.use-portrait-swapped')); this.css_tweaks.setVariable('portrait-extra-width', `${this.settings.get('layout.portrait-extra-width')}rem`); diff --git a/src/std-components/aspect.vue b/src/std-components/aspect.vue index ba1c61af..b8f46d99 100644 --- a/src/std-components/aspect.vue +++ b/src/std-components/aspect.vue @@ -4,7 +4,7 @@ class="tw-aspect" >
diff --git a/src/std-components/icon-picker.vue b/src/std-components/icon-picker.vue index 5290e632..c62e1d43 100644 --- a/src/std-components/icon-picker.vue +++ b/src/std-components/icon-picker.vue @@ -130,9 +130,13 @@ const FFZ_ICONS = [ 'up-dir', 'up-big', 'play', + 'user', + 'clip', 'link-ext', 'twitter', 'github', + 'sort-down', + 'sort-up', 'gauge', 'download-cloud', 'upload-cloud', @@ -140,6 +144,9 @@ const FFZ_ICONS = [ 'keyboard', 'calendar-empty', 'ellipsis-vert', + 'sort-alt-up', + 'sort-alt-down', + 'language', 'twitch', 'bell-off', 'trash', diff --git a/src/std-components/react-link.vue b/src/std-components/react-link.vue index d37b54c3..b83b67aa 100644 --- a/src/std-components/react-link.vue +++ b/src/std-components/react-link.vue @@ -13,7 +13,7 @@ export default { onClick(event) { this.$emit('click', event); - if ( ! event.defaultPrevented ) + if ( ! event.defaultPrevented && ! this.href.includes('//') ) this.reactNavigate(this.href, event); } } diff --git a/src/utilities/compat/fine-router.js b/src/utilities/compat/fine-router.js index 8e94ee43..8317be3d 100644 --- a/src/utilities/compat/fine-router.js +++ b/src/utilities/compat/fine-router.js @@ -73,11 +73,26 @@ export default class FineRouter extends Module { this.emit(':route', null, null); } - getURL(route, data, opts) { + getURL(route, data, opts, ...args) { const r = this.routes[route]; if ( ! r ) throw new Error(`unable to find route "${route}"`); + if ( typeof data !== 'object' ) { + const parts = [data, opts, ...args]; + data = {}; + + let i = 0; + for(const part of r.parts) { + if ( part && part.name ) { + data[part.name] = parts[i]; + i++; + if ( i >= parts.length ) + break; + } + } + } + return r.url(data, opts); } diff --git a/src/utilities/time.js b/src/utilities/time.js index cac7ca41..65df2367 100644 --- a/src/utilities/time.js +++ b/src/utilities/time.js @@ -22,9 +22,11 @@ export function duration_to_string(elapsed, separate_days, days_only, no_hours, days = days > 0 ? `${days} days, ` : ''; } + const show_hours = (!no_hours || days || hours); + return `${days}${ - (!no_hours || days || hours) ? `${days && hours < 10 ? '0' : ''}${hours}:` : '' - }${minutes < 10 ? '0' : ''}${minutes}${ + show_hours ? `${days && hours < 10 ? '0' : ''}${hours}:` : '' + }${show_hours && minutes < 10 ? '0' : ''}${minutes}${ no_seconds ? '' : `:${seconds < 10 ? '0' : ''}${seconds}`}`; } diff --git a/src/utilities/twitch-data.js b/src/utilities/twitch-data.js index 212f5976..1c82d8ae 100644 --- a/src/utilities/twitch-data.js +++ b/src/utilities/twitch-data.js @@ -378,8 +378,11 @@ export default class TwitchData extends Module { if ( this.tag_cache.has(id) ) out = this.tag_cache.get(id); - if ( ! out || (want_description && ! out.description) ) - this.getTag(id, want_description).then(tag => callback(id, tag)).catch(err => callback(id, null, err)); + if ( (want_description && (! out || ! out.description)) || (! out && callback) ) { + const promise = this.getTag(id, want_description); + if ( callback ) + promise.then(tag => callback(id, tag)).catch(err => callback(id, null, err)); + } return out; } diff --git a/src/utilities/vue.js b/src/utilities/vue.js index 44aa5bb3..897c67a1 100644 --- a/src/utilities/vue.js +++ b/src/utilities/vue.js @@ -170,6 +170,10 @@ export class Vue extends Module { router.history.push(url); } }, + getReactURL(route, data, opts, ...args) { + const router = t.resolve('site.router'); + return router.getURL(route, data, opts, ...args); + }, t(key, phrase, options) { return this.$i18n.t_(key, phrase, options); }, diff --git a/styles/icons.scss b/styles/icons.scss index cce8b72d..0b56e7bf 100644 --- a/styles/icons.scss +++ b/styles/icons.scss @@ -125,6 +125,8 @@ .ffz-i-up-dir:before { content: '\e830'; } /* '' */ .ffz-i-up-big:before { content: '\e831'; } /* '' */ .ffz-i-play:before { content: '\e832'; } /* '' */ +.ffz-i-user:before { content: '\e833'; } /* '' */ +.ffz-i-clip:before { content: '\e834'; } /* '' */ .ffz-i-link-ext:before { content: '\f08e'; } /* '' */ .ffz-i-twitter:before { content: '\f099'; } /* '' */ .ffz-i-github:before { content: '\f09b'; } /* '' */ diff --git a/styles/tooltips.scss b/styles/tooltips.scss index 9bc1b1c8..bdefdb50 100644 --- a/styles/tooltips.scss +++ b/styles/tooltips.scss @@ -8,6 +8,18 @@ body { } +.ffz-tooltip.ffz-tooltip--no-mouse { + > * { + pointer-events: none; + } +} + + +.ffz-tooltip-child { + display: none !important; +} + + .tw-balloon { &[x-placement^="bottom"] > .tw-balloon__tail { bottom: 100%;