diff options
author | Dessalines <tyhou13@gmx.com> | 2019-09-08 11:00:08 -0700 |
---|---|---|
committer | Dessalines <tyhou13@gmx.com> | 2019-09-08 11:00:08 -0700 |
commit | 4c33b8d75e491122687041a3c85d4183dbbd2e89 (patch) | |
tree | 2d55586d39eee439061bac6d06c345aa28a8e5ed /ui/src/components/post-listing.tsx | |
parent | 1a83ee4ab95b279513b00e2bbaec440ad2059a06 (diff) |
Adding view source button for posts and comments.
- Fixes #271
Diffstat (limited to 'ui/src/components/post-listing.tsx')
-rw-r--r-- | ui/src/components/post-listing.tsx | 200 |
1 files changed, 110 insertions, 90 deletions
diff --git a/ui/src/components/post-listing.tsx b/ui/src/components/post-listing.tsx index 5b83c74e..8234cc8a 100644 --- a/ui/src/components/post-listing.tsx +++ b/ui/src/components/post-listing.tsx @@ -19,6 +19,7 @@ interface PostListingState { showConfirmTransferSite: boolean; showConfirmTransferCommunity: boolean; imageExpanded: boolean; + viewSource: boolean; } interface PostListingProps { @@ -44,6 +45,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> { showConfirmTransferSite: false, showConfirmTransferCommunity: false, imageExpanded: false, + viewSource: false, } constructor(props: any, context: any) { @@ -168,103 +170,110 @@ export class PostListing extends Component<PostListingProps, PostListingState> { <Link className="text-muted" to={`/post/${post.id}`}><T i18nKey="number_of_comments" interpolation={{count: post.number_of_comments}}>#</T></Link> </li> </ul> - {UserService.Instance.user && this.props.editable && - <ul class="list-inline mb-1 text-muted small font-weight-bold"> - <li className="list-inline-item mr-2"> - <span class="pointer" onClick={linkEvent(this, this.handleSavePostClick)}>{post.saved ? i18n.t('unsave') : i18n.t('save')}</span> - </li> - <li className="list-inline-item mr-2"> - <Link className="text-muted" to={`/create_post${this.crossPostParams}`}><T i18nKey="cross_post">#</T></Link> - </li> - {this.myPost && - <> - <li className="list-inline-item"> - <span class="pointer" onClick={linkEvent(this, this.handleEditClick)}><T i18nKey="edit">#</T></span> - </li> - <li className="list-inline-item mr-2"> - <span class="pointer" onClick={linkEvent(this, this.handleDeleteClick)}> - {!post.deleted ? i18n.t('delete') : i18n.t('restore')} - </span> - </li> - </> - } - {this.canMod && - <> - <li className="list-inline-item"> - {!post.removed ? - <span class="pointer" onClick={linkEvent(this, this.handleModRemoveShow)}><T i18nKey="remove">#</T></span> : - <span class="pointer" onClick={linkEvent(this, this.handleModRemoveSubmit)}><T i18nKey="restore">#</T></span> - } - </li> - <li className="list-inline-item"> - <span class="pointer" onClick={linkEvent(this, this.handleModLock)}>{post.locked ? i18n.t('unlock') : i18n.t('lock')}</span> - </li> - </> - } - {/* Mods can ban from community, and appoint as mods to community */} - {this.canMod && - <> - {!this.isMod && + <ul class="list-inline mb-1 text-muted small font-weight-bold"> + {UserService.Instance.user && this.props.editable && + <> + <li className="list-inline-item mr-2"> + <span class="pointer" onClick={linkEvent(this, this.handleSavePostClick)}>{post.saved ? i18n.t('unsave') : i18n.t('save')}</span> + </li> + <li className="list-inline-item mr-2"> + <Link className="text-muted" to={`/create_post${this.crossPostParams}`}><T i18nKey="cross_post">#</T></Link> + </li> + {this.myPost && + <> <li className="list-inline-item"> - {!post.banned_from_community ? - <span class="pointer" onClick={linkEvent(this, this.handleModBanFromCommunityShow)}><T i18nKey="ban">#</T></span> : - <span class="pointer" onClick={linkEvent(this, this.handleModBanFromCommunitySubmit)}><T i18nKey="unban">#</T></span> - } + <span class="pointer" onClick={linkEvent(this, this.handleEditClick)}><T i18nKey="edit">#</T></span> </li> - } - {!post.banned_from_community && - <li className="list-inline-item"> - <span class="pointer" onClick={linkEvent(this, this.handleAddModToCommunity)}>{this.isMod ? i18n.t('remove_as_mod') : i18n.t('appoint_as_mod')}</span> + <li className="list-inline-item mr-2"> + <span class="pointer" onClick={linkEvent(this, this.handleDeleteClick)}> + {!post.deleted ? i18n.t('delete') : i18n.t('restore')} + </span> </li> - } - </> - } - {/* Community creators and admins can transfer community to another mod */} - {(this.amCommunityCreator || this.canAdmin) && this.isMod && - <li className="list-inline-item"> - {!this.state.showConfirmTransferCommunity ? - <span class="pointer" onClick={linkEvent(this, this.handleShowConfirmTransferCommunity)}><T i18nKey="transfer_community">#</T> - </span> : <> - <span class="d-inline-block mr-1"><T i18nKey="are_you_sure">#</T></span> - <span class="pointer d-inline-block mr-1" onClick={linkEvent(this, this.handleTransferCommunity)}><T i18nKey="yes">#</T></span> - <span class="pointer d-inline-block" onClick={linkEvent(this, this.handleCancelShowConfirmTransferCommunity)}><T i18nKey="no">#</T></span> - </> - } - </li> - } - {/* Admins can ban from all, and appoint other admins */} - {this.canAdmin && - <> - {!this.isAdmin && + </> + } + {this.canMod && + <> <li className="list-inline-item"> - {!post.banned ? - <span class="pointer" onClick={linkEvent(this, this.handleModBanShow)}><T i18nKey="ban_from_site">#</T></span> : - <span class="pointer" onClick={linkEvent(this, this.handleModBanSubmit)}><T i18nKey="unban_from_site">#</T></span> + {!post.removed ? + <span class="pointer" onClick={linkEvent(this, this.handleModRemoveShow)}><T i18nKey="remove">#</T></span> : + <span class="pointer" onClick={linkEvent(this, this.handleModRemoveSubmit)}><T i18nKey="restore">#</T></span> } </li> - } - {!post.banned && <li className="list-inline-item"> - <span class="pointer" onClick={linkEvent(this, this.handleAddAdmin)}>{this.isAdmin ? i18n.t('remove_as_admin') : i18n.t('appoint_as_admin')}</span> + <span class="pointer" onClick={linkEvent(this, this.handleModLock)}>{post.locked ? i18n.t('unlock') : i18n.t('lock')}</span> </li> - } - </> - } - {/* Site Creator can transfer to another admin */} - {this.amSiteCreator && this.isAdmin && - <li className="list-inline-item"> - {!this.state.showConfirmTransferSite ? - <span class="pointer" onClick={linkEvent(this, this.handleShowConfirmTransferSite)}><T i18nKey="transfer_site">#</T> - </span> : <> - <span class="d-inline-block mr-1"><T i18nKey="are_you_sure">#</T></span> - <span class="pointer d-inline-block mr-1" onClick={linkEvent(this, this.handleTransferSite)}><T i18nKey="yes">#</T></span> - <span class="pointer d-inline-block" onClick={linkEvent(this, this.handleCancelShowConfirmTransferSite)}><T i18nKey="no">#</T></span> - </> - } - </li> - } - </ul> - } + </> + } + {/* Mods can ban from community, and appoint as mods to community */} + {this.canMod && + <> + {!this.isMod && + <li className="list-inline-item"> + {!post.banned_from_community ? + <span class="pointer" onClick={linkEvent(this, this.handleModBanFromCommunityShow)}><T i18nKey="ban">#</T></span> : + <span class="pointer" onClick={linkEvent(this, this.handleModBanFromCommunitySubmit)}><T i18nKey="unban">#</T></span> + } + </li> + } + {!post.banned_from_community && + <li className="list-inline-item"> + <span class="pointer" onClick={linkEvent(this, this.handleAddModToCommunity)}>{this.isMod ? i18n.t('remove_as_mod') : i18n.t('appoint_as_mod')}</span> + </li> + } + </> + } + {/* Community creators and admins can transfer community to another mod */} + {(this.amCommunityCreator || this.canAdmin) && this.isMod && + <li className="list-inline-item"> + {!this.state.showConfirmTransferCommunity ? + <span class="pointer" onClick={linkEvent(this, this.handleShowConfirmTransferCommunity)}><T i18nKey="transfer_community">#</T> + </span> : <> + <span class="d-inline-block mr-1"><T i18nKey="are_you_sure">#</T></span> + <span class="pointer d-inline-block mr-1" onClick={linkEvent(this, this.handleTransferCommunity)}><T i18nKey="yes">#</T></span> + <span class="pointer d-inline-block" onClick={linkEvent(this, this.handleCancelShowConfirmTransferCommunity)}><T i18nKey="no">#</T></span> + </> + } + </li> + } + {/* Admins can ban from all, and appoint other admins */} + {this.canAdmin && + <> + {!this.isAdmin && + <li className="list-inline-item"> + {!post.banned ? + <span class="pointer" onClick={linkEvent(this, this.handleModBanShow)}><T i18nKey="ban_from_site">#</T></span> : + <span class="pointer" onClick={linkEvent(this, this.handleModBanSubmit)}><T i18nKey="unban_from_site">#</T></span> + } + </li> + } + {!post.banned && + <li className="list-inline-item"> + <span class="pointer" onClick={linkEvent(this, this.handleAddAdmin)}>{this.isAdmin ? i18n.t('remove_as_admin') : i18n.t('appoint_as_admin')}</span> + </li> + } + </> + } + {/* Site Creator can transfer to another admin */} + {this.amSiteCreator && this.isAdmin && + <li className="list-inline-item"> + {!this.state.showConfirmTransferSite ? + <span class="pointer" onClick={linkEvent(this, this.handleShowConfirmTransferSite)}><T i18nKey="transfer_site">#</T> + </span> : <> + <span class="d-inline-block mr-1"><T i18nKey="are_you_sure">#</T></span> + <span class="pointer d-inline-block mr-1" onClick={linkEvent(this, this.handleTransferSite)}><T i18nKey="yes">#</T></span> + <span class="pointer d-inline-block" onClick={linkEvent(this, this.handleCancelShowConfirmTransferSite)}><T i18nKey="no">#</T></span> + </> + } + </li> + } + </> + } + {this.props.showBody && post.body && + <li className="list-inline-item"> + <span className="pointer" onClick={linkEvent(this, this.handleViewSource)}><T i18nKey="view_source">#</T></span> + </li> + } + </ul> {this.state.showRemoveDialog && <form class="form-inline" onSubmit={linkEvent(this, this.handleModRemoveSubmit)}> <input type="text" class="form-control mr-2" placeholder={i18n.t('reason')} value={this.state.removeReason} onInput={linkEvent(this, this.handleModRemoveReasonChange)} /> @@ -287,7 +296,13 @@ export class PostListing extends Component<PostListingProps, PostListingState> { </div> </form> } - {this.props.showBody && post.body && <div className="md-div" dangerouslySetInnerHTML={mdToHtml(post.body)} />} + {this.props.showBody && post.body && + <> + {this.state.viewSource ? <div>{post.body}</div> : + <div className="md-div" dangerouslySetInnerHTML={mdToHtml(post.body)} /> + } + </> + } </div> </div> ) @@ -566,5 +581,10 @@ export class PostListing extends Component<PostListingProps, PostListingState> { i.state.imageExpanded = !i.state.imageExpanded; i.setState(i.state); } + + handleViewSource(i: PostListing) { + i.state.viewSource = !i.state.viewSource; + i.setState(i.state); + } } |