@@ -4,179 +4,68 @@
< meta charset = "UTF-8" / >
< meta charset = "UTF-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< link rel = "icon" href = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>📖</text></svg>" / >
< link rel = "icon" href = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>📖</text></svg>" / >
< title > MetonaEditor · 文档< / title >
< title > MetonaEditor v0.2.4 · 文档< / title >
< style >
< style >
* { box-sizing : border-box ; margin : 0 ; padding : 0 ; }
* { box-sizing : border-box ; margin : 0 ; padding : 0 }
: root {
: root { --bg : #0f1117 ; --bg-soft : #161922 ; --card : #1c2029 ; --card-hover : #232834 ; --text : #e6e8eb ; --muted : #9ca3af ; --accent : #3b82f6 ; --accent-2 : #8b5cf6 ; --accent-soft : rgba ( 59 , 130 , 246 , .12 ) ; --border : rgba ( 255 , 255 , 255 , .08 ) ; --gradient : linear-gradient ( 135 deg , #3b82f6 0 % , #8b5cf6 50 % , #ec4899 100 % ) }
--bg : #0f1117 ;
html { scroll-behavior : smooth }
--bg-soft : #161922 ;
body { font-family : - apple-system , BlinkMacSystemFont , "Segoe UI" , "PingFang SC" , "Microsoft YaHei" , sans-serif ; background : var ( - - bg ) ; color : var ( - - text ) ; line-height : 1.7 ; min-height : 100 vh }
--card : #1c2029 ;
. container { max-width : 1000 px ; margin : 0 auto ; padding : 0 24 px }
--card-hover : #232834 ;
nav { position : sticky ; top : 0 ; z-index : 100 ; background : rgba ( 15 , 17 , 23 , .85 ) ; backdrop-filter : blur ( 16 px ) ; border-bottom : 1 px solid var ( - - border ) }
--text : #e6e8eb ;
. nav-inner { max-width : 1000 px ; margin : 0 auto ; padding : 12 px 24 px ; display : flex ; align-items : center ; justify-content : space-between }
--muted : #9ca3af ;
. nav-brand { display : inline-flex ; align-items : center ; gap : 10 px ; text-decoration : none ; color : var ( - - text ) ; font-weight : 700 ; font-size : 15 px }
--accent : #3b82f6 ;
. nav-brand . logo-mark { width : 26 px ; height : 26 px ; border-radius : 6 px ; background : var ( - - gradient ) ; display : flex ; align-items : center ; justify-content : center ; flex-shrink : 0 }
--accent-2 : #8b5cf6 ;
. logo-mark svg { display : block }
--accent-3 : #ec4899 ;
. nav-links { display : flex ; gap : 22 px ; align-items : center }
--accent-soft : rgba ( 59 , 130 , 246 , 0.12 ) ;
. nav-links a { color : var ( - - muted ) ; text-decoration : none ; font-size : 13.5 px ; transition : color .15 s }
--border : rgba ( 255 , 255 , 255 , 0.08 ) ;
. nav-links a : hover , . nav-links a . active { color : var ( - - text ) }
--gradient : linear-gradient ( 135 deg , #3b82f6 0 % , #8b5cf6 50 % , #ec4899 100 % ) ;
. nav-links a . active { color : var ( - - accent ) ; font-weight : 600 }
--shadow : 0 20 px 50 px -20 px rgba ( 0 , 0 , 0 , 0.5 ) ;
}
html { scroll-behavior : smooth ; }
body {
font-family : - apple-system , BlinkMacSystemFont , "Segoe UI" , "PingFang SC" , "Microsoft YaHei" , sans-serif ;
background : var ( - - bg ) ;
color : var ( - - text ) ;
line-height : 1.7 ;
min-height : 100 vh ;
}
. container { max-width : 1000 px ; margin : 0 auto ; padding : 0 24 px ; }
/* Nav */
header . docs-header { text-align : center ; padding : 64 px 24 px 40 px ; background : radial-gradient ( ellipse 60 % 50 % at 50 % 0 % , var ( - - accent - soft ) , transparent 70 % ) , var ( - - bg ) }
nav {
header h1 { font-size : clamp ( 28 px , 4 vw , 44 px ) ; font-weight : 800 ; letter-spacing : -.02 em ; margin-bottom : 10 px }
position : sticky ; top : 0 ; z-index : 100 ;
header h1 . grad { background : var ( - - gradient ) ; -webkit- background-clip : text ; background-clip : text ; -webkit- text-fill-color : transparent }
background : rgba ( 15 , 17 , 23 , 0.85 ) ;
header . sub { color : var ( - - muted ) ; font-size : 15 px }
backdrop-filter : blur ( 16 px ) ;
border-bottom : 1 px solid var ( - - border ) ;
}
. nav-inner {
max-width : 1000 px ; margin : 0 auto ; padding : 12 px 24 px ;
display : flex ; align-items : center ; justify-content : space-between ;
}
. nav-brand {
display : inline-flex ; align-items : center ; gap : 10 px ;
text-decoration : none ; color : var ( - - text ) ;
font-weight : 700 ; font-size : 15 px ;
}
. nav-brand . logo-mark {
width : 26 px ; height : 26 px ; border-radius : 6 px ;
background : var ( - - gradient ) ;
display : flex ; align-items : center ; justify-content : center ;
flex-shrink : 0 ;
}
. logo-mark svg { display : block ; }
. nav-links { display : flex ; gap : 22 px ; align-items : center ; }
. nav-links a { color : var ( - - muted ) ; text-decoration : none ; font-size : 13.5 px ; transition : color .15 s ; }
. nav-links a : hover , . nav-links a . active { color : var ( - - text ) ; }
. nav-links a . active { color : var ( - - accent ) ; font-weight : 600 ; }
/* Header */
. docs-layout { display : flex ; gap : 32 px ; padding : 40 px 0 80 px }
header . docs-header {
. sidebar { position : sticky ; top : 72 px ; width : 200 px ; flex-shrink : 0 ; max-height : calc ( 100 vh - 100 px ) ; overflow-y : auto ; padding-right : 16 px ; border-right : 1 px solid var ( - - border ) }
text-align : center ; padding : 64 px 24 px 40 px ;
. sidebar a { display : block ; padding : 6 px 12 px ; border-radius : 6 px ; color : var ( - - muted ) ; text-decoration : none ; font-size : 13.5 px ; transition : background .15 s , color .15 s ; margin-bottom : 2 px }
background : radial-gradient ( ellipse 60 % 50 % at 50 % 0 % , var ( - - accent - soft ) , transparent 70 % ) , var ( - - bg ) ;
. sidebar a : hover , . sidebar a . active { background : var ( - - card ) ; color : var ( - - text ) }
}
. sidebar . toc-group { font-size : 11 px ; color : var ( - - muted ) ; text-transform : uppercase ; letter-spacing : .08 em ; padding : 16 px 12 px 6 px ; font-weight : 600 }
header h1 { font-size : clamp ( 28 px , 4 vw , 44 px ) ; font-weight : 800 ; letter-spacing : -0.02 em ; margin-bottom : 10 px ; }
. content { flex : 1 ; min-width : 0 }
header h1 . grad { background : var ( - - gradient ) ; -webkit- background-clip : text ; background-clip : text ; -webkit- text-fill-color : transparent ; }
. content section { margin-bottom : 48 px }
header . sub { color : var ( - - muted ) ; font-size : 15 px ; }
. content h2 { font-size : 24 px ; font-weight : 700 ; letter-spacing : -.02 em ; margin-bottom : 16 px ; padding-bottom : 10 px ; border-bottom : 1 px solid var ( - - border ) }
. content h3 { font-size : 18 px ; font-weight : 600 ; margin : 28 px 0 14 px }
. content h4 { font-size : 15 px ; font-weight : 600 ; margin : 20 px 0 10 px ; color : var ( - - accent ) }
/* Sidebar + Content Layout */
table { width : 100 % ; border-collapse : collapse ; margin : 16 px 0 ; font-size : 13.5 px }
. docs-layout { display : flex ; gap : 32 px ; padding : 40 px 0 80 px ; }
th , td { padding : 10 px 14 px ; text-align : left ; border : 1 px solid var ( - - border ) }
. sidebar {
th { background : var ( - - card ) ; font-weight : 600 ; color : var ( - - text ) }
position : sticky ; top : 72 px ;
td { color : var ( - - muted ) }
width : 200 px ; flex-shrink : 0 ;
tr : nth-child ( even ) td { background : var ( - - bg - soft ) }
max-height : calc ( 100 vh - 100 px ) ; overflow-y : auto ;
padding-right : 16 px ;
border-right : 1 px solid var ( - - border ) ;
}
. sidebar a {
display : block ; padding : 6 px 12 px ; border-radius : 6 px ;
color : var ( - - muted ) ; text-decoration : none ; font-size : 13.5 px ;
transition : background .15 s , color .15 s ;
margin-bottom : 2 px ;
}
. sidebar a : hover , . sidebar a . active { background : var ( - - card ) ; color : var ( - - text ) ; }
. sidebar . toc-group { font-size : 11 px ; color : var ( - - muted ) ; text-transform : uppercase ; letter-spacing : 0.08 em ; padding : 16 px 12 px 6 px ; font-weight : 600 ; }
. content { flex : 1 ; min-width : 0 ; }
. content section { margin-bottom : 48 px ; }
. content h2 {
font-size : 24 px ; font-weight : 700 ; letter-spacing : -0.02 em ;
margin-bottom : 16 px ; padding-bottom : 10 px ;
border-bottom : 1 px solid var ( - - border ) ;
}
. content h3 { font-size : 18 px ; font-weight : 600 ; margin : 28 px 0 14 px ; }
. content h4 { font-size : 15 px ; font-weight : 600 ; margin : 20 px 0 10 px ; color : var ( - - accent ) ; }
/* Tables */
code { font-family : "SF Mono" , "Cascadia Code" , Consolas , monospace ; font-size : 13 px ; padding : 2 px 6 px ; background : var ( - - card ) ; border : 1 px solid var ( - - border ) ; border-radius : 4 px ; color : var ( - - accent ) }
table {
pre { background : var ( - - bg - soft ) ; border : 1 px solid var ( - - border ) ; border-radius : 10 px ; padding : 18 px 20 px ; overflow-x : auto ; font-family : "SF Mono" , "Cascadia Code" , Consolas , monospace ; font-size : 13 px ; line-height : 1.8 ; color : #e6e8eb ; margin : 14 px 0 }
width : 100 % ; border-collapse : collapse ; margin : 16 px 0 ; font-size : 13.5 px ;
. c-key { color : #c792ea } . c-str { color : #c3e88d } . c-fn { color : #82aaff } . c-com { color : #5c6370 ; font-style : italic } . c-kw { color : #89ddff } . c-num { color : #f78c6c } . c-punc { color : #89ddff ; opacity : .7 }
}
. badge { display : inline-block ; padding : 3 px 10 px ; background : var ( - - accent - soft ) ; color : var ( - - accent ) ; border-radius : 999 px ; font-size : 12 px ; font-weight : 600 ; margin-right : 6 px ; margin-bottom : 4 px }
th , td {
padding : 10 px 14 px ; text-align : left ;
border : 1 px solid var ( - - border ) ;
}
th { background : var ( - - card ) ; font-weight : 600 ; color : var ( - - text ) ; }
td { color : var ( - - muted ) ; }
tr : nth-child ( even ) td { background : var ( - - bg - soft ) ; }
/* Code */
footer { border-top : 1 px solid var ( - - border ) ; padding : 36 px 24 px ; text-align : center ; color : var ( - - muted ) ; font-size : 13 px ; background : var ( - - bg - soft ) }
code {
footer a { color : var ( - - accent ) ; text-decoration : none }
font-family : "SF Mono" , "Cascadia Code" , Consolas , monospace ;
font-size : 13 px ; padding : 2 px 6 px ;
background : var ( - - card ) ; border : 1 px solid var ( - - border ) ;
border-radius : 4 px ; color : var ( - - accent ) ;
}
pre {
background : var ( - - bg - soft ) ; border : 1 px solid var ( - - border ) ;
border-radius : 10 px ; padding : 18 px 20 px ; overflow-x : auto ;
font-family : "SF Mono" , "Cascadia Code" , Consolas , monospace ;
font-size : 13 px ; line-height : 1.8 ;
color : #e6e8eb ; margin : 14 px 0 ;
}
pre . c-key { color : #c792ea ; }
pre . c-str { color : #c3e88d ; }
pre . c-fn { color : #82aaff ; }
pre . c-com { color : #5c6370 ; font-style : italic ; }
pre . c-kw { color : #89ddff ; }
pre . c-num { color : #f78c6c ; }
pre . c-punc { color : #89ddff ; opacity : 0.7 ; }
/* Badges */
@ media ( max-width : 768px ) { . docs-layout { flex-direction : column } . sidebar { position : static ; width : 100 % ; max-height : none ; border-right : 0 ; border-bottom : 1 px solid var ( - - border ) ; padding-bottom : 12 px ; display : flex ; flex-wrap : wrap ; gap : 4 px } . sidebar . toc-group { width : 100 % } }
. badge {
display : inline-block ; padding : 3 px 10 px ;
background : var ( - - accent - soft ) ; color : var ( - - accent ) ;
border-radius : 999 px ; font-size : 12 px ; font-weight : 600 ;
margin-right : 6 px ; margin-bottom : 4 px ;
}
/* Footer */
footer {
border-top : 1 px solid var ( - - border ) ; padding : 36 px 24 px ;
text-align : center ; color : var ( - - muted ) ; font-size : 13 px ;
background : var ( - - bg - soft ) ;
}
footer a { color : var ( - - accent ) ; text-decoration : none ; }
@ media ( max-width : 768px ) {
. docs-layout { flex-direction : column ; }
. sidebar {
position : static ; width : 100 % ; max-height : none ;
border-right : 0 ; border-bottom : 1 px solid var ( - - border ) ;
padding-bottom : 12 px ;
display : flex ; flex-wrap : wrap ; gap : 4 px ;
}
. sidebar . toc-group { width : 100 % ; }
}
< / style >
< / style >
< / head >
< / head >
< body >
< body >
< nav >
< nav >
< div class = "nav-inner" >
< div class = "nav-inner" >
< a class = "nav-brand" href = "index.html" >
< a class = "nav-brand" href = "index.html" > < span class = "logo-mark" > < svg viewBox = "0 0 24 24" width = "15" height = "15" fill = "none" stroke = "white" stroke-width = "2.5" stroke-linecap = "round" stroke-linejoin = "round" > < path d = "M5 19V6l7 8 7-8v13" / > < / svg > < / span > MetonaEditor < / a >
< span class = "logo-mark" title = "MetonaEditor" > < svg viewBox = "0 0 24 24" width = "15" height = "15" fill = "none" stroke = "white" stroke-width = "2.5" stroke-linecap = "round" stroke-linejoin = "round" > < path d = "M5 19V6l7 8 7-8v13" / > < / svg > < / span >
< div class = "nav-links" > < a href = "index.html" > 首页 < / a > < a href = "demo.html" > 演示 < / a > < a href = "docs.html" class = "active" > 文档 < / a > < / div >
MetonaEditor
< / a >
< div class = "nav-links" >
< a href = "index.html" > 首页< / a >
< a href = "demo.html" > 演示< / a >
< a href = "docs.html" class = "active" > 文档< / a >
< / div >
< / div >
< / div >
< / nav >
< / nav >
< header class = "docs-header" >
< header class = "docs-header" >
< h1 > < span class = "grad" > 文档< / span > < / h1 >
< h1 > < span class = "grad" > API 文档< / span > < / h1 >
< p class = "sub" > MetonaEditor v0.1.10 完整 API、配置 与使用指南< / p >
< p class = "sub" > MetonaEditor v0.2.4 · TypeScript · 完整配置、API 与使用指南< / p >
< / header >
< / header >
< div class = "container" >
< div class = "container" >
@@ -191,18 +80,20 @@
< a href = "#api-content" > 内容操作< / a >
< a href = "#api-content" > 内容操作< / a >
< a href = "#api-exec" > 命令执行< / a >
< a href = "#api-exec" > 命令执行< / a >
< a href = "#api-history" > 历史栈< / a >
< a href = "#api-history" > 历史栈< / a >
< a href = "#api-mode" > 模式与全屏 < / a >
< a href = "#api-mode" > 模式 / 全屏 / Zen < / a >
< a href = "#api-stats" > 统计与状态< / a >
< a href = "#api-stats" > 统计与状态< / a >
< a href = "#api-readonly" > 启用/禁用/ 只读< / a >
< a href = "#api-readonly" > 启用 / 禁用 / 只读< / a >
< a href = "#api-events" > 事件系统< / a >
< a href = "#api-events" > 事件系统< / a >
< a href = "#api-plugin" > 插件管理< / a >
< a href = "#api-plugin" > 插件管理< / a >
< a href = "#api-lifecycle " > 生命周期 < / a >
< a href = "#api-shortcuts " > 快捷键管理 < / a >
< a href = "#api-destroy" > 生命周期< / a >
< div class = "toc-group" > 静态 API< / div >
< div class = "toc-group" > 静态 API< / div >
< a href = "#static-api" > 顶层 函数< / a >
< a href = "#static-api" > 全局 函数< / a >
< div class = "toc-group" > 语法参考 < / div >
< div class = "toc-group" > 解析器 < / div >
< a href = "#syntax" > 解析器 语法< / a >
< a href = "#parser- syntax" > 语法参考 < / a >
< a href = "#parser-api" > 解析器 API< / a >
< div class = "toc-group" > 插件< / div >
< div class = "toc-group" > 插件< / div >
< a href = "#plugins" > 插件约定< / a >
< a href = "#plugins-convention " > 插件约定< / a >
< a href = "#preset-plugins" > 预设插件< / a >
< a href = "#preset-plugins" > 预设插件< / a >
< div class = "toc-group" > 主题< / div >
< div class = "toc-group" > 主题< / div >
< a href = "#themes" > 主题系统< / a >
< a href = "#themes" > 主题系统< / a >
@@ -212,94 +103,77 @@
< main class = "content" >
< main class = "content" >
<!-- ======== 快速入门 ======== -->
<!-- 快速入门 -->
< section id = "quickstart" >
< section id = "quickstart" >
< h2 > 安装与引入< / h2 >
< h2 > 安装与引入< / h2 >
< pre > < span class = "c-com" > # npm 安装< / span >
< pre > < span class = "c-com" > # npm 安装< / span >
< span class = "c-kw" > npm< / span > install @metona-team/metona-editor
< span class = "c-kw" > npm< / span > install @metona-team/metona-editor
< span class = "c-com" > # ES Module< / span >
< span class = "c-com" > // TypeScript / ES Module< / span >
< span class = "c-kw" > import< / span > MeEditor < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-kw" > import< / span > MeEditor < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-kw" > const< / span > editor < span class = "c-punc" > =< / span > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '#editor'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span >
< span class = "c-kw" > const< / span > editor < span class = "c-punc" > =< / span > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '#editor'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span >
< span class = "c-fn" > value< / span > < span class = "c-punc" > :< / span > < span class = "c-str" > '# Hello World'< / span > < span class = "c-punc" > ,< / span >
< span class = "c-fn" > value< / span > < span class = "c-punc" > :< / span > < span class = "c-str" > '# Hello World'< / span > < span class = "c-punc" > ,< / span >
< span class = "c-fn" > mode< / span > < span class = "c-punc" > :< / span > < span class = "c-str" > 'split'< / span > < span class = "c-punc" > ,< / span >
< span class = "c-fn" > mode< / span > < span class = "c-punc" > :< / span > < span class = "c-str" > 'split'< / span > < span class = "c-punc" > ,< / span >
< span class = "c-punc" > });< / span >
< span class = "c-punc" > });< / span >
< span class = "c-com" > # 浏览器 UMD< / span >
< span class = "c-com" > // 浏览器 UMD< / span >
< span class = "c-com" > < script src="dist/metona-editor.js"> < /script> < / span >
< span class = "c-com" > < script src="dist/metona-editor.js"> < /script> < / span >
< span class = "c-com" > < script> < / span >
< span class = "c-com" > < script> < / span >
< span class = "c-kw" > const< / span > editor < span class = "c-punc" > =< / span > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '#editor'< / span > < span class = "c-punc" > );< / span >
< span class = "c-kw" > const< / span > editor < span class = "c-punc" > =< / span > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '#editor'< / span > < span class = "c-punc" > );< / span >
< span class = "c-com" > < /script> < / span > < / pre >
< span class = "c-com" > < /script> < / span > < / pre >
< / section >
< / section >
<!-- ======== 配置项 ======== -->
<!-- 配置 -->
< section id = "config" >
< section id = "config" >
< h2 > 全部配置项< / h2 >
< h2 > 全部配置项< / h2 >
< p style = "color:var(--muted);margin-bottom:14px" > 所有配置均为可选,以下是默认值: < / p >
< p style = "color:var(--muted);margin-bottom:14px" > 所有配置均为可选。 < / p >
< pre > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span >
< pre > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span >
< span class = "c-com" > // 内容< / span >
< span class = "c-com" > // 内容< / span >
value< span class = "c-punc" > :< / span > < span class = "c-str" > ''< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 初始 Markdown 文本 < / span >
value< span class = "c-punc" > :< / span > < span class = "c-str" > ''< / span > < span class = "c-punc" > ,< / span > placeholder < span class = "c-punc " > : < / span > < span class = "c-str" > '' < / span > < span class = "c-punc" > , < / span >
placeholder< span class = "c-punc" > :< / span > < span class = "c-str" > ''< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // 占位符< / span >
< span class = "c-com" > // 视图< / span >
< span class = "c-com" > // 视图< / span >
mode< span class = "c-punc" > :< / span > < span class = "c-str" > 'split'< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 'edit' | 'split' | 'preview' < / span >
mode< span class = "c-punc" > :< / span > < span class = "c-str" > 'split'< / span > < span class = "c-punc" > ,< / span > height < span class = "c-punc " > : < / span > < span class = "c-num" > 400 < / span > < span class = "c-punc" > , < / span >
height < span class = "c-punc" > :< / span > < span class = "c-num " > 400 < / span > < span class = "c-punc" > , < / span > < span class = "c-com " > // 数字为 px,字符串原样使用 < / span >
toolbar < span class = "c-punc" > :< / span > DEFAULT_TOOLBAR < span class = "c-punc " > , < / span > wordCount < span class = "c-punc" > : < / span > < span class = "c-kw " > true < / span > < span class = "c-punc" > , < / span >
toolbar < span class = "c-punc" > :< / span > DEFAULT_TOOLBAR < span class = "c-punc" > ,< / span > < span class = "c-com " > // 工具栏配置,false 隐藏 < / span >
lineNumbers < span class = "c-punc" > :< / span > < span class = "c-kw" > true < / span > < span class = "c-punc" > ,< / span > outline < span class = "c-punc " > : < / span > < span class = "c-kw" > false < / span > < span class = "c-punc" > , < / span >
wordCount< span class = "c-punc" > :< / span > < span class = "c-kw" > true< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // 字数统计状态栏< / span >
< span class = "c-com" > // 行为< / span >
< span class = "c-com" > // 行为< / span >
autofocus< span class = "c-punc" > :< / span > < span class = "c-kw" > false< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 自动聚焦 < / span >
autofocus< span class = "c-punc" > :< / span > < span class = "c-kw" > false< / span > < span class = "c-punc" > ,< / span > spellcheck < span class = "c-punc " > : < / span > < span class = "c-kw" > false < / span > < span class = "c-punc" > , < / span >
spellcheck < span class = "c-punc" > :< / span > < span class = "c-kw" > false< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 拼写检查 < / span >
readOnly < span class = "c-punc" > :< / span > < span class = "c-kw" > false< / span > < span class = "c-punc" > ,< / span > tabSize < span class = "c-punc " > : < / span > < span class = "c-num" > 2 < / span > < span class = "c-punc" > , < / span >
readOnly < span class = "c-punc" > :< / span > < span class = "c-kw " > false < / span > < span class = "c-punc" > ,< / span > < span class = "c-co m" > // 只读模式 < / span >
historyLimit < span class = "c-punc" > :< / span > < span class = "c-num " > 100 < / span > < span class = "c-punc" > ,< / span > historyDebounce < span class = "c-punc" > : < / span > < span class = "c-nu m" > 400 < / span > < span class = "c-punc" > , < / span >
historyLimit < span class = "c-punc" > :< / span > < span class = "c-num " > 100 < / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 历史栈上限 < / span >
syncScroll < span class = "c-punc" > :< / span > < span class = "c-kw " > true < / span > < span class = "c-punc" > ,< / span > autoBrackets < span class = "c-punc " > : < / span > < span class = "c-kw" > true < / span > < span class = "c-punc" > , < / span >
historyDebounc e< span class = "c-punc" > :< / span > < span class = "c-num " > 400 < / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 历史防抖延迟(ms) < / span >
zenMod e< span class = "c-punc" > :< / span > < span class = "c-kw " > false < / span > < span class = "c-punc" > ,< / span > wordWrap < span class = "c-punc " > : < / span > < span class = "c-kw" > true < / span > < span class = "c-punc" > , < / span >
syncScroll< span class = "c-punc" > :< / span > < span class = "c-kw" > true< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // 分屏模式同步滚动< / span >
tabSize< span class = "c-punc" > :< / span > < span class = "c-num" > 2< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // 制表符空格数(0 表示 \t) < / span >
< span class = "c-com" > // 主题与国际化 < / span >
< span class = "c-com" > // 主题 / 语言 < / span >
theme< span class = "c-punc" > :< / span > < span class = "c-str" > 'auto'< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 'light' | 'dark' | 'auto' | 'warm' | 自定义 < / span >
theme< span class = "c-punc" > :< / span > < span class = "c-str" > 'auto'< / span > < span class = "c-punc" > ,< / span > locale < span class = "c-punc " > : < / span > < span class = "c-str" > 'zh-CN' < / span > < span class = "c-punc" > , < / span >
locale< span class = "c-punc" > :< / span > < span class = "c-str" > 'zh-CN'< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // 'zh-CN' | 'en-US' | 自定义< / span >
< span class = "c-com" > // 自定义渲染 < / span >
< span class = "c-com" > // 钩子 < / span >
render< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // (md, env) = > html < / span >
render< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > highlight < span class = "c-punc " > : < / span > < span class = "c-kw" > null < / span > < span class = "c-punc" > , < / span >
highlight < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // (code, lang) = > html < / span >
sanitize < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span >
sanitize< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // (html) => safeHtml< / span >
< span class = "c-com" > // 外观< / span >
< span class = "c-com" > // 外观< / span >
className< span class = "c-punc" > :< / span > < span class = "c-str" > ''< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // 容器额外 class < / span >
className< span class = "c-punc" > :< / span > < span class = "c-str" > ''< / span > < span class = "c-punc" > ,< / span > style < span class = "c-punc " > : < / span > < span class = "c-punc" > {}, < / span >
style< span class = "c-punc" > :< / span > < span class = "c-punc" > {},< / span > < span class = "c-com" > // 内联样式< / span >
< span class = "c-com" > // 插件与 回调< / span >
< span class = "c-com" > // 插件 / 回调< / span >
plugins< span class = "c-punc" > :< / span > < span class = "c-punc" > [],< / span > < span class = "c-com" > // 实例级插件数组 < / span >
plugins< span class = "c-punc" > :< / span > < span class = "c-punc" > [],< / span >
onChange< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // (value, editor) = > void < / span >
onChange< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > onInput < span class = "c-punc " > : < / span > < span class = "c-kw" > null < / span > < span class = "c-punc" > , < / span >
onInput < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // (value, editor) = > void < / span >
onFocus < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > onBlur < span class = "c-punc " > : < / span > < span class = "c-kw" > null < / span > < span class = "c-punc" > , < / span >
onFocus < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // (editor) = > void < / span >
onSave < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > onModeChange < span class = "c-punc " > : < / span > < span class = "c-kw" > null < / span > < span class = "c-punc" > , < / span >
onBlur < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // (editor) = > void < / span >
onFullscreen < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > onCreate < span class = "c-punc " > : < / span > < span class = "c-kw" > null < / span > < span class = "c-punc" > , < / span >
onSave < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com " > // (value, editor) = > void < / span >
onDestroy < span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > onLinkClick < span class = "c-punc" > : < / span > < span class = "c-kw " > null < / span > < span class = "c-punc" > , < / span >
onModeChange< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // (mode, editor) => void< / span >
onFullscreen< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // (fullscreen, editor) => void< / span >
onCreate< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // (editor) => void< / span >
onDestroy< span class = "c-punc" > :< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // (editor) => void< / span >
< span class = "c-punc" > });< / span > < / pre >
< span class = "c-punc" > });< / span > < / pre >
< / section >
< / section >
<!-- ======== 工具栏 ======== -->
<!-- 工具栏 -->
< section id = "toolbar" >
< section id = "toolbar" >
< h2 > 工具栏配置 < / h2 >
< h2 > 工具栏< / h2 >
< pre > < span class = "c-com" > // 默认完整工具栏< / span >
< pre > < span class = "c-com" > // 默认工具栏(完整按钮)< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > toolbar< span class = "c-punc" > :< / span > < span class = "c-kw" > true< / span > < span class = "c-punc" > });< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > toolbar< span class = "c-punc" > :< / span > < span class = "c-kw" > true< / span > < span class = "c-punc" > });< / span >
< span class = "c-com" > // 隐藏工具栏 < / span >
< span class = "c-com" > // 隐藏< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > toolbar< span class = "c-punc" > :< / span > < span class = "c-kw" > false< / span > < span class = "c-punc" > });< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > toolbar< span class = "c-punc" > :< / span > < span class = "c-kw" > false< / span > < span class = "c-punc" > });< / span >
< span class = "c-com" > // 自定义工具栏 — '|' 为分隔符< / span >
< span class = "c-com" > // 自定义 | 为分隔符< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > toolbar < span class = "c-punc" > : < / span > < span class = "c-punc" > [ < / span > < span class = "c-str" > 'bold' < / span > < span class = "c-punc" > , < / span > < span class = "c-str" > 'italic' < / span > < span class = "c-punc" > , < / span > < span class = "c-str" > '|' < / span > < span class = "c-punc" > , < / span > < span class = "c-str" > 'undo' < / span > < span class = "c-punc" > , < / span > < span class = "c-str" > 'redo' < / span > < span class = "c-punc" > ] < / span > < span class = "c-punc" > }); < / span > < / pre >
toolbar< span class = "c-punc" > :< / span > < span class = "c-punc" > [< / span > < span class = "c-str" > 'bold'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > 'italic'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > '|'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > 'h1'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > 'h2'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > '|'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > 'undo'< / span > < span class = "c-punc" > ,< / span > < span class = "c-str" > 'redo'< / span > < span class = "c-punc" > ],< / span >
< span class = "c-punc" > });< / span > < / pre >
< p > 可用动作:< / p >
< p > 可用动作:< / p >
< p >
< p >
< span class = "badge" > bold< / span > < span class = "badge" > italic< / span > < span class = "badge" > strikethrough< / span > < span class = "badge" > underline< / span > < span class = "badge" > code< / span >
< span class = "badge" > bold< / span > < span class = "badge" > italic< / span > < span class = "badge" > strikethrough< / span > < span class = "badge" > underline< / span > < span class = "badge" > code< / span >
@@ -311,306 +185,246 @@ MeEditor<span class="c-punc">.</span><span class="c-fn">create</span><span class
< / p >
< / p >
< / section >
< / section >
<!-- ======== 实例 API ======== -->
<!-- 实例 API -->
< section id = "api-content" >
< section id = "api-content" > < h2 > 实例 API < / h2 >
< h2 > 实例 API< / h2 >
< h3 > 内容操作< / h3 >
< h3 > 内容操作< / h3 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getValue< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 获取 Markdown 文本 < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getValue< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // => string < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setValue< / span > < span class = "c-punc" > (< / span > md< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > silent < span class = "c-punc" > });< / span > < span class = "c-com" > // 设置内容,silent 不触发 change < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setValue< / span > < span class = "c-punc" > (< / span > md< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > silent < span class = "c-punc" > });< / span > < span class = "c-com" > // => this < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getHTML< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 获取渲染后的 HTML < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getHTML< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // => string < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > refresh< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 强制刷新预览(内容未变时) < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > refresh< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 强制重渲染 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > insert< / span > < span class = "c-punc" > (< / span > text< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > replace < span class = "c-punc" > });< / span > < span class = "c-com" > // 光标处插入 / 替换选区 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > insert< / span > < span class = "c-punc" > (< / span > text< span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > replace < span class = "c-punc" > });< / span > < span class = "c-com" > // => this < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > wrap< / span > < span class = "c-punc" > (< / span > before< span class = "c-punc" > ,< / span > after< span class = "c-punc" > );< / span > < span class = "c-com" > // 选区包裹 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > wrap< / span > < span class = "c-punc" > (< / span > before< span class = "c-punc" > ,< / span > after< span class = "c-punc" > );< / span > < span class = "c-com" > // => this < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > focus< / span > < span class = "c-punc" > ();< / span > < span class = "c-com " > // 聚焦 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > focus< / span > < span class = "c-punc" > ();< / span > < span class = "c-fn " > blur < / span > < span class = "c-punc" > (); < / span > < / pre >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > blur< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 失焦< / span > < / pre >
< / section >
< / section >
< section id = "api-exec" >
< section id = "api-exec" > < h3 > 命令执行 < / h3 >
< h3 > 命令执行 < / h3 >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > exec < / span > < span class = "c-punc" > ( < / span > action < span class = "c-punc" > ) < / span > < span class = "c-com" > // => this, 支持链式 < / span > < / pre >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > exec< / span > < span class = "c-punc" > (< / span > action< span class = "c-punc" > ,< / span > < span class = "c-punc" > ...< / span > args< span class = "c-punc" > );< / span > < span class = "c-com" > // 执行命令,返回 this 链式调用< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > exec< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'bold'< / span > < span class = "c-punc" > ).< / span > < span class = "c-fn" > exec< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'h1'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 链式调用< / span > < / pre >
< table >
< table >
< tr > < th > action< / th > < th > 效果< / th > < th > 快捷键< / th > < / tr >
< tr > < th > action< / th > < th > 效果< / th > < th > 快捷键< / th > < / tr >
< tr > < td > < code > bold< / code > < / td > < td > 加粗 **text**< / td > < td > Ctrl+B< / td > < / tr >
< tr > < td > < code > bold< / code > < / td > < td > **text**< / td > < td > Ctrl+B< / td > < / tr >
< tr > < td > < code > italic< / code > < / td > < td > 斜体 *text*< / td > < td > Ctrl+I< / td > < / tr >
< tr > < td > < code > italic< / code > < / td > < td > *text*< / td > < td > Ctrl+I< / td > < / tr >
< tr > < td > < code > strikethrough< / code > < / td > < td > 删除线 ~~text~~< / td > < td > —< / td > < / tr >
< tr > < td > < code > strikethrough< / code > < / td > < td > ~~text~~< / td > < td > —< / td > < / tr >
< tr > < td > < code > underline< / code > < / td > < td > 下划线 < u> text< /u> < / td > < td > Ctrl+U< / td > < / tr >
< tr > < td > < code > underline< / code > < / td > < td > < u> text< /u> < / td > < td > Ctrl+U< / td > < / tr >
< tr > < td > < code > code< / code > < / td > < td > 行内代码 `text`< / td > < td > Ctrl+E< / td > < / tr >
< tr > < td > < code > code< / code > < / td > < td > `text`< / td > < td > Ctrl+E< / td > < / tr >
< tr > < td > < code > h1< / code > /< code > h2< / code > /< code > h3< / code > < / td > < td > 标题 # / ## / ###< / td > < td > Ctrl+1/2/3< / td > < / tr >
< tr > < td > < code > h1< / code > /< code > h2< / code > /< code > h3< / code > < / td > < td > # / ## / ###< / td > < td > Ctrl+1/2/3< / td > < / tr >
< tr > < td > < code > quote< / code > < / td > < td > 引用 > < / td > < td > Ctrl+Q< / td > < / tr >
< tr > < td > < code > quote< / code > < / td > < td > > text < / td > < td > Ctrl+Q< / td > < / tr >
< tr > < td > < code > ul< / code > /< code > ol< / code > < / td > < td > 无序/有序 列表< / td > < td > —< / td > < / tr >
< tr > < td > < code > ul< / code > /< code > ol< / code > < / td > < td > - / 1. 列表< / td > < td > —< / td > < / tr >
< tr > < td > < code > indent < / code > / < code > outdent < / code > < / td > < td > 缩进/反缩进 < / td > < td > Tab/Shift+Tab < / td > < / tr >
< tr > < td > < code > l ink < / code > < / td > < td > [text](url) < / td > < td > Ctrl+K < / td > < / tr >
< tr > < td > < code > hr < / code > < / td > < td > 水平线 --- < / td > < td > —< / td > < / tr >
< tr > < td > < code > image < / code > < / td > < td >  < / td > < td > —< / td > < / tr >
< tr > < td > < code > link< / code > < / td > < td > 插入链接 [text](url)< / td > < td > Ctrl+K< / td > < / tr >
< tr > < td > < code > image< / code > < / td > < td > 插入图片 < / td > < td > —< / td > < / tr >
< tr > < td > < code > table< / code > < / td > < td > 插入表格< / td > < td > —< / td > < / tr >
< tr > < td > < code > table< / code > < / td > < td > 插入表格< / td > < td > —< / td > < / tr >
< tr > < td > < code > undo < / code > / < code > redo < / code > < / td > < td > 撤销/重做 < / td > < td > Ctrl+Z / Ctrl+Y < / td > < / tr >
< tr > < td > < code > hr < / code > < / td > < td > ---水平线 < / td > < td > — < / td > < / tr >
< tr > < td > < code > indent< / code > /< code > outdent< / code > < / td > < td > 缩进/反缩进< / td > < td > Tab / Shift+Tab< / td > < / tr >
< tr > < td > < code > undo< / code > /< code > redo< / code > < / td > < td > 撤销/重做< / td > < td > Ctrl+Z / Y< / td > < / tr >
< tr > < td > < code > edit< / code > /< code > split< / code > /< code > preview< / code > < / td > < td > 切换模式< / td > < td > —< / td > < / tr >
< tr > < td > < code > edit< / code > /< code > split< / code > /< code > preview< / code > < / td > < td > 切换模式< / td > < td > —< / td > < / tr >
< tr > < td > < code > fullscreen< / code > < / td > < td > 切换 全屏< / td > < td > —< / td > < / tr >
< tr > < td > < code > fullscreen< / code > < / td > < td > 全屏< / td > < td > —< / td > < / tr >
< tr > < td > < code > zen< / code > < / td > < td > Zen 模式< / td > < td > —< / td > < / tr >
< tr > < td > < code > wordwrap< / code > < / td > < td > 自动换行< / td > < td > —< / td > < / tr >
< / table >
< / table >
< / section >
< / section >
< section id = "api-history" >
< section id = "api-history" > < h3 > 历史栈 < / h3 >
< h3 > 历史栈 < / h3 >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > undo < / span > < span class = "c-punc" > (); < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > redo < / span > < span class = "c-punc" > (); < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > u ndo< / span > < span class = "c-punc" > ();< / span > < span class = "c-com " > // 撤销 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > canU ndo< / span > < span class = "c-punc" > ();< / span > editor < span class = "c-punc " > . < / span > < span class = "c-fn" > canRedo < / span > < span class = "c-punc" > (); < / span > < / pre >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > redo< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 重做< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > canUndo< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 是否可撤销< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > canRedo< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 是否可重做< / span > < / pre >
< / section >
< / section >
< section id = "api-mode" >
< section id = "api-mode" > < h3 > 模式 / 全屏 / Zen < / h3 >
< h3 > 模式与全屏 < / h3 >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > setMode < / span > < span class = "c-punc" > ( < / span > < span class = "c-str" > 'split' < / span > < span class = "c-punc" > ); < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > getMode < / span > < span class = "c-punc" > (); < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setMode < / span > < span class = "c-punc" > (< / span > < span class = "c-str " > 'split' < / span > < span class = "c-punc" > );< / span > < span class = "c-com " > // 设置模式:edit | split | preview < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > toggleFullscreen < / span > < span class = "c-punc" > (); < / span > < span class = "c-fn " > isFullscreen < / span > < span class = "c-punc" > ( );< / span > < span class = "c-fn " > exitFullscreen < / span > < span class = "c-punc" > (); < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getMode < / span > < span class = "c-punc" > ();< / span > < span class = "c-com " > // 获取当前模式 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > toggleZen < / span > < span class = "c-punc" > ();< / span > < span class = "c-fn " > isZen < / span > < span class = "c-punc" > (); < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > toggleFullscreen < / span > < span class = "c-punc" > ();< / span > < span class = "c-com " > // 切换全屏 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > toggleWordWrap < / span > < span class = "c-punc" > ();< / span > < span class = "c-fn" > setWordWrap < / span > < span class = "c-punc" > ( < / span > < span class = "c-kw" > true < / span > < span class = "c-punc" > ); < / span > < span class = "c-fn " > isWordWrap < / span > < span class = "c-punc" > (); < / span > < / pre >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > exitFullscreen< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 退出全屏< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > isFullscreen< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 是否全屏< / span > < / pre >
< / section >
< / section >
< section id = "api-stats" >
< section id = "api-stats" > < h3 > 统计与状态 < / h3 >
< h3 > 统计与状态< / h3 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getStats< / span > < span class = "c-punc" > ();< / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getStats< / span > < span class = "c-punc" > ();< / span >
< span class = "c-com" > // => { characters, words, chineseChars, englishWords, lines, readingTime }< / span >
< span class = "c-com" > // => { characters, words, chineseChars, englishWords, lines, readingTime }< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getStatus< / span > < span class = "c-punc" > ();< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getStatus< / span > < span class = "c-punc" > ();< / span >
< span class = "c-com" > // => { id, mode, theme, locale, fullscreen, readOnly, disabled, destroyed, plugins }< / span > < / pre >
< span class = "c-com" > // => { id, mode, theme, locale, fullscreen, readOnly, disabled, destroyed, plugins }< / span > < / pre >
< / section >
< / section >
< section id = "api-readonly" >
< section id = "api-readonly" > < h3 > 启用 / 禁用 / 只读 < / h3 >
< h3 > 启用/禁用/只读 < / h3 >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > enable < / span > < span class = "c-punc" > (); < / span > < span class = "c-fn" > disable < / span > < span class = "c-punc" > (); < / span > < span class = "c-fn" > isDisabled < / span > < span class = "c-punc" > (); < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > enabl e< / span > < span class = "c-punc" > ( );< / span > < span class = "c-com " > // 启用 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setReadOnly < / span > < span class = "c-punc" > ( < / span > < span class = "c-kw" > tru e< / span > < span class = "c-punc" > );< / span > < span class = "c-fn " > isReadOnly < / span > < span class = "c-punc" > (); < / span > < / pre >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > disable< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 禁用< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > isDisabled< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 是否禁用< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setReadOnly< / span > < span class = "c-punc" > (< / span > < span class = "c-kw" > true< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 只读模式< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > isReadOnly< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 是否只读< / span > < / pre >
< / section >
< / section >
< section id = "api-events" >
< section id = "api-events" > < h3 > 事件系统 < / h3 >
< h3 > 事件系统< / h3 >
< table >
< table >
< tr > < th > 事件名 < / th > < th > 触发时机< / th > < th > 回调 参数< / th > < / tr >
< tr > < th > 事件< / th > < th > 触发时机< / th > < th > 参数< / th > < / tr >
< tr > < td > < code > input< / code > < / td > < td > textarea 原生 input < / td > < td > < code > (value, editor)< / code > < / td > < / tr >
< tr > < td > < code > input< / code > < / td > < td > textarea 输入 < / td > < td > < code > (value, editor)< / code > < / td > < / tr >
< tr > < td > < code > change< / code > < / td > < td > 内容变化< / td > < td > < code > (value, editor)< / code > < / td > < / tr >
< tr > < td > < code > change< / code > < / td > < td > 内容变化< / td > < td > < code > (value, editor)< / code > < / td > < / tr >
< tr > < td > < code > focus< / code > < / td > < td > 聚焦< / td > < td > < code > (editor)< / code > < / td > < / tr >
< tr > < td > < code > focus< / code > / < code > blur < / code > < / td > < td > 聚焦/失焦 < / td > < td > < code > (editor)< / code > < / td > < / tr >
< tr > < td > < code > blur < / code > < / td > < td > 失焦 < / td > < td > < code > (editor)< / code > < / td > < / tr >
< tr > < td > < code > save < / code > < / td > < td > Ctrl+S < / td > < td > < code > (editor)< / code > < / td > < / tr >
< tr > < td > < code > save< / code > < / td > < td > Ctrl+S< / td > < td > < code > (value, editor)< / code > < / td > < / tr >
< tr > < td > < code > modeChange< / code > < / td > < td > 模式切换< / td > < td > < code > (mode, editor)< / code > < / td > < / tr >
< tr > < td > < code > modeChange< / code > < / td > < td > 模式切换< / td > < td > < code > (mode, editor)< / code > < / td > < / tr >
< tr > < td > < code > fullscreen< / code > < / td > < td > 全屏切换< / td > < td > < code > (fullscreen, editor)< / code > < / td > < / tr >
< tr > < td > < code > fullscreen< / code > < / td > < td > 全屏切换< / td > < td > < code > (fullscreen, editor)< / code > < / td > < / tr >
< tr > < td > < code > themeChange< / code > < / td > < td > 主题变更< / td > < td > < code > ({ theme, resolved, config })< / code > < / td > < / tr >
< tr > < td > < code > localeChange< / code > < / td > < td > 语言变更< / td > < td > < code > ({ locale, direction })< / code > < / td > < / tr >
< tr > < td > < code > zenChange< / code > < / td > < td > Zen 切换< / td > < td > < code > (zen, editor)< / code > < / td > < / tr >
< tr > < td > < code > destroy< / code > < / td > < td > 销毁< / td > < td > < code > ()< / code > < / td > < / tr >
< tr > < td > < code > destroy< / code > < / td > < td > 销毁< / td > < td > < code > ()< / code > < / td > < / tr >
< tr > < td > < code > autosave < / code > < / td > < td > autoSave 保存 < / td > < td > < code > ({ key, value } )< / code > < / td > < / tr >
< tr > < td > < code > beforeRender < / code > / < code > afterRender < / code > < / td > < td > 渲染前后 < / td > < td > < code > (editor )< / code > < / td > < / tr >
< tr > < td > < code > beforeRender < / code > < / td > < td > 渲染前 < / td > < td > < code > (editor )< / code > < / td > < / tr >
< tr > < td > < code > autosave < / code > < / td > < td > autoSave 触发 < / td > < td > < code > ({ key, value } )< / code > < / td > < / tr >
< tr > < td > < code > afterRender < / code > < / td > < td > 渲染后 < / td > < td > < code > (editor )< / code > < / td > < / tr >
< tr > < td > < code > linkClick < / code > < / td > < td > 预览链接点击 < / td > < td > < code > ({ href, text } )< / code > < / td > < / tr >
< / table >
< / table >
< h4 > 全局钩子< / h4 >
< h4 > 全局钩子(所有实例共享)< / h4 >
< table >
< table >
< tr > < th > 钩子< / th > < th > 触发时机< / th > < / tr >
< tr > < th > 钩子< / th > < th > 触发时机< / th > < / tr >
< tr > < td > < code > beforeCreate< / code > < / td > < td > 构造函数初始化前 < / td > < / tr >
< tr > < td > < code > beforeCreate< / code > / < code > afterCreate < / code > < / td > < td > 实例构造前后 < / td > < / tr >
< tr > < td > < code > afterCreate < / code > < / td > < td > 构造函数初始化完成 < / td > < / tr >
< tr > < td > < code > beforeRender < / code > / < code > afterRender < / code > < / td > < td > 全局渲染前后 < / td > < / tr >
< tr > < td > < code > beforeRender < / code > < / td > < td > 每次渲染前(全局) < / td > < / tr >
< tr > < td > < code > beforeDestroy < / code > / < code > afterDestroy < / code > < / td > < td > 销毁前后 < / td > < / tr >
< tr > < td > < code > afterRender< / code > < / td > < td > 每次渲染后(全局)< / td > < / tr >
< tr > < td > < code > beforeDestroy< / code > < / td > < td > destroy 前< / td > < / tr >
< tr > < td > < code > afterDestroy< / code > < / td > < td > destroy 后< / td > < / tr >
< / table >
< / table >
< / section >
< / section >
< section id = "api-plugin" >
< section id = "api-plugin" > < h3 > 插件管理 < / h3 >
< h3 > 插件管理 < / h3 >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > use < / span > < span class = "c-punc" > ( < / span > plugin < span class = "c-punc" > , < / span > options < span class = "c-punc" > ); < / span > < span class = "c-com" > // 安装 < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > plugin < span class = "c-punc" > , < / span > options < span class = "c-punc" > ); < / span > < span class = "c-com" > // 安装插件 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > un use< / span > < span class = "c-punc" > (< / span > name < span class = "c-punc" > ); < / span > < span class = "c-com" > // 卸载 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getPlugins< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 获取 已安装插件 列表< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getPlugins< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 已安装列表< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > addToolbarButton< / span > < span class = "c-punc" > (< / span > config< span class = "c-punc" > );< / span > < span class = "c-com" > // 追加工具栏 按钮< / span > < / pre >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > addToolbarButton< / span > < span class = "c-punc" > (< / span > config< span class = "c-punc" > );< / span > < span class = "c-com" > // 追加按钮< / span > < / pre >
< / section >
< / section >
< section id = "api-lifecycle" >
< section id = "api-shortcuts" > < h3 > 快捷键管理 < / h3 >
< h3 > 生命周期 < / h3 >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > registerShortcut < / span > < span class = "c-punc" > ( < / span > < span class = "c-str" > 'Ctrl+Shift+T' < / span > < span class = "c-punc" > , < / span > handler < span class = "c-punc" > , < / span > < span class = "c-str" > 'desc' < / span > < span class = "c-punc" > ); < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > destroy < / span > < span class = "c-punc" > (); < / span > < span class = "c-com " > // 销毁实例 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > unregisterShortcut < / span > < span class = "c-punc" > (< / span > < span class = "c-str " > 'Ctrl+Shift+T' < / span > < span class = "c-punc" > ); < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > isDestroyed < / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 是否已销毁 < / span > < / pre >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getShortcuts < / span > < span class = "c-punc" > ();< / span > < / pre >
< / section >
< / section >
<!-- ======== 静态 API ======== -->
< section id = "api-destroy" > < h3 > 生命周期 / Toast< / h3 >
< section id = "static-api" >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > destroy < / span > < span class = "c-punc" > (); < / span > < span class = "c-fn" > isDestroyed < / span > < span class = "c-punc" > (); < / span >
< h2 > 静态 API < / h2 >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > toast < / span > < span class = "c-punc" > ( < / span > msg < span class = "c-punc" > , < / span > < span class = "c-punc" > { < / span > type < span class = "c-punc" > , < / span > duration < span class = "c-punc" > , < / span > animation < span class = "c-punc" > }); < / span > < / pre >
< / section >
<!-- 静态 API -->
< section id = "static-api" > < h2 > 静态 API< / h2 >
< pre > < span class = "c-kw" > import< / span > MeEditor < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< pre > < span class = "c-kw" > import< / span > MeEditor < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-com" > // 工厂函数< / span >
< span class = "c-com" > // 工厂函数< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > options< span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > create< / span > < span class = "c-punc" > (< / span > container< span class = "c-punc" > ,< / span > options< span class = "c-punc" > );< / span >
< span class = "c-com" > // 全局默认插件< / span >
< span class = "c-com" > // 全局默认插件< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > presetPlugins < span class = "c-punc " > . < / span > autoSave < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > delay< span class = "c-punc" > :< / span > < span class = "c-num" > 2000< / span > < span class = "c-punc" > });< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > < span class = "c-str " > 'autoSave' < / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > delay< span class = "c-punc" > :< / span > < span class = "c-num" > 2000< / span > < span class = "c-punc" > });< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'searchReplace'< / span > < span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > customPlugin< span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > customPlugin< span class = "c-punc" > );< / span >
< span class = "c-com" > // 全局事件 钩子< / span >
< span class = "c-com" > // 全局钩子< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > on< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'beforeCreate'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > (< / span > editor< span class = "c-punc" > )< / span > < span class = "c-punc" > => < / span > < span class = "c-punc" > {});< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > on< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'beforeCreate'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > (< / span > editor< span class = "c-punc" > )< / span > < span class = "c-punc" > => < / span > < span class = "c-punc" > {});< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > off< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'beforeCreate'< / span > < span class = "c-punc" > ,< / span > handler< span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > off< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'beforeCreate'< / span > < span class = "c-punc" > ,< / span > handler< span class = "c-punc" > );< / span >
< span class = "c-com" > // 主题与 语言< / span >
< span class = "c-com" > // 全局主题 / 语言< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'dark'< / span > < span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'dark'< / span > < span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setLocale< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'en-US'< / span > < span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setLocale< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'en-US'< / span > < span class = "c-punc" > );< / span >
< span class = "c-com" > // 状态查询 < / span >
< span class = "c-com" > // 解析器独立使用 < / span >
MeEditor < span class = "c-punc" > . < / span > < span class = "c-fn " > getStatus < / span > < span class = "c-punc" > (); < / span > < span class = "c-com " > // = > { version, theme, locale, globalPlugins, presetPlugins } < / span >
< span class = "c-kw" > import < / span > < span class = "c-punc" > { < / span > parseMarkdown < span class = "c-punc " > , < / span > parseTokens < span class = "c-punc" > , < / span > renderTokens < span class = "c-punc" > } < / span > < span class = "c-kw " > from < / span > < span class = "c-str" > '@metona-team/metona-editor' < / span > < span class = "c-punc" > ; < / span > < / pre >
< span class = "c-com" > // 销毁全局资源< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > destroy< / span > < span class = "c-punc" > ();< / span >
< span class = "c-com" > // 内置解析器< / span >
< span class = "c-kw" > import< / span > < span class = "c-punc" > {< / span > parseMarkdown< span class = "c-punc" > ,< / span > safeUrl< span class = "c-punc" > ,< / span > slugify < span class = "c-punc" > }< / span > < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-fn" > parseMarkdown< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '# Hello'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // => '< h1 id="hello"> Hello< /h1> '< / span >
< span class = "c-fn" > safeUrl< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'javascript:alert(1)'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // => ''< / span >
< span class = "c-fn" > slugify< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'Hello World'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // => 'hello-world'< / span > < / pre >
< / section >
< / section >
<!-- ======== 语法参考 ======== -->
<!-- 解析器语法 -->
< section id = "syntax" >
< section id = "parser- syntax" > < h2 > 解析器语法参考 < / h2 >
< h2 > 解析器语法参考< / h2 >
< table >
< table >
< tr > < th > 语法< / th > < th > 示例< / th > < th > 输出< / th > < / tr >
< tr > < th > 语法< / th > < th > 示例< / th > < th > 输出< / th > < / tr >
< tr > < td > 标题< / td > < td > < code > # H1< / code > ~ < code > ###### H6< / code > < / td > < td > < code > < h1> < / code > ~ < code > < h6> < / code > < / td > < / tr >
< tr > < td > 标题< / td > < td > < code > # H1< / code > ~ < code > ###### H6< / code > < / td > < td > < h1> ~ < h6> < / td > < / tr >
< tr > < td > 段落 < / td > < td > 纯文本 < / td > < td > < code > < p > < / code > < / td > < / tr >
< tr > < td > Setext 标题 < / td > < td > < code > H1\n=== < / code > < / td > < td > < h1 > / < h2 > < / td > < / tr >
< tr > < td > 粗体< / td > < td > < code > **bold**< / code > < code > __bold__< / code > < / td > < td > < code > < strong> < / code > < / td > < / tr >
< tr > < td > 粗体< / td > < td > < code > **bold**< / code > < code > __bold__< / code > < / td > < td > < strong> < / td > < / tr >
< tr > < td > 斜体< / td > < td > < code > *italic *< / code > < code > _italic _< / code > < / td > < td > < code > < em> < / code > < / td > < / tr >
< tr > < td > 粗 斜体 < span class = "badge" > v0.1.15 < / span > < / td > < td > < code > ***text** *< / code > < code > ___text__ _< / code > < / td > < td > < em> < strong > < / td > < / tr >
< tr > < td > 删除线 < / td > < td > < code > ~~text~~ < / code > < / td > < td > < code > < del > < / code > < / td > < / tr >
< tr > < td > 斜体 < / td > < td > < code > *italic* < / code > < code > _italic_ < / code > < / td > < td > < em > < / td > < / tr >
< tr > < td > 高亮标记 < / td > < td > < code > ==text== < / code > < / td > < td > < code > < mark> < / code > < / td > < / tr >
< tr > < td > 删除线 / 高亮< / td > < td > < code > ~~del~~ < / code > < code > ==mark== < / code > < / td > < td > < del > / < mark> < / td > < / tr >
< tr > < td > 上标< / td > < td > < code > x^2^< / code > < / td > < td > < code > < sup> < / code > < / td > < / tr >
< tr > < td > 上标 / 下标 < / td > < td > < code > x^2^< / code > < code > H~2~O < / code > < / td > < td > < sup> / < sub > < / td > < / tr >
< tr > < td > 下标 < / td > < td > < code > H~2~O < / code > < / td > < td > < code > < sub > < / code > < / td > < / tr >
< tr > < td > 行内代码 < / td > < td > < code > `code` < / code > < / td > < td > < code > < / td > < / tr >
< tr > < td > 行内 代码< / td > < td > < code > `code` < / code > < / td > < td > < code > < code> < / code > < / td > < / tr >
< tr > < td > 代码块 < / td > < td > < code > ```lang < / code > < / td > < td > < pre > < code> < / td > < / tr >
< tr > < td > 代码块< / td > < td > < code > ```lang < / code > < / td > < td > < code > < pre> < code> < / code > < / td > < / tr >
< tr > < td > 缩进 代码块< / td > < td > < code > code < / code > < / td > < td > < pre> < code> < / td > < / tr >
< tr > < td > 引用< / td > < td > < code > > quote< / code > < / td > < td > < code > < blockquote> < / code > < / td > < / tr >
< tr > < td > 引用< / td > < td > < code > > quote< / code > < / td > < td > < blockquote> < / td > < / tr >
< tr > < td > 无序列表< / td > < td > < code > - item< / code > < / td > < td > < code > < ul> < li> < / code > < / td > < / tr >
< tr > < td > 无序列表< / td > < td > < code > - * + item< / code > < / td > < td > < ul> < li> < / td > < / tr >
< tr > < td > 有序列表< / td > < td > < code > 1. item< / code > < / td > < td > < code > < ol> < li> < / code > < / td > < / tr >
< tr > < td > 有序列表< / td > < td > < code > 1. item< / code > < / td > < td > < ol> < li> < / td > < / tr >
< tr > < td > 任务 列表< / td > < td > < code > - [x] done < / code > < / td > < td > < code > < li class="me-task-item" > < / code > < / td > < / tr >
< tr > < td > 嵌套 列表< / td > < td > 多级缩进 < / td > < td > 多级 < ul > / < ol > < / td > < / tr >
< tr > < td > 水平线 < / td > < td > < code > --- < / code > < code > *** < / code > < code > ___ < / code > < / td > < td > < code > < hr > < / code > < / td > < / tr >
< tr > < td > 任务列表 < / td > < td > < code > - [x] done < / code > < / td > < td > < li class="me-task-item" > < / td > < / tr >
< tr > < td > 表格 < / td > < td > < code > | a | b | < / code > < / td > < td > < code > < table > < / code > (支持 < code > :---: < / code > 列对齐) < / td > < / tr >
< tr > < td > 水平线 < / td > < td > < code > --- < / code > < code > *** < / code > < code > ___ < / code > < / td > < td > < hr > < / td > < / tr >
< tr > < td > 链接 < / td > < td > < code > [text](url) < / code > < / td > < td > < code > < a > < / code > < / td > < / tr >
< tr > < td > 表格 < / td > < td > < code > | a | b | < / code > < / td > < td > < table > + 列对齐 < / td > < / tr >
< tr > < td > 图片 < / td > < td > < code > < / code > < / td > < td > < code > < img > < / code > < / td > < / tr >
< tr > < td > 链接 < span class = "badge" > v0.1.15 < / span > < / td > < td > < code > [**t** ](url)< / code > < / td > < td > 文本内支持行内格式 < / td > < / tr >
< tr > < td > 自动链接 < / td > < td > < code > < https://... > < / code > < / td > < td > < code > < a > < / code > < / td > < / tr >
< tr > < td > 图片 < / td > < td > < code >  < / code > < / td > < td > < img > < / td > < / tr >
< tr > < td > Emoji < / td > < td > < code > :smile: < / code > < code > :rocket: < / code > < / td > < td > 😊 🚀(80+ 常用) < / td > < / tr >
< tr > < td > 引用链接 < span class = "badge" > v0.2.2 < / span > < / td > < td > < code > [text][ref] < / code > + < code > [ref]: url < / code > < / td > < td > < a > 引用式 < / td > < / tr >
< tr > < td > 引用图片 < span class = "badge" > v0.2.2< / span > < / td > < td > < code > ![alt][ref]< / code > + < code > [ref]: url< / code > < / td > < td > < img> 引用式< / td > < / tr >
< tr > < td > 自动链接< / td > < td > < code > < https://...> < / code > < / td > < td > < a> < / td > < / tr >
< tr > < td > 数学公式< / td > < td > < code > $E=mc^2$< / code > < / td > < td > < span> / < div> < / td > < / tr >
< tr > < td > 脚注< / td > < td > < code > text[^1]< / code > < / td > < td > < sup> + 底部< / td > < / tr >
< tr > < td > 定义列表< / td > < td > < code > Term\n: def< / code > < / td > < td > < dl> < dt> < dd> < / td > < / tr >
< tr > < td > Emoji< / td > < td > < code > :smile:< / code > < code > :rocket:< / code > < / td > < td > 😊 🚀(150+) < / td > < / tr >
< tr > < td > 反斜杠转义 < span class = "badge" > v0.1.15< / span > < / td > < td > < code > \*< / code > < code > \_< / code > < / td > < td > 取消标点特殊含义< / td > < / tr >
< / table >
< / table >
< h4 > XSS 防护< / h4 >
< h3 > XSS 防护 < / h3 >
< p > 所有文本经 < code > escapeHTML < / code > 转义,URL 过滤 < code > javascript: < / code > / < code > vbscript: < / code > / < code > file: < / code > / 非图片 < code > data: < / code > ,提供 < code > sanitize < / code > 钩子。 < / p >
< p > 所有文本经 HTML 转义。URL 自动过滤 < code > javascript:< / code > < code > vbscript:< / code > < code > file:< / code > 及非图片 < code > data:< / code > 协议。< / p >
< / section >
< / section >
<!-- ======== 插件 ======== -->
< section id = "parser-api" > < h2 > 解析器 API< / h2 >
< section id = "plugins" >
< h3 > parseTokens / renderTokens < / h3 >
< h2 > 插件约定 < / h2 >
< pre > < span class = "c-kw" > import < / span > < span class = "c-punc" > { < / span > parseTokens < span class = "c-punc" > , < / span > renderTokens < span class = "c-punc" > } < / span > < span class = "c-kw" > from < / span > < span class = "c-str" > '@metona-team/metona-editor' < / span > < span class = "c-punc" > ; < / span >
< span class = "c-kw" > const< / span > < span class = "c-punc" > {< / span > tokens< span class = "c-punc" > ,< / span > footnotes < span class = "c-punc" > }< / span > < span class = "c-punc" > =< / span > < span class = "c-fn" > parseTokens< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '# Hello\n\n**world**'< / span > < span class = "c-punc" > );< / span >
tokens< span class = "c-punc" > .< / span > < span class = "c-fn" > unshift< / span > < span class = "c-punc" > ({< / span > type< span class = "c-punc" > :< / span > < span class = "c-str" > 'hr'< / span > < span class = "c-punc" > });< / span > < span class = "c-com" > // 渲染前变换< / span >
< span class = "c-kw" > const< / span > html < span class = "c-punc" > =< / span > < span class = "c-fn" > renderTokens< / span > < span class = "c-punc" > (< / span > tokens< span class = "c-punc" > ,< / span > env< span class = "c-punc" > ,< / span > footnotes< span class = "c-punc" > );< / span > < / pre >
< h3 > registerBlockHandler< / h3 >
< pre > < span class = "c-kw" > import< / span > < span class = "c-punc" > {< / span > registerBlockHandler < span class = "c-punc" > }< / span > < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-fn" > registerBlockHandler< / span > < span class = "c-punc" > ({< / span >
name< span class = "c-punc" > :< / span > < span class = "c-str" > 'custom'< / span > < span class = "c-punc" > ,< / span > priority< span class = "c-punc" > :< / span > < span class = "c-num" > 8.5< / span > < span class = "c-punc" > ,< / span >
test< span class = "c-punc" > :< / span > < span class = "c-punc" > (< / span > line< span class = "c-punc" > )< / span > < span class = "c-punc" > =>< / span > line< span class = "c-punc" > .< / span > < span class = "c-fn" > match< / span > < span class = "c-punc" > (< / span > < span class = "c-re" > /^:::/< / span > < span class = "c-punc" > ),< / span >
parse< span class = "c-punc" > :< / span > < span class = "c-punc" > (< / span > lines< span class = "c-punc" > ,< / span > i< span class = "c-punc" > ,< / span > match< span class = "c-punc" > )< / span > < span class = "c-punc" > =>< / span > < span class = "c-punc" > ({< / span > token< span class = "c-punc" > :< / span > < span class = "c-punc" > {< / span > type< span class = "c-punc" > :< / span > < span class = "c-str" > 'alert'< / span > < span class = "c-punc" > },< / span > newIndex< span class = "c-punc" > :< / span > j < span class = "c-punc" > })< / span >
< span class = "c-punc" > });< / span > < / pre >
< / section >
<!-- 插件 -->
< section id = "plugins-convention" > < h2 > 插件约定< / h2 >
< pre > < span class = "c-kw" > const< / span > myPlugin < span class = "c-punc" > =< / span > < span class = "c-punc" > {< / span >
< pre > < span class = "c-kw" > const< / span > myPlugin < span class = "c-punc" > =< / span > < span class = "c-punc" > {< / span >
name< span class = "c-punc" > :< / span > < span class = "c-str" > 'myPlugin'< / span > < span class = "c-punc" > ,< / span >
name< span class = "c-punc" > :< / span > < span class = "c-str" > 'myPlugin'< / span > < span class = "c-punc" > ,< / span > description < span class = "c-punc" > : < / span > < span class = "c-str" > '我的插件' < / span > < span class = "c-punc" > , < / span >
description < span class = "c-punc" > : < / span > < span class = "c-str" > '我的自定义插件 '< / span > < span class = "c-punc" > ,< / span >
< span class = "c-fn" > install < / span > < span class = "c-punc" > ( < / span > editor < span class = "c-punc" > ) < / span > < span class = "c-punc" > { < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > on < / span > < span class = "c-punc" > ( < / span > < span class = "c-str" > 'change '< / span > < span class = "c-punc" > ,< / span > < span class = "c-kw" > this < / span > < span class = "c-punc" > . < / span > _onChange < span class = "c-punc" > ); < / span > < span class = "c-punc" > }, < / span >
< span class = "c-fn" > destroy< / span > < span class = "c-punc" > (< / span > editor< span class = "c-punc" > )< / span > < span class = "c-punc" > {< / span > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > off< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'change'< / span > < span class = "c-punc" > ,< / span > < span class = "c-kw" > this< / span > < span class = "c-punc" > .< / span > _onChange< span class = "c-punc" > );< / span > < span class = "c-punc" > },< / span >
< span class = "c-fn" > install< / span > < span class = "c-punc" > (< / span > editor< span class = "c-punc" > ,< / span > options< span class = "c-punc" > )< / span > < span class = "c-punc" > {< / span >
< span class = "c-com" > // this 指向插件对象本身< / span >
< span class = "c-kw" > this< / span > < span class = "c-punc" > .< / span > _timer < span class = "c-punc" > =< / span > < span class = "c-kw" > null< / span > < span class = "c-punc" > ;< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > on< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'change'< / span > < span class = "c-punc" > ,< / span > < span class = "c-kw" > this< / span > < span class = "c-punc" > .< / span > _onChange< span class = "c-punc" > );< / span >
< span class = "c-punc" > },< / span >
< span class = "c-fn" > destroy< / span > < span class = "c-punc" > (< / span > editor< span class = "c-punc" > )< / span > < span class = "c-punc" > {< / span >
< span class = "c-kw" > if< / span > < span class = "c-punc" > (< / span > < span class = "c-kw" > this< / span > < span class = "c-punc" > .< / span > _timer< span class = "c-punc" > )< / span > < span class = "c-fn" > clearTimeout< / span > < span class = "c-punc" > (< / span > < span class = "c-kw" > this< / span > < span class = "c-punc" > .< / span > _timer< span class = "c-punc" > );< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > off< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'change'< / span > < span class = "c-punc" > ,< / span > < span class = "c-kw" > this< / span > < span class = "c-punc" > .< / span > _onChange< span class = "c-punc" > );< / span >
< span class = "c-punc" > },< / span >
< span class = "c-punc" > };< / span > < / pre >
< span class = "c-punc" > };< / span > < / pre >
< / section >
< / section >
< section id = "preset-plugins" >
< section id = "preset-plugins" > < h3 > 预设插件 < / h3 >
< h3 > 预设插件 < / h3 >
< h4 > autoSave < / h4 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'autoSave'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > key< span class = "c-punc" > :< / span > < span class = "c-str" > 'draft-key'< / span > < span class = "c-punc" > ,< / span > delay< span class = "c-punc" > :< / span > < span class = "c-num" > 1000< / span > < span class = "c-punc" > });< / span >
< h4 > autoSave — 自动保存草稿 < / h4 >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > restoreDraft < / span > < span class = "c-punc" > (); < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > clearDraft < / span > < span class = "c-punc" > (); < / span > < / pre >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > use < / span > < span class = "c-punc" > ( < / span > presetPlugins < span class = "c-punc" > . < / span > autoSave < span class = "c-punc" > , < / span > < span class = "c-punc" > { < / span >
< h4 > exportTool < / h4 >
key < span class = "c-punc" > : < / span > < span class = "c-str " > 'me-draft-' < / span > < span class = "c-punc" > + < / span > editor < span class = "c-punc " > . < / span > id < span class = "c-punc" > , < / span > < span class = "c-com" > // localStorage key < / span >
< pre > editor < span class = "c-punc" > . < / span > < span class = "c-fn " > use < / span > < span class = "c-punc" > ( < / span > < span class = "c-str " > 'exportTool' < / span > < span class = "c-punc" > ); < / span >
delay < span class = "c-punc" > : < / span > < span class = "c-num " > 1000 < / span > < span class = "c-punc" > , < / span > < span class = "c-com " > // 防抖延迟(ms) < / span >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > exportMarkdown < / span > < span class = "c-punc" > ( < / span > < span class = "c-str " > 'doc.md' < / span > < span class = "c-punc" > ); < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > exportHTML < / span > < span class = "c-punc " > ( < / span > < span class = "c-str" > 'doc.html' < / span > < span class = "c-punc" > ); < / span > < / pre >
< span class = "c-punc" > }); < / span >
< h4 > searchReplace < / h4 >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > restoreDraft < / span > < span class = "c-punc" > (); < / span > < span class = "c-com " > // 恢复草稿 < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use < / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'searchReplace' < / span > < span class = "c-punc " > ); < / span >
editor < span class = "c-punc " > . < / span > < span class = "c-fn" > clearDraft < / span > < span class = "c-punc" > (); < / span > < span class = "c-com" > // 清除草稿 < / span >
< span class = "c-com " > // Ctrl+F 查找 / Ctrl+H 替换 < / span > < / pre >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > getDraftKey < / span > < span class = "c-punc" > (); < / span > < span class = "c-com" > // 获取存储 key < / span > < / pre >
< h4 > imagePaste < / h4 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'imagePaste'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 粘贴图片自动转 base64< / span > < / pre >
< h4 > exportTool — 导出文件 < / h4 >
< h4 > shortcutHelp < / h4 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > presetPlugins < span class = "c-punc" > . < / span > exportTool < span class = "c-punc " > ); < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'shortcutHelp' < / span > < span class = "c-punc" > ); < / span > < span class = "c-com " > // 按 ? 弹出快捷键面板 < / span > < / pre >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > exportMarkdown < / span > < span class = "c-punc" > ( < / span > < span class = "c-str" > 'my-doc.md' < / span > < span class = "c-punc" > ); < / span >
< h4 > fileSystem < / h4 >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > exportHTML < / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'my-doc.html '< / span > < span class = "c-punc" > , < / span > < span class = "c-punc" > { < / span >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use < / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'fileSystem '< / span > < span class = "c-punc" > ); < / span >
title < span class = "c-punc" > : < / span > < span class = "c-str" > '文档标题' < / span > < span class = "c-punc" > , < / span >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > openFile < / span > < span class = "c-punc" > (); < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > saveFile < / span > < span class = "c-punc" > (); < / span > editor < span class = "c-punc" > . < / span > < span class = "c-fn" > saveFileAs < / span > < span class = "c-punc" > (); < / span > < / pre >
css< span class = "c-punc" > :< / span > < span class = "c-str" > 'body { font-family: sans-serif; }'< / span > < span class = "c-punc" > ,< / span >
lang< span class = "c-punc" > :< / span > < span class = "c-str" > 'zh-CN'< / span > < span class = "c-punc" > ,< / span >
< span class = "c-punc" > });< / span > < / pre >
< h4 > searchReplace — 查找替换< / h4 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > presetPlugins< span class = "c-punc" > .< / span > searchReplace< span class = "c-punc" > );< / span >
< span class = "c-com" > // Ctrl+F → 查找 Ctrl+H → 替换< / span >
< span class = "c-com" > // Enter → 下一个 Shift+Enter → 上一个 Escape → 关闭< / span > < / pre >
< h4 > imagePaste — 粘贴图片转 base64< / h4 >
< pre > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > use< / span > < span class = "c-punc" > (< / span > presetPlugins< span class = "c-punc" > .< / span > imagePaste< span class = "c-punc" > );< / span >
< span class = "c-com" > // 在编辑区 Ctrl+V 粘贴剪贴板图片< / span >
< span class = "c-com" > // 自动插入 < / span > < / pre >
< / section >
< / section >
<!-- ======== 主题 ======== -->
<!-- 主题 -->
< section id = "themes" >
< section id = "themes" > < h2 > 主题系统 < / h2 >
< h2 > 主题系统 < / h2 >
< pre > < span class = "c-com" > // 实例级 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'dark'< / span > < span class = "c-punc" > );< / span > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getTheme< / span > < span class = "c-punc" > ();< / span >
< pre > < span class = "c-com" > // 全局切换主题 < / span >
< span class = "c-com" > // 注册自定义 < / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'light'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 亮色< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'dark'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 暗色< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'warm'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 暖色< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'auto'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // 自动(默认)< / span >
< span class = "c-com" > // 实例级主题(v0.1.5,每个编辑器独立)< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'dark'< / span > < span class = "c-punc" > );< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > getTheme< / span > < span class = "c-punc" > ();< / span > < span class = "c-com" > // 'dark'< / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > on< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'themeChange'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > ({< / span > theme < span class = "c-punc" > })< / span > < span class = "c-punc" > =>< / span > < span class = "c-punc" > {});< / span >
< span class = "c-com" > // 注册自定义主题(v0.1.5: 支持继承)< / span >
< span class = "c-kw" > import< / span > < span class = "c-punc" > {< / span > themeUtils < span class = "c-punc" > }< / span > < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-kw" > import< / span > < span class = "c-punc" > {< / span > themeUtils < span class = "c-punc" > }< / span > < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
themeUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > registerTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'ocean'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span >
themeUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > registerTheme< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'ocean'< / span > < span class = "c-punc" > ,< / span > < span class = "c-punc" > {< / span > extends < span class = "c-punc" > : < / span > < span class = "c-str" > 'dark' < / span > < span class = "c-punc" > , < / span > accent < span class = "c-punc" > : < / span > < span class = "c-str" > '#00ddff' < / span > < span class = "c-punc" > }); < / span >
extends< span class = "c-punc" > :< / span > < span class = "c-str" > 'dark'< / span > < span class = "c-punc" > ,< / span > < span class = "c-com" > // 继承 dark 主题< / span >
accent< span class = "c-punc" > :< / span > < span class = "c-str" > '#00ddff'< / span > < span class = "c-punc" > ,< / span >
< span class = "c-punc" > });< / span >
< span class = "c-com" > // 外部主题跟随(v0.1.5) < / span >
< span class = "c-com" > // 外部跟随 < / span >
themeUtils < span class = "c-punc" > .< / span > < span class = "c-fn" > followExternalTheme < / span > < span class = "c-punc" > (< / span >
editor < span class = "c-punc" > . < / span > < span class = "c-fn" > getThemeContext < / span > < span class = "c-punc" > () .< / span > < span class = "c-fn" > adopt < / span > < span class = "c-punc" > (); < / span > < span class = "c-com" > // 从父容器继承 < / span >
< span class = "c-punc" > {< / span > element< span class = "c-punc" > :< / span > document< span class = "c-punc" > .< / span > body< span class = "c-punc" > ,< / span > attr< span class = "c-punc" > :< / span > < span class = "c-str" > 'data-theme'< / span > < span class = "c-punc" > },< / span >
< span class = "c-punc" > (< / span > theme< span class = "c-punc" > )< / span > < span class = "c-punc" > =>< / span > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > theme< span class = "c-punc" > )< / span >
< span class = "c-punc" > );< / span >
< span class = "c-com" > // 从父容器继承主题< / span >
themeUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > adoptFromParent< / span > < span class = "c-punc" > (< / span > editor< span class = "c-punc" > .< / span > container< span class = "c-punc" > ,< / span >
< span class = "c-punc" > (< / span > theme< span class = "c-punc" > )< / span > < span class = "c-punc" > =>< / span > editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setTheme< / span > < span class = "c-punc" > (< / span > theme< span class = "c-punc" > )< / span >
< span class = "c-punc" > );< / span >
< span class = "c-com" > // CSS 变量导出< / span >
< span class = "c-com" > // CSS 变量导出< / span >
themeUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > exportCSSVars< / span > < span class = "c-punc" > ();< / span > < span class = "c-com " > // { '--md-bg': '#fff', ... } < / span >
themeUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > exportCSSVars< / span > < span class = "c-punc" > ();< / span > themeUtils < span class = "c-punc" > . < / span > < span class = "c-fn" > getCSSVariable < / span > < span class = "c-punc " > ( < / span > < span class = "c-str" > 'accent' < / span > < span class = "c-punc" > ); < / span > < / pre >
themeUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > getCSSVariable< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'accent'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // '#3b82f6'< / span > < / pre >
< p > CSS 变量限定在 < code > .me-wrapper< / code > 元素上,不污染全局。支持 < code > @media print< / code > 打印样式。v0.1.5 新增实例级主题隔离、外部跟随、主题继承。< / p >
< / section >
< / section >
<!-- ======== 国际化 ======== -->
<!-- 国际化 -->
< section id = "i18n" >
< section id = "i18n" > < h2 > 国际化 < / h2 >
< h2 > 国际化 < / h2 >
< pre > < span class = "c-com" > // 切换 < / span >
editor< span class = "c-punc" > .< / span > < span class = "c-fn" > setLocale< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'en-US'< / span > < span class = "c-punc" > );< / span > MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setLocale< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'zh-CN'< / span > < span class = "c-punc" > );< / span >
< pre > < span class = "c-com" > // 切换语言 < / span >
< span class = "c-com" > // 添加翻译 < / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setLocale< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'en-US'< / span > < span class = "c-punc" > );< / span >
MeEditor< span class = "c-punc" > .< / span > < span class = "c-fn" > setLocale< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'zh-CN'< / span > < span class = "c-punc" > );< / span >
< span class = "c-com" > // 翻译函数< / span >
< span class = "c-kw" > import< / span > < span class = "c-punc" > {< / span > i18nUtils < span class = "c-punc" > }< / span > < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
< span class = "c-kw" > import< / span > < span class = "c-punc" > {< / span > i18nUtils < span class = "c-punc" > }< / span > < span class = "c-kw" > from< / span > < span class = "c-str" > '@metona-team/metona-editor'< / span > < span class = "c-punc" > ;< / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > t < / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'bold '< / span > < span class = "c-punc" > ); < / span > < span class = "c-com " > // = > '粗体'( zh-CN) < / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > addTranslations < / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'ja '< / span > < span class = "c-punc" > , < / span > < span class = "c-punc" > { < / span > bold < span class = "c-punc " > : < / span > < span class = "c-str" > '太字' < / span > < span class = "c-punc" > }); < / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > t< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > 'bold'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // => 'Bold'( en-US) < / span >
< span class = "c-com" > // 添加语言 < / span >
< span class = "c-com" > // 远程加载 < / span >
i18nUtils < span class = "c-punc" > . < / span > < span class = "c-fn" > addTranslations < / span > < span class = "c-punc" > ( < / span > < span class = "c-str" > 'ja' < / span > < span class = "c-punc" > , < / span > < span class = "c-punc " > { < / span > bold < span class = "c-punc" > : < / span > < span class = "c-str" > '太字' < / span > < span class = "c-punc" > , < / span > italic < span class = "c-punc" > : < / span > < span class = "c-str" > '斜体 '< / span > < span class = "c-punc" > } );< / span >
< span class = "c-kw" > await < / span > i18nUtils < span class = "c-punc" > . < / span > < span class = "c-fn " > loadRemote < / span > < span class = "c-punc" > ( < / span > < span class = "c-str" > '/locales/ja.json' < / span > < span class = "c-punc" > , < / span > < span class = "c-str" > 'ja '< / span > < span class = "c-punc" > );< / span >
< span class = "c-com" > // 格式化< / span >
< span class = "c-com" > // 格式化< / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > formatNumber< / span > < span class = "c-punc" > (< / span > < span class = "c-num" > 1234567< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // = > '1,234,567' < / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > formatNumber< / span > < span class = "c-punc" > (< / span > < span class = "c-num" > 1234567< / span > < span class = "c-punc" > );< / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > formatCurrency < / span > < span class = "c-punc" > (< / span > < span class = "c-num" > 99.99 < / span > < span class = "c-punc" > , < / span > < span class = "c-str" > 'USD' < / span > < span class = "c-punc" > ); < / span > < span class = "c-com" > // = > '$99.99' < / span >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > formatDate < / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '2024-01-15' < / span > < span class = "c-punc" > ); < / span > < / pre >
i18nUtils< span class = "c-punc" > .< / span > < span class = "c-fn" > formatDate< / span > < span class = "c-punc" > (< / span > < span class = "c-str" > '2024-01-15'< / span > < span class = "c-punc" > );< / span > < span class = "c-com" > // => '1/15/2024'< / span > < / pre >
< / section >
< / section >
< / main >
< / main >
@@ -619,24 +433,18 @@ i18nUtils<span class="c-punc">.</span><span class="c-fn">formatDate</span><span
< footer >
< footer >
< div class = "container" >
< div class = "container" >
MetonaEditor v0.1.10 · < a href = "https://git.metona.cn/MetonaTeam/MetonaEditor" target = "_blank" rel = "noopener" > 源码仓库< / a > · MIT License
MetonaEditor v0.2.4 · TypeScript · < a href = "https://git.metona.cn/MetonaTeam/MetonaEditor" target = "_blank" rel = "noopener" > 源码仓库< / a > · MIT License
< / div >
< / div >
< / footer >
< / footer >
< script >
< script >
// 高亮当前 section 的侧边栏链接
const sections = document . querySelectorAll ( 'section[id]' ) ;
const sections = document . querySelectorAll ( 'section[id] ' ) ;
const links = document . querySelectorAll ( '.sidebar a ' ) ;
const links = document . querySelectorAll ( '.sidebar a' ) ;
window . addEventListener ( 'scroll' , ( ) => {
window . addEventListener ( 'scroll' , ( ) => {
let current = '' ;
let current = '' ;
sections . forEach ( s => {
sections . forEach ( s => { if ( window . scrollY >= s . offsetTop - 100 ) current = s . id ; } ) ;
if ( window . scrollY >= s . offsetTop - 100 ) current = s . id ;
links . forEach ( a => { a . classList . toggle ( 'active' , a . getAttribute ( 'href' ) === '#' + current ) ; } ) ;
} ) ;
} ) ;
links . forEach ( a => {
a . classList . toggle ( 'active' , a . getAttribute ( 'href' ) === '#' + current ) ;
} ) ;
} ) ;
< / script >
< / script >
< / body >
< / body >
< / html >
< / html >