Merge branch 'development' into piped-support
|
@ -80,26 +80,27 @@ body:
|
|||
- type: dropdown
|
||||
attributes:
|
||||
label: Installation Method
|
||||
description: When you select an unofficial installation method, you must have verified that the bug is also present in one of the official installation methods. Please make sure you uninstall the unofficial installation before installing one of the official installations. If you can't reproduce this in one of the official installation methods, you should report the bug to the maintainer of the unofficial installation method you used.
|
||||
options:
|
||||
- .apk (Alpine Linux Package)
|
||||
- .apk (Android, FreeTubeCordova)
|
||||
- .AppImage
|
||||
- AUR
|
||||
- Chocolatey
|
||||
- .deb
|
||||
- .dmg
|
||||
- .exe
|
||||
- Flathub
|
||||
- MPR
|
||||
- Nix
|
||||
- .pacman
|
||||
- Portable
|
||||
- PortableApps
|
||||
- .rpm
|
||||
- Scoop
|
||||
- Snapcraft
|
||||
- winget
|
||||
- .rpm
|
||||
- .zip
|
||||
- .apk (Android, FreeTubeCordova Unofficial)
|
||||
- AUR (Unofficial)
|
||||
- Chocolatey (Unofficial)
|
||||
- MPR (Unofficial)
|
||||
- Nix (Unofficial)
|
||||
- PortableApps (Unofficial)
|
||||
- Scoop (Unofficial)
|
||||
- Snapcraft (Unofficial)
|
||||
- winget (Unofficial)
|
||||
- other
|
||||
validations:
|
||||
required: true
|
||||
|
|
|
@ -8,6 +8,27 @@ updates:
|
|||
- "PR: waiting for review"
|
||||
- "PR: dependencies"
|
||||
open-pull-requests-limit: 15
|
||||
groups:
|
||||
babel:
|
||||
patterns:
|
||||
- "@babel/*"
|
||||
- "babel-*"
|
||||
eslint:
|
||||
patterns:
|
||||
- "eslint"
|
||||
- "eslint-*"
|
||||
- "yaml-eslint-parser"
|
||||
- "vue-eslint-parser"
|
||||
stylelint:
|
||||
patterns:
|
||||
- "stylelint"
|
||||
- "stylelint-*"
|
||||
- "postcss"
|
||||
- "postcss-*"
|
||||
- "@double-great/stylelint-a11y"
|
||||
fortawesome:
|
||||
patterns:
|
||||
- "@fortawesome/*"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
- '(visual bug)'
|
||||
|
||||
'B: Unofficial Download':
|
||||
- '(AUR|Chocolatey|FreeTubeCordova|PortableApps|winget|Scoop|Snapcraft|MPR|Nix)'
|
||||
- '(AUR \(Unofficial\)|Chocolatey \(Unofficial\)|\.apk \(Android, FreeTubeCordova Unofficial\)|PortableApps \(Unofficial\)|winget \(Unofficial\)|Scoop \(Unofficial\)|Snapcraft \(Unofficial\)|MPR \(Unofficial\)|Nix \(Unofficial\))'
|
||||
|
||||
'B: keyboard control':
|
||||
- '(keyboard control not working)'
|
||||
|
|
|
@ -48,7 +48,7 @@ jobs:
|
|||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
|
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repo
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Compress Images
|
||||
id: calibre
|
||||
uses: calibreapp/image-actions@main
|
||||
|
|
|
@ -27,7 +27,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
|
|
|
@ -15,7 +15,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: flathub/io.freetubeapp.FreeTube
|
||||
token: ${{ secrets.FLATHUB_TOKEN }}
|
||||
|
@ -103,7 +103,7 @@ jobs:
|
|||
rm freetube-${{ steps.sub.outputs.result }}-linux-portable-x64.zip
|
||||
rm freetube-${{ steps.sub.outputs.result }}-linux-portable-arm64.zip
|
||||
- name: Commit Files
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
# Optional but recommended
|
||||
# Defaults to "Apply automatic changes"
|
||||
|
|
|
@ -17,7 +17,7 @@ jobs:
|
|||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js 18.x
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
|
|
|
@ -48,7 +48,7 @@ jobs:
|
|||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
"plugins": ["stylelint-high-performance-animation", "@double-great/stylelint-a11y"],
|
||||
"extends": ["stylelint-config-standard", "stylelint-config-sass-guidelines"],
|
||||
"plugins": ["stylelint-use-logical-spec"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["**/*.scss"],
|
||||
|
@ -17,17 +16,6 @@
|
|||
}
|
||||
],
|
||||
"rules": {
|
||||
"selector-class-pattern": null,
|
||||
"selector-id-pattern": null,
|
||||
"plugin/no-low-performance-animation-properties": null,
|
||||
"selector-pseudo-class-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignorePseudoClasses": ["deep"]
|
||||
}
|
||||
],
|
||||
"a11y/no-outline-none": true,
|
||||
"a11y/selector-pseudo-class-focus": true,
|
||||
"a11y/font-size-is-readable": true
|
||||
"liberty/use-logical-spec": ["always", { "except": ["float"] }]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "dev-runner (Electron)",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/_scripts/dev-runner.js",
|
||||
"args": ["--remote-debug"]
|
||||
},
|
||||
{
|
||||
"name": "Attach to renderer process (Electron)",
|
||||
"type": "chrome",
|
||||
"request": "attach",
|
||||
"port": 9223,
|
||||
"webRoot": "http://localhost:9080",
|
||||
"sourceMapPathOverrides": {
|
||||
"webpack://freetube/./~/*": "${workspaceFolder}/node_modules/*",
|
||||
"webpack://freetube/./*": "${workspaceFolder}/*"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "dev",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "dev-runner",
|
||||
"problemMatcher": [],
|
||||
"label": "npm: dev-runner",
|
||||
"detail": "node _scripts/dev-runner.js"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -20,7 +20,7 @@ Please follow these guidelines before sending your pull request and making contr
|
|||
* Please test your code. Make sure new features work as well as existing core features such as watching videos or loading subscriptions. New features need to work with both the Local API as well as the Invidious API
|
||||
* Please make sure your code does not violate any standards set by our linter. It's up to you to make fixes whenever necessary. You can run `npm run lint` to check locally and `npm run lint-fix` to automatically fix smaller issues.
|
||||
* Please limit the amount of Node Modules that you introduce into the project. Only include them when **absolutely necessary** for your code to work (Ex: Using nedb for databases) or if a module provides similar functionality to what you are trying to achieve (Ex: Using autolinker to create links to outside URLs instead of writing the functionality myself).
|
||||
* Please try to stay involved with the community and maintain your code. We are only two developers working on FreeTube in our spare time. We do not have time to work on everything, and it would be nice if you can maintain your code when necessary.
|
||||
* Please try to stay involved with the community and maintain your code. We are only a handful of developers working on FreeTube in our spare time. We do not have time to work on everything, and it would be nice if you can maintain your code when necessary.
|
||||
|
||||
# Setting up Your Environment
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ These builds are maintained by the community. While they should be safe, downloa
|
|||
|
||||
* Scoop (Windows Only): [Usage](https://github.com/ScoopInstaller/Scoop)
|
||||
|
||||
* Snap: [Download](https://snapcraft.io/freetube-snap) and [Source Code](https://launchpad.net/freetube)
|
||||
* Snap: [Download](https://snapcraft.io/freetube) and [Source Code](https://git.launchpad.net/freetube)
|
||||
|
||||
* Windows Package Manager (winget): [Usage](https://docs.microsoft.com/en-us/windows/package-manager/winget/)
|
||||
|
||||
|
|
After Width: | Height: | Size: 6.5 KiB |
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 250 250" style="enable-background:new 0 0 250 250;" xml:space="preserve">
|
||||
<image style="overflow:visible;" width="250" height="250" xlink:href="data:image/png;base64,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
|
||||
rzF0qX3/GQAny0sokdEcawAAAABJRU5ErkJggg==">
|
||||
</image>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
|
@ -0,0 +1,95 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 250 250" style="enable-background:new 0 0 250 250;" xml:space="preserve">
|
||||
<image style="overflow:visible;" width="250" height="250" xlink:href="data:image/png;base64,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
|
||||
GrcAAAAASUVORK5CYII=">
|
||||
</image>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 287 B |
|
@ -0,0 +1,193 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 640 200" style="enable-background:new 0 0 640 200;" xml:space="preserve">
|
||||
<title>logotype</title>
|
||||
<image style="overflow:visible;enable-background:new ;" width="640" height="200" xlink:href="data:image/png;base64,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
|
||||
6f8GADXlP8HENmbQAAAAAElFTkSuQmCC">
|
||||
</image>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,224 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 640 200" style="enable-background:new 0 0 640 200;" xml:space="preserve">
|
||||
<image style="overflow:visible;" width="640" height="200" xlink:href="data:image/png;base64,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">
|
||||
</image>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,210 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 640 200" style="enable-background:new 0 0 640 200;" xml:space="preserve">
|
||||
<image style="overflow:visible;" width="640" height="200" xlink:href="data:image/png;base64,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
|
||||
eCf/1QtASOkAAAAASUVORK5CYII=">
|
||||
</image>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -3,13 +3,18 @@
|
|||
pre-commit:
|
||||
parallel: true
|
||||
commands:
|
||||
lint:
|
||||
eslint:
|
||||
# Only runs when any file with filename
|
||||
# matching the glob is being committed
|
||||
glob: "*.{js,vue}"
|
||||
run: yarn run eslint --no-color {staged_files}
|
||||
skip:
|
||||
- rebase
|
||||
stylelint:
|
||||
glob: "*.{css,scss}"
|
||||
run: yarn stylelint --no-color --allow-empty-input {staged_files}
|
||||
skip:
|
||||
- rebase
|
||||
|
||||
# EXAMPLE USAGE
|
||||
#
|
||||
|
|
62
package.json
|
@ -2,7 +2,7 @@
|
|||
"name": "freetube",
|
||||
"productName": "FreeTube",
|
||||
"description": "A private YouTube client",
|
||||
"version": "0.19.0",
|
||||
"version": "0.19.1",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"main": "./dist/main.js",
|
||||
"private": true,
|
||||
|
@ -33,15 +33,14 @@
|
|||
"dev-runner": "node _scripts/dev-runner.js",
|
||||
"get-instances": "node _scripts/getInstances.js",
|
||||
"get-regions": "node _scripts/getRegions.mjs",
|
||||
"lint-all": "run-p lint lint-json lint-style",
|
||||
"lint-fix": "eslint --fix --ext .js,.vue ./",
|
||||
"lint": "eslint --ext .js,.vue ./",
|
||||
"lint-all": "run-p lint lint-json",
|
||||
"lint": "run-p eslint-lint lint-style",
|
||||
"lint-fix": "run-p eslint-lint-fix lint-style-fix",
|
||||
"eslint-lint": "eslint --ext .js,.vue ./",
|
||||
"eslint-lint-fix": "eslint --fix --ext .js,.vue ./",
|
||||
"lint-json": "eslint --ext .json ./",
|
||||
"lint-style": "run-p lint-style:scss lint-style:css",
|
||||
"lint-style:scss": "stylelint \"**/*.scss\"",
|
||||
"lint-style:css": "stylelint \"**/*.css\"",
|
||||
"lint-style-fix:scss": "stylelint --fix \"**/*.scss\"",
|
||||
"lint-style-fix:css": "stylelint --fix \"**/*.css\"",
|
||||
"lint-style": "stylelint \"**/*.{css,scss}\"",
|
||||
"lint-style-fix": "stylelint --fix \"**/*.{css,scss}\"",
|
||||
"lint-yml": "eslint --ext .yml,.yaml ./",
|
||||
"pack": "run-p pack:main pack:renderer",
|
||||
"pack:main": "webpack --mode=production --node-env=production --config _scripts/webpack.main.config.js",
|
||||
|
@ -63,68 +62,69 @@
|
|||
"autolinker": "^4.0.0",
|
||||
"electron-context-menu": "^3.6.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"marked": "^7.0.5",
|
||||
"marked": "^9.1.2",
|
||||
"path-browserify": "^1.0.1",
|
||||
"process": "^0.11.10",
|
||||
"stylelint-use-logical-spec": "^5.0.0",
|
||||
"video.js": "7.21.5",
|
||||
"videojs-contrib-quality-levels": "^3.0.0",
|
||||
"videojs-http-source-selector": "^1.1.6",
|
||||
"videojs-mobile-ui": "^0.8.0",
|
||||
"videojs-overlay": "^3.1.0",
|
||||
"videojs-vtt-thumbnails-freetube": "0.0.15",
|
||||
"vue": "^2.7.14",
|
||||
"vue": "^2.7.15",
|
||||
"vue-i18n": "^8.28.2",
|
||||
"vue-observe-visibility": "^1.0.0",
|
||||
"vue-router": "^3.6.5",
|
||||
"vue-tiny-slider": "^0.1.39",
|
||||
"vuex": "^3.6.2",
|
||||
"youtubei.js": "^6.1.0"
|
||||
"youtubei.js": "^6.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.22.11",
|
||||
"@babel/eslint-parser": "^7.22.11",
|
||||
"@babel/core": "^7.23.2",
|
||||
"@babel/eslint-parser": "^7.22.15",
|
||||
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
||||
"@babel/preset-env": "^7.22.10",
|
||||
"@babel/preset-env": "^7.23.2",
|
||||
"@double-great/stylelint-a11y": "^2.0.2",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"css-loader": "^6.8.1",
|
||||
"css-minimizer-webpack-plugin": "^5.0.1",
|
||||
"electron": "^22.3.18",
|
||||
"electron-builder": "^24.6.3",
|
||||
"eslint": "^8.48.0",
|
||||
"electron": "^27.0.2",
|
||||
"electron-builder": "^24.6.4",
|
||||
"eslint": "^8.52.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-plugin-import": "^2.28.1",
|
||||
"eslint-plugin-jsonc": "^2.9.0",
|
||||
"eslint-plugin-n": "^16.0.2",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-import": "^2.29.0",
|
||||
"eslint-plugin-jsonc": "^2.10.0",
|
||||
"eslint-plugin-n": "^16.2.0",
|
||||
"eslint-plugin-prettier": "^5.0.1",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-unicorn": "^48.0.1",
|
||||
"eslint-plugin-vue": "^9.17.0",
|
||||
"eslint-plugin-vuejs-accessibility": "^2.2.0",
|
||||
"eslint-plugin-yml": "^1.8.0",
|
||||
"eslint-plugin-yml": "^1.10.0",
|
||||
"html-webpack-plugin": "^5.5.3",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-minimizer-webpack-plugin": "^4.0.0",
|
||||
"lefthook": "^1.4.9",
|
||||
"lefthook": "^1.5.2",
|
||||
"mini-css-extract-plugin": "^2.7.6",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss": "^8.4.26",
|
||||
"postcss-scss": "^4.0.7",
|
||||
"postcss": "^8.4.31",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"prettier": "^2.8.8",
|
||||
"rimraf": "^5.0.1",
|
||||
"sass": "^1.66.1",
|
||||
"rimraf": "^5.0.5",
|
||||
"sass": "^1.69.4",
|
||||
"sass-loader": "^13.3.2",
|
||||
"stylelint": "^15.10.3",
|
||||
"stylelint": "^15.11.0",
|
||||
"stylelint-config-sass-guidelines": "^10.0.0",
|
||||
"stylelint-config-standard": "^34.0.0",
|
||||
"stylelint-high-performance-animation": "^1.9.0",
|
||||
"tree-kill": "1.2.2",
|
||||
"vue-devtools": "^5.1.4",
|
||||
"vue-eslint-parser": "^9.3.1",
|
||||
"vue-eslint-parser": "^9.3.2",
|
||||
"vue-loader": "^15.10.0",
|
||||
"webpack": "^5.88.2",
|
||||
"webpack": "^5.89.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^4.15.1",
|
||||
"yaml-eslint-parser": "^1.2.2"
|
||||
|
|
|
@ -171,7 +171,7 @@ function runApp() {
|
|||
app.commandLine.appendSwitch('ignore-gpu-blacklist')
|
||||
|
||||
// command line switches need to be added before the app ready event first
|
||||
// that means we can't use the normal settings system as that is asynchonous,
|
||||
// that means we can't use the normal settings system as that is asynchronous,
|
||||
// doing it synchronously ensures that we add it before the event fires
|
||||
const replaceHttpCache = existsSync(`${app.getPath('userData')}/experiment-replace-http-cache`)
|
||||
if (replaceHttpCache) {
|
||||
|
@ -285,6 +285,13 @@ function runApp() {
|
|||
})
|
||||
})
|
||||
|
||||
session.defaultSession.cookies.set({
|
||||
url: 'https://www.youtube.com',
|
||||
name: 'SOCS',
|
||||
value: 'CAI',
|
||||
sameSite: 'no_restriction',
|
||||
})
|
||||
|
||||
// make InnerTube requests work with the fetch function
|
||||
// InnerTube rejects requests if the referer isn't YouTube or empty
|
||||
const innertubeAndMediaRequestFilter = { urls: ['https://www.youtube.com/youtubei/*', 'https://*.googlevideo.com/videoplayback?*'] }
|
||||
|
@ -304,7 +311,7 @@ function runApp() {
|
|||
// For the DASH formats we are fine as video.js doesn't seem to ever request chunks that big.
|
||||
// The legacy formats don't have any chunk size limits.
|
||||
// For the audio formats we need to handle it ourselves, as the browser requests the entire audio file,
|
||||
// which means that for most videos that are loger than 10 mins, we get throttled, as the audio track file sizes surpass that 10MiB limit.
|
||||
// which means that for most videos that are longer than 10 mins, we get throttled, as the audio track file sizes surpass that 10MiB limit.
|
||||
|
||||
// This code checks if the file is larger than the limit, by checking the `clen` query param,
|
||||
// which YouTube helpfully populates with the content length for us.
|
||||
|
@ -336,93 +343,81 @@ function runApp() {
|
|||
callback({ requestHeaders })
|
||||
})
|
||||
|
||||
// when we create a real session on the watch page, youtube returns tracking cookies, which we definitely don't want
|
||||
const trackingCookieRequestFilter = { urls: ['https://www.youtube.com/sw.js_data', 'https://www.youtube.com/iframe_api'] }
|
||||
|
||||
session.defaultSession.webRequest.onHeadersReceived(trackingCookieRequestFilter, ({ responseHeaders }, callback) => {
|
||||
if (responseHeaders) {
|
||||
delete responseHeaders['set-cookie']
|
||||
}
|
||||
// eslint-disable-next-line n/no-callback-literal
|
||||
callback({ responseHeaders })
|
||||
})
|
||||
|
||||
if (replaceHttpCache) {
|
||||
// in-memory image cache
|
||||
|
||||
const imageCache = new ImageCache()
|
||||
|
||||
protocol.registerBufferProtocol('imagecache', (request, callback) => {
|
||||
// Remove `imagecache://` prefix
|
||||
const url = decodeURIComponent(request.url.substring(13))
|
||||
if (imageCache.has(url)) {
|
||||
const cached = imageCache.get(url)
|
||||
protocol.handle('imagecache', (request) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const url = decodeURIComponent(request.url.substring(13))
|
||||
if (imageCache.has(url)) {
|
||||
const cached = imageCache.get(url)
|
||||
|
||||
callback(cached)
|
||||
return
|
||||
}
|
||||
|
||||
const newRequest = net.request({
|
||||
method: request.method,
|
||||
url
|
||||
})
|
||||
|
||||
// Electron doesn't allow certain headers to be set:
|
||||
// https://www.electronjs.org/docs/latest/api/client-request#requestsetheadername-value
|
||||
// also blacklist Origin and Referrer as we don't want to let YouTube know about them
|
||||
const blacklistedHeaders = ['content-length', 'host', 'trailer', 'te', 'upgrade', 'cookie2', 'keep-alive', 'transfer-encoding', 'origin', 'referrer']
|
||||
|
||||
for (const header of Object.keys(request.headers)) {
|
||||
if (!blacklistedHeaders.includes(header.toLowerCase())) {
|
||||
newRequest.setHeader(header, request.headers[header])
|
||||
resolve(new Response(cached.data, {
|
||||
headers: { 'content-type': cached.mimeType }
|
||||
}))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
newRequest.on('response', (response) => {
|
||||
const chunks = []
|
||||
response.on('data', (chunk) => {
|
||||
chunks.push(chunk)
|
||||
const newRequest = net.request({
|
||||
method: request.method,
|
||||
url
|
||||
})
|
||||
|
||||
response.on('end', () => {
|
||||
const data = Buffer.concat(chunks)
|
||||
// Electron doesn't allow certain headers to be set:
|
||||
// https://www.electronjs.org/docs/latest/api/client-request#requestsetheadername-value
|
||||
// also blacklist Origin and Referrer as we don't want to let YouTube know about them
|
||||
const blacklistedHeaders = ['content-length', 'host', 'trailer', 'te', 'upgrade', 'cookie2', 'keep-alive', 'transfer-encoding', 'origin', 'referrer']
|
||||
|
||||
const expiryTimestamp = extractExpiryTimestamp(response.headers)
|
||||
const mimeType = response.headers['content-type']
|
||||
for (const header of Object.keys(request.headers)) {
|
||||
if (!blacklistedHeaders.includes(header.toLowerCase())) {
|
||||
newRequest.setHeader(header, request.headers[header])
|
||||
}
|
||||
}
|
||||
|
||||
imageCache.add(url, mimeType, data, expiryTimestamp)
|
||||
newRequest.on('response', (response) => {
|
||||
const chunks = []
|
||||
response.on('data', (chunk) => {
|
||||
chunks.push(chunk)
|
||||
})
|
||||
|
||||
// eslint-disable-next-line n/no-callback-literal
|
||||
callback({
|
||||
mimeType,
|
||||
data: data
|
||||
response.on('end', () => {
|
||||
const data = Buffer.concat(chunks)
|
||||
|
||||
const expiryTimestamp = extractExpiryTimestamp(response.headers)
|
||||
const mimeType = response.headers['content-type']
|
||||
|
||||
imageCache.add(url, mimeType, data, expiryTimestamp)
|
||||
|
||||
resolve(new Response(data, {
|
||||
headers: { 'content-type': mimeType }
|
||||
}))
|
||||
})
|
||||
|
||||
response.on('error', (error) => {
|
||||
console.error('image cache error', error)
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
|
||||
response.on('error', (error) => {
|
||||
console.error('image cache error', error)
|
||||
|
||||
// error objects don't get serialised properly
|
||||
// https://stackoverflow.com/a/53624454
|
||||
|
||||
const errorJson = JSON.stringify(error, (key, value) => {
|
||||
if (value instanceof Error) {
|
||||
return {
|
||||
// Pull all enumerable properties, supporting properties on custom Errors
|
||||
...value,
|
||||
// Explicitly pull Error's non-enumerable properties
|
||||
name: value.name,
|
||||
message: value.message,
|
||||
stack: value.stack
|
||||
}
|
||||
}
|
||||
|
||||
return value
|
||||
})
|
||||
|
||||
// eslint-disable-next-line n/no-callback-literal
|
||||
callback({
|
||||
statusCode: response.statusCode ?? 400,
|
||||
mimeType: 'application/json',
|
||||
data: Buffer.from(errorJson)
|
||||
})
|
||||
newRequest.on('error', (err) => {
|
||||
console.error(err)
|
||||
})
|
||||
|
||||
newRequest.end()
|
||||
})
|
||||
|
||||
newRequest.on('error', (err) => {
|
||||
console.error(err)
|
||||
})
|
||||
|
||||
newRequest.end()
|
||||
})
|
||||
|
||||
const imageRequestFilter = { urls: ['https://*/*', 'http://*/*'] }
|
||||
|
@ -472,8 +467,12 @@ function runApp() {
|
|||
searchQueryText = null
|
||||
} = { }) {
|
||||
// Syncing new window background to theme choice.
|
||||
const windowBackground = await baseHandlers.settings._findTheme().then(({ value }) => {
|
||||
switch (value) {
|
||||
const windowBackground = await baseHandlers.settings._findTheme().then((setting) => {
|
||||
if (!setting) {
|
||||
return nativeTheme.shouldUseDarkColors ? '#212121' : '#f1f1f1'
|
||||
}
|
||||
|
||||
switch (setting.value) {
|
||||
case 'dark':
|
||||
return '#212121'
|
||||
case 'light':
|
||||
|
@ -484,6 +483,10 @@ function runApp() {
|
|||
return '#282a36'
|
||||
case 'catppuccin-mocha':
|
||||
return '#1e1e2e'
|
||||
case 'pastel-pink':
|
||||
return '#ffd1dc'
|
||||
case 'hot-pink':
|
||||
return '#de1c85'
|
||||
case 'system':
|
||||
default:
|
||||
return nativeTheme.shouldUseDarkColors ? '#212121' : '#f1f1f1'
|
||||
|
@ -698,10 +701,12 @@ function runApp() {
|
|||
session.defaultSession.setProxy({
|
||||
proxyRules: url
|
||||
})
|
||||
session.defaultSession.closeAllConnections()
|
||||
})
|
||||
|
||||
ipcMain.on(IpcChannels.DISABLE_PROXY, () => {
|
||||
session.defaultSession.setProxy({})
|
||||
session.defaultSession.closeAllConnections()
|
||||
})
|
||||
|
||||
ipcMain.on(IpcChannels.OPEN_EXTERNAL_LINK, (_, url) => {
|
||||
|
@ -1024,6 +1029,8 @@ function runApp() {
|
|||
|
||||
// ************************************************* //
|
||||
|
||||
let resourcesCleanUpDone = false
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
// Clean up resources (datastores' compaction + Electron cache and storage data clearing)
|
||||
cleanUpResources().finally(() => {
|
||||
|
@ -1033,8 +1040,32 @@ function runApp() {
|
|||
})
|
||||
})
|
||||
|
||||
function cleanUpResources() {
|
||||
return Promise.allSettled([
|
||||
if (process.platform === 'darwin') {
|
||||
// `window-all-closed` doesn't fire for Cmd+Q
|
||||
// https://www.electronjs.org/docs/latest/api/app#event-window-all-closed
|
||||
// This is also fired when `app.quit` called
|
||||
// Not using `before-quit` since that one is fired before windows are closed
|
||||
app.on('will-quit', e => {
|
||||
// Let app quit when the cleanup is finished
|
||||
|
||||
if (resourcesCleanUpDone) { return }
|
||||
|
||||
e.preventDefault()
|
||||
cleanUpResources().finally(() => {
|
||||
// Quit AFTER the resources cleanup is finished
|
||||
// Which calls the listener again, which is why we have the variable
|
||||
|
||||
app.quit()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function cleanUpResources() {
|
||||
if (resourcesCleanUpDone) {
|
||||
return
|
||||
}
|
||||
|
||||
await Promise.allSettled([
|
||||
baseHandlers.compactAllDatastores(),
|
||||
session.defaultSession.clearCache(),
|
||||
session.defaultSession.clearStorageData({
|
||||
|
@ -1050,6 +1081,8 @@ function runApp() {
|
|||
]
|
||||
})
|
||||
])
|
||||
|
||||
resourcesCleanUpDone = true
|
||||
}
|
||||
|
||||
// MacOS event
|
||||
|
|
|
@ -7,21 +7,24 @@
|
|||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
font-family: 'Roboto', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
height: 100%;
|
||||
block-size: 100%;
|
||||
}
|
||||
|
||||
.routerView {
|
||||
flex: 1 1 0%;
|
||||
margin: 18px 10px;
|
||||
margin-block: 18px;
|
||||
margin-inline: 10px;
|
||||
}
|
||||
|
||||
.banner {
|
||||
width: 85%;
|
||||
margin: 20px auto 0;
|
||||
inline-size: 85%;
|
||||
margin-block: 20px;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.banner-wrapper {
|
||||
margin: 0 10px;
|
||||
margin-block: 0;
|
||||
margin-inline: 10px;
|
||||
}
|
||||
|
||||
.flexBox {
|
||||
|
@ -32,7 +35,7 @@
|
|||
|
||||
#changeLogText {
|
||||
overflow-y: scroll;
|
||||
height: 40vh;
|
||||
block-size: 40vh;
|
||||
display: block
|
||||
}
|
||||
|
||||
|
@ -45,16 +48,17 @@
|
|||
|
||||
@media only screen and (max-width: 680px) {
|
||||
.routerView {
|
||||
margin: 68px 8px 68px;
|
||||
margin-block: 68px;
|
||||
margin-inline: 8px;
|
||||
}
|
||||
|
||||
.banner {
|
||||
width: 80%;
|
||||
margin-top: 20px;
|
||||
inline-size: 80%;
|
||||
margin-block-start: 20px;
|
||||
}
|
||||
|
||||
.flexBox {
|
||||
margin-top: 60px;
|
||||
margin-bottom: -75px;
|
||||
margin-block-start: 60px;
|
||||
margin-block-end: -75px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,8 +59,9 @@ export default defineComponent({
|
|||
showProgressBar: function () {
|
||||
return this.$store.getters.getShowProgressBar
|
||||
},
|
||||
isRightAligned: function () {
|
||||
return this.locale === 'ar' || this.locale === 'he'
|
||||
isLocaleRightToLeft: function () {
|
||||
return this.locale === 'ar' || this.locale === 'fa' || this.locale === 'he' ||
|
||||
this.locale === 'ur' || this.locale === 'yi' || this.locale === 'ku'
|
||||
},
|
||||
checkForUpdates: function () {
|
||||
return this.$store.getters.getCheckForUpdates
|
||||
|
@ -517,6 +518,11 @@ export default defineComponent({
|
|||
|
||||
setLocale: function() {
|
||||
document.documentElement.setAttribute('lang', this.locale)
|
||||
if (this.isLocaleRightToLeft) {
|
||||
document.body.dir = 'rtl'
|
||||
} else {
|
||||
document.body.dir = 'ltr'
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
id="app"
|
||||
:class="{
|
||||
hideOutlines: hideOutlines,
|
||||
rightAligned: isRightAligned
|
||||
isLocaleRightToLeft: isLocaleRightToLeft
|
||||
}"
|
||||
>
|
||||
<top-nav ref="topNav" />
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="320" height="180"><rect width="320" height="180" x="-160" y="-90" transform="translate(160 90)" fill="#9e9e9e"/><path fill="#545454" d="M135.991 131.796V48.427l72.202 41.685z"/></svg>
|
After Width: | Height: | Size: 231 B |
|
@ -1,6 +1,6 @@
|
|||
.about {
|
||||
background-color: var(--card-bg-color);
|
||||
margin-top: 0;
|
||||
margin-block-start: 0;
|
||||
padding: 10px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
@ -27,16 +27,16 @@
|
|||
|
||||
.aboutTagLink {
|
||||
background-color: var(--secondary-card-bg-color);
|
||||
color: var(--primary-text-color);
|
||||
border-radius: 7px;
|
||||
color: inherit;
|
||||
padding: 7px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.aboutDetails {
|
||||
text-align: left;
|
||||
text-align: start;
|
||||
}
|
||||
|
||||
.aboutDetails th {
|
||||
padding-right: 10px;
|
||||
padding-inline-end: 10px;
|
||||
}
|
||||
|
|
|
@ -61,10 +61,5 @@ export default defineComponent({
|
|||
formattedViews: function () {
|
||||
return formatNumber(this.views)
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
goToChannel: function (id) {
|
||||
this.$router.push({ path: `/channel/${id}` })
|
||||
},
|
||||
}
|
||||
})
|
||||
|
|
|
@ -90,10 +90,9 @@
|
|||
<ft-channel-bubble
|
||||
v-for="(channel, index) in relatedChannels"
|
||||
:key="index"
|
||||
:channel-id="channel.id"
|
||||
:channel-name="channel.name"
|
||||
:channel-thumbnail="channel.thumbnailUrl"
|
||||
role="link"
|
||||
@click="goToChannel(channel.id)"
|
||||
/>
|
||||
</ft-flex-box>
|
||||
</template>
|
||||
|
|
|
@ -58,8 +58,8 @@ export default defineComponent({
|
|||
allPlaylists: function () {
|
||||
return this.$store.getters.getAllPlaylists
|
||||
},
|
||||
historyCache: function () {
|
||||
return this.$store.getters.getHistoryCache
|
||||
historyCacheSorted: function () {
|
||||
return this.$store.getters.getHistoryCacheSorted
|
||||
},
|
||||
exportSubscriptionsPromptNames: function () {
|
||||
const exportFreeTube = this.$t('Settings.Data Settings.Export FreeTube')
|
||||
|
@ -702,20 +702,28 @@ export default defineComponent({
|
|||
textDecode.pop()
|
||||
|
||||
const requiredKeys = [
|
||||
'_id',
|
||||
'author',
|
||||
'authorId',
|
||||
'description',
|
||||
'isLive',
|
||||
'lengthSeconds',
|
||||
'paid',
|
||||
'published',
|
||||
'timeWatched',
|
||||
'title',
|
||||
'type',
|
||||
'videoId',
|
||||
'viewCount',
|
||||
'watchProgress'
|
||||
'watchProgress',
|
||||
]
|
||||
|
||||
const optionalKeys = [
|
||||
// `_id` absent if marked as watched manually
|
||||
'_id',
|
||||
'lastViewedPlaylistId',
|
||||
]
|
||||
|
||||
const ignoredKeys = [
|
||||
'paid',
|
||||
]
|
||||
|
||||
textDecode.forEach((history) => {
|
||||
|
@ -727,15 +735,19 @@ export default defineComponent({
|
|||
const historyObject = {}
|
||||
|
||||
Object.keys(historyData).forEach((key) => {
|
||||
if (!requiredKeys.includes(key)) {
|
||||
showToast(`Unknown data key: ${key}`)
|
||||
} else {
|
||||
if (requiredKeys.includes(key) || optionalKeys.includes(key)) {
|
||||
historyObject[key] = historyData[key]
|
||||
} else if (!ignoredKeys.includes(key)) {
|
||||
showToast(`Unknown data key: ${key}`)
|
||||
}
|
||||
// Else do not import the key
|
||||
})
|
||||
|
||||
if (Object.keys(historyObject).length < (requiredKeys.length - 2)) {
|
||||
const historyObjectKeysSet = new Set(Object.keys(historyObject))
|
||||
const missingKeys = requiredKeys.filter(x => !historyObjectKeysSet.has(x))
|
||||
if (missingKeys.length > 0) {
|
||||
showToast(this.$t('Settings.Data Settings.History object has insufficient data, skipping item'))
|
||||
console.error('Missing Keys: ', missingKeys, historyData)
|
||||
} else {
|
||||
this.updateHistory(historyObject)
|
||||
}
|
||||
|
@ -819,7 +831,6 @@ export default defineComponent({
|
|||
historyObject.lengthSeconds = null
|
||||
historyObject.watchProgress = 1
|
||||
historyObject.isLive = false
|
||||
historyObject.paid = false
|
||||
|
||||
this.updateHistory(historyObject)
|
||||
}
|
||||
|
@ -829,7 +840,7 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
exportHistory: async function () {
|
||||
const historyDb = this.historyCache.map((historyEntry) => {
|
||||
const historyDb = this.historyCacheSorted.map((historyEntry) => {
|
||||
return JSON.stringify(historyEntry)
|
||||
}).join('\n') + '\n'
|
||||
const dateStr = getTodayDateStrLocalTimezone()
|
||||
|
@ -893,8 +904,7 @@ export default defineComponent({
|
|||
'lengthSeconds',
|
||||
'timeAdded',
|
||||
'isLive',
|
||||
'paid',
|
||||
'type'
|
||||
'type',
|
||||
]
|
||||
|
||||
playlists.forEach(async (playlistData) => {
|
||||
|
|
|
@ -11,7 +11,7 @@ export default defineComponent({
|
|||
'ft-settings-section': FtSettingsSection,
|
||||
'ft-toggle-switch': FtToggleSwitch,
|
||||
'ft-input-tags': FtInputTags,
|
||||
'ft-flex-box': FtFlexBox
|
||||
'ft-flex-box': FtFlexBox,
|
||||
},
|
||||
computed: {
|
||||
hideVideoViews: function () {
|
||||
|
@ -50,7 +50,10 @@ export default defineComponent({
|
|||
hideComments: function () {
|
||||
return this.$store.getters.getHideComments
|
||||
},
|
||||
hideLiveStreams: function() {
|
||||
hideCommentPhotos: function () {
|
||||
return this.$store.getters.getHideCommentPhotos
|
||||
},
|
||||
hideLiveStreams: function () {
|
||||
return this.$store.getters.getHideLiveStreams
|
||||
},
|
||||
hideUpcomingPremieres: function () {
|
||||
|
@ -62,36 +65,45 @@ export default defineComponent({
|
|||
hideChapters: function () {
|
||||
return this.$store.getters.getHideChapters
|
||||
},
|
||||
hideFeaturedChannels: function() {
|
||||
hideFeaturedChannels: function () {
|
||||
return this.$store.getters.getHideFeaturedChannels
|
||||
},
|
||||
hideChannelShorts: function() {
|
||||
hideChannelShorts: function () {
|
||||
return this.$store.getters.getHideChannelShorts
|
||||
},
|
||||
hideChannelPlaylists: function() {
|
||||
hideChannelPlaylists: function () {
|
||||
return this.$store.getters.getHideChannelPlaylists
|
||||
},
|
||||
hideChannelPodcasts: function() {
|
||||
hideChannelPodcasts: function () {
|
||||
return this.$store.getters.getHideChannelPodcasts
|
||||
},
|
||||
hideChannelReleases: function() {
|
||||
hideChannelReleases: function () {
|
||||
return this.$store.getters.getHideChannelReleases
|
||||
},
|
||||
hideChannelCommunity: function() {
|
||||
hideChannelCommunity: function () {
|
||||
return this.$store.getters.getHideChannelCommunity
|
||||
},
|
||||
hideSubscriptionsVideos: function() {
|
||||
hideSubscriptionsVideos: function () {
|
||||
return this.$store.getters.getHideSubscriptionsVideos
|
||||
},
|
||||
hideSubscriptionsShorts: function() {
|
||||
hideSubscriptionsShorts: function () {
|
||||
return this.$store.getters.getHideSubscriptionsShorts
|
||||
},
|
||||
hideSubscriptionsLive: function() {
|
||||
hideSubscriptionsLive: function () {
|
||||
return this.$store.getters.getHideSubscriptionsLive
|
||||
},
|
||||
hideSubscriptionsCommunity: function() {
|
||||
return this.$store.getters.getHideSubscriptionsCommunity
|
||||
},
|
||||
showDistractionFreeTitles: function () {
|
||||
return this.$store.getters.getShowDistractionFreeTitles
|
||||
},
|
||||
thumbnailPreference: function () {
|
||||
return this.$store.getters.getThumbnailPreference
|
||||
},
|
||||
blurThumbnails: function () {
|
||||
return this.$store.getters.getBlurThumbnails
|
||||
},
|
||||
channelsHidden: function () {
|
||||
return JSON.parse(this.$store.getters.getChannelsHidden)
|
||||
},
|
||||
|
@ -111,7 +123,7 @@ export default defineComponent({
|
|||
|
||||
this.updateHideRecommendedVideos(value)
|
||||
},
|
||||
handleChannelsHidden: function(value) {
|
||||
handleChannelsHidden: function (value) {
|
||||
this.updateChannelsHidden(JSON.stringify(value))
|
||||
},
|
||||
|
||||
|
@ -130,6 +142,7 @@ export default defineComponent({
|
|||
'updateDefaultTheatreMode',
|
||||
'updateHideVideoDescription',
|
||||
'updateHideComments',
|
||||
'updateHideCommentPhotos',
|
||||
'updateHideLiveStreams',
|
||||
'updateHideUpcomingPremieres',
|
||||
'updateHideSharingActions',
|
||||
|
@ -144,7 +157,9 @@ export default defineComponent({
|
|||
'updateHideChannelReleases',
|
||||
'updateHideSubscriptionsVideos',
|
||||
'updateHideSubscriptionsShorts',
|
||||
'updateHideSubscriptionsLive'
|
||||
'updateHideSubscriptionsLive',
|
||||
'updateHideSubscriptionsCommunity',
|
||||
'updateBlurThumbnails'
|
||||
])
|
||||
}
|
||||
})
|
||||
|
|
|
@ -66,6 +66,12 @@
|
|||
:tooltip="hideLiveStreams ? hideSubscriptionsLiveTooltip : ''"
|
||||
v-on="!hideLiveStreams ? { change: updateHideSubscriptionsLive } : {}"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Distraction Free Settings.Hide Subscriptions Community')"
|
||||
:compact="true"
|
||||
:default-value="hideSubscriptionsCommunity"
|
||||
@change="updateHideSubscriptionsCommunity"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<h4
|
||||
|
@ -166,6 +172,12 @@
|
|||
:default-value="hideComments"
|
||||
@change="updateHideComments"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Distraction Free Settings.Hide Profile Pictures in Comments')"
|
||||
:compact="true"
|
||||
:default-value="hideCommentPhotos"
|
||||
@change="updateHideCommentPhotos"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<h4
|
||||
|
@ -193,6 +205,13 @@
|
|||
:default-value="hideSharingActions"
|
||||
@change="updateHideSharingActions"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Distraction Free Settings.Blur Thumbnails')"
|
||||
:compact="true"
|
||||
:default-value="blurThumbnails && thumbnailPreference !== 'hidden'"
|
||||
:disabled="thumbnailPreference === 'hidden'"
|
||||
v-on="thumbnailPreference === 'hidden' ? { change: updateBlurThumbnails(false) } : { change: updateBlurThumbnails}"
|
||||
/>
|
||||
</div>
|
||||
<div class="switchColumn">
|
||||
<ft-toggle-switch
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
.folderDisplay {
|
||||
width: 50vh;
|
||||
inline-size: 50vh;
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ export default defineComponent({
|
|||
},
|
||||
data: function () {
|
||||
return {
|
||||
askForDownloadPath: false,
|
||||
downloadBehaviorValues: [
|
||||
'download',
|
||||
'open'
|
||||
|
@ -32,6 +31,9 @@ export default defineComponent({
|
|||
downloadPath: function() {
|
||||
return this.$store.getters.getDownloadFolderPath
|
||||
},
|
||||
askForDownloadPath: function() {
|
||||
return this.$store.getters.getDownloadAskPath
|
||||
},
|
||||
downloadBehaviorNames: function () {
|
||||
return [
|
||||
this.$t('Settings.Download Settings.Download in app'),
|
||||
|
@ -42,15 +44,9 @@ export default defineComponent({
|
|||
return this.$store.getters.getDownloadBehavior
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
this.askForDownloadPath = this.downloadPath === ''
|
||||
},
|
||||
methods: {
|
||||
handleDownloadingSettingChange: function (value) {
|
||||
this.askForDownloadPath = value
|
||||
if (value === true) {
|
||||
this.updateDownloadFolderPath('')
|
||||
}
|
||||
this.updateDownloadAskPath(value)
|
||||
},
|
||||
chooseDownloadingFolder: async function() {
|
||||
// only use with electron
|
||||
|
@ -59,9 +55,12 @@ export default defineComponent({
|
|||
{ properties: ['openDirectory'] }
|
||||
)
|
||||
|
||||
if (folder.canceled) return
|
||||
|
||||
this.updateDownloadFolderPath(folder.filePaths[0])
|
||||
},
|
||||
...mapActions([
|
||||
'updateDownloadAskPath',
|
||||
'updateDownloadFolderPath',
|
||||
'updateDownloadBehavior'
|
||||
])
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.experimental-warning {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
padding-left: 4%;
|
||||
padding-right: 4%
|
||||
padding-inline-start: 4%;
|
||||
padding-inline-end: 4%
|
||||
}
|
||||
|
|
|
@ -3,17 +3,19 @@
|
|||
|
||||
h2 {
|
||||
background-color: var(--card-bg-color);
|
||||
padding: 10px 0;
|
||||
padding-block: 10px;
|
||||
padding-inline: 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.frown {
|
||||
background-color: var(--card-bg-color);
|
||||
font-size: 10em;
|
||||
height: 100%;
|
||||
padding: 20px 0;
|
||||
block-size: 100%;
|
||||
padding-block: 20px;
|
||||
padding-inline: 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
.btn {
|
||||
font-family: 'Roboto', sans-serif;
|
||||
min-width: 100px;
|
||||
min-inline-size: 100px;
|
||||
font-size: 0.9rem;
|
||||
padding: 10px 20px;
|
||||
padding-block: 10px;
|
||||
padding-inline: 20px;
|
||||
block-size: fit-content;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
|
@ -34,10 +36,10 @@
|
|||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
inset-block-start: 0;
|
||||
inset-inline-start: 0;
|
||||
pointer-events: none;
|
||||
background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);
|
||||
background-repeat: no-repeat;
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
.ft-card {
|
||||
background-color: var(--card-bg-color);
|
||||
margin: 8px;
|
||||
padding: 16px;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 16px;
|
||||
padding-block: 3px 16px;
|
||||
padding-inline: 16px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.1);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.bubblePadding {
|
||||
position: relative;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
inline-size: 100px;
|
||||
block-size: 100px;
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
|
@ -9,6 +9,8 @@
|
|||
align-items: center;
|
||||
gap: 16px;
|
||||
overflow: hidden;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
-webkit-transition: background 0.2s ease-out;
|
||||
-moz-transition: background 0.2s ease-out;
|
||||
-o-transition: background 0.2s ease-out;
|
||||
|
@ -17,21 +19,22 @@
|
|||
|
||||
.bubblePadding:hover {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
-moz-transition: background 0.2s ease-in;
|
||||
-o-transition: background 0.2s ease-in;
|
||||
transition: background 0.2s ease-in;
|
||||
}
|
||||
|
||||
.bubble {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
inline-size: 50px;
|
||||
block-size: 50px;
|
||||
border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
}
|
||||
|
||||
.selected {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
inset-block-start: 10px;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
|
@ -39,8 +42,8 @@
|
|||
color: #EEEEEE;
|
||||
font-size: 25px;
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
left: 12px;
|
||||
inset-block-start: 12px;
|
||||
inset-inline-start: 12px;
|
||||
}
|
||||
|
||||
.channelName {
|
||||
|
@ -49,5 +52,5 @@
|
|||
overflow: hidden;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
import { defineComponent } from 'vue'
|
||||
import { sanitizeForHtmlId } from '../../helpers/accessibility'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FtChannelBubble',
|
||||
props: {
|
||||
channelId: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
channelName: {
|
||||
type: String,
|
||||
required: true
|
||||
|
@ -24,15 +27,12 @@ export default defineComponent({
|
|||
},
|
||||
computed: {
|
||||
sanitizedId: function() {
|
||||
return 'channelBubble' + sanitizeForHtmlId(this.channelName)
|
||||
return 'channelBubble' + this.channelId
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleClick: function (event) {
|
||||
if (event instanceof KeyboardEvent) {
|
||||
if (event.target.getAttribute('role') === 'link' && event.key !== 'Enter') {
|
||||
return
|
||||
}
|
||||
event.preventDefault()
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,26 @@
|
|||
<template>
|
||||
<div
|
||||
<router-link
|
||||
v-if="!showSelected"
|
||||
class="bubblePadding"
|
||||
:aria-labelledby="sanitizedId"
|
||||
:to="`/channel/${channelId}`"
|
||||
>
|
||||
<img
|
||||
class="bubble"
|
||||
:src="channelThumbnail"
|
||||
alt=""
|
||||
>
|
||||
<div
|
||||
:id="sanitizedId"
|
||||
class="channelName"
|
||||
>
|
||||
{{ channelName }}
|
||||
</div>
|
||||
</router-link>
|
||||
<div
|
||||
v-else
|
||||
class="bubblePadding"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
:aria-labelledby="sanitizedId"
|
||||
@click="handleClick"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.vote-count {
|
||||
padding-bottom: 6px;
|
||||
padding-block-end: 6px;
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
|
@ -9,34 +9,35 @@
|
|||
border-style: solid;
|
||||
border-width: 2px;
|
||||
display: block;
|
||||
float: left;
|
||||
height: 10px;
|
||||
left: 5px;
|
||||
float: var(--float-left-ltr-rtl-value);
|
||||
block-size: 10px;
|
||||
inset-inline-start: 5px;
|
||||
position: relative;
|
||||
top: 8px;
|
||||
width: 10px;
|
||||
inset-block-start: 8px;
|
||||
inline-size: 10px;
|
||||
}
|
||||
|
||||
|
||||
.filled-circle {
|
||||
border-radius: 50%;
|
||||
background-color: black;
|
||||
float: left;
|
||||
height: 6px;
|
||||
left: 2px;
|
||||
top: 2px;
|
||||
float: var(--float-left-ltr-rtl-value);
|
||||
block-size: 6px;
|
||||
inset-inline-start: 2px;
|
||||
inset-block-start: 2px;
|
||||
position: relative;
|
||||
width: 6px;
|
||||
inline-size: 6px;
|
||||
}
|
||||
|
||||
.option-text {
|
||||
border-radius: 5px;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
padding: 5px 25px;
|
||||
padding-block: 5px;
|
||||
padding-inline: 25px;
|
||||
}
|
||||
|
||||
.option {
|
||||
padding-bottom: 10px;
|
||||
padding-block-end: 10px;
|
||||
}
|
||||
|
||||
.correct-option {
|
||||
|
|
|
@ -6,7 +6,7 @@ import FtCommunityPoll from '../ft-community-poll/ft-community-poll.vue'
|
|||
import autolinker from 'autolinker'
|
||||
import VueTinySlider from 'vue-tiny-slider'
|
||||
|
||||
import { toLocalePublicationString } from '../../helpers/utils'
|
||||
import { deepCopy, toLocalePublicationString } from '../../helpers/utils'
|
||||
import { youtubeImageUrlToInvidious } from '../../helpers/api/invidious'
|
||||
|
||||
import 'tiny-slider/dist/tiny-slider.css'
|
||||
|
@ -40,6 +40,7 @@ export default defineComponent({
|
|||
commentCount: '',
|
||||
isLoading: true,
|
||||
author: '',
|
||||
authorId: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -77,18 +78,16 @@ export default defineComponent({
|
|||
return
|
||||
}
|
||||
this.postText = autolinker.link(this.data.postText)
|
||||
let authorThumbnails = this.data.authorThumbnails
|
||||
const authorThumbnails = deepCopy(this.data.authorThumbnails)
|
||||
if (!process.env.IS_ELECTRON || this.backendPreference === 'invidious') {
|
||||
authorThumbnails = authorThumbnails.map(thumbnail => {
|
||||
authorThumbnails.forEach(thumbnail => {
|
||||
thumbnail.url = youtubeImageUrlToInvidious(thumbnail.url)
|
||||
return thumbnail
|
||||
})
|
||||
} else {
|
||||
authorThumbnails = authorThumbnails.map(thumbnail => {
|
||||
authorThumbnails.forEach(thumbnail => {
|
||||
if (thumbnail.url.startsWith('//')) {
|
||||
thumbnail.url = 'https:' + thumbnail.url
|
||||
}
|
||||
return thumbnail
|
||||
})
|
||||
}
|
||||
this.authorThumbnails = authorThumbnails
|
||||
|
@ -104,6 +103,7 @@ export default defineComponent({
|
|||
this.commentCount = this.data.commentCount
|
||||
this.type = (this.data.postContent !== null && this.data.postContent !== undefined) ? this.data.postContent.type : 'text'
|
||||
this.author = this.data.author
|
||||
this.authorId = this.data.authorId
|
||||
this.isLoading = false
|
||||
},
|
||||
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
.outside {
|
||||
margin: auto;
|
||||
width: 40%;
|
||||
inline-size: 40%;
|
||||
@media screen and (max-width: 768px) {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,16 +14,16 @@
|
|||
}
|
||||
|
||||
.communityImage {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
block-size: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.communityThumbnail {
|
||||
-webkit-border-radius: 50%;
|
||||
border-radius: 50%;
|
||||
height: 55px;
|
||||
margin-right: 5px;
|
||||
width: 55px;
|
||||
block-size: 55px;
|
||||
margin-inline-end: 5px;
|
||||
inline-size: 55px;
|
||||
}
|
||||
|
||||
.author-div {
|
||||
|
@ -32,12 +32,18 @@
|
|||
.authorName {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
margin: 5px 6px 0 5px;
|
||||
margin-block: 5px 0;
|
||||
margin-inline: 5px 6px;
|
||||
.authorNameLink {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.publishedText {
|
||||
font-size: 15px;
|
||||
margin: 5px 6px 0 5px;
|
||||
margin-block: 5px 0;
|
||||
margin-inline: 5px 6px;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,24 +57,24 @@
|
|||
display: block;
|
||||
flex-direction: column;
|
||||
font-size: 15px;
|
||||
margin-top: 4px;
|
||||
max-width: 210px;
|
||||
text-align: left;
|
||||
margin-block-start: 4px;
|
||||
max-inline-size: 210px;
|
||||
text-align: start;
|
||||
|
||||
@media screen and (max-width: 680px) {
|
||||
margin-left: 0;
|
||||
text-align: left;
|
||||
margin-inline-start: 0;
|
||||
text-align: start;
|
||||
}
|
||||
|
||||
.likeBar {
|
||||
border-radius: 4px;
|
||||
height: 8px;
|
||||
margin-bottom: 4px;
|
||||
block-size: 8px;
|
||||
margin-block-end: 4px;
|
||||
}
|
||||
|
||||
.likeCount {
|
||||
margin-left: 5px;
|
||||
margin-right: 6px;
|
||||
margin-inline-start: 5px;
|
||||
margin-inline-end: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,22 +83,22 @@
|
|||
|
||||
.videoThumbnail {
|
||||
display: flex;
|
||||
margin-bottom: auto;
|
||||
margin-top: auto;
|
||||
margin-block-end: auto;
|
||||
margin-block-start: auto;
|
||||
position: relative;
|
||||
width: fit-content;
|
||||
inline-size: fit-content;
|
||||
|
||||
.thumbnailImage {
|
||||
display: block;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
block-size: auto;
|
||||
max-inline-size: 100%;
|
||||
inline-size: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.playlistText {
|
||||
margin-left: 10px;
|
||||
width: 50%;
|
||||
margin-inline-start: 10px;
|
||||
inline-size: 50%;
|
||||
word-wrap: break-word;
|
||||
|
||||
.playlistAuthor {
|
||||
|
@ -111,9 +117,9 @@
|
|||
color: var(--primary-text-color);
|
||||
display: flex;
|
||||
font-size: small;
|
||||
padding-top: 10px;
|
||||
padding-block-start: 10px;
|
||||
text-decoration-line: none;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.playlistPreviewVideoTitle {
|
||||
|
@ -121,12 +127,12 @@
|
|||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ft-list-item.grid {
|
||||
min-height: 0 !important;
|
||||
padding-bottom: 20px;
|
||||
min-block-size: 0 !important;
|
||||
padding-block-end: 20px;
|
||||
}
|
||||
|
|
|
@ -8,16 +8,43 @@
|
|||
<div
|
||||
class="author-div"
|
||||
>
|
||||
<img
|
||||
<template
|
||||
v-if="authorThumbnails.length > 0"
|
||||
:src="getBestQualityImage(authorThumbnails)"
|
||||
class="communityThumbnail"
|
||||
alt=""
|
||||
>
|
||||
<router-link
|
||||
v-if="authorId"
|
||||
:to="`/channel/${authorId}`"
|
||||
tabindex="-1"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<img
|
||||
:src="getBestQualityImage(authorThumbnails)"
|
||||
class="communityThumbnail"
|
||||
alt=""
|
||||
>
|
||||
</router-link>
|
||||
<img
|
||||
v-else
|
||||
:src="getBestQualityImage(authorThumbnails)"
|
||||
class="communityThumbnail"
|
||||
alt=""
|
||||
>
|
||||
</template>
|
||||
<p
|
||||
class="authorName"
|
||||
>
|
||||
{{ author }}
|
||||
<router-link
|
||||
v-if="authorId"
|
||||
:to="`/channel/${authorId}`"
|
||||
class="authorNameLink"
|
||||
>
|
||||
{{ author }}
|
||||
</router-link>
|
||||
<template
|
||||
v-else
|
||||
>
|
||||
{{ author }}
|
||||
</template>
|
||||
</p>
|
||||
<p
|
||||
class="publishedText"
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
.tns-nav button {
|
||||
background-color: #ddd;
|
||||
border-radius: 50%;
|
||||
height: 1.5em;
|
||||
block-size: 1.5em;
|
||||
padding: 0;
|
||||
width: 1.5em;
|
||||
inline-size: 1.5em;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
.maxWidth {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
>
|
||||
<ft-list-lazy-wrapper
|
||||
v-for="(result, index) in data"
|
||||
:key="`${result.type}-${result.videoId || result.playlistId || result.postId || result.id || result.authorId}-${index}`"
|
||||
:key="`${result.type}-${result.videoId || result.playlistId || result.postId || result.id || result.authorId || result.title}-${index}`"
|
||||
appearance="result"
|
||||
:data="result"
|
||||
:first-screen="index < 16"
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
.iconButton {
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
height: 1em;
|
||||
block-size: 1em;
|
||||
transition: background 0.15s ease-out;
|
||||
width: 1em;
|
||||
inline-size: 1em;
|
||||
|
||||
&.shadow {
|
||||
box-shadow: 0 1px 2px rgb(0 0 0 / 50%);
|
||||
|
@ -24,23 +24,27 @@
|
|||
color: var(--primary-text-color);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
&:focus-visible {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: var(--side-nav-active-color);
|
||||
color: var(--side-nav-active-text-color);
|
||||
}
|
||||
}
|
||||
|
||||
&.base-no-default {
|
||||
&:hover,
|
||||
&:focus {
|
||||
&:focus-visible {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: var(--side-nav-active-color);
|
||||
color: var(--side-nav-active-text-color);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,7 +53,7 @@
|
|||
color: var(--text-with-main-color);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
&:focus-visible {
|
||||
background-color: var(--primary-color-hover);
|
||||
}
|
||||
|
||||
|
@ -63,7 +67,7 @@
|
|||
color: var(--text-with-accent-color);
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
&:focus-visible {
|
||||
background-color: var(--accent-color-hover);
|
||||
}
|
||||
|
||||
|
@ -72,7 +76,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.favorite {
|
||||
&.favorite, &.favorite:hover, &.favorite:focus-visible {
|
||||
color: var(--favorite-icon-color);
|
||||
}
|
||||
}
|
||||
|
@ -91,19 +95,19 @@
|
|||
z-index: 3;
|
||||
|
||||
&.left {
|
||||
right: calc(50% - 10px);
|
||||
inset-inline-end: calc(50% - 10px);
|
||||
}
|
||||
|
||||
&.right {
|
||||
left: calc(50% - 10px);
|
||||
inset-inline-start: calc(50% - 10px);
|
||||
}
|
||||
|
||||
&.top {
|
||||
bottom: 45px;
|
||||
inset-block-end: 45px;
|
||||
}
|
||||
|
||||
&.bottom {
|
||||
top: 45px;
|
||||
inset-block-start: 45px;
|
||||
}
|
||||
|
||||
.list {
|
||||
|
@ -115,27 +119,31 @@
|
|||
.listItem {
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
padding: 8px 10px;
|
||||
padding-block: 8px;
|
||||
padding-inline: 10px;
|
||||
transition: background 0.2s ease-out;
|
||||
white-space: nowrap;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
&:focus-visible {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
transition: background 0.2s ease-in;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: var(--side-nav-active-color);
|
||||
color: var(--side-nav-active-text-color);
|
||||
transition: background 0.1s ease-in;
|
||||
}
|
||||
}
|
||||
|
||||
.listItemDivider {
|
||||
border-top: 1px solid var(--tertiary-text-color);
|
||||
margin: 1px auto;
|
||||
border-block-start: 1px solid var(--tertiary-text-color);
|
||||
margin-block: 1px;
|
||||
margin-inline: auto;
|
||||
// Too "visible" with current color
|
||||
opacity: 0.5;
|
||||
width: 95%;
|
||||
inline-size: 95%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,9 +77,9 @@
|
|||
v-for="(option, index) in dropdownOptions"
|
||||
:id="sanitizeForHtmlId(title + '-' + index)"
|
||||
:key="index"
|
||||
role="option"
|
||||
:role="option.type === 'divider' ? 'separator' : 'option'"
|
||||
aria-selected="false"
|
||||
tabindex="-1"
|
||||
:tabindex="option.type === 'divider' ? '-1' : '0'"
|
||||
:class="option.type === 'divider' ? 'listItemDivider' : 'listItem'"
|
||||
@click="handleDropdownClick({url: option.value, index: index}, $event)"
|
||||
@keydown.enter="handleDropdownClick({url: option.value, index: index}, $event)"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
display: block;
|
||||
width: 60%;
|
||||
inline-size: 60%;
|
||||
}
|
||||
|
||||
.ft-tag-box ul {
|
||||
|
@ -20,13 +20,12 @@
|
|||
margin: 5px;
|
||||
border-radius: 5px;
|
||||
display:flex;
|
||||
float: left;
|
||||
float: var(--float-left-ltr-rtl-value);
|
||||
}
|
||||
|
||||
.ft-tag-box li>span {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 10px;
|
||||
padding-block: 10px;
|
||||
padding-inline-start: 10px;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
|
@ -45,11 +44,11 @@
|
|||
}
|
||||
|
||||
:deep(.ft-input-component .ft-input) {
|
||||
margin-top: 10px;
|
||||
margin-block-start: 10px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 576px) {
|
||||
.ft-input-tags-component {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,23 +2,32 @@
|
|||
position: relative;
|
||||
}
|
||||
|
||||
body[dir='rtl'] .ft-input-component.search.showClearTextButton .inputAction {
|
||||
inset-inline-end: -30px;
|
||||
}
|
||||
|
||||
body[dir='rtl'] .ft-input-component.search.clearTextButtonVisible .inputAction,
|
||||
body[dir='rtl'] .ft-input-component.search.showClearTextButton:focus-within .inputAction {
|
||||
inset-inline-end: 0;
|
||||
}
|
||||
|
||||
.ft-input-component.search.showClearTextButton {
|
||||
padding-left: 30px;
|
||||
padding-inline-start: 30px;
|
||||
}
|
||||
|
||||
.ft-input-component.search.clearTextButtonVisible,
|
||||
.ft-input-component.search.showClearTextButton:focus-within {
|
||||
padding-left: 0;
|
||||
padding-inline-start: 0;
|
||||
}
|
||||
|
||||
.ft-input-component.showClearTextButton:not(.search) .ft-input {
|
||||
padding-left: 46px;
|
||||
padding-inline-start: 46px;
|
||||
}
|
||||
|
||||
/* Main search input */
|
||||
.clearTextButtonVisible.search .ft-input,
|
||||
.ft-input-component.search.showClearTextButton:focus-within .ft-input {
|
||||
padding-left: 46px;
|
||||
padding-inline-start: 46px;
|
||||
}
|
||||
|
||||
.ft-input-component:focus-within .clearInputTextButton {
|
||||
|
@ -38,11 +47,12 @@
|
|||
|
||||
.clearInputTextButton {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 0;
|
||||
inset-block-start: 5px;
|
||||
inset-inline-start: 0;
|
||||
/* To be higher than `.inputWrapper` */
|
||||
z-index: 1;
|
||||
margin: 0 3px;
|
||||
margin-block: 0;
|
||||
margin-inline: 3px;
|
||||
padding: 10px;
|
||||
border-radius: 100%;
|
||||
color: var(--primary-text-color);
|
||||
|
@ -54,6 +64,7 @@
|
|||
|
||||
.clearInputTextButton.visible:hover {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
}
|
||||
|
||||
.forceTextColor .clearInputTextButton:hover {
|
||||
|
@ -62,13 +73,14 @@
|
|||
|
||||
.clearInputTextButton.visible:active {
|
||||
background-color: var(--tertiary-text-color);
|
||||
color: var(--side-nav-active-text-color);
|
||||
-moz-transition: background 0.2s ease-in;
|
||||
-o-transition: background 0.2s ease-in;
|
||||
transition: background 0.2s ease-in;
|
||||
}
|
||||
|
||||
.search .clearInputTextButton {
|
||||
top: 12px;
|
||||
inset-block-start: 12px;
|
||||
}
|
||||
|
||||
.forceTextColor .clearInputTextButton {
|
||||
|
@ -84,12 +96,12 @@
|
|||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
outline: none;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
padding: 1rem;
|
||||
border: none;
|
||||
margin-bottom: 10px;
|
||||
margin-block-end: 10px;
|
||||
font-size: 16px;
|
||||
height: 45px;
|
||||
block-size: 45px;
|
||||
color: var(--secondary-text-color);
|
||||
border-radius: 5px;
|
||||
background-color: var(--search-bar-color);
|
||||
|
@ -123,10 +135,11 @@
|
|||
|
||||
.inputAction {
|
||||
position: absolute;
|
||||
margin: 0 3px;
|
||||
margin-block: 0;
|
||||
margin-inline: 3px;
|
||||
padding: 10px;
|
||||
top: -8px;
|
||||
right: 0;
|
||||
inset-block-start: -8px;
|
||||
inset-inline-end: 0;
|
||||
border-radius: 100%;
|
||||
color: var(--primary-text-color);
|
||||
/* this should look disabled by default */
|
||||
|
@ -153,11 +166,12 @@
|
|||
With arrow present means
|
||||
the text might get under the arrow with normal padding
|
||||
*/
|
||||
padding-right: calc(36px + 6px);
|
||||
padding-inline-end: calc(36px + 6px);
|
||||
}
|
||||
|
||||
.inputAction.enabled:hover {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
-moz-transition: background 0.2s ease-in;
|
||||
-o-transition: background 0.2s ease-in;
|
||||
transition: background 0.2s ease-in;
|
||||
|
@ -169,6 +183,7 @@
|
|||
|
||||
.inputAction.enabled:active {
|
||||
background-color: var(--tertiary-text-color);
|
||||
color: var(--side-nav-active-text-color);
|
||||
-moz-transition: background 0.2s ease-in;
|
||||
-o-transition: background 0.2s ease-in;
|
||||
transition: background 0.2s ease-in;
|
||||
|
@ -180,10 +195,11 @@
|
|||
|
||||
.list {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 5px 0;
|
||||
padding-block: 5px;
|
||||
padding-inline: 0;
|
||||
z-index: 10;
|
||||
border-radius: 0 0 5px 5px;
|
||||
word-wrap: break-word;
|
||||
|
@ -193,11 +209,12 @@
|
|||
|
||||
.list li {
|
||||
display: block;
|
||||
padding: 0 15px;
|
||||
padding-block: 0;
|
||||
padding-inline: 15px;
|
||||
line-height: 2rem;
|
||||
}
|
||||
|
||||
.hover {
|
||||
background-color: var(--scrollbar-color-hover);
|
||||
/* color: white; */
|
||||
color: var(--scrollbar-text-color-hover);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { defineComponent } from 'vue'
|
||||
import { youtubeImageUrlToInvidious } from '../../helpers/api/invidious'
|
||||
import { formatNumber } from '../../helpers/utils'
|
||||
import { parseLocalSubscriberCount } from '../../helpers/api/local'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FtListChannel',
|
||||
|
@ -20,7 +21,9 @@ export default defineComponent({
|
|||
thumbnail: '',
|
||||
channelName: '',
|
||||
subscriberCount: 0,
|
||||
videoCount: '',
|
||||
videoCount: 0,
|
||||
formattedSubscriberCount: '',
|
||||
formattedVideoCount: '',
|
||||
handle: null,
|
||||
description: ''
|
||||
}
|
||||
|
@ -53,14 +56,16 @@ export default defineComponent({
|
|||
|
||||
this.channelName = this.data.name
|
||||
this.id = this.data.id
|
||||
this.subscriberCount = this.data.subscribers != null ? this.data.subscribers.replace(/ subscriber(s)?/, '') : null
|
||||
|
||||
if (this.data.videos === null) {
|
||||
this.videoCount = 0
|
||||
if (this.data.subscribers != null) {
|
||||
this.subscriberCount = parseLocalSubscriberCount(this.data.subscribers.replace(/ subscriber(s)?/, ''))
|
||||
this.formattedSubscriberCount = formatNumber(this.subscriberCount)
|
||||
} else {
|
||||
this.videoCount = formatNumber(this.data.videos)
|
||||
this.subscriberCount = null
|
||||
}
|
||||
|
||||
this.videoCount = this.data.videos ?? 0
|
||||
this.formattedVideoCount = formatNumber(this.videoCount)
|
||||
|
||||
if (this.data.handle) {
|
||||
this.handle = this.data.handle
|
||||
}
|
||||
|
@ -76,8 +81,15 @@ export default defineComponent({
|
|||
|
||||
this.channelName = this.data.author
|
||||
this.id = this.data.authorId
|
||||
this.subscriberCount = formatNumber(this.data.subCount)
|
||||
this.videoCount = formatNumber(this.data.videoCount)
|
||||
this.subscriberCount = this.data.subCount
|
||||
this.formattedSubscriberCount = formatNumber(this.data.subCount)
|
||||
this.handle = this.data.channelHandle
|
||||
if (this.handle != null) {
|
||||
this.videoCount = null
|
||||
} else {
|
||||
this.videoCount = this.data.videoCount
|
||||
this.formattedVideoCount = formatNumber(this.data.videoCount)
|
||||
}
|
||||
this.description = this.data.description
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,12 +30,6 @@
|
|||
</h3>
|
||||
</router-link>
|
||||
<div class="infoLine">
|
||||
<span
|
||||
v-if="subscriberCount !== null && !hideChannelSubscriptions"
|
||||
class="subscriberCount"
|
||||
>
|
||||
{{ subscriberCount }} subscribers -
|
||||
</span>
|
||||
<router-link
|
||||
v-if="handle !== null"
|
||||
class="handle"
|
||||
|
@ -44,10 +38,18 @@
|
|||
{{ handle }}
|
||||
</router-link>
|
||||
<span
|
||||
v-else
|
||||
v-if="subscriberCount !== null && !hideChannelSubscriptions"
|
||||
class="subscriberCount"
|
||||
>
|
||||
<template v-if="handle !== null"> • </template>
|
||||
{{ $tc('Global.Counts.Subscriber Count', subscriberCount, {count: formattedSubscriberCount}) }}
|
||||
</span>
|
||||
<span
|
||||
v-if="handle == null && videoCount != null"
|
||||
class="videoCount"
|
||||
>
|
||||
{{ videoCount }} videos
|
||||
<template v-if="subscriberCount !== null && !hideChannelSubscriptions"> • </template>
|
||||
{{ $tc('Global.Counts.Video Count', videoCount, {count: formattedVideoCount}) }}
|
||||
</span>
|
||||
</div>
|
||||
<p
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
import { defineComponent } from 'vue'
|
||||
import { formatNumber } from '../../helpers/utils'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FtListHashtag',
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
appearance: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
title: '',
|
||||
url: '',
|
||||
channelCount: 0,
|
||||
parsedChannelCount: '',
|
||||
videoCount: 0,
|
||||
parsedVideosCount: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
listType: function () {
|
||||
return this.$store.getters.getListType
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.parseData()
|
||||
},
|
||||
methods: {
|
||||
parseData: function () {
|
||||
this.title = this.data.title
|
||||
this.channelCount = this.data.channelCount
|
||||
this.parsedChannelCount = formatNumber(this.channelCount)
|
||||
this.videoCount = this.data.videoCount
|
||||
this.parsedVideosCount = formatNumber(this.videoCount)
|
||||
this.url = `/hashtag/${encodeURIComponent(this.data.title.substring(1))}`
|
||||
}
|
||||
}
|
||||
})
|
|
@ -0,0 +1,6 @@
|
|||
@use '../../scss-partials/_ft-list-item';
|
||||
|
||||
.hashtagImage {
|
||||
color: var(--primary-text-color);
|
||||
font-size: 150px;
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
<template>
|
||||
<div
|
||||
class="ft-list-hashtag ft-list-item"
|
||||
:class="{
|
||||
list: listType === 'list',
|
||||
grid: listType === 'grid',
|
||||
[appearance]: true
|
||||
}"
|
||||
>
|
||||
<div class="channelThumbnail">
|
||||
<router-link
|
||||
tabindex="-1"
|
||||
aria-hidden="true"
|
||||
:to="url"
|
||||
>
|
||||
<font-awesome-icon
|
||||
class="hashtagImage"
|
||||
:icon="['fas', 'hashtag']"
|
||||
/>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="info">
|
||||
<router-link
|
||||
class="title"
|
||||
:to="url"
|
||||
>
|
||||
<h3 class="h3Title">
|
||||
{{ title }}
|
||||
</h3>
|
||||
</router-link>
|
||||
<div class="infoLine">
|
||||
<span
|
||||
v-if="channelCount"
|
||||
class="channelCount"
|
||||
>
|
||||
{{ $tc('Global.Counts.Channel Count', channelCount, {count: parsedChannelCount}) }}
|
||||
</span>
|
||||
<span
|
||||
v-if="videoCount"
|
||||
class="videoCount"
|
||||
>
|
||||
<template v-if="channelCount"> • </template>
|
||||
{{ $tc('Global.Counts.Video Count', videoCount, {count: parsedVideosCount}) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script src="./ft-list-hashtag.js" />
|
||||
<style scoped lang="scss" src="./ft-list-hashtag.scss" />
|
|
@ -1,7 +1,7 @@
|
|||
.grid {
|
||||
min-height: 264px;
|
||||
min-block-size: 264px;
|
||||
}
|
||||
|
||||
.list {
|
||||
min-height: 131px;
|
||||
min-block-size: 131px;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ import FtListVideo from '../ft-list-video/ft-list-video.vue'
|
|||
import FtListChannel from '../ft-list-channel/ft-list-channel.vue'
|
||||
import FtListPlaylist from '../ft-list-playlist/ft-list-playlist.vue'
|
||||
import FtCommunityPost from '../ft-community-post/ft-community-post.vue'
|
||||
import FtListHashtag from '../ft-list-hashtag/ft-list-hashtag.vue'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FtListLazyWrapper',
|
||||
|
@ -10,7 +11,8 @@ export default defineComponent({
|
|||
'ft-list-video': FtListVideo,
|
||||
'ft-list-channel': FtListChannel,
|
||||
'ft-list-playlist': FtListPlaylist,
|
||||
'ft-community-post': FtCommunityPost
|
||||
'ft-community-post': FtCommunityPost,
|
||||
'ft-list-hashtag': FtListHashtag,
|
||||
},
|
||||
props: {
|
||||
data: {
|
||||
|
|
|
@ -34,6 +34,11 @@
|
|||
:appearance="appearance"
|
||||
:data="data"
|
||||
/>
|
||||
<ft-list-hashtag
|
||||
v-else-if="data.type === 'hashtag'"
|
||||
:appearance="appearance"
|
||||
:data="data"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -42,6 +42,18 @@ export default defineComponent({
|
|||
|
||||
defaultPlayback: function () {
|
||||
return this.$store.getters.getDefaultPlayback
|
||||
},
|
||||
|
||||
blurThumbnails: function () {
|
||||
return this.$store.getters.getBlurThumbnails
|
||||
},
|
||||
|
||||
blurThumbnailsStyle: function () {
|
||||
return this.blurThumbnails ? 'blur(20px)' : null
|
||||
},
|
||||
|
||||
thumbnailPreference: function () {
|
||||
return this.$store.getters.getThumbnailPreference
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
|
@ -67,7 +79,11 @@ export default defineComponent({
|
|||
|
||||
parseInvidiousData: function () {
|
||||
this.title = this.data.title
|
||||
this.thumbnail = this.data.playlistThumbnail.replace('https://i.ytimg.com', this.currentInvidiousInstance).replace('hqdefault', 'mqdefault')
|
||||
if (this.thumbnailPreference === 'hidden') {
|
||||
this.thumbnail = require('../../assets/img/thumbnail_placeholder.svg')
|
||||
} else {
|
||||
this.thumbnail = this.data.playlistThumbnail.replace('https://i.ytimg.com', this.currentInvidiousInstance).replace('hqdefault', 'mqdefault')
|
||||
}
|
||||
this.channelName = this.data.author
|
||||
this.channelId = this.data.authorId
|
||||
this.playlistId = this.data.playlistId
|
||||
|
@ -80,7 +96,11 @@ export default defineComponent({
|
|||
|
||||
parseLocalData: function () {
|
||||
this.title = this.data.title
|
||||
this.thumbnail = this.data.thumbnail
|
||||
if (this.thumbnailPreference === 'hidden') {
|
||||
this.thumbnail = require('../../assets/img/thumbnail_placeholder.svg')
|
||||
} else {
|
||||
this.thumbnail = this.data.thumbnail
|
||||
}
|
||||
this.channelName = this.data.channelName
|
||||
this.channelId = this.data.channelId
|
||||
this.playlistId = this.data.playlistId
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
alt=""
|
||||
:src="thumbnail"
|
||||
class="thumbnailImage"
|
||||
:style="{filter: blurThumbnailsStyle}"
|
||||
>
|
||||
</router-link>
|
||||
<div
|
||||
|
|
|
@ -78,8 +78,12 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
computed: {
|
||||
historyCache: function () {
|
||||
return this.$store.getters.getHistoryCache
|
||||
historyEntry: function () {
|
||||
return this.$store.getters.getHistoryCacheById[this.id]
|
||||
},
|
||||
|
||||
historyEntryExists: function () {
|
||||
return typeof this.historyEntry !== 'undefined'
|
||||
},
|
||||
|
||||
listType: function () {
|
||||
|
@ -90,6 +94,14 @@ export default defineComponent({
|
|||
return this.$store.getters.getThumbnailPreference
|
||||
},
|
||||
|
||||
blurThumbnails: function () {
|
||||
return this.$store.getters.getBlurThumbnails
|
||||
},
|
||||
|
||||
blurThumbnailsStyle: function () {
|
||||
return this.blurThumbnails ? 'blur(20px)' : null
|
||||
},
|
||||
|
||||
backendPreference: function () {
|
||||
return this.$store.getters.getBackendPreference
|
||||
},
|
||||
|
@ -231,6 +243,8 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
thumbnail: function () {
|
||||
if (this.thumbnailPreference) return require('../../assets/img/thumbnail_placeholder.svg')
|
||||
|
||||
let baseUrl = ''
|
||||
let baseData = ''
|
||||
let backendPreference = this.backendPreference
|
||||
|
@ -330,12 +344,6 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
historyIndex: function() {
|
||||
return this.historyCache.findIndex((video) => {
|
||||
return video.videoId === this.id
|
||||
})
|
||||
},
|
||||
|
||||
playlistIdFinal: function () {
|
||||
if (this.playlistId) {
|
||||
return this.playlistId
|
||||
|
@ -344,12 +352,8 @@ export default defineComponent({
|
|||
// Get playlist ID from history ONLY if option enabled
|
||||
if (!this.showVideoWithLastViewedPlaylist) { return }
|
||||
if (!this.saveVideoHistoryWithLastViewedPlaylist) { return }
|
||||
const historyIndex = this.historyIndex
|
||||
if (historyIndex === -1) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
return this.historyCache[historyIndex].lastViewedPlaylistId
|
||||
return this.historyEntry?.lastViewedPlaylistId
|
||||
},
|
||||
|
||||
currentLocale: function () {
|
||||
|
@ -365,7 +369,7 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
watch: {
|
||||
historyIndex() {
|
||||
historyEntry() {
|
||||
this.checkIfWatched()
|
||||
},
|
||||
},
|
||||
|
@ -468,8 +472,8 @@ export default defineComponent({
|
|||
this.channelName = this.data.author ?? null
|
||||
this.channelId = this.data.authorId ?? null
|
||||
|
||||
if (this.data.isRSS && this.historyIndex !== -1) {
|
||||
this.duration = formatDurationAsTimestamp(this.historyCache[this.historyIndex].lengthSeconds)
|
||||
if (this.data.isRSS && this.historyEntryExists) {
|
||||
this.duration = formatDurationAsTimestamp(this.historyEntry.lengthSeconds)
|
||||
} else {
|
||||
this.duration = formatDurationAsTimestamp(this.data.lengthSeconds)
|
||||
}
|
||||
|
@ -555,22 +559,26 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
checkIfWatched: function () {
|
||||
const historyIndex = this.historyIndex
|
||||
|
||||
if (historyIndex !== -1) {
|
||||
if (this.historyEntryExists) {
|
||||
this.watched = true
|
||||
|
||||
const historyEntry = this.historyEntry
|
||||
|
||||
if (this.saveWatchedProgress) {
|
||||
// For UX consistency, no progress reading if writing disabled
|
||||
this.watchProgress = this.historyCache[historyIndex].watchProgress
|
||||
this.watchProgress = historyEntry.watchProgress
|
||||
}
|
||||
|
||||
if (this.historyCache[historyIndex].published !== '') {
|
||||
const videoPublished = this.historyCache[historyIndex].published
|
||||
if (historyEntry.published !== '') {
|
||||
const videoPublished = historyEntry.published
|
||||
const videoPublishedDate = new Date(videoPublished)
|
||||
this.publishedText = videoPublishedDate.toLocaleDateString()
|
||||
} else {
|
||||
this.publishedText = ''
|
||||
}
|
||||
} else {
|
||||
this.watched = false
|
||||
this.watchProgress = 0
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -587,7 +595,6 @@ export default defineComponent({
|
|||
watchProgress: 0,
|
||||
timeWatched: new Date().getTime(),
|
||||
isLive: false,
|
||||
paid: false,
|
||||
type: 'video'
|
||||
}
|
||||
this.updateHistory(videoData)
|
||||
|
@ -617,8 +624,7 @@ export default defineComponent({
|
|||
lengthSeconds: this.data.lengthSeconds,
|
||||
timeAdded: new Date().getTime(),
|
||||
isLive: false,
|
||||
paid: false,
|
||||
type: 'video'
|
||||
type: 'video',
|
||||
}
|
||||
|
||||
const payload = {
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
:src="thumbnail"
|
||||
class="thumbnailImage"
|
||||
alt=""
|
||||
:style="{filter: blurThumbnailsStyle}"
|
||||
>
|
||||
</router-link>
|
||||
<div
|
||||
|
@ -51,6 +52,7 @@
|
|||
:title="$t('Video.Save Video')"
|
||||
:icon="['fas', 'star']"
|
||||
class="favoritesIcon"
|
||||
:class="{ favorited: favoriteIconTheme === 'base favorite'}"
|
||||
:theme="favoriteIconTheme"
|
||||
:padding="appearance === `watchPlaylistItem` ? 5 : 6"
|
||||
:size="appearance === `watchPlaylistItem` ? 14 : 18"
|
||||
|
@ -65,7 +67,7 @@
|
|||
<div
|
||||
v-if="watched"
|
||||
class="watchedProgressBar"
|
||||
:style="{width: progressPercentage + '%'}"
|
||||
:style="{inlineSize: progressPercentage + '%'}"
|
||||
/>
|
||||
</div>
|
||||
<div class="info">
|
||||
|
@ -89,9 +91,10 @@
|
|||
<span>{{ channelName }}</span>
|
||||
</router-link>
|
||||
<template v-if="!isLive && !isUpcoming && !isPremium && !hideViews">
|
||||
<span class="viewCount"><template v-if="channelId !== null"> •</template> {{ parsedViewCount }} </span>
|
||||
<span v-if="viewCount === 1">{{ $t("Video.View").toLowerCase() }}</span>
|
||||
<span v-else>{{ $t("Video.Views").toLowerCase() }}</span>
|
||||
<span class="viewCount">
|
||||
<template v-if="channelId !== null"> • </template>
|
||||
{{ $tc('Global.Counts.View Count', viewCount, {count: parsedViewCount}) }}
|
||||
</span>
|
||||
</template>
|
||||
<span
|
||||
v-if="uploadedTime !== '' && !isLive && !inHistory"
|
||||
|
@ -104,7 +107,7 @@
|
|||
<span
|
||||
v-if="isLive && !hideViews"
|
||||
class="viewCount"
|
||||
> • {{ parsedViewCount }} {{ $t("Video.Watching").toLowerCase() }}</span>
|
||||
> • {{ $tc('Global.Counts.Watching Count', viewCount, {count: parsedViewCount}) }}</span>
|
||||
</div>
|
||||
<ft-icon-button
|
||||
class="optionsButton"
|
||||
|
|
|
@ -19,14 +19,14 @@
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.fullscreen {
|
||||
height: 85vh;
|
||||
block-size: 85vh;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -36,21 +36,22 @@
|
|||
*/
|
||||
|
||||
.spinner {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
inline-size: 40px;
|
||||
block-size: 40px;
|
||||
position: relative;
|
||||
margin: 100px auto;
|
||||
margin-block: 100px;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.double-bounce1,
|
||||
.double-bounce2 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
border-radius: 50%;
|
||||
opacity: 0.6;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
inset-block-start: 0;
|
||||
inset-inline-start: 0;
|
||||
background-color: var(--primary-color);
|
||||
|
||||
-webkit-animation: sk-bounce 2.0s infinite ease-in-out;
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
*/
|
||||
margin: 4px;
|
||||
padding: 16px;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 5px;
|
||||
padding-block: 3px 5px;
|
||||
padding-inline: 16px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,.1);
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
|
@ -19,13 +19,13 @@
|
|||
}
|
||||
|
||||
.message {
|
||||
margin-right: 25px;
|
||||
margin-inline-end: 25px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bannerIcon {
|
||||
position: absolute;
|
||||
top: 35%;
|
||||
right: 10px;
|
||||
inset-block-start: 35%;
|
||||
inset-inline-end: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
.bubblePadding {
|
||||
width: 100px;
|
||||
height: 115px;
|
||||
padding: 10px 10px 30px 10px;
|
||||
inline-size: 100px;
|
||||
block-size: 115px;
|
||||
padding-block: 10px 30px;
|
||||
padding-inline: 10px;
|
||||
cursor: pointer;
|
||||
-webkit-transition: background 0.2s ease-out;
|
||||
-moz-transition: background 0.2s ease-out;
|
||||
|
@ -11,15 +12,17 @@
|
|||
|
||||
.bubblePadding:hover {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
-moz-transition: background 0.2s ease-in;
|
||||
-o-transition: background 0.2s ease-in;
|
||||
transition: background 0.2s ease-in;
|
||||
}
|
||||
|
||||
.bubble {
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
margin: 20px auto 5px auto;
|
||||
inline-size: 70px;
|
||||
block-size: 70px;
|
||||
margin-block: 20px 5px;
|
||||
margin-inline: auto;
|
||||
border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
}
|
||||
|
@ -28,7 +31,8 @@
|
|||
font-size: 35px;
|
||||
line-height: 1em;
|
||||
text-align: center;
|
||||
padding: 17.5px 0;
|
||||
padding-block: 17.5px;
|
||||
padding-inline: 0;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.card {
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 15px;
|
||||
inline-size: 85%;
|
||||
margin-block: 0 15px;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
v-for="(channel, index) in subscriptions"
|
||||
:key="index"
|
||||
:ref="`channel-${index}`"
|
||||
:channel-id="channel.id"
|
||||
:channel-name="channel.name"
|
||||
:channel-thumbnail="channel.thumbnail"
|
||||
:show-selected="true"
|
||||
role="button"
|
||||
@click="handleChannelClick(index)"
|
||||
/>
|
||||
</ft-flex-box>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.card {
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 15px;
|
||||
inline-size: 85%;
|
||||
margin-block: 0 15px;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.message {
|
||||
|
@ -9,22 +9,22 @@
|
|||
}
|
||||
|
||||
.profileName {
|
||||
width: 400px;
|
||||
inline-size: 400px;
|
||||
}
|
||||
|
||||
.bottomMargin {
|
||||
margin-bottom: 30px;
|
||||
margin-block-end: 30px;
|
||||
}
|
||||
|
||||
.colorOptions {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 30px;
|
||||
max-inline-size: 1000px;
|
||||
margin-block: 0 30px;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.colorOption {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
inline-size: 100px;
|
||||
block-size: 100px;
|
||||
margin: 10px;
|
||||
cursor: pointer;
|
||||
border-radius: 50%;
|
||||
|
@ -35,13 +35,14 @@
|
|||
font-size: 50px;
|
||||
line-height: 1em;
|
||||
text-align: center;
|
||||
padding: 25px 0;
|
||||
padding-block: 25px;
|
||||
padding-inline: 0px;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 680px) {
|
||||
.card {
|
||||
width: 90%;
|
||||
inline-size: 90%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.card {
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 30px;
|
||||
inline-size: 85%;
|
||||
margin-block: 0 30px;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.selected {
|
||||
|
@ -9,7 +9,7 @@
|
|||
}
|
||||
|
||||
:deep(.select-label) {
|
||||
width: 95%;
|
||||
inline-size: 95%;
|
||||
}
|
||||
|
||||
:deep(.select) {
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
v-for="(channel, index) in channels"
|
||||
:key="index"
|
||||
:ref="`all-channels-${index}`"
|
||||
:channel-id="channel.id"
|
||||
:channel-name="channel.name"
|
||||
:channel-thumbnail="channel.thumbnail"
|
||||
:show-selected="true"
|
||||
role="button"
|
||||
@click="handleChannelClick(index)"
|
||||
/>
|
||||
</ft-flex-box>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.colorOption {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
inline-size: 40px;
|
||||
block-size: 40px;
|
||||
cursor: pointer;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
|
@ -24,24 +24,24 @@
|
|||
.profileList {
|
||||
display: inline;
|
||||
position: absolute;
|
||||
top: 60px;
|
||||
right: 10px;
|
||||
min-width: 250px;
|
||||
height: 400px;
|
||||
inset-block-start: 60px;
|
||||
inset-inline-end: 10px;
|
||||
min-inline-size: 250px;
|
||||
block-size: 400px;
|
||||
padding: 5px;
|
||||
background-color: var(--card-bg-color);
|
||||
box-shadow: 0 0 4px var(--scrollbar-color-hover);
|
||||
}
|
||||
|
||||
.profileWrapper {
|
||||
margin-top: 60px;
|
||||
height: 340px;
|
||||
margin-block-start: 60px;
|
||||
block-size: 340px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.profile {
|
||||
cursor: pointer;
|
||||
height: 50px;
|
||||
block-size: 50px;
|
||||
-webkit-transition: background 0.2s ease-out;
|
||||
-moz-transition: background 0.2s ease-out;
|
||||
-o-transition: background 0.2s ease-out;
|
||||
|
@ -50,34 +50,35 @@
|
|||
|
||||
.profile:hover {
|
||||
background-color: var(--side-nav-hover-color);
|
||||
color: var(--side-nav-hover-text-color);
|
||||
-moz-transition: background 0.2s ease-in;
|
||||
-o-transition: background 0.2s ease-in;
|
||||
transition: background 0.2s ease-in;
|
||||
}
|
||||
|
||||
.profile .colorOption {
|
||||
float: left;
|
||||
float: var(--float-left-ltr-rtl-value);
|
||||
position: relative;
|
||||
bottom: 5px;
|
||||
inset-block-end: 5px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.profileName {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 50px;
|
||||
padding-right: 10px;
|
||||
block-size: 50px;
|
||||
padding-inline-end: 10px;
|
||||
}
|
||||
|
||||
.profileListTitle {
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
left: 10px;
|
||||
inset-inline-start: 10px;
|
||||
}
|
||||
|
||||
.profileSettings {
|
||||
float: right;
|
||||
float: var(--float-right-ltr-rtl-value);
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 5px;
|
||||
inset-block-start: 10px;
|
||||
inset-inline-end: 5px;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
.progressBar {
|
||||
position: fixed;
|
||||
height: 3px;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
block-size: 3px;
|
||||
inset-block-end: 0px;
|
||||
inset-inline-start: 0px;
|
||||
background-color: var(--primary-color);
|
||||
z-index: 1;
|
||||
transition: width 0.5s;
|
||||
transition: inline-size 0.5s;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div
|
||||
class="progressBar"
|
||||
:style="{ width: progressBarPercentage + '%' }"
|
||||
:style="{ inlineSize: progressBarPercentage + '%' }"
|
||||
/>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
.prompt {
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
inset-block-start: 0px;
|
||||
inset-inline-start: 0px;
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
z-index: 10;
|
||||
padding: 15px;
|
||||
|
@ -13,17 +13,22 @@
|
|||
justify-content: center;
|
||||
}
|
||||
|
||||
.promptCard {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
.promptCard.autosize {
|
||||
box-sizing: border-box;
|
||||
margin: 0 auto;
|
||||
max-width: 95%;
|
||||
margin-block: 0;
|
||||
margin-inline: auto;
|
||||
max-inline-size: 95%;
|
||||
}
|
||||
|
||||
.promptCard:not(.autosize) {
|
||||
width: 95%;
|
||||
inline-size: 95%;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
left: 2.5%;
|
||||
inset-inline-start: 2.5%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
pure-checkbox input[type="checkbox"], .pure-radiobutton input[type="checkbox"], .pure-checkbox input[type="radio"], .pure-radiobutton input[type="radio"] {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
block-size: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
inline-size: 1px;
|
||||
}
|
||||
|
||||
.pure-checkbox input[type="checkbox"]:focus + label:before, .pure-radiobutton input[type="checkbox"]:focus + label:before, .pure-checkbox input[type="radio"]:focus + label:before, .pure-radiobutton input[type="radio"]:focus + label:before, .pure-checkbox input[type="checkbox"]:hover + label:before, .pure-radiobutton input[type="checkbox"]:hover + label:before, .pure-checkbox input[type="radio"]:hover + label:before, .pure-radiobutton input[type="radio"]:hover + label:before {
|
||||
|
@ -17,13 +17,13 @@ pure-checkbox input[type="checkbox"], .pure-radiobutton input[type="checkbox"],
|
|||
|
||||
.pure-checkbox input[type="checkbox"] + label, .pure-radiobutton input[type="checkbox"] + label, .pure-checkbox input[type="radio"] + label, .pure-radiobutton input[type="radio"] + label {
|
||||
position: relative;
|
||||
padding-left: 2em;
|
||||
padding-inline-start: 2em;
|
||||
vertical-align: middle;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
margin-bottom: -20px;
|
||||
margin-block-end: -20px;
|
||||
}
|
||||
|
||||
.pure-checkbox input[type="checkbox"] + label:before, .pure-radiobutton input[type="checkbox"] + label:before, .pure-checkbox input[type="radio"] + label:before, .pure-radiobutton input[type="radio"] + label:before {
|
||||
|
@ -31,11 +31,11 @@ pure-checkbox input[type="checkbox"], .pure-radiobutton input[type="checkbox"],
|
|||
content: '';
|
||||
color: var(--primary-color);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
margin-top: -9px;
|
||||
inset-block-start: 50%;
|
||||
inset-inline-start: 0;
|
||||
inline-size: 14px;
|
||||
block-size: 14px;
|
||||
margin-block-start: -9px;
|
||||
border: 2px solid var(--primary-color);
|
||||
text-align: center;
|
||||
transition: all 0.4s ease;
|
||||
|
@ -46,11 +46,11 @@ pure-checkbox input[type="checkbox"], .pure-radiobutton input[type="checkbox"],
|
|||
content: '';
|
||||
background-color: var(--primary-color);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 4px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin-top: -5px;
|
||||
inset-block-start: 50%;
|
||||
inset-inline-start: 4px;
|
||||
inline-size: 10px;
|
||||
block-size: 10px;
|
||||
margin-block-start: -5px;
|
||||
transform: scale(0);
|
||||
transform-origin: 50%;
|
||||
transition: transform 200ms ease-out;
|
||||
|
@ -64,11 +64,11 @@ pure-checkbox input[type="checkbox"], .pure-radiobutton input[type="checkbox"],
|
|||
|
||||
.pure-checkbox input[type="checkbox"] + label:after, .pure-radiobutton input[type="checkbox"] + label:after {
|
||||
background-color: transparent;
|
||||
top: 50%;
|
||||
left: 4px;
|
||||
width: 8px;
|
||||
height: 3px;
|
||||
margin-top: -4px;
|
||||
inset-block-start: 50%;
|
||||
inset-inline-start: 4px;
|
||||
inline-size: 8px;
|
||||
block-size: 3px;
|
||||
margin-block-start: -4px;
|
||||
border-style: solid;
|
||||
border-width: 0 0 3px 3px;
|
||||
border-image: none;
|
||||
|
@ -103,5 +103,5 @@ borderscale { 50% {
|
|||
}
|
||||
|
||||
.radioTitle {
|
||||
margin-bottom: -20px;
|
||||
margin-block-end: -20px;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
.searchFilterInner {
|
||||
max-width: 800px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-inline-size: 800px;
|
||||
margin-inline-start: auto;
|
||||
margin-inline-end: auto;
|
||||
|
||||
padding: 20px 20px 70px 20px;
|
||||
max-height: 410px;
|
||||
padding-block: 20px 70px;
|
||||
padding-inline: 20px;
|
||||
max-block-size: 410px;
|
||||
overflow-y: auto;
|
||||
|
||||
background-color: var(--card-bg-color);
|
||||
|
@ -22,12 +23,13 @@
|
|||
}
|
||||
|
||||
.radioFlexBox {
|
||||
max-width: 1000px;
|
||||
margin: 0 auto;
|
||||
max-inline-size: 1000px;
|
||||
margin-block: 0;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
.searchRadio {
|
||||
border-right: 0;
|
||||
border-inline-end: 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,9 +23,10 @@
|
|||
/* select starting stylings ------------------------------*/
|
||||
.select {
|
||||
position: relative;
|
||||
width: 200px;
|
||||
padding: 0px 10px 10px 0;
|
||||
margin-top: 30px;
|
||||
inline-size: 200px;
|
||||
padding-block: 0 10px;
|
||||
padding-inline: 0 10px;
|
||||
margin-block-start: 30px;
|
||||
}
|
||||
|
||||
.disabled, .disabled + svg.iconSelect {
|
||||
|
@ -38,8 +39,9 @@
|
|||
font-family: inherit;
|
||||
background-color: transparent;
|
||||
color: var(--primary-text-color);
|
||||
width: 240px;
|
||||
padding: 10px 10px 10px 0;
|
||||
inline-size: 240px;
|
||||
padding-block: 10px;
|
||||
padding-inline: 0 10px;
|
||||
font-size: 18px;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
|
@ -60,26 +62,26 @@
|
|||
appearance: none;
|
||||
-webkit-appearance:none;
|
||||
text-overflow: ellipsis;
|
||||
padding-right: 1.1rem;
|
||||
padding-inline-end: 1.1rem;
|
||||
}
|
||||
|
||||
.iconSelect {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 15px;
|
||||
inset-block-start: 10px;
|
||||
inset-inline-end: 15px;
|
||||
/* Styling the down arrow */
|
||||
padding: 0;
|
||||
content: '';
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-inline-start: 6px solid transparent;
|
||||
border-inline-end: 6px solid transparent;
|
||||
pointer-events: none;
|
||||
color: var(--tertiary-text-color);
|
||||
}
|
||||
|
||||
.selectTooltip {
|
||||
position: absolute;
|
||||
top: -20px;
|
||||
right: 17px;
|
||||
inset-block-start: -20px;
|
||||
inset-inline-end: 17px;
|
||||
}
|
||||
|
||||
|
||||
|
@ -88,8 +90,8 @@
|
|||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 10px;
|
||||
inset-inline-start: 0;
|
||||
inset-block-start: 10px;
|
||||
transition: 0.2s ease all;
|
||||
color: var(--tertiary-text-color);
|
||||
}
|
||||
|
@ -97,7 +99,7 @@
|
|||
/* active state */
|
||||
.select-text:focus ~ .select-label, .select-text:valid ~ .select-label {
|
||||
color: var(--accent-color);
|
||||
top: -20px;
|
||||
inset-block-start: -20px;
|
||||
transition: 0.2s ease all;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
@ -106,62 +108,62 @@
|
|||
.select-bar {
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 200px;
|
||||
inline-size: 200px;
|
||||
}
|
||||
|
||||
.select-bar:before, .select-bar:after {
|
||||
content: '';
|
||||
height: 2px;
|
||||
width: 0;
|
||||
bottom: 1px;
|
||||
block-size: 2px;
|
||||
inline-size: 0;
|
||||
inset-block-end: 1px;
|
||||
position: absolute;
|
||||
background: var(--accent-color);
|
||||
transition: 0.2s ease all;
|
||||
}
|
||||
|
||||
.select-bar:before {
|
||||
left: 50%;
|
||||
inset-inline-start: 50%;
|
||||
}
|
||||
|
||||
.select-bar:after {
|
||||
right: 50%;
|
||||
inset-inline-end: 50%;
|
||||
}
|
||||
|
||||
/* active state */
|
||||
.select-text:focus ~ .select-bar:before, .select-text:focus ~ .select-bar:after {
|
||||
width: 50%;
|
||||
inline-size: 50%;
|
||||
}
|
||||
|
||||
/* HIGHLIGHTER ================================== */
|
||||
.select-highlight {
|
||||
position: absolute;
|
||||
height: 60%;
|
||||
width: 100px;
|
||||
top: 25%;
|
||||
left: 0;
|
||||
block-size: 60%;
|
||||
inline-size: 100px;
|
||||
inset-block-start: 25%;
|
||||
inset-inline-start: 0;
|
||||
pointer-events: none;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1000px) {
|
||||
.select .select-text {
|
||||
max-width: 240px;
|
||||
max-inline-size: 240px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
.select {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
.select .select-text {
|
||||
display:block;
|
||||
max-width: 95%;
|
||||
max-inline-size: 95%;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 680px) {
|
||||
.select {
|
||||
padding: 0px;
|
||||
margin-right: -15px;
|
||||
}
|
||||
margin-inline-end: -15px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,25 +1,27 @@
|
|||
.settingsSection {
|
||||
background-color: var(--card-bg-color);
|
||||
margin: 0 auto;
|
||||
width: 85%;
|
||||
margin-block: 0;
|
||||
margin-inline: auto;
|
||||
inline-size: 85%;
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
&[open] {
|
||||
padding-bottom: 15px;
|
||||
padding-block-end: 15px;
|
||||
}
|
||||
|
||||
> div {
|
||||
box-sizing: border-box;
|
||||
padding: 0 20px;
|
||||
width: 100%;
|
||||
padding-block: 0;
|
||||
padding-inline: 20px;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
> div:not(:last-child, .ft-flex-box) {
|
||||
@media only screen and (max-width: 800px) {
|
||||
margin-bottom: 20px;
|
||||
margin-block-end: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,9 +29,9 @@
|
|||
.sectionLine {
|
||||
background-color: var(--primary-color);
|
||||
border: 0;
|
||||
height: 2px;
|
||||
margin-top: -1px;
|
||||
width: 100%;
|
||||
block-size: 2px;
|
||||
margin-block-start: -1px;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.sectionHeader {
|
||||
|
@ -41,7 +43,7 @@
|
|||
.sectionTitle {
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
margin-left: 2%;
|
||||
margin-inline-start: 2%;
|
||||
}
|
||||
|
||||
:deep(.switchGrid) {
|
||||
|
@ -64,7 +66,7 @@
|
|||
:deep(.switchColumn) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-items: start;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
:deep(.center) {
|
||||
|
@ -87,32 +89,34 @@
|
|||
.settingsSection {
|
||||
> div {
|
||||
:deep(.text.bottom) {
|
||||
left: -85px;
|
||||
inset-inline-start: -85px;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.switch-ctn.containsTooltip) {
|
||||
left: -10px;
|
||||
margin-right: 5px;
|
||||
padding: 0 10px;
|
||||
inset-inline-start: -10px;
|
||||
margin-inline-end: 5px;
|
||||
padding-block: 0;
|
||||
padding-inline: 10px;
|
||||
}
|
||||
|
||||
:not(.select, .selectLabel) {
|
||||
> :deep(.tooltip) {
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
right: -25px;
|
||||
top: 12px;
|
||||
inset-inline-end: -25px;
|
||||
inset-block-start: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.settingsFlexStart460px :deep(.tooltip) {
|
||||
right: 0;
|
||||
top: -2px;
|
||||
inset-inline-end: 0;
|
||||
inset-block-start: -2px;
|
||||
}
|
||||
|
||||
:deep(.switch-ctn) {
|
||||
margin: 10px 7px;
|
||||
margin-block: 10px;
|
||||
margin-inline: 7px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,34 +3,41 @@
|
|||
grid-auto-flow: column;
|
||||
grid-template-rows: auto auto;
|
||||
padding: 12px;
|
||||
width: max-content;
|
||||
inline-size: max-content;
|
||||
|
||||
.header {
|
||||
color: var(--primary-text-color);
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
margin: 4px 0 8px;
|
||||
margin-block: 4px 8px;
|
||||
margin-inline: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-inline-size: min-content;
|
||||
min-inline-size: 150px;
|
||||
|
||||
.action {
|
||||
padding: 6px;
|
||||
white-space: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.divider {
|
||||
background: var(--tertiary-text-color);
|
||||
grid-row: span 3;
|
||||
margin: 0 12px;
|
||||
width: 1px;
|
||||
margin-block: 0;
|
||||
margin-inline: 12px;
|
||||
inline-size: 1px;
|
||||
}
|
||||
|
||||
.youtubeLogo {
|
||||
height: 18px;
|
||||
width: auto;
|
||||
block-size: 18px;
|
||||
inline-size: auto;
|
||||
|
||||
@at-root {
|
||||
.dark &,
|
||||
|
@ -44,6 +51,7 @@
|
|||
|
||||
/* no changes for the dracula theme */
|
||||
|
||||
.pastelPink &,
|
||||
.light &,
|
||||
.system[data-system-theme*='light'] & {
|
||||
filter: invert(0.87);
|
||||
|
@ -52,26 +60,26 @@
|
|||
}
|
||||
|
||||
.invidious {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
letter-spacing: -0.4px;
|
||||
|
||||
.invidiousLogo {
|
||||
background-size: cover;
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
margin-right: 2px;
|
||||
width: 20px;
|
||||
block-size: 20px;
|
||||
margin-inline-end: 2px;
|
||||
inline-size: 20px;
|
||||
|
||||
@at-root {
|
||||
.dark &,
|
||||
.black &,
|
||||
.dracula &,
|
||||
.CatppuccinMocha &,
|
||||
.hotPink &,
|
||||
.system[data-system-theme*='dark'] & {
|
||||
background-image: url('../../assets/img/invidious-logo-dark.svg');
|
||||
}
|
||||
|
||||
.pastelPink &,
|
||||
.light &,
|
||||
.system[data-system-theme*='light'] & {
|
||||
background-image: url('../../assets/img/invidious-logo-light.svg');
|
||||
|
@ -80,3 +88,25 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 450px) {
|
||||
.shareLinks {
|
||||
grid-auto-flow: row;
|
||||
margin-inline: auto;
|
||||
justify-items: center;
|
||||
max-inline-size: max-content;
|
||||
|
||||
.header.invidious {
|
||||
margin-block-start: 20px;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
max-inline-size: min-content;
|
||||
min-inline-size: 180px;
|
||||
}
|
||||
|
||||
.divider {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,250 +1,256 @@
|
|||
.pure-material-slider {
|
||||
--pure-material-safari-helper1: var(--accent-color-opacity1);
|
||||
--pure-material-safari-helper2: var(--accent-color-opacity2);
|
||||
--pure-material-safari-helper3: var(--accent-color-opacity3);
|
||||
--pure-material-safari-helper4: var(--accent-color-opacity4);
|
||||
display: inline-block;
|
||||
width: 380px;
|
||||
color: rgba(var(--primary-text-color), 0.87);
|
||||
font-family: var(--pure-material-font, "Roboto", "Segoe UI", BlinkMacSystemFont, system-ui, -apple-system);
|
||||
font-size: 16px;
|
||||
line-height: 1.5;
|
||||
padding: 5px;
|
||||
margin: 12px 8px;
|
||||
--pure-material-safari-helper1: var(--accent-color-opacity1);
|
||||
--pure-material-safari-helper2: var(--accent-color-opacity2);
|
||||
--pure-material-safari-helper3: var(--accent-color-opacity3);
|
||||
--pure-material-safari-helper4: var(--accent-color-opacity4);
|
||||
display: inline-block;
|
||||
inline-size: 380px;
|
||||
color: rgba(var(--primary-text-color), 0.87);
|
||||
font-family: var(--pure-material-font, "Roboto", "Segoe UI", BlinkMacSystemFont, system-ui, -apple-system);
|
||||
font-size: 16px;
|
||||
line-height: 1.5;
|
||||
padding: 5px;
|
||||
margin-block: 12px;
|
||||
margin-inline: 8px;
|
||||
}
|
||||
|
||||
/* Input */
|
||||
.pure-material-slider > input {
|
||||
-webkit-appearance: none;
|
||||
position: relative;
|
||||
top: 24px;
|
||||
display: block;
|
||||
margin: 0 0 -36px;
|
||||
width: 100%;
|
||||
height: 36px;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
position: relative;
|
||||
inset-block-start: 24px;
|
||||
display: block;
|
||||
margin-block: 0 -36px;
|
||||
margin-inline: 0;
|
||||
inline-size: 100%;
|
||||
block-size: 36px;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Without Span */
|
||||
.pure-material-slider > input:last-child {
|
||||
position: static;
|
||||
margin: 0;
|
||||
position: static;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Span */
|
||||
.pure-material-slider > span {
|
||||
display: inline-block;
|
||||
margin-bottom: 36px;
|
||||
display: inline-block;
|
||||
margin-block-end: 36px;
|
||||
}
|
||||
|
||||
/* Focus */
|
||||
.pure-material-slider > input:focus {
|
||||
outline: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* Disabled */
|
||||
.pure-material-slider > input:disabled {
|
||||
cursor: default;
|
||||
opacity: 0.38;
|
||||
cursor: default;
|
||||
opacity: 0.38;
|
||||
}
|
||||
|
||||
.pure-material-slider > input:disabled + span {
|
||||
opacity: 0.38;
|
||||
opacity: 0.38;
|
||||
}
|
||||
|
||||
/* Webkit | Track */
|
||||
.pure-material-slider > input::-webkit-slider-runnable-track {
|
||||
margin: 17px 0;
|
||||
border-radius: 1px;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: var(--accent-color-opacity4);
|
||||
margin-block: 17px;
|
||||
margin-inline: 0;
|
||||
border-radius: 1px;
|
||||
inline-size: 100%;
|
||||
block-size: 2px;
|
||||
background-color: var(--accent-color-opacity4);
|
||||
}
|
||||
|
||||
/* Webkit | Thumb */
|
||||
.pure-material-slider > input::-webkit-slider-thumb {
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
height: 2px;
|
||||
width: 2px;
|
||||
background-color: var(--accent-color);
|
||||
transform: scale(6, 6);
|
||||
transition: box-shadow 0.2s;
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
block-size: 2px;
|
||||
inline-size: 2px;
|
||||
background-color: var(--accent-color);
|
||||
transform: scale(6, 6);
|
||||
transition: box-shadow 0.2s;
|
||||
}
|
||||
|
||||
/* Webkit | Hover, Focus */
|
||||
.pure-material-slider:hover > input::-webkit-slider-thumb {
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper1);
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper1);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:focus::-webkit-slider-thumb {
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper2);
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper2);
|
||||
}
|
||||
|
||||
.pure-material-slider:hover > input:focus::-webkit-slider-thumb {
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper3);
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper3);
|
||||
}
|
||||
|
||||
/* Webkit | Active */
|
||||
.pure-material-slider > input:active::-webkit-slider-thumb {
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper4) !important;
|
||||
box-shadow: 0 0 0 2px var(--pure-material-safari-helper4) !important;
|
||||
}
|
||||
|
||||
/* Webkit | Disabled */
|
||||
.pure-material-slider > input:disabled::-webkit-slider-runnable-track {
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:disabled::-webkit-slider-thumb {
|
||||
background-color: rgb(var(--pure-material-onsurface-rgb, 0, 0, 0));
|
||||
color: rgb(var(--pure-material-surface-rgb, 255, 255, 255)); /* Safari */
|
||||
box-shadow: 0 0 0 1px rgb(var(--pure-material-surface-rgb, 255, 255, 255)) !important;
|
||||
transform: scale(4, 4);
|
||||
background-color: rgb(var(--pure-material-onsurface-rgb, 0, 0, 0));
|
||||
color: rgb(var(--pure-material-surface-rgb, 255, 255, 255)); /* Safari */
|
||||
box-shadow: 0 0 0 1px rgb(var(--pure-material-surface-rgb, 255, 255, 255)) !important;
|
||||
transform: scale(4, 4);
|
||||
}
|
||||
|
||||
/* Moz | Track */
|
||||
.pure-material-slider > input::-moz-range-track {
|
||||
margin: 17px 0;
|
||||
border-radius: 1px;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: var(--accent-color-opacity4);
|
||||
margin-block: 0;
|
||||
margin-auto: 17px;
|
||||
border-radius: 1px;
|
||||
inline-size: 100%;
|
||||
block-size: 2px;
|
||||
background-color: var(--accent-color-opacity4);
|
||||
}
|
||||
|
||||
/* Moz | Thumb */
|
||||
.pure-material-slider > input::-moz-range-thumb {
|
||||
appearance: none;
|
||||
-moz-appearance: none;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
height: 2px;
|
||||
width: 2px;
|
||||
background-color: var(--accent-color);
|
||||
transform: scale(6, 6);
|
||||
transition: box-shadow 0.2s;
|
||||
appearance: none;
|
||||
-moz-appearance: none;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
block-size: 2px;
|
||||
inline-size: 2px;
|
||||
background-color: var(--accent-color);
|
||||
transform: scale(6, 6);
|
||||
transition: box-shadow 0.2s;
|
||||
}
|
||||
|
||||
/* Moz | Progress */
|
||||
.pure-material-slider > input::-moz-range-progress {
|
||||
border-radius: 1px;
|
||||
height: 2px;
|
||||
background-color: var(--accent-color);
|
||||
border-radius: 1px;
|
||||
block-size: 2px;
|
||||
background-color: var(--accent-color);
|
||||
}
|
||||
|
||||
/* Moz | Hover, Focus */
|
||||
.pure-material-slider:hover > input:hover::-moz-range-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity1);
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity1);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:focus::-moz-range-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity2);
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity2);
|
||||
}
|
||||
|
||||
.pure-material-slider:hover > input:focus::-moz-range-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity3);
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity3);
|
||||
}
|
||||
|
||||
/* Moz | Active */
|
||||
.pure-material-slider > input:active::-moz-range-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity4) !important;
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity4) !important;
|
||||
}
|
||||
|
||||
/* Moz | Disabled */
|
||||
.pure-material-slider > input:disabled::-moz-range-track {
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:disabled::-moz-range-progress {
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.87);
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.87);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:disabled::-moz-range-thumb {
|
||||
background-color: rgb(var(--pure-material-onsurface-rgb, 0, 0, 0));
|
||||
box-shadow: 0 0 0 1px rgb(var(--pure-material-surface-rgb, 255, 255, 255)) !important;
|
||||
transform: scale(4, 4);
|
||||
background-color: rgb(var(--pure-material-onsurface-rgb, 0, 0, 0));
|
||||
box-shadow: 0 0 0 1px rgb(var(--pure-material-surface-rgb, 255, 255, 255)) !important;
|
||||
transform: scale(4, 4);
|
||||
}
|
||||
|
||||
.pure-material-slider > input::-moz-focus-outer {
|
||||
border: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* MS | Track */
|
||||
.pure-material-slider > input::-ms-track {
|
||||
box-sizing: border-box;
|
||||
margin: 17px 0;
|
||||
border: none;
|
||||
border-radius: 1px;
|
||||
padding: 0 17px;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background-color: transparent;
|
||||
box-sizing: border-box;
|
||||
margin-block: 17px;
|
||||
margin-inline: 0;
|
||||
border: none;
|
||||
border-radius: 1px;
|
||||
padding-block: 0;
|
||||
padding-inline: 17px;
|
||||
inline-size: 100%;
|
||||
block-size: 2px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.pure-material-slider > input::-ms-fill-lower {
|
||||
border-radius: 1px;
|
||||
height: 2px;
|
||||
background-color: var(--accent-color);
|
||||
border-radius: 1px;
|
||||
block-size: 2px;
|
||||
background-color: var(--accent-color);
|
||||
}
|
||||
|
||||
/* MS | Progress */
|
||||
.pure-material-slider > input::-ms-fill-upper {
|
||||
border-radius: 1px;
|
||||
height: 2px;
|
||||
background-color: var(--accent-color-opacity4);
|
||||
border-radius: 1px;
|
||||
block-size: 2px;
|
||||
background-color: var(--accent-color-opacity4);
|
||||
}
|
||||
|
||||
/* MS | Thumb */
|
||||
.pure-material-slider > input::-ms-thumb {
|
||||
appearance: none;
|
||||
margin: 0 17px;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
height: 2px;
|
||||
width: 2px;
|
||||
background-color: var(--accent-color);
|
||||
transform: scale(6, 6);
|
||||
transition: box-shadow 0.2s;
|
||||
appearance: none;
|
||||
margin-block: 0;
|
||||
margin-inline: 17px;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
block-size: 2px;
|
||||
inline-size: 2px;
|
||||
background-color: var(--accent-color);
|
||||
transform: scale(6, 6);
|
||||
transition: box-shadow 0.2s;
|
||||
}
|
||||
|
||||
/* MS | Hover, Focus */
|
||||
.pure-material-slider:hover > input::-ms-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity1);
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity1);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:focus::-ms-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity2);
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity2);
|
||||
}
|
||||
|
||||
.pure-material-slider:hover > input:focus::-ms-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity3);
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity3);
|
||||
}
|
||||
|
||||
/* MS | Active */
|
||||
.pure-material-slider > input:active::-ms-thumb {
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity4) !important;
|
||||
box-shadow: 0 0 0 2px var(--accent-color-opacity4) !important;
|
||||
}
|
||||
|
||||
/* MS | Disabled */
|
||||
.pure-material-slider > input:disabled::-ms-fill-lower {
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
}
|
||||
|
||||
.pure-material-slider > input:disabled::-ms-fill-upper {
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
opacity: 0.38;
|
||||
background-color: rgba(var(--pure-material-onsurface-rgb, 0, 0, 0), 0.38);
|
||||
opacity: 0.38;
|
||||
}
|
||||
|
||||
.pure-material-slider > input:disabled::-ms-thumb {
|
||||
background-color: rgb(var(--pure-material-onsurface-rgb, 0, 0, 0));
|
||||
box-shadow: 0 0 0 1px rgb(var(--pure-material-surface-rgb, 255, 255, 255)) !important;
|
||||
transform: scale(4, 4);
|
||||
background-color: rgb(var(--pure-material-onsurface-rgb, 0, 0, 0));
|
||||
box-shadow: 0 0 0 1px rgb(var(--pure-material-surface-rgb, 255, 255, 255)) !important;
|
||||
transform: scale(4, 4);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 680px) {
|
||||
.pure-material-slider {
|
||||
width: 100%;
|
||||
}
|
||||
.pure-material-slider {
|
||||
inline-size: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
.sponsorBlockCategory {
|
||||
margin-top: 30px;
|
||||
padding: 0 10px;
|
||||
margin-block-start: 30px;
|
||||
padding-block: 0;
|
||||
padding-inline: 10px;
|
||||
|
||||
@media only screen and (max-width: 680px) {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.sponsorTitle {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
.subscribeButton {
|
||||
/* Ensures style here overrides style of .btn */
|
||||
.subscribeButton.btn {
|
||||
align-self: center;
|
||||
height: 50%;
|
||||
margin-bottom: 10px;
|
||||
min-width: 150px;
|
||||
block-size: 50%;
|
||||
margin-block-end: 10px;
|
||||
min-inline-size: 150px;
|
||||
white-space: initial;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
.toast-holder {
|
||||
position: fixed;
|
||||
left: 50vw;
|
||||
transform: translate(-50%, 0);
|
||||
bottom: 50px;
|
||||
inset-inline-start: 50vw;
|
||||
transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), 0);
|
||||
inset-block-end: 50px;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
/* Thanks to Guus Lieben for the Material Design Switch */
|
||||
|
||||
.switch-ctn {
|
||||
margin: 20px 16px;
|
||||
margin-block: 20px;
|
||||
margin-inline: 16px;
|
||||
position: relative;
|
||||
|
||||
&.compact {
|
||||
|
@ -11,21 +12,22 @@
|
|||
|
||||
.switch-input {
|
||||
appearance: none;
|
||||
height: 20px;
|
||||
left: -3px;
|
||||
block-size: 20px;
|
||||
inset-inline-start: -3px;
|
||||
position: absolute;
|
||||
top: calc(50% - 3px);
|
||||
inset-block-start: calc(50% - 3px);
|
||||
transform: translate(0, -50%);
|
||||
width: 34px;
|
||||
inline-size: 34px;
|
||||
}
|
||||
|
||||
.switch-label {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-weight: 500;
|
||||
padding: 12px 0 12px 44px;
|
||||
padding-block: 12px;
|
||||
padding-inline: 44px 0;
|
||||
position: relative;
|
||||
text-align: left;
|
||||
text-align: start;
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
|
@ -33,7 +35,7 @@
|
|||
margin: 0;
|
||||
outline: 0;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
inset-block-start: 50%;
|
||||
transform: translate(0, -50%);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
@ -41,9 +43,9 @@
|
|||
&::before {
|
||||
background-color: #9e9e9e;
|
||||
border-radius: 8px;
|
||||
height: 14px;
|
||||
left: 1px;
|
||||
width: 34px;
|
||||
block-size: 14px;
|
||||
inset-inline-start: 1px;
|
||||
inline-size: 34px;
|
||||
|
||||
.switch-input:checked + & {
|
||||
background-color: var(--accent-color-light);
|
||||
|
@ -58,13 +60,13 @@
|
|||
background-color: #fafafa;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 3px 1px -2px rgb(0 0 0 / 14%), 0 2px 2px 0 rgb(0 0 0 / 9.8%), 0 1px 5px 0 rgb(0 0 0 / 8.4%);
|
||||
height: 20px;
|
||||
left: 0;
|
||||
width: 20px;
|
||||
block-size: 20px;
|
||||
inset-inline-start: 0;
|
||||
inline-size: 20px;
|
||||
|
||||
.switch-input:checked + & {
|
||||
background-color: var(--accent-color);
|
||||
transform: translate(80%, -50%);
|
||||
transform: translate(calc(80% * var(--horizontal-directionality-coefficient)), -50%);
|
||||
}
|
||||
|
||||
.switch-input:disabled + & {
|
||||
|
@ -73,7 +75,7 @@
|
|||
}
|
||||
|
||||
@media (max-width: 680px) {
|
||||
max-width: 250px;
|
||||
max-inline-size: 250px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
.button:hover + .text.bottom-left,
|
||||
.button:focus + .text.top,
|
||||
.button:hover + .text.top {
|
||||
-webkit-transform: translate(-50%, 0);
|
||||
transform: translate(-50%, 0);
|
||||
-webkit-transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), 0);
|
||||
transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), 0);
|
||||
}
|
||||
|
||||
.button:focus + .text.left,
|
||||
|
@ -38,10 +38,11 @@
|
|||
font-size: 1rem;
|
||||
line-height: 120%;
|
||||
margin: 0;
|
||||
max-width: max-content;
|
||||
min-width: 15em;
|
||||
max-inline-size: max-content;
|
||||
min-inline-size: 15em;
|
||||
opacity: 0;
|
||||
padding: 10px 8px;
|
||||
padding-block: 10px;
|
||||
padding-inline: 8px;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
|
@ -52,43 +53,43 @@
|
|||
}
|
||||
|
||||
.text.bottom {
|
||||
margin-top: 1em;
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
-webkit-transform: translate(-50%, -1em);
|
||||
transform: translate(-50%, -1em);
|
||||
margin-block-start: 1em;
|
||||
inset-block-start: 100%;
|
||||
inset-inline-start: 50%;
|
||||
-webkit-transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), -1em);
|
||||
transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), -1em);
|
||||
}
|
||||
|
||||
.text.bottom-left {
|
||||
margin-top: 1em;
|
||||
top: 100%;
|
||||
left: -100px;
|
||||
margin-block-start: 1em;
|
||||
inset-block-start: 100%;
|
||||
inset-inline-start: -100px;
|
||||
-webkit-transform: translate(-50%, -1em);
|
||||
transform: translate(-50%, -1em);
|
||||
transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), -1em);
|
||||
}
|
||||
|
||||
.text.left {
|
||||
margin-right:1em;
|
||||
right: 100%;
|
||||
top: 50%;
|
||||
-webkit-transform: translate(1em, -50%);
|
||||
transform: translate(1em, -50%);
|
||||
margin-inline-end:1em;
|
||||
inset-inline-end: 100%;
|
||||
inset-block-start: 50%;
|
||||
-webkit-transform: translate(calc(1em * var(--horizontal-directionality-coefficient)), -50%);
|
||||
transform: translate(calc(1em * var(--horizontal-directionality-coefficient)), -50%);
|
||||
}
|
||||
|
||||
.text.right {
|
||||
left: 100%;
|
||||
margin-left: 1em;
|
||||
top: 50%;
|
||||
-webkit-transform: translate(-1em, -50%);
|
||||
transform: translate(-1em, -50%);
|
||||
inset-inline-start: 100%;
|
||||
margin-inline-start: 1em;
|
||||
inset-block-start: 50%;
|
||||
-webkit-transform: translate(calc(-1em * var(--horizontal-directionality-coefficient)), -50%);
|
||||
transform: translate(calc(-1em * var(--horizontal-directionality-coefficient)), -50%);
|
||||
}
|
||||
|
||||
.text.top {
|
||||
bottom: 100%;
|
||||
left: 50%;
|
||||
margin-bottom: 1em;
|
||||
-webkit-transform: translate(-50%, 1em);
|
||||
transform: translate(-50%, 1em);
|
||||
inset-block-end: 100%;
|
||||
inset-inline-start: 50%;
|
||||
margin-block-end: 1em;
|
||||
-webkit-transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), 1em);
|
||||
transform: translate(calc(-50% * var(--horizontal-directionality-coefficient)), 1em);
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* stylelint-disable liberty/use-logical-spec */
|
||||
.relative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ftVideoPlayer {
|
||||
width:100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ftVideoPlayer.vjs-user-inactive {
|
||||
|
@ -16,7 +17,7 @@
|
|||
}
|
||||
|
||||
:deep(.sponsorBlockMarker) {
|
||||
height: 100%;
|
||||
block-size: 100%;
|
||||
background-color: var(--primary-color);
|
||||
}
|
||||
|
||||
|
@ -27,3 +28,4 @@
|
|||
z-index: 2;
|
||||
background-color: #000;
|
||||
}
|
||||
/* stylelint-enable liberty/use-logical-spec */
|
||||
|
|
|
@ -36,7 +36,7 @@ const EXPECTED_PLAY_RELATED_ERROR_MESSAGES = [
|
|||
// videojs-http-streaming calls this hook everytime it makes a request,
|
||||
// so we can use it to convert the Range header into the range query parameter for the streaming URLs
|
||||
videojs.Vhs.xhr.beforeRequest = (options) => {
|
||||
if (store.getters.getProxyVideos) {
|
||||
if (store.getters.getProxyVideos && !options.uri.startsWith('data:application/dash+xml')) {
|
||||
const { uri } = options
|
||||
options.uri = getProxyUrl(uri)
|
||||
}
|
||||
|
@ -1711,6 +1711,9 @@ export default defineComponent({
|
|||
const VjsButton = videojs.getComponent('Button')
|
||||
class dashQualitySelector extends VjsButton {
|
||||
handleClick(event) {
|
||||
if (!event.target.classList.contains('quality-item') && !event.target.classList.contains('vjs-menu-item-text')) {
|
||||
return
|
||||
}
|
||||
const selectedQuality = event.target.innerText
|
||||
const bitrate = selectedQuality === 'auto' ? 'auto' : parseInt(event.target.attributes.bitrate.value)
|
||||
setDashQualityLevel(bitrate)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
.select {
|
||||
min-width: 240px;
|
||||
width: auto;
|
||||
min-inline-size: 240px;
|
||||
inline-size: auto;
|
||||
}
|
||||
|
||||
/* https://vue-loader.vuejs.org/guide/scoped-css.html#deep-selectors */
|
||||
.select:deep(.select-text) {
|
||||
min-width: 240px;
|
||||
width: auto;
|
||||
min-inline-size: 240px;
|
||||
inline-size: auto;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
|
|||
import FtInstanceSelector from '../ft-instance-selector/ft-instance-selector.vue'
|
||||
|
||||
import debounce from 'lodash.debounce'
|
||||
import allLocales from '../../../../static/locales/activeLocales.json'
|
||||
import { showToast } from '../../helpers/utils'
|
||||
|
||||
export default defineComponent({
|
||||
|
@ -45,7 +46,8 @@ export default defineComponent({
|
|||
'',
|
||||
'start',
|
||||
'middle',
|
||||
'end'
|
||||
'end',
|
||||
'hidden'
|
||||
],
|
||||
externalLinkHandlingValues: [
|
||||
'',
|
||||
|
@ -116,7 +118,7 @@ export default defineComponent({
|
|||
localeOptions: function () {
|
||||
return [
|
||||
'system',
|
||||
...this.$i18n.allLocales
|
||||
...allLocales
|
||||
]
|
||||
},
|
||||
|
||||
|
@ -147,7 +149,8 @@ export default defineComponent({
|
|||
this.$t('Settings.General Settings.Thumbnail Preference.Default'),
|
||||
this.$t('Settings.General Settings.Thumbnail Preference.Beginning'),
|
||||
this.$t('Settings.General Settings.Thumbnail Preference.Middle'),
|
||||
this.$t('Settings.General Settings.Thumbnail Preference.End')
|
||||
this.$t('Settings.General Settings.Thumbnail Preference.End'),
|
||||
this.$t('Settings.General Settings.Thumbnail Preference.Hidden')
|
||||
]
|
||||
},
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
.card {
|
||||
width: 85%;
|
||||
inline-size: 85%;
|
||||
margin: auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.passwordInput {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
.screenshotFolderContainer {
|
||||
align-items: center;
|
||||
column-gap: 1rem;
|
||||
margin: 0 auto;
|
||||
width: 95%;
|
||||
margin-block: 0;
|
||||
margin-inline: auto;
|
||||
inline-size: 95%;
|
||||
|
||||
.screenshotFolderLabel,
|
||||
.screenshotFolderButton,
|
||||
|
@ -18,6 +19,6 @@
|
|||
.screenshotFilenamePatternInput,
|
||||
.screenshotFilenamePatternExample {
|
||||
flex-grow: 1;
|
||||
margin-top: 10px;
|
||||
margin-block-start: 10px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,6 +45,14 @@ export default defineComponent({
|
|||
return this.$store.getters.getThumbnailPreference
|
||||
},
|
||||
|
||||
blurThumbnails: function () {
|
||||
return this.$store.getters.getBlurThumbnails
|
||||
},
|
||||
|
||||
blurThumbnailsStyle: function () {
|
||||
return this.blurThumbnails ? 'blur(20px)' : null
|
||||
},
|
||||
|
||||
backendPreference: function () {
|
||||
return this.$store.getters.getBackendPreference
|
||||
},
|
||||
|
@ -58,6 +66,10 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
thumbnail: function () {
|
||||
if (this.thumbnailPreference === 'hidden') {
|
||||
return require('../../assets/img/thumbnail_placeholder.svg')
|
||||
}
|
||||
|
||||
if (this.backendPreference === 'local') {
|
||||
return this.data.playlistThumbnail
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
.playListThumbnail {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
}
|
||||
|
||||
.playlistThumbnail img {
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
display: none;
|
||||
|
@ -21,16 +21,16 @@
|
|||
}
|
||||
|
||||
.playlistTitle {
|
||||
margin-bottom: 0.1em;
|
||||
margin-block-end: 0.1em;
|
||||
}
|
||||
|
||||
.playlistDescription {
|
||||
max-height: 20vh;
|
||||
max-block-size: 20vh;
|
||||
overflow-y: auto;
|
||||
white-space: break-spaces;
|
||||
|
||||
@media only screen and (max-width: 500px) {
|
||||
max-height: 10vh;
|
||||
max-block-size: 10vh;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,14 +39,14 @@
|
|||
color: inherit;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
height: 40px;
|
||||
block-size: 40px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.channelThumbnail {
|
||||
border-radius: 200px;
|
||||
float: left;
|
||||
width: 40px;
|
||||
float: var(--float-left-ltr-rtl-value);
|
||||
inline-size: 40px;
|
||||
}
|
||||
|
||||
.channelName {
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
<img
|
||||
:src="thumbnail"
|
||||
alt=""
|
||||
:style="{filter: blurThumbnailsStyle}"
|
||||
>
|
||||
</router-link>
|
||||
</div>
|
||||
|
|
|
@ -29,7 +29,8 @@ export default defineComponent({
|
|||
return {
|
||||
isLoading: false,
|
||||
dataAvailable: false,
|
||||
proxyTestUrl: 'https://ipwho.is/',
|
||||
proxyTestUrl: 'https://ipwho.is/?output=json&fields=ip,country,city,region',
|
||||
proxyIp: '',
|
||||
proxyCountry: '',
|
||||
proxyRegion: '',
|
||||
proxyCity: '',
|
||||
|
@ -44,7 +45,8 @@ export default defineComponent({
|
|||
'https',
|
||||
'socks4',
|
||||
'socks5'
|
||||
]
|
||||
],
|
||||
debounceEnableProxy: () => { }
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -64,7 +66,7 @@ export default defineComponent({
|
|||
return `${this.proxyProtocol}://${this.proxyHostname}:${this.proxyPort}`
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
created: function () {
|
||||
this.debounceEnableProxy = debounce(this.enableProxy, 200)
|
||||
},
|
||||
beforeDestroy: function () {
|
||||
|
@ -113,6 +115,12 @@ export default defineComponent({
|
|||
|
||||
disableProxy: function () {
|
||||
ipcRenderer.send(IpcChannels.DISABLE_PROXY)
|
||||
|
||||
this.dataAvailable = false
|
||||
this.proxyIp = ''
|
||||
this.proxyCountry = ''
|
||||
this.proxyRegion = ''
|
||||
this.proxyCity = ''
|
||||
},
|
||||
|
||||
testProxy: function () {
|
||||
|
|