2025-12-01 01:03:12 +01:00
|
|
|
<template>
|
|
|
|
|
<div
|
2025-12-02 01:02:09 +01:00
|
|
|
class="flex flex-col uw-clickable w-full h-full main-window relative"
|
2025-12-01 01:03:12 +01:00
|
|
|
>
|
2025-12-02 01:02:09 +01:00
|
|
|
<div class="flex flex-row">
|
|
|
|
|
<div class="settings-categories">
|
2025-12-01 01:03:12 +01:00
|
|
|
<div
|
|
|
|
|
v-for="tab of tabs"
|
|
|
|
|
:key="tab.id"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
v-if="!tab.hidden"
|
|
|
|
|
class="tab"
|
|
|
|
|
:class="{
|
|
|
|
|
'active': tab.id === selectedTab,
|
|
|
|
|
'highlight-tab': tab.highlight,
|
|
|
|
|
}"
|
|
|
|
|
@click="selectTab(tab.id)"
|
|
|
|
|
>
|
2025-12-02 01:02:09 +01:00
|
|
|
<div class="label">
|
|
|
|
|
{{tab.label}}
|
|
|
|
|
</div>
|
2025-12-01 01:03:12 +01:00
|
|
|
<div class="icon-container">
|
|
|
|
|
<mdicon
|
|
|
|
|
v-if="tab.icon"
|
|
|
|
|
:name="tab.icon"
|
|
|
|
|
:size="32"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content flex flex-col">
|
|
|
|
|
<!-- autodetection warning -->
|
|
|
|
|
|
|
|
|
|
<div class="warning-area">
|
|
|
|
|
<div
|
|
|
|
|
v-if="statusFlags.hasDrm"
|
|
|
|
|
class="warning-box"
|
|
|
|
|
>
|
|
|
|
|
<div class="icon-container">
|
|
|
|
|
<mdicon name="alert" :size="32" />
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
This site is blocking automatic aspect ratio detection. You will have to adjust aspect ratio manually.<br/>
|
|
|
|
|
<a>Learn more ...</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="flex flex-row panel-content">
|
|
|
|
|
<!-- Panel section -->
|
|
|
|
|
<!-- <VideoSettings
|
|
|
|
|
v-if="selectedTab === 'videoSettings'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:siteSettings="siteSettings"
|
|
|
|
|
:eventBus="eventBus"
|
|
|
|
|
:site="site"
|
|
|
|
|
></VideoSettings> -->
|
2025-12-02 01:02:09 +01:00
|
|
|
<OtherSiteSettings
|
|
|
|
|
v-if="selectedTab === 'extensionSettings'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:enableSettingsEditor="true"
|
|
|
|
|
></OtherSiteSettings>
|
|
|
|
|
<KeyboardShortcutSettings
|
|
|
|
|
v-if="selectedTab === 'keyboardShortcuts'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:eventBus="eventBus"
|
|
|
|
|
></KeyboardShortcutSettings>
|
|
|
|
|
|
2025-12-02 01:03:54 +01:00
|
|
|
<AutodetectionSettings
|
|
|
|
|
v-if="selectedTab === 'autodetectionSettings'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:siteSettings="siteSettings"
|
|
|
|
|
:eventBus="eventBus"
|
|
|
|
|
:site="site"
|
|
|
|
|
>
|
|
|
|
|
</AutodetectionSettings>
|
|
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
|
2025-12-01 01:03:12 +01:00
|
|
|
<PlayerDetectionPanel
|
|
|
|
|
v-if="selectedTab === 'playerDetection'"
|
|
|
|
|
:siteSettings="siteSettings"
|
|
|
|
|
:eventBus="eventBus"
|
|
|
|
|
:site="site"
|
|
|
|
|
>
|
|
|
|
|
</PlayerDetectionPanel>
|
|
|
|
|
<PlayerUiSettings
|
|
|
|
|
v-if="selectedTab === 'playerUiSettings'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:siteSettings="siteSettings"
|
|
|
|
|
:eventBus="eventBus"
|
|
|
|
|
>
|
|
|
|
|
</PlayerUiSettings>
|
2025-12-02 01:03:54 +01:00
|
|
|
|
2025-12-01 01:03:12 +01:00
|
|
|
<DebugPanel
|
|
|
|
|
v-if="selectedTab === 'debugging'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:eventBus="eventBus"
|
|
|
|
|
:site="site"
|
|
|
|
|
></DebugPanel>
|
|
|
|
|
<ChangelogPanel
|
|
|
|
|
v-if="selectedTab === 'changelog'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
></ChangelogPanel>
|
|
|
|
|
<AboutPanel
|
|
|
|
|
v-if="selectedTab === 'about'"
|
|
|
|
|
>
|
|
|
|
|
</AboutPanel>
|
|
|
|
|
<!-- <ResetBackupPanel
|
|
|
|
|
v-if="selectedTab === 'resetBackup'"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
>
|
|
|
|
|
</ResetBackupPanel> -->
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
2025-12-02 01:02:09 +01:00
|
|
|
<script lang="ts">
|
|
|
|
|
import { defineComponent } from 'vue';
|
|
|
|
|
import OtherSiteSettings from '@components/ExtensionSettings/Panels/OtherSiteSettings.vue';
|
|
|
|
|
import KeyboardShortcutSettings from '@components/KeyboardShortcuts/KeyboardShortcutSettings.vue';
|
2025-12-02 01:03:54 +01:00
|
|
|
import AutodetectionSettings from '@components/AutodetectionSettings/AutodetectionSettings.vue';
|
2025-12-02 01:02:09 +01:00
|
|
|
|
|
|
|
|
import DebugPanel from '../../csui/src/PlayerUiPanels/DebugPanel.vue'
|
|
|
|
|
import PlayerDetectionPanel from '../../csui/src/PlayerUiPanels/PlayerDetectionPanel.vue'
|
|
|
|
|
import VideoSettings from '../../csui/src/PlayerUiPanels/VideoSettings.vue'
|
2025-12-01 01:03:12 +01:00
|
|
|
import BrowserDetect from '../../ext/conf/BrowserDetect'
|
2025-12-02 01:02:09 +01:00
|
|
|
import ChangelogPanel from '../../csui/src/PlayerUiPanels/ChangelogPanel.vue'
|
2025-12-01 01:03:12 +01:00
|
|
|
import AboutPanel from '@csui/src/PlayerUiPanels/AboutPanel.vue'
|
2025-12-02 01:02:09 +01:00
|
|
|
import PlayerUiSettings from '../../csui/src/PlayerUiPanels/PlayerUiSettings.vue'
|
|
|
|
|
import ResetBackupPanel from '../../csui/src/PlayerUiPanels/ResetBackupPanel.vue'
|
2025-12-01 01:03:12 +01:00
|
|
|
import SupportLevelIndicator from '@csui/src/components/SupportLevelIndicator.vue'
|
|
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
export default defineComponent({
|
2025-12-01 01:03:12 +01:00
|
|
|
components: {
|
2025-12-02 01:02:09 +01:00
|
|
|
OtherSiteSettings,
|
|
|
|
|
KeyboardShortcutSettings,
|
2025-12-02 01:03:54 +01:00
|
|
|
AutodetectionSettings,
|
2025-12-02 01:02:09 +01:00
|
|
|
|
2025-12-01 01:03:12 +01:00
|
|
|
VideoSettings,
|
|
|
|
|
PlayerDetectionPanel,
|
|
|
|
|
DebugPanel,
|
|
|
|
|
PlayerUiSettings,
|
|
|
|
|
ChangelogPanel,
|
|
|
|
|
AboutPanel,
|
|
|
|
|
SupportLevelIndicator,
|
|
|
|
|
ResetBackupPanel,
|
|
|
|
|
},
|
|
|
|
|
mixins: [],
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
statusFlags: {
|
|
|
|
|
hasDrm: undefined,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
tabs: [
|
|
|
|
|
// {id: 'videoSettings', label: 'Video settings', icon: 'crop'},
|
|
|
|
|
{id: 'extensionSettings', label: 'Site and Extension options', icon: 'cogs' },
|
|
|
|
|
{id: 'autodetectionSettings', label: 'Autodetection options', icon: 'auto-fix'},
|
2025-12-02 01:02:09 +01:00
|
|
|
{id: 'playerUiSettings', label: 'UI settings', icon: 'movie-cog-outline' },
|
|
|
|
|
{id: 'keyboardShortcuts', label: 'Keyboard shortcuts', icon: 'keyboard-outline' },
|
|
|
|
|
{id: 'playerDetection', label: 'Player detection', icon: 'television-play'},
|
2025-12-01 01:03:12 +01:00
|
|
|
// {id: 'advancedOptions', label: 'Advanced options', icon: 'cogs' },
|
|
|
|
|
{id: 'changelog', label: 'What\'s new', icon: 'alert-decagram' },
|
|
|
|
|
{id: 'about', label: 'About', icon: 'information-outline'},
|
|
|
|
|
{id: 'debugging', label: 'Debugging', icon: 'bug-outline', hidden: true},
|
|
|
|
|
],
|
|
|
|
|
selectedTab: 'extensionSettings',
|
|
|
|
|
BrowserDetect: BrowserDetect,
|
|
|
|
|
preventClose: false,
|
|
|
|
|
siteSettings: null,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
props: [
|
|
|
|
|
'settings',
|
|
|
|
|
'eventBus',
|
|
|
|
|
'logger',
|
2025-12-02 01:02:09 +01:00
|
|
|
'inPlayer',
|
2025-12-01 01:03:12 +01:00
|
|
|
'site',
|
|
|
|
|
'defaultTab'
|
|
|
|
|
],
|
|
|
|
|
computed: {
|
|
|
|
|
// LPT: NO ARROW FUNCTIONS IN COMPUTED,
|
|
|
|
|
// IS SUPER HARAM
|
|
|
|
|
// THINGS WILL NOT WORK IF YOU USE ARROWS
|
|
|
|
|
siteSupportLevel() {
|
|
|
|
|
return (this.site && this.siteSettings) ? this.siteSettings.data.type || 'no-support' : 'waiting';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
created() {
|
|
|
|
|
this.settings.listenAfterChange(this.setDebugTabVisibility);
|
|
|
|
|
|
|
|
|
|
if (this.defaultTab) {
|
|
|
|
|
this.selectedTab = this.defaultTab;
|
|
|
|
|
}
|
|
|
|
|
this.siteSettings = this.settings.getSiteSettings({site: this.site});
|
|
|
|
|
this.tabs.find(x => x.id === 'changelog').highlight = !this.settings.active?.whatsNewChecked;
|
|
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
this.eventBus?.subscribe(
|
2025-12-01 01:03:12 +01:00
|
|
|
'uw-show-ui',
|
|
|
|
|
{
|
|
|
|
|
source: this,
|
|
|
|
|
function: () => {
|
|
|
|
|
if (this.inPlayer) {
|
|
|
|
|
return; // show-ui is only intended for global overlay
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
this.setDebugTabVisibility();
|
|
|
|
|
},
|
|
|
|
|
destroyed() {
|
|
|
|
|
this.settings.removeListenerAfterChange(this.setDebugTabVisibility);
|
2025-12-02 01:02:09 +01:00
|
|
|
this.eventBus?.unsubscribeAll(this);
|
2025-12-01 01:03:12 +01:00
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
/**
|
|
|
|
|
* Gets URL of the browser settings page (i think?)
|
|
|
|
|
*/
|
|
|
|
|
getUrl(url) {
|
|
|
|
|
return BrowserDetect.getURL(url);
|
|
|
|
|
},
|
|
|
|
|
selectTab(tab) {
|
2025-12-02 01:02:09 +01:00
|
|
|
console.log("Selecting tab", tab);
|
2025-12-01 01:03:12 +01:00
|
|
|
this.selectedTab = tab;
|
|
|
|
|
},
|
|
|
|
|
setPreventClose(bool) {
|
|
|
|
|
this.preventClose = bool;
|
|
|
|
|
this.$emit('preventClose', bool);
|
|
|
|
|
},
|
|
|
|
|
setDebugTabVisibility() {
|
|
|
|
|
const debugTab = this.tabs.find( x => x.id === 'debugging');
|
|
|
|
|
if (debugTab) {
|
|
|
|
|
debugTab.hidden = !this.settings.active.ui.devMode;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-12-02 01:02:09 +01:00
|
|
|
});
|
2025-12-01 01:03:12 +01:00
|
|
|
</script>
|
2025-12-02 01:02:09 +01:00
|
|
|
<style lang="postcss" scoped>
|
|
|
|
|
@import '../../main.css'; /** postcss processor doesn't support aliases */
|
2025-12-01 01:03:12 +01:00
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
.settings-categories {
|
|
|
|
|
@apply w-[20em] max-w-[20em] flex flex-col grow-0 shrink-0 mr-4 border-r border-r-stone-800 text-right;
|
2025-12-01 01:03:12 +01:00
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
.tab {
|
|
|
|
|
@apply flex flex-row gap-4 px-4 py-2 justify-end items-center
|
|
|
|
|
text-[1.125em] text-stone-300 text-right font-mono
|
|
|
|
|
cursor-pointer
|
|
|
|
|
hover:bg-stone-800
|
|
|
|
|
hover:text-primary-200;
|
2025-12-01 01:03:12 +01:00
|
|
|
|
|
|
|
|
.label {
|
2025-12-02 01:02:09 +01:00
|
|
|
@apply grow-0;
|
2025-12-01 01:03:12 +01:00
|
|
|
}
|
|
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
&.active {
|
|
|
|
|
@apply !bg-transparent !text-primary-300 bg-gradient-to-r from-transparent to-black border-none hover:!text-primary-200;
|
2025-12-01 01:03:12 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-02 01:02:09 +01:00
|
|
|
|
|
|
|
|
|
2025-12-01 01:03:12 +01:00
|
|
|
pre {
|
|
|
|
|
white-space: pre-wrap;
|
|
|
|
|
}
|
|
|
|
|
</style>
|