CLJS
basic-lein-cljs.core
cljs.analyzer
cljs.compiler
CLJS
cljs.core
CLJS
cljs.core.async
CLJS
cljs.core.async.impl.buffers
CLJS
cljs.core.async.impl.channels
CLJS
cljs.core.async.impl.dispatch
CLJS
cljs.core.async.impl.ioc-helpers
CLJS
cljs.core.async.impl.protocols
CLJS
cljs.core.async.impl.timers
cljs.env
cljs.externs
CLJS
cljs.js
cljs.js-deps
CLJS
cljs.pprint
CLJS
cljs.reader
CLJS
cljs.repl
cljs.source-map
CLJS
cljs.source-map
cljs.source-map.base64
CLJS
cljs.source-map.base64
cljs.source-map.base64-vlq
CLJS
cljs.source-map.base64-vlq
CLJS
cljs.spec.alpha
CLJS
cljs.spec.gen.alpha
cljs.tagged-literals
CLJS
cljs.tools.reader
CLJS
cljs.tools.reader.edn
CLJS
cljs.tools.reader.impl.commons
CLJS
cljs.tools.reader.impl.errors
CLJS
cljs.tools.reader.impl.inspect
CLJS
cljs.tools.reader.impl.utils
CLJS
cljs.tools.reader.reader-types
cljs.util
clojure.core
clojure.core.async
clojure.core.async.impl.buffers
clojure.core.async.impl.channels
clojure.core.async.impl.concurrent
clojure.core.async.impl.dispatch
clojure.core.async.impl.exec.threadpool
clojure.core.async.impl.ioc-macros
clojure.core.async.impl.mutex
clojure.core.async.impl.protocols
clojure.core.async.impl.timers
clojure.core.cache
clojure.core.memoize
clojure.core.protocols
clojure.core.server
clojure.data.json
clojure.data.priority-map
clojure.edn
clojure.instant
clojure.java.io
clojure.main
clojure.pprint
clojure.reflect
clojure.repl
clojure.set
CLJS
clojure.set
clojure.spec.alpha
clojure.spec.gen.alpha
clojure.string
CLJS
clojure.string
clojure.tools.analyzer
clojure.tools.analyzer.ast
clojure.tools.analyzer.env
clojure.tools.analyzer.jvm
clojure.tools.analyzer.jvm.utils
clojure.tools.analyzer.passes
clojure.tools.analyzer.passes.add-binding-atom
clojure.tools.analyzer.passes.cleanup
clojure.tools.analyzer.passes.constant-lifter
clojure.tools.analyzer.passes.elide-meta
clojure.tools.analyzer.passes.emit-form
clojure.tools.analyzer.passes.jvm.analyze-host-expr
clojure.tools.analyzer.passes.jvm.annotate-host-info
clojure.tools.analyzer.passes.jvm.annotate-loops
clojure.tools.analyzer.passes.jvm.annotate-tag
clojure.tools.analyzer.passes.jvm.box
clojure.tools.analyzer.passes.jvm.classify-invoke
clojure.tools.analyzer.passes.jvm.constant-lifter
clojure.tools.analyzer.passes.jvm.emit-form
clojure.tools.analyzer.passes.jvm.fix-case-test
clojure.tools.analyzer.passes.jvm.infer-tag
clojure.tools.analyzer.passes.jvm.validate
clojure.tools.analyzer.passes.jvm.validate-loop-locals
clojure.tools.analyzer.passes.jvm.validate-recur
clojure.tools.analyzer.passes.jvm.warn-on-reflection
clojure.tools.analyzer.passes.source-info
clojure.tools.analyzer.passes.trim
clojure.tools.analyzer.passes.uniquify
clojure.tools.analyzer.passes.warn-earmuff
clojure.tools.analyzer.utils
clojure.tools.cli
clojure.tools.namespace.dependency
clojure.tools.namespace.file
clojure.tools.namespace.find
clojure.tools.namespace.parse
clojure.tools.namespace.track
clojure.tools.reader
clojure.tools.reader.default-data-readers
clojure.tools.reader.impl.commons
clojure.tools.reader.impl.errors
clojure.tools.reader.impl.inspect
clojure.tools.reader.impl.utils
clojure.tools.reader.reader-types
clojure.walk
CLJS
clojure.walk
dynadoc.aliases
dynadoc.common
dynadoc.core
CLJS
dynadoc.core
dynadoc.example
CLJS
dynadoc.state
dynadoc.static
dynadoc.utils
dynadoc.watch
eval-soup.clojail
eval-soup.core
CLJS
eval-soup.core
CLJS
figwheel.client
CLJS
figwheel.client.file-reloading
CLJS
figwheel.client.heads-up
CLJS
figwheel.client.socket
CLJS
figwheel.client.utils
hawk.core
hawk.watcher
html-soup.core
ns-tracker.core
ns-tracker.dependency
ns-tracker.nsdeps
ns-tracker.parse
CLJS
oakcljs.tools.reader
CLJS
oakcljs.tools.reader.impl.commons
CLJS
oakcljs.tools.reader.impl.errors
CLJS
oakcljs.tools.reader.impl.inspect
CLJS
oakcljs.tools.reader.impl.utils
CLJS
oakcljs.tools.reader.reader-types
oakclojure.tools.reader
oakclojure.tools.reader.default-data-readers
oakclojure.tools.reader.impl.commons
oakclojure.tools.reader.impl.errors
oakclojure.tools.reader.impl.inspect
oakclojure.tools.reader.impl.utils
oakclojure.tools.reader.reader-types
org.httpkit.server
CLJS
paren-soup.console
CLJS
paren-soup.core
CLJS
paren-soup.dom
CLJS
paren-soup.instarepl
CLJS
reagent.core
CLJS
reagent.debug
CLJS
reagent.dom
CLJS
reagent.impl.batching
CLJS
reagent.impl.component
CLJS
reagent.impl.template
CLJS
reagent.impl.util
CLJS
reagent.ratom
ring.middleware.content-type
ring.middleware.file
ring.middleware.head
ring.middleware.keyword-params
ring.middleware.params
ring.middleware.reload
ring.middleware.resource
ring.util.codec
ring.util.io
ring.util.mime-type
ring.util.parsing
ring.util.request
ring.util.response
ring.util.time
rum.core
CLJS
rum.core
rum.cursor
rum.derived-atom
rum.server-render
rum.util
sablono.compiler
CLJS
sablono.core
sablono.normalize
sablono.util
tag-soup.core

(create-editor paren-soup content events-chan {:keys [history-limit append-limit compiler-fn console-callback disable-clj? edit-history], :or {history-limit 100, append-limit 5000}})

Source

(defn create-editor [paren-soup content events-chan {:keys [history-limit append-limit compiler-fn console-callback disable-clj? edit-history], :or {history-limit 100, append-limit 5000}}] (let [clj? (not disable-clj?) editor? (not console-callback) compiler-fn (or compiler-fn (ir/create-compiler-fn)) edit-history (doto (or edit-history (mwm/create-edit-history)) (swap! assoc :limit history-limit)) refresh-instarepl-with-delay! (debounce refresh-instarepl! 300) console-history (console/create-console-history) last-highlight-elem (atom nil) allow-tab? (atom false)] (when-not editor? (set-validator! edit-history (fn [{:keys [current-state states]}] (if-let [state (get states current-state)] (-> state :cursor-position first (>= (console/get-console-start console-history))) true)))) (reify Editor (undo! [this] (some->> edit-history mwm/undo! (refresh! this))) (redo! [this] (some->> edit-history mwm/redo! (refresh! this))) (can-undo? [this] (mwm/can-undo? edit-history)) (can-redo? [this] (mwm/can-redo? edit-history)) (update-cursor-position! [this position] (try (mwm/update-cursor-position! edit-history position) (catch js/Error _ (when (apply = position) (let [start (console/get-console-start console-history)] (dom/set-cursor-position! content [start start]) (mwm/update-cursor-position! edit-history [start start]))))) (update-highlight! content last-highlight-elem)) (reset-edit-history! [this start] (console/update-console-start! console-history start) (dom/set-cursor-position! content [start start]) (let [new-edit-history (mwm/create-edit-history) state {:cursor-position [start start], :text (.-textContent content)}] (update-edit-history! new-edit-history state) (reset! edit-history @new-edit-history))) (append-text! [this text] (let [node (.createTextNode js/document text) _ (.appendChild content node) all-text (.-textContent content) char-count (max 0 (- (count all-text) append-limit)) new-all-text (subs all-text char-count) char-count (if (.endsWith new-all-text "\n") (dec (count new-all-text)) (count new-all-text))] (when (not= all-text new-all-text) (set! (.-textContent content) new-all-text)) (reset-edit-history! this char-count))) (enter! [this] (if editor? (.execCommand js/document "insertHTML" false "\n") (let [text (trimr (.-textContent content)) post-text (subs text (console/get-console-start console-history))] (reset-edit-history! this (count text)) (console/update-console-history! console-history post-text) (console-callback post-text)))) (up! [this] (when-not editor? (let [text (.-textContent content) pre-text (subs text 0 (console/get-console-start console-history)) line (or (console/up! console-history) "") state {:cursor-position (dom/get-cursor-position content false), :text (str pre-text line \newline)}] (->> state (update-edit-history! edit-history) (refresh! this))))) (down! [this] (when-not editor? (let [text (.-textContent content) pre-text (subs text 0 (console/get-console-start console-history)) line (or (console/down! console-history) "") state {:cursor-position (dom/get-cursor-position content false), :text (str pre-text line \newline)}] (->> state (update-edit-history! edit-history) (refresh! this))))) (tab! [this] (when editor? (reset! allow-tab? true))) (refresh! [this state] (post-refresh-content! content events-chan (if editor? (refresh-content! content state) (refresh-console-content! content state (console/get-console-start console-history) clj?))) (when editor? (some-> (.querySelector paren-soup ".numbers") (refresh-numbers! (count (re-seq #"\n" (:text state))))) (when clj? (when-let [elem (.querySelector paren-soup ".instarepl")] (when-not (-> elem .-style .-display (= "none")) (refresh-instarepl-with-delay! elem content compiler-fn))))) (update-highlight! content last-highlight-elem)) (edit-and-refresh! [this state] (->> state (add-newline) (add-parinfer clj? (console/get-console-start console-history)) (update-edit-history! edit-history) (refresh! this))) (initialize! [this] (when editor? (->> (init-state content false false) (edit-and-refresh! this)))) (refresh-after-key-event! [this event] (let [tab? (key-name? event :tab) state (init-state content editor? tab?)] (when-not (and tab? (not @allow-tab?)) (edit-and-refresh! this (case (key-code event) 13 (assoc state :indent-type :return) 9 (assoc state :indent-type (if (.-shiftKey event) :back :forward)) (assoc state :indent-type :normal)))) (when tab? (reset! allow-tab? false)))) (refresh-after-cut-paste! [this] (let [html (.-innerHTML content) insert-newlines? (-> html (.indexOf "</tr>") (> 0)) crop? (and editor? (not insert-newlines?))] (when insert-newlines? (set! (.-innerHTML content) (replace html "</tr>" \newline))) (edit-and-refresh! this (assoc (init-state content crop? false) :indent-type :normal)))) (eval! [this form callback] (compiler-fn [form] (fn* [p1__18520#] (callback (first p1__18520#))))))))