diff --git a/docs/src/about_guide.md b/docs/src/about_guide.md
index 6f709b580..5422478e5 100644
--- a/docs/src/about_guide.md
+++ b/docs/src/about_guide.md
@@ -35,6 +35,8 @@ Horizontal Rule
\--- | Horizontal Rule
\*\*\* | Horizontal Rule
\`Inline code\` with backticks | |`Inline code` with backticks
\`\`\`
\# code block
print '3 backticks or'
print 'indent 4 spaces'
\`\`\` | ····\# code block
····print '3 backticks or'
····print 'indent 4 spaces' | \# code block
print '3 backticks or'
print 'indent 4 spaces'
::: spoiler hidden or nsfw stuff
*a bunch of spoilers here*
::: | | hidden or nsfw stuff
a bunch of spoilers here
+Some ~subscript~ text | | Some subscript text
+Some ^superscript^ text | | ome superscript text
[CommonMark Tutorial](https://commonmark.org/help/tutorial/)
diff --git a/ui/package.json b/ui/package.json
index 1bd07e863..f59b86255 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -37,6 +37,8 @@
"markdown-it": "^10.0.0",
"markdown-it-container": "^2.0.0",
"markdown-it-emoji": "^1.4.0",
+ "markdown-it-sub": "^1.0.0",
+ "markdown-it-sup": "^1.0.0",
"moment": "^2.24.0",
"node-fetch": "^2.6.0",
"prettier": "^2.0.4",
diff --git a/ui/src/components/markdown-textarea.tsx b/ui/src/components/markdown-textarea.tsx
index 2f6d0a7ec..04838b2c8 100644
--- a/ui/src/components/markdown-textarea.tsx
+++ b/ui/src/components/markdown-textarea.tsx
@@ -469,6 +469,16 @@ export class MarkdownTextArea extends Component<
i.simpleInsert('#');
}
+ handleInsertSubscript(i: MarkdownTextArea, event: any) {
+ event.preventDefault();
+ i.simpleInsert('~');
+ }
+
+ handleInsertSuperscript(i: MarkdownTextArea, event: any) {
+ event.preventDefault();
+ i.simpleInsert('^');
+ }
+
simpleInsert(chars: string) {
if (!this.state.content) {
this.state.content = `${chars} `;
diff --git a/ui/src/utils.ts b/ui/src/utils.ts
index 960477650..892516bff 100644
--- a/ui/src/utils.ts
+++ b/ui/src/utils.ts
@@ -49,6 +49,8 @@ import { UserService, WebSocketService } from './services';
import Tribute from 'tributejs/src/Tribute.js';
import markdown_it from 'markdown-it';
+import markdown_it_sub from 'markdown-it-sub';
+import markdown_it_sup from 'markdown-it-sup';
import markdownitEmoji from 'markdown-it-emoji/light';
import markdown_it_container from 'markdown-it-container';
import emojiShortName from 'emoji-short-name';
@@ -148,6 +150,8 @@ export const md = new markdown_it({
linkify: true,
typographer: true,
})
+ .use(markdown_it_sub)
+ .use(markdown_it_sup)
.use(markdown_it_container, 'spoiler', {
validate: function (params: any) {
return params.trim().match(/^spoiler\s+(.*)$/);
diff --git a/ui/yarn.lock b/ui/yarn.lock
index c39f1dc4b..ad77fffd7 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -4317,6 +4317,16 @@ markdown-it-emoji@^1.4.0:
resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc"
integrity sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=
+markdown-it-sub@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-it-sub/-/markdown-it-sub-1.0.0.tgz#375fd6026eae7ddcb012497f6411195ea1e3afe8"
+ integrity sha1-N1/WAm6ufdywEkl/ZBEZXqHjr+g=
+
+markdown-it-sup@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-it-sup/-/markdown-it-sup-1.0.0.tgz#cb9c9ff91a5255ac08f3fd3d63286e15df0a1fc3"
+ integrity sha1-y5yf+RpSVawI8/09YyhuFd8KH8M=
+
markdown-it@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc"