mirror of https://github.com/status-im/reagent.git
Generalize the experimental js importing
This commit is contained in:
parent
36c48c0ea2
commit
67a88fce24
|
@ -49,7 +49,38 @@
|
||||||
(assert field (str "Field name must start with - in " field))
|
(assert field (str "Field name must start with - in " field))
|
||||||
`(aset ~object ~@names ~value)))
|
`(aset ~object ~@names ~value)))
|
||||||
|
|
||||||
(def react-import-ns (atom nil))
|
(def js-imports (atom nil))
|
||||||
|
|
||||||
|
(defmacro import-js
|
||||||
|
[dev-src min-src sym-name]
|
||||||
|
(assert (string? dev-src))
|
||||||
|
(assert (string? min-src))
|
||||||
|
(assert (string? sym-name))
|
||||||
|
(let [impns (get @js-imports sym-name)]
|
||||||
|
(if (and (not (nil? impns))
|
||||||
|
(not= *ns* impns))
|
||||||
|
;; Our symbol was already imported in another namespace; so we avoid
|
||||||
|
;; duplicate imports.
|
||||||
|
true
|
||||||
|
(let [srcfile (if *assert* dev-src min-src)
|
||||||
|
sym sym-name
|
||||||
|
src (slurp (io/resource srcfile))]
|
||||||
|
(swap! js-imports assoc sym-name *ns*)
|
||||||
|
`(js/eval ~(str "if (typeof " sym " != 'undefined' && "
|
||||||
|
"typeof console != 'undefined') { "
|
||||||
|
"console.log('" sym " is already defined'); "
|
||||||
|
"} else { (function (exports, module) { "
|
||||||
|
src "; \n
|
||||||
|
if (typeof " sym " === 'undefined' && "
|
||||||
|
"typeof console != 'undefined') { "
|
||||||
|
"console.log('" sym " not defined in " srcfile "');
|
||||||
|
}
|
||||||
|
if (typeof global != 'undefined') {
|
||||||
|
global." sym " = " sym ";
|
||||||
|
} else if (typeof window != 'undefined') {
|
||||||
|
window." sym " = " sym ";
|
||||||
|
} })(); } \n
|
||||||
|
//@ sourceURL=" srcfile "\n"))))))
|
||||||
|
|
||||||
(defmacro import-react
|
(defmacro import-react
|
||||||
[]
|
[]
|
||||||
|
@ -58,28 +89,7 @@
|
||||||
(or adding react.js in a script tag). This may be more convenient when
|
(or adding react.js in a script tag). This may be more convenient when
|
||||||
using :optimizations :none, since that doesn't take :preamble into account.
|
using :optimizations :none, since that doesn't take :preamble into account.
|
||||||
Imports minimized version of React if :elide-asserts is true."
|
Imports minimized version of React if :elide-asserts is true."
|
||||||
(if-not (or (nil? @react-import-ns)
|
`(import-js "reagent/react.js" "reagent/react.min.js" "React"))
|
||||||
(= *ns* @react-import-ns))
|
|
||||||
;; React was already imported in another namespace; so we avoid
|
|
||||||
;; duplicate imports.
|
|
||||||
true
|
|
||||||
(let [srcfile (if *assert* "reagent/react.js"
|
|
||||||
"reagent/react.min.js")
|
|
||||||
src (slurp (io/resource srcfile))]
|
|
||||||
(if (nil? @react-import-ns)
|
|
||||||
(reset! react-import-ns *ns*))
|
|
||||||
`(js/eval ~(str "if (typeof React != 'undefined' &&
|
|
||||||
typeof console != 'undefined') {
|
|
||||||
console.log('WARNING: React is already defined');
|
|
||||||
}"
|
|
||||||
src "; \n"
|
|
||||||
"if (typeof module != 'undefined' &&
|
|
||||||
typeof global != 'undefined' &&
|
|
||||||
module.exports && module.exports.DOM) {
|
|
||||||
global.React = module.exports;
|
|
||||||
} \n
|
|
||||||
//@ sourceURL=" srcfile "\n")))))
|
|
||||||
|
|
||||||
|
|
||||||
(defmacro fvar
|
(defmacro fvar
|
||||||
[f]
|
[f]
|
||||||
|
|
Loading…
Reference in New Issue