Thank you to all for the detailed answers! This was very helpful. I was searching a very light solution. The solutions like squint are still too heavy. My html files have only a very few lines of JavaScript. Mostly one-liners that set a variable to something or call something.
I decided now to write my own Clojure syntax for JavaScript, which is converted to a string by functions and a macro. In case someone is interested, I paste here my draft.
(defn js+ [a b]
(concat ["("] a ["+"] b [")"]))
(defn js- [a b]
(concat ["("] a ["-"] b [")"]))
(defn jsdef [from to]
(concat from ["="] to [";"]))
(defn jsdefn [name arguments & body]
(concat ["function "] name ["("] [(clojure.string/join "," arguments)] ["){"] (apply concat body) ["}"]))
(defn jscall [name & arguments]
(concat name ["("] (clojure.string/join "," (apply concat arguments)) [")"]))
(defn into-js [code]
(cond (number? code) [(str code)]
(symbol? code) [(str code)]
(vector? code) (apply concat (map into-js code))
(list? code) (if (= (first code) 'clj)
[(second code)]
(let [js-operation (->> code first (str "js") symbol resolve)]
(apply js-operation (map into-js (rest code)))))
:else :error))
(defmacro js [& code]
(let [translate-statement (fn tranlate-statement [statement]
`(str ~@(into-js statement)))]
`(str ~@(map translate-statement code))))
;; Example
(def b 15)
(js (defn my_func [x y]
(def tmp (+ x (clj b)))
(def store tmp))
(call my_func 3 4))
; => "function my_func(x,y){tmp=(x+15);store=tmp;}my_func(3,4)"