1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-02 16:08:31 +00:00

tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-tw-

This commit is contained in:
SirStendec 2017-12-13 17:35:20 -05:00
parent 5a9a3d221b
commit 4b246ade44
50 changed files with 1564 additions and 2167 deletions

View file

@ -1,3 +1,11 @@
<div class="list-header">4.0.0-beta1.4<span>@7ca245f1bf1509160a2c</span> <time datetime="2017-12-13">(2017-12-13)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Everything.</li>
<li>&nbsp;</li>
<li>Twitch renamed all their CSS classes to start with <code>tw-</code> requiring significant modifications to basically all of FFZ to insert <code>tw-</code> everywhere.</li>
</ul>
<div class="list-header">4.0.0-beta1.4<span>@8e759e6ddfa7aa70cfea</span> <time datetime="2017-12-01">(2017-12-01)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Message highlighting in chat.</li>

View file

@ -98,9 +98,11 @@ export default class Emotes extends Module {
getSetIDs(user_id, user_login, room_id, room_login) {
const room = this.parent.getRoom(room_id, room_login, true),
room_user = room && room.getUser(user_id, user_login, true),
user = this.parent.getUser(user_id, user_login, true);
return (user ? user.emote_sets._cache : []).concat(
room_user ? room_user.emote_set._cache : [],
room ? room.emote_sets._cache : [],
this.default_sets._cache
);
@ -111,6 +113,37 @@ export default class Emotes extends Module {
.map(set_id => this.emote_sets[set_id]);
}
getRoomSetIDs(user_id, user_login, room_id, room_login) {
const room = this.parent.getRoom(room_id, room_login, true),
room_user = room && room.getUser(user_id, user_login, true);
if ( ! room )
return [];
if ( ! room_user )
return room.emote_sets._cache;
return room_user.emote_sets._cache.concat(room.emote_sets._cache);
}
getRoomSets(user_id, user_login, room_id, room_login) {
return this.getRoomSetIDs(user_id, user_login, room_id, room_login)
.map(set_id => this.emote_sets[set_id]);
}
getGlobalSetIDs(user_id, user_login) {
const user = this.parent.getUser(user_id, user_login, true);
if ( ! user )
return this.default_sets._cache;
return user.emote_sets._cache.concat(this.default_sets._cache);
}
getGlobalSets(user_id, user_login) {
return this.getGlobalSetIDs(user_id, user_login)
.map(set_id => this.emote_sets[set_id]);
}
getEmotes(user_id, user_login, room_id, room_login) {
const emotes = {};
for(const emote_set of this.getSets(user_id, user_login, room_id, room_login))

View file

@ -11,7 +11,23 @@ const EMOTE_CLASS = 'chat-line__message--emote',
LINK_REGEX = /([^\w@#%\-+=:~])?((?:(https?:\/\/)?(?:[\w@#%\-+=:~]+\.)+[a-z]{2,6}(?:\/[\w.\/@#%&()\-+=:?~]*)?))([^\w.\/@#%&()\-+=:?~]|\s|$)/g,
MENTION_REGEX = /([^\w@#%\-+=:~])?(@([^\u0000-\u007F]+|\w+)+)([^\w.\/@#%&()\-+=:?~]|\s|$)/g,
TWITCH_BASE = '//static-cdn.jtvnw.net/emoticons/v1/';
TWITCH_BASE = '//static-cdn.jtvnw.net/emoticons/v1/',
REPLACEMENT_BASE = '//cdn.frankerfacez.com/script/replacements/',
REPLACEMENTS = {
15: '15-JKanStyle.png',
16: '16-OptimizePrime.png',
17: '17-StoneLightning.png',
18: '18-TheRinger.png',
//19: '19-PazPazowitz.png',
//20: '20-EagleEye.png',
//21: '21-CougarHunt.png',
22: '22-RedCoat.png',
26: '26-JonCarnage.png',
//27: '27-PicoMause.png',
30: '30-BCWarrior.png',
33: '33-DansGame.png',
36: '36-PJSalt.png'
};
// ============================================================================
@ -57,7 +73,7 @@ export const Links = {
sanitize(this.i18n.t(
'tooltip.link-destination',
'Destination: %{url}',
{url: data.urls[data.urls.length-1]}
{url: data.urls[data.urls.length-1][1]}
));
if ( data.unsafe ) {
@ -697,12 +713,24 @@ export const TwitchEmotes = {
text: text.slice(idx - t_start, e_start - t_start).join('')
});
let src, srcSet;
const replacement = REPLACEMENTS[e_id];
if ( replacement ) {
src = `${REPLACEMENT_BASE}${replacement}`;
srcSet = '';
} else {
src = `${TWITCH_BASE}${e_id}/1.0`;
srcSet = `${TWITCH_BASE}${e_id}/1.0 1x, ${TWITCH_BASE}${e_id}/2.0 2x`;
}
out.push({
type: 'emote',
id: e_id,
provider: 'twitch',
src: `${TWITCH_BASE}${e_id}/1.0`,
srcSet: `${TWITCH_BASE}${e_id}/1.0 1x, ${TWITCH_BASE}${e_id}/2.0 2x`,
src,
srcSet,
text: text.slice(e_start - t_start, e_end - t_start).join(''),
modifiers: []
});

View file

@ -1,6 +1,6 @@
<template lang="html">
<div class="ffz--changelog border-t pd-t-1">
<div class="align-center">
<div class="ffz--changelog tw-border-t tw-pd-t-1">
<div class="tw-align-center">
<h2>{{ t('home.changelog', 'Changelog') }}</h2>
</div>

View file

@ -1,8 +1,8 @@
<template lang="html">
<div class="ffz--home border-t pd-t-1">
<div class="ffz--home tw-border-t tw-pd-t-1">
<h2>Feedback</h2>
<div class="mg-y-1 c-background-accent c-text-overlay pd-1">
<div class="tw-mg-y-1 tw-c-background-accent tw-c-text-overlay tw-pd-1">
<h3 class="ffz-i-attention">
Please keep in mind that FrankerFaceZ v4 is under heavy development.
</h3>

View file

@ -3,25 +3,25 @@
<div ref="list" class="ffz--rule-list">
<section v-for="(rule, idx) in rules">
<div
class="ffz--rule elevation-1 c-background border mg-b-05 pd-y-05 pd-r-1 flex flex--nowrap align-items-start"
class="ffz--rule tw-elevation-1 tw-c-background tw-border tw-mg-b-05 tw-pd-y-05 tw-pd-r-1 tw-flex tw-flex-nowrap tw-align-items-start"
tabindex="0"
>
<div class="flex flex-shrink-0 align-items-center handle pd-x-05 pd-y-1">
<div class="tw-flex tw-flex-shrink-0 tw-align-items-center tw-handle tw-pd-x-05 tw-pd-y-1">
<span class="ffz-i-ellipsis-vert" />
</div>
<div class="flex-shrink-0 pd-y-05">
<div class="tw-flex-shrink-0 tw-pd-y-05">
Channel
</div>
<div class="mg-x-1 flex flex-grow-1">
<div class="flex-shrink-0 mg-r-1">
<div class="tw-mg-x-1 tw-flex tw-flex-grow-1">
<div class="tw-flex-shrink-0 tw-mg-r-1">
<select class="tw-select">
<option>is one of</option>
<option>is not one of</option>
</select>
</div>
<div class="flex-grow-1">
<div class="tw-flex-grow-1">
<input
type="text"
class="tw-input"
@ -30,7 +30,7 @@
</div>
</div>
<div class="flex flex-shrink-0 align-items-center">
<div class="tw-flex tw-flex-shrink-0 tw-align-items-center">
<button class="tw-button tw-button--text" @click="del(idx)">
<span class="tw-button__text ffz-i-trash">
{{ t('setting.filters.delete', 'Delete') }}
@ -42,7 +42,7 @@
</div>
<button
class="tw-button tw-button--hollow mg-y-1 full-width"
class="tw-button tw-button--hollow tw-mg-y-1 tw-full-width"
@click="newRule"
>
<span class="tw-button__text ffz-i-plus">

View file

@ -1,14 +1,14 @@
<template lang="html">
<div class="ffz--home flex flex--nowrap">
<div class="flex-grow-1">
<div class="align-center">
<div class="ffz--home tw-flex tw-flex-nowrap">
<div class="tw-flex-grow-1">
<div class="tw-align-center">
<h1 class="ffz-i-zreknarf ffz-i-pd-1">FrankerFaceZ</h1>
<span class="c-text-alt">
<span class="tw-c-text-alt">
{{ t('home.tag-line', 'The Twitch Enhancement Suite') }}
</span>
</div>
<section class="pd-t-1 border-t mg-t-1">
<section class="tw-pd-t-1 tw-border-t tw-mg-t-1">
<h2>Welcome to the v4.0 Beta</h2>
<p>
@ -26,7 +26,7 @@
now, here are some of the bigger issues:
</p>
<ul class="mg-b-2">
<ul class="tw-mg-b-2">
<li>Settings from the old version are not being imported.</li>
<li>Settings cannot be searched.</li>
<li>FFZ badges do not display.</li>
@ -35,7 +35,7 @@
<p>And the biggest features still under development:</p>
<ul class="mg-b-2">
<ul class="tw-mg-b-2">
<li>Dark Theme (Pls No Purple)</li>
<li>Badge Customization</li>
<li>Emoji Rendering</li>
@ -66,7 +66,7 @@
</div>
<div class="mg-l-1 flex-shrink-0 tweet-column">
<div class="tw-mg-l-1 tw-flex-shrink-0 tweet-column">
<a class="twitter-timeline" data-width="300" data-theme="dark" href="https://twitter.com/FrankerFaceZ?ref_src=twsrc%5Etfw">
Tweets by FrankerFaceZ
</a>

View file

@ -1,8 +1,8 @@
<template lang="html">
<div class="ffz-main-menu elevation-3 c-background-alt border flex flex--nowrap flex-column" :class="{ maximized }">
<header class="c-background full-width align-items-center flex flex-nowrap" @dblclick="resize">
<div class="ffz-main-menu tw-elevation-3 tw-c-background-alt tw-border tw-flex tw-flex-nowrap tw-flex-column" :class="{ maximized }">
<header class="tw-c-background tw-full-width tw-align-items-center tw-flex tw-flex-nowrap" @dblclick="resize">
<h3 class="ffz-i-zreknarf ffz-i-pd-1">FrankerFaceZ</h3>
<div class="flex-grow-1 pd-x-2">
<div class="tw-flex-grow-1 tw-pd-x-2">
<!--div class="tw-search-input">
<label for="ffz-main-menu.search" class="hide-accessible">{{ t('main-menu.search', 'Search Settings') }}</label>
<div class="relative">
@ -15,27 +15,27 @@
</div>
</div-->
</div>
<button class="tw-button-icon mg-x-05" @click="resize">
<button class="tw-button-icon tw-mg-x-05" @click="resize">
<span class="tw-button-icon__icon">
<figure :class="{'ffz-i-window-maximize': !maximized, 'ffz-i-window-restore': maximized}" />
</span>
</button>
<button class="tw-button-icon mg-x-05" @click="close">
<button class="tw-button-icon tw-mg-x-05" @click="close">
<span class="tw-button-icon__icon">
<figure class="ffz-i-window-close" />
</span>
</button>
</header>
<section class="border-t full-height full-width flex flex-nowrap overflow-hidden">
<nav class="ffz-vertical-nav c-background-alt-2 border-r full-height flex flex-column flex-shrink-0 flex-nowrap">
<header class="border-b pd-1">
<section class="tw-border-t tw-full-height tw-full-width tw-flex tw-flex-nowrap tw-overflow-hidden">
<nav class="ffz-vertical-nav tw-c-background-alt-2 tw-border-r tw-full-height tw-flex tw-flex-column tw-flex-shrink-0 tw-flex-nowrap">
<header class="tw-border-b tw-pd-1">
<profile-selector
:context="context"
@navigate="navigate"
/>
</header>
<div class="full-width full-height overflow-hidden flex flex-nowrap relative">
<div class="ffz-vertical-nav__items full-width flex-grow-1 scrollable-area" data-simplebar>
<div class="tw-full-width tw-full-height tw-overflow-hidden tw-flex tw-flex-nowrap tw-relative">
<div class="ffz-vertical-nav__items tw-full-width tw-flex-grow-1 scrollable-area" data-simplebar>
<div class="simplebar-scroll-content">
<div class="simplebar-content">
<menu-tree
@ -48,16 +48,16 @@
</div>
</div>
</div>
<footer class="c-text-alt border-t pd-1">
<footer class="tw-c-text-alt tw-border-t tw-pd-1">
<div>
{{ t('main-menu.version', 'Version %{version}', {version: version.toString()}) }}
</div>
<div class="c-text-alt-2">
<div class="tw-c-text-alt-2">
{{version.build}}
</div>
</footer>
</nav>
<main class="flex-grow-1 scrollable-area" data-simplebar>
<main class="tw-flex-grow-1 scrollable-area" data-simplebar>
<div class="simplebar-scroll-content">
<div class="simplebar-content">
<menu-page

View file

@ -6,7 +6,7 @@
<section
v-if="item.description"
v-html="t(item.desc_i18n_key, item.description, item)"
class="pd-b-1"
class="tw-pd-b-1"
/>
<component
v-for="i in item.contents"
@ -26,7 +26,7 @@ export default {
classes() {
return [
'ffz--menu-container',
this.item.full_box ? 'border' : 'border-t'
this.item.full_box ? 'tw-border' : 'tw-border-t'
]
}
}

View file

@ -1,14 +1,14 @@
<template lang="html">
<div class="ffz--menu-page">
<header class="mg-b-1">
<header class="tw-mg-b-1">
<template v-for="i in breadcrumbs">
<a v-if="i !== item" href="#" @click="$emit('change-item', i, false)">{{ t(i.i18n_key, i.title, i) }}</a>
<strong v-if="i === item">{{ t(i.i18n_key, i.title, i) }}</strong>
<template v-if="i !== item">&raquo; </template>
</template>
</header>
<section v-if="! context.currentProfile.live && item.profile_warning !== false" class="border-t pd-t-1 pd-b-2">
<div class="c-background-accent c-text-overlay pd-1">
<section v-if="! context.currentProfile.live && item.profile_warning !== false" class="tw-border-t tw-pd-t-1 tw-pd-b-2">
<div class="tw-c-background-accent tw-c-text-overlay tw-pd-1">
<h3 class="ffz-i-attention">
{{ t('setting.profiles.inactive', "This profile isn't active.") }}
</h3>
@ -22,13 +22,13 @@
</section>
<section
v-if="item.description"
class="border-t pd-y-1"
class="tw-border-t tw-pd-y-1"
v-html="t(item.desc_i18n_key || item.i18n_key + '.description', item.description, item)"
/>
</section>
<template v-if="! item.contents">
<ul class="border-t pd-y-1">
<li class="pd-x-1" v-for="i in item.items">
<ul class="tw-border-t tw-pd-y-1">
<li class="tw-pd-x-1" v-for="i in item.items">
<a href="#" @click="$emit('change-item', i, false)">
{{ t(i.i18n_key, i.title, i) }}
</a>

View file

@ -17,7 +17,7 @@
role="presentation"
>
<div
class="flex__item flex flex--nowrap align-items-center pd-y-05 pd-r-05"
class="tw-flex__item tw-flex tw-flex-nowrap tw-align-items-center tw-pd-y-05 tw-pd-r-05"
role="treeitem"
:aria-expanded="item.expanded"
@ -32,7 +32,7 @@
item.expanded ? 'ffz-i-down-dir' : 'ffz-i-right-dir'
]"
/>
<span class="flex-grow-1">
<span class="tw-flex-grow-1">
{{ t(item.i18n_key, item.title, item) }}
</span>
<span v-if="item.pill" class="pill">

View file

@ -1,7 +1,7 @@
<template lang="html">
<div class="ffz--profile-editor">
<div class="flex align-items-center border-t pd-1">
<div class="flex-grow-1"></div>
<div class="tw-flex tw-align-items-center tw-border-t tw-pd-1">
<div class="tw-flex-grow-1"></div>
<button
class="tw-button tw-button--text"
@click="save"
@ -11,7 +11,7 @@
</span>
</button>
<button
class="mg-l-1 tw-button tw-button--text"
class="tw-mg-l-1 tw-button tw-button--text"
:disabled="item.profile && context.profiles.length < 2"
@click="del"
>
@ -19,19 +19,19 @@
{{ t('setting.profiles.delete', 'Delete') }}
</span>
</button>
<!--button class="mg-l-1 tw-button tw-button--text">
<!--button class="tw-mg-l-1 tw-button tw-button--text">
<span class="tw-button__text ffz-i-download">
{{ t('setting.profiles.export', 'Export') }}
</span>
</button-->
</div>
<div class="ffz--menu-container border-t">
<div class="ffz--menu-container tw-border-t">
<header>
{{ t('settings.data_management.profiles.edit.general', 'General') }}
</header>
<div class="ffz--widget flex flex--nowrap">
<div class="ffz--widget tw-flex tw-flex-nowrap">
<label for="ffz:editor:name">
{{ t('settings.data_management.profiles.edit.name', 'Name') }}
</label>
@ -44,7 +44,7 @@
/>
</div>
<div class="ffz--widget flex flex--nowrap">
<div class="ffz--widget tw-flex tw-flex-nowrap">
<label for="ffz:editor:description">
{{ t('settings.data_management.profiles.edit.desc', 'Description') }}
</label>
@ -58,11 +58,11 @@
</div>
</div>
<div class="ffz--menu-container border-t">
<div class="ffz--menu-container tw-border-t">
<header>
{{ t('settings.data_management.profiles.edit.rules', 'Rules') }}
</header>
<section class="pd-b-1">
<section class="tw-pd-b-1">
{{ t(
'settings.data_management.profiles.edit.rules.description',
'Rules allows you to define a series of conditions under which this profile will be active.'

View file

@ -1,22 +1,22 @@
<template lang="html">
<div class="ffz--widget ffz--profile-manager border-t pd-y-1">
<div class="c-background-accent c-text-overlay pd-1 mg-b-1">
<div class="ffz--widget ffz--profile-manager tw-border-t tw-pd-y-1">
<div class="tw-c-background-accent tw-c-text-overlay tw-pd-1 tw-mg-b-1">
<h3 class="ffz-i-attention">
This feature is not yet finished.
</h3>
Creating and editing profiles is disabled until the rule editor is finished.
</div>
<div class="flex align-items-center pd-b-05">
<div class="flex-grow-1">
<div class="tw-flex tw-align-items-center tw-pd-b-05">
<div class="tw-flex-grow-1">
{{ t('setting.profiles.drag', 'Drag profiles to change their priority.') }}
</div>
<button class="mg-l-1 tw-button tw-button--text" disabled @notclick="edit()">
<button class="tw-mg-l-1 tw-button tw-button--text" disabled @notclick="edit()">
<span class="tw-button__text ffz-i-plus">
{{ t('setting.profiles.new', 'New Profile') }}
</span>
</button>
<!--button class="mg-l-1 tw-button tw-button--text">
<!--button class="tw-mg-l-1 tw-button tw-button--text">
<span class="tw-button__text ffz-i-upload">
{{ t('setting.profiles.import', 'Import…') }}
</span>
@ -30,22 +30,22 @@
:data-profile="p.id"
>
<div
class="ffz--profile elevation-1 c-background border pd-y-05 pd-r-1 mg-y-05 flex flex--nowrap"
class="ffz--profile tw-elevation-1 tw-c-background tw-border tw-pd-y-05 tw-pd-r-1 tw-mg-y-05 tw-flex tw-flex-nowrap"
:class="{live: p.live}"
tabindex="0"
>
<div class="flex flex-shrink-0 align-items-center handle pd-x-05 pd-t-1 pd-b-05">
<div class="tw-flex tw-flex-shrink-0 tw-align-items-center tw-handle tw-pd-x-05 tw-pd-t-1 tw-pd-b-05">
<span class="ffz-i-ellipsis-vert" />
</div>
<div class="flex-grow-1">
<div class="tw-flex-grow-1">
<h4>{{ t(p.i18n_key, p.title, p) }}</h4>
<div v-if="p.description" class="description">
{{ t(p.desc_i18n_key, p.description, p) }}
</div>
</div>
<div class="flex flex-shrink-0 align-items-center">
<div class="tw-flex tw-flex-shrink-0 tw-align-items-center">
<button class="tw-button tw-button--text" disabled @notclick="edit(p)">
<span class="tw-button__text ffz-i-cog">
{{ t('setting.profiles.configure', 'Configure') }}
@ -53,7 +53,7 @@
</button>
</div>
<div class="flex flex-shrink-0 align-items-center border-l mg-l-1 pd-l-1">
<div class="tw-flex tw-flex-shrink-0 tw-align-items-center tw-border-l tw-mg-l-1 tw-pd-l-1">
<div v-if="p.live" class="ffz--profile__icon ffz-i-ok tw-tooltip-wrapper">
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-right">
{{ t('setting.profiles.active', 'This profile is active.') }}

View file

@ -15,20 +15,20 @@
>
{{ t(context.currentProfile.i18n_key, context.currentProfile.title, context.currentProfile) }}
</div>
<div v-if="opened" v-on-clickaway="hide" class="tw-balloon block tw-balloon--lg tw-balloon--down tw-balloon--left">
<div v-if="opened" v-on-clickaway="hide" class="tw-balloon tw-block tw-balloon--lg tw-balloon--down tw-balloon--left">
<div
class="ffz--profile-list elevation-2 c-background-alt"
class="ffz--profile-list tw-elevation-2 tw-c-background-alt"
@keyup.escape="focusHide"
@focusin="focus"
@focusout="blur"
>
<div class="scrollable-area border-b" data-simplebar>
<div class="scrollable-area tw-border-b" data-simplebar>
<div class="simplebar-scroll-content">
<div class="simplebar-content" ref="popup">
<div
v-for="(p, idx) in context.profiles"
tabindex="0"
class="ffz--profile-row relative border-b pd-y-05 pd-r-3 pd-l-1"
class="ffz--profile-row tw-relative tw-border-b tw-pd-y-05 tw-pd-r-3 tw-pd-l-1"
:class="{
live: p.live,
current: p === context.currentProfile
@ -48,7 +48,7 @@
>
<div
v-if="p.live"
class="tw-tooltip-wrapper ffz--profile-row__icon ffz-i-ok absolute"
class="tw-tooltip-wrapper ffz--profile-row__icon ffz-i-ok tw-absolute"
>
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-right">
{{ t('setting.profiles.active', 'This profile is active.') }}
@ -64,7 +64,7 @@
</div>
</div>
</div>
<div class="pd-y-05 pd-x-05 align-right">
<div class="tw-pd-y-05 tw-pd-x-05 tw-align-right">
<button class="tw-button tw-button--text" @click="openConfigure">
<span class="tw-button__text ffz-i-cog">
{{ t('setting.profiles.configure', 'Configure') }}

View file

@ -1,6 +1,6 @@
<template lang="html">
<div class="ffz--widget ffz--checkbox" :class="{inherits: isInherited, default: isDefault}">
<div class="flex align-items-center">
<div class="tw-flex tw-align-items-center">
<input
type="checkbox"
class="tw-checkbox__input"
@ -16,7 +16,7 @@
<button
v-if="source && source !== profile"
class="mg-l-05 tw-button tw-button--text"
class="tw-mg-l-05 tw-button tw-button--text"
@click="context.currentProfile = source"
>
<span class="tw-button__text ffz-i-right-dir">
@ -24,7 +24,7 @@
</span>
</button>
<button v-if="has_value" class="mg-l-05 tw-button tw-button--text tw-tooltip-wrapper" @click="clear">
<button v-if="has_value" class="tw-mg-l-05 tw-button tw-button--text tw-tooltip-wrapper" @click="clear">
<span class="tw-button__text ffz-i-cancel"></span>
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-right">
{{ t('setting.reset', 'Reset to Default') }}
@ -33,7 +33,7 @@
</div>
<section
v-if="item.description"
class="c-text-alt-2"
class="tw-c-text-alt-2"
style="padding-left:2.2rem"
v-html="t(item.desc_i18n_key || item.i18n_key + '.description', item.description, item)"
/>

View file

@ -4,7 +4,7 @@
:for="item.full_key"
v-html="t(item.i18n_key, item.title, item)"
/>
<div class="relative">
<div class="tw-relative">
<div class="tw-input__icon-group tw-input__icon-group--right">
<div class="tw-input__icon">
<figure class="ffz-i-keyboard" />
@ -12,7 +12,7 @@
</div>
<div
type="text"
class="mg-05 tw-input tw-input--icon-right"
class="tw-mg-05 tw-input tw-input--icon-right"
ref="display"
:id="item.full_key"
tabindex="0"

View file

@ -1,16 +1,16 @@
<template lang="html">
<div class="atw-input">
<div class="tw-input">
<header>
{{ t(item.i18n_key, item.title, item) }}
</header>
<section
v-if="item.description"
class="c-text-alt-2"
class="tw-c-text-alt-2"
v-html="t(item.desc_i18n_key || item.i18n_key + '.description', item.description, item)"
/>
<div v-for="(i, idx) in data" class="mg-l-1">
<div v-for="(i, idx) in data" class="tw-mg-l-1">
<input type="radio" :name="item.full_key" :id="item.full_key + idx" :value="i.value" class="tw-radio__input">
<label :for="item.full_key + idx" class="pd-y-05 tw-radio__label">{{ t(i.i18n_key, i.title, i) }}</label>
<label :for="item.full_key + idx" class="tw-pd-y-05 tw-radio__label">{{ t(i.i18n_key, i.title, i) }}</label>
</div>
</div>
</template>

View file

@ -1,12 +1,12 @@
<template lang="html">
<div class="ffz--widget ffz--select-box" :class="{inherits: isInherited, default: isDefault}">
<div class="flex align-items-center">
<div class="tw-flex tw-align-items-center">
<label :for="item.full_key">
{{ t(item.i18n_key, item.title, item) }}
</label>
<select
class="mg-05 tw-select display-inline width-auto"
class="tw-mg-05 tw-select tw-display-inline tw-width-auto"
ref="control"
:id="item.full_key"
@change="onChange"
@ -18,7 +18,7 @@
<button
v-if="source && source !== profile"
class="mg-l-05 tw-button tw-button--text"
class="tw-mg-l-05 tw-button tw-button--text"
@click="context.currentProfile = source"
>
<span class="tw-button__text ffz-i-right-dir">
@ -26,7 +26,7 @@
</span>
</button>
<button v-if="has_value" class="mg-l-05 tw-button tw-button--text tw-tooltip-wrapper" @click="clear">
<button v-if="has_value" class="tw-mg-l-05 tw-button tw-button--text tw-tooltip-wrapper" @click="clear">
<span class="tw-button__text ffz-i-cancel"></span>
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-right">
{{ t('setting.reset', 'Reset to Default') }}
@ -36,7 +36,7 @@
<section
v-if="item.description"
class="c-text-alt-2"
class="tw-c-text-alt-2"
v-html="t(item.desc_i18n_key || item.i18n_key + '.description', item.description, item)"
/>
</div>

View file

@ -1,12 +1,12 @@
<template lang="html">
<div class="ffz--widget ffz--text-box" :class="{inherits: isInherited, default: isDefault}">
<div class="flex align-items-center">
<div class="tw-flex tw-align-items-center">
<label :for="item.full_key">
{{ t(item.i18n_key, item.title, item) }}
</label>
<input
class="mg-05 tw-input display-inline width-auto"
class="tw-mg-05 tw-input tw-display-inline tw-width-auto"
ref="control"
:id="item.full_key"
@change="onChange"
@ -15,7 +15,7 @@
<button
v-if="source && source !== profile"
class="mg-l-05 tw-button tw-button--text"
class="tw-mg-l-05 tw-button tw-button--text"
@click="context.currentProfile = source"
>
<span class="tw-button__text ffz-i-right-dir">
@ -23,7 +23,7 @@
</span>
</button>
<button v-if="has_value" class="mg-l-05 tw-button tw-button--text tw-tooltip-wrapper" @click="clear">
<button v-if="has_value" class="tw-mg-l-05 tw-button tw-button--text tw-tooltip-wrapper" @click="clear">
<span class="tw-button__text ffz-i-cancel"></span>
<div class="tw-tooltip tw-tooltip--down tw-tooltip--align-right">
{{ t('setting.reset', 'Reset to Default') }}
@ -33,7 +33,7 @@
<section
v-if="item.description"
class="c-text-alt-2"
class="tw-c-text-alt-2"
v-html="t(item.desc_i18n_key || item.i18n_key + '.description', item.description, item)"
/>
</div>

View file

@ -114,7 +114,7 @@ export default class MainMenu extends Module {
const maximized = this._maximized,
visible = this._visible = !this._visible,
main = document.querySelector(maximized ? '.twilight-main' : '.twilight-root > .full-height');
main = document.querySelector(maximized ? '.twilight-main' : '.twilight-root > .tw-full-height');
if ( ! visible ) {
if ( maximized )
@ -143,7 +143,7 @@ export default class MainMenu extends Module {
return;
const maximized = this._maximized = !this._maximized,
main = document.querySelector(maximized ? '.twilight-main' : '.twilight-root > .full-height'),
main = document.querySelector(maximized ? '.twilight-main' : '.twilight-root > .tw-full-height'),
old_main = this._menu.parentElement;
if ( maximized )

View file

@ -303,7 +303,7 @@ export default class Metadata extends Module {
stat = e('span', 'ffz-stat-text tw-button__text')
]),
popup = e('button', `tw-button ${cls} ffz-stat-arrow`,
e('span', 'tw-button__icon pd-x-0',
e('span', 'tw-button__icon tw-pd-x-0',
e('figure', 'ffz-i-down-dir')
)
)
@ -355,7 +355,7 @@ export default class Metadata extends Module {
tooltipClass: 'ffz-metadata-balloon tw-balloon block',
arrowClass: 'tw-balloon__tail',
innerClass: 'pd-1',
innerClass: 'tw-pd-1',
popper: {
placement: 'top-end'

View file

@ -88,7 +88,7 @@ export default class ChannelBar extends Module {
updateMetadata(inst, keys) {
const container = this.fine.getHostNode(inst),
metabar = container && container.querySelector && container.querySelector('.channel-info-bar__action-container > .flex');
metabar = container && container.querySelector && container.querySelector('.channel-info-bar__action-container > .tw-flex');
if ( ! inst._ffz_mounted || ! metabar )
return;

View file

@ -123,25 +123,25 @@ export default class Scroller extends Module {
if ( ! node )
return;
node.classList.add('full-height');
node.classList.add('tw-full-height');
el = this._ffz_freeze_indicator = e('div', {
className: 'ffz--freeze-indicator chat-list__more-messages-placeholder relative mg-x-2'
className: 'ffz--freeze-indicator chat-list__more-messages-placeholder tw-relative tw-mg-x-2'
}, e('div', {
className: 'chat-list__more-messages bottom-0 full-width align-items-center flex justify-content-center absolute pd-05'
className: 'chat-list__more-messages tw-bottom-0 tw-full-width tw-align-items-center tw-flex tw-justify-content-center tw-absolute tw-pd-05'
}));
this.ffzUpdateText();
node.appendChild(el);
} else
el.classList.remove('hide');
el.classList.remove('tw-hide');
}
cls.prototype.ffzHideFrozen = function() {
this._ffz_freeze_visible = false;
if ( this._ffz_freeze_indicator )
this._ffz_freeze_indicator.classList.add('hide');
this._ffz_freeze_indicator.classList.add('tw-hide');
}
cls.prototype.ffzFreeze = function() {

View file

@ -39,7 +39,7 @@ export default class SettingsMenu extends Module {
cls.prototype.renderUniversalOptions = function() {
const val = old_universal.call(this);
val.props.children.push(e('div', {
className: 'mg-t-1'
className: 'tw-mg-t-1'
}, e('button', {
onClick: () => t.click(this)
}, t.i18n.t('site.menu_button', 'FrankerFaceZ Control Center'))

View file

@ -12,7 +12,7 @@
border-top: 1px solid #aaa;
border-bottom-color: rgba(255,255,255,0.5);
.theme--dark & {
.tw-theme--dark & {
border-top-color: #000;
border-bottom-color: rgba(255,255,255,0.1);
}
@ -27,7 +27,7 @@
.thread-message__warning {
padding-top: 0 !important;
& > .pd-y-05 {
& > .tw-pd-y-05 {
padding-top: calc(.5rem - 1px) !important;
}
}

View file

@ -12,7 +12,7 @@
border-top: 1px solid rgba(255,255,255,0.5);
border-bottom-color: #aaa;
.theme--dark & {
.tw-theme--dark & {
border-top-color: rgba(255,255,255,0.1);
border-bottom-color: #000;
}
@ -27,7 +27,7 @@
.thread-message__warning {
padding-top: 0 !important;
& > .pd-y-05 {
& > .tw-pd-y-05 {
padding-top: calc(.5rem - 1px) !important;
}
}

View file

@ -11,7 +11,7 @@
border-top: 1px solid #dad8de;
.theme--dark & {
.tw-theme--dark & {
border-top-color: #2c2541;
}
@ -25,7 +25,7 @@
.thread-message__warning {
padding-top: 0 !important;
& > .pd-y-05 {
& > .tw-pd-y-05 {
padding-top: calc(.5rem - 1px) !important;
}
}

View file

@ -11,7 +11,7 @@
border-bottom: 1px solid #dad8de;
.theme--dark & {
.tw-theme--dark & {
border-bottom-color: #2c2541;
}
@ -25,7 +25,7 @@
.thread-message__warning {
padding-bottom: 0 !important;
& > .pd-y-05 {
& > .tw-pd-y-05 {
padding-bottom: calc(.5rem - 1px) !important;
}
}

View file

@ -3,7 +3,7 @@
&.ffz-mentioned:nth-child(2n+0) {
background-color: rgba(255,127,127,.4) !important;
.theme--dark & {
.tw-theme--dark & {
background-color: rgba(255,0,0,.3) !important;
}
}

View file

@ -3,7 +3,7 @@
&.ffz-mentioned {
background-color: rgba(255,127,127,.2) !important;
.theme--dark & {
.tw-theme--dark & {
background-color: rgba(255,0,0,.2) !important;
}
}

View file

@ -6,7 +6,7 @@
color: #fff;
background: rgba(0,0,0,0.5);
.theme--dark & {
.tw-theme--dark & {
color: #000;
background-color: rgba(255,255,255,0.5);
}

View file

@ -13,7 +13,7 @@
&:nth-child(2n+0) {
background-color: rgba(0,0,0,0.1) !important;
.theme--dark & {
.tw-theme--dark & {
background-color: rgba(255,255,255,0.05) !important;
}
}

View file

@ -1,4 +1,4 @@
.chat-input button[data-a-target="bits-button"],
.channel-header__right > .mg-l-1 > div > div > button:not([data-a-target]) {
.channel-header__right > .tw-mg-l-1 > div > div > button:not([data-a-target]) {
display: none;
}

View file

@ -7,8 +7,17 @@
top: -4rem !important;
transition: top ease-in-out 75ms, bottom ease-in-out 75ms;
.tw-svg__asset--logotwitch {
visibility: hidden;
}
&:focus-within,
&:hover {
top: 0 !important;
.tw-svg__asset--logotwitch {
visibility: visible;
}
}
}

View file

@ -18,7 +18,7 @@
border-right: none !important;
border-left: 1px solid #dad8de;
.theme--dark & {
.tw-theme--dark & {
border-left-color: #2c2541;
}
}
@ -27,7 +27,7 @@
border-left: none !important;
border-right: 1px solid #dad8de;
.theme--dark & {
.tw-theme--dark & {
border-right-color: #2c2541;
}
}

View file

@ -318,7 +318,7 @@ export default class Following extends SiteModule {
}
this.hostMenu = e('div', 'ffz-host-menu tw-balloon tw-block',
e('div', 'tw-selectable-filter__balloon tw-pd-y-05',
e('div', 'tw-border tw-elevation-1 tw-border-radius-small tw-c-background',
e('div', {
className: 'scrollable-area',
'data-simplebar': true,
@ -328,7 +328,8 @@ export default class Following extends SiteModule {
)
);
document.body.appendChild(this.hostMenu);
document.body.querySelector('.twilight-root').appendChild(this.hostMenu);
//document.body.appendChild(this.hostMenu);
this.hostMenuPopper = new Popper(document.body, this.hostMenu, {
placement: 'bottom-start',

View file

@ -47,7 +47,7 @@ export default class MenuButton extends SiteModule {
this._el = e('div',
'ffz-top-nav align-self-center flex-grow-0 flex-shrink-0 flex-nowrap pd-r-1 pd-l-05',
'ffz-top-nav tw-align-self-center tw-flex-grow-0 tw-flex-shrink-0 tw-flex-nowrap tw-pd-r-1 tw-pd-l-05',
this._btn = e('button',
{
className: 'tw-button-icon tw-button-icon--overlay tw-button-icon--large',

View file

@ -73,7 +73,7 @@ export default class ThemeEngine extends Module {
updateSetting(enable) {
this.toggleStyle(enable);
document.body.classList.toggle('theme--ffz', enable);
document.body.classList.toggle('tw-theme--ffz', enable);
}
onEnable() {

View file

@ -1,5 +1,5 @@
.channel-info-bar__action-container {
& > .flex {
& > .tw-flex {
& > * {
margin-left: 0 !important;
margin-right: 1rem !important;
@ -15,7 +15,7 @@
margin-left: -.8rem !important;
}
.c-text-live {
.tw-c-text-live {
order: 1;
}
@ -24,12 +24,12 @@
}
}
& > .flex:last-child > :last-child {
& > .tw-flex:last-child > :last-child {
margin-right: 0 !important
}
}
.theme--ffz, .theme--ffz.theme--dark, .theme--dark, body {
.tw-theme--ffz, .tw-theme--ffz.tw-theme--dark, .tw-theme--dark, body {
.ffz-stat > .tw-button,
.ffz-stat.tw-button {
color: inherit;

View file

@ -1,4 +1,4 @@
.theme--dark .live-channel-card__boxart {
.tw-theme--dark .live-channel-card__boxart {
border-right: none;
border-bottom: none;
}

View file

@ -25,7 +25,7 @@
width: 100%;
height: 100%;
&, .theme--dark & {
&, .tw-theme--dark & {
border: none !important;
}

View file

@ -5,7 +5,7 @@
font-size: 1.2rem;
}
.pd-r-1 + & {
.tw-pd-r-1 + & {
margin-left: -.5rem;
}

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@
@keyup.alt.page-down.stop="focusNextTab"
>
<header
class="flex"
class="tw-flex"
tabindex="0"
role="tablist"
@keyup.home="firstTab"
@ -24,7 +24,7 @@
:id="'tab-for-' + i.full_key"
:aria-selected="selected === idx"
:aria-controls="'tab-panel-' + i.full_key"
class="tab pd-y-05 pd-x-1"
class="tab tw-pd-y-05 tw-pd-x-1"
:class="[selected === idx ? 'active' : '']"
@click="selected = idx"
>
@ -32,14 +32,14 @@
</div>
</header>
<section
class="border"
class="tw-border"
:id="'tab-panel-' + tab.full_key"
:aria-labelledby="'tab-for-' + tab.full_key"
role="tabpanel"
aria-hidden="false"
aria-expanded="true"
>
<section v-if="tab.description" class="pd-b-1">
<section v-if="tab.description" class="tw-pd-b-1">
{{ t(tab.desc_i18n_key, tab.description, tab) }}
</section>
<component

View file

@ -10,11 +10,11 @@ body {
top: -3px;
box-shadow: -1px -1px 0 #dad8de;
.theme--dark & {
.tw-theme--dark & {
box-shadow: -1px -1px 0 #2c2541;
}
.theme--ffz & {
.tw-theme--ffz & {
box-shadow: -1px -1px 0 var(--ffz-color-20);
}
}
@ -23,11 +23,11 @@ body {
bottom: -3px;
box-shadow: 1px 1px 0 #dad8de;
.theme--dark & {
.tw-theme--dark & {
box-shadow: 1px 1px 0 #2c2541;
}
.theme--ffz & {
.tw-theme--ffz & {
box-shadow: 1px 1px 0 var(--ffz-color-20);
}
}
@ -36,11 +36,11 @@ body {
right: -3px;
box-shadow: -1px 1px 0 #dad8de;
.theme--dark & {
.tw-theme--dark & {
box-shadow: -1px 1px 0 #2c2541;
}
.theme--ffz & {
.tw-theme--ffz & {
box-shadow: -1px 1px 0 var(--ffz-color-20);
}
}
@ -49,11 +49,11 @@ body {
left: -3px;
box-shadow: 1px -1px 0 #dad8de;
.theme--dark & {
.tw-theme--dark & {
box-shadow: 1px -1px 0 #2c2541;
}
.theme--ffz & {
.tw-theme--ffz & {
box-shadow: 1px -1px 0 var(--ffz-color-20);
}
}
@ -123,7 +123,7 @@ body {
}
.theme--dark & {
.tw-theme--dark & {
background: #fff;
color: #0e0c13;

View file

@ -7,8 +7,8 @@
@import "./widgets/profile-selector.scss";
.display-inline { display: inline !important }
.width-auto { width: auto !important }
.tw-display-inline { display: inline !important }
.tw-width-auto { width: auto !important }
.ffz--widget {
@ -131,7 +131,7 @@
font-size: 16px;
font-variant: small-caps;
.theme--dark & {
.tw-theme--dark & {
border-bottom-color: #2c2541;
}
@ -152,7 +152,7 @@
border-radius: 2px;
background-color: rgba(0,0,0,0.1);
.theme--dark & {
.tw-theme--dark & {
background-color: rgba(255,255,255,0.05);
}
}

View file

@ -16,7 +16,7 @@
background-color: $bg-light;
.theme--dark & {
.tw-theme--dark & {
background-color: $bg-dark;
}

View file

@ -19,7 +19,7 @@
.active > div,
.active > div:hover,
.theme--dark & .active > div:hover {
.tw-theme--dark & .active > div:hover {
background-color: #6441a4;
color: #fff;
}
@ -29,7 +29,7 @@
background-color: #fff;
.theme--dark & {
.tw-theme--dark & {
background-color: #201c2b;
}
}

View file

@ -2,6 +2,7 @@
position: relative;
.tw-balloon {
position: absolute;
margin-top: 0 !important
}
@ -22,7 +23,7 @@
opacity: .5;
font-variant: italic;
.theme--dark & {
.tw-theme--dark & {
opacity: .25;
}
}
@ -36,7 +37,7 @@
}
&:last-child {
&, .theme--dark & {
&, .tw-theme--dark & {
border-bottom: none !important
}
}
@ -51,7 +52,7 @@
&:hover {
background: rgba(100, 65, 164, .05);
.theme-dark & {
.tw-theme-dark & {
background: rgba(100, 65, 164, .2);
}
}

View file

@ -20,7 +20,7 @@
border-color: $border-light;
.theme--dark & {
.tw-theme--dark & {
border-color: $border-dark;
}