Compare commits

...

18 Commits

Author SHA1 Message Date
renovate[bot] c299b9d72a
Merge f21195bb9d into e82c2fbf61 2024-05-16 19:33:29 -04:00
github-actions[bot] e82c2fbf61
Merge pull request #3624 from TeamPiped/weblate
Translations update from Hosted Weblate
2024-05-16 21:03:19 +00:00
Ghost of Sparta f3e707efd2
Translated using Weblate (Hungarian)
Currently translated at 100.0% (212 of 212 strings)

Translation: Piped/Frontend
Translate-URL: https://hosted.weblate.org/projects/piped/frontend/hu/
2024-05-16 23:01:54 +02:00
0que 6d80fb42df
Translated using Weblate (Russian)
Currently translated at 100.0% (212 of 212 strings)

Translation: Piped/Frontend
Translate-URL: https://hosted.weblate.org/projects/piped/frontend/ru/
2024-05-16 23:01:53 +02:00
Matthaiks 064b7c409a
Translated using Weblate (Polish)
Currently translated at 100.0% (212 of 212 strings)

Translation: Piped/Frontend
Translate-URL: https://hosted.weblate.org/projects/piped/frontend/pl/
2024-05-16 23:01:52 +02:00
Oğuz Ersen 3e560bf4ba
Translated using Weblate (Turkish)
Currently translated at 100.0% (212 of 212 strings)

Translation: Piped/Frontend
Translate-URL: https://hosted.weblate.org/projects/piped/frontend/tr/
2024-05-16 23:01:51 +02:00
github-actions[bot] b9cea6e4cd
Merge pull request #3623 from TeamPiped/weblate
Translations update from Hosted Weblate
2024-05-16 16:28:10 +00:00
Priit Jõerüüt 9727295a16
Translated using Weblate (Estonian)
Currently translated at 100.0% (210 of 210 strings)

Translation: Piped/Frontend
Translate-URL: https://hosted.weblate.org/projects/piped/frontend/et/
2024-05-16 18:26:28 +02:00
Matthaiks debc10a899
Translated using Weblate (Polish)
Currently translated at 100.0% (210 of 210 strings)

Translation: Piped/Frontend
Translate-URL: https://hosted.weblate.org/projects/piped/frontend/pl/
2024-05-16 18:26:28 +02:00
Bnyro a43d56984d
Merge pull request #3622 from Bnyro/master
feat: custom playback speed option
2024-05-16 18:26:20 +02:00
Bnyro cdb9d0188a feat: custom playback speed option 2024-05-16 18:24:43 +02:00
Bnyro c30062eb94
Merge pull request #3610 from TeamPiped/renovate/dompurify-3.x
fix(deps): update dependency dompurify to v3.1.3
2024-05-16 17:18:56 +02:00
Bnyro adeb0a92bd
Merge pull request #3621 from Bnyro/master
fix: links in comments are not clickable
2024-05-16 17:18:39 +02:00
Bnyro afd5c5b3b8 fix: links in comments are not clickable 2024-05-16 17:18:19 +02:00
Bnyro ba4e946dc2
Merge pull request #3620 from Bnyro/master
feat: show tooltips when creator replied / liked comment
2024-05-16 17:04:35 +02:00
Bnyro ca5e39dfd8 feat: show tooltips when creator replied / liked comment 2024-05-16 17:04:08 +02:00
renovate[bot] f21195bb9d
Update dependency shaka-player to v4.8.4 2024-05-14 19:01:28 +00:00
renovate[bot] eccf4d1f78
fix(deps): update dependency dompurify to v3.1.3 2024-05-11 12:44:43 +00:00
12 changed files with 86 additions and 46 deletions

View File

@ -11,14 +11,14 @@
"lint": "eslint --fix --color --ignore-path .gitignore --ext .js,.vue ."
},
"dependencies": {
"dompurify": "3.1.2",
"dompurify": "3.1.3",
"fast-xml-parser": "4.3.6",
"hotkeys-js": "3.13.7",
"javascript-time-ago": "2.5.10",
"linkify-html": "4.1.3",
"linkifyjs": "4.1.3",
"qrcode": "^1.5.3",
"shaka-player": "4.8.2",
"shaka-player": "4.8.4",
"vue": "3.4.25",
"vue-i18n": "9.13.1",
"vue-router": "4.3.2"

View File

@ -6,8 +6,8 @@ settings:
dependencies:
dompurify:
specifier: 3.1.2
version: 3.1.2
specifier: 3.1.3
version: 3.1.3
fast-xml-parser:
specifier: 4.3.6
version: 4.3.6
@ -27,8 +27,8 @@ dependencies:
specifier: ^1.5.3
version: 1.5.3
shaka-player:
specifier: 4.8.2
version: 4.8.2
specifier: 4.8.4
version: 4.8.4
vue:
specifier: 3.4.25
version: 3.4.25(typescript@5.4.5)
@ -2937,8 +2937,8 @@ packages:
esutils: 2.0.3
dev: true
/dompurify@3.1.2:
resolution: {integrity: sha512-hLGGBI1tw5N8qTELr3blKjAML/LY4ANxksbS612UiJyDfyf/2D092Pvm+S7pmeTGJRqvlJkFzBoHBQKgQlOQVg==}
/dompurify@3.1.3:
resolution: {integrity: sha512-5sOWYSNPaxz6o2MUPvtyxTTqR4D3L77pr5rUQoWgD5ROQtVIZQgJkXbo1DLlK3vj11YGw5+LnF4SYti4gZmwng==}
dev: false
/duplexer@0.1.2:
@ -4617,8 +4617,8 @@ packages:
has-property-descriptors: 1.0.2
dev: true
/shaka-player@4.8.2:
resolution: {integrity: sha512-A70wGBj7Eys0pkJHIRa+dDbV/Set+duaKC/h44Xh+0ExJC/uBGilgoYFW2TlW8o/4XSUqBh9ymFWFwuGJ9aLUg==}
/shaka-player@4.8.4:
resolution: {integrity: sha512-LtPUioN0/kwLi5ewSFaoSUpQgA01XxaSa7vneCiXP8AMIdIWVM+pk/lFetwW0br26H8Lb79djiU+5vhJujEBjQ==}
engines: {node: '>=14'}
dependencies:
eme-encryption-scheme-polyfill: 2.1.2

View File

@ -3,7 +3,7 @@
<!-- eslint-disable-next-line vue/no-v-html -->
<span v-if="showFullText" class="contentText" v-html="fullText()" />
<!-- eslint-disable-next-line vue/no-v-html -->
<span v-else v-html="colapsedText()" />
<span v-else v-html="collapsedText()" />
<span v-if="text.length > visibleLimit && !showFullText">...</span>
<button
v-if="text.length > visibleLimit"
@ -38,7 +38,7 @@ export default {
fullText() {
return purifyHTML(rewriteDescription(this.text));
},
colapsedText() {
collapsedText() {
return purifyHTML(rewriteDescription(this.text.slice(0, this.visibleLimit)));
},
},

View File

@ -33,8 +33,13 @@
<div class="comment-footer my-1 flex items-center gap-3">
<div class="i-fa6-solid:thumbs-up" />
<span v-text="numberFormat(comment.likeCount)" />
<i v-if="comment.hearted" class="i-fa6-solid:heart" />
<img v-if="comment.creatorReplied" :src="uploaderAvatarUrl" class="h-5 w-5 rounded-full" />
<i v-if="comment.hearted" class="i-fa6-solid:heart" :title="$t('actions.creator_liked')" />
<img
v-if="comment.creatorReplied"
:src="uploaderAvatarUrl"
class="h-5 w-5 rounded-full"
:title="$t('actions.creator_replied')"
/>
</div>
<template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)">
<div class="cursor-pointer" @click="loadReplies">

View File

@ -31,16 +31,32 @@
class="absolute top-8 rounded bg-black/80 p-2 text-lg backdrop-blur-sm"
/>
</div>
<ModalComponent v-if="showSpeedModal" @close="showSpeedModal = false">
<h2 v-t="'actions.playback_speed'" />
<div class="flex flex-col">
<input
v-model="playbackSpeedInput"
class="input my-3"
type="text"
:placeholder="$t('actions.playback_speed')"
@keyup.enter="setSpeedFromInput()"
/>
<button v-t="'actions.okay'" class="btn ml-auto w-min" @click="setSpeedFromInput()" />
</div>
</ModalComponent>
</template>
<script>
import "shaka-player/dist/controls.css";
import { parseTimeParam } from "@/utils/Misc";
import ModalComponent from "./ModalComponent.vue";
const shaka = import("shaka-player/dist/shaka-player.ui.js");
const hotkeys = import("hotkeys-js");
export default {
components: { ModalComponent },
props: {
video: {
type: Object,
@ -66,6 +82,8 @@ export default {
destroying: false,
inSegment: false,
isHoveringTimebar: false,
showSpeedModal: false,
playbackSpeedInput: null,
currentTime: 0,
seekbarPadding: 2,
error: 0,
@ -106,7 +124,7 @@ export default {
this.hotkeysPromise.then(() => {
var self = this;
this.$hotkeys(
"f,m,j,k,l,c,space,up,down,left,right,0,1,2,3,4,5,6,7,8,9,shift+n,shift+,,shift+.,alt+p,return,.,,",
"f,m,j,k,l,c,space,up,down,left,right,0,1,2,3,4,5,6,7,8,9,shift+n,shift+s,shift+,,shift+.,alt+p,return,.,,",
function (e, handler) {
const videoEl = self.$refs.videoEl;
switch (handler.key) {
@ -196,11 +214,14 @@ export default {
self.$emit("navigateNext");
e.preventDefault();
break;
case "shift+s":
self.showSpeedModal = true;
break;
case "shift+,":
self.$player.trickPlay(Math.max(videoEl.playbackRate - 0.25, 0.25));
self.adjustPlaybackSpeed(videoEl.playbackRate - 0.25);
break;
case "shift+.":
self.$player.trickPlay(Math.min(videoEl.playbackRate + 0.25, 2));
self.adjustPlaybackSpeed(videoEl.playbackRate + 0.25);
break;
case "alt+p":
document.pictureInPictureElement
@ -651,7 +672,19 @@ export default {
this.$refs.videoEl.currentTime = time;
}
},
adjustPlaybackSpeed(newSpeed) {
const normalizedSpeed = Math.min(4, Math.max(0.25, newSpeed));
this.$player.trickPlay(normalizedSpeed);
},
setSpeedFromInput() {
try {
const newSpeed = Number(this.playbackSpeedInput);
this.adjustPlaybackSpeed(newSpeed);
} catch (err) {
alert(this.$t("actions.invalid_input"));
}
this.showSpeedModal = false;
},
updateMarkers() {
const markers = this.$refs.container.querySelector(".shaka-ad-markers");
const array = ["to right"];

View File

@ -546,33 +546,13 @@ export default {
this.fetchSponsors().then(data => (this.sponsors = data));
},
async getComments() {
this.fetchComments().then(data => {
this.rewriteComments(data.comments);
this.comments = data;
});
this.comments = await this.fetchComments();
},
async fetchSubscribedStatus() {
if (!this.channelId) return;
this.subscribed = await this.fetchSubscriptionStatus(this.channelId);
},
rewriteComments(data) {
data.forEach(comment => {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(comment.commentText, "text/html");
xmlDoc.querySelectorAll("a").forEach(elem => {
if (!elem.innerText.match(/(?:[\d]{1,2}:)?(?:[\d]{1,2}):(?:[\d]{1,2})/))
elem.outerHTML = elem.getAttribute("href");
});
comment.commentText = xmlDoc
.querySelector("body")
.innerHTML.replaceAll(/(?:http(?:s)?:\/\/)?(?:www\.)?youtube\.com(\/[/a-zA-Z0-9_?=&-]*)/gm, "$1")
.replaceAll(
/(?:http(?:s)?:\/\/)?(?:www\.)?youtu\.be\/(?:watch\?v=)?([/a-zA-Z0-9_?=&-]*)/gm,
"/watch?v=$1",
);
});
},
subscribeHandler() {
this.toggleSubscriptionState(this.channelId, this.subscribed).then(success => {
if (success) this.subscribed = !this.subscribed;
@ -616,7 +596,6 @@ export default {
}).then(json => {
this.comments.nextpage = json.nextpage;
this.loading = false;
this.rewriteComments(json.comments);
this.comments.comments = this.comments.comments.concat(json.comments);
});
}

View File

@ -156,7 +156,11 @@
"concurrent_prefetch_limit": "Concurrent Stream Prefetch Limit",
"customize": "Customize",
"invalid_url": "Invalid URL!",
"add": "Add"
"add": "Add",
"creator_replied": "Creator replied",
"creator_liked": "Creator liked",
"playback_speed": "Playback speed",
"invalid_input": "Invalid input"
},
"comment": {
"pinned_by": "Pinned by {author}",

View File

@ -156,7 +156,9 @@
"customize": "Kohanda",
"invalid_url": "Vigane URL!",
"add": "Lisa",
"delete_group_confirm": "Kas kustutame selle grupi?"
"delete_group_confirm": "Kas kustutame selle grupi?",
"creator_replied": "Autor vastas",
"creator_liked": "Autorile meeldis see"
},
"preferences": {
"has_cdn": "CDN'i olek?",

View File

@ -152,7 +152,11 @@
"customize": "Testreszab",
"invalid_url": "Érvénytelen URL!",
"add": "Hozzáadás",
"delete_group_confirm": "Törli ezt a csoportot?"
"delete_group_confirm": "Törli ezt a csoportot?",
"creator_replied": "A készítő válaszolt",
"creator_liked": "A készítő kedvelte",
"playback_speed": "Visszajátszási sebesség",
"invalid_input": "Érvénytelen bevitel"
},
"video": {
"ratings_disabled": "Értékelések Letiltva",

View File

@ -156,7 +156,11 @@
"customize": "Dostosuj",
"invalid_url": "Nieprawidłowy adres URL!",
"add": "Dodaj",
"delete_group_confirm": "Usunąć tę grupę?"
"delete_group_confirm": "Usunąć tę grupę?",
"creator_replied": "Twórca odpowiedział",
"creator_liked": "Twórca polubił",
"invalid_input": "Nieprawidłowe dane wejściowe",
"playback_speed": "Szybkość odtwarzania"
},
"comment": {
"pinned_by": "Przypięty przez {author}",

View File

@ -155,7 +155,12 @@
"concurrent_prefetch_limit": "Предел одновременной предзагрузки трансляций",
"customize": "Персонализация",
"invalid_url": "Неправильная ссылка!",
"add": "Добавить"
"add": "Добавить",
"creator_replied": "Ответ автора",
"creator_liked": "Автор оценил",
"playback_speed": "Скорость воспроизведения",
"invalid_input": "Некорректный ввод",
"delete_group_confirm": "Удалить группу?"
},
"comment": {
"pinned_by": "Закреплено пользователем {author}",

View File

@ -132,7 +132,11 @@
"invalid_url": "Geçersiz URL!",
"customize": "Özelleştir",
"add": "Ekle",
"delete_group_confirm": "Bu grup silinsin mi?"
"delete_group_confirm": "Bu grup silinsin mi?",
"creator_replied": "Oluşturan yanıtladı",
"creator_liked": "Oluşturan beğendi",
"playback_speed": "Oynatma hızı",
"invalid_input": "Geçersiz giriş"
},
"player": {
"watch_on": "{0} üzerinde görüntüle",