mirror of
				https://github.com/TeamPiped/Piped.git
				synced 2024-08-14 23:57:27 +00:00 
			
		
		
		
	Merge pull request #3444 from 0x24D/replace-fa-with-unocss
Replace font-awesome icons with unocss
This commit is contained in:
		
						commit
						40314cd0f0
					
				
					 18 changed files with 50 additions and 154 deletions
				
			
		| 
						 | 
					@ -11,10 +11,6 @@
 | 
				
			||||||
        "lint": "eslint --fix --color --ignore-path .gitignore --ext .js,.vue ."
 | 
					        "lint": "eslint --fix --color --ignore-path .gitignore --ext .js,.vue ."
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "dependencies": {
 | 
					    "dependencies": {
 | 
				
			||||||
        "@fortawesome/fontawesome-svg-core": "6.5.1",
 | 
					 | 
				
			||||||
        "@fortawesome/free-brands-svg-icons": "6.5.1",
 | 
					 | 
				
			||||||
        "@fortawesome/free-solid-svg-icons": "6.5.1",
 | 
					 | 
				
			||||||
        "@fortawesome/vue-fontawesome": "3.0.6",
 | 
					 | 
				
			||||||
        "dompurify": "3.0.9",
 | 
					        "dompurify": "3.0.9",
 | 
				
			||||||
        "fast-xml-parser": "4.3.4",
 | 
					        "fast-xml-parser": "4.3.4",
 | 
				
			||||||
        "hotkeys-js": "3.13.6",
 | 
					        "hotkeys-js": "3.13.6",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										52
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										52
									
								
								pnpm-lock.yaml
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -5,18 +5,6 @@ settings:
 | 
				
			||||||
  excludeLinksFromLockfile: false
 | 
					  excludeLinksFromLockfile: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dependencies:
 | 
					dependencies:
 | 
				
			||||||
  '@fortawesome/fontawesome-svg-core':
 | 
					 | 
				
			||||||
    specifier: 6.5.1
 | 
					 | 
				
			||||||
    version: 6.5.1
 | 
					 | 
				
			||||||
  '@fortawesome/free-brands-svg-icons':
 | 
					 | 
				
			||||||
    specifier: 6.5.1
 | 
					 | 
				
			||||||
    version: 6.5.1
 | 
					 | 
				
			||||||
  '@fortawesome/free-solid-svg-icons':
 | 
					 | 
				
			||||||
    specifier: 6.5.1
 | 
					 | 
				
			||||||
    version: 6.5.1
 | 
					 | 
				
			||||||
  '@fortawesome/vue-fontawesome':
 | 
					 | 
				
			||||||
    specifier: 3.0.6
 | 
					 | 
				
			||||||
    version: 3.0.6(@fortawesome/fontawesome-svg-core@6.5.1)(vue@3.4.19)
 | 
					 | 
				
			||||||
  dompurify:
 | 
					  dompurify:
 | 
				
			||||||
    specifier: 3.0.9
 | 
					    specifier: 3.0.9
 | 
				
			||||||
    version: 3.0.9
 | 
					    version: 3.0.9
 | 
				
			||||||
| 
						 | 
					@ -1615,46 +1603,6 @@ packages:
 | 
				
			||||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
					    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /@fortawesome/fontawesome-common-types@6.5.1:
 | 
					 | 
				
			||||||
    resolution: {integrity: sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==}
 | 
					 | 
				
			||||||
    engines: {node: '>=6'}
 | 
					 | 
				
			||||||
    requiresBuild: true
 | 
					 | 
				
			||||||
    dev: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /@fortawesome/fontawesome-svg-core@6.5.1:
 | 
					 | 
				
			||||||
    resolution: {integrity: sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==}
 | 
					 | 
				
			||||||
    engines: {node: '>=6'}
 | 
					 | 
				
			||||||
    requiresBuild: true
 | 
					 | 
				
			||||||
    dependencies:
 | 
					 | 
				
			||||||
      '@fortawesome/fontawesome-common-types': 6.5.1
 | 
					 | 
				
			||||||
    dev: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /@fortawesome/free-brands-svg-icons@6.5.1:
 | 
					 | 
				
			||||||
    resolution: {integrity: sha512-093l7DAkx0aEtBq66Sf19MgoZewv1zeY9/4C7vSKPO4qMwEsW/2VYTUTpBtLwfb9T2R73tXaRDPmE4UqLCYHfg==}
 | 
					 | 
				
			||||||
    engines: {node: '>=6'}
 | 
					 | 
				
			||||||
    requiresBuild: true
 | 
					 | 
				
			||||||
    dependencies:
 | 
					 | 
				
			||||||
      '@fortawesome/fontawesome-common-types': 6.5.1
 | 
					 | 
				
			||||||
    dev: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /@fortawesome/free-solid-svg-icons@6.5.1:
 | 
					 | 
				
			||||||
    resolution: {integrity: sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==}
 | 
					 | 
				
			||||||
    engines: {node: '>=6'}
 | 
					 | 
				
			||||||
    requiresBuild: true
 | 
					 | 
				
			||||||
    dependencies:
 | 
					 | 
				
			||||||
      '@fortawesome/fontawesome-common-types': 6.5.1
 | 
					 | 
				
			||||||
    dev: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /@fortawesome/vue-fontawesome@3.0.6(@fortawesome/fontawesome-svg-core@6.5.1)(vue@3.4.19):
 | 
					 | 
				
			||||||
    resolution: {integrity: sha512-akrL7lTroyNpPkoHtvK2UpsMzJr6jXdHaQ0YdcwqDsB8jdwlpNHZYijpOUd9KJsARr+VB3WXY4EyObepqJ4ytQ==}
 | 
					 | 
				
			||||||
    peerDependencies:
 | 
					 | 
				
			||||||
      '@fortawesome/fontawesome-svg-core': ~1 || ~6
 | 
					 | 
				
			||||||
      vue: '>= 3.0.0 < 4'
 | 
					 | 
				
			||||||
    dependencies:
 | 
					 | 
				
			||||||
      '@fortawesome/fontawesome-svg-core': 6.5.1
 | 
					 | 
				
			||||||
      vue: 3.4.19(typescript@5.3.3)
 | 
					 | 
				
			||||||
    dev: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /@humanwhocodes/config-array@0.11.14:
 | 
					  /@humanwhocodes/config-array@0.11.14:
 | 
				
			||||||
    resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
 | 
					    resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
 | 
				
			||||||
    engines: {node: '>=10.10.0'}
 | 
					    engines: {node: '>=10.10.0'}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,14 +6,14 @@
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <p>
 | 
					            <p>
 | 
				
			||||||
                <span v-text="item.name" />
 | 
					                <span v-text="item.name" />
 | 
				
			||||||
                <font-awesome-icon v-if="item.verified" class="ml-1.5" icon="check" />
 | 
					                <i v-if="item.verified" class="i-fa6-solid:check ml-1.5" />
 | 
				
			||||||
            </p>
 | 
					            </p>
 | 
				
			||||||
        </router-link>
 | 
					        </router-link>
 | 
				
			||||||
        <p v-if="item.description" v-text="item.description" />
 | 
					        <p v-if="item.description" v-text="item.description" />
 | 
				
			||||||
        <router-link v-if="item.uploaderUrl" class="link" :to="item.uploaderUrl">
 | 
					        <router-link v-if="item.uploaderUrl" class="link" :to="item.uploaderUrl">
 | 
				
			||||||
            <p>
 | 
					            <p>
 | 
				
			||||||
                <span v-text="item.uploader" />
 | 
					                <span v-text="item.uploader" />
 | 
				
			||||||
                <font-awesome-icon v-if="item.uploaderVerified" class="ml-1.5" icon="check" />
 | 
					                <i v-if="item.uploaderVerified" class="i-fa6-solid:check ml-1.5" />
 | 
				
			||||||
            </p>
 | 
					            </p>
 | 
				
			||||||
        </router-link>
 | 
					        </router-link>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,7 @@
 | 
				
			||||||
                <img height="48" width="48" class="m-1 rounded-full" :src="channel.avatarUrl" />
 | 
					                <img height="48" width="48" class="m-1 rounded-full" :src="channel.avatarUrl" />
 | 
				
			||||||
                <div class="flex items-center gap-1">
 | 
					                <div class="flex items-center gap-1">
 | 
				
			||||||
                    <h1 class="!text-xl" v-text="channel.name" />
 | 
					                    <h1 class="!text-xl" v-text="channel.name" />
 | 
				
			||||||
                    <font-awesome-icon v-if="channel.verified" class="!text-xl" icon="check" />
 | 
					                    <i v-if="channel.verified" class="i-fa6-solid:check !text-xl" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@
 | 
				
			||||||
                    target="_blank"
 | 
					                    target="_blank"
 | 
				
			||||||
                    class="btn flex-col"
 | 
					                    class="btn flex-col"
 | 
				
			||||||
                >
 | 
					                >
 | 
				
			||||||
                    <font-awesome-icon icon="rss" />
 | 
					                    <i class="i-fa6-solid:rss" />
 | 
				
			||||||
                </a>
 | 
					                </a>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@
 | 
				
			||||||
        <div class="comment-content pl-2">
 | 
					        <div class="comment-content pl-2">
 | 
				
			||||||
            <div class="comment-header">
 | 
					            <div class="comment-header">
 | 
				
			||||||
                <div v-if="comment.pinned" class="comment-pinned">
 | 
					                <div v-if="comment.pinned" class="comment-pinned">
 | 
				
			||||||
                    <font-awesome-icon icon="thumbtack" />
 | 
					                    <i class="i-fa6-solid:thumbtack" />
 | 
				
			||||||
                    <span
 | 
					                    <span
 | 
				
			||||||
                        v-t="{
 | 
					                        v-t="{
 | 
				
			||||||
                            path: 'comment.pinned_by',
 | 
					                            path: 'comment.pinned_by',
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div class="comment-author">
 | 
					                <div class="comment-author">
 | 
				
			||||||
                    <router-link class="link font-bold" :to="comment.commentorUrl">{{ comment.author }}</router-link>
 | 
					                    <router-link class="link font-bold" :to="comment.commentorUrl">{{ comment.author }}</router-link>
 | 
				
			||||||
                    <font-awesome-icon v-if="comment.verified" class="ml-1.5" icon="check" />
 | 
					                    <i v-if="comment.verified" class="i-fa6-solid:check ml-1.5" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="comment-meta mb-1.5 text-sm" v-text="comment.commentedTime" />
 | 
					                <div class="comment-meta mb-1.5 text-sm" v-text="comment.commentedTime" />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
| 
						 | 
					@ -33,19 +33,19 @@
 | 
				
			||||||
            <div class="comment-footer my-1 flex items-center gap-3">
 | 
					            <div class="comment-footer my-1 flex items-center gap-3">
 | 
				
			||||||
                <div class="i-fa6-solid:thumbs-up" />
 | 
					                <div class="i-fa6-solid:thumbs-up" />
 | 
				
			||||||
                <span v-text="numberFormat(comment.likeCount)" />
 | 
					                <span v-text="numberFormat(comment.likeCount)" />
 | 
				
			||||||
                <font-awesome-icon v-if="comment.hearted" icon="heart" />
 | 
					                <i v-if="comment.hearted" class="i-fa6-solid:heart" />
 | 
				
			||||||
                <img v-if="comment.creatorReplied" :src="uploaderAvatarUrl" class="h-5 w-5 rounded-full" />
 | 
					                <img v-if="comment.creatorReplied" :src="uploaderAvatarUrl" class="h-5 w-5 rounded-full" />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)">
 | 
					            <template v-if="comment.repliesPage && (!loadingReplies || !showingReplies)">
 | 
				
			||||||
                <div class="cursor-pointer" @click="loadReplies">
 | 
					                <div class="cursor-pointer" @click="loadReplies">
 | 
				
			||||||
                    <a v-text="`${$t('actions.reply_count', comment.replyCount)}`" />
 | 
					                    <a v-text="`${$t('actions.reply_count', comment.replyCount)}`" />
 | 
				
			||||||
                    <font-awesome-icon class="ml-1.5" icon="level-down-alt" />
 | 
					                    <i class="i-fa6-solid:level-down-alt ml-1.5" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </template>
 | 
					            </template>
 | 
				
			||||||
            <template v-if="showingReplies">
 | 
					            <template v-if="showingReplies">
 | 
				
			||||||
                <div class="cursor-pointer" @click="hideReplies">
 | 
					                <div class="cursor-pointer" @click="hideReplies">
 | 
				
			||||||
                    <a v-t="'actions.hide_replies'" />
 | 
					                    <a v-t="'actions.hide_replies'" />
 | 
				
			||||||
                    <font-awesome-icon class="ml-1.5" icon="level-up-alt" />
 | 
					                    <i class="i-fa6-solid:level-up-alt ml-1.5" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </template>
 | 
					            </template>
 | 
				
			||||||
            <div v-show="showingReplies" v-if="replies" class="replies">
 | 
					            <div v-show="showingReplies" v-if="replies" class="replies">
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div v-if="nextpage" class="cursor-pointer" @click="loadReplies">
 | 
					                <div v-if="nextpage" class="cursor-pointer" @click="loadReplies">
 | 
				
			||||||
                    <a v-t="'actions.load_more_replies'" />
 | 
					                    <a v-t="'actions.load_more_replies'" />
 | 
				
			||||||
                    <font-awesome-icon class="ml-1.5" icon="level-down-alt" />
 | 
					                    <i class="i-fa6-solid:level-down-alt ml-1.5" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,7 @@
 | 
				
			||||||
    <span class="flex gap-2">
 | 
					    <span class="flex gap-2">
 | 
				
			||||||
        <router-link v-t="'titles.subscriptions'" class="btn" to="/subscriptions" />
 | 
					        <router-link v-t="'titles.subscriptions'" class="btn" to="/subscriptions" />
 | 
				
			||||||
        <a :href="getRssUrl" class="btn">
 | 
					        <a :href="getRssUrl" class="btn">
 | 
				
			||||||
            <font-awesome-icon icon="rss" />
 | 
					            <i class="i-fa6-solid:rss" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
    </span>
 | 
					    </span>
 | 
				
			||||||
    <hr />
 | 
					    <hr />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,27 +1,27 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
    <footer class="mt-10 w-full rounded-xl py-4 text-center children:(mx-3)">
 | 
					    <footer class="mt-10 w-full rounded-xl py-4 text-center children:(mx-3)">
 | 
				
			||||||
        <a aria-label="GitHub" href="https://github.com/TeamPiped/Piped" target="_blank">
 | 
					        <a aria-label="GitHub" href="https://github.com/TeamPiped/Piped" target="_blank">
 | 
				
			||||||
            <font-awesome-icon :icon="['fab', 'github']" />
 | 
					            <i class="i-fa6-brands:github" />
 | 
				
			||||||
            <span v-t="'actions.source_code'" class="ml-2" />
 | 
					            <span v-t="'actions.source_code'" class="ml-2" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
        <a href="https://docs.piped.video/" target="_blank">
 | 
					        <a href="https://docs.piped.video/" target="_blank">
 | 
				
			||||||
            <font-awesome-icon :icon="['fa', 'book']" />
 | 
					            <i class="i-fa6-solid:book" />
 | 
				
			||||||
            <span v-t="'actions.documentation'" class="ml-2" />
 | 
					            <span v-t="'actions.documentation'" class="ml-2" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
        <a href="https://github.com/TeamPiped/Piped#donations" target="_blank">
 | 
					        <a href="https://github.com/TeamPiped/Piped#donations" target="_blank">
 | 
				
			||||||
            <font-awesome-icon :icon="['fab', 'bitcoin']" />
 | 
					            <i class="i-fa6-brands:bitcoin" />
 | 
				
			||||||
            <span v-t="'actions.donations'" class="ml-2" />
 | 
					            <span v-t="'actions.donations'" class="ml-2" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
        <a v-if="statusPageHref" :href="statusPageHref">
 | 
					        <a v-if="statusPageHref" :href="statusPageHref">
 | 
				
			||||||
            <font-awesome-icon :icon="['fa', 'server']" />
 | 
					            <i class="i-fa6-solid:server" />
 | 
				
			||||||
            <span v-t="'actions.status_page'" class="ml-2" />
 | 
					            <span v-t="'actions.status_page'" class="ml-2" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
        <a v-if="donationHref" :href="donationHref">
 | 
					        <a v-if="donationHref" :href="donationHref">
 | 
				
			||||||
            <font-awesome-icon :icon="['fa', 'donate']" />
 | 
					            <i class="i-fa6-solid:donate" />
 | 
				
			||||||
            <span v-t="'actions.instance_donations'" class="ml-2" />
 | 
					            <span v-t="'actions.instance_donations'" class="ml-2" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
        <a v-if="privacyPolicyHref" :href="privacyPolicyHref" target="_blank">
 | 
					        <a v-if="privacyPolicyHref" :href="privacyPolicyHref" target="_blank">
 | 
				
			||||||
            <font-awesome-icon :icon="['fa', 'eye']" />
 | 
					            <i class="i-fa6-solid:eye" />
 | 
				
			||||||
            <span v-t="'actions.instance_privacy_policy'" class="ml-2" />
 | 
					            <span v-t="'actions.instance_privacy_policy'" class="ml-2" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
    </footer>
 | 
					    </footer>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
    <div class="modal">
 | 
					    <div class="modal">
 | 
				
			||||||
        <div @click="handleClick">
 | 
					        <div @click="handleClick">
 | 
				
			||||||
            <div class="modal-container">
 | 
					            <div class="modal-container">
 | 
				
			||||||
                <button @click="$emit('close')"><font-awesome-icon icon="xmark" /></button>
 | 
					                <button @click="$emit('close')"><i class="i-fa6-solid:xmark" /></button>
 | 
				
			||||||
                <slot></slot>
 | 
					                <slot></slot>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <p>
 | 
					            <p>
 | 
				
			||||||
                <span v-text="props.item.name" />
 | 
					                <span v-text="props.item.name" />
 | 
				
			||||||
                <font-awesome-icon v-if="props.item.verified" class="ml-1.5" icon="check" />
 | 
					                <i v-if="props.item.verified" class="i-fa6-solid:check ml-1.5" />
 | 
				
			||||||
            </p>
 | 
					            </p>
 | 
				
			||||||
        </router-link>
 | 
					        </router-link>
 | 
				
			||||||
        <p v-if="props.item.description" v-text="props.item.description" />
 | 
					        <p v-if="props.item.description" v-text="props.item.description" />
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
        <router-link v-if="props.item.uploaderUrl" class="link" :to="props.item.uploaderUrl">
 | 
					        <router-link v-if="props.item.uploaderUrl" class="link" :to="props.item.uploaderUrl">
 | 
				
			||||||
            <p>
 | 
					            <p>
 | 
				
			||||||
                <span v-text="props.item.uploaderName" />
 | 
					                <span v-text="props.item.uploaderName" />
 | 
				
			||||||
                <font-awesome-icon v-if="props.item.uploaderVerified" class="ml-1.5" icon="check" />
 | 
					                <i v-if="props.item.uploaderVerified" class="i-fa6-solid:check ml-1.5" />
 | 
				
			||||||
            </p>
 | 
					            </p>
 | 
				
			||||||
        </router-link>
 | 
					        </router-link>
 | 
				
			||||||
        <a v-else-if="props.item.uploaderName" class="link" v-text="props.item.uploaderName" />
 | 
					        <a v-else-if="props.item.uploaderName" class="link" v-text="props.item.uploaderName" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,16 +17,16 @@
 | 
				
			||||||
                <strong class="mr-2" v-text="`${playlist.videos} ${$t('video.videos')}`" />
 | 
					                <strong class="mr-2" v-text="`${playlist.videos} ${$t('video.videos')}`" />
 | 
				
			||||||
                <button v-if="!isPipedPlaylist" class="btn mx-1" @click="bookmarkPlaylist">
 | 
					                <button v-if="!isPipedPlaylist" class="btn mx-1" @click="bookmarkPlaylist">
 | 
				
			||||||
                    {{ $t(`actions.${isBookmarked ? "playlist_bookmarked" : "bookmark_playlist"}`)
 | 
					                    {{ $t(`actions.${isBookmarked ? "playlist_bookmarked" : "bookmark_playlist"}`)
 | 
				
			||||||
                    }}<font-awesome-icon class="ml-3" icon="bookmark" />
 | 
					                    }}<i class="i-fa6-solid:bookmark ml-3" />
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <button v-if="authenticated && !isPipedPlaylist" class="btn mr-1" @click="clonePlaylist">
 | 
					                <button v-if="authenticated && !isPipedPlaylist" class="btn mr-1" @click="clonePlaylist">
 | 
				
			||||||
                    {{ $t("actions.clone_playlist") }}<font-awesome-icon class="ml-3" icon="clone" />
 | 
					                    {{ $t("actions.clone_playlist") }}<i class="i-fa6-solid:clone ml-3" />
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <button class="btn mr-1" @click="downloadPlaylistAsTxt">
 | 
					                <button class="btn mr-1" @click="downloadPlaylistAsTxt">
 | 
				
			||||||
                    {{ $t("actions.download_as_txt") }}
 | 
					                    {{ $t("actions.download_as_txt") }}
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <a class="btn mr-1" :href="getRssUrl">
 | 
					                <a class="btn mr-1" :href="getRssUrl">
 | 
				
			||||||
                    <font-awesome-icon icon="rss" />
 | 
					                    <i class="i-fa6-solid:rss" />
 | 
				
			||||||
                </a>
 | 
					                </a>
 | 
				
			||||||
                <WatchOnButton :link="`https://www.youtube.com/playlist?list=${$route.query.list}`" />
 | 
					                <WatchOnButton :link="`https://www.youtube.com/playlist?list=${$route.query.list}`" />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,7 +76,7 @@
 | 
				
			||||||
            <div class="relative text-sm">
 | 
					            <div class="relative text-sm">
 | 
				
			||||||
                <span class="thumbnail-overlay thumbnail-right" v-text="`${playlist.videos} ${$t('video.videos')}`" />
 | 
					                <span class="thumbnail-overlay thumbnail-right" v-text="`${playlist.videos} ${$t('video.videos')}`" />
 | 
				
			||||||
                <div class="absolute bottom-100px right-5px z-100 px-5px" @click.prevent="removeBookmark(index)">
 | 
					                <div class="absolute bottom-100px right-5px z-100 px-5px" @click.prevent="removeBookmark(index)">
 | 
				
			||||||
                    <font-awesome-icon class="ml-3" icon="bookmark" />
 | 
					                    <i class="i-fa6-solid:bookmark ml-3" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <p
 | 
					            <p
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
    <div class="flex">
 | 
					    <div class="flex">
 | 
				
			||||||
        <button @click="$router.go(-1) || $router.push('/')">
 | 
					        <button @click="$router.go(-1) || $router.push('/')">
 | 
				
			||||||
            <font-awesome-icon icon="chevron-left" /><span v-t="'actions.back'" class="ml-1.5" />
 | 
					            <i class="i-fa6-solid:chevron-left" /><span v-t="'actions.back'" class="ml-1.5" />
 | 
				
			||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <h1 v-t="'titles.preferences'" class="text-center font-bold" />
 | 
					    <h1 v-t="'titles.preferences'" class="text-center font-bold" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,12 +52,12 @@
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
            <span v-text="group.groupName !== '' ? group.groupName : $t('video.all')" />
 | 
					            <span v-text="group.groupName !== '' ? group.groupName : $t('video.all')" />
 | 
				
			||||||
            <div v-if="group.groupName != '' && selectedGroup == group">
 | 
					            <div v-if="group.groupName != '' && selectedGroup == group">
 | 
				
			||||||
                <font-awesome-icon class="mx-2" icon="edit" @click="showEditGroupModal = true" />
 | 
					                <i class="i-fa6-solid:edit mx-2" @click="showEditGroupModal = true" />
 | 
				
			||||||
                <font-awesome-icon class="mx-2" icon="circle-minus" @click="deleteGroup(group)" />
 | 
					                <i class="i-fa6-solid:circle-minus mx-2" @click="deleteGroup(group)" />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <button class="btn mx-1" @click="showCreateGroupModal = true">
 | 
					        <button class="btn mx-1" @click="showCreateGroupModal = true">
 | 
				
			||||||
            <font-awesome-icon icon="circle-plus" />
 | 
					            <i class="i-fa6-solid:circle-plus" />
 | 
				
			||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <br />
 | 
					    <br />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,7 @@
 | 
				
			||||||
                    v-text="timeFormat(item.duration)"
 | 
					                    v-text="timeFormat(item.duration)"
 | 
				
			||||||
                />
 | 
					                />
 | 
				
			||||||
                <i18n-t v-else keypath="video.live" class="thumbnail-overlay thumbnail-right !bg-red-600" tag="div">
 | 
					                <i18n-t v-else keypath="video.live" class="thumbnail-overlay thumbnail-right !bg-red-600" tag="div">
 | 
				
			||||||
                    <font-awesome-icon class="w-3" :icon="['fas', 'broadcast-tower']" />
 | 
					                    <i class="i-fa6-solid:tower-broadcast w-3" />
 | 
				
			||||||
                </i18n-t>
 | 
					                </i18n-t>
 | 
				
			||||||
                <span v-if="item.watched" v-t="'video.watched'" class="thumbnail-overlay bottom-5px left-5px" />
 | 
					                <span v-if="item.watched" v-t="'video.watched'" class="thumbnail-overlay bottom-5px left-5px" />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
| 
						 | 
					@ -78,12 +78,12 @@
 | 
				
			||||||
                    :title="item.uploaderName"
 | 
					                    :title="item.uploaderName"
 | 
				
			||||||
                >
 | 
					                >
 | 
				
			||||||
                    <span v-text="item.uploaderName" />
 | 
					                    <span v-text="item.uploaderName" />
 | 
				
			||||||
                    <font-awesome-icon v-if="item.uploaderVerified" class="ml-1.5" icon="check" />
 | 
					                    <i v-if="item.uploaderVerified" class="i-fa6-solid:check ml-1.5" />
 | 
				
			||||||
                </router-link>
 | 
					                </router-link>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div v-if="item.views >= 0 || item.uploadedDate" class="mt-1 text-xs text-gray-300 font-normal">
 | 
					                <div v-if="item.views >= 0 || item.uploadedDate" class="mt-1 text-xs text-gray-300 font-normal">
 | 
				
			||||||
                    <span v-if="item.views >= 0">
 | 
					                    <span v-if="item.views >= 0">
 | 
				
			||||||
                        <font-awesome-icon icon="eye" />
 | 
					                        <i class="i-fa6-solid:eye" />
 | 
				
			||||||
                        <span class="pl-1" v-text="`${numberFormat(item.views)} •`" />
 | 
					                        <span class="pl-1" v-text="`${numberFormat(item.views)} •`" />
 | 
				
			||||||
                    </span>
 | 
					                    </span>
 | 
				
			||||||
                    <span v-if="item.uploaded > 0" class="pl-0.5" v-text="timeAgo(item.uploaded)" />
 | 
					                    <span v-if="item.uploaded > 0" class="pl-0.5" v-text="timeAgo(item.uploaded)" />
 | 
				
			||||||
| 
						 | 
					@ -105,13 +105,13 @@
 | 
				
			||||||
                    :aria-label="'Listen to ' + title"
 | 
					                    :aria-label="'Listen to ' + title"
 | 
				
			||||||
                    :title="'Listen to ' + title"
 | 
					                    :title="'Listen to ' + title"
 | 
				
			||||||
                >
 | 
					                >
 | 
				
			||||||
                    <font-awesome-icon icon="headphones" />
 | 
					                    <i class="i-fa6-solid:headphones" />
 | 
				
			||||||
                </router-link>
 | 
					                </router-link>
 | 
				
			||||||
                <button :title="$t('actions.add_to_playlist')" @click="showPlaylistModal = !showPlaylistModal">
 | 
					                <button :title="$t('actions.add_to_playlist')" @click="showPlaylistModal = !showPlaylistModal">
 | 
				
			||||||
                    <font-awesome-icon icon="circle-plus" />
 | 
					                    <i class="i-fa6-solid:circle-plus" />
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <button :title="$t('actions.share')" @click="showShareModal = !showShareModal">
 | 
					                <button :title="$t('actions.share')" @click="showShareModal = !showShareModal">
 | 
				
			||||||
                    <font-awesome-icon icon="share" />
 | 
					                    <i class="i-fa6-solid:share" />
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <button
 | 
					                <button
 | 
				
			||||||
                    v-if="admin"
 | 
					                    v-if="admin"
 | 
				
			||||||
| 
						 | 
					@ -119,7 +119,7 @@
 | 
				
			||||||
                    :title="$t('actions.remove_from_playlist')"
 | 
					                    :title="$t('actions.remove_from_playlist')"
 | 
				
			||||||
                    @click="showConfirmRemove = true"
 | 
					                    @click="showConfirmRemove = true"
 | 
				
			||||||
                >
 | 
					                >
 | 
				
			||||||
                    <font-awesome-icon icon="circle-minus" />
 | 
					                    <i class="i-fa6-solid:circle-minus" />
 | 
				
			||||||
                </button>
 | 
					                </button>
 | 
				
			||||||
                <ConfirmModal
 | 
					                <ConfirmModal
 | 
				
			||||||
                    v-if="showConfirmRemove"
 | 
					                    v-if="showConfirmRemove"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,11 +19,13 @@ export default {
 | 
				
			||||||
        <!-- For large screens -->
 | 
					        <!-- For large screens -->
 | 
				
			||||||
        <a :href="link" class="btn flex items-center lt-lg:hidden">
 | 
					        <a :href="link" class="btn flex items-center lt-lg:hidden">
 | 
				
			||||||
            <i18n-t keypath="player.watch_on" tag="strong">{{ platform }}</i18n-t>
 | 
					            <i18n-t keypath="player.watch_on" tag="strong">{{ platform }}</i18n-t>
 | 
				
			||||||
            <font-awesome-icon class="mx-1.5" :icon="['fab', platform.toLowerCase()]" />
 | 
					            <i v-if="platform == 'YouTube'" class="i-fa6-brands:youtube mx-1.5" />
 | 
				
			||||||
 | 
					            <i v-else-if="platform == 'Odysee'" class="i-fa6-brands:odysee mx-1.5" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
        <!-- For small screens -->
 | 
					        <!-- For small screens -->
 | 
				
			||||||
        <a :href="link" class="btn flex items-center lg:hidden">
 | 
					        <a :href="link" class="btn flex items-center lg:hidden">
 | 
				
			||||||
            <font-awesome-icon class="mx-1.5" :icon="['fab', platform.toLowerCase()]" />
 | 
					            <i v-if="platform == 'YouTube'" class="i-fa6-brands:youtube mx-1.5" />
 | 
				
			||||||
 | 
					            <i v-else-if="platform == 'Odysee'" class="i-fa6-brands:odysee mx-1.5" />
 | 
				
			||||||
        </a>
 | 
					        </a>
 | 
				
			||||||
    </template>
 | 
					    </template>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@
 | 
				
			||||||
                        video.uploader
 | 
					                        video.uploader
 | 
				
			||||||
                    }}</router-link>
 | 
					                    }}</router-link>
 | 
				
			||||||
                    <!-- Verified Badge -->
 | 
					                    <!-- Verified Badge -->
 | 
				
			||||||
                    <font-awesome-icon v-if="video.uploaderVerified" class="ml-1" icon="check" />
 | 
					                    <i v-if="video.uploaderVerified" class="i-fa6-solid:check ml-1" />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <PlaylistAddModal
 | 
					                <PlaylistAddModal
 | 
				
			||||||
                    v-if="showModal"
 | 
					                    v-if="showModal"
 | 
				
			||||||
| 
						 | 
					@ -106,7 +106,7 @@
 | 
				
			||||||
                        {{ $t("actions.download_frame") }}<i class="i-fa6-solid:download" />
 | 
					                        {{ $t("actions.download_frame") }}<i class="i-fa6-solid:download" />
 | 
				
			||||||
                    </button>
 | 
					                    </button>
 | 
				
			||||||
                    <button class="btn flex items-center" @click="showModal = !showModal">
 | 
					                    <button class="btn flex items-center" @click="showModal = !showModal">
 | 
				
			||||||
                        {{ $t("actions.add_to_playlist") }}<font-awesome-icon class="ml-1" icon="circle-plus" />
 | 
					                        {{ $t("actions.add_to_playlist") }}<i class="i-fa6-solid:circle-plus ml-1" />
 | 
				
			||||||
                    </button>
 | 
					                    </button>
 | 
				
			||||||
                    <button
 | 
					                    <button
 | 
				
			||||||
                        class="btn"
 | 
					                        class="btn"
 | 
				
			||||||
| 
						 | 
					@ -128,12 +128,12 @@
 | 
				
			||||||
                            target="_blank"
 | 
					                            target="_blank"
 | 
				
			||||||
                            class="btn flex items-center"
 | 
					                            class="btn flex items-center"
 | 
				
			||||||
                        >
 | 
					                        >
 | 
				
			||||||
                            <font-awesome-icon class="mx-1.5" icon="rss" />
 | 
					                            <i class="i-fa6-solid:rss mx-1.5" />
 | 
				
			||||||
                        </a>
 | 
					                        </a>
 | 
				
			||||||
                        <!-- Share Dialog -->
 | 
					                        <!-- Share Dialog -->
 | 
				
			||||||
                        <button class="btn flex items-center" @click="showShareModal = !showShareModal">
 | 
					                        <button class="btn flex items-center" @click="showShareModal = !showShareModal">
 | 
				
			||||||
                            <i18n-t class="lt-lg:hidden" keypath="actions.share" tag="strong"></i18n-t>
 | 
					                            <i18n-t class="lt-lg:hidden" keypath="actions.share" tag="strong"></i18n-t>
 | 
				
			||||||
                            <font-awesome-icon class="mx-1.5" icon="fa-share" />
 | 
					                            <i class="i-fa6-solid:share mx-1.5" />
 | 
				
			||||||
                        </button>
 | 
					                        </button>
 | 
				
			||||||
                        <!-- YouTube -->
 | 
					                        <!-- YouTube -->
 | 
				
			||||||
                        <WatchOnButton :link="`https://youtu.be/${getVideoId()}`" />
 | 
					                        <WatchOnButton :link="`https://youtu.be/${getVideoId()}`" />
 | 
				
			||||||
| 
						 | 
					@ -150,7 +150,7 @@
 | 
				
			||||||
                            :title="(isListening ? 'Watch ' : 'Listen to ') + video.title"
 | 
					                            :title="(isListening ? 'Watch ' : 'Listen to ') + video.title"
 | 
				
			||||||
                            class="btn flex items-center"
 | 
					                            class="btn flex items-center"
 | 
				
			||||||
                        >
 | 
					                        >
 | 
				
			||||||
                            <font-awesome-icon class="mx-1.5" :icon="isListening ? 'tv' : 'headphones'" />
 | 
					                            <i :class="isListening ? 'i-fa6-solid:tv' : 'i-fa6-solid:headphones'" class="mx-1.5" />
 | 
				
			||||||
                        </router-link>
 | 
					                        </router-link>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										55
									
								
								src/main.js
									
										
									
									
									
								
							
							
						
						
									
										55
									
								
								src/main.js
									
										
									
									
									
								
							| 
						 | 
					@ -1,58 +1,4 @@
 | 
				
			||||||
import { createApp } from "vue";
 | 
					import { createApp } from "vue";
 | 
				
			||||||
import { library } from "@fortawesome/fontawesome-svg-core";
 | 
					 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
    faEye,
 | 
					 | 
				
			||||||
    faThumbtack,
 | 
					 | 
				
			||||||
    faCheck,
 | 
					 | 
				
			||||||
    faHeart,
 | 
					 | 
				
			||||||
    faHeadphones,
 | 
					 | 
				
			||||||
    faRss,
 | 
					 | 
				
			||||||
    faChevronLeft,
 | 
					 | 
				
			||||||
    faLevelDownAlt,
 | 
					 | 
				
			||||||
    faTv,
 | 
					 | 
				
			||||||
    faLevelUpAlt,
 | 
					 | 
				
			||||||
    faBroadcastTower,
 | 
					 | 
				
			||||||
    faCirclePlus,
 | 
					 | 
				
			||||||
    faCircleMinus,
 | 
					 | 
				
			||||||
    faXmark,
 | 
					 | 
				
			||||||
    faClone,
 | 
					 | 
				
			||||||
    faShare,
 | 
					 | 
				
			||||||
    faBook,
 | 
					 | 
				
			||||||
    faServer,
 | 
					 | 
				
			||||||
    faDonate,
 | 
					 | 
				
			||||||
    faBookmark,
 | 
					 | 
				
			||||||
    faEdit,
 | 
					 | 
				
			||||||
} from "@fortawesome/free-solid-svg-icons";
 | 
					 | 
				
			||||||
import { faGithub, faBitcoin, faYoutube, faOdysee } from "@fortawesome/free-brands-svg-icons";
 | 
					 | 
				
			||||||
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
 | 
					 | 
				
			||||||
library.add(
 | 
					 | 
				
			||||||
    faEye,
 | 
					 | 
				
			||||||
    faGithub,
 | 
					 | 
				
			||||||
    faBitcoin,
 | 
					 | 
				
			||||||
    faThumbtack,
 | 
					 | 
				
			||||||
    faCheck,
 | 
					 | 
				
			||||||
    faHeart,
 | 
					 | 
				
			||||||
    faHeadphones,
 | 
					 | 
				
			||||||
    faYoutube,
 | 
					 | 
				
			||||||
    faOdysee,
 | 
					 | 
				
			||||||
    faRss,
 | 
					 | 
				
			||||||
    faChevronLeft,
 | 
					 | 
				
			||||||
    faLevelDownAlt,
 | 
					 | 
				
			||||||
    faLevelUpAlt,
 | 
					 | 
				
			||||||
    faTv,
 | 
					 | 
				
			||||||
    faBroadcastTower,
 | 
					 | 
				
			||||||
    faCirclePlus,
 | 
					 | 
				
			||||||
    faCircleMinus,
 | 
					 | 
				
			||||||
    faXmark,
 | 
					 | 
				
			||||||
    faClone,
 | 
					 | 
				
			||||||
    faShare,
 | 
					 | 
				
			||||||
    faBook,
 | 
					 | 
				
			||||||
    faServer,
 | 
					 | 
				
			||||||
    faDonate,
 | 
					 | 
				
			||||||
    faBookmark,
 | 
					 | 
				
			||||||
    faEdit,
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import router from "@/router/router.js";
 | 
					import router from "@/router/router.js";
 | 
				
			||||||
import App from "./App.vue";
 | 
					import App from "./App.vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -657,5 +603,4 @@ const app = createApp(App);
 | 
				
			||||||
app.use(i18n);
 | 
					app.use(i18n);
 | 
				
			||||||
app.use(router);
 | 
					app.use(router);
 | 
				
			||||||
app.mixin(mixin);
 | 
					app.mixin(mixin);
 | 
				
			||||||
app.component("FontAwesomeIcon", FontAwesomeIcon);
 | 
					 | 
				
			||||||
app.mount("#app");
 | 
					app.mount("#app");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,12 @@ export default defineConfig({
 | 
				
			||||||
        presetUno({
 | 
					        presetUno({
 | 
				
			||||||
            dark: "media",
 | 
					            dark: "media",
 | 
				
			||||||
        }),
 | 
					        }),
 | 
				
			||||||
        presetIcons(),
 | 
					        presetIcons({
 | 
				
			||||||
 | 
					            extraProperties: {
 | 
				
			||||||
 | 
					                display: "inline-block",
 | 
				
			||||||
 | 
					                "vertical-align": "middle",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					        }),
 | 
				
			||||||
        presetWebFonts({
 | 
					        presetWebFonts({
 | 
				
			||||||
            provider: "none",
 | 
					            provider: "none",
 | 
				
			||||||
            fonts: {
 | 
					            fonts: {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue