scittle/codemirror.html
Michiel Borkent 8ece5bf970 update build
2022-10-10 13:59:42 +02:00

73 lines
3.3 KiB
HTML

<html>
<head>
<script async src="https://ga.jspm.io/npm:es-module-shims@1.6.1/dist/es-module-shims.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.3.10/dist/scittle.js"></script>
<script>scittle.core.disable_auto_eval(); console.log('yolo!')</script>
<script src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.3.10/dist/scittle.reagent.js"> </script>
<script type="importmap">
{
"imports": {
"codemirror": "https://cdn.jsdelivr.net/npm/codemirror/dist/index.js",
"@codemirror/commands": "https://cdn.jsdelivr.net/npm/@codemirror/commands/dist/index.js",
"@codemirror/search": "https://cdn.jsdelivr.net/npm/@codemirror/search/dist/index.js",
"@codemirror/autocomplete": "https://cdn.jsdelivr.net/npm/@codemirror/autocomplete/dist/index.js",
"@codemirror/lint": "https://cdn.jsdelivr.net/npm/@codemirror/lint/dist/index.js",
"crelt": "https://cdn.jsdelivr.net/npm/crelt/index.es.js",
"@nextjournal/lang-clojure": "https://cdn.jsdelivr.net/npm/@nextjournal/lang-clojure/dist/index.js",
"@nextjournal/lezer-clojure": "https://cdn.jsdelivr.net/npm/@nextjournal/lezer-clojure/dist/index.es.js",
"@lezer/highlight": "https://cdn.jsdelivr.net/npm/@lezer/highlight/dist/index.js",
"@lezer/lr": "https://cdn.jsdelivr.net/npm/@lezer/lr/dist/index.js",
"@lezer/common": "https://cdn.jsdelivr.net/npm/@lezer/common/dist/index.js",
"@codemirror/language": "https://cdn.jsdelivr.net/npm/@codemirror/language/dist/index.js",
"@codemirror/state": "https://cdn.jsdelivr.net/npm/@codemirror/state/dist/index.js",
"@codemirror/view": "https://cdn.jsdelivr.net/npm/@codemirror/view/dist/index.js",
"style-mod": "https://cdn.jsdelivr.net/npm/style-mod/src/style-mod.js",
"w3c-keyname": "https://cdn.jsdelivr.net/npm/w3c-keyname/index.es.js"
}
}
</script>
<script type="module" type="application/javascript">
globalThis.cm = await import('codemirror');
globalThis.lc = await import('@nextjournal/lang-clojure');
scittle.core.eval_script_tags();
</script>
<script type="application/x-scittle">
(require (quote [clojure.string :as str]))
(def cm
(let [doc (str/trim "
(require '[reagent.core :as r]
'[reagent.dom :as rdom])
(defonce state (r/atom {:clicks 0}))
(defn my-component []
[:div
[:p \"Clicks: \" (:clicks @state)]
[:p [:button {:on-click #(swap! state update :clicks inc)}
\"Click me!\"]]])
(rdom/render [my-component] (.getElementById js/document \"reagent\"))
")]
(js/cm.EditorView. #js {:doc doc
:extensions #js [js/cm.basicSetup, (js/lc.clojure)]
:parent (js/document.querySelector "#app")
})))
(set! (.-cm_instance js/globalThis) cm)
(defn eval-me []
(load-string (-> cm .-state .-doc .toString)))
(set! (.-eval_me js/globalThis) eval-me)
(eval-me)
</script>
</head>
<body>
<div id="app">
</div>
<div id="reagent">
</div>
<button onClick="eval_me()">Eval</button>
</body>
</html>