api-macros.lisp
46 lines
| 1.2 KiB
| text/x-common-lisp
|
CommonLispLexer
/ src / api-macros.lisp
r25 | ||||
r49 | (in-package txt2web.api) | |||
r25 | ||||
(defpsmacro with-call-args (args &body body) | ||||
`(progn | ||||
(init-args ,args) | ||||
,@body | ||||
(get-result))) | ||||
(defpsmacro with-frame (&body body) | ||||
`(progn | ||||
(push-local-frame) | ||||
(unwind-protect | ||||
,@body | ||||
(pop-local-frame)))) | ||||
r30 | ||||
r32 | (defpsmacro href-call (func &rest args) | |||
`(+ "javascript:" (inline-call ,func ,@args))) | ||||
r30 | (defpsmacro inline-call (func &rest args) | |||
r33 | `(+ ',func | |||
r30 | "(\"" | |||
,(first args) | ||||
,@(loop :for arg :in (cdr args) | ||||
:collect "\", \"" | ||||
:collect arg) | ||||
"\");")) | ||||
(defpsmacro with-sleep ((resume-func) &body body) | ||||
`(new (*promise | ||||
(lambda (resolve) | ||||
(start-sleeping) | ||||
(let ((,resume-func (lambda () | ||||
(finish-sleeping) | ||||
(resolve))))) | ||||
,@body)))) | ||||
r42 | (defvar *serv-vars* nil) | |||
(defpsmacro define-serv-var (name (value &optional index) &body body) | ||||
r32 | (setf name (string-upcase (symbol-name name))) | |||
r42 | (pushnew name *serv-vars* :test #'equal) | |||
r33 | `(setf (getprop serv-vars ,name) | |||
r32 | (create :name ,name | |||
:body (lambda (,value ,@(when index (list index))) | ||||
,@body)))) | ||||