mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 21:04:37 +03:00
fix separator being used around null fields (#3996)
* fix separator being used around null fields * updated apple.ts code to use UAParser
This commit is contained in:
@@ -64,9 +64,11 @@ export const CompressedMovieDetailsPanel: React.FC<IMovieDetailsPanel> = ({
|
|||||||
<a className="movie-name" onClick={() => scrollToTop()}>
|
<a className="movie-name" onClick={() => scrollToTop()}>
|
||||||
{movie.name}
|
{movie.name}
|
||||||
</a>
|
</a>
|
||||||
<span className="detail-divider">/</span>
|
|
||||||
{movie?.studio?.name ? (
|
{movie?.studio?.name ? (
|
||||||
|
<>
|
||||||
|
<span className="detail-divider">/</span>
|
||||||
<span className="movie-studio">{movie?.studio?.name}</span>
|
<span className="movie-studio">{movie?.studio?.name}</span>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
""
|
""
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -329,27 +329,35 @@ export const CompressedPerformerDetailsPanel: React.FC<IPerformerDetails> = ({
|
|||||||
<a className="performer-name" onClick={() => scrollToTop()}>
|
<a className="performer-name" onClick={() => scrollToTop()}>
|
||||||
{performer.name}
|
{performer.name}
|
||||||
</a>
|
</a>
|
||||||
<span className="detail-divider">/</span>
|
|
||||||
{performer.gender ? (
|
{performer.gender ? (
|
||||||
|
<>
|
||||||
|
<span className="detail-divider">/</span>
|
||||||
<span className="performer-gender">
|
<span className="performer-gender">
|
||||||
{intl.formatMessage({ id: "gender_types." + performer.gender })}
|
{intl.formatMessage({ id: "gender_types." + performer.gender })}
|
||||||
</span>
|
</span>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
""
|
""
|
||||||
)}
|
)}
|
||||||
<span className="detail-divider">/</span>
|
|
||||||
{performer.birthdate ? (
|
{performer.birthdate ? (
|
||||||
|
<>
|
||||||
|
<span className="detail-divider">/</span>
|
||||||
<span
|
<span
|
||||||
className="performer-age"
|
className="performer-age"
|
||||||
title={TextUtils.formatDate(intl, performer.birthdate ?? undefined)}
|
title={TextUtils.formatDate(
|
||||||
|
intl,
|
||||||
|
performer.birthdate ?? undefined
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
{TextUtils.age(performer.birthdate, performer.death_date)}
|
{TextUtils.age(performer.birthdate, performer.death_date)}
|
||||||
</span>
|
</span>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
""
|
""
|
||||||
)}
|
)}
|
||||||
<span className="detail-divider">/</span>
|
|
||||||
{performer.country ? (
|
{performer.country ? (
|
||||||
|
<>
|
||||||
|
<span className="detail-divider">/</span>
|
||||||
<span className="performer-country">
|
<span className="performer-country">
|
||||||
<CountryFlag
|
<CountryFlag
|
||||||
country={performer.country}
|
country={performer.country}
|
||||||
@@ -357,6 +365,7 @@ export const CompressedPerformerDetailsPanel: React.FC<IPerformerDetails> = ({
|
|||||||
includeName={true}
|
includeName={true}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
""
|
""
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -89,9 +89,11 @@ export const CompressedStudioDetailsPanel: React.FC<IStudioDetailsPanel> = ({
|
|||||||
<a className="studio-name" onClick={() => scrollToTop()}>
|
<a className="studio-name" onClick={() => scrollToTop()}>
|
||||||
{studio.name}
|
{studio.name}
|
||||||
</a>
|
</a>
|
||||||
<span className="detail-divider">/</span>
|
|
||||||
{studio?.parent_studio?.name ? (
|
{studio?.parent_studio?.name ? (
|
||||||
|
<>
|
||||||
|
<span className="detail-divider">/</span>
|
||||||
<span className="studio-parent">{studio?.parent_studio?.name}</span>
|
<span className="studio-parent">{studio?.parent_studio?.name}</span>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
""
|
""
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -79,9 +79,11 @@ export const CompressedTagDetailsPanel: React.FC<ITagDetails> = ({ tag }) => {
|
|||||||
<a className="tag-name" onClick={() => scrollToTop()}>
|
<a className="tag-name" onClick={() => scrollToTop()}>
|
||||||
{tag.name}
|
{tag.name}
|
||||||
</a>
|
</a>
|
||||||
<span className="detail-divider">/</span>
|
|
||||||
{tag.description ? (
|
{tag.description ? (
|
||||||
|
<>
|
||||||
|
<span className="detail-divider">/</span>
|
||||||
<span className="tag-desc">{tag.description}</span>
|
<span className="tag-desc">{tag.description}</span>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
""
|
""
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -374,6 +374,7 @@ dd {
|
|||||||
/* the .apple class denotes areas where rendering on some apple platforms has been inconsistent with other platforms
|
/* the .apple class denotes areas where rendering on some apple platforms has been inconsistent with other platforms
|
||||||
these rules aim to address those inconsistences */
|
these rules aim to address those inconsistences */
|
||||||
.apple {
|
.apple {
|
||||||
|
@media (min-width: 576px) {
|
||||||
.detail-header {
|
.detail-header {
|
||||||
.detail-container {
|
.detail-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -388,6 +389,7 @@ dd {
|
|||||||
.detail-header.edit .detail-header-image {
|
.detail-header.edit .detail-header-image {
|
||||||
display: unset;
|
display: unset;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-item-title {
|
.detail-item-title {
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
|
import UAParser from "ua-parser-js";
|
||||||
|
|
||||||
export function isPlatformUniquelyRenderedByApple() {
|
export function isPlatformUniquelyRenderedByApple() {
|
||||||
return (
|
// OS name on iPads show up as iOS or Max OS depending on the browser.
|
||||||
/(ipad)/i.test(navigator.userAgent) ||
|
const isiOS = UAParser().os.name?.includes("iOS");
|
||||||
/(macintosh.*safari)/i.test(navigator.userAgent)
|
const isMacOS = UAParser().os.name?.includes("Mac OS");
|
||||||
);
|
const isSafari = UAParser().browser.name?.includes("Safari");
|
||||||
|
return isiOS || (isMacOS && isSafari);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user