flex: 1;
}
-.img-blur {
+.img-blur-thumb {
filter: blur(10px);
-webkit-filter: blur(10px);
-moz-filter: blur(10px);
-ms-filter: blur(10px);
}
+.img-blur-icon {
+ filter: blur(3px);
+ -webkit-filter: blur(3px);
+ -moz-filter: blur(3px);
+ -o-filter: blur(3px);
+ -ms-filter: blur(3px);
+}
+
+.img-cover {
+ object-fit: cover;
+}
+
.img-expanded {
max-height: 90vh;
}
import classNames from "classnames";
import { Component } from "inferno";
+import { UserService } from "../../services";
+
const iconThumbnailSize = 96;
const thumbnailSize = 256;
}
render() {
+ 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 = this.props.nsfw && user_blur_nsfw;
+
return (
<picture>
<source srcSet={this.src("webp")} type="image/webp" />
this.props.thumbnail && !this.props.icon && !this.props.banner,
"img-expanded slight-radius":
!this.props.thumbnail && !this.props.icon,
- "img-blur": this.props.thumbnail && this.props.nsfw,
+ "img-blur-icon": this.props.icon && blur_image,
+ "img-blur-thumb": this.props.thumbnail && blur_image,
"object-fit-cover img-icon me-1": this.props.icon,
"ms-2 mb-0 rounded-circle object-fit-cover avatar-overlay":
this.props.iconOverlay,
avatarAndName(displayName: string) {
const icon = this.props.community.icon;
+ const nsfw = this.props.community.nsfw;
+
return (
<>
{!this.props.hideAvatar &&
!this.props.community.removed &&
showAvatars() &&
- icon && <PictrsImage src={icon} icon />}
+ icon && <PictrsImage src={icon} icon nsfw={nsfw} />}
<span className="overflow-wrap-anywhere">{displayName}</span>
</>
);
// TODO redo these forms
saveUserSettingsForm: {
show_nsfw?: boolean;
+ blur_nsfw?: boolean;
+ auto_expand?: boolean;
theme?: string;
default_sort_type?: SortType;
default_listing_type?: ListingType;
const {
local_user: {
show_nsfw,
+ blur_nsfw,
+ auto_expand,
theme,
default_sort_type,
default_listing_type,
saveUserSettingsForm: {
...this.state.saveUserSettingsForm,
show_nsfw,
+ blur_nsfw,
+ auto_expand,
theme: theme ?? "browser",
default_sort_type,
default_listing_type,
</label>
</div>
</div>
+ <div className="input-group mb-3">
+ <div className="form-check">
+ <input
+ className="form-check-input"
+ id="user-blur-nsfw"
+ type="checkbox"
+ checked={this.state.saveUserSettingsForm.blur_nsfw}
+ onChange={linkEvent(this, this.handleBlurNsfwChange)}
+ />
+ <label className="form-check-label" htmlFor="user-blur-nsfw">
+ {I18NextService.i18n.t("blur_nsfw")}
+ </label>
+ </div>
+ </div>
+ <div className="input-group mb-3">
+ <div className="form-check">
+ <input
+ className="form-check-input"
+ id="user-auto-expand"
+ type="checkbox"
+ checked={this.state.saveUserSettingsForm.auto_expand}
+ onChange={linkEvent(this, this.handleAutoExpandChange)}
+ />
+ <label className="form-check-label" htmlFor="user-auto-expand">
+ {I18NextService.i18n.t("auto_expand")}
+ </label>
+ </div>
+ </div>
<div className="input-group mb-3">
<div className="form-check">
<input
);
}
+ handleBlurNsfwChange(i: Settings, event: any) {
+ i.setState(
+ s => ((s.saveUserSettingsForm.blur_nsfw = event.target.checked), s),
+ );
+ }
+
+ handleAutoExpandChange(i: Settings, event: any) {
+ i.setState(
+ s => ((s.saveUserSettingsForm.auto_expand = event.target.checked), s),
+ );
+ }
+
handleShowAvatarsChange(i: Settings, event: any) {
const mui = UserService.Instance.myUserInfo;
if (mui) {
constructor(props: any, context: any) {
super(props, context);
+ if (UserService.Instance.myUserInfo) {
+ this.state.imageExpanded =
+ UserService.Instance.myUserInfo.local_user_view.local_user.auto_expand;
+ }
+
this.handleEditPost = this.handleEditPost.bind(this);
this.handleEditCancel = this.handleEditCancel.bind(this);
}
imgThumb(src: string) {
const post_view = this.postView;
+
return (
<PictrsImage
src={src}