refactor(editor): use codemirror to guess code mode

pull/3536/head
Andelf 2021-12-18 20:42:52 +08:00 committed by Tienson Qin
parent db6e5c9333
commit 9eb7c6f820
1 changed files with 8 additions and 21 deletions

View File

@ -184,22 +184,11 @@
(defn- text->cm-mode (defn- text->cm-mode
[text] [text]
(when text (when text
(let [mode (string/lower-case text)] (let [mode (string/lower-case text)
(case mode find-mode-by-name (gobj/get cm "findModeByName")
"html" "text/html" cm-mode (find-mode-by-name mode)]
"c" "text/x-csrc" (if cm-mode
"c++" "text/x-c++src" (.-mime cm-mode)
"java" "text/x-java"
"c#" "text/x-csharp"
"csharp" "text/x-csharp"
"objective-c" "text/x-objectivec"
"scala" "text/x-scala"
"js" "text/javascript"
"typescript" "text/typescript"
"ts" "text/typescript"
"tsx" "text/typescript-jsx"
"scss" "text/x-scss"
"less" "text/x-less"
mode)))) mode))))
(defn render! (defn render!
@ -212,16 +201,14 @@
(get-in config [:block :block/uuid]))) (get-in config [:block :block/uuid])))
_ (state/set-state! :editor/code-mode? false) _ (state/set-state! :editor/code-mode? false)
original-mode (get attr :data-lang) original-mode (get attr :data-lang)
clojure? (contains? #{"clojure" "clj" "text/x-clojure" "cljs" "cljc"} original-mode) mode (text->cm-mode original-mode)
mode (if clojure? "clojure" (text->cm-mode original-mode)) lisp-like? (contains? #{"scheme" "lisp" "clojure" "edn"} mode)
lisp? (or clojure?
(contains? #{"scheme" "racket" "lisp"} mode))
textarea (gdom/getElement id) textarea (gdom/getElement id)
editor (when textarea editor (when textarea
(from-textarea textarea (from-textarea textarea
#js {:mode mode #js {:mode mode
:theme (str "solarized " theme) :theme (str "solarized " theme)
:matchBrackets lisp? :matchBrackets lisp-like?
:autoCloseBrackets true :autoCloseBrackets true
:lineNumbers true :lineNumbers true
:styleActiveLine true :styleActiveLine true