Webpack bundle dependencies (#2511)
* Allow webpack to bundle *most* dependencies * Exclude *most* node_modules from getting packaged by electron-builder * Import only the required icons instead of bundling the whole icon pack * Reduce packaging blacklist to only include the few things that still need blacklisting
This commit is contained in:
parent
a453c8436e
commit
eaa15ea833
|
@ -58,22 +58,14 @@ const config = {
|
||||||
'icon.svg',
|
'icon.svg',
|
||||||
'./dist/**/*',
|
'./dist/**/*',
|
||||||
'!dist/web/*',
|
'!dist/web/*',
|
||||||
'!**/node_modules/**/.*',
|
'!node_modules/**/*',
|
||||||
'!**/node_modules/**/index.html',
|
|
||||||
'!**/{.github,Jenkinsfile}',
|
|
||||||
'!**/{CHANGES.md,CODE_OF_CONDUCT.md,CONTRIBUTING.md,CONTRIBUTION.md,DEVELOPMENT.md,docs,docs.md,docs.mli,examples,History.md,HISTORY.md,README.md,TODO.md,UPGRADE_GUIDE.md,UPGRADING.md}',
|
|
||||||
'!**/{commitlint.config.js,.editorconfig,.eslintignore,.eslintrc.{js,yml},.gitmodules,.huskyrc,.lintstagedrc,.nvmrc,.nycrc{,.json},.prettierrc{,.yaml},tslint.json}',
|
|
||||||
'!**/{.babelrc,bower.json,Gruntfile.js,Makefile,.npmrc.proregistry,rollup.config.js,.tm_properties,.tool-versions,tsconfig.json,webpack.config.js}',
|
|
||||||
'!**/*.{{,c,m}js,min,ts}.map',
|
|
||||||
'!**/*.d.ts',
|
|
||||||
|
|
||||||
// only exclude the src directory for specific packages
|
// renderer
|
||||||
// as some of them have their dist code in there and we don't want to exclude those
|
'node_modules/{miniget,ytpl,ytsr}/**/*',
|
||||||
'!**/node_modules/{@fortawesome/vue-fontawesome,agent-base,jquery,localforage,m3u8-parser,marked,mpd-parser,performance-now,video.js,vue,vue-i18n,vue-router}/src/*',
|
|
||||||
'!**/node_modules/**/{bin,man,scripts}/*',
|
'!**/README.md',
|
||||||
'!**/node_modules/jquery/dist/jquery.slim*.js',
|
'!**/*.js.map',
|
||||||
'!**/node_modules/video.js/dist/{alt/*,video.js}',
|
'!**/*.d.ts',
|
||||||
'!**/node_modules/@videojs/*/src'
|
|
||||||
],
|
],
|
||||||
dmg: {
|
dmg: {
|
||||||
contents: [
|
contents: [
|
||||||
|
|
|
@ -2,15 +2,9 @@ const path = require('path')
|
||||||
const webpack = require('webpack')
|
const webpack = require('webpack')
|
||||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||||
|
|
||||||
const {
|
const { productName } = require('../package.json')
|
||||||
dependencies,
|
|
||||||
devDependencies,
|
|
||||||
productName,
|
|
||||||
} = require('../package.json')
|
|
||||||
|
|
||||||
const externals = Object.keys(dependencies).concat(Object.keys(devDependencies))
|
|
||||||
const isDevMode = process.env.NODE_ENV === 'development'
|
const isDevMode = process.env.NODE_ENV === 'development'
|
||||||
const whiteListedModules = []
|
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
name: 'main',
|
name: 'main',
|
||||||
|
@ -19,7 +13,10 @@ const config = {
|
||||||
entry: {
|
entry: {
|
||||||
main: path.join(__dirname, '../src/main/index.js'),
|
main: path.join(__dirname, '../src/main/index.js'),
|
||||||
},
|
},
|
||||||
externals: externals.filter(d => !whiteListedModules.includes(d)),
|
// webpack spits out errors while inlining electron-debug as
|
||||||
|
// it tries to dynamically load dependencies
|
||||||
|
// the error: "Critical dependency: the request of a dependency is an expression"
|
||||||
|
externals: ['electron-debug'],
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,15 +4,9 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
const VueLoaderPlugin = require('vue-loader/lib/plugin')
|
const VueLoaderPlugin = require('vue-loader/lib/plugin')
|
||||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
||||||
|
|
||||||
const {
|
const { productName } = require('../package.json')
|
||||||
dependencies,
|
|
||||||
devDependencies,
|
|
||||||
productName,
|
|
||||||
} = require('../package.json')
|
|
||||||
|
|
||||||
const externals = Object.keys(dependencies).concat(Object.keys(devDependencies))
|
|
||||||
const isDevMode = process.env.NODE_ENV === 'development'
|
const isDevMode = process.env.NODE_ENV === 'development'
|
||||||
const whiteListedModules = ['vue']
|
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
name: 'renderer',
|
name: 'renderer',
|
||||||
|
@ -32,7 +26,10 @@ const config = {
|
||||||
path: path.join(__dirname, '../dist'),
|
path: path.join(__dirname, '../dist'),
|
||||||
filename: '[name].js',
|
filename: '[name].js',
|
||||||
},
|
},
|
||||||
externals: externals.filter(d => !whiteListedModules.includes(d)),
|
// webpack spits out errors while inlining ytpl and ytsr as
|
||||||
|
// they dynamically import their package.json file to extract the bug report URL
|
||||||
|
// the error: "Critical dependency: the request of a dependency is an expression"
|
||||||
|
externals: ['ytpl', 'ytsr'],
|
||||||
module: {
|
module: {
|
||||||
rules: [
|
rules: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
class="bubble selected"
|
class="bubble selected"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="check"
|
:icon="['fas', 'check']"
|
||||||
class="icon"
|
class="icon"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -9,8 +9,8 @@ export default Vue.extend({
|
||||||
default: ''
|
default: ''
|
||||||
},
|
},
|
||||||
icon: {
|
icon: {
|
||||||
type: String,
|
type: Array,
|
||||||
default: 'ellipsis-v'
|
default: () => ['fas', 'ellipsis-v']
|
||||||
},
|
},
|
||||||
theme: {
|
theme: {
|
||||||
type: String,
|
type: String,
|
||||||
|
|
|
@ -67,7 +67,7 @@ export default Vue.extend({
|
||||||
// As the text input box should be empty
|
// As the text input box should be empty
|
||||||
clearTextButtonExisting: false,
|
clearTextButtonExisting: false,
|
||||||
clearTextButtonVisible: false,
|
clearTextButtonVisible: false,
|
||||||
actionButtonIconName: 'search'
|
actionButtonIconName: ['fas', 'search']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -136,7 +136,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
if (!this.inputDataPresent) {
|
if (!this.inputDataPresent) {
|
||||||
// Change back to default icon if text is blank
|
// Change back to default icon if text is blank
|
||||||
this.actionButtonIconName = 'search'
|
this.actionButtonIconName = ['fas', 'search']
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,15 +165,15 @@ export default Vue.extend({
|
||||||
|
|
||||||
if (isYoutubeLink) {
|
if (isYoutubeLink) {
|
||||||
// Go to URL (i.e. Video/Playlist/Channel
|
// Go to URL (i.e. Video/Playlist/Channel
|
||||||
this.actionButtonIconName = 'arrow-right'
|
this.actionButtonIconName = ['fas', 'arrow-right']
|
||||||
} else {
|
} else {
|
||||||
// Search with text
|
// Search with text
|
||||||
this.actionButtonIconName = 'search'
|
this.actionButtonIconName = ['fas', 'search']
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
// On exception, consider text as invalid URL
|
// On exception, consider text as invalid URL
|
||||||
this.actionButtonIconName = 'search'
|
this.actionButtonIconName = ['fas', 'search']
|
||||||
// Rethrow exception
|
// Rethrow exception
|
||||||
throw ex
|
throw ex
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
</label>
|
</label>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
v-if="showClearTextButton"
|
v-if="showClearTextButton"
|
||||||
icon="times-circle"
|
:icon="['fas', 'times-circle']"
|
||||||
class="clearInputTextButton"
|
class="clearInputTextButton"
|
||||||
:class="{
|
:class="{
|
||||||
visible: inputDataPresent
|
visible: inputDataPresent
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{{ title }}
|
{{ title }}
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="angleDownIcon"
|
class="angleDownIcon"
|
||||||
icon="angle-down"
|
:icon="['fas', 'angle-down']"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
<div class="background" />
|
<div class="background" />
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<div>{{ videoCount }}</div>
|
<div>{{ videoCount }}</div>
|
||||||
<div><font-awesome-icon icon="list" /></div>
|
<div><font-awesome-icon :icon="['fas','list']" /></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="externalPlayer !== ''"
|
v-if="externalPlayer !== ''"
|
||||||
:title="$t('Video.External Player.OpenInTemplate').replace('$', externalPlayer)"
|
:title="$t('Video.External Player.OpenInTemplate').replace('$', externalPlayer)"
|
||||||
icon="external-link-alt"
|
:icon="['fas', 'external-link-alt']"
|
||||||
class="externalPlayerButton"
|
class="externalPlayerButton"
|
||||||
theme="base-no-default"
|
theme="base-no-default"
|
||||||
:size="16"
|
:size="16"
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="externalPlayer !== ''"
|
v-if="externalPlayer !== ''"
|
||||||
:title="$t('Video.External Player.OpenInTemplate').replace('$', externalPlayer)"
|
:title="$t('Video.External Player.OpenInTemplate').replace('$', externalPlayer)"
|
||||||
icon="external-link-alt"
|
:icon="['fas', 'external-link-alt']"
|
||||||
class="externalPlayerIcon"
|
class="externalPlayerIcon"
|
||||||
theme="base"
|
theme="base"
|
||||||
:padding="appearance === `watchPlaylistItem` ? 6 : 7"
|
:padding="appearance === `watchPlaylistItem` ? 6 : 7"
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="!isLive"
|
v-if="!isLive"
|
||||||
:title="$t('Video.Save Video')"
|
:title="$t('Video.Save Video')"
|
||||||
icon="star"
|
:icon="['fas', 'star']"
|
||||||
class="favoritesIcon"
|
class="favoritesIcon"
|
||||||
:theme="favoriteIconTheme"
|
:theme="favoriteIconTheme"
|
||||||
:padding="appearance === `watchPlaylistItem` ? 5 : 6"
|
:padding="appearance === `watchPlaylistItem` ? 5 : 6"
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
class="optionsButton"
|
class="optionsButton"
|
||||||
icon="ellipsis-v"
|
:icon="['fas', 'ellipsis-v']"
|
||||||
title="More Options"
|
title="More Options"
|
||||||
theme="base-no-default"
|
theme="base-no-default"
|
||||||
:size="16"
|
:size="16"
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</div>
|
</div>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="bannerIcon"
|
class="bannerIcon"
|
||||||
icon="times"
|
:icon="['fas', 'times']"
|
||||||
@click="handleClose"
|
@click="handleClose"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
</h3>
|
</h3>
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
class="profileSettings"
|
class="profileSettings"
|
||||||
icon="sliders-h"
|
:icon="['fas', 'sliders-h']"
|
||||||
@click="openProfileSettings"
|
@click="openProfileSettings"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="sort-down"
|
:icon="['fas', 'sort-down']"
|
||||||
class="iconSelect"
|
class="iconSelect"
|
||||||
/>
|
/>
|
||||||
<span class="select-highlight" />
|
<span class="select-highlight" />
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
ref="iconButton"
|
ref="iconButton"
|
||||||
:title="$t('Share.Share Video')"
|
:title="$t('Share.Share Video')"
|
||||||
theme="secondary"
|
theme="secondary"
|
||||||
icon="share-alt"
|
:icon="['fas', 'share-alt']"
|
||||||
dropdown-position-x="left"
|
dropdown-position-x="left"
|
||||||
:force-dropdown="true"
|
:force-dropdown="true"
|
||||||
>
|
>
|
||||||
|
@ -31,14 +31,14 @@
|
||||||
class="action"
|
class="action"
|
||||||
@click="copyYoutube()"
|
@click="copyYoutube()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="copy" />
|
<font-awesome-icon :icon="['fas', 'copy']" />
|
||||||
{{ $t("Share.Copy Link") }}
|
{{ $t("Share.Copy Link") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
<ft-button
|
<ft-button
|
||||||
class="action"
|
class="action"
|
||||||
@click="openYoutube()"
|
@click="openYoutube()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="globe" />
|
<font-awesome-icon :icon="['fas', 'globe']" />
|
||||||
{{ $t("Share.Open Link") }}
|
{{ $t("Share.Open Link") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
<ft-button
|
<ft-button
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
background-color="var(--accent-color-active)"
|
background-color="var(--accent-color-active)"
|
||||||
@click="copyYoutubeEmbed()"
|
@click="copyYoutubeEmbed()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="copy" />
|
<font-awesome-icon :icon="['fas', 'copy']" />
|
||||||
{{ $t("Share.Copy Embed") }}
|
{{ $t("Share.Copy Embed") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
<ft-button
|
<ft-button
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
background-color="var(--accent-color-active)"
|
background-color="var(--accent-color-active)"
|
||||||
@click="openYoutubeEmbed()"
|
@click="openYoutubeEmbed()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="globe" />
|
<font-awesome-icon :icon="['fas', 'globe']" />
|
||||||
{{ $t("Share.Open Embed") }}
|
{{ $t("Share.Open Embed") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -70,14 +70,14 @@
|
||||||
class="action"
|
class="action"
|
||||||
@click="copyInvidious()"
|
@click="copyInvidious()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="copy" />
|
<font-awesome-icon :icon="['fas', 'copy']" />
|
||||||
{{ $t("Share.Copy Link") }}
|
{{ $t("Share.Copy Link") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
<ft-button
|
<ft-button
|
||||||
class="action"
|
class="action"
|
||||||
@click="openInvidious()"
|
@click="openInvidious()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="globe" />
|
<font-awesome-icon :icon="['fas', 'globe']" />
|
||||||
{{ $t("Share.Open Link") }}
|
{{ $t("Share.Open Link") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
<ft-button
|
<ft-button
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
background-color="var(--accent-color-active)"
|
background-color="var(--accent-color-active)"
|
||||||
@click="copyInvidiousEmbed()"
|
@click="copyInvidiousEmbed()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="copy" />
|
<font-awesome-icon :icon="['fas', 'copy']" />
|
||||||
{{ $t("Share.Copy Embed") }}
|
{{ $t("Share.Copy Embed") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
<ft-button
|
<ft-button
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
background-color="var(--accent-color-active)"
|
background-color="var(--accent-color-active)"
|
||||||
@click="openInvidiousEmbed()"
|
@click="openInvidiousEmbed()"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="globe" />
|
<font-awesome-icon :icon="['fas', 'globe']" />
|
||||||
{{ $t("Share.Open Embed") }}
|
{{ $t("Share.Open Embed") }}
|
||||||
</ft-button>
|
</ft-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
class="button"
|
class="button"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="question-circle" />
|
<font-awesome-icon :icon="['fas', 'question-circle']" />
|
||||||
</button>
|
</button>
|
||||||
<p
|
<p
|
||||||
:id="id"
|
:id="id"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
@click="openMoreOptions = !openMoreOptions"
|
@click="openMoreOptions = !openMoreOptions"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="ellipsis-h"
|
:icon="['fas', 'ellipsis-h']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="list"
|
:icon="['fas', 'list']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
@click="navigate('trending')"
|
@click="navigate('trending')"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="fire"
|
:icon="['fas', 'fire']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
@click="navigate('popular')"
|
@click="navigate('popular')"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="users"
|
:icon="['fas', 'users']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
@click="navigate('about')"
|
@click="navigate('about')"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="info-circle"
|
:icon="['fas', 'info-circle']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
@click="navigate('history')"
|
@click="navigate('history')"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="history"
|
:icon="['fas', 'history']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
@ -118,7 +118,7 @@
|
||||||
@click="navigate('settings')"
|
@click="navigate('settings')"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="sliders-h"
|
:icon="['fas', 'sliders-h']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
@ -131,7 +131,7 @@
|
||||||
@click="navigate('about')"
|
@click="navigate('about')"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="info-circle"
|
:icon="['fas', 'info-circle']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="rss"
|
:icon="['fas', 'rss']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="list"
|
:icon="['fas', 'list']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="fire"
|
:icon="['fas', 'fire']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="users"
|
:icon="['fas', 'users']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="bookmark"
|
:icon="['fas', 'bookmark']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -149,7 +149,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="history"
|
:icon="['fas', 'history']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="sliders-h"
|
:icon="['fas', 'sliders-h']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
@ -200,7 +200,7 @@
|
||||||
class="thumbnailContainer"
|
class="thumbnailContainer"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="info-circle"
|
:icon="['fas', 'info-circle']"
|
||||||
class="navIcon"
|
class="navIcon"
|
||||||
:class="applyNavIconExpand"
|
:class="applyNavIconExpand"
|
||||||
fixed-width
|
fixed-width
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="side">
|
<div class="side">
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="menuIcon navIcon"
|
class="menuIcon navIcon"
|
||||||
icon="bars"
|
:icon="['fas', 'bars']"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
@click="toggleSideNav"
|
@click="toggleSideNav"
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
id="historyArrowBack"
|
id="historyArrowBack"
|
||||||
class="navBackIcon navIcon fa-arrow-left"
|
class="navBackIcon navIcon fa-arrow-left"
|
||||||
icon="arrow-left"
|
:icon="['fas', 'arrow-left']"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
:title="backwardText"
|
:title="backwardText"
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
id="historyArrowForward"
|
id="historyArrowForward"
|
||||||
class="navForwardIcon navIcon fa-arrow-right"
|
class="navForwardIcon navIcon fa-arrow-right"
|
||||||
icon="arrow-right"
|
:icon="['fas', 'arrow-right']"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
:title="forwardText"
|
:title="forwardText"
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
v-if="!hideSearchBar"
|
v-if="!hideSearchBar"
|
||||||
class="navSearchIcon navIcon"
|
class="navSearchIcon navIcon"
|
||||||
icon="search"
|
:icon="['fas', 'search']"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
@click="toggleSearchContainer"
|
@click="toggleSearchContainer"
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
/>
|
/>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="navNewWindowIcon navIcon"
|
class="navNewWindowIcon navIcon"
|
||||||
icon="clone"
|
:icon="['fas', 'clone']"
|
||||||
:title="newWindowText"
|
:title="newWindowText"
|
||||||
@click="createNewWindow"
|
@click="createNewWindow"
|
||||||
/>
|
/>
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
v-if="!hideSearchBar"
|
v-if="!hideSearchBar"
|
||||||
class="navFilterIcon navIcon"
|
class="navFilterIcon navIcon"
|
||||||
:class="{ filterChanged: searchFilterValueChanged }"
|
:class="{ filterChanged: searchFilterValueChanged }"
|
||||||
icon="filter"
|
:icon="['fas', 'filter']"
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
@click="showFilters = !showFilters"
|
@click="showFilters = !showFilters"
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
class="commentPinned"
|
class="commentPinned"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="thumbtack"
|
:icon="['fas', 'thumbtack']"
|
||||||
/>
|
/>
|
||||||
{{ $t("Comments.Pinned by") }} {{ channelName }}
|
{{ $t("Comments.Pinned by") }} {{ channelName }}
|
||||||
</p>
|
</p>
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
<p class="commentLikeCount">
|
<p class="commentLikeCount">
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
v-if="!hideCommentLikes"
|
v-if="!hideCommentLikes"
|
||||||
icon="thumbs-up"
|
:icon="['fas', 'thumbs-up']"
|
||||||
/>
|
/>
|
||||||
{{ comment.likes }}
|
{{ comment.likes }}
|
||||||
<span
|
<span
|
||||||
|
@ -100,11 +100,11 @@
|
||||||
class="commentHeartBadgeImg"
|
class="commentHeartBadgeImg"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="heart"
|
:icon="['fas', 'heart']"
|
||||||
class="commentHeartBadgeWhite"
|
class="commentHeartBadgeWhite"
|
||||||
/>
|
/>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="heart"
|
:icon="['fas', 'heart']"
|
||||||
class="commentHeartBadgeRed"
|
class="commentHeartBadgeRed"
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
<p class="commentLikeCount">
|
<p class="commentLikeCount">
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
v-if="!hideCommentLikes"
|
v-if="!hideCommentLikes"
|
||||||
icon="thumbs-up"
|
:icon="['fas', 'thumbs-up']"
|
||||||
/>
|
/>
|
||||||
{{ reply.likes }}
|
{{ reply.likes }}
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
class="likeSection"
|
class="likeSection"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<span class="likeCount"><font-awesome-icon icon="thumbs-up" /> {{ parsedLikeCount }}</span>
|
<span class="likeCount"><font-awesome-icon :icon="['fas', 'thumbs-up']" /> {{ parsedLikeCount }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -71,8 +71,8 @@
|
||||||
:style="{ background: `linear-gradient(to right, var(--accent-color) ${likePercentageRatio}%, #9E9E9E ${likePercentageRatio}%` }"
|
:style="{ background: `linear-gradient(to right, var(--accent-color) ${likePercentageRatio}%, #9E9E9E ${likePercentageRatio}%` }"
|
||||||
/>
|
/>
|
||||||
<div>
|
<div>
|
||||||
<span class="likeCount"><font-awesome-icon icon="thumbs-up" /> {{ parsedLikeCount }}</span>
|
<span class="likeCount"><font-awesome-icon :icon="['fas', 'thumbs-up']" /> {{ parsedLikeCount }}</span>
|
||||||
<span class="dislikeCount"><font-awesome-icon icon="thumbs-down" /> {{ parsedDislikeCount }}</span>
|
<span class="dislikeCount"><font-awesome-icon :icon="['fas', 'thumbs-down']" /> {{ parsedDislikeCount }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="!isUpcoming"
|
v-if="!isUpcoming"
|
||||||
:title="$t('Video.Save Video')"
|
:title="$t('Video.Save Video')"
|
||||||
icon="star"
|
:icon="['fas', 'star']"
|
||||||
class="option"
|
class="option"
|
||||||
:theme="favoriteIconTheme"
|
:theme="favoriteIconTheme"
|
||||||
@click="toggleSave"
|
@click="toggleSave"
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="externalPlayer !== ''"
|
v-if="externalPlayer !== ''"
|
||||||
:title="$t('Video.External Player.OpenInTemplate').replace('$', externalPlayer)"
|
:title="$t('Video.External Player.OpenInTemplate').replace('$', externalPlayer)"
|
||||||
icon="external-link-alt"
|
:icon="['fas', 'external-link-alt']"
|
||||||
class="option"
|
class="option"
|
||||||
theme="secondary"
|
theme="secondary"
|
||||||
@click="handleExternalPlayer"
|
@click="handleExternalPlayer"
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
:title="$t('Video.Download Video')"
|
:title="$t('Video.Download Video')"
|
||||||
class="option"
|
class="option"
|
||||||
theme="secondary"
|
theme="secondary"
|
||||||
icon="download"
|
:icon="['fas', 'download']"
|
||||||
:return-index="true"
|
:return-index="true"
|
||||||
:dropdown-options="downloadLinkOptions"
|
:dropdown-options="downloadLinkOptions"
|
||||||
@click="handleDownload"
|
@click="handleDownload"
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
:title="$t('Change Format.Change Media Formats')"
|
:title="$t('Change Format.Change Media Formats')"
|
||||||
class="option"
|
class="option"
|
||||||
theme="secondary"
|
theme="secondary"
|
||||||
icon="file-video"
|
:icon="['fas', 'file-video']"
|
||||||
:dropdown-options="formatTypeOptions"
|
:dropdown-options="formatTypeOptions"
|
||||||
@click="handleFormatChange"
|
@click="handleFormatChange"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
{{ errorMessage }}
|
{{ errorMessage }}
|
||||||
</p>
|
</p>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="exclamation-circle"
|
:icon="['fas', 'exclamation-circle']"
|
||||||
class="errorIcon"
|
class="errorIcon"
|
||||||
/>
|
/>
|
||||||
<ft-button
|
<ft-button
|
||||||
|
@ -190,7 +190,7 @@
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="icon"
|
class="icon"
|
||||||
icon="arrow-down"
|
:icon="['fas', 'arrow-down']"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -33,33 +33,33 @@
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="playlistIcon"
|
class="playlistIcon"
|
||||||
:class="{ playlistIconActive: loopEnabled }"
|
:class="{ playlistIconActive: loopEnabled }"
|
||||||
icon="retweet"
|
:icon="['fas', 'retweet']"
|
||||||
:title="$t('Video.Loop Playlist')"
|
:title="$t('Video.Loop Playlist')"
|
||||||
@click="toggleLoop"
|
@click="toggleLoop"
|
||||||
/>
|
/>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="playlistIcon"
|
class="playlistIcon"
|
||||||
:class="{ playlistIconActive: shuffleEnabled }"
|
:class="{ playlistIconActive: shuffleEnabled }"
|
||||||
icon="random"
|
:icon="['fas', 'random']"
|
||||||
:title="$t('Video.Shuffle Playlist')"
|
:title="$t('Video.Shuffle Playlist')"
|
||||||
@click="toggleShuffle"
|
@click="toggleShuffle"
|
||||||
/>
|
/>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="playlistIcon"
|
class="playlistIcon"
|
||||||
:class="{ playlistIconActive: reversePlaylist }"
|
:class="{ playlistIconActive: reversePlaylist }"
|
||||||
icon="exchange-alt"
|
:icon="['fas', 'exchange-alt']"
|
||||||
:title="$t('Video.Reverse Playlist')"
|
:title="$t('Video.Reverse Playlist')"
|
||||||
@click="toggleReversePlaylist"
|
@click="toggleReversePlaylist"
|
||||||
/>
|
/>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="playlistIcon"
|
class="playlistIcon"
|
||||||
icon="step-backward"
|
:icon="['fas', 'step-backward']"
|
||||||
:title="$t('Video.Play Previous Video')"
|
:title="$t('Video.Play Previous Video')"
|
||||||
@click="playPreviousVideo"
|
@click="playPreviousVideo"
|
||||||
/>
|
/>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
class="playlistIcon"
|
class="playlistIcon"
|
||||||
icon="step-forward"
|
:icon="['fas', 'step-forward']"
|
||||||
:title="$t('Video.Play Next Video')"
|
:title="$t('Video.Play Next Video')"
|
||||||
@click="playNextVideo"
|
@click="playNextVideo"
|
||||||
/>
|
/>
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
v-if="currentVideoIndex === (index + 1)"
|
v-if="currentVideoIndex === (index + 1)"
|
||||||
class="videoIndexIcon"
|
class="videoIndexIcon"
|
||||||
icon="play"
|
:icon="['fas', 'play']"
|
||||||
/>
|
/>
|
||||||
<p
|
<p
|
||||||
v-else
|
v-else
|
||||||
|
|
|
@ -5,7 +5,55 @@ import router from './router/index'
|
||||||
import store from './store/index'
|
import store from './store/index'
|
||||||
import i18n from './i18n/index'
|
import i18n from './i18n/index'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { fas } from '@fortawesome/free-solid-svg-icons'
|
import {
|
||||||
|
faAngleDown,
|
||||||
|
faArrowDown,
|
||||||
|
faArrowLeft,
|
||||||
|
faArrowRight,
|
||||||
|
faBars,
|
||||||
|
faBookmark,
|
||||||
|
faCheck,
|
||||||
|
faClone,
|
||||||
|
faCommentDots,
|
||||||
|
faCopy,
|
||||||
|
faDownload,
|
||||||
|
faEllipsisH,
|
||||||
|
faEllipsisV,
|
||||||
|
faEnvelope,
|
||||||
|
faExchangeAlt,
|
||||||
|
faExclamationCircle,
|
||||||
|
faExternalLinkAlt,
|
||||||
|
faFileDownload,
|
||||||
|
faFileVideo,
|
||||||
|
faFilter,
|
||||||
|
faFire,
|
||||||
|
faGlobe,
|
||||||
|
faHeart,
|
||||||
|
faHistory,
|
||||||
|
faInfoCircle,
|
||||||
|
faLanguage,
|
||||||
|
faList,
|
||||||
|
faNewspaper,
|
||||||
|
faPlay,
|
||||||
|
faQuestionCircle,
|
||||||
|
faRandom,
|
||||||
|
faRetweet,
|
||||||
|
faRss,
|
||||||
|
faSatelliteDish,
|
||||||
|
faSearch,
|
||||||
|
faShareAlt,
|
||||||
|
faSlidersH,
|
||||||
|
faSortDown,
|
||||||
|
faStar,
|
||||||
|
faStepBackward,
|
||||||
|
faStepForward,
|
||||||
|
faSync,
|
||||||
|
faThumbsUp,
|
||||||
|
faThumbtack,
|
||||||
|
faTimes,
|
||||||
|
faTimesCircle,
|
||||||
|
faUsers
|
||||||
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { faGithub } from '@fortawesome/free-brands-svg-icons/faGithub'
|
import { faGithub } from '@fortawesome/free-brands-svg-icons/faGithub'
|
||||||
import { faBitcoin } from '@fortawesome/free-brands-svg-icons/faBitcoin'
|
import { faBitcoin } from '@fortawesome/free-brands-svg-icons/faBitcoin'
|
||||||
import { faMonero } from '@fortawesome/free-brands-svg-icons/faMonero'
|
import { faMonero } from '@fortawesome/free-brands-svg-icons/faMonero'
|
||||||
|
@ -18,7 +66,62 @@ Vue.config.devtools = isDev
|
||||||
Vue.config.performance = isDev
|
Vue.config.performance = isDev
|
||||||
Vue.config.productionTip = isDev
|
Vue.config.productionTip = isDev
|
||||||
|
|
||||||
library.add(fas, faGithub, faBitcoin, faMonero, faMastodon)
|
library.add(
|
||||||
|
// solid icons
|
||||||
|
faAngleDown,
|
||||||
|
faArrowDown,
|
||||||
|
faArrowLeft,
|
||||||
|
faArrowRight,
|
||||||
|
faBars,
|
||||||
|
faBookmark,
|
||||||
|
faCheck,
|
||||||
|
faClone,
|
||||||
|
faCommentDots,
|
||||||
|
faCopy,
|
||||||
|
faDownload,
|
||||||
|
faEllipsisH,
|
||||||
|
faEllipsisV,
|
||||||
|
faEnvelope,
|
||||||
|
faExchangeAlt,
|
||||||
|
faExclamationCircle,
|
||||||
|
faExternalLinkAlt,
|
||||||
|
faFileDownload,
|
||||||
|
faFileVideo,
|
||||||
|
faFilter,
|
||||||
|
faFire,
|
||||||
|
faGlobe,
|
||||||
|
faHeart,
|
||||||
|
faHistory,
|
||||||
|
faInfoCircle,
|
||||||
|
faLanguage,
|
||||||
|
faList,
|
||||||
|
faNewspaper,
|
||||||
|
faPlay,
|
||||||
|
faQuestionCircle,
|
||||||
|
faRandom,
|
||||||
|
faRetweet,
|
||||||
|
faRss,
|
||||||
|
faSatelliteDish,
|
||||||
|
faSearch,
|
||||||
|
faShareAlt,
|
||||||
|
faSlidersH,
|
||||||
|
faSortDown,
|
||||||
|
faStar,
|
||||||
|
faStepBackward,
|
||||||
|
faStepForward,
|
||||||
|
faSync,
|
||||||
|
faThumbsUp,
|
||||||
|
faThumbtack,
|
||||||
|
faTimes,
|
||||||
|
faTimesCircle,
|
||||||
|
faUsers,
|
||||||
|
|
||||||
|
// brand icons
|
||||||
|
faGithub,
|
||||||
|
faBitcoin,
|
||||||
|
faMastodon,
|
||||||
|
faMonero
|
||||||
|
)
|
||||||
|
|
||||||
Vue.component('FontAwesomeIcon', FontAwesomeIcon)
|
Vue.component('FontAwesomeIcon', FontAwesomeIcon)
|
||||||
|
|
||||||
|
|
|
@ -22,32 +22,32 @@ export default Vue.extend({
|
||||||
content: `<a href="https://github.com/FreeTubeApp/FreeTube">GitHub: FreeTubeApp/FreeTube</a><br>${this.$t('About.Licensed under the AGPLv3')} <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">${this.$t('About.View License')}</a>`
|
content: `<a href="https://github.com/FreeTubeApp/FreeTube">GitHub: FreeTubeApp/FreeTube</a><br>${this.$t('About.Licensed under the AGPLv3')} <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">${this.$t('About.View License')}</a>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'file-download',
|
icon: ['fas', 'file-download'],
|
||||||
title: this.$t('About.Downloads / Changelog'),
|
title: this.$t('About.Downloads / Changelog'),
|
||||||
content: `<a href="https://github.com/FreeTubeApp/FreeTube/releases">${this.$t('About.GitHub releases')}</a>`
|
content: `<a href="https://github.com/FreeTubeApp/FreeTube/releases">${this.$t('About.GitHub releases')}</a>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'question-circle',
|
icon: ['fas', 'question-circle'],
|
||||||
title: this.$t('About.Help'),
|
title: this.$t('About.Help'),
|
||||||
content: `<a href="https://docs.freetubeapp.io/">${this.$t('About.FreeTube Wiki')}</a> / <a href="https://docs.freetubeapp.io/faq/">${this.$t('About.FAQ')}</a>`
|
content: `<a href="https://docs.freetubeapp.io/">${this.$t('About.FreeTube Wiki')}</a> / <a href="https://docs.freetubeapp.io/faq/">${this.$t('About.FAQ')}</a>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'exclamation-circle',
|
icon: ['fas', 'exclamation-circle'],
|
||||||
title: this.$t('About.Report a problem'),
|
title: this.$t('About.Report a problem'),
|
||||||
content: `<a href="https://github.com/FreeTubeApp/FreeTube/issues">${this.$t('About.GitHub issues')}</a><br>${this.$t('About.Please check for duplicates before posting')}`
|
content: `<a href="https://github.com/FreeTubeApp/FreeTube/issues">${this.$t('About.GitHub issues')}</a><br>${this.$t('About.Please check for duplicates before posting')}`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'globe',
|
icon: ['fas', 'globe'],
|
||||||
title: this.$t('About.Website'),
|
title: this.$t('About.Website'),
|
||||||
content: '<a href="https://freetubeapp.io/">https://freetubeapp.io/</a>'
|
content: '<a href="https://freetubeapp.io/">https://freetubeapp.io/</a>'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'newspaper',
|
icon: ['fas', 'newspaper'],
|
||||||
title: this.$t('About.Blog'),
|
title: this.$t('About.Blog'),
|
||||||
content: '<a href="https://blog.freetubeapp.io">https://blog.freetubeapp.io</a>'
|
content: '<a href="https://blog.freetubeapp.io">https://blog.freetubeapp.io</a>'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'envelope',
|
icon: ['fas', 'envelope'],
|
||||||
title: this.$t('About.Email'),
|
title: this.$t('About.Email'),
|
||||||
content: '<a href="mailto:FreeTubeApp@protonmail.com">FreeTubeApp@protonmail.com</a>'
|
content: '<a href="mailto:FreeTubeApp@protonmail.com">FreeTubeApp@protonmail.com</a>'
|
||||||
},
|
},
|
||||||
|
@ -57,22 +57,22 @@ export default Vue.extend({
|
||||||
content: '<a href="https://mastodon.technology/@FreeTube">@FreeTube@mastodon.technology</a>'
|
content: '<a href="https://mastodon.technology/@FreeTube">@FreeTube@mastodon.technology</a>'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'comment-dots',
|
icon: ['fas', 'comment-dots'],
|
||||||
title: this.$t('About.Chat on Matrix'),
|
title: this.$t('About.Chat on Matrix'),
|
||||||
content: `<a href="https://matrix.to/#/#freetube:matrix.org?via=matrix.org&via=privacytools.io&via=tchncs.de">#freetube:matrix.org</a><br>${this.$t('About.Please read the')} <a href="https://docs.freetubeapp.io/community/matrix/">${this.$t('About.room rules')}</a>`
|
content: `<a href="https://matrix.to/#/#freetube:matrix.org?via=matrix.org&via=privacytools.io&via=tchncs.de">#freetube:matrix.org</a><br>${this.$t('About.Please read the')} <a href="https://docs.freetubeapp.io/community/matrix/">${this.$t('About.room rules')}</a>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'language',
|
icon: ['fas', 'language'],
|
||||||
title: this.$t('About.Translate'),
|
title: this.$t('About.Translate'),
|
||||||
content: '<a href="https://hosted.weblate.org/engage/free-tube/">https://hosted.weblate.org/engage/free-tube/</a>'
|
content: '<a href="https://hosted.weblate.org/engage/free-tube/">https://hosted.weblate.org/engage/free-tube/</a>'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'users',
|
icon: ['fas', 'users'],
|
||||||
title: this.$t('About.Credits'),
|
title: this.$t('About.Credits'),
|
||||||
content: `${this.$t('About.FreeTube is made possible by')} <a href="https://docs.freetubeapp.io/credits/">${this.$t('About.these people and projects')}</a>`
|
content: `${this.$t('About.FreeTube is made possible by')} <a href="https://docs.freetubeapp.io/credits/">${this.$t('About.these people and projects')}</a>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: 'heart',
|
icon: ['fas', 'heart'],
|
||||||
title: `${this.$t('About.Donate')} - Liberapay`,
|
title: `${this.$t('About.Donate')} - Liberapay`,
|
||||||
content: '<a href="https://liberapay.com/FreeTube">https://liberapay.com/FreeTube</a>'
|
content: '<a href="https://liberapay.com/FreeTube">https://liberapay.com/FreeTube</a>'
|
||||||
},
|
},
|
||||||
|
|
|
@ -192,7 +192,7 @@
|
||||||
class="getNextPage"
|
class="getNextPage"
|
||||||
@click="handleFetchMore"
|
@click="handleFetchMore"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="search" /> {{ $t("Search Filters.Fetch more results") }}
|
<font-awesome-icon :icon="['fas', 'search']" /> {{ $t("Search Filters.Fetch more results") }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ft-card>
|
</ft-card>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</ft-card>
|
</ft-card>
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="!isLoading"
|
v-if="!isLoading"
|
||||||
icon="sync"
|
:icon="['fas', 'sync']"
|
||||||
class="floatingTopButton"
|
class="floatingTopButton"
|
||||||
:size="12"
|
:size="12"
|
||||||
theme="primary"
|
theme="primary"
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
class="getNextPage"
|
class="getNextPage"
|
||||||
@click="nextPage"
|
@click="nextPage"
|
||||||
>
|
>
|
||||||
<font-awesome-icon icon="search" /> {{ $t("Search Filters.Fetch more results") }}
|
<font-awesome-icon :icon="['fas', 'search']" /> {{ $t("Search Filters.Fetch more results") }}
|
||||||
</div>
|
</div>
|
||||||
</ft-card>
|
</ft-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
</ft-card>
|
</ft-card>
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="!isLoading"
|
v-if="!isLoading"
|
||||||
icon="sync"
|
:icon="['fas', 'sync']"
|
||||||
class="floatingTopButton"
|
class="floatingTopButton"
|
||||||
:title="$t('Subscriptions.Refresh Subscriptions')"
|
:title="$t('Subscriptions.Refresh Subscriptions')"
|
||||||
:size="12"
|
:size="12"
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
</ft-card>
|
</ft-card>
|
||||||
<ft-icon-button
|
<ft-icon-button
|
||||||
v-if="!isLoading"
|
v-if="!isLoading"
|
||||||
icon="sync"
|
:icon="['fas', 'sync']"
|
||||||
class="floatingTopButton"
|
class="floatingTopButton"
|
||||||
:size="12"
|
:size="12"
|
||||||
theme="primary"
|
theme="primary"
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
class="premiereDate"
|
class="premiereDate"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
icon="satellite-dish"
|
:icon="['fas', 'satellite-dish']"
|
||||||
class="premiereIcon"
|
class="premiereIcon"
|
||||||
/>
|
/>
|
||||||
<p
|
<p
|
||||||
|
|
Loading…
Reference in New Issue