Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
642271a8
Commit
642271a8
authored
Dec 17, 2025
by
Johnny
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: add iframe support for embedded videos in markdown content
parent
310590b2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
0 deletions
+30
-0
constants.ts
web/src/components/MemoContent/constants.ts
+20
-0
index.css
web/src/index.css
+10
-0
No files found.
web/src/components/MemoContent/constants.ts
View file @
642271a8
...
@@ -13,6 +13,7 @@ export const COMPACT_STATES: Record<"ALL" | "SNIPPET", { textKey: string; next:
...
@@ -13,6 +13,7 @@ export const COMPACT_STATES: Record<"ALL" | "SNIPPET", { textKey: string; next:
* - KaTeX math rendering elements (MathML tags)
* - KaTeX math rendering elements (MathML tags)
* - KaTeX-specific attributes (className, style, aria-*, data-*)
* - KaTeX-specific attributes (className, style, aria-*, data-*)
* - Safe HTML elements for rich content
* - Safe HTML elements for rich content
* - iframe embeds for trusted video providers (YouTube, Vimeo, etc.)
*
*
* This prevents XSS attacks while preserving math rendering functionality.
* This prevents XSS attacks while preserving math rendering functionality.
*/
*/
...
@@ -22,6 +23,18 @@ export const SANITIZE_SCHEMA = {
...
@@ -22,6 +23,18 @@ export const SANITIZE_SCHEMA = {
...
defaultSchema
.
attributes
,
...
defaultSchema
.
attributes
,
div
:
[...(
defaultSchema
.
attributes
?.
div
||
[]),
"className"
],
div
:
[...(
defaultSchema
.
attributes
?.
div
||
[]),
"className"
],
span
:
[...(
defaultSchema
.
attributes
?.
span
||
[]),
"className"
,
"style"
,
[
"aria*"
],
[
"data*"
]],
span
:
[...(
defaultSchema
.
attributes
?.
span
||
[]),
"className"
,
"style"
,
[
"aria*"
],
[
"data*"
]],
// iframe attributes for video embeds
iframe
:
[
"src"
,
"width"
,
"height"
,
"frameborder"
,
"allowfullscreen"
,
"allow"
,
"title"
,
"referrerpolicy"
,
"loading"
,
],
// MathML attributes for KaTeX rendering
// MathML attributes for KaTeX rendering
annotation
:
[
"encoding"
],
annotation
:
[
"encoding"
],
math
:
[
"xmlns"
],
math
:
[
"xmlns"
],
...
@@ -40,6 +53,8 @@ export const SANITIZE_SCHEMA = {
...
@@ -40,6 +53,8 @@ export const SANITIZE_SCHEMA = {
},
},
tagNames
:
[
tagNames
:
[
...(
defaultSchema
.
tagNames
||
[]),
...(
defaultSchema
.
tagNames
||
[]),
// iframe for video embeds
"iframe"
,
// MathML elements for KaTeX math rendering
// MathML elements for KaTeX math rendering
"math"
,
"math"
,
"annotation"
,
"annotation"
,
...
@@ -56,4 +71,9 @@ export const SANITIZE_SCHEMA = {
...
@@ -56,4 +71,9 @@ export const SANITIZE_SCHEMA = {
"mfrac"
,
"mfrac"
,
"mtext"
,
"mtext"
,
],
],
protocols
:
{
...
defaultSchema
.
protocols
,
// Allow HTTPS iframe embeds only for security
iframe
:
{
src
:
[
"https"
]
},
},
};
};
web/src/index.css
View file @
642271a8
...
@@ -317,6 +317,16 @@
...
@@ -317,6 +317,16 @@
border-radius
:
0.5rem
;
border-radius
:
0.5rem
;
}
}
/* ========================================
* Embedded Content (iframes, videos)
* ======================================== */
.markdown-content
iframe
{
max-width
:
100%
;
border-radius
:
0.5rem
;
border
:
1px
solid
var
(
--border
);
}
/* ========================================
/* ========================================
* Inline Elements
* Inline Elements
* No vertical spacing
* No vertical spacing
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment