import {
colorList,
getCommentParentId,
- getRoleLabelPill,
myAuth,
myAuthRequired,
showScores,
import { setupTippy } from "../../tippy";
import { Icon, PurgeWarning, Spinner } from "../common/icon";
import { MomentTime } from "../common/moment-time";
+import { UserBadges } from "../common/user-badges";
import { VoteButtonsCompact } from "../common/vote-buttons";
import { CommunityLink } from "../community/community-link";
import { PersonListing } from "../person/person-listing";
return this.commentView.comment.id;
}
+ get hasBadges(): boolean {
+ const cv = this.commentView;
+
+ return (
+ this.isPostCreator ||
+ isMod(cv.creator.id, this.props.moderators) ||
+ isAdmin(cv.creator.id, this.props.admins) ||
+ cv.creator.bot_account
+ );
+ }
+
componentWillReceiveProps(
nextProps: Readonly<{ children?: InfernoNode } & CommentNodeProps>
): void {
/>
</button>
- <span className="me-2">
- <PersonListing person={cv.creator} />
- </span>
+ <PersonListing person={cv.creator} />
{cv.comment.distinguished && (
- <Icon icon="shield" inline classes="text-danger me-2" />
+ <Icon icon="shield" inline classes="text-danger ms-1" />
)}
- {this.isPostCreator &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("op").toUpperCase(),
- tooltip: I18NextService.i18n.t("creator"),
- classes: "text-bg-info",
- shrink: false,
- })}
-
- {isMod_ &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("mod"),
- tooltip: I18NextService.i18n.t("mod"),
- classes: "text-bg-primary",
- })}
-
- {isAdmin_ &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("admin"),
- tooltip: I18NextService.i18n.t("admin"),
- classes: "text-bg-danger",
- })}
-
- {cv.creator.bot_account &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("bot_account").toLowerCase(),
- tooltip: I18NextService.i18n.t("bot_account"),
- })}
+ <UserBadges
+ classNames="ms-1"
+ isPostCreator={this.isPostCreator}
+ isMod={isMod_}
+ isAdmin={isAdmin_}
+ isBot={cv.creator.bot_account}
+ />
{this.props.showCommunity && (
<>
--- /dev/null
+import { getRoleLabelPill } from "@utils/app";
+import classNames from "classnames";
+import { Component } from "inferno";
+import { I18NextService } from "../../services";
+
+interface UserBadgesProps {
+ isBanned?: boolean;
+ isDeleted?: boolean;
+ isPostCreator?: boolean;
+ isMod?: boolean;
+ isAdmin?: boolean;
+ isBot?: boolean;
+ classNames?: string;
+}
+
+export class UserBadges extends Component<UserBadgesProps> {
+ render() {
+ return (
+ (this.props.isBanned ||
+ this.props.isPostCreator ||
+ this.props.isMod ||
+ this.props.isAdmin ||
+ this.props.isBot) && (
+ <span
+ className={classNames(
+ "row d-inline-flex gx-1",
+ this.props.classNames
+ )}
+ >
+ {this.props.isBanned && (
+ <span className="col">
+ {getRoleLabelPill({
+ label: I18NextService.i18n.t("banned"),
+ tooltip: I18NextService.i18n.t("banned"),
+ classes: "text-bg-danger",
+ shrink: false,
+ })}
+ </span>
+ )}
+ {this.props.isDeleted && (
+ <span className="col">
+ {getRoleLabelPill({
+ label: I18NextService.i18n.t("deleted"),
+ tooltip: I18NextService.i18n.t("deleted"),
+ classes: "text-bg-danger",
+ shrink: false,
+ })}
+ </span>
+ )}
+
+ {this.props.isPostCreator && (
+ <span className="col">
+ {getRoleLabelPill({
+ label: I18NextService.i18n.t("op").toUpperCase(),
+ tooltip: I18NextService.i18n.t("creator"),
+ classes: "text-bg-info",
+ shrink: false,
+ })}
+ </span>
+ )}
+ {this.props.isMod && (
+ <span className="col">
+ {getRoleLabelPill({
+ label: I18NextService.i18n.t("mod"),
+ tooltip: I18NextService.i18n.t("mod"),
+ classes: "text-bg-primary",
+ })}
+ </span>
+ )}
+ {this.props.isAdmin && (
+ <span className="col">
+ {getRoleLabelPill({
+ label: I18NextService.i18n.t("admin"),
+ tooltip: I18NextService.i18n.t("admin"),
+ classes: "text-bg-danger",
+ })}
+ </span>
+ )}
+ {this.props.isBot && (
+ <span className="col">
+ {getRoleLabelPill({
+ label: I18NextService.i18n.t("bot_account").toLowerCase(),
+ tooltip: I18NextService.i18n.t("bot_account"),
+ })}
+ </span>
+ )}
+ </span>
+ )
+ );
+ }
+}
enableDownvotes,
enableNsfw,
getCommentParentId,
- getRoleLabelPill,
myAuth,
myAuthRequired,
setIsoData,
import { Icon, Spinner } from "../common/icon";
import { MomentTime } from "../common/moment-time";
import { SortSelect } from "../common/sort-select";
+import { UserBadges } from "../common/user-badges";
import { CommunityLink } from "../community/community-link";
import { PersonDetails } from "./person-details";
import { PersonListing } from "./person-listing";
hideAvatar
/>
</li>
- {isBanned(pv.person) && (
- <li className="list-inline-item">
- {getRoleLabelPill({
- label: I18NextService.i18n.t("banned"),
- tooltip: I18NextService.i18n.t("banned"),
- classes: "text-bg-danger",
- shrink: false,
- })}
- </li>
- )}
- {pv.person.deleted && (
- <li className="list-inline-item">
- {getRoleLabelPill({
- label: I18NextService.i18n.t("deleted"),
- tooltip: I18NextService.i18n.t("deleted"),
- classes: "text-bg-danger",
- shrink: false,
- })}
- </li>
- )}
- {pv.person.admin && (
- <li className="list-inline-item">
- {getRoleLabelPill({
- label: I18NextService.i18n.t("admin"),
- tooltip: I18NextService.i18n.t("admin"),
- shrink: false,
- })}
- </li>
- )}
- {pv.person.bot_account && (
- <li className="list-inline-item">
- {getRoleLabelPill({
- label: I18NextService.i18n
- .t("bot_account")
- .toLowerCase(),
- tooltip: I18NextService.i18n.t("bot_account"),
- shrink: false,
- })}
- </li>
- )}
+ <li className="list-inline-item">
+ <UserBadges
+ classNames="ms-1"
+ isBanned={isBanned(pv.person)}
+ isDeleted={pv.person.deleted}
+ isAdmin={pv.person.admin}
+ isBot={pv.person.bot_account}
+ />
+ </li>
</ul>
</div>
{this.banDialog(pv)}
-import { getRoleLabelPill, myAuthRequired } from "@utils/app";
+import { myAuthRequired } from "@utils/app";
import { canShare, share } from "@utils/browser";
import { getExternalHost, getHttpBase } from "@utils/env";
import {
import { Icon, PurgeWarning, Spinner } from "../common/icon";
import { MomentTime } from "../common/moment-time";
import { PictrsImage } from "../common/pictrs-image";
+import { UserBadges } from "../common/user-badges";
import { VoteButtons, VoteButtonsCompact } from "../common/vote-buttons";
import { CommunityLink } from "../community/community-link";
import { PersonListing } from "../person/person-listing";
return (
<div className="small mb-1 mb-md-0">
- <span className="me-1">
- <PersonListing person={post_view.creator} />
- </span>
- {this.creatorIsMod_ &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("mod"),
- tooltip: I18NextService.i18n.t("mod"),
- classes: "text-bg-primary",
- })}
- {this.creatorIsAdmin_ &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("admin"),
- tooltip: I18NextService.i18n.t("admin"),
- classes: "text-bg-danger",
- })}
- {post_view.creator.bot_account &&
- getRoleLabelPill({
- label: I18NextService.i18n.t("bot_account").toLowerCase(),
- tooltip: I18NextService.i18n.t("bot_account"),
- })}
+ <PersonListing person={post_view.creator} />
+ <UserBadges
+ classNames="ms-1"
+ isMod={this.creatorIsMod_}
+ isAdmin={this.creatorIsAdmin_}
+ isBot={post_view.creator.bot_account}
+ />
{this.props.showCommunity && (
<>
{" "}
}) {
return (
<span
- className={`badge me-1 ${classes ?? "text-bg-light"}`}
+ className={`badge ${classes ?? "text-bg-light"}`}
aria-label={tooltip}
data-tippy-content={tooltip}
>