Compare commits

..

No commits in common. "main" and "v0.7.23" have entirely different histories.

38 changed files with 68 additions and 287 deletions

2
.gitignore vendored
View file

@ -17,5 +17,3 @@ gh-pages/
/.clj-kondo/.cache /.clj-kondo/.cache
/.clj-kondo/rewrite-clj /.clj-kondo/rewrite-clj
/plugins/demo/resources/public/js/ /plugins/demo/resources/public/js/
.portal
resources/public/test/scratch.html

View file

@ -5,37 +5,15 @@
<!-- To create a new NPM release: --> <!-- To create a new NPM release: -->
<!-- - Run `bb npm-publish`: this will compile, bump patch version, create tag and and push to npm and Github --> <!-- - Run `bb npm-publish`: this will compile, bump patch version, create tag and and push to npm and Github -->
<!-- - `bb replace-version 0.6.22 0.7.23` --> <!-- - `bb replace-version 0.6.21 0.6.22` -->
<!-- - Create Github release with updated links from `doc/links.md` --> <!-- - Create Github release with updated links from `doc/links.md` -->
<!-- - `bb gh-pages` --> <!-- - `bb gh-pages` -->
- [#114](https://github.com/babashka/scittle/issues/114): Enable source maps ([@jeroenvandijk](https://github.com/jeroenvandijk))
- [#140](https://github.com/babashka/scittle/issues/140): Enable customizing the nrepl websocket port ([@PEZ](https://github.com/PEZ))
## v0.7.28 (2025-09-13)
- [#137](https://github.com/babashka/scittle/issues/137): fix JS interop with reserved JS keyword (incorrectly munged) by bumping SCI
## v0.7.27 (2025-08-21)
- [#95](https://github.com/babashka/scittle/issues/121): support string requires
of `globalThis` js deps ([@chr15m](https://github.com/chr15m)). See
[docs](https://github.com/babashka/scittle/blob/main/doc/js-libraries.md).
- Potentially breaking: `(.-foo-bar {})` now behaves as `{}.foo_bar`, i.e. the property or method name is munged.
## v0.7.26 (2025-08-20)
- [#121](https://github.com/babashka/scittle/issues/121): add `cjohansen/dataspex` plugin ([@jeroenvandijk](https://github.com/jeroenvandijk))
- [#118](https://github.com/babashka/scittle/issues/118): add `goog.string/format` ([@jeroenvandijk](https://github.com/jeroenvandijk))
- Support alternative `(set! #js {} -a 1)` CLJS syntax (by bumping SCI)
- Add source maps to distribution
- Add dev versions of all modules in the `dev` folder of the distribution + a `dev/scitte.cljs-devtools.js` module
## v0.7.23 (2025-06-18) ## v0.7.23 (2025-06-18)
- [#107](https://github.com/babashka/scittle/issues/107): add `replicant` plugin ([@jeroenvandijk](https://github.com/jeroenvandijk)) - [#107](https://github.com/babashka/scittle/issues/107): add `replicant` plugin
- [#102](https://github.com/babashka/scittle/issues/102): add `applied-science/js-interop` plugin ([@chr15m](https://github.com/chr15m)) - [#102](https://github.com/babashka/scittle/issues/102): add `applied-science/js-interop` plugin
- [#105](https://github.com/babashka/scittle/issues/105): add `goog.string/htmlEscape` ([@ikappaki](https://github.com/ikappaki) ) - [#105](https://github.com/babashka/scittle/issues/105): add `goog.string/htmlEscape`
- [#113](https://github.com/babashka/scittle/issues/113): add `unchecked-set` and `unchecked-get` - [#113](https://github.com/babashka/scittle/issues/113): add `unchecked-set` and `unchecked-get`
## v0.6.22 (2024-12-19) ## v0.6.22 (2024-12-19)

View file

@ -29,10 +29,6 @@ babashka or Clojure JVM):
See [doc/nrepl](doc/nrepl). See [doc/nrepl](doc/nrepl).
### Service worker
See [doc/serviceworker.md](doc/serviceworker.md).
## Tasks ## Tasks
Run `bb tasks` to see all available tasks: Run `bb tasks` to see all available tasks:
@ -50,7 +46,6 @@ release Updates Github pages with new release build.
## Credits ## Credits
Idea by Arne Brasseur a.k.a [plexus](https://github.com/plexus). Idea by Arne Brasseur a.k.a [plexus](https://github.com/plexus).
Name by Alessandra Sierra (the name occurs first in [this](https://stuartsierra.com/2019/12/21/clojure-start-time-in-2019/) blog post).
## License ## License

8
bb.edn
View file

@ -44,11 +44,9 @@
:depends [prod] :depends [prod]
:task (do :task (do
(fs/delete-tree "dist") (fs/delete-tree "dist")
(fs/create-dirs "dist/dev") (fs/create-dirs "dist")
(run! (fn [f] (fs/copy f "dist" {:replace-existing true})) (run! (fn [f] (fs/copy f "dist"))
(fs/glob "resources/public/js" "*.{js,js.map}")) (fs/glob "resources/public/js" "*.js")))}
(run! (fn [f] (fs/copy f "dist/dev" {:replace-existing true}))
(fs/glob "resources/public/js/dev" "*.{js,js.map}")))}
bump-version {:doc "Bumps package.json and pushes new git tag" bump-version {:doc "Bumps package.json and pushes new git tag"
:task (do (shell "npm version patch") :task (do (shell "npm version patch")

View file

@ -69,15 +69,4 @@
* :action - compile action, defaults to release, but may also be compile or watch" * :action - compile action, defaults to release, but may also be compile or watch"
[{:keys [action [{:keys [action
args] :or {action "release"}}] args] :or {action "release"}}]
(build* (format "-M -m shadow.cljs.devtools.cli --force-spawn %s main %s" action (str/join " " args))) (build* (format "-M -m shadow.cljs.devtools.cli --force-spawn %s main %s" action (str/join " " args))))
(when (= "release" action)
(println "Also building dev release build")
(build* (format "-M -m shadow.cljs.devtools.cli --force-spawn %s main %s %s"
action
"--config-merge '{:compiler-options {:optimizations :simple
:pretty-print true
:pseudo-names true}
:output-dir \"resources/public/js/dev\"
:modules {:scittle.cljs-devtools {:entries [scittle.cljs-devtools]
:depends-on #{:scittle}}}}'"
(str/join " " args)))))

View file

@ -1,9 +1,9 @@
{:paths ["src" "resources"] {:paths ["src" "resources"]
:deps :deps
{org.clojure/clojure {:mvn/version "1.12.2"} {org.clojure/clojure {:mvn/version "1.11.1"}
thheller/shadow-cljs {:mvn/version "3.1.8"} thheller/shadow-cljs {:mvn/version "2.20.15"}
org.babashka/sci {:git/url "https://github.com/babashka/sci" org.babashka/sci {:git/url "https://github.com/babashka/sci"
:git/sha "6758ba028da559c536a06becbbedade7b0ba6448"} :git/sha "87fa2d2648ef809e8c8c87279c51961dca41ed4d"}
#_{:local/root "../babashka/sci"} #_{:local/root "../babashka/sci"}
reagent/reagent {:mvn/version "1.1.1"} reagent/reagent {:mvn/version "1.1.1"}
no.cjohansen/replicant {:mvn/version "2025.03.27"} no.cjohansen/replicant {:mvn/version "2025.03.27"}
@ -21,9 +21,7 @@
io.github.babashka/sci.configs io.github.babashka/sci.configs
#_{:local/root "/Users/borkdude/dev/sci.configs"} #_{:local/root "/Users/borkdude/dev/sci.configs"}
{:git/url "https://github.com/babashka/sci.configs" {:git/url "https://github.com/babashka/sci.configs"
:git/sha "aa84a1b4f1fe45735e5b748769309fc842f737c1" :git/sha "1ade6f94a2902211bed1f876472571da0c5e7278"}}
:exclusions [org.babashka/sci]}
binaryage/devtools {:mvn/version "1.0.7"}}
:aliases :aliases
{:dev {:dev
{:extra-paths ["dev"] {:extra-paths ["dev"]

View file

@ -90,20 +90,20 @@ To create a new NPM release:
- Prepare version `package.json`, except patch (if anything should change here) - Prepare version `package.json`, except patch (if anything should change here)
- Run `bb npm-publish`: this will compile, bump patch version, create tag and and push to npm and Github - Run `bb npm-publish`: this will compile, bump patch version, create tag and and push to npm and Github
- `bb replace-version 0.6.16 0.7.28` - `bb replace-version 0.6.16 0.6.22`
- Create Github release with updated links from `doc/links.md` - Create Github release with updated links from `doc/links.md`
- `bb gh-pages` - `bb gh-pages`
<!-- To upgrade examples: --> <!-- To upgrade examples: -->
<!-- ``` --> <!-- ``` -->
<!-- rg '0.0.1' --files-with-matches | xargs sed -i '' 's/0.0.7.28.1.0/g' --> <!-- rg '0.0.1' --files-with-matches | xargs sed -i '' 's/0.0.6.22.1.0/g' -->
<!-- bb release --> <!-- bb release -->
<!-- cd gh-pages --> <!-- cd gh-pages -->
<!-- git checkout -b v0.7.28 --> <!-- git checkout -b v0.6.22 -->
<!-- git push --set-upstream origin v0.7.28 --> <!-- git push --set-upstream origin v0.6.22 -->
<!-- git checkout gh-pages --> <!-- git checkout gh-pages -->
<!-- cd .. --> <!-- cd .. -->
<!-- ``` --> <!-- ``` -->
<!-- Then make a new release on Github with the `v0.7.28` tag. --> <!-- Then make a new release on Github with the `v0.6.22` tag. -->

View file

@ -1,49 +0,0 @@
# Loading JS libraries
Since `v0.7.28` scittle allows to load libraries from the global enviroment.
This means you can load a library in a `<script>` tag and use it via `:require` in scittle.
An example:
``` html
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script src="https://cdn.jsdelivr.net/npm/js-confetti@latest/dist/js-confetti.browser.js"></script>
<script type="application/x-scittle">
(require '["JSConfetti" :as confetti])
(.addConfetti (confetti.))
</script>
</head>
<body>
</body>
</html>
```
## ES modules
The async nature of ES modules makes them a litte bit more difficult to work
with in scittle. You need to disable automatic evaluation of script tags first
using `scittle.core.disable_auto_eval()`. In a `module` type `<script>` tag you
can then load ES modules, attach them to the global object and manually invoke
`scittle.core.eval_script_tags();` when setup is completed.
``` html
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script>
<script>scittle.core.disable_auto_eval()</script>
<script type="module">
import confetti from "https://esm.sh/canvas-confetti@1.6.0"
globalThis.JSConfetti = confetti;
scittle.core.eval_script_tags();
</script>
<script type="application/x-scittle">
(require '["JSConfetti" :as confetti])
(confetti)
</script>
</head>
<body>
</body>
</html>
```

View file

@ -1,20 +1,7 @@
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js-interop.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.cljs-ajax.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.re-frame.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.promesa.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.replicant.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.promesa.js https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.nrepl.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.nrepl.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.js-interop.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.replicant.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.promesa.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.nrepl.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/dev/scittle.cljs-devtools.js

View file

@ -21,7 +21,7 @@ the normal routine:
``` html ``` html
<script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script> <script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.nrepl.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.nrepl.js" type="application/javascript"></script>
``` ```
Also include the CLJS file that you want to evaluate with nREPL: Also include the CLJS file that you want to evaluate with nREPL:
@ -42,16 +42,6 @@ you should be able evaluate expressions in `playground.cljs`. See a demo
Note that the nREPL server connection stays alive even after the browser window Note that the nREPL server connection stays alive even after the browser window
refreshes. refreshes.
### Custom host address
By default, the browser will connect to a websocket on the same host as it is loaded
from, using `window.location.hostname`. If you need something else you can specify
that setting the window variable `SCITTLE_NREPL_WEBSOCKET_HOST` like so:
``` html
<script>var SCITTLE_NREPL_WEBSOCKET_HOST = 'localhost';</script>
```
### CIDER ### CIDER
Choose `cider-connect-cljs`, select port `1339`, followed by the `nbb` REPL Choose `cider-connect-cljs`, select port `1339`, followed by the `nbb` REPL

View file

@ -1,6 +1,5 @@
{:deps {io.github.babashka/sci.nrepl {:deps {io.github.babashka/sci.nrepl
#_{:local/root "/Users/borkdude/dev/sci.nrepl"} {:git/sha "2f8a9ed2d39a1b09d2b4d34d95494b56468f4a23"}
{:git/sha "4f7f6d652a71b5bdc0c110313a4908d956e7a97d"}
io.github.babashka/http-server io.github.babashka/http-server
{:git/sha "b38c1f16ad2c618adae2c3b102a5520c261a7dd3"}} {:git/sha "b38c1f16ad2c618adae2c3b102a5520c261a7dd3"}}
:tasks {http-server {:doc "Starts http server for serving static files" :tasks {http-server {:doc "Starts http server for serving static files"

View file

@ -1,9 +1,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.js" type="application/javascript"></script>
<script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script> <script>var SCITTLE_NREPL_WEBSOCKET_PORT = 1340;</script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.nrepl.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.nrepl.js" type="application/javascript"></script>
<script type="application/x-scittle" src="playground.cljs"></script> <script type="application/x-scittle" src="playground.cljs"></script>
</head> </head>
<body> <body>

View file

@ -1,26 +0,0 @@
# Scittle in a service worker
You can use Scittle to bootstrap a ClojureScript based service worker.
Put the following code into e.g. `scittle-sw.js` to create a JavaScript based service worker, load Scittle, then fetch your script and eval it.
```javascript
importScripts("scittle.min.js");
const request = await fetch("sw.cljs");
const text = await request.text();
const result = scittle.core.eval_string(text);
```
Then load `scittle-sw.js` in your HTML:
```html
<script>
if('serviceWorker' in navigator)
navigator.serviceWorker.register('scittle-sw.js');
</script>
```
This will load `sw.cljs` and eval it in the context of the service worker.
A ready-made example can be found at [chr15m/scittle-template-serviceworker](https://github.com/chr15m/scittle-template-serviceworker).

4
package-lock.json generated
View file

@ -8,7 +8,7 @@
"react": "17.0.1", "react": "17.0.1",
"react-dom": "17.0.1" "react-dom": "17.0.1"
}, },
"version": "0.7.28" "version": "0.7.23"
}, },
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
@ -129,5 +129,5 @@
} }
} }
}, },
"version": "0.7.28" "version": "0.7.23"
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "scittle", "name": "scittle",
"version": "0.7.28", "version": "0.7.23",
"files": [ "files": [
"dist" "dist"
], ],

View file

@ -1,4 +1,3 @@
{:deps {:deps
{datascript/datascript {:mvn/version "1.3.12"} {datascript/datascript {:mvn/version "1.3.12"}
io.github.babashka/sci.configs {:git/sha "aa84a1b4f1fe45735e5b748769309fc842f737c1" io.github.babashka/sci.configs {:git/sha "33bd51e53700b224b4cb5bda59eb21b62f962745"}}}
:exclusions [org.babashka/sci]}}}

View file

@ -1,8 +0,0 @@
{:deps
{no.cjohansen/dataspex {:git/url "https://github.com/cjohansen/dataspex"
:git/sha "02112200651c2bd932907bb69fba1ff50b881741"
:exclusions [ring/ring-core
ring/ring-jetty-adapter
com.cognitect/transit-clj]}
io.github.babashka/sci.configs {:git/sha "aa84a1b4f1fe45735e5b748769309fc842f737c1"
:exclusions [org.babashka/sci]}}}

View file

@ -1,9 +0,0 @@
(ns scittle.dataspex
{:no-doc true}
(:require [sci.configs.cjohansen.dataspex :refer [config]]
[scittle.core :as scittle]))
(defn init []
(scittle/register-plugin!
::dataspex
config))

View file

@ -1,8 +0,0 @@
[{:name scittle/dataspex
:namespaces [dataspex.core]
:js "./scittle.dataspex.js"
:shadow-config
{:modules
{:scittle.dataspex {:init-fn scittle.dataspex/init
:depends-on #{:scittle :scittle.datascript}
:entries [dataspex.core]}}}}]

View file

@ -1,7 +1,6 @@
{:deps {io.github.babashka/scittle.build {:local/root "../../build"} {:deps {io.github.babashka/scittle.build {:local/root "../../build"}
;; datascript plugin ;; datascript plugin
; io.github.babashka/scittle.datascript {:local/root "../../plugins/datascript"} ; io.github.babashka/scittle.datascript {:local/root "../../plugins/datascript"}
io.github.babashka/scittle.dataspex {:local/root "../../plugins/dataspex"}
io.github.babashka/scittle.javelin {:local/root "../../plugins/javelin"} io.github.babashka/scittle.javelin {:local/root "../../plugins/javelin"}
io.github.babashka/scittle.hoplon {:local/root "../../plugins/hoplon"} io.github.babashka/scittle.hoplon {:local/root "../../plugins/hoplon"}
io.github.babashka/http-server io.github.babashka/http-server

View file

@ -1,4 +1,3 @@
{:deps {:deps
{hoplon/hoplon {:mvn/version "7.5.0"} {hoplon/hoplon {:mvn/version "7.5.0"}
io.github.babashka/sci.configs {:git/sha "aa84a1b4f1fe45735e5b748769309fc842f737c1" io.github.babashka/sci.configs {:git/sha "08bab21643bc0c63a5b99c65193c9d24888270b7"}}}
:exclusions [org.babashka/sci]}}}

View file

@ -1,4 +1,3 @@
{:deps {:deps
{hoplon/javelin {:mvn/version "3.9.3"} {hoplon/javelin {:mvn/version "3.9.3"}
io.github.babashka/sci.configs {:git/sha "aa84a1b4f1fe45735e5b748769309fc842f737c1" io.github.babashka/sci.configs {:git/sha "08bab21643bc0c63a5b99c65193c9d24888270b7"}}}
:exclusions [org.babashka/sci]}}}

View file

@ -13,13 +13,10 @@
path)) path))
(defn get-winning-path [{:keys [size tics]} y x] (defn get-winning-path [{:keys [size tics]} y x]
(let [flip-y (fn [y] (- size 1 y))] (or (winner? tics (mapv #(vector y %) (range 0 size)))
(or (winner? tics (mapv #(vector y %) (range 0 size))) (winner? tics (mapv #(vector % x) (range 0 size)))
(winner? tics (mapv #(vector % x) (range 0 size))) (when (= y x)
(when (= y x) (winner? tics (mapv #(vector % %) (range 0 size))))))
(winner? tics (mapv #(vector % %) (range 0 size))))
(when (= (flip-y y) x)
(winner? tics (mapv #(vector (flip-y %) %) (range 0 size)))))))
(defn maybe-conclude [game y x] (defn maybe-conclude [game y x]
(if-let [path (get-winning-path game y x)] (if-let [path (get-winning-path game y x)]

View file

@ -1,13 +1,13 @@
<html> <html>
<head> <head>
<script async src="https://ga.jspm.io/npm:es-module-shims@1.6.1/dist/es-module-shims.js"></script> <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.7.28/dist/scittle.js"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.js"></script>
<script>scittle.core.disable_auto_eval();</script> <script>scittle.core.disable_auto_eval();</script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js"> </script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.reagent.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.re-frame.js"> </script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.re-frame.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.promesa.js"> </script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.promesa.js"> </script>
<script type="importmap"> <script type="importmap">
{ {

View file

@ -1,7 +1,7 @@
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.js" type="application/javascript"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.cljs-ajax.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.cljs-ajax.js" type="application/javascript"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(require '[ajax.core :refer [GET]]) (require '[ajax.core :refer [GET]])

View file

@ -1,6 +1,6 @@
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.js" type="application/javascript"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(defn my-alert [] (defn my-alert []
(js/alert "You clicked!")) (js/alert "You clicked!"))

View file

@ -1,9 +1,9 @@
<html> <html>
<head> <head>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.js" type="application/javascript"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script> <script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js" type="application/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.22/dist/scittle.reagent.js" type="application/javascript"></script>
<script type="application/x-scittle"> <script type="application/x-scittle">
(require '[reagent.core :as r] (require '[reagent.core :as r]
'[reagent.dom :as rdom]) '[reagent.dom :as rdom])

View file

@ -87,7 +87,7 @@
To embed scittle in your website, it is recommended to use the links To embed scittle in your website, it is recommended to use the links
published to published to
the <a href="https://github.com/babashka/scittle/releases/tag/v0.7.28">releases the <a href="https://github.com/babashka/scittle/releases/tag/v0.6.22">releases
page</a>. page</a>.
Include <tt>scittle.js</tt> and write a <tt>script</tt> tag Include <tt>scittle.js</tt> and write a <tt>script</tt> tag
@ -160,12 +160,6 @@
(js/console.log "In cljs")) (js/console.log "In cljs"))
</code></pre> </code></pre>
<a name="JS libraries"></a>
<h2><a href="#js-libraries">JS libraries</a></h2>
To use JavaScript libraries with Scittle,
see <a href="https://github.com/babashka/scittle/blob/main/doc/js-libraries.md">README.md</a>
<a name="repl"></a> <a name="repl"></a>
<h2><a href="#nrepl">REPL</a></h2> <h2><a href="#nrepl">REPL</a></h2>

View file

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<script src="js/scittle.js" type="application/javascript"></script>
<script src="js/scittle.cljs-devtools.js" type="application/javascript"></script>
<script type="application/x-scittle">
(js/console.log {:a 1})
</script>
</head>
<body>
</body>
</html>

View file

@ -5,9 +5,9 @@
<script src="js/scittle.js" type="application/javascript"></script> <script src="js/scittle.js" type="application/javascript"></script>
<script src="js/scittle.replicant.js" type="application/javascript"></script> <script src="js/scittle.replicant.js" type="application/javascript"></script>
<script type="application/x-scittle" src="cljs/replicant_tictactoe/ui.cljs"></script> <script type="application/x-scittle" src="cljs/replicant-tictactoe/ui.cljs"></script>
<script type="application/x-scittle" src="cljs/replicant_tictactoe/game.cljs"></script> <script type="application/x-scittle" src="cljs/replicant-tictactoe/game.cljs"></script>
<script type="application/x-scittle" src="cljs/replicant_tictactoe/core.cljs"></script> <script type="application/x-scittle" src="cljs/replicant-tictactoe/core.cljs"></script>
<link rel="stylesheet" href="cljs/replicant-tictactoe/style.css"> <link rel="stylesheet" href="cljs/replicant-tictactoe/style.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/highlight.min.js" type="text/javascript"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.7.2/highlight.min.js" type="text/javascript"></script>
@ -25,9 +25,9 @@
from <a href="cljs/replicant_tictactoe/core.cljs"><tt>cljs/replicant_tictactoe/core.cljs</tt></a> using the from <a href="cljs/replicant_tictactoe/core.cljs"><tt>cljs/replicant_tictactoe/core.cljs</tt></a> using the
script tag: script tag:
<pre><code class="html"> <pre><code class="html">
&lt;script type=&quot;application/x-scittle&quot; src=&quot;cljs/replicant_tictactoe/ui.cljs&quot;&gt;&lt;/script&gt; &lt;script type=&quot;application/x-scittle&quot; src=&quot;cljs/replicant-tictactoe/ui.cljs&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;application/x-scittle&quot; src=&quot;cljs/replicant_tictactoe/game.cljs&quot;&gt;&lt;/script&gt; &lt;script type=&quot;application/x-scittle&quot; src=&quot;cljs/replicant-tictactoe/game.cljs&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;application/x-scittle&quot; src=&quot;cljs/replicant_tictactoe/core.cljs&quot;&gt;&lt;/script&gt; &lt;script type=&quot;application/x-scittle&quot; src=&quot;cljs/replicant-tictactoe/core.cljs&quot;&gt;&lt;/script&gt;
</code></pre> </code></pre>
</p> </p>
@ -39,7 +39,7 @@
(.highlightAll js/hljs))) (.highlightAll js/hljs)))
(def oreq (js/XMLHttpRequest.)) (def oreq (js/XMLHttpRequest.))
(.addEventListener oreq "load" set-text) (.addEventListener oreq "load" set-text)
(.open oreq "GET" "cljs/replicant_tictactoe/core.cljs") (.open oreq "GET" "cljs/replicant-tictactoe/core.cljs")
(.send oreq) (.send oreq)
</script> </script>
</body> </body>

View file

@ -65,8 +65,8 @@
{:replace-existing true})) {:replace-existing true}))
(fs/glob cljs-source-dir "*.cljs")) (fs/glob cljs-source-dir "*.cljs"))
(println "Copying dir resources/public/cljs/replicant_tictactoe") (println "Copying dir resources/public/cljs/replicant-tictactoe")
(fs/copy-tree (fs/file cljs-source-dir "replicant_tictactoe") (fs/file cljs-target-dir "replicant_tictactoe") {:replace-existing true}) (fs/copy-tree (fs/file cljs-source-dir "replicant-tictactoe") (fs/file cljs-target-dir "replicant-tictactoe") {:replace-existing true})
(run! (fn [f] (run! (fn [f]
(println "Copying" (str f)) (println "Copying" (str f))

View file

@ -6,14 +6,7 @@
:builds :builds
{:main {:main
{;:compiler-options {:source-map true} {:target :browser
;; for dev build
#_#_
:compiler-options {:optimizations :simple
:pretty-print true
:pseudo-names true
:source-map true}
:target :browser
:js-options :js-options
{:resolve {"react" {:target :global {:resolve {"react" {:target :global
:global "React"} :global "React"}
@ -39,6 +32,5 @@
:scittle.cljs-ajax {:entries [scittle.cljs-ajax] :scittle.cljs-ajax {:entries [scittle.cljs-ajax]
:depends-on #{:scittle}}} :depends-on #{:scittle}}}
:build-hooks [(shadow.cljs.build-report/hook)] :build-hooks [(shadow.cljs.build-report/hook)]
:output-dir "resources/public/js" ;; + "/dev" for dev build :output-dir "resources/public/js"
:devtools {:repl-pprint true} :devtools {:repl-pprint true}}}}
}}}

View file

@ -1,6 +0,0 @@
(ns scittle.cljs-devtools
(:require [devtools.core :as devtools]))
(devtools/set-pref! :disable-advanced-mode-check true)
(devtools/install!)

View file

@ -3,7 +3,6 @@
(:require [cljs.reader :refer [read-string]] (:require [cljs.reader :refer [read-string]]
[goog.object :as gobject] [goog.object :as gobject]
[goog.string :as gstring] [goog.string :as gstring]
[goog.string.format]
[sci.core :as sci] [sci.core :as sci]
[sci.ctx-store :as store] [sci.ctx-store :as store]
[sci.impl.unrestrict] [sci.impl.unrestrict]
@ -44,29 +43,20 @@
'NaN? (sci/copy-var NaN? cljns) 'NaN? (sci/copy-var NaN? cljns)
'infinite? (sci/copy-var infinite? cljns) 'infinite? (sci/copy-var infinite? cljns)
'iteration (sci/copy-var iteration cljns) 'iteration (sci/copy-var iteration cljns)
'abs (sci/copy-var abs cljns) 'abs (sci/copy-var abs cljns)}
'Cons cljs.core/Cons}
'goog.object {'set gobject/set 'goog.object {'set gobject/set
'get gobject/get} 'get gobject/get}
'goog.string {'format gstring/format 'goog.string {'htmlEscape gstring/htmlEscape}
'htmlEscape gstring/htmlEscape}
'goog.string.format {} ;; For cljs compatibility
'sci.core {'stacktrace sci/stacktrace 'sci.core {'stacktrace sci/stacktrace
'format-stacktrace sci/format-stacktrace}}) 'format-stacktrace sci/format-stacktrace}})
(defn load-fn [{:keys [ctx] :as opts}]
(when-let [lib (and (string? (:namespace opts))
(gobject/get js/globalThis (:namespace opts)))]
(sci/add-js-lib! ctx (:namespace opts) lib)))
(store/reset-ctx! (store/reset-ctx!
(sci/init {:namespaces namespaces (sci/init {:namespaces namespaces
:classes {'js js/globalThis :classes {'js js/globalThis
:allow :all :allow :all
'Math js/Math} 'Math js/Math}
:ns-aliases {'clojure.pprint 'cljs.pprint} :ns-aliases {'clojure.pprint 'cljs.pprint}
:features #{:scittle :cljs} :features #{:scittle :cljs}}))
:load-fn load-fn}))
(unchecked-set js/globalThis "import" (js/eval "(x) => import(x)")) (unchecked-set js/globalThis "import" (js/eval "(x) => import(x)"))

View file

@ -8,11 +8,10 @@
(when-let [ws-port (.-SCITTLE_NREPL_WEBSOCKET_PORT js/window)] (when-let [ws-port (.-SCITTLE_NREPL_WEBSOCKET_PORT js/window)]
(set! (.-ws_nrepl js/window) (set! (.-ws_nrepl js/window)
(new js/WebSocket (ws-url (or (.-SCITTLE_NREPL_WEBSOCKET_HOST js/window) (new js/WebSocket (ws-url (.-hostname (.-location js/window)) ws-port "_nrepl"))))
(.-hostname (.-location js/window)))
ws-port "_nrepl"))))
(when-let [ws (nrepl-server/nrepl-websocket)] (when-let [ws (nrepl-server/nrepl-websocket)]
(prn :ws ws)
(set! (.-onmessage ws) (set! (.-onmessage ws)
(fn [event] (fn [event]
(nrepl-server/handle-nrepl-message (edn/read-string (.-data event))))) (nrepl-server/handle-nrepl-message (edn/read-string (.-data event)))))