Make
<textarea/>
s a bit like<codearea/>
.
yarn add @mvc-works/codearea
Put the textareaEditor.js
file in the <script>
tag of your page.
Suppose there's tag <textarea id='area'>
here, use this in your .js
file:
import { codearea } from "@mvc-works/codearea"
codearea(textareaElement)
# remove events
teardownCodearea(textareaElement)
Try here: http://repo.mvc-works.org/codearea/
influenced shortcuts:
enter
tab
esc
backspace
quote
brackets
shift enter
shift tab
ctrl l
ctrl u
ctrl k
ctrl enter
ctrl shift enter
ctrl shift k
ctrl shift d
ctrl shift up
ctrl shift down
It can be used in Respo Effects:
(defeffect
effect-codearea
()
(action el)
(when (= action :mount) (let [target (.querySelector el ".codearea")] (codearea target))))
Notice: a bug that codearea does not emit enough
input
events.
上面JS
的目标是给<textarea>
标签增加基本的编程功能支持,
主要是一些快捷键, 模仿Sublime Text
的功能, 还有自动补全括号和缩进,
具体可以到链接尝试, 在Chrome
中运行测试运行正常,
主要是__获取光标位置的API
__和__绑定键盘事件的API
__有差别.
大致思路是用wrap_text
函数将文本框内容包装成按列处理的对象,
之后通过事件触发map_keys
选取对应的key_*
函数处理对象的内容,
最后write_text
将对象转化回到文本写入.
性能能再优化下, 不清楚对于长文本是否会有延迟, 目前还可以,
departed_files
是前期的代码, 有些历史文档, 但不再被维护.
MIT