Make confirm popup for adult consent

This commit is contained in:
SleeplessOne1917 2024-04-11 22:50:36 -04:00
parent e48590b9d6
commit fff198a012
5 changed files with 45 additions and 23 deletions

@ -1 +1 @@
Subproject commit b0dab329ce23cfaec4a3a034ea2fee210888922e Subproject commit a94ef775f3f923067b48c1719cda206dbcf1a9e5

View file

@ -14,6 +14,7 @@ import "./styles.scss";
import { Theme } from "./theme"; import { Theme } from "./theme";
import AnonymousGuard from "../common/anonymous-guard"; import AnonymousGuard from "../common/anonymous-guard";
import { destroyTippy, setupTippy } from "../../tippy"; import { destroyTippy, setupTippy } from "../../tippy";
import { adultConsentLocalStorageKey } from "shared/config";
export class App extends Component<any, any> { export class App extends Component<any, any> {
private isoData: IsoDataOptionalSite = setIsoData(this.context); private isoData: IsoDataOptionalSite = setIsoData(this.context);
@ -25,6 +26,19 @@ export class App extends Component<any, any> {
} }
componentDidMount(): void { componentDidMount(): void {
const siteRes = this.isoData.site_res;
if (
siteRes?.site_view.site.content_warning &&
!(siteRes?.my_user || localStorage.getItem(adultConsentLocalStorageKey))
) {
if (confirm(siteRes.site_view.site.content_warning)) {
localStorage.setItem(adultConsentLocalStorageKey, "true");
} else {
history.back();
}
}
setupTippy(this.rootRef); setupTippy(this.rootRef);
} }

View file

@ -2,6 +2,8 @@ import classNames from "classnames";
import { Component } from "inferno"; import { Component } from "inferno";
import { UserService } from "../../services"; import { UserService } from "../../services";
import { setIsoData } from "@utils/app";
import { IsoDataOptionalSite } from "shared/interfaces";
const iconThumbnailSize = 96; const iconThumbnailSize = 96;
const thumbnailSize = 256; const thumbnailSize = 256;
@ -19,6 +21,8 @@ interface PictrsImageProps {
} }
export class PictrsImage extends Component<PictrsImageProps, any> { export class PictrsImage extends Component<PictrsImageProps, any> {
private isoData: IsoDataOptionalSite = setIsoData(this.context);
constructor(props: any, context: any) { constructor(props: any, context: any) {
super(props, context); super(props, context);
} }
@ -26,13 +30,11 @@ export class PictrsImage extends Component<PictrsImageProps, any> {
render() { render() {
const { src, icon, iconOverlay, banner, thumbnail, nsfw, pushup, cardTop } = const { src, icon, iconOverlay, banner, thumbnail, nsfw, pushup, cardTop } =
this.props; this.props;
let user_blur_nsfw = true;
if (UserService.Instance.myUserInfo) {
user_blur_nsfw =
UserService.Instance.myUserInfo?.local_user_view.local_user.blur_nsfw;
}
const blur_image = nsfw && user_blur_nsfw; const blurImage =
nsfw &&
(!this.isoData.site_res?.site_view.site.content_warning ||
UserService.Instance.myUserInfo?.local_user_view.local_user.blur_nsfw);
return ( return (
<picture> <picture>
@ -52,8 +54,8 @@ export class PictrsImage extends Component<PictrsImageProps, any> {
"img-expanded slight-radius": !(thumbnail || icon), "img-expanded slight-radius": !(thumbnail || icon),
"img-blur": thumbnail && nsfw, "img-blur": thumbnail && nsfw,
"object-fit-cover img-icon me-1": icon, "object-fit-cover img-icon me-1": icon,
"img-blur-icon": icon && blur_image, "img-blur-icon": icon && blurImage,
"img-blur-thumb": thumbnail && blur_image, "img-blur-thumb": thumbnail && blurImage,
"ms-2 mb-0 rounded-circle object-fit-cover avatar-overlay": "ms-2 mb-0 rounded-circle object-fit-cover avatar-overlay":
iconOverlay, iconOverlay,
"avatar-pushup": pushup, "avatar-pushup": pushup,

View file

@ -261,22 +261,27 @@ export class Signup extends Component<
</> </>
)} )}
{this.renderCaptcha()} {this.renderCaptcha()}
<div className="mb-3 row"> {!this.state.siteRes.site_view.site.content_warning && (
<div className="col-sm-10"> <div className="mb-3 row">
<div className="form-check"> <div className="col-sm-10">
<input <div className="form-check">
className="form-check-input" <input
id="register-show-nsfw" className="form-check-input"
type="checkbox" id="register-show-nsfw"
checked={this.state.form.show_nsfw} type="checkbox"
onChange={linkEvent(this, this.handleRegisterShowNsfwChange)} checked={this.state.form.show_nsfw}
/> onChange={linkEvent(this, this.handleRegisterShowNsfwChange)}
<label className="form-check-label" htmlFor="register-show-nsfw"> />
{I18NextService.i18n.t("show_nsfw")} <label
</label> className="form-check-label"
htmlFor="register-show-nsfw"
>
{I18NextService.i18n.t("show_nsfw")}
</label>
</div>
</div> </div>
</div> </div>
</div> )}
<input <input
tabIndex={-1} tabIndex={-1}
autoComplete="false" autoComplete="false"

View file

@ -28,6 +28,7 @@ export const fetchLimit = 20;
export const relTags = "noopener nofollow"; export const relTags = "noopener nofollow";
export const emDash = "\u2014"; export const emDash = "\u2014";
export const authCookieName = "jwt"; export const authCookieName = "jwt";
export const adultConsentLocalStorageKey = "adult-consent";
// No. of max displayed communities per // No. of max displayed communities per
// page on route "/communities" // page on route "/communities"