(deftag :js-require (&rest dojo-packages) `(:script :type "text/javascript" (js (prog ,@(mapcar (fn (dojo-package) `(dojo.require ,(^dojo-package-string dojo-package))) dojo-packages)))))
(deftag :js (&rest body) `(:script :type "text/javascript" (js (prog ,@body))))
(deftag :js-src (&rest sources) `(:progn ,@(mapcar (fn (source) `(:script :type "text/javascript" :src ,(^html-string source))) sources)))
(deftag :js-init (&rest body) `(:js (function init () ,@body) (dojo.addOnLoad init)))
(deftag :js-down (&rest body) `(:js (function clean-up () ,@body) (dojo.addUnLoad clean-up)))