Compare commits

..

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

19 changed files with 57 additions and 85 deletions

View file

@ -9,13 +9,6 @@
<!-- - Create Github release with updated links from `doc/links.md` -->
<!-- - `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

View file

@ -50,7 +50,6 @@ release Updates Github pages with new release build.
## Credits
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

View file

@ -1,9 +1,9 @@
{:paths ["src" "resources"]
: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"}
org.babashka/sci {:git/url "https://github.com/babashka/sci"
:git/sha "6758ba028da559c536a06becbbedade7b0ba6448"}
:git/sha "893fc8394dafe6c76bed69a5685c59f35dd189db"}
#_{:local/root "../babashka/sci"}
reagent/reagent {:mvn/version "1.1.1"}
no.cjohansen/replicant {:mvn/version "2025.03.27"}

View file

@ -90,20 +90,20 @@ To create a new NPM release:
- 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
- `bb replace-version 0.6.16 0.7.28`
- `bb replace-version 0.6.16 0.7.26`
- Create Github release with updated links from `doc/links.md`
- `bb gh-pages`
<!-- 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.7.26.1.0/g' -->
<!-- bb release -->
<!-- cd gh-pages -->
<!-- git checkout -b v0.7.28 -->
<!-- git push --set-upstream origin v0.7.28 -->
<!-- git checkout -b v0.7.26 -->
<!-- git push --set-upstream origin v0.7.26 -->
<!-- git checkout gh-pages -->
<!-- cd .. -->
<!-- ``` -->
<!-- Then make a new release on Github with the `v0.7.28` tag. -->
<!-- Then make a new release on Github with the `v0.7.26` tag. -->

View file

@ -1,14 +1,14 @@
# Loading JS libraries
Since `v0.7.28` scittle allows to load libraries from the global enviroment.
Since `v0.7.27` 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:
An example. Replace `js/scittle.js` with a CDN version
``` 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/scittle@0.7.27/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])
@ -31,7 +31,7 @@ can then load ES modules, attach them to the global object and manually invoke
``` 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/scittle@0.7.27/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"

View file

@ -1,20 +1,20 @@
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.js-interop.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.replicant.js
https://cdn.jsdelivr.net/npm/scittle@0.7.28/dist/scittle.promesa.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.26/dist/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.js-interop.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.replicant.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.promesa.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/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
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.js-interop.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.cljs-ajax.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.reagent.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.re-frame.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.replicant.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.promesa.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.pprint.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.nrepl.js
https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/dev/scittle.cljs-devtools.js

View file

@ -21,7 +21,7 @@ the normal routine:
``` html
<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.7.26/dist/scittle.nrepl.js" type="application/javascript"></script>
```
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
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
Choose `cider-connect-cljs`, select port `1339`, followed by the `nbb` REPL

View file

@ -1,9 +1,9 @@
<!DOCTYPE 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/scittle@0.7.26/dist/scittle.js" type="application/javascript"></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.7.26/dist/scittle.nrepl.js" type="application/javascript"></script>
<script type="application/x-scittle" src="playground.cljs"></script>
</head>
<body>

4
package-lock.json generated
View file

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

View file

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

View file

@ -13,13 +13,10 @@
path))
(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)))
(winner? tics (mapv #(vector % x) (range 0 size)))
(when (= y x)
(winner? tics (mapv #(vector % %) (range 0 size))))
(when (= (flip-y y) x)
(winner? tics (mapv #(vector (flip-y %) %) (range 0 size)))))))
(or (winner? tics (mapv #(vector y %) (range 0 size)))
(winner? tics (mapv #(vector % x) (range 0 size)))
(when (= y x)
(winner? tics (mapv #(vector % %) (range 0 size))))))
(defn maybe-conclude [game y x]
(if-let [path (get-winning-path game y x)]

View file

@ -1,13 +1,13 @@
<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.7.28/dist/scittle.js"></script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.js"></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-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.7.28/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.7.26/dist/scittle.reagent.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.re-frame.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/scittle@0.7.26/dist/scittle.promesa.js"> </script>
<script type="importmap">
{

View file

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

View file

@ -1,6 +1,6 @@
<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/scittle@0.7.26/dist/scittle.js" type="application/javascript"></script>
<script type="application/x-scittle">
(defn my-alert []
(js/alert "You clicked!"))

View file

@ -1,9 +1,9 @@
<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/scittle@0.7.26/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-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.7.26/dist/scittle.reagent.js" type="application/javascript"></script>
<script type="application/x-scittle">
(require '[reagent.core :as r]
'[reagent.dom :as rdom])

View file

@ -87,7 +87,7 @@
To embed scittle in your website, it is recommended to use the links
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.7.26">releases
page</a>.
Include <tt>scittle.js</tt> and write a <tt>script</tt> tag

View file

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

View file

@ -44,8 +44,7 @@
'NaN? (sci/copy-var NaN? cljns)
'infinite? (sci/copy-var infinite? cljns)
'iteration (sci/copy-var iteration cljns)
'abs (sci/copy-var abs cljns)
'Cons cljs.core/Cons}
'abs (sci/copy-var abs cljns)}
'goog.object {'set gobject/set
'get gobject/get}
'goog.string {'format gstring/format

View file

@ -8,9 +8,7 @@
(when-let [ws-port (.-SCITTLE_NREPL_WEBSOCKET_PORT js/window)]
(set! (.-ws_nrepl js/window)
(new js/WebSocket (ws-url (or (.-SCITTLE_NREPL_WEBSOCKET_HOST js/window)
(.-hostname (.-location js/window)))
ws-port "_nrepl"))))
(new js/WebSocket (ws-url (.-hostname (.-location js/window)) ws-port "_nrepl"))))
(when-let [ws (nrepl-server/nrepl-websocket)]
(set! (.-onmessage ws)