Add tooltips and context to the settings page
This commit is contained in:
parent
43e3aa9f5b
commit
f12b85e4f4
|
@ -1,7 +1,11 @@
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
|
import FtTooltip from '../ft-tooltip/ft-tooltip.vue'
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
name: 'FtInput',
|
name: 'FtInput',
|
||||||
|
components: {
|
||||||
|
'ft-tooltip': FtTooltip
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
placeholder: {
|
placeholder: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -30,6 +34,10 @@ export default Vue.extend({
|
||||||
dataList: {
|
dataList: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => { return [] }
|
default: () => { return [] }
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
|
|
|
@ -11,6 +11,12 @@
|
||||||
:for="id"
|
:for="id"
|
||||||
>
|
>
|
||||||
{{ placeholder }}
|
{{ placeholder }}
|
||||||
|
<ft-tooltip
|
||||||
|
v-if="tooltip !== ''"
|
||||||
|
class="selectTooltip"
|
||||||
|
position="right"
|
||||||
|
:tooltip="tooltip"
|
||||||
|
/>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
:id="id"
|
:id="id"
|
||||||
|
|
|
@ -68,6 +68,12 @@
|
||||||
color: var(--tertiary-text-color);
|
color: var(--tertiary-text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selectTooltip {
|
||||||
|
position: absolute;
|
||||||
|
top: -20px;
|
||||||
|
right: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* LABEL ======================================= */
|
/* LABEL ======================================= */
|
||||||
.select-label {
|
.select-label {
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
|
import FtTooltip from '../ft-tooltip/ft-tooltip.vue'
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
name: 'FtSelect',
|
name: 'FtSelect',
|
||||||
|
components: {
|
||||||
|
'ft-tooltip': FtTooltip
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
placeholder: {
|
placeholder: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -18,6 +22,10 @@ export default Vue.extend({
|
||||||
selectValues: {
|
selectValues: {
|
||||||
type: Array,
|
type: Array,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -22,6 +22,11 @@
|
||||||
<label class="select-label">
|
<label class="select-label">
|
||||||
{{ placeholder }}
|
{{ placeholder }}
|
||||||
</label>
|
</label>
|
||||||
|
<ft-tooltip
|
||||||
|
v-if="tooltip !== ''"
|
||||||
|
class="selectTooltip"
|
||||||
|
:tooltip="tooltip"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
|
import FtTooltip from '../ft-tooltip/ft-tooltip.vue'
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
name: 'FtToggleSwitch',
|
name: 'FtToggleSwitch',
|
||||||
|
components: {
|
||||||
|
'ft-tooltip': FtTooltip
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
label: {
|
label: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -18,6 +22,10 @@ export default Vue.extend({
|
||||||
disabled: {
|
disabled: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
|
|
|
@ -18,6 +18,11 @@
|
||||||
class="switch-label"
|
class="switch-label"
|
||||||
>
|
>
|
||||||
{{ label }}
|
{{ label }}
|
||||||
|
<ft-tooltip
|
||||||
|
v-if="tooltip !== ''"
|
||||||
|
class="selectTooltip"
|
||||||
|
:tooltip="tooltip"
|
||||||
|
/>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -36,8 +36,8 @@
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
line-height: 120%;
|
line-height: 120%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
max-width: 10em;
|
max-width: max-content;
|
||||||
min-width: max-content;
|
min-width: 15em;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
padding: 10px 8px;
|
padding: 10px 8px;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
@ -84,4 +84,4 @@
|
||||||
.tooltip {
|
.tooltip {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
|
@ -651,6 +651,15 @@ export default Vue.extend({
|
||||||
this.updateInvidiousInstanceBounce(invidiousInstance)
|
this.updateInvidiousInstanceBounce(invidiousInstance)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handlePreferredApiBackend: function (backend) {
|
||||||
|
this.updateBackendPreference(backend)
|
||||||
|
console.log(backend)
|
||||||
|
|
||||||
|
if (backend === 'local') {
|
||||||
|
this.updateForceLocalBackendForLegacy(false)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
updateLocale: function (locale) {
|
updateLocale: function (locale) {
|
||||||
this.$i18n.locale = locale
|
this.$i18n.locale = locale
|
||||||
this.currentLocale = locale
|
this.currentLocale = locale
|
||||||
|
@ -668,7 +677,8 @@ export default Vue.extend({
|
||||||
'updateRegion',
|
'updateRegion',
|
||||||
'updateListType',
|
'updateListType',
|
||||||
'updateThumbnailPreference',
|
'updateThumbnailPreference',
|
||||||
'updateInvidiousInstance'
|
'updateInvidiousInstance',
|
||||||
|
'updateForceLocalBackendForLegacy'
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
:label="$t('Settings.General Settings.Fallback to Non-Preferred Backend on Failure')"
|
:label="$t('Settings.General Settings.Fallback to Non-Preferred Backend on Failure')"
|
||||||
:default-value="backendFallback"
|
:default-value="backendFallback"
|
||||||
:compact="true"
|
:compact="true"
|
||||||
|
:tooltip="$t('Tooltips.General Settings.Fallback to Non-Preferred Backend on Failure')"
|
||||||
@change="updateBackendFallback"
|
@change="updateBackendFallback"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -43,7 +44,8 @@
|
||||||
:value="backendPreference"
|
:value="backendPreference"
|
||||||
:select-names="backendNames"
|
:select-names="backendNames"
|
||||||
:select-values="backendValues"
|
:select-values="backendValues"
|
||||||
@change="updateBackendPreference"
|
:tooltip="$t('Tooltips.General Settings.Preferred API Backend')"
|
||||||
|
@change="handlePreferredApiBackend"
|
||||||
/>
|
/>
|
||||||
<ft-select
|
<ft-select
|
||||||
v-if="false"
|
v-if="false"
|
||||||
|
@ -73,6 +75,7 @@
|
||||||
:value="thumbnailPreference"
|
:value="thumbnailPreference"
|
||||||
:select-names="thumbnailTypeNames"
|
:select-names="thumbnailTypeNames"
|
||||||
:select-values="thumbnailTypeValues"
|
:select-values="thumbnailTypeValues"
|
||||||
|
:tooltip="$t('Tooltips.General Settings.Thumbnail Preference')"
|
||||||
@change="updateThumbnailPreference"
|
@change="updateThumbnailPreference"
|
||||||
/>
|
/>
|
||||||
<ft-select
|
<ft-select
|
||||||
|
@ -90,6 +93,7 @@
|
||||||
:show-label="true"
|
:show-label="true"
|
||||||
:value="invidiousInstance"
|
:value="invidiousInstance"
|
||||||
:data-list="instanceValues"
|
:data-list="instanceValues"
|
||||||
|
:tooltip="$t('Tooltips.General Settings.Invidious Instance')"
|
||||||
@input="handleInvidiousInstanceInput"
|
@input="handleInvidiousInstanceInput"
|
||||||
/>
|
/>
|
||||||
</ft-flex-box>
|
</ft-flex-box>
|
||||||
|
|
|
@ -34,6 +34,10 @@ export default Vue.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
backendPreference: function () {
|
||||||
|
return this.$store.getters.getBackendPreference
|
||||||
|
},
|
||||||
|
|
||||||
autoplayVideos: function () {
|
autoplayVideos: function () {
|
||||||
return this.$store.getters.getAutoplayVideos
|
return this.$store.getters.getAutoplayVideos
|
||||||
},
|
},
|
||||||
|
|
|
@ -19,13 +19,16 @@
|
||||||
<ft-toggle-switch
|
<ft-toggle-switch
|
||||||
:label="$t('Settings.Player Settings.Force Local Backend for Legacy Formats')"
|
:label="$t('Settings.Player Settings.Force Local Backend for Legacy Formats')"
|
||||||
:compact="true"
|
:compact="true"
|
||||||
|
:disabled="backendPreference === 'local'"
|
||||||
:default-value="forceLocalBackendForLegacy"
|
:default-value="forceLocalBackendForLegacy"
|
||||||
|
:tooltip="$t('Tooltips.Player Settings.Force Local Backend for Legacy Formats')"
|
||||||
@change="updateForceLocalBackendForLegacy"
|
@change="updateForceLocalBackendForLegacy"
|
||||||
/>
|
/>
|
||||||
<ft-toggle-switch
|
<ft-toggle-switch
|
||||||
:label="$t('Settings.Player Settings.Proxy Videos Through Invidious')"
|
:label="$t('Settings.Player Settings.Proxy Videos Through Invidious')"
|
||||||
:compact="true"
|
:compact="true"
|
||||||
:default-value="proxyVideos"
|
:default-value="proxyVideos"
|
||||||
|
:tooltip="$t('Tooltips.Player Settings.Proxy Videos Through Invidious')"
|
||||||
@change="updateProxyVideos"
|
@change="updateProxyVideos"
|
||||||
/>
|
/>
|
||||||
<ft-toggle-switch
|
<ft-toggle-switch
|
||||||
|
@ -84,6 +87,7 @@
|
||||||
:value="defaultVideoFormat"
|
:value="defaultVideoFormat"
|
||||||
:select-names="formatNames"
|
:select-names="formatNames"
|
||||||
:select-values="formatValues"
|
:select-values="formatValues"
|
||||||
|
:tooltip="$t('Tooltips.Player Settings.Default Video Format')"
|
||||||
@change="updateDefaultVideoFormat"
|
@change="updateDefaultVideoFormat"
|
||||||
/>
|
/>
|
||||||
<ft-select
|
<ft-select
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
<ft-toggle-switch
|
<ft-toggle-switch
|
||||||
:label="$t('Settings.Subscription Settings.Fetch Feeds from RSS')"
|
:label="$t('Settings.Subscription Settings.Fetch Feeds from RSS')"
|
||||||
:default-value="useRssFeeds"
|
:default-value="useRssFeeds"
|
||||||
|
:tooltip="$t('Tooltips.Subscription Settings.Fetch Feeds from RSS')"
|
||||||
@change="updateUseRssFeeds"
|
@change="updateUseRssFeeds"
|
||||||
/>
|
/>
|
||||||
</ft-flex-box>
|
</ft-flex-box>
|
||||||
|
|
|
@ -530,6 +530,20 @@ Comments:
|
||||||
No more comments available: No more comments available
|
No more comments available: No more comments available
|
||||||
Up Next: Up Next
|
Up Next: Up Next
|
||||||
|
|
||||||
|
#Tooltips
|
||||||
|
Tooltips:
|
||||||
|
General Settings:
|
||||||
|
Preferred API Backend: Choose the backend that FreeTube uses to obtain data. The local API is a built in extractor. The Invidious API requires an Invidious server to connect to
|
||||||
|
Fallback to Non-Preferred Backend on Failure: When your preferred API has a problem, FreeTube will automatically attempt to use your non-preferred API as a fallback method when enabled
|
||||||
|
Thumbnail Preference: All thumbnails throughout FreeTube will be replaced with a frame of the video instead of the default thumbnail
|
||||||
|
Invidious Instance: The Invidious instance that FreeTube will connect to for API calls. Clear the current instance to see a list of public instances to choose from
|
||||||
|
Player Settings:
|
||||||
|
Force Local Backend for Legacy Formats: Only works when the Invidious API is your default. When enabled, the local API will run and use the legacy formats returned by that instead of the ones returned by Invidious. Helps when the videos returned by Invidious don't play due to country restrictions
|
||||||
|
Proxy Videos Through Invidious: Will connect to Invidious to serve videos instead of making a direct connection to YouTube. Overrides API preference
|
||||||
|
Default Video Format: Set the formats used when a video plays. Dash formats can play higher qualities. Legacy formats are limited to a max of 720p but use less bandwidth. Audio formats are audio only streams
|
||||||
|
Subscription Settings:
|
||||||
|
Fetch Feeds from RSS: When enabled, FreeTube will use RSS instead of it's default method for grabbing your subscription feed. RSS is faster and prevents IP blocking, but doesn't provide certain information like video duration or live status
|
||||||
|
|
||||||
# Toast Messages
|
# Toast Messages
|
||||||
Local API Error (Click to copy): Local API Error (Click to copy)
|
Local API Error (Click to copy): Local API Error (Click to copy)
|
||||||
Invidious API Error (Click to copy): Invidious API Error (Click to copy)
|
Invidious API Error (Click to copy): Invidious API Error (Click to copy)
|
||||||
|
|
Loading…
Reference in New Issue