From 8390744391e1c5fdcbee359ea61a467d928e11ce Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sat, 29 Feb 2020 22:06:42 -0500 Subject: [PATCH] Adding more for advanced actions on comments and posts. - Fixes #561 --- ui/src/components/comment-node.tsx | 469 +++++++++++++++-------------- ui/src/components/post-listing.tsx | 368 ++++++++++++---------- ui/translations/en.json | 1 + 3 files changed, 452 insertions(+), 386 deletions(-) diff --git a/ui/src/components/comment-node.tsx b/ui/src/components/comment-node.tsx index 1d0b12cad..a904eae36 100644 --- a/ui/src/components/comment-node.tsx +++ b/ui/src/components/comment-node.tsx @@ -48,6 +48,7 @@ interface CommentNodeState { showConfirmAppointAsAdmin: boolean; collapsed: boolean; viewSource: boolean; + showAdvanced: boolean; my_vote: number; score: number; upvotes: number; @@ -81,6 +82,7 @@ export class CommentNode extends Component { banType: BanType.Community, collapsed: false, viewSource: false, + showAdvanced: false, showConfirmTransferSite: false, showConfirmTransferCommunity: false, showConfirmAppointAsMod: false, @@ -300,93 +302,259 @@ export class CommentNode extends Component { )} -
  • -
  • - - {i18n.t('view_source')} - -
  • -
  • - - {i18n.t('link')} - -
  • - {/* Admins and mods can remove comments */} - {(this.canMod || this.canAdmin) && ( + {!this.state.showAdvanced ? ( +
  • + + {i18n.t('more')} + +
  • + ) : ( <>
  • - {!node.comment.removed ? ( - - {i18n.t('remove')} - - ) : ( - - {i18n.t('restore')} - - )} + + {i18n.t('view_source')} +
  • - - )} - {/* Mods can ban from community, and appoint as mods to community */} - {this.canMod && ( - <> - {!this.isMod && ( -
  • - {!node.comment.banned_from_community ? ( - - {i18n.t('ban')} - - ) : ( - - {i18n.t('unban')} - - )} -
  • +
  • + + {i18n.t('link')} + +
  • + {/* Admins and mods can remove comments */} + {(this.canMod || this.canAdmin) && ( + <> +
  • +
  • + {!node.comment.removed ? ( + + {i18n.t('remove')} + + ) : ( + + {i18n.t('restore')} + + )} +
  • + )} - {!node.comment.banned_from_community && ( + {/* Mods can ban from community, and appoint as mods to community */} + {this.canMod && ( + <> + {!this.isMod && ( +
  • + {!node.comment.banned_from_community ? ( + + {i18n.t('ban')} + + ) : ( + + {i18n.t('unban')} + + )} +
  • + )} + {!node.comment.banned_from_community && ( +
  • + {!this.state.showConfirmAppointAsMod ? ( + + {this.isMod + ? i18n.t('remove_as_mod') + : i18n.t('appoint_as_mod')} + + ) : ( + <> + + {i18n.t('are_you_sure')} + + + {i18n.t('yes')} + + + {i18n.t('no')} + + + )} +
  • + )} + + )} + {/* Community creators and admins can transfer community to another mod */} + {(this.amCommunityCreator || this.canAdmin) && + this.isMod && ( +
  • + {!this.state.showConfirmTransferCommunity ? ( + + {i18n.t('transfer_community')} + + ) : ( + <> + + {i18n.t('are_you_sure')} + + + {i18n.t('yes')} + + + {i18n.t('no')} + + + )} +
  • + )} + {/* Admins can ban from all, and appoint other admins */} + {this.canAdmin && ( + <> + {!this.isAdmin && ( +
  • + {!node.comment.banned ? ( + + {i18n.t('ban_from_site')} + + ) : ( + + {i18n.t('unban_from_site')} + + )} +
  • + )} + {!node.comment.banned && ( +
  • + {!this.state.showConfirmAppointAsAdmin ? ( + + {this.isAdmin + ? i18n.t('remove_as_admin') + : i18n.t('appoint_as_admin')} + + ) : ( + <> + + {i18n.t('are_you_sure')} + + + {i18n.t('yes')} + + + {i18n.t('no')} + + + )} +
  • + )} + + )} + {/* Site Creator can transfer to another admin */} + {this.amSiteCreator && this.isAdmin && (
  • - {!this.state.showConfirmAppointAsMod ? ( + {!this.state.showConfirmTransferSite ? ( - {this.isMod - ? i18n.t('remove_as_mod') - : i18n.t('appoint_as_mod')} + {i18n.t('transfer_site')} ) : ( <> @@ -397,7 +565,7 @@ export class CommentNode extends Component { class="pointer d-inline-block mr-1" onClick={linkEvent( this, - this.handleAddModToCommunity + this.handleTransferSite )} > {i18n.t('yes')} @@ -406,7 +574,7 @@ export class CommentNode extends Component { class="pointer d-inline-block" onClick={linkEvent( this, - this.handleCancelConfirmAppointAsMod + this.handleCancelShowConfirmTransferSite )} > {i18n.t('no')} @@ -417,148 +585,6 @@ export class CommentNode extends Component { )} )} - {/* Community creators and admins can transfer community to another mod */} - {(this.amCommunityCreator || this.canAdmin) && this.isMod && ( -
  • - {!this.state.showConfirmTransferCommunity ? ( - - {i18n.t('transfer_community')} - - ) : ( - <> - - {i18n.t('are_you_sure')} - - - {i18n.t('yes')} - - - {i18n.t('no')} - - - )} -
  • - )} - {/* Admins can ban from all, and appoint other admins */} - {this.canAdmin && ( - <> - {!this.isAdmin && ( -
  • - {!node.comment.banned ? ( - - {i18n.t('ban_from_site')} - - ) : ( - - {i18n.t('unban_from_site')} - - )} -
  • - )} - {!node.comment.banned && ( -
  • - {!this.state.showConfirmAppointAsAdmin ? ( - - {this.isAdmin - ? i18n.t('remove_as_admin') - : i18n.t('appoint_as_admin')} - - ) : ( - <> - - {i18n.t('are_you_sure')} - - - {i18n.t('yes')} - - - {i18n.t('no')} - - - )} -
  • - )} - - )} - {/* Site Creator can transfer to another admin */} - {this.amSiteCreator && this.isAdmin && ( -
  • - {!this.state.showConfirmTransferSite ? ( - - {i18n.t('transfer_site')} - - ) : ( - <> - - {i18n.t('are_you_sure')} - - - {i18n.t('yes')} - - - {i18n.t('no')} - - - )} -
  • - )} )} @@ -1016,4 +1042,9 @@ export class CommentNode extends Component { i.state.viewSource = !i.state.viewSource; i.setState(i.state); } + + handleShowAdvanced(i: CommentNode) { + i.state.showAdvanced = !i.state.showAdvanced; + i.setState(i.state); + } } diff --git a/ui/src/components/post-listing.tsx b/ui/src/components/post-listing.tsx index 1fdfad2d5..d57aa6636 100644 --- a/ui/src/components/post-listing.tsx +++ b/ui/src/components/post-listing.tsx @@ -45,6 +45,7 @@ interface PostListingState { showConfirmTransferCommunity: boolean; imageExpanded: boolean; viewSource: boolean; + showAdvanced: boolean; my_vote: number; score: number; upvotes: number; @@ -75,6 +76,7 @@ export class PostListing extends Component { showConfirmTransferCommunity: false, imageExpanded: false, viewSource: false, + showAdvanced: false, my_vote: this.props.post.my_vote, score: this.props.post.score, upvotes: this.props.post.upvotes, @@ -511,211 +513,238 @@ export class PostListing extends Component { )} - {this.canModOnSelf && ( - <> -
  • - - {post.locked ? i18n.t('unlock') : i18n.t('lock')} - -
  • -
  • - - {post.stickied - ? i18n.t('unsticky') - : i18n.t('sticky')} - -
  • - - )} - {/* Mods can ban from community, and appoint as mods to community */} - {(this.canMod || this.canAdmin) && ( + + {!this.state.showAdvanced && this.props.showBody ? (
  • - {!post.removed ? ( - - {i18n.t('remove')} - - ) : ( - - {i18n.t('restore')} - - )} + + {i18n.t('more')} +
  • - )} - {this.canMod && ( + ) : ( <> - {!this.isMod && ( + {this.canModOnSelf && ( + <> +
  • + + {post.locked + ? i18n.t('unlock') + : i18n.t('lock')} + +
  • +
  • + + {post.stickied + ? i18n.t('unsticky') + : i18n.t('sticky')} + +
  • + + )} + {/* Mods can ban from community, and appoint as mods to community */} + {(this.canMod || this.canAdmin) && (
  • - {!post.banned_from_community ? ( + {!post.removed ? ( - {i18n.t('ban')} + {i18n.t('remove')} ) : ( - {i18n.t('unban')} + {i18n.t('restore')} )}
  • )} - {!post.banned_from_community && ( -
  • - - {this.isMod - ? i18n.t('remove_as_mod') - : i18n.t('appoint_as_mod')} - -
  • - )} - - )} - {/* Community creators and admins can transfer community to another mod */} - {(this.amCommunityCreator || this.canAdmin) && this.isMod && ( -
  • - {!this.state.showConfirmTransferCommunity ? ( - - {i18n.t('transfer_community')} - - ) : ( + {this.canMod && ( <> - - {i18n.t('are_you_sure')} - - - {i18n.t('yes')} - - - {i18n.t('no')} - + {!this.isMod && ( +
  • + {!post.banned_from_community ? ( + + {i18n.t('ban')} + + ) : ( + + {i18n.t('unban')} + + )} +
  • + )} + {!post.banned_from_community && ( +
  • + + {this.isMod + ? i18n.t('remove_as_mod') + : i18n.t('appoint_as_mod')} + +
  • + )} )} - - )} - {/* Admins can ban from all, and appoint other admins */} - {this.canAdmin && ( - <> - {!this.isAdmin && ( + {/* Community creators and admins can transfer community to another mod */} + {(this.amCommunityCreator || this.canAdmin) && + this.isMod && ( +
  • + {!this.state.showConfirmTransferCommunity ? ( + + {i18n.t('transfer_community')} + + ) : ( + <> + + {i18n.t('are_you_sure')} + + + {i18n.t('yes')} + + + {i18n.t('no')} + + + )} +
  • + )} + {/* Admins can ban from all, and appoint other admins */} + {this.canAdmin && ( + <> + {!this.isAdmin && ( +
  • + {!post.banned ? ( + + {i18n.t('ban_from_site')} + + ) : ( + + {i18n.t('unban_from_site')} + + )} +
  • + )} + {!post.banned && ( +
  • + + {this.isAdmin + ? i18n.t('remove_as_admin') + : i18n.t('appoint_as_admin')} + +
  • + )} + + )} + {/* Site Creator can transfer to another admin */} + {this.amSiteCreator && this.isAdmin && (
  • - {!post.banned ? ( - - {i18n.t('ban_from_site')} - - ) : ( + {!this.state.showConfirmTransferSite ? ( - {i18n.t('unban_from_site')} + {i18n.t('transfer_site')} + ) : ( + <> + + {i18n.t('are_you_sure')} + + + {i18n.t('yes')} + + + {i18n.t('no')} + + )}
  • )} - {!post.banned && ( -
  • - - {this.isAdmin - ? i18n.t('remove_as_admin') - : i18n.t('appoint_as_admin')} - -
  • - )} )} - {/* Site Creator can transfer to another admin */} - {this.amSiteCreator && this.isAdmin && ( -
  • - {!this.state.showConfirmTransferSite ? ( - - {i18n.t('transfer_site')} - - ) : ( - <> - - {i18n.t('are_you_sure')} - - - {i18n.t('yes')} - - - {i18n.t('no')} - - - )} -
  • - )} )} {this.props.showBody && post.body && ( @@ -1201,4 +1230,9 @@ export class PostListing extends Component { i.state.viewSource = !i.state.viewSource; i.setState(i.state); } + + handleShowAdvanced(i: PostListing) { + i.state.showAdvanced = !i.state.showAdvanced; + i.setState(i.state); + } } diff --git a/ui/translations/en.json b/ui/translations/en.json index 54460022e..8b719c712 100644 --- a/ui/translations/en.json +++ b/ui/translations/en.json @@ -29,6 +29,7 @@ "message": "Message", "edit": "edit", "reply": "reply", + "more": "more", "cancel": "Cancel", "preview": "Preview", "upload_image": "upload image",