mirror of
https://github.com/logseq/logseq.git
synced 2026-06-01 19:01:22 +00:00
feat: add more CodeMirror modes
Closed #929. Also, fixed an issue that a following click will close the editing block.
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
["codemirror/addon/edit/closebrackets"]
|
||||
["codemirror/mode/clojure/clojure"]
|
||||
["codemirror/mode/javascript/javascript"]
|
||||
["codemirror/mode/clike/clike"]
|
||||
["codemirror/mode/vue/vue"]
|
||||
["codemirror/mode/commonlisp/commonlisp"]
|
||||
["codemirror/mode/coffeescript/coffeescript"]
|
||||
["codemirror/mode/css/css"]
|
||||
@@ -79,13 +81,28 @@
|
||||
:else
|
||||
nil)))
|
||||
|
||||
(defn- text->cm-mode
|
||||
[text]
|
||||
(when text
|
||||
(let [mode (string/lower-case text)]
|
||||
(case mode
|
||||
"html" "text/html"
|
||||
"c" "text/x-csrc"
|
||||
"c++" "text/x-c++src"
|
||||
"java" "text/x-java"
|
||||
"c#" "text/x-csharp"
|
||||
"csharp" "text/x-csharp"
|
||||
"objective-c" "text/x-objectivec"
|
||||
"scala" "text/x-scala"
|
||||
mode))))
|
||||
|
||||
(defn render!
|
||||
[state]
|
||||
(let [[config id attr code pos_meta] (:rum/args state)
|
||||
original-mode (get attr :data-lang)
|
||||
mode (or original-mode "javascript")
|
||||
clojure? (contains? #{"clojure" "clj" "text/x-clojure" "cljs" "cljc"} mode)
|
||||
mode (if clojure? "clojure" mode)
|
||||
mode (if clojure? "clojure" (text->cm-mode mode))
|
||||
lisp? (or clojure?
|
||||
(contains? #{"scheme" "racket" "lisp"} mode))
|
||||
textarea (gdom/getElement id)
|
||||
@@ -147,7 +164,7 @@
|
||||
[state config id attr code pos_meta]
|
||||
[:div.extensions__code
|
||||
[:div.extensions__code-lang
|
||||
(let [mode (get attr :data-lang "javascript")]
|
||||
(let [mode (string/lower-case (get attr :data-lang "javascript"))]
|
||||
(if (= mode "text/x-clojure")
|
||||
"clojure"
|
||||
mode))]
|
||||
|
||||
@@ -1,19 +1,22 @@
|
||||
(ns frontend.handler.editor.keyboards
|
||||
(:require [frontend.state :as state]
|
||||
[frontend.util :as util]
|
||||
[frontend.handler.editor :as editor-handler]
|
||||
[dommy.core :as d]
|
||||
[goog.dom :as gdom]
|
||||
[goog.object :as gobj]
|
||||
[frontend.mixins :as mixins]))
|
||||
|
||||
;; TODO: don't depend on handler.editor
|
||||
|
||||
(defn esc-save! [state]
|
||||
(let [id (last (:rum/args state))]
|
||||
(let [id (nth (:rum/args state) 1)]
|
||||
(mixins/hide-when-esc-or-outside
|
||||
state
|
||||
:on-hide
|
||||
(fn [state e event]
|
||||
(let [target (.-target e)]
|
||||
(js/console.dir target)
|
||||
(if (d/has-class? target "bottom-action") ;; FIXME: not particular case
|
||||
(.preventDefault e)
|
||||
(let [{:keys [on-hide format value block id repo dummy?]} (editor-handler/get-state state)]
|
||||
@@ -23,7 +26,7 @@
|
||||
(or (= event :esc)
|
||||
(= event :visibilitychange)
|
||||
(and (= event :click)
|
||||
(not (editor-handler/in-auto-complete? (gdom/getElement id)))))
|
||||
(not (editor-handler/in-auto-complete? (gobj/get target "id")))))
|
||||
(state/clear-edit!))))))
|
||||
:node (gdom/getElement id)
|
||||
;; :visibilitychange? true
|
||||
|
||||
Reference in New Issue
Block a user