Skip to content

Commit 3ec932e

Browse files
committed
pref: Use rel="noopener noreferrer nofollow ugc" on user links
1 parent 0fd5b47 commit 3ec932e

File tree

6 files changed

+64
-5
lines changed

6 files changed

+64
-5
lines changed

packages/comment-widget/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"@lit/context": "^1.1.6",
4646
"@lit/localize": "^0.12.2",
4747
"@tiptap/core": "^3.10.4",
48+
"@tiptap/extension-link": "^3.10.4",
4849
"@tiptap/extensions": "^3.10.4",
4950
"@tiptap/pm": "^3.10.4",
5051
"@tiptap/starter-kit": "^3.10.4",

packages/comment-widget/src/base-comment-item.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export class BaseCommentItem extends LitElement {
6262
class="item-author font-medium text-sm text-text-1 hover:underline"
6363
target="_blank"
6464
href=${ifDefined(this.userWebsite)}
65-
rel="noopener noreferrer"
65+
rel="noopener noreferrer nofollow ugc"
6666
>
6767
${this.userDisplayName}
6868
</a>

packages/comment-widget/src/comment-content.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ export class CommentContent extends LitElement {
99
@property({ type: String })
1010
content: string = '';
1111

12+
private applyLinkAttributes() {
13+
const anchors =
14+
this.shadowRoot?.querySelectorAll<HTMLAnchorElement>('.content a');
15+
16+
anchors?.forEach((anchor) => {
17+
anchor.target = '_blank';
18+
anchor.rel = 'noopener noreferrer nofollow ugc';
19+
});
20+
}
21+
1222
protected override firstUpdated(_changedProperties: PropertyValues) {
1323
super.firstUpdated(_changedProperties);
1424
const codeElements = this.shadowRoot?.querySelectorAll('pre>code');
@@ -38,6 +48,11 @@ export class CommentContent extends LitElement {
3848
);
3949
}
4050

51+
protected override updated(_changedProperties: PropertyValues) {
52+
super.updated(_changedProperties);
53+
this.applyLinkAttributes();
54+
}
55+
4156
private extractLanguageFromCodeElement(codeElement: Element): string | null {
4257
const supportedPrefixes = ['language-', 'lang-'];
4358

packages/comment-widget/src/comment-editor.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,12 @@ export class CommentEditor extends LitElement {
9595

9696
async createEditor() {
9797
const { Editor } = await import('@tiptap/core');
98-
const { Placeholder } = await import('@tiptap/extensions');
98+
const { CharacterCount, Placeholder } = await import('@tiptap/extensions');
99+
const { Link } = await import('@tiptap/extension-link');
99100
const { StarterKit } = await import('@tiptap/starter-kit');
100101
const { CodeBlockShiki } = await import(
101102
'tiptap-extension-code-block-shiki'
102103
);
103-
const { CharacterCount } = await import('@tiptap/extensions');
104104

105105
this.loading = false;
106106

@@ -119,6 +119,15 @@ export class CommentEditor extends LitElement {
119119
placeholder: this.placeholder || msg('Write a comment'),
120120
}),
121121

122+
Link.configure({
123+
openOnClick: false,
124+
defaultProtocol: 'https',
125+
HTMLAttributes: {
126+
target: '_blank',
127+
rel: 'noopener noreferrer nofollow ugc',
128+
},
129+
}),
130+
122131
CodeBlockShiki.configure({
123132
defaultTheme: 'github-dark',
124133
}),

packages/comment-widget/src/user-avatar.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export class UserAvatar extends LitElement {
6767

6868
override render() {
6969
if (this.href) {
70-
return html`<a class="avatar" href="${this.href}" target="_blank" rel="noopener noreferrer">
70+
return html`<a class="avatar" href="${this.href}" target="_blank" rel="noopener noreferrer nofollow ugc">
7171
${this.renderAvatarContent()}
7272
</a>`;
7373
}

pnpm-lock.yaml

Lines changed: 35 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)