From: Dessalines <dessalines@users.noreply.github.com> Date: Thu, 24 Feb 2022 15:31:44 +0000 (+0000) Subject: Adding nofollow to links. Fixes #542 (#543) X-Git-Url: http://these/git/%7B%60/feeds/README.md?a=commitdiff_plain;h=6684bbeaf6df12a8725368bee30f191de285db2d;p=lemmy-ui.git Adding nofollow to links. Fixes #542 (#543) * Adding nofollow to links. Fixes #542 * Running prettier. --- diff --git a/src/shared/components/common/markdown-textarea.tsx b/src/shared/components/common/markdown-textarea.tsx index 381ecb4..af284e5 100644 --- a/src/shared/components/common/markdown-textarea.tsx +++ b/src/shared/components/common/markdown-textarea.tsx @@ -10,6 +10,7 @@ import { mdToHtml, pictrsDeleteToast, randomStr, + relTags, setupTippy, setupTribute, toast, @@ -297,7 +298,7 @@ export class MarkdownTextArea extends Component< href={markdownHelpUrl} class="btn btn-sm text-muted font-weight-bold" title={i18n.t("formatting_help")} - rel="noopener" + rel={relTags} > <Icon icon="help-circle" classes="icon-inline" /> </a> diff --git a/src/shared/components/common/pictrs-image.tsx b/src/shared/components/common/pictrs-image.tsx index 31e3052..4f3ddc0 100644 --- a/src/shared/components/common/pictrs-image.tsx +++ b/src/shared/components/common/pictrs-image.tsx @@ -32,8 +32,9 @@ export class PictrsImage extends Component<PictrsImageProps, any> { loading="lazy" className={classNames({ "img-fluid": !this.props.icon && !this.props.iconOverlay, - "banner": this.props.banner, - "thumbnail rounded": this.props.thumbnail && !this.props.icon && !this.props.banner, + banner: this.props.banner, + "thumbnail rounded": + 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, diff --git a/src/shared/components/common/sort-select.tsx b/src/shared/components/common/sort-select.tsx index 9504756..1188064 100644 --- a/src/shared/components/common/sort-select.tsx +++ b/src/shared/components/common/sort-select.tsx @@ -1,7 +1,7 @@ import { Component, linkEvent } from "inferno"; import { SortType } from "lemmy-js-client"; import { i18n } from "../../i18next"; -import { randomStr, sortingHelpUrl } from "../../utils"; +import { randomStr, relTags, sortingHelpUrl } from "../../utils"; import { Icon } from "./icon"; interface SortSelectProps { @@ -71,7 +71,7 @@ export class SortSelect extends Component<SortSelectProps, SortSelectState> { <a className="text-muted" href={sortingHelpUrl} - rel="noopener" + rel={relTags} title={i18n.t("sorting_help")} > <Icon icon="help-circle" classes="icon-inline" /> diff --git a/src/shared/components/community/community-link.tsx b/src/shared/components/community/community-link.tsx index fee38eb..4ea7f8a 100644 --- a/src/shared/components/community/community-link.tsx +++ b/src/shared/components/community/community-link.tsx @@ -1,7 +1,7 @@ import { Component } from "inferno"; import { Link } from "inferno-router"; import { CommunitySafe } from "lemmy-js-client"; -import { hostname, showAvatars } from "../../utils"; +import { hostname, relTags, showAvatars } from "../../utils"; import { PictrsImage } from "../common/pictrs-image"; interface CommunityLinkProps { @@ -48,6 +48,7 @@ export class CommunityLink extends Component<CommunityLinkProps, any> { title={apubName} className={`${this.props.muted ? "text-muted" : ""}`} href={link} + rel={relTags} > {this.avatarAndName(displayName)} </a> diff --git a/src/shared/components/community/community.tsx b/src/shared/components/community/community.tsx index 7bc0833..da215f4 100644 --- a/src/shared/components/community/community.tsx +++ b/src/shared/components/community/community.tsx @@ -38,6 +38,7 @@ import { getPageFromProps, getSortTypeFromProps, notifyPost, + relTags, restoreScrollPosition, saveCommentRes, saveScrollPosition, @@ -370,7 +371,7 @@ export class Community extends Component<any, State> { <span class="mr-2"> <SortSelect sort={this.state.sort} onChange={this.handleSortChange} /> </span> - <a href={communityRss} title="RSS" rel="noopener"> + <a href={communityRss} title="RSS" rel={relTags}> <Icon icon="rss" classes="text-muted small" /> </a> <link rel="alternate" type="application/atom+xml" href={communityRss} /> diff --git a/src/shared/components/home/home.tsx b/src/shared/components/home/home.tsx index 5d430a6..95c34f0 100644 --- a/src/shared/components/home/home.tsx +++ b/src/shared/components/home/home.tsx @@ -43,6 +43,7 @@ import { mdToHtml, notifyPost, numToSI, + relTags, restoreScrollPosition, saveCommentRes, saveScrollPosition, @@ -695,7 +696,7 @@ export class Home extends Component<any, HomeState> { </span> {this.state.listingType == ListingType.All && ( <> - <a href={allRss} rel="noopener" title="RSS"> + <a href={allRss} rel={relTags} title="RSS"> <Icon icon="rss" classes="text-muted small" /> </a> <link rel="alternate" type="application/atom+xml" href={allRss} /> @@ -703,7 +704,7 @@ export class Home extends Component<any, HomeState> { )} {this.state.listingType == ListingType.Local && ( <> - <a href={localRss} rel="noopener" title="RSS"> + <a href={localRss} rel={relTags} title="RSS"> <Icon icon="rss" classes="text-muted small" /> </a> <link rel="alternate" type="application/atom+xml" href={localRss} /> @@ -712,7 +713,7 @@ export class Home extends Component<any, HomeState> { {UserService.Instance.myUserInfo && this.state.listingType == ListingType.Subscribed && ( <> - <a href={frontRss} title="RSS" rel="noopener"> + <a href={frontRss} title="RSS" rel={relTags}> <Icon icon="rss" classes="text-muted small" /> </a> <link diff --git a/src/shared/components/home/instances.tsx b/src/shared/components/home/instances.tsx index c9a7b1f..c713383 100644 --- a/src/shared/components/home/instances.tsx +++ b/src/shared/components/home/instances.tsx @@ -1,7 +1,7 @@ import { Component } from "inferno"; import { GetSiteResponse } from "lemmy-js-client"; import { i18n } from "../../i18next"; -import { setIsoData } from "../../utils"; +import { relTags, setIsoData } from "../../utils"; import { HtmlTags } from "../common/html-tags"; interface InstancesState { @@ -60,7 +60,7 @@ export class Instances extends Component<any, InstancesState> { <ul> {items.map(i => ( <li> - <a href={`https://${i}`} rel="noopener"> + <a href={`https://${i}`} rel={relTags}> {i} </a> </li> diff --git a/src/shared/components/person/inbox.tsx b/src/shared/components/person/inbox.tsx index 470ef5e..7995baf 100644 --- a/src/shared/components/person/inbox.tsx +++ b/src/shared/components/person/inbox.tsx @@ -30,6 +30,7 @@ import { editCommentRes, fetchLimit, isBrowser, + relTags, saveCommentRes, setIsoData, setupTippy, @@ -157,7 +158,7 @@ export class Inbox extends Component<any, InboxState> { <h5 class="mb-2"> {i18n.t("inbox")} <small> - <a href={inboxRss} title="RSS" rel="noopener"> + <a href={inboxRss} title="RSS" rel={relTags}> <Icon icon="rss" classes="ml-2 text-muted small" /> </a> <link diff --git a/src/shared/components/person/person-listing.tsx b/src/shared/components/person/person-listing.tsx index 60e509c..56db662 100644 --- a/src/shared/components/person/person-listing.tsx +++ b/src/shared/components/person/person-listing.tsx @@ -1,7 +1,7 @@ import { Component } from "inferno"; import { Link } from "inferno-router"; import { PersonSafe } from "lemmy-js-client"; -import { hostname, isCakeDay, showAvatars } from "../../utils"; +import { hostname, isCakeDay, relTags, showAvatars } from "../../utils"; import { PictrsImage } from "../common/pictrs-image"; import { CakeDay } from "./cake-day"; @@ -60,6 +60,7 @@ export class PersonListing extends Component<PersonListingProps, any> { title={apubName} className={this.props.muted ? "text-muted" : "text-info"} href={link} + rel={relTags} > {this.avatarAndName(displayName)} </a> diff --git a/src/shared/components/person/profile.tsx b/src/shared/components/person/profile.tsx index 0f567d2..d94ffab 100644 --- a/src/shared/components/person/profile.tsx +++ b/src/shared/components/person/profile.tsx @@ -29,6 +29,7 @@ import { mdToHtml, numToSI, previewLines, + relTags, restoreScrollPosition, routeSortTypeToEnum, saveCommentRes, @@ -346,7 +347,7 @@ export class Profile extends Component<any, ProfileState> { hideHot hideMostComments /> - <a href={profileRss} rel="noopener" title="RSS"> + <a href={profileRss} rel={relTags} title="RSS"> <Icon icon="rss" classes="text-muted small mx-2" /> </a> <link rel="alternate" type="application/atom+xml" href={profileRss} /> @@ -419,7 +420,7 @@ export class Profile extends Component<any, ProfileState> { className={`d-flex align-self-start btn btn-secondary mr-2 ${ !pv.person.matrix_user_id && "invisible" }`} - rel="noopener" + rel={relTags} href={`https://matrix.to/#/${pv.person.matrix_user_id}`} > {i18n.t("send_secure_message")} diff --git a/src/shared/components/person/settings.tsx b/src/shared/components/person/settings.tsx index 4348a57..a12ee96 100644 --- a/src/shared/components/person/settings.tsx +++ b/src/shared/components/person/settings.tsx @@ -34,6 +34,7 @@ import { isBrowser, personSelectName, personToChoice, + relTags, setIsoData, setTheme, setupTippy, @@ -464,7 +465,7 @@ export class Settings extends Component<any, SettingsState> { </div> <div class="form-group row"> <label class="col-sm-5 col-form-label" htmlFor="matrix-user-id"> - <a href={elementUrl} rel="noopener"> + <a href={elementUrl} rel={relTags}> {i18n.t("matrix_user_id")} </a> </label> diff --git a/src/shared/components/post/metadata-card.tsx b/src/shared/components/post/metadata-card.tsx index 85fcdb6..8c27d2f 100644 --- a/src/shared/components/post/metadata-card.tsx +++ b/src/shared/components/post/metadata-card.tsx @@ -1,6 +1,7 @@ import { Component, linkEvent } from "inferno"; import { Post } from "lemmy-js-client"; import { i18n } from "../../i18next"; +import { relTags } from "../../utils"; import { Icon } from "../common/icon"; interface MetadataCardProps { @@ -35,7 +36,7 @@ export class MetadataCard extends Component< <div class="card-body"> {post.name !== post.embed_title && [ <h5 class="card-title d-inline"> - <a class="text-body" href={post.url} rel="noopener"> + <a class="text-body" href={post.url} rel={relTags}> {post.embed_title} </a> </h5>, @@ -43,7 +44,7 @@ export class MetadataCard extends Component< <a class="text-muted font-italic" href={post.url} - rel="noopener" + rel={relTags} > {new URL(post.url).hostname} <Icon icon="external-link" classes="ml-1" /> diff --git a/src/shared/components/post/post-form.tsx b/src/shared/components/post/post-form.tsx index f7b0581..9badb74 100644 --- a/src/shared/components/post/post-form.tsx +++ b/src/shared/components/post/post-form.tsx @@ -33,6 +33,7 @@ import { isBrowser, isImage, pictrsDeleteToast, + relTags, setupTippy, toast, validTitle, @@ -219,7 +220,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> { this.state.postForm.url )}`} class="mr-2 d-inline-block float-right text-muted small font-weight-bold" - rel="noopener" + rel={relTags} > archive.org {i18n.t("archive_link")} </a> @@ -228,7 +229,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> { this.state.postForm.url )}`} class="mr-2 d-inline-block float-right text-muted small font-weight-bold" - rel="noopener" + rel={relTags} > ghostarchive.org {i18n.t("archive_link")} </a> @@ -237,7 +238,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> { this.state.postForm.url )}`} class="mr-2 d-inline-block float-right text-muted small font-weight-bold" - rel="noopener" + rel={relTags} > archive.today {i18n.t("archive_link")} </a> diff --git a/src/shared/components/post/post-listing.tsx b/src/shared/components/post/post-listing.tsx index 36bb912..51ea8b3 100644 --- a/src/shared/components/post/post-listing.tsx +++ b/src/shared/components/post/post-listing.tsx @@ -36,6 +36,7 @@ import { mdToHtml, numToSI, previewLines, + relTags, setupTippy, showScores, wsClient, @@ -244,7 +245,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> { <a class="text-body d-inline-block position-relative mb-2" href={post.url} - rel="noopener" + rel={relTags} title={post.url} > {this.imgThumb(this.imageSrc)} @@ -272,7 +273,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> { className="text-body" href={post.url} title={post.url} - rel="noopener" + rel={relTags} > <div class="thumbnail rounded bg-light d-flex justify-content-center"> <Icon icon="external-link" classes="d-flex align-items-center" /> @@ -335,7 +336,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> { className="text-muted font-italic" href={post_view.post.url} title={post_view.post.url} - rel="noopener" + rel={relTags} > {hostname(post_view.post.url)} </a> @@ -418,7 +419,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> { className={!post.stickied ? "text-body" : "text-primary"} href={post.url} title={post.url} - rel="noopener" + rel={relTags} > {post.name} </a> diff --git a/src/shared/components/private_message/private-message-form.tsx b/src/shared/components/private_message/private-message-form.tsx index 60ae52d..4f0e9d1 100644 --- a/src/shared/components/private_message/private-message-form.tsx +++ b/src/shared/components/private_message/private-message-form.tsx @@ -16,6 +16,7 @@ import { authField, capitalizeFirstLetter, isBrowser, + relTags, setupTippy, toast, wsClient, @@ -141,7 +142,7 @@ export class PrivateMessageForm extends Component< # <a class="alert-link" - rel="noopener" + rel={relTags} href="https://element.io/get-started" > # diff --git a/src/shared/utils.ts b/src/shared/utils.ts index 1c7c5f4..e25d4d4 100644 --- a/src/shared/utils.ts +++ b/src/shared/utils.ts @@ -75,6 +75,8 @@ export const postRefetchSeconds: number = 60 * 1000; export const fetchLimit = 20; export const mentionDropdownFetchLimit = 10; +export const relTags = "noopener nofollow"; + export const themes = [ "litera", "materia",