Compare commits

...

2 Commits

Author SHA1 Message Date
030d6dc835 0.45.5 2026-01-30 06:03:06 +01:00
fc46ae00f8 Added plain URL for privileged users. 2026-01-30 06:03:03 +01:00
9 changed files with 42 additions and 12 deletions

View File

@@ -18,7 +18,7 @@
</div> </div>
<Link <Link
:href="scene.watchUrl" :href="user?.abilities.some((ability) => ability.plainUrls) ? scene.url : scene.watchUrl"
:title="scene.date ? format(scene.date.toISOString(), 'y-MM-dd hh:mm') : `Release date unknown, added ${format(scene.createdAt, 'y-MM-dd')}`" :title="scene.date ? format(scene.date.toISOString(), 'y-MM-dd hh:mm') : `Release date unknown, added ${format(scene.createdAt, 'y-MM-dd')}`"
target="_blank" target="_blank"
class="date-link nolink" class="date-link nolink"
@@ -52,6 +52,10 @@ defineProps({
type: Object, type: Object,
default: null, default: null,
}, },
user: {
type: Object,
default: null,
},
}); });
</script> </script>

View File

@@ -38,6 +38,7 @@
<Meta <Meta
:scene="scene" :scene="scene"
:user="user"
class="meta-full" class="meta-full"
/> />

4
package-lock.json generated
View File

@@ -1,11 +1,11 @@
{ {
"name": "traxxx-web", "name": "traxxx-web",
"version": "0.45.4", "version": "0.45.5",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"version": "0.45.4", "version": "0.45.5",
"dependencies": { "dependencies": {
"@brillout/json-serializer": "^0.5.8", "@brillout/json-serializer": "^0.5.8",
"@dicebear/collection": "^7.0.5", "@dicebear/collection": "^7.0.5",

View File

@@ -89,7 +89,7 @@
"overrides": { "overrides": {
"vite": "$vite" "vite": "$vite"
}, },
"version": "0.45.4", "version": "0.45.5",
"imports": { "imports": {
"#/*": "./*.js" "#/*": "./*.js"
} }

View File

@@ -43,6 +43,14 @@
>{{ entity.name }}</h2> >{{ entity.name }}</h2>
</a> </a>
<a
v-if="user?.abilities.some((ability) => ability.plainUrls)"
:href="entity.url"
target="_blank"
rel="noopener"
class="plainurl"
><Icon icon="link" /></a>
<Heart <Heart
domain="entities" domain="entities"
:item="entity" :item="entity"
@@ -154,7 +162,7 @@ import Movies from '#/components/movies/movies.vue';
import Domains from '#/components/domains/domains.vue'; import Domains from '#/components/domains/domains.vue';
import Heart from '#/components/stashes/heart.vue'; import Heart from '#/components/stashes/heart.vue';
const { pageProps, routeParams } = inject('pageContext'); const { pageProps, routeParams, user } = inject('pageContext');
const { entity } = pageProps; const { entity } = pageProps;
const children = ref(null); const children = ref(null);
@@ -163,9 +171,7 @@ const expanded = ref(false);
const scrollable = computed(() => children.value?.scrollWidth > children.value?.clientWidth); const scrollable = computed(() => children.value?.scrollWidth > children.value?.clientWidth);
const domain = routeParams.domain; const domain = routeParams.domain;
const entityUrl = (() => { const entityUrl = entity.affiliateUrl || entity.url || null;
return entity.affiliateUrl || entity.url || null;
})();
</script> </script>
<style scoped> <style scoped>
@@ -313,6 +319,25 @@ const entityUrl = (() => {
display: none; display: none;
} }
.plainurl {
height: 100%;
display: flex;
align-items: center;
padding: 0 .25rem;
margin-top: -.25rem;
.icon {
width: 1rem;
height: auto;
padding: .5rem;
fill: var(--highlight);
}
&:hover .icon {
fill: var(--primary);
}
}
@media(--small-20) { @media(--small-20) {
.logo { .logo {
padding: .5rem 1rem; padding: .5rem 1rem;

View File

@@ -52,7 +52,7 @@
</div> </div>
<Link <Link
:href="scene.watchUrl" :href="user?.abilities.some((ability) => ability.plainUrls) ? scene.url : scene.watchUrl"
:title="scene.date ? formatDate(scene.date.toISOString(), 'y-MM-dd hh:mm') : `Release date unknown, added ${formatDate(scene.createdAt, 'y-MM-dd')}`" :title="scene.date ? formatDate(scene.date.toISOString(), 'y-MM-dd hh:mm') : `Release date unknown, added ${formatDate(scene.createdAt, 'y-MM-dd')}`"
target="_blank" target="_blank"
class="date nolink" class="date nolink"

View File

@@ -126,7 +126,7 @@ function curateScene(rawScene, assets, reqUser) {
const isVideoRestricted = config.media.videoRestrictions.includes(curatedScene.channel.slug) || config.media.videoRestrictions.includes(`_${curatedScene.network?.slug}`); const isVideoRestricted = config.media.videoRestrictions.includes(curatedScene.channel.slug) || config.media.videoRestrictions.includes(`_${curatedScene.network?.slug}`);
if ((!isVideoRestricted || reqUser?.abilities?.trailerAccess)) { if (!isVideoRestricted || reqUser?.abilities?.some((ability) => ability.trailerAccess)) {
curatedScene.trailer = curateMedia(assets.trailer, { type: 'trailer', isRestricted: isVideoRestricted }); curatedScene.trailer = curateMedia(assets.trailer, { type: 'trailer', isRestricted: isVideoRestricted });
curatedScene.teaser = curateMedia(assets.teaser, { type: 'teaser', isRestricted: isVideoRestricted }); curatedScene.teaser = curateMedia(assets.teaser, { type: 'teaser', isRestricted: isVideoRestricted });
} }

View File

@@ -29,7 +29,7 @@ export function curateUser(user, _assets = {}) {
isIdentityVerified: user.identity_verified, isIdentityVerified: user.identity_verified,
avatar: `/media/avatars/${user.id}_${user.username}.png`, avatar: `/media/avatars/${user.id}_${user.username}.png`,
role: user.role, role: user.role,
abilities: user.abilities, abilities: [...user.role_abilities || [], ...user.abilities || []],
createdAt: user.created_at, createdAt: user.created_at,
}; };

2
static

Submodule static updated: c8ee47e181...7887d3f52e